diff options
| author | 2018-08-21 14:04:14 +0000 | |
|---|---|---|
| committer | 2018-08-21 14:04:14 +0000 | |
| commit | c0dec2236b976794ff8f6cc3c2f41c36756ffaf9 (patch) | |
| tree | 5354bafea925f227111ae48a58f1bfd51e4b351f | |
| parent | 20893eef2fe90eef24cc0f7c2f213b10d8515050 (diff) | |
| parent | 27c3df546db6507170ccd0e1da2fbb9397594099 (diff) | |
Merge "Optimize the mterp field setter."
| -rw-r--r-- | runtime/interpreter/mterp/mterp.cc | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/runtime/interpreter/mterp/mterp.cc b/runtime/interpreter/mterp/mterp.cc index abbc50936d..e0a48740dc 100644 --- a/runtime/interpreter/mterp/mterp.cc +++ b/runtime/interpreter/mterp/mterp.cc @@ -763,7 +763,7 @@ extern "C" ssize_t artSet8InstanceFromMterp(uint32_t field_idx, uint8_t new_value, ArtMethod* referrer) REQUIRES_SHARED(Locks::mutator_lock_) { - ArtField* field = FindFieldFast(field_idx, referrer, InstancePrimitiveWrite, sizeof(int8_t)); + ArtField* field = referrer->GetDexCache()->GetResolvedField(field_idx, kRuntimePointerSize); if (LIKELY(field != nullptr && obj != nullptr)) { Primitive::Type type = field->GetTypeAsPrimitiveType(); if (type == Primitive::kPrimBoolean) { @@ -782,8 +782,7 @@ extern "C" ssize_t artSet16InstanceFromMterp(uint32_t field_idx, uint16_t new_value, ArtMethod* referrer) REQUIRES_SHARED(Locks::mutator_lock_) { - ArtField* field = FindFieldFast(field_idx, referrer, InstancePrimitiveWrite, - sizeof(int16_t)); + ArtField* field = referrer->GetDexCache()->GetResolvedField(field_idx, kRuntimePointerSize); if (LIKELY(field != nullptr && obj != nullptr)) { Primitive::Type type = field->GetTypeAsPrimitiveType(); if (type == Primitive::kPrimChar) { @@ -802,8 +801,7 @@ extern "C" ssize_t artSet32InstanceFromMterp(uint32_t field_idx, uint32_t new_value, ArtMethod* referrer) REQUIRES_SHARED(Locks::mutator_lock_) { - ArtField* field = FindFieldFast(field_idx, referrer, InstancePrimitiveWrite, - sizeof(int32_t)); + ArtField* field = referrer->GetDexCache()->GetResolvedField(field_idx, kRuntimePointerSize); if (LIKELY(field != nullptr && obj != nullptr)) { field->Set32<false>(obj, new_value); return 0; // success @@ -816,8 +814,7 @@ extern "C" ssize_t artSet64InstanceFromMterp(uint32_t field_idx, uint64_t* new_value, ArtMethod* referrer) REQUIRES_SHARED(Locks::mutator_lock_) { - ArtField* field = FindFieldFast(field_idx, referrer, InstancePrimitiveWrite, - sizeof(int64_t)); + ArtField* field = referrer->GetDexCache()->GetResolvedField(field_idx, kRuntimePointerSize); if (LIKELY(field != nullptr && obj != nullptr)) { field->Set64<false>(obj, *new_value); return 0; // success @@ -830,8 +827,7 @@ extern "C" ssize_t artSetObjInstanceFromMterp(uint32_t field_idx, mirror::Object* new_value, ArtMethod* referrer) REQUIRES_SHARED(Locks::mutator_lock_) { - ArtField* field = FindFieldFast(field_idx, referrer, InstanceObjectWrite, - sizeof(mirror::HeapReference<mirror::Object>)); + ArtField* field = referrer->GetDexCache()->GetResolvedField(field_idx, kRuntimePointerSize); if (LIKELY(field != nullptr && obj != nullptr)) { field->SetObj<false>(obj, new_value); return 0; // success |