2009-04-06 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Mon, 6 Apr 2009 15:14:46 +0000 (15:14 -0000)
committerZoltan Varga <vargaz@gmail.com>
Mon, 6 Apr 2009 15:14:46 +0000 (15:14 -0000)
* mini-arm.c (mono_arch_output_basic_block): Fix int->float conversion of
negative numbers for vfp.

* basic-float.cs: Add a test.

svn path=/trunk/mono/; revision=131127

mono/mini/ChangeLog
mono/mini/basic-float.cs
mono/mini/mini-arm.c

index 766b36781a06b542dbd9215181a9d22501ea7917..180a7d5b20380e3b13503d0b3e24a0ec2f13f3ce 100644 (file)
@@ -1,4 +1,10 @@
+2009-04-06  Zoltan Varga  <vargaz@gmail.com>
 
+       * mini-arm.c (mono_arch_output_basic_block): Fix int->float conversion of
+       negative numbers for vfp.
+
+       * basic-float.cs: Add a test.
+       
 Mon Apr 6 14:12:10 CEST 2009 Paolo Molaro <lupus@ximian.com>
 
        * exceptions-x86.c, mini-x86.h: x86 support code for continuations.
index 70c2cc181113206791a050b9e9928fce355cbed5..96f1ef5f317996fc5b84a5e91c57331616bd99fb 100644 (file)
@@ -82,6 +82,12 @@ class Tests {
                return (int)f;
        }
 
+       public static int test_0_conv_r4_m1 () {
+               int i = -1;
+               float f = (float)i;
+               return (int)f + 1;
+       }
+
        public static int test_5_double_conv_r4 () {
                double d = 5.0;
                float f = (float)d;
index 581182d597ee5d7cea9c8b5378d8c309b912488a..2ef579fa01a1898c974f6f616c5820012594fc12 100644 (file)
@@ -3319,12 +3319,12 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
                }
                case OP_ICONV_TO_R4:
                        ARM_FMSR (code, ARM_VFP_F0, ins->sreg1);
-                       ARM_FUITOS (code, ARM_VFP_F0, ARM_VFP_F0);
+                       ARM_FSITOS (code, ARM_VFP_F0, ARM_VFP_F0);
                        ARM_CVTS (code, ins->dreg, ARM_VFP_F0);
                        break;
                case OP_ICONV_TO_R8:
                        ARM_FMSR (code, ARM_VFP_F0, ins->sreg1);
-                       ARM_FUITOD (code, ins->dreg, ARM_VFP_F0);
+                       ARM_FSITOD (code, ins->dreg, ARM_VFP_F0);
                        break;
 
                case OP_SETFRET: