ARM: VIXL32: Fix VisitTypeConversion.

Pass 422-type-conversion and some other tests.

Test: export ART_USE_VIXL_ARM_BACKEND=true && \
      mma test-art-host dist && mma test-art-target dist

Change-Id: I89a491a7724ae5286b717133eec16433b7066845
diff --git a/compiler/optimizing/code_generator_arm_vixl.cc b/compiler/optimizing/code_generator_arm_vixl.cc
index f7957d4..5e49a80 100644
--- a/compiler/optimizing/code_generator_arm_vixl.cc
+++ b/compiler/optimizing/code_generator_arm_vixl.cc
@@ -2025,7 +2025,7 @@
         case Primitive::kPrimFloat: {
           // Processing a Dex `float-to-int' instruction.
           vixl32::SRegister temp = LowSRegisterFrom(locations->GetTemp(0));
-          __ Vcvt(I32, F32, temp, InputSRegisterAt(conversion, 0));
+          __ Vcvt(S32, F32, temp, InputSRegisterAt(conversion, 0));
           __ Vmov(OutputRegister(conversion), temp);
           break;
         }
@@ -2033,7 +2033,7 @@
         case Primitive::kPrimDouble: {
           // Processing a Dex `double-to-int' instruction.
           vixl32::SRegister temp_s = LowSRegisterFrom(locations->GetTemp(0));
-          __ Vcvt(I32, F64, temp_s, DRegisterFrom(in));
+          __ Vcvt(S32, F64, temp_s, DRegisterFrom(in));
           __ Vmov(OutputRegister(conversion), temp_s);
           break;
         }
@@ -2109,7 +2109,7 @@
         case Primitive::kPrimChar: {
           // Processing a Dex `int-to-float' instruction.
           __ Vmov(OutputSRegister(conversion), InputRegisterAt(conversion, 0));
-          __ Vcvt(F32, I32, OutputSRegister(conversion), OutputSRegister(conversion));
+          __ Vcvt(F32, S32, OutputSRegister(conversion), OutputSRegister(conversion));
           break;
         }
 
@@ -2140,7 +2140,7 @@
         case Primitive::kPrimChar: {
           // Processing a Dex `int-to-double' instruction.
           __ Vmov(LowSRegisterFrom(out), InputRegisterAt(conversion, 0));
-          __ Vcvt(F64, I32, DRegisterFrom(out), LowSRegisterFrom(out));
+          __ Vcvt(F64, S32, DRegisterFrom(out), LowSRegisterFrom(out));
           break;
         }
 
@@ -2148,18 +2148,15 @@
           // Processing a Dex `long-to-double' instruction.
           vixl32::Register low = LowRegisterFrom(in);
           vixl32::Register high = HighRegisterFrom(in);
-
           vixl32::SRegister out_s = LowSRegisterFrom(out);
           vixl32::DRegister out_d = DRegisterFrom(out);
-
           vixl32::SRegister temp_s = LowSRegisterFrom(locations->GetTemp(0));
           vixl32::DRegister temp_d = DRegisterFrom(locations->GetTemp(0));
-
-          vixl32::DRegister constant_d = DRegisterFrom(locations->GetTemp(0));
+          vixl32::DRegister constant_d = DRegisterFrom(locations->GetTemp(1));
 
           // temp_d = int-to-double(high)
           __ Vmov(temp_s, high);
-          __ Vcvt(F64, I32, temp_d, temp_s);
+          __ Vcvt(F64, S32, temp_d, temp_s);
           // constant_d = k2Pow32EncodingForDouble
           __ Vmov(constant_d, bit_cast<double, int64_t>(k2Pow32EncodingForDouble));
           // out_d = unsigned-to-double(low)
diff --git a/test/Android.arm_vixl.mk b/test/Android.arm_vixl.mk
index 845545c..8ca4168 100644
--- a/test/Android.arm_vixl.mk
+++ b/test/Android.arm_vixl.mk
@@ -17,56 +17,27 @@
 # Known broken tests for the ARM VIXL backend.
 TEST_ART_BROKEN_OPTIMIZING_ARM_VIXL_RUN_TESTS := \
   003-omnibus-opcodes \
-  004-ThreadStress \
-  028-array-write \
-  037-inherit \
-  042-new-instance \
+  020-string \
+  021-string2 \
   044-proxy \
-  080-oom-throw \
   082-inline-execute \
-  083-compiler-regressions \
   096-array-copy-concurrent-gc \
-  099-vmdebug \
+  100-reflect2 \
   103-string-append \
-  114-ParallelGC \
   122-npe \
-  123-inline-execute2 \
   129-ThreadGetId \
   137-cfi \
-  144-static-field-sigquit \
-  201-built-in-except-detail-messages \
-  412-new-array \
-  422-type-conversion \
-  437-inline \
   439-npe \
-  442-checker-constant-folding \
-  450-checker-types \
-  458-checker-instruct-simplification \
-  458-long-to-fpu \
   488-checker-inline-recursive-calls \
-  510-checker-try-catch \
-  515-dce-dominator \
   520-equivalent-phi \
   525-checker-arrays-fields1 \
   525-checker-arrays-fields2 \
   527-checker-array-access-split \
-  530-checker-loops2 \
-  530-checker-lse \
-  530-checker-lse2 \
-  535-regression-const-val \
-  536-checker-intrinsic-optimization \
   538-checker-embed-constants \
   550-checker-multiply-accumulate \
-  552-checker-primitive-typeprop \
   552-checker-sharpening \
-  555-UnsafeGetLong-regression \
   562-checker-no-intermediate \
   564-checker-negbitwise \
   570-checker-osr \
-  570-checker-select \
-  574-irreducible-and-constant-area \
-  580-checker-round \
-  594-checker-array-alias \
-  602-deoptimizeable \
-  700-LoadArgRegs \
-  800-smali \
+  602-deoptimizeable
+