ART: String intrinsics for Mterp interpreter

Adds the most common java.lang.string intrinsics.  Includes change
to jvalue handling to zero-exend setting of chars and booleans to
64 bits (aligns with current sign-extension of shorts and ints).

Bug: 30933338

Benchmarks:
  2x boost for Caffeinemark String
  11% improvement for Dhrystone

Test: ART_TEST_INTERPRETER=true m test-art-host
Test: ART_TEST_INTERPRETER=true m test-art-target (Bullhead)

Note: Added intrinsics have existing test coverage via
082-inline-execute and 123-inline-execute2.

Change-Id: I64b35b1d7bdfe14da0c662594c0edf5cde667277
diff --git a/runtime/jvalue.h b/runtime/jvalue.h
index 398bfbc..f61a07c 100644
--- a/runtime/jvalue.h
+++ b/runtime/jvalue.h
@@ -39,7 +39,9 @@
   }
 
   uint16_t GetC() const { return c; }
-  void SetC(uint16_t new_c) { c = new_c; }
+  void SetC(uint16_t new_c) {
+    j = static_cast<int64_t>(new_c);  // Zero-extend to 64 bits.
+  }
 
   double GetD() const { return d; }
   void SetD(double new_d) { d = new_d; }
@@ -66,7 +68,9 @@
   }
 
   uint8_t GetZ() const { return z; }
-  void SetZ(uint8_t new_z) { z = new_z; }
+  void SetZ(uint8_t new_z) {
+    j = static_cast<int64_t>(new_z);  // Zero-extend to 64 bits.
+  }
 
   mirror::Object** GetGCRoot() { return &l; }