X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fbasic-calls.cs;h=d6bd503a954367d02848eb1a58c9430118550352;hb=3fa714d92208ba69e12bb18b56dd518eb91d606a;hp=08d43d548ec9e210479294eb26a8142475df0a99;hpb=82a90c9311b1897d545ad2d8563c2e814ac3b636;p=mono.git diff --git a/mono/mini/basic-calls.cs b/mono/mini/basic-calls.cs index 08d43d548ec..d6bd503a954 100644 --- a/mono/mini/basic-calls.cs +++ b/mono/mini/basic-calls.cs @@ -6,7 +6,7 @@ using System.Reflection; * * Each test needs to be of the form: * - * static int test__ (); + * public static int test__ (); * * where is an integer (the value that needs to be returned by * the method to make it pass. @@ -23,28 +23,16 @@ using System.Reflection; * the IL code looks. */ -struct Alpha { - public long a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v; -} - -struct Beta { - public Alpha a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v; -} - -struct Gamma { - public Beta a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v; -} - class Tests { - static int Main () { - return TestDriver.RunTests (typeof (Tests)); + public static int Main (string[] args) { + return TestDriver.RunTests (typeof (Tests), args); } static void dummy () { } - static int test_0_return () { + public static int test_0_return () { dummy (); return 0; } @@ -53,7 +41,7 @@ class Tests { return 1; } - static int test_2_int_return () { + public static int test_2_int_return () { int r = dummy1 (); if (r == 1) return 2; @@ -64,7 +52,7 @@ class Tests { return val + 1; } - static int test_1_int_pass () { + public static int test_1_int_pass () { int r = add1 (5); if (r == 6) return 1; @@ -75,7 +63,7 @@ class Tests { return val + t + b + da; } - static int test_1_int_pass_many () { + public static int test_1_int_pass_many () { byte b = 6; int r = add_many (5, 2, b, 1); if (r == 14) @@ -93,7 +81,7 @@ class Tests { } /* bug #42134 */ - static int test_2_inline_saved_arg_type () { + public static int test_2_inline_saved_arg_type () { float f = 100.0f; return GetFloat (f) == f? 2: 1; } @@ -102,7 +90,7 @@ class Tests { return a + (int)b + c + (int)d; } - static int test_5_pass_longs () { + public static int test_5_pass_longs () { return pass_many_types (1, 2, -5, 7); } @@ -110,7 +98,7 @@ class Tests { return a+b+c+d+e+f+g+h+i+j; } - static int test_55_pass_even_more () { + public static int test_55_pass_even_more () { return overflow_registers (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); } @@ -118,7 +106,7 @@ class Tests { return (int)(a + b + c + d + e + f + g); } - static int test_1_sparc_argument_passing () { + public static int test_1_sparc_argument_passing () { // The 4. argument tests split reg/mem argument passing // The 5. argument tests mem argument passing // The 7. argument tests passing longs in misaligned memory @@ -130,7 +118,7 @@ class Tests { return (int)(a + b + c + d + e + f + g); } - static int test_21_sparc_byte_argument_passing () { + public static int test_21_sparc_byte_argument_passing () { return pass_bytes (0, 1, 2, 3, 4, 5, 6); } @@ -138,7 +126,7 @@ class Tests { return (int)(a + b + c + d + e + f + g); } - static int test_21_sparc_sbyte_argument_passing () { + public static int test_21_sparc_sbyte_argument_passing () { return pass_sbytes (0, 1, 2, 3, 4, 5, 6); } @@ -146,7 +134,7 @@ class Tests { return (int)(a + b + c + d + e + f + g); } - static int test_21_sparc_short_argument_passing () { + public static int test_21_sparc_short_argument_passing () { return pass_shorts (0, 1, 2, 3, 4, 5, 6); } @@ -154,7 +142,7 @@ class Tests { return (int)(a + b + c + d + e + f + g); } - static int test_721_sparc_float_argument_passing () { + public static int test_721_sparc_float_argument_passing () { return pass_floats_doubles (100.0f, 101.0, 102.0, 103.0, 104.0, 105.0f, 106.0); } @@ -162,7 +150,7 @@ class Tests { return a + b + c + d + e + f + g + h + i + j; } - static int test_55_sparc_float_argument_passing2 () { + public static int test_55_sparc_float_argument_passing2 () { return (int)pass_floats (1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f); } @@ -172,7 +160,7 @@ class Tests { return d - d2 < 0.000001; } - static int test_0_float_argument_passing_precision () { + public static int test_0_float_argument_passing_precision () { float f = 7.183757E-41f; return is_small (f) ? 0 : 1; } @@ -188,7 +176,7 @@ class Tests { // Test that arguments are moved to the stack from incoming registers // when the argument must reside in the stack because its address is taken - static int test_2_sparc_takeaddr_argument_passing () { + public static int test_2_sparc_takeaddr_argument_passing () { return pass_takeaddr_ints_longs (1, 2, 253, -253, System.Int64.MaxValue, 0, System.Int64.MinValue); } @@ -200,7 +188,7 @@ class Tests { return pass_byref_floats_doubles (ref a, ref b, ref c, ref d, ref e, ref f, ref g); } - static int test_721_sparc_takeaddr_argument_passing2 () { + public static int test_721_sparc_takeaddr_argument_passing2 () { return pass_takeaddr_floats_doubles (100.0f, 101.0, 102.0, 103.0, 104.0, 105.0f, 106.0); } @@ -209,7 +197,7 @@ class Tests { } // Test byref double argument passing - static int test_0_sparc_byref_double_argument_passing () { + public static int test_0_sparc_byref_double_argument_passing () { double d; pass_byref_double (out d); return (d == 5.0) ? 0 : 1; @@ -222,7 +210,7 @@ class Tests { } // Test that assignment to long arguments work - static int test_0_long_arg_assign () + public static int test_0_long_arg_assign () { ulong c = 0x800000ff00000000; @@ -236,7 +224,7 @@ class Tests { return ptr; } - static unsafe int test_0_ptr_return () + public static unsafe int test_0_ptr_return () { void *ptr = new IntPtr (55).ToPointer (); @@ -250,7 +238,7 @@ class Tests { return (f != f); } - static int test_0_isnan () { + public static int test_0_isnan () { float f = 1.0f; return isnan (f) ? 1 : 0; } @@ -260,7 +248,7 @@ class Tests { return -1; return v2; } - static int test_1_handle_dup_stloc () { + public static int test_1_handle_dup_stloc () { int index = 0; int val = first_is_zero (index, ++index); if (val != 1) @@ -288,58 +276,38 @@ class Tests { return 0; } - static void doit (double value, out long m) { - m = (long) value; + public static void use_long_arg (ulong l) { + for (int i = 0; i < 10; ++i) + l ++; } - public static int test_0_ftol_clobber () { - long m; - doit (1.3, out m); - if (m != 1) - return 2; - return 0; - } + public static ulong return_long_arg (object o, ulong perm) { + use_long_arg (perm); - static void InitMe (out Gamma noMercyWithTheStack) { - noMercyWithTheStack = new Gamma (); - } + perm = 0x8000000000000FFF; - static int FunNoInline () { - int x = 99; - if (x > 344 && x < 22) - throw new Exception ("333"); - return x; - } + use_long_arg (perm); - static float DoNothingButDontInline (float a, int b) { - if (b > 0) - return a; - else if (b < 0 && b > 10) - throw new Exception ("444"); - return a; + return perm; } - /* - * The local register allocator emits loadr8_membase and storer8_membase - * to do spilling. This code is generated after mono_arch_lowering_pass so - * mono_arch_output_basic_block must know how to deal with big offsets. - * This only happens because the call in middle forces the temp for "(float)obj" - * to be spilled. - */ - static int test_0_float_load_and_store_with_big_offset () - { - object obj = 1.0f; - Gamma noMercyWithTheStack; - float res; + public static int test_0_sparc_long_ret_regress_541577 () { + ulong perm = 0x8000000000000FFF; - InitMe (out noMercyWithTheStack); + ulong work = return_long_arg (null, perm); - res = DoNothingButDontInline ((float)obj, FunNoInline ()); + return work == perm ? 0 : 1; + } - if (!(res == 1.0f)) { - Console.WriteLine ("invalid number {0}", res); - return 1; - } + static void doit (double value, out long m) { + m = (long) value; + } + + public static int test_0_ftol_clobber () { + long m; + doit (1.3, out m); + if (m != 1) + return 2; return 0; } }