Force inlining on trivial accessors.

Make volatility for GetFieldObject a template parameter.
Move some trivial mirror::String routines to a -inl.h.

Bug: 14285442

Change-Id: Ie23b11d4f18cb15a62c3bbb42837a8aaf6b68f92
diff --git a/runtime/transaction.cc b/runtime/transaction.cc
index e18cf04..cc02a8d 100644
--- a/runtime/transaction.cc
+++ b/runtime/transaction.cc
@@ -282,17 +282,29 @@
   constexpr bool kCheckTransaction = true;
   switch (field_value.kind) {
     case k32Bits:
-      obj->SetField32<false, kCheckTransaction>(field_offset, static_cast<uint32_t>(field_value.value),
-                                                field_value.is_volatile);
+      if (UNLIKELY(field_value.is_volatile)) {
+        obj->SetField32Volatile<false, kCheckTransaction>(field_offset,
+                                                          static_cast<uint32_t>(field_value.value));
+      } else {
+        obj->SetField32<false, kCheckTransaction>(field_offset,
+                                                  static_cast<uint32_t>(field_value.value));
+      }
       break;
     case k64Bits:
-      obj->SetField64<false, kCheckTransaction>(field_offset, field_value.value,
-                                                field_value.is_volatile);
+      if (UNLIKELY(field_value.is_volatile)) {
+        obj->SetField64Volatile<false, kCheckTransaction>(field_offset, field_value.value);
+      } else {
+        obj->SetField64<false, kCheckTransaction>(field_offset, field_value.value);
+      }
       break;
     case kReference:
-      obj->SetFieldObject<false, kCheckTransaction>(field_offset,
-                                                    reinterpret_cast<mirror::Object*>(field_value.value),
-                                                    field_value.is_volatile);
+      if (UNLIKELY(field_value.is_volatile)) {
+        obj->SetFieldObjectVolatile<false, kCheckTransaction>(field_offset,
+                                                              reinterpret_cast<mirror::Object*>(field_value.value));
+      } else {
+        obj->SetFieldObject<false, kCheckTransaction>(field_offset,
+                                                      reinterpret_cast<mirror::Object*>(field_value.value));
+      }
       break;
     default:
       LOG(FATAL) << "Unknown value kind " << field_value.kind;