diff options
Diffstat (limited to 'tests/src/JIT/opt/perf/doublealign/locals.cs')
-rw-r--r-- | tests/src/JIT/opt/perf/doublealign/locals.cs | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/tests/src/JIT/opt/perf/doublealign/locals.cs b/tests/src/JIT/opt/perf/doublealign/locals.cs new file mode 100644 index 0000000000..c3a9581b2b --- /dev/null +++ b/tests/src/JIT/opt/perf/doublealign/locals.cs @@ -0,0 +1,127 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +using System; +using System.Runtime.CompilerServices; + +public class CMyException : System.Exception +{ +} + +public class CTest +{ + [MethodImplAttribute(MethodImplOptions.NoInlining)] + private static void UseShort(short x) + { + } + + [MethodImplAttribute(MethodImplOptions.NoInlining)] + private static void UseByte(byte x) + { + } + + + [MethodImplAttribute(MethodImplOptions.NoInlining)] + private static unsafe void CheckDoubleAlignment(double* p) + { + if (((int)p % sizeof(double)) != 0) + throw new CMyException(); + } + + [MethodImplAttribute(MethodImplOptions.NoInlining)] + private static unsafe void TestLocals1(short a, double b, byte c, double d) + { + short i16; + double d1; + byte i8; + double d2; + + i16 = a; + i8 = c; + d1 = b; + d2 = d; + + CheckDoubleAlignment(&d1); + CheckDoubleAlignment(&d2); + + i16 += (short)d1; + i8 += (byte)d2; + + UseShort(i16); + UseByte(i8); + } + + [MethodImplAttribute(MethodImplOptions.NoInlining)] + private static unsafe void TestLocals2(short a, double b, byte c, double d) + { + char c1; + double d1; + CMyException e1 = new CMyException(); + byte b1; + short s1; + double d2; + int[] a1 = new int[1]; + int i1; + int i2; + int i3; + int i4; + int i5; + double d3; + byte b3; + byte b5; + double d5; + sbyte b4 = 5; + double d6; + int i6; + + c1 = (char)a; + b1 = b3 = c; + d1 = b; + d2 = d; + d3 = d1 + d2; + d5 = d1 * 3; + i1 = a; + i2 = c; + i3 = a + c; + i4 = a - c; + i5 = i1--; + i6 = i3 * i4; + s1 = (short)(a + 5); + b4 += (sbyte)c; + + byte b2 = (byte)-b1; + double d4 = d3 / 2; + b5 = (byte)b; + d6 = b1++; + + CheckDoubleAlignment(&d1); + CheckDoubleAlignment(&d2); + CheckDoubleAlignment(&d3); + CheckDoubleAlignment(&d4); + CheckDoubleAlignment(&d5); + CheckDoubleAlignment(&d6); + + b3 -= (byte)(d5 * b4 - b5); + s1 += (short)(d1 + d6 - (i1 + i2 + i3 + i4 + i5 + i6)); + b1 += (byte)(b3 + d2 - (i1 * 3 + i2 - i3 - i4 * i5 - (i6 >> 2))); + + UseShort(s1); + UseByte(b1); + } + + public static int Main() + { + try + { + TestLocals1(1, 2, 3, 4); + TestLocals2(1, 2, 3, 4); + } + catch (CMyException) + { + Console.WriteLine("FAILED"); + return 101; + } + Console.WriteLine("PASSED"); + return 100; + } +} |