Various bug fixes.

The most amusing fix was the wierd NaN test failure.  After spending way
too much time debugging, it turned out to be a missing comma in the argument
list of the test launcher.

Change-Id: I76253575d7fbe2c2c260f1839a517c1b93dc9224
diff --git a/src/compiler/RuntimeUtilities.cc b/src/compiler/RuntimeUtilities.cc
index b18e4da..53bd20e 100644
--- a/src/compiler/RuntimeUtilities.cc
+++ b/src/compiler/RuntimeUtilities.cc
@@ -50,3 +50,29 @@
     else
         return (s8)f;
 }
+
+/*
+ * Temporary placeholder.  Should include run-time checks for size
+ * of fill data <= size of array.  If not, throw arrayOutOfBoundsException.
+ * As with other new "NoThrow" routines, this should return to the caller
+ * only if no exception has been thrown.
+ *
+ * NOTE: When dealing with a raw dex file, the data to be copied uses
+ * little-endian ordering.  Require that oat2dex do any required swapping
+ * so this routine can get by with a memcpy().
+ *
+ * Format of the data:
+ *  ushort ident = 0x0300   magic value
+ *  ushort width            width of each element in the table
+ *  uint   size             number of elements in the table
+ *  ubyte  data[size*width] table of data values (may contain a single-byte
+ *                          padding at the end)
+ */
+void artHandleFillArrayDataNoThrow(Array* array, const uint16_t* table)
+{
+    uint32_t size = (uint32_t)table[2] | (((uint32_t)table[3]) << 16);
+    uint32_t size_in_bytes = size * table[1];
+    UNIMPLEMENTED(WARNING) << "Need to check if array.length() <= size";
+    memcpy((char*)array + art::Array::DataOffset().Int32Value(),
+           (char*)&table[4], size_in_bytes);
+}
diff --git a/src/compiler/codegen/arm/Assemble.cc b/src/compiler/codegen/arm/Assemble.cc
index d9dd8c4..54e0aaf 100644
--- a/src/compiler/codegen/arm/Assemble.cc
+++ b/src/compiler/codegen/arm/Assemble.cc
@@ -1039,9 +1039,9 @@
              &iterator);
         if (tabRec == NULL) break;
         alignBuffer(cUnit->codeBuffer, tabRec->offset);
-        cUnit->codeBuffer.reserve(cUnit->codeBuffer.size() + (tabRec->size/2));
-        memcpy(&cUnit->codeBuffer[tabRec->offset/2],
-              (char*)tabRec->table, tabRec->size);
+        for (int i = 0; i < (tabRec->size / 2) ; i++) {
+            cUnit->codeBuffer.push_back( tabRec->table[i]);
+        }
     }
 }
 
diff --git a/src/compiler/codegen/arm/LocalOptimizations.cc b/src/compiler/codegen/arm/LocalOptimizations.cc
index 8d6f3a5..1aaeebf 100644
--- a/src/compiler/codegen/arm/LocalOptimizations.cc
+++ b/src/compiler/codegen/arm/LocalOptimizations.cc
@@ -439,10 +439,12 @@
                                         LIR* tailLIR)
 {
     if (!(cUnit->disableOpt & (1 << kLoadStoreElimination))) {
+        LOG(INFO) << "Doing ldstElim, op: 0x" << std::hex << cUnit->disableOpt;
         applyLoadStoreElimination(cUnit, (ArmLIR* ) headLIR,
                                   (ArmLIR* ) tailLIR);
     }
     if (!(cUnit->disableOpt & (1 << kLoadHoisting))) {
+        LOG(INFO) << "Doing hoisting, op: 0x" << std::hex << cUnit->disableOpt;
         applyLoadHoisting(cUnit, (ArmLIR* ) headLIR, (ArmLIR* ) tailLIR);
     }
 }
diff --git a/src/compiler/codegen/arm/MethodCodegenDriver.cc b/src/compiler/codegen/arm/MethodCodegenDriver.cc
index f7194f1..1cf3766 100644
--- a/src/compiler/codegen/arm/MethodCodegenDriver.cc
+++ b/src/compiler/codegen/arm/MethodCodegenDriver.cc
@@ -1455,15 +1455,12 @@
             genArithOpLong(cUnit, mir, rlDest, rlSrc[0], rlSrc[1]);
             break;
 
-        case OP_SHL_LONG_2ADDR:
-        case OP_SHR_LONG_2ADDR:
-        case OP_USHR_LONG_2ADDR:
-            genShiftOpLong(cUnit,mir, rlDest, rlSrc[0], rlSrc[0]);
-            break;
-
         case OP_SHL_LONG:
         case OP_SHR_LONG:
         case OP_USHR_LONG:
+        case OP_SHL_LONG_2ADDR:
+        case OP_SHR_LONG_2ADDR:
+        case OP_USHR_LONG_2ADDR:
             genShiftOpLong(cUnit,mir, rlDest, rlSrc[0], rlSrc[1]);
             break;
 
diff --git a/src/compiler/codegen/arm/Thumb2/Gen.cc b/src/compiler/codegen/arm/Thumb2/Gen.cc
index 2239bd9..992eca6 100644
--- a/src/compiler/codegen/arm/Thumb2/Gen.cc
+++ b/src/compiler/codegen/arm/Thumb2/Gen.cc
@@ -342,7 +342,7 @@
     loadValueDirectFixed(cUnit, rlSrc, r0);
     loadWordDisp(cUnit, rSELF,
                  OFFSETOF_MEMBER(Thread, pArtHandleFillArrayDataNoThrow), rLR);
-    // Materialize a pointer to the switch table
+    // Materialize a pointer to the fill data image
     newLIR3(cUnit, kThumb2AdrST, r1, 0, (intptr_t)tabRec);
     opReg(cUnit, kOpBlx, rLR);
     oatClobberCallRegs(cUnit);
@@ -1358,11 +1358,6 @@
     oatFlushAllRegs(cUnit);   /* Send everything to home location */
     loadWordDisp(cUnit, rSELF, funcOffset, rLR);
     loadValueDirectWideFixed(cUnit, rlSrc1, r0, r1);
-    if (rlShift.wide) {
-        LOG(WARNING) << "Invalid RegLocation size - dataflow problem";
-        LOG(WARNING) << "   sReg[" << rlShift.sRegLow << "]";
-        rlShift.wide = false;
-    }
     loadValueDirect(cUnit, rlShift, r2);
     opReg(cUnit, kOpBlx, rLR);
     oatClobberCallRegs(cUnit);
diff --git a/src/compiler_test.cc b/src/compiler_test.cc
index 186e4c4..2a47936 100644
--- a/src/compiler_test.cc
+++ b/src/compiler_test.cc
@@ -120,12 +120,10 @@
                         38);
 }
 
-#if 0 // Needs artFillArrayDataNoThrow() helper function
 TEST_F(CompilerTest, ShiftTest1) {
   CompileDex(kIntMathDex, "kIntMathDex");
   AssertStaticIntMethod("IntMath", "shiftTest1", "()I", 0);
 }
-#endif
 
 TEST_F(CompilerTest, ShiftTest2) {
   CompileDex(kIntMathDex, "kIntMathDex");
@@ -201,14 +199,12 @@
                         -5LL, -4294967287LL, 4LL, 8LL);
 }
 
-#if 0 // Weird NaN failure.  Needs investigation
 TEST_F(CompilerTest, FloatCompare) {
   CompileDex(kIntMathDex, "kIntMathDex");
-  AssertStaticIntMethod("IntMath", "testFloatCompare", "(FFFF)I", 3333
+  AssertStaticIntMethod("IntMath", "testFloatCompare", "(FFFF)I", 3333,
                         -5.0f, 4.0f, 4.0f,
                         (1.0f/0.0f) / (1.0f/0.0f));
 }
-#endif
 
 TEST_F(CompilerTest, DoubleCompare) {
   CompileDex(kIntMathDex, "kIntMathDex");
diff --git a/src/compiler_test.h b/src/compiler_test.h
index d8eaf02..afd3d1b 100644
--- a/src/compiler_test.h
+++ b/src/compiler_test.h
@@ -37,11 +37,20 @@
 //        long l;
 //        int i1, i2;
 //
+//        if (mBytes[0] != 0x11) return 20;
+//        if (mBytes[1] != 0x22) return 21;
+//        if (mBytes[2] != 0x33) return 22;
+//        if (mBytes[3] != 0x44) return 23;
+//        if (mBytes[4] != 0x88) return 24;
+//        if (mBytes[5] != 0x99) return 25;
+//        if (mBytes[6] != 0xaa) return 26;
+//        if (mBytes[7] != 0xbb) return 27;
+//
 //        i1 = mBytes[0] | mBytes[1] << 8 | mBytes[2] << 16 | mBytes[3] << 24;
 //        i2 = mBytes[4] | mBytes[5] << 8 | mBytes[6] << 16 | mBytes[7] << 24;
 //        l = i1 | ((long)i2 << 32);
 //
-//        if (i1 != 0x44332211) { return 1; }
+//        if (i1 != 0x44332211) { return 0x80000000 | i1; }
 //        if (i2 != 0xbbaa9988) { return 2; }
 //        if (l != 0xbbaa998844332211L) { return 3; }
 //
@@ -460,7 +469,6 @@
 //        float nan) {
 //
 //        int res = 3333;
-//
 //        if (minus > plus)
 //            res = 1;
 //        if (plus < minus)
@@ -484,7 +492,7 @@
 //            res = 10;
 //
 //        if (nan == nan)
-//            res = 11;
+//            res = 1212;
 //
 //        return res;
 //    }
@@ -719,52 +727,52 @@
 //    }
 //}
 static const char kIntMathDex[] =
-"ZGV4CjAzNQAeDs8/iIoiUVFtgM49kDyM3iE5XGier2cYKAAAcAAAAHhWNBIAAAAAAAAAAHgnAACf"
-"AAAAcAAAABMAAADsAgAADgAAADgDAAABAAAA4AMAABoAAADoAwAAAgAAALgEAAAgIwAA+AQAAL4b"
-"AADGGwAAyRsAAMwbAADPGwAA0hsAANUbAADcGwAA4xsAAOcbAADsGwAA8xsAABEcAAAWHAAAHRwA"
-"ACscAAAuHAAAMxwAADccAABCHAAARxwAAF4cAABzHAAAhxwAAJscAACvHAAAvBwAAL8cAADCHAAA"
-"xhwAAMkcAADNHAAA0RwAAOYcAAD7HAAA/hwAAAIdAAAGHQAACx0AABAdAAAVHQAAGh0AAB8dAAAk"
-"HQAAKR0AAC4dAAAzHQAAOB0AADwdAABBHQAARh0AAEsdAABQHQAAVR0AAFodAABfHQAAYx0AAGcd"
-"AABrHQAAbx0AAHMdAAB3HQAAex0AAIYdAACQHQAAlh0AAJkdAACcHQAAox0AAKodAAC3HQAA0B0A"
-"AOUdAADvHQAABR4AABceAAAaHgAAIB4AACMeAAAmHgAAMR4AAEgeAABbHgAAYB4AAGMeAABmHgAA"
-"aR4AAG0eAABxHgAAfh4AAJceAACsHgAAuh4AAL0eAADIHgAA0h4AAOAeAAD6HgAAEB8AAB8fAAA6"
-"HwAAUR8AAFcfAABfHwAAZR8AAG8fAACFHwAAlx8AAJ8fAACoHwAArx8AALIfAAC3HwAAvx8AAMQf"
-"AADKHwAA0R8AANofAADiHwAA5x8AAO8fAAD4HwAA+x8AAAcgAAAfIAAAMyAAAD8gAABXIAAAayAA"
-"AHcgAACDIAAAmyAAAK8gAADCIAAA4SAAAPwgAAAOIQAALCEAAEYhAABWIQAAciEAAIohAACbIQAA"
-"uCEAANEhAADXIQAA4SEAAPchAAAJIgAAHCIAADsiAABWIgAAXSIAAGYiAABzIgAAjCIAAKEiAACk"
-"IgAApyIAAAEAAAACAAAAAwAAAAQAAAAFAAAADwAAABIAAAAUAAAAFQAAABYAAAAXAAAAGAAAABoA"
-"AAAbAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAFAAAABAAAAAAAAAAGAAAABAAAACQbAAAHAAAABAAA"
-"ADAbAAAIAAAABAAAADwbAAAJAAAABAAAAEQbAAAKAAAABAAAAEwbAAALAAAABAAAAFgbAAAMAAAA"
-"BAAAAJQbAAANAAAABAAAAJwbAAAQAAAABQAAAKgbAAATAAAABwAAALAbAAARAAAACAAAADwbAAAb"
-"AAAADQAAAAAAAAAcAAAADQAAALgbAAALAAcAcQAAAAYADAAAAAAABgAAAEUAAAAGAAAASAAAAAYA"
+"ZGV4CjAzNQDkN7h8vyJMV0fWrHvySPqobiNp3Nwl9eG8KAAAcAAAAHhWNBIAAAAAAAAAABwoAACf"
+"AAAAcAAAABMAAADsAgAADgAAADgDAAABAAAA4AMAABoAAADoAwAAAgAAALgEAADEIwAA+AQAAFoc"
+"AABiHAAAZRwAAGgcAABrHAAAbhwAAHEcAAB4HAAAfxwAAIMcAACIHAAAjxwAAK0cAACyHAAAuRwA"
+"AMccAADKHAAAzxwAANMcAADeHAAA4xwAAPocAAAPHQAAIx0AADcdAABLHQAAWB0AAFsdAABeHQAA"
+"Yh0AAGUdAABpHQAAbR0AAIIdAACXHQAAmh0AAJ4dAACiHQAApx0AAKwdAACxHQAAth0AALsdAADA"
+"HQAAxR0AAModAADPHQAA1B0AANgdAADdHQAA4h0AAOcdAADsHQAA8R0AAPYdAAD7HQAA/x0AAAMe"
+"AAAHHgAACx4AAA8eAAATHgAAFx4AACIeAAAsHgAAMh4AADUeAAA4HgAAPx4AAEYeAABTHgAAbB4A"
+"AIEeAACLHgAAoR4AALMeAAC2HgAAvB4AAL8eAADCHgAAzR4AAOQeAAD3HgAA/B4AAP8eAAACHwAA"
+"BR8AAAkfAAANHwAAGh8AADMfAABIHwAAVh8AAFkfAABkHwAAbh8AAHwfAACWHwAArB8AALsfAADW"
+"HwAA7R8AAPMfAAD7HwAAASAAAAsgAAAhIAAAMyAAADsgAABEIAAASyAAAE4gAABTIAAAWyAAAGAg"
+"AABmIAAAbSAAAHYgAAB+IAAAgyAAAIsgAACUIAAAlyAAAKMgAAC7IAAAzyAAANsgAADzIAAAByEA"
+"ABMhAAAfIQAANyEAAEshAABeIQAAfSEAAJghAACqIQAAyCEAAOIhAADyIQAADiIAACYiAAA3IgAA"
+"VCIAAG0iAABzIgAAfSIAAJMiAAClIgAAuCIAANciAADyIgAA+SIAAAIjAAAPIwAAKCMAAD0jAABA"
+"IwAAQyMAAAEAAAACAAAAAwAAAAQAAAAFAAAADwAAABIAAAAUAAAAFQAAABYAAAAXAAAAGAAAABoA"
+"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"
-"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"
+"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"
-"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"
+"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"
-"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"
+"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"
-"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"
+"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"
 "MnYDAA8BRAEAARQGF9T+/zJhBAABISj3RAEAAhQCaMiiBDIhBAABMSjuRAEAAxMCTQAyIQQAAUEo"
 "5kQBAAQTAgkDMiEEABJRKN4SUUQBAAETAsADMiEEABJhKNUSYUQBAAETAtn/MiEEABJxKMwScUQB"
-"AAEUAsnT/v8yIQUAEwEIACjBAVEovwAACwABAAAAAABoIwAAfAAAABJGEjUSJBITEgcTCAgAI4IP"
+"AAEUAsnT/v8yIQUAEwEIACjBAVEovwAACwABAAAAAAAFJAAAfAAAABJGEjUSJBITEgcTCAgAI4IP"
 "ANgICgpLCAIH2QgKCksIAgPaCAoKSwgCBNsICgpLCAIF3AgKCksIAgYSWN0JCgpLCQIIEmjeCQr2"
 "SwkCCBJ43wkK9ksJAggVAACA2wEA/zIBAwAPA0QIAgcUCQcn//8ymAQAAUMo90QDAgMUCA3ZAAAy"
 "gwQAAVMo7kQDAgQUBOKF9/8yQwQAAWMo5UQDAgUTBE3qMkMEABJTKN1EAwIGErQyQwQAEmMo1hJT"
 "RAMCAxMECAAyQwQAEnMozRJjRAMCAxL0MkMFABMDCAAoxBJzRAMCAxQEC9kAADJDBQATAwkAKLkB"
-"cyi3EQAEAAAAAACTIwAA7gAAABMJCgAjmBAAEgmbCg0PTAoICRIZnAoND0wKCAkSKZ0KDQ9MCggJ"
+"cyi3EQAEAAAAAAAwJAAA7gAAABMJCgAjmBAAEgmbCg0PTAoICRIZnAoND0wKCAkSKZ0KDQ9MCggJ"
 "EjmdCg0NTAoICRJJngoND0wKCAkSWX36nwoNCkwKCAkSaaAKDQ9MCggJEnmhCg0PTAoICRMJCACi"
 "Cg0PTAoICRMJCQCbCg0PvPq9+r76v/rA+sH6wvq72kwKCAkZAACAEllFCQgJfZIWBAEAmwkABLxJ"
 "vimeBgkCMQkGADgJBAASGQ8JEglFCQgJGAv9O1NMEAAAADEJCQs4CQQAEiko8hIZRQkICRgLAzxT"
@@ -772,11 +780,11 @@
 "rwYpoTEJCQs4CQQAElkoyBJJRQkICRgLq5Y5kfr///8xCQkLOAkEABJpKLoSWUUJCAkWCwEAMQkJ"
 "CzgJBAASeSivEmlFCQgJGAsAPFNMEAAAADEJCQs4CQUAEwkIACigEnlFCQgJFgv9/zEJCQs4CQUA"
 "EwkJACiUEwkIAEUJCAkYC/3DrLPv////MQkJCzgJBQATCQoAKIQTCQkARQkICRgLADxTTBAAAAAx"
-"CQkLOAkGABMJCwApAHT/IYkTCgoAMqkGABMJDAApAGv/EgkpAGj/DQADAAAAAADTIwAAWwAAABJJ"
+"CQkLOAkGABMJCwApAHT/IYkTCgoAMqkGABMJDAApAGv/EgkpAGj/DQADAAAAAABwJAAAWwAAABJJ"
 "EjgSJxIWEgUjkBAAowEKDEwBAAWkAQoMTAEABqUBCgxMAQAHowEKDMTBxcHDwUwBAAhFAQAFGAMA"
 "AAGqAP/eljEBAQM4AQUARQEABRABRQEABhgDAP/elqrV//8xAQEDOAEFAEUBAAYo8kUBAAcYAwD/"
 "3paq1QAAMQEBAzgBBQBFAQAHKORFAQAIGAMAAAD/3pb//zEBAQM4AQUARQEACCjWIQEykQUAFgEF"
-"ACjQRQEABSjNAAAnAAEAIgAAAO0jAADlAgAAEwEmAHEQFAABAAolEwElAAIAJQAzEJgBYgEAABoC"
+"ACjQRQEABSjNAAAnAAEAIgAAAIokAADlAgAAEwEmAHEQFAABAAolEwElAAIAJQAzEJgBYgEAABoC"
 "kwASAyMzEQBuMBcAIQNxAAwAAAAKJTklmwFiAQAAGgJ8ABIDIzMRAG4wFwAhA3EADQAAAAolOSWe"
 "AWIBAAAaAn8AEgMjMxEAbjAXACEDcQAVAAAACiU5JaEBYgEAABoClgASAyMzEQBuMBcAIQNxAAIA"
 "AAAKJTklpAFiAQAAGgJKABIDIzMRAG4wFwAhA3EAAQAAAAolOSWnAWIBAAAaAkcAEgMjMxEAbjAX"
@@ -802,7 +810,7 @@
 "FwAhAykAd/5iAQAAGgKIABITIzMRABIEdwEYACUADAVNBQMEbjAXACEDKQCA/mIBAAAaAoUAEhMj"
 "MxEAEgR3ARgAJQAMBU0FAwRuMBcAIQMpAIn+YgEAABoCUAASEyMzEQASBHcBGAAlAAwFTQUDBG4w"
 "FwAhAykAjP5iAQAAGgJpABITIzMRABIEdwEYACUADAVNBQMEbjAXACEDKQC9/mIBAAAaApoAEhMj"
-"MxEAEgR3ARgAJQAMBU0FAwRuMBcAIQMpAL7+AAAlACIAAAAAAG0kAADnAAAAOAMEABIBDwEWAQEA"
+"MxEAEgR3ARgAJQAMBU0FAwRuMBcAIQMpAL7+AAAlACIAAAAAAAolAADnAAAAOAMEABIBDwEWAQEA"
 "MQEEATgBBAASESj4EiEyFgQAEiEo8xYBAwAxAQcBOAEEABIxKOsSQTIZBAASQSjmFgEFADEBCgE4"
 "AQQAElEo3hJhMhwEABJhKNkScTIdBAAScSjUGQEgQC8BDgE4AQUAEwEIACjLFQEQQS0BEAE4AQUA"
 "EwEJACjCGQEkQC8BEQE4AQUAEwEKACi5EwELAAIAEwAyEAUAEwELACiwEwEMAAIAFAAyEAUAEwEM"
@@ -811,93 +819,95 @@
 "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"
-"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"
-"ABIkKPwyYQQAEjQo+DJCBAASRCj0EgQo8gAAAwACAAAAAAAEJwAAAwAAANoAAgIPAAAABAAAAAIA"
-"AgACAAIABAAAAAMAAwADAAMAAQAAAAQAAAACAAAABAAEAAQAAAAEAAQABAAEABsAAAAEAAUABAAF"
-"AAQABQAEAAQAAgADAAIADAAEAAEABAAEAAAADgAEAAQABQAFAAQABAAEAAQABAAAAAIAAAAFAAUA"
-"BAAAAAUABQAFAAUAAgAAAAUABAACAAAACgARAAEAAAASAAY8aW5pdD4AAUIAAUMAAUQAAUYAAUkA"
-"BUlEREREAAVJRkZGRgACSUkAA0lJSQAFSUlJSUkAHElJSklKSUpJSURGRFNJQ0lJQlpJSUpKSUlJ"
-"SUkAA0lKSgAFSUpKSkoADEludE1hdGguamF2YQABSgADSkpJAAJMSQAJTEludE1hdGg7AANMTEwA"
-"FUxqYXZhL2lvL1ByaW50U3RyZWFtOwATTGphdmEvbGFuZy9JbnRlZ2VyOwASTGphdmEvbGFuZy9P"
-"YmplY3Q7ABJMamF2YS9sYW5nL1N0cmluZzsAEkxqYXZhL2xhbmcvU3lzdGVtOwALT2JqZWN0Lmph"
-"dmEAAVMAAVYAAlZMAAFaAAJbSQACW0oAE1tMamF2YS9sYW5nL09iamVjdDsAE1tMamF2YS9sYW5n"
-"L1N0cmluZzsAAWEAAmEwAAJhMQADYTEwAANhMTEAA2ExMgADYTEzAANhMTQAA2ExNQADYTE2AANh"
-"MTcAA2ExOAADYTE5AAJhMgADYTIwAANhMjEAA2EyMgADYTIzAANhMjQAA2EyNQADYTI2AAJhMwAC"
-"YTQAAmE1AAJhNgACYTcAAmE4AAJhOQAJYWxzb01pbnVzAAhhbHNvUGx1cwAEYXJncwABYgABYwAF"
-"Y2hhcjEABWNoYXIyAAtjaGFyU3ViVGVzdAAXY2hhclN1YlRlc3QgRkFJTEVEOiAlZAoAE2NoYXJT"
-"dWJUZXN0IFBBU1NFRAoACGNvbnZUZXN0ABRjb252VGVzdCBGQUlMRUQ6ICVkCgAQY29udlRlc3Qg"
-"UEFTU0VECgABZAAEZGlzdAABZQABZgAJZmlib25hY2NpABVmaWJvbmFjY2kgRkFJTEVEOiAlZAoA"
-"EWZpYm9uYWNjaSBQQVNTRUQKAANmb28AAWcAAWgAAWkAAmkxAAJpMgALaW50T3BlclRlc3QAF2lu"
-"dE9wZXJUZXN0IEZBSUxFRDogJWQKABNpbnRPcGVyVGVzdCBQQVNTRUQKAAxpbnRTaGlmdFRlc3QA"
-"AWwACWxpdDE2VGVzdAAIbGl0OFRlc3QADGxvbmdPcGVyVGVzdAAYbG9uZ09wZXJUZXN0IEZBSUxF"
-"RDogJWQKABRsb25nT3BlclRlc3QgUEFTU0VECgANbG9uZ1NoaWZ0VGVzdAAZbG9uZ1NoaWZ0VGVz"
-"dCBGQUlMRUQ6ICVkCgAVbG9uZ1NoaWZ0VGVzdCBQQVNTRUQKAARscmVzAAZtQnl0ZXMABG1haW4A"
-"CG1hbnlBcmdzABRtYW55QXJncyBGQUlMRUQ6ICVkCgAQbWFueUFyZ3MgUEFTU0VECgAGbWluSW50"
-"AAdtaW5Mb25nAAVtaW51cwABbgADbmFuAAZuZWdPbmUAA291dAAEcGx1cwAFcGx1czIAB3BsdXNP"
-"bmUABnByaW50ZgADcmVzAAZyZXN1bHQAB3Jlc3VsdHMAAXMACnNoaWZ0VGVzdDEAFnNoaWZ0VGVz"
-"dDEgRkFJTEVEOiAlZAoAEnNoaWZ0VGVzdDEgUEFTU0VECgAKc2hpZnRUZXN0MgAWc2hpZnRUZXN0"
-"MiBGQUlMRUQ6ICVkCgASc2hpZnRUZXN0MiBQQVNTRUQKAApzdGF0aWNDYWxsAApzd2l0Y2hUZXN0"
-"ABZzd2l0Y2hUZXN0IEZBSUxFRDogJWQKABJzd2l0Y2hUZXN0IFBBU1NFRAoAEXRlc3REb3VibGVD"
-"b21wYXJlAB10ZXN0RG91YmxlQ29tcGFyZSBGQUlMRUQ6ICVkCgAZdGVzdERvdWJsZUNvbXBhcmUg"
-"UEFTU0VECgAQdGVzdEZsb2F0Q29tcGFyZQAcdGVzdEZsb2F0Q29tcGFyZSBGQUlMRUQ6ICVkCgAY"
-"dGVzdEZsb2F0Q29tcGFyZSBQQVNTRUQKAA50ZXN0SW50Q29tcGFyZQAadGVzdEludENvbXBhcmUg"
-"RkFJTEVEOiAlZAoAFnRlc3RJbnRDb21wYXJlIFBBU1NFRAoAD3Rlc3RMb25nQ29tcGFyZQAbdGVz"
-"dExvbmdDb21wYXJlIEZBSUxFRDogJWQKABd0ZXN0TG9uZ0NvbXBhcmUgUEFTU0VECgAEdGhpcwAI"
-"dW5vcFRlc3QAFHVub3BUZXN0IEZBSUxFRDogJWQKABB1bm9wVGVzdCBQQVNTRUQKABF1bnNpZ25l"
-"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"
-"eCcAAA==";
+"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"
+"BAASRCj0EgQo8gAAAwACAAAAAACpJwAAAwAAANoAAgIPAAAABAAAAAIAAgACAAIABAAAAAMAAwAD"
+"AAMAAQAAAAQAAAACAAAABAAEAAQAAAAEAAQABAAEABsAAAAEAAUABAAFAAQABQAEAAQAAgADAAIA"
+"DAAEAAEABAAEAAAADgAEAAQABQAFAAQABAAEAAQABAAAAAIAAAAFAAUABAAAAAUABQAFAAUAAgAA"
+"AAUABAACAAAACgARAAEAAAASAAY8aW5pdD4AAUIAAUMAAUQAAUYAAUkABUlEREREAAVJRkZGRgAC"
+"SUkAA0lJSQAFSUlJSUkAHElJSklKSUpJSURGRFNJQ0lJQlpJSUpKSUlJSUkAA0lKSgAFSUpKSkoA"
+"DEludE1hdGguamF2YQABSgADSkpJAAJMSQAJTEludE1hdGg7AANMTEwAFUxqYXZhL2lvL1ByaW50"
+"U3RyZWFtOwATTGphdmEvbGFuZy9JbnRlZ2VyOwASTGphdmEvbGFuZy9PYmplY3Q7ABJMamF2YS9s"
+"YW5nL1N0cmluZzsAEkxqYXZhL2xhbmcvU3lzdGVtOwALT2JqZWN0LmphdmEAAVMAAVYAAlZMAAFa"
+"AAJbSQACW0oAE1tMamF2YS9sYW5nL09iamVjdDsAE1tMamF2YS9sYW5nL1N0cmluZzsAAWEAAmEw"
+"AAJhMQADYTEwAANhMTEAA2ExMgADYTEzAANhMTQAA2ExNQADYTE2AANhMTcAA2ExOAADYTE5AAJh"
+"MgADYTIwAANhMjEAA2EyMgADYTIzAANhMjQAA2EyNQADYTI2AAJhMwACYTQAAmE1AAJhNgACYTcA"
+"AmE4AAJhOQAJYWxzb01pbnVzAAhhbHNvUGx1cwAEYXJncwABYgABYwAFY2hhcjEABWNoYXIyAAtj"
+"aGFyU3ViVGVzdAAXY2hhclN1YlRlc3QgRkFJTEVEOiAlZAoAE2NoYXJTdWJUZXN0IFBBU1NFRAoA"
+"CGNvbnZUZXN0ABRjb252VGVzdCBGQUlMRUQ6ICVkCgAQY29udlRlc3QgUEFTU0VECgABZAAEZGlz"
+"dAABZQABZgAJZmlib25hY2NpABVmaWJvbmFjY2kgRkFJTEVEOiAlZAoAEWZpYm9uYWNjaSBQQVNT"
+"RUQKAANmb28AAWcAAWgAAWkAAmkxAAJpMgALaW50T3BlclRlc3QAF2ludE9wZXJUZXN0IEZBSUxF"
+"RDogJWQKABNpbnRPcGVyVGVzdCBQQVNTRUQKAAxpbnRTaGlmdFRlc3QAAWwACWxpdDE2VGVzdAAI"
+"bGl0OFRlc3QADGxvbmdPcGVyVGVzdAAYbG9uZ09wZXJUZXN0IEZBSUxFRDogJWQKABRsb25nT3Bl"
+"clRlc3QgUEFTU0VECgANbG9uZ1NoaWZ0VGVzdAAZbG9uZ1NoaWZ0VGVzdCBGQUlMRUQ6ICVkCgAV"
+"bG9uZ1NoaWZ0VGVzdCBQQVNTRUQKAARscmVzAAZtQnl0ZXMABG1haW4ACG1hbnlBcmdzABRtYW55"
+"QXJncyBGQUlMRUQ6ICVkCgAQbWFueUFyZ3MgUEFTU0VECgAGbWluSW50AAdtaW5Mb25nAAVtaW51"
+"cwABbgADbmFuAAZuZWdPbmUAA291dAAEcGx1cwAFcGx1czIAB3BsdXNPbmUABnByaW50ZgADcmVz"
+"AAZyZXN1bHQAB3Jlc3VsdHMAAXMACnNoaWZ0VGVzdDEAFnNoaWZ0VGVzdDEgRkFJTEVEOiAlZAoA"
+"EnNoaWZ0VGVzdDEgUEFTU0VECgAKc2hpZnRUZXN0MgAWc2hpZnRUZXN0MiBGQUlMRUQ6ICVkCgAS"
+"c2hpZnRUZXN0MiBQQVNTRUQKAApzdGF0aWNDYWxsAApzd2l0Y2hUZXN0ABZzd2l0Y2hUZXN0IEZB"
+"SUxFRDogJWQKABJzd2l0Y2hUZXN0IFBBU1NFRAoAEXRlc3REb3VibGVDb21wYXJlAB10ZXN0RG91"
+"YmxlQ29tcGFyZSBGQUlMRUQ6ICVkCgAZdGVzdERvdWJsZUNvbXBhcmUgUEFTU0VECgAQdGVzdEZs"
+"b2F0Q29tcGFyZQAcdGVzdEZsb2F0Q29tcGFyZSBGQUlMRUQ6ICVkCgAYdGVzdEZsb2F0Q29tcGFy"
+"ZSBQQVNTRUQKAA50ZXN0SW50Q29tcGFyZQAadGVzdEludENvbXBhcmUgRkFJTEVEOiAlZAoAFnRl"
+"c3RJbnRDb21wYXJlIFBBU1NFRAoAD3Rlc3RMb25nQ29tcGFyZQAbdGVzdExvbmdDb21wYXJlIEZB"
+"SUxFRDogJWQKABd0ZXN0TG9uZ0NvbXBhcmUgUEFTU0VECgAEdGhpcwAIdW5vcFRlc3QAFHVub3BU"
+"ZXN0IEZBSUxFRDogJWQKABB1bm9wVGVzdCBQQVNTRUQKABF1bnNpZ25lZFNoaWZ0VGVzdAAddW5z"
+"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";
 }  // namespace art
diff --git a/src/runtime_support.h b/src/runtime_support.h
index e104035..8a7c3ba 100644
--- a/src/runtime_support.h
+++ b/src/runtime_support.h
@@ -44,4 +44,6 @@
 
 #endif
 
+  extern void artHandleFillArrayDataNoThrow(art::Array*, const uint16_t*);
+
 #endif  // ART_SRC_RUNTIME_SUPPORT_H_
diff --git a/src/thread.cc b/src/thread.cc
index 4d9386f..ed902ab 100644
--- a/src/thread.cc
+++ b/src/thread.cc
@@ -62,6 +62,7 @@
 #endif
   pArtAllocArrayByClass = Array::Alloc;
   pMemcpy = memcpy;
+  pArtHandleFillArrayDataNoThrow = artHandleFillArrayDataNoThrow;
 #if 0
 bool (Thread::*pArtUnlockObject)(struct Thread*, struct Object*);
 bool (Thread::*pArtCanPutArrayElementNoThrow)(const struct ClassObject*,
diff --git a/src/thread.h b/src/thread.h
index 8a3a49b..bb3f63b 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -210,7 +210,7 @@
   void (*pArtLockObjectNoThrow)(struct Thread*, struct Object*);
   struct Object* (*pArtAllocObjectNoThrow)(struct ClassObject*, int);
   void (*pArtThrowException)(struct Thread*, struct Object*);
-  bool (*pArtHandleFillArrayDataNoThrow)(struct ArrayObject*, const uint16_t*);
+  void (*pArtHandleFillArrayDataNoThrow)(Array*, const uint16_t*);
 
   // Creates a new thread.
   static Thread* Create(const Runtime* runtime);