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;