[jit] Add tests for arm64 gsharedvt argument passing.
authorZoltan Varga <vargaz@gmail.com>
Mon, 16 Feb 2015 20:20:11 +0000 (15:20 -0500)
committerZoltan Varga <vargaz@gmail.com>
Mon, 16 Feb 2015 20:20:17 +0000 (15:20 -0500)
mono/mini/gshared.cs

index d0ee4fac40dcf89a0cfa392493aba69e6847775b..3feb22cc629caee2dc6738797e4a72e4f88bb1cf 100644 (file)
@@ -1575,6 +1575,75 @@ public class Tests
                        return 1;
                return 0;
        }
+
+       struct EmptyStruct {
+       }
+
+       interface IFoo3<T> {
+               int Bytes (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
+                                  byte b1, byte b2, byte b3, byte b4, byte b5, byte b6, byte b7, byte b8);
+               int SBytes (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
+                                       sbyte b1, sbyte b2, sbyte b3, sbyte b4);
+               int Shorts (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
+                                       short b1, short b2, short b3, short b4);
+               int UShorts (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
+                                       ushort b1, ushort b2, ushort b3, ushort b4);
+               int Ints (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
+                                 int i1, int i2, int i3, int i4);
+               int UInts (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
+                                  uint i1, uint i2, uint i3, uint i4);
+       }
+
+       class Foo3<T> : IFoo3<T> {
+               public int Bytes (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
+                                                 byte b1, byte b2, byte b3, byte b4, byte b5, byte b6, byte b7, byte b8) {
+                       return b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8;
+               }
+               public int SBytes (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
+                                                 sbyte b1, sbyte b2, sbyte b3, sbyte b4) {
+                       return b1 + b2 + b3 + b4;
+               }
+               public int Shorts (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
+                                                  short b1, short b2, short b3, short b4) {
+                       return b1 + b2 + b3 + b4;
+               }
+               public int UShorts (T t, int dummy1, int a2, int a3, int a4, int a5, int a6, int a7, int dummy8,
+                                                       ushort b1, ushort b2, ushort b3, ushort b4) {
+                       return b1 + b2 + b3 + b4;
+               }
+               public int Ints (T t, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8,
+                                                  int i1, int i2, int i3, int i4) {
+                       return i1 + i2 + i3 + i4;
+               }
+               public int UInts (T t, int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8,
+                                                 uint i1, uint i2, uint i3, uint i4) {
+                       return (int)(i1 + i2 + i3 + i4);
+               }
+       }
+
+       // Passing small normal arguments on the stack
+       public static int test_0_arm64_small_stack_args () {
+               IFoo3<EmptyStruct> o = (IFoo3<EmptyStruct>)Activator.CreateInstance (typeof (Foo3<>).MakeGenericType (new Type [] { typeof (EmptyStruct) }));
+               int res = o.Bytes (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8);
+               if (res != 36)
+                       return 1;
+               int res2 = o.SBytes (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, -1, -2, -3, -4);
+               if (res2 != -10)
+                       return 2;
+               int res3 = o.Shorts (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, -1, -2, -3, -4);
+               if (res3 != -10)
+                       return 3;
+               int res4 = o.UShorts (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4);
+               if (res4 != 10)
+                       return 4;
+               int res5 = o.Ints (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, -1, -2, -3, -4);
+               if (res5 != -10)
+                       return 5;
+               int res6 = o.UInts (new EmptyStruct (), 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4);
+               if (res6 != 10)
+                       return 6;
+               return 0;
+       }
 }
 
 // #13191