2008-09-07 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / mini / basic-long.cs
index 4b321017ce7dcd47627cd0968b5e46cd097751eb..91d2ffdc5fb50f18fd87eb00414bc539a68386d6 100644 (file)
@@ -6,7 +6,7 @@ using System.Reflection;
  *
  * Each test needs to be of the form:
  *
- * static int test_<result>_<name> ();
+ * public static int test_<result>_<name> ();
  *
  * where <result> is an integer (the value that needs to be returned by
  * the method to make it pass.
@@ -25,16 +25,16 @@ using System.Reflection;
 
 class Tests {
 
-       static int Main () {
+       public static int Main () {
                return TestDriver.RunTests (typeof (Tests));
        }
 
-       static int test_10_simple_cast () {
+       public static int test_10_simple_cast () {
                long a = 10;
                return (int)a;
        }
 
-       static int test_1_bigmul1 () {
+       public static int test_1_bigmul1 () {
                int a;
                int b;
                long c;
@@ -46,7 +46,7 @@ class Tests {
                return 0;
        }
 
-       static int test_1_bigmul2 () {
+       public static int test_1_bigmul2 () {
                 int a = System.Int32.MaxValue, b = System.Int32.MaxValue;
                 long s = System.Int64.MinValue;
                 long c;
@@ -56,7 +56,7 @@ class Tests {
                return 0;
        }
        
-       static int test_1_bigmul3 () {
+       public static int test_1_bigmul3 () {
                 int a = 10, b = 10;
                 ulong c;
                 c = (ulong) a * (ulong) b;
@@ -65,7 +65,7 @@ class Tests {
                return 0;
        }
 
-       static int test_1_bigmul4 () {
+       public static int test_1_bigmul4 () {
                 int a = System.Int32.MaxValue, b = System.Int32.MaxValue;
                 ulong c;
                 c = (ulong) a * (ulong) b;
@@ -74,7 +74,7 @@ class Tests {
                return 0;
        }
        
-       static int test_1_bigmul5 () {
+       public static int test_1_bigmul5 () {
                 int a = System.Int32.MaxValue, b = System.Int32.MinValue;
                 long c;
                 c = (long) a * (long) b;
@@ -83,7 +83,7 @@ class Tests {
                return 0;
        }
        
-       static int test_1_bigmul6 () {
+       public static int test_1_bigmul6 () {
                 uint a = System.UInt32.MaxValue, b = System.UInt32.MaxValue/(uint)2;
                 ulong c;
                 c = (ulong) a * (ulong) b;
@@ -92,75 +92,209 @@ class Tests {
                return 0;
        }
        
-       static int test_0_beq () {
+       public static int test_0_beq () {
                long a = 0xffffffffff;
                if (a != 0xffffffffff)
                        return 1;
                return 0;
        }
 
-       static int test_0_bne_un () {
+       public static int test_0_bne_un () {
                long a = 0xffffffffff;
                if (a == 0xfffffffffe)
                        return 1;
+               if (a == 0xfeffffffff)
+                       return 2;
                return 0;
        }
 
-       static int test_0_ble () {
+       public static int test_0_ble () {
                long a = 0xffffffffff;
                if (a > 0xffffffffff)
                        return 1;
+
+               if (a > 0x1ffffffffff)
+                       return 2;
+
+               if (a > 0xff00000000) {} else
+                       return 3;
+
+               if (a > 0xfeffffffff) {} else
+                       return 4;
+
+               a = 0xff00000000;
+               if (a > 0xffffffffff)
+                       return 5;
+
                return 0;
        }
 
-       static int test_0_ble_un () {
+       public static int test_0_ble_un () {
                ulong a = 0xffffffffff;
                if (a > 0xffffffffff)
                        return 1;
+
+               if (a > 0x1ffffffffff)
+                       return 2;
+
+               if (a > 0xff00000000) {} else
+                       return 3;
+
+               if (a > 0xfeffffffff) {} else
+                       return 4;
+
+               a = 0xff00000000;
+               if (a > 0xffffffffff)
+                       return 5;
+
                return 0;
        }
 
-       static int test_0_bge () {
+       public static int test_0_bge () {
                long a = 0xffffffffff;
                if (a < 0xffffffffff)
                        return 1;
+
+               if (a < 0x1ffffffffff) {} else
+                       return 2;
+
+               if (a < 0xff00000000)
+                       return 3;
+
+               if (a < 0xfeffffffff)
+                       return 4;
+
+               a = 0xff00000000;
+               if (a < 0xffffffffff) {} else
+                       return 5;
+
                return 0;
        }
 
-       static int test_0_bge_un () {
+       public static int test_0_bge_un () {
                ulong a = 0xffffffffff;
                if (a < 0xffffffffff)
                        return 1;
+
+               if (a < 0x1ffffffffff) {} else
+                       return 2;
+
+               if (a < 0xff00000000)
+                       return 3;
+
+               if (a < 0xfeffffffff)
+                       return 4;
+
+               a = 0xff00000000;
+               if (a < 0xffffffffff) {} else
+                       return 5;
+
                return 0;
        }
 
-       static int test_0_blt () {
+       public static int test_0_blt () {
                long a = 0xfffffffffe;
                if (a >= 0xffffffffff)
                        return 1;
+
+               if (a >= 0x1fffffffffe)
+                       return 2;
+
+               if (a >= 0xff00000000) {} else
+                       return 3;
+
+               if (a >= 0xfefffffffe) {} else
+                       return 4;
+
+               a = 0xff00000000;
+               if (a >= 0xffffffffff)
+                       return 5;
+
                return 0;
        }
 
-       static int test_0_blt_un () {
+       public static int test_0_blt_un () {
                ulong a = 0xfffffffffe;
                if (a >= 0xffffffffff)
                        return 1;
+
+               if (a >= 0x1fffffffffe)
+                       return 2;
+
+               if (a >= 0xff00000000) {} else
+                       return 3;
+
+               if (a >= 0xfefffffffe) {} else
+                       return 4;
+
+               a = 0xff00000000;
+               if (a >= 0xffffffffff)
+                       return 5;
+
                return 0;
        }
 
-       static int test_0_bgt () {
+       public static int test_0_bgt () {
                long a = 0xffffffffff;
                if (a <= 0xfffffffffe)
                        return 1;
+
+               if (a <= 0x1ffffffffff) {} else
+                       return 2;
+
+               if (a <= 0xff00000000)
+                       return 3;
+
+               if (a <= 0xfeffffffff)
+                       return 4;
+
+               a = 0xff00000000;
+               if (a <= 0xffffffffff) {} else
+                       return 5;
+
                return 0;
        }
 
-       static int test_0_conv_to_i4 () {
+       public static int test_0_bgt_un () {
+               ulong a = 0xffffffffff;
+               if (a <= 0xfffffffffe)
+                       return 1;
+
+               if (a <= 0x1ffffffffff) {} else
+                       return 2;
+
+               if (a <= 0xff00000000)
+                       return 3;
+
+               if (a <= 0xfeffffffff)
+                       return 4;
+
+               a = 0xff00000000;
+               if (a <= 0xffffffffff) {} else
+                       return 5;
+
+               return 0;
+       }
+
+       public static int test_0_conv_to_i4 () {
                long a = 0;
 
                return (int)a;
        }
-       static int test_0_conv_from_i4 () {
+
+       public static int test_32_conv_to_u4 () {
+               long a = 32;
+
+               return (int)(uint)a;
+       }
+
+       public static int test_15_conv_to_u4_2 () {
+               long a = 0x10000000f;
+
+               return (int)(uint)a;
+       }
+
+       public static int test_0_conv_from_i4 () {
                long a = 2;
                if (a != 2)
                        return 1;
@@ -172,7 +306,7 @@ class Tests {
                return 0;
        }
 
-       static int test_0_conv_from_i4_negative () {
+       public static int test_0_conv_from_i4_negative () {
                long a = -2;
                if (a != -2)
                        return 1;
@@ -185,7 +319,7 @@ class Tests {
        }
 
        /*
-       static int test_0_conv_from_r8 () {
+       public static int test_0_conv_from_r8 () {
                double b = 2.0;
                long a = (long)b;
 
@@ -194,7 +328,7 @@ class Tests {
                return 0;
        }
 
-       static int test_0_conv_from_r4 () {
+       public static int test_0_conv_from_r4 () {
                float b = 2.0F;
                long a = (long)b;
 
@@ -204,56 +338,56 @@ class Tests {
        }
        */
        
-       static int test_8_and () {
+       public static int test_8_and () {
                long a = 0xffffffffff;
                long b = 8;             
                return (int)(a & b);
        }
 
-       static int test_8_and_imm () {
+       public static int test_8_and_imm () {
                long a = 0xffffffffff;
                return (int)(a & 8);
        }
 
-       static int test_10_or () {
+       public static int test_10_or () {
                long a = 8;
                long b = 2;             
                return (int)(a | b);
        }
 
-       static int test_10_or_imm () {
+       public static int test_10_or_imm () {
                long a = 8;
                return (int)(a | 2);
        }
 
-       static int test_5_xor () {
+       public static int test_5_xor () {
                long a = 7;
                long b = 2;             
                return (int)(a ^ b);
        }
 
-       static int test_5_xor_imm () {
+       public static int test_5_xor_imm () {
                long a = 7;
                return (int)(a ^ 2);
        }
 
-       static int test_5_add () {
+       public static int test_5_add () {
                long a = 2;
                long b = 3;             
                return (int)(a + b);
        }
 
-       static int test_5_add_imm () {
+       public static int test_5_add_imm () {
                long a = 2;
                return (int)(a + 3);
        }
 
-       static int test_0_add_imm_carry () {
+       public static int test_0_add_imm_carry () {
                long a = -1;
                return (int)(a + 1);
        }
 
-       static int test_0_add_imm_no_inc () {
+       public static int test_0_add_imm_no_inc () {
                // we can't blindly convert an add x, 1 to an inc x
                long a = 0x1ffffffff;
                long c;
@@ -263,34 +397,185 @@ class Tests {
                return 1;
        }
 
-       static int test_4_addcc_imm () {
+       public static int test_4_addcc_imm () {
                long a = 3;
                long b = 0;
                return (int)(a - b + 1);
        }
 
-       static int test_5_sub () {
+       public static int test_5_sub () {
                long a = 8;
                long b = 3;             
                return (int)(a - b);
        }
 
-       static int test_5_sub_imm () {
+       public static int test_5_sub_imm () {
                long a = 8;
                return (int)(a - 3);
        }
 
-       static int test_0_sub_imm_carry () {
+       public static int test_0_sub_imm_carry () {
                long a = 0;
                return (int)((a - 1) + 1);
        }
 
-       static int test_2_neg () {
+       public static int test_0_add_ovf () {
+               long i, j, k;
+
+               checked {
+                       i = System.Int64.MinValue;
+                       j = 0;
+                       k = i + j;
+               }
+
+               if (k != System.Int64.MinValue)
+                       return 1;
+
+               checked {
+                       i = System.Int64.MaxValue;
+                       j = 0;
+                       k = i + j;
+               }
+
+               if (k != System.Int64.MaxValue)
+                       return 2;
+
+               checked {
+                       i = System.Int64.MinValue;
+                       j = System.Int64.MaxValue;
+                       k = i + j;
+               }
+
+               if (k != -1)
+                       return 3;
+
+               checked {
+                       i = System.Int64.MaxValue;
+                       j = System.Int64.MinValue;
+                       k = i + j;
+               }
+
+               if (k != -1)
+                       return 4;
+
+               checked {
+                       i = System.Int64.MinValue + 1234;
+                       j = -1234;
+                       k = i + j;
+               }
+
+               if (k != System.Int64.MinValue)
+                       return 5;
+
+               checked {
+                       i = System.Int64.MaxValue - 1234;
+                       j = 1234;
+                       k = i + j;
+               }
+
+               if (k != System.Int64.MaxValue)
+                       return 6;
+
+               return 0;
+       }
+
+       public static int test_0_add_un_ovf () {
+               ulong n = (ulong)134217728 * 16;
+               ulong number = checked (n + (uint)0);
+
+               return number == n ? 0 : 1;
+       }
+
+       public static int test_0_sub_ovf () {
+               long i, j, k;
+
+               checked {
+                       i = System.Int64.MinValue;
+                       j = 0;
+                       k = i - j;
+               }
+
+               if (k != System.Int64.MinValue)
+                       return 1;
+
+               checked {
+                       i = System.Int64.MaxValue;
+                       j = 0;
+                       k = i - j;
+               }
+
+               if (k != System.Int64.MaxValue)
+                       return 2;
+
+               checked {
+                       i = System.Int64.MinValue;
+                       j = System.Int64.MinValue + 1234;
+                       k = i - j;
+               }
+
+               if (k != -1234)
+                       return 3;
+
+               checked {
+                       i = System.Int64.MaxValue;
+                       j = 1234;
+                       k = i - j;
+               }
+
+               if (k != System.Int64.MaxValue - 1234)
+                       return 4;
+
+               checked {
+                       i = System.Int64.MaxValue - 1234;
+                       j = -1234;
+                       k = i - j;
+               }
+
+               if (k != System.Int64.MaxValue)
+                       return 5;
+
+               checked {
+                       i = System.Int64.MinValue + 1234;
+                       j = 1234;
+                       k = i - j;
+               }
+
+               if (k != System.Int64.MinValue)
+                       return 6;
+
+               return 0;
+       }
+
+       public static int test_0_sub_ovf_un () {
+               ulong i, j, k;
+
+               checked {
+                       i = System.UInt64.MaxValue;
+                       j = 0;
+                       k = i - j;
+               }
+
+               if (k != System.UInt64.MaxValue)
+                       return 1;
+
+               checked {
+                       i = System.UInt64.MaxValue;
+                       j = System.UInt64.MaxValue;
+                       k = i - j;
+               }
+
+               if (k != 0)
+                       return 2;
+
+               return 0;
+       }
+
+       public static int test_2_neg () {
                long a = -2;            
                return (int)(-a);
        }       
 
-       static int test_0_neg_large () {
+       public static int test_0_neg_large () {
                long min = -9223372036854775808;
                unchecked {
                        ulong ul = (ulong)min;
@@ -298,28 +583,7 @@ class Tests {
                }
        }       
 
-       static int test_0_shl () {
-               long a = 9;
-               int b = 1;
-               
-               if ((a >> b) != 4)
-                       return 1;
-
-
-               return 0;
-       }
-       
-       static int test_1_rshift ()
-       {
-               long a = 9;
-               int b = 1;
-               a = -9;
-               if ((a >> b) != -5)
-                       return 0;
-               return 1;
-       }
-
-       static int test_5_shift ()
+       public static int test_5_shift ()
        {
                long a = 9;
                int b = 1;
@@ -349,7 +613,37 @@ class Tests {
                return count;
        }
 
-       static int test_1_simple_neg () {
+       public static int test_1_shift_u ()
+       {
+               ulong a;
+               int count = 0;
+
+               // The JIT optimizes this
+               a = 8589934592UL;
+               if ((a >> 32) != 2)
+                       return 0;
+               count ++;
+
+               return count;
+       }
+
+       public static int test_1_shift_u_32 ()
+       {
+               ulong a;
+               int count = 0;
+
+               a = UInt64.MaxValue;
+               // Avoid constant folding
+               for (int i = 0; i < 32; ++i)
+                       count ++;
+
+               if ((a >> count) != 0xFFFFFFFFUL)
+                       return 0;
+               else
+                       return 1;
+       }
+
+       public static int test_1_simple_neg () {
                long a = 9;
                
                if (-a != -9)
@@ -357,7 +651,7 @@ class Tests {
                return 1;
        }
 
-       static int test_2_compare () {
+       public static int test_2_compare () {
                long a = 1;
                long b = 1;
                
@@ -366,7 +660,7 @@ class Tests {
                return 2;
        }
 
-       static int test_9_alu ()
+       public static int test_9_alu ()
        {
                long a = 9, b = 6;
                int count = 0;
@@ -411,13 +705,13 @@ class Tests {
                return count;
        }
        
-       static int test_24_mul () {
+       public static int test_24_mul () {
                long a = 8;
                long b = 3;             
                return (int)(a * b);
        }       
        
-       static int test_24_mul_ovf () {
+       public static int test_24_mul_ovf () {
                long a = 8;
                long b = 3;
                long res;
@@ -428,13 +722,13 @@ class Tests {
                return (int)res;
        }       
 
-       static int test_24_mul_un () {
+       public static int test_24_mul_un () {
                ulong a = 8;
                ulong b = 3;            
                return (int)(a * b);
        }       
        
-       static int test_24_mul_ovf_un () {
+       public static int test_24_mul_ovf_un () {
                ulong a = 8;
                ulong b = 3;
                ulong res;
@@ -444,21 +738,108 @@ class Tests {
                }
                return (int)res;
        }       
+
+       public static int test_0_mul_imm () {
+           long i = 4;
+
+               if ((i * 0) != 0)
+                       return 1;
+               if ((i * 1) != 4)
+                       return 2;
+               if ((i * 2) != 8)
+                       return 3;
+               if ((i * 3) != 12)
+                       return 4;
+               if ((i * 1234) != 4936)
+                       return 5;
+               if ((i * -1) != -4)
+                       return 6;
+               if ((i * -2) != -8)
+                       return 7;
+               if ((i * -3) != -12)
+                       return 8;
+               if ((i * -1234) != -4936)
+                       return 9;
+
+               return 0;
+       }
+
+       public static int test_0_mul_imm_opt ()
+       {
+               long i;
+
+               i = 1;
+               if ((i * 2) != 2)
+                       return 1;
+               i = -1;
+               if ((i * 2) != -2)
+                       return 2;
+               i = 1;
+               if ((i * 3) != 3)
+                       return 3;
+               i = -1;
+               if ((i * 3) != -3)
+                       return 4;
+               i = 1;
+               if ((i * 5) != 5)
+                       return 5;
+               i = -1;
+               if ((i * 5) != -5)
+                       return 6;
+               i = 1;
+               if ((i * 6) != 6)
+                       return 7;
+               i = -1;
+               if ((i * 6) != -6)
+                       return 8;
+               i = 1;
+               if ((i * 9) != 9)
+                       return 9;
+               i = -1;
+               if ((i * 9) != -9)
+                       return 10;
+               i = 1;
+               if ((i * 10) != 10)
+                       return 11;
+               i = -1;
+               if ((i * 10) != -10)
+                       return 12;
+               i = 1;
+               if ((i * 12) != 12)
+                       return 13;
+               i = -1;
+               if ((i * 12) != -12)
+                       return 14;
+               i = 1;
+               if ((i * 25) != 25)
+                       return 15;
+               i = -1;
+               if ((i * 25) != -25)
+                       return 16;
+               i = 1;
+               if ((i * 100) != 100)
+                       return 17;
+               i = -1;
+               if ((i * 100) != -100)
+                       return 18;
+               
+               return 0;
+       }
        
-       static int test_4_divun () {
+       public static int test_4_divun () {
                uint b = 12;
                int a = 3;
                return (int)(b / a);
        }
 
-       static int test_1431655764_bigdivun_imm () {
+       public static int test_1431655764_bigdivun_imm () {
                unchecked {
                        uint b = (uint)-2;
                        return (int)(b / 3);
                }
        }
 
-       static int test_1431655764_bigdivun () {
+       public static int test_1431655764_bigdivun () {
                unchecked {
                        uint b = (uint)-2;
                        int a = 3;
@@ -466,13 +847,13 @@ class Tests {
                }
        }
 
-       static int test_1_remun () {
+       public static int test_1_remun () {
                uint b = 13;
                int a = 3;
                return (int)(b % a);
        }
 
-       static int test_2_bigremun () {
+       public static int test_2_bigremun () {
                unchecked {
                        uint b = (uint)-2;
                        int a = 3;
@@ -480,7 +861,7 @@ class Tests {
                }
        }
 
-       static int test_0_ceq () {
+       public static int test_0_ceq () {
                long a = 2;
                long b = 2;
                long c = 3;
@@ -501,7 +882,7 @@ class Tests {
                return 0;
        }
 
-       static int test_0_ceq_complex () {
+       public static int test_0_ceq_complex () {
                 long l = 1, ll = 2;
 
                 if (l < 0 != ll < 0)
@@ -510,7 +891,7 @@ class Tests {
                 return 0;
        }
        
-       static int test_0_clt () {
+       public static int test_0_clt () {
                long a = 2;
                long b = 2;
                long c = 3;
@@ -540,7 +921,7 @@ class Tests {
                return 0;
        }
        
-       static int test_0_clt_un () {
+       public static int test_0_clt_un () {
                ulong a = 2;
                ulong b = 2;
                ulong c = 3;
@@ -566,7 +947,7 @@ class Tests {
                return 0;
        }
 
-       static int test_0_cgt () {
+       public static int test_0_cgt () {
                long a = 2;
                long b = 2;
                long c = 3;
@@ -596,7 +977,7 @@ class Tests {
                return 0;
        }
 
-       static int test_0_cgt_un () {
+       public static int test_0_cgt_un () {
                ulong a = 2;
                ulong b = 2;
                ulong c = 3;
@@ -630,28 +1011,29 @@ class Tests {
                return 0x500000000;
        }
 
-       static int test_3_long_ret () {
+       public static int test_3_long_ret () {
                long val = return_5low ();
                return (int) (val - 2);
        }
 
-       static int test_1_long_ret2 () {
+       public static int test_1_long_ret2 () {
                long val = return_5high ();
                if (val > 0xffffffff)
                        return 1;
                return 0;
        }
 
-       static int test_3_byte_cast () {
+       public static int test_3_byte_cast () {
                ulong val = 0xff00ff00f0f0f0f0;
                byte b;
                b = (byte) (val & 0xFF);
                if (b != 0xf0)
                        return 1;
+
                return 3;
        }
-       
-       static int test_4_ushort_cast () {
+
+       public static int test_4_ushort_cast () {
                ulong val = 0xff00ff00f0f0f0f0;
                ushort b;
                b = (ushort) (val & 0xFFFF);
@@ -660,7 +1042,7 @@ class Tests {
                return 4;
        }
 
-       static int test_500_mul_div () {
+       public static int test_500_mul_div () {
                long val = 1000;
                long exp = 10;
                long maxexp = 20;
@@ -668,25 +1050,8 @@ class Tests {
 
                return (int)res;
        }
-
-       static long position = 0;
-
-       static int test_4_static_inc_long () {
-
-               int count = 4;
-
-               position = 0;
-
-               position += count;
-
-               return (int)position;
-       }
        
-       static void doit (double value, out long m) {
-               m = (long) value;
-       }
-       
-       static int test_3_checked_cast_un () {
+       public static int test_3_checked_cast_un () {
                 ulong i = 2;
                 long j;
 
@@ -697,7 +1062,7 @@ class Tests {
                return 3;
        }
        
-       static int test_4_checked_cast () {
+       public static int test_4_checked_cast () {
                 long i = 3;
                 ulong j;
 
@@ -708,7 +1073,47 @@ class Tests {
                return 4;
        }
 
-       static int test_10_int_uint_compare () {
+       public static int test_12_checked_i1_cast () {
+               long l = 12;
+
+               checked {
+                       return (sbyte)l;
+               }
+       }
+
+       public static int test_127_checked_i1_cast_un () {
+               ulong l = 127;
+
+               checked {
+                       return (sbyte)l;
+               }
+       }
+
+       public static int test_1234_checked_i2_cast () {
+               long l = 1234;
+
+               checked {
+                       return (short)l;
+               }
+       }
+
+       public static int test_32767_checked_i2_cast_un () {
+               ulong l = 32767;
+
+               checked {
+                       return (ushort)l;
+               }
+       }
+
+       public static int test_1234_checked_i4_cast () {
+               ulong ul = 1234;
+
+               checked {
+                       return (int)ul;
+               }
+       }
+
+       public static int test_10_int_uint_compare () {
                uint size = 10;
                int j = 0;
                for (int i = 0; i < size; ++i) {
@@ -717,26 +1122,66 @@ class Tests {
                return j;
        }
 
-       static int test_0_ftol_clobber () {
-               long m;
-               doit (1.3, out m);
-               if (m != 1)
-                       return 2;
+       public static int test_0_ulong_regress () {
+               ulong u = 4257145737;
+               u --;
+               return (u == 4257145736) ? 0 : 1;
+       }
+
+       public static int test_0_ulong_regress2 () {
+               int p2 = 31;
+               ulong sum_p = 2897079476 + (ulong) (1 << p2);
+               return (sum_p == 749595828) ? 0 : 1;
+       }
+       
+       public static int test_0_assemble_long ()
+       {
+               uint a = 5;
+               ulong x = 0x12345678;
+               ulong y = 1;
+               
+               
+               ulong z = ((x - y) << 32) | a;
+               
+               if (z != 0x1234567700000005)
+                       return 1;
+               
                return 0;
        }
+       
+       public static int test_0_hash ()
+       {
+               ulong x = 0x1234567887654321;
+               int h = (int)(x & 0xffffffff) ^ (int)(x >> 32);
+               if (h != unchecked ((int)(0x87654321 ^ 0x12345678)))
+                       return h;
+               return 0;
+                               
+       }
+
+       public static int test_0_shift_regress () {
+               long a = 0; 
+               int b = 6; 
+               UInt16 c = 3;
+
+               return ((a >> (b - c)) == 0) ? 0 : 1;
+       }
+
+       public static int test_1234_conv_ovf_u8 () {
+               int i = 1234;
 
-       static int test_71_long_shift_right () {
-               ulong value = 38654838087;
-               int x = 0;
-               byte [] buffer = new byte [1];
-               buffer [x] = ((byte)(value >> x));
-               return buffer [x];
+               checked {
+                       ulong l = (ulong)i;
+                       return (int)l;
+               }
        }
 
-       static int test_0_ulong_regress () {
-               ulong u = 4257145737;
-               u --;
-               return (u == 4257145736) ? 0 : 1;
+       public static int test_0_regress_cprop_80738 () {
+               int hours = Int32.MinValue;
+               int hrssec = (hours * 3600);
+               long t = ((long)(hrssec) * 1000L);
+
+               return t == 0 ? 0 : 1;
        }
 }