Switch-interpreter: Add helpers to get opcode arguments.
Add trivial helpers to get opcodes arguments (A/B/C).
Ensure the generic getters in Instruction can take
advantage of knowing the format at compile-time.
As the first step, I have simplified the code only where
the argument is used as index for SetVReg/GetVReg calls.
Test: ART_USE_CXX_INTERPRETER=true ./art/test.py -b --host
Test: ART_USE_CXX_INTERPRETER=true ./art/tools/run-jdwp-tests.sh \
--mode=host --variant=X32 --debug --no-jit
Change-Id: I765c0eb16438806c3624fabe3aade040c7bb3387
diff --git a/dexlayout/dex_ir_builder.cc b/dexlayout/dex_ir_builder.cc
index f4195b2..5636e2c 100644
--- a/dexlayout/dex_ir_builder.cc
+++ b/dexlayout/dex_ir_builder.cc
@@ -25,6 +25,7 @@
#include "dex/class_accessor-inl.h"
#include "dex/code_item_accessors-inl.h"
#include "dex/dex_file_exception_helpers.h"
+#include "dex/dex_instruction-inl.h"
#include "dexlayout.h"
namespace art {
diff --git a/libdexfile/dex/dex_instruction-inl.h b/libdexfile/dex/dex_instruction-inl.h
index e0cffdd..88e9381 100644
--- a/libdexfile/dex/dex_instruction-inl.h
+++ b/libdexfile/dex/dex_instruction-inl.h
@@ -57,33 +57,38 @@
}
inline int32_t Instruction::VRegA() const {
- switch (FormatOf(Opcode())) {
- case k10t: return VRegA_10t();
- case k10x: return VRegA_10x();
- case k11n: return VRegA_11n();
- case k11x: return VRegA_11x();
- case k12x: return VRegA_12x();
+ return VRegA(FormatOf(Opcode()), Fetch16(0));
+}
+
+inline int32_t Instruction::VRegA(Format format, uint16_t inst_data) const {
+ DCHECK_EQ(format, FormatOf(Opcode()));
+ switch (format) {
+ case k10t: return VRegA_10t(inst_data);
+ case k10x: return VRegA_10x(inst_data);
+ case k11n: return VRegA_11n(inst_data);
+ case k11x: return VRegA_11x(inst_data);
+ case k12x: return VRegA_12x(inst_data);
case k20t: return VRegA_20t();
- case k21c: return VRegA_21c();
- case k21h: return VRegA_21h();
- case k21s: return VRegA_21s();
- case k21t: return VRegA_21t();
- case k22b: return VRegA_22b();
- case k22c: return VRegA_22c();
- case k22s: return VRegA_22s();
- case k22t: return VRegA_22t();
- case k22x: return VRegA_22x();
- case k23x: return VRegA_23x();
+ case k21c: return VRegA_21c(inst_data);
+ case k21h: return VRegA_21h(inst_data);
+ case k21s: return VRegA_21s(inst_data);
+ case k21t: return VRegA_21t(inst_data);
+ case k22b: return VRegA_22b(inst_data);
+ case k22c: return VRegA_22c(inst_data);
+ case k22s: return VRegA_22s(inst_data);
+ case k22t: return VRegA_22t(inst_data);
+ case k22x: return VRegA_22x(inst_data);
+ case k23x: return VRegA_23x(inst_data);
case k30t: return VRegA_30t();
- case k31c: return VRegA_31c();
- case k31i: return VRegA_31i();
- case k31t: return VRegA_31t();
+ case k31c: return VRegA_31c(inst_data);
+ case k31i: return VRegA_31i(inst_data);
+ case k31t: return VRegA_31t(inst_data);
case k32x: return VRegA_32x();
- case k35c: return VRegA_35c();
- case k3rc: return VRegA_3rc();
- case k45cc: return VRegA_45cc();
- case k4rcc: return VRegA_4rcc();
- case k51l: return VRegA_51l();
+ case k35c: return VRegA_35c(inst_data);
+ case k3rc: return VRegA_3rc(inst_data);
+ case k45cc: return VRegA_45cc(inst_data);
+ case k4rcc: return VRegA_4rcc(inst_data);
+ case k51l: return VRegA_51l(inst_data);
default:
LOG(FATAL) << "Tried to access vA of instruction " << Name() << " which has no A operand.";
exit(EXIT_FAILURE);
@@ -255,17 +260,22 @@
}
inline int32_t Instruction::VRegB() const {
- switch (FormatOf(Opcode())) {
- case k11n: return VRegB_11n();
- case k12x: return VRegB_12x();
+ return VRegB(FormatOf(Opcode()), Fetch16(0));
+}
+
+inline int32_t Instruction::VRegB(Format format, uint16_t inst_data) const {
+ DCHECK_EQ(format, FormatOf(Opcode()));
+ switch (format) {
+ case k11n: return VRegB_11n(inst_data);
+ case k12x: return VRegB_12x(inst_data);
case k21c: return VRegB_21c();
case k21h: return VRegB_21h();
case k21s: return VRegB_21s();
case k21t: return VRegB_21t();
case k22b: return VRegB_22b();
- case k22c: return VRegB_22c();
- case k22s: return VRegB_22s();
- case k22t: return VRegB_22t();
+ case k22c: return VRegB_22c(inst_data);
+ case k22s: return VRegB_22s(inst_data);
+ case k22t: return VRegB_22t(inst_data);
case k22x: return VRegB_22x();
case k23x: return VRegB_23x();
case k31c: return VRegB_31c();
@@ -412,7 +422,12 @@
}
inline int32_t Instruction::VRegC() const {
- switch (FormatOf(Opcode())) {
+ return VRegC(FormatOf(Opcode()));
+}
+
+inline int32_t Instruction::VRegC(Format format) const {
+ DCHECK_EQ(format, FormatOf(Opcode()));
+ switch (format) {
case k22b: return VRegC_22b();
case k22c: return VRegC_22c();
case k22s: return VRegC_22s();
diff --git a/libdexfile/dex/dex_instruction.cc b/libdexfile/dex/dex_instruction.cc
index f36a2aa..37fc455 100644
--- a/libdexfile/dex/dex_instruction.cc
+++ b/libdexfile/dex/dex_instruction.cc
@@ -510,6 +510,7 @@
}
break;
case k51l: os << StringPrintf("%s v%d, #%+" PRId64, opcode, VRegA_51l(), VRegB_51l()); break;
+ case kInvalidFormat: os << "<invalid-opcode-format>";
}
return os.str();
}
diff --git a/libdexfile/dex/dex_instruction.h b/libdexfile/dex/dex_instruction.h
index 4b38904..a783301 100644
--- a/libdexfile/dex/dex_instruction.h
+++ b/libdexfile/dex/dex_instruction.h
@@ -123,6 +123,7 @@
k4rcc, // op {VCCCC .. v(CCCC+AA-1)}, meth@BBBB, proto@HHHH (AA: count)
k51l, // op vAA, #+BBBBBBBBBBBBBBBB
+ kInvalidFormat,
};
enum IndexType : uint8_t {
@@ -291,6 +292,7 @@
// VRegA
bool HasVRegA() const;
ALWAYS_INLINE int32_t VRegA() const;
+ ALWAYS_INLINE int32_t VRegA(Format format, uint16_t inst_data) const;
int8_t VRegA_10t() const {
return VRegA_10t(Fetch16(0));
@@ -393,7 +395,8 @@
// VRegB
bool HasVRegB() const;
- int32_t VRegB() const;
+ ALWAYS_INLINE int32_t VRegB() const;
+ ALWAYS_INLINE int32_t VRegB(Format format, uint16_t inst_data) const;
bool HasWideVRegB() const;
uint64_t WideVRegB() const;
@@ -441,7 +444,8 @@
// VRegC
bool HasVRegC() const;
- int32_t VRegC() const;
+ ALWAYS_INLINE int32_t VRegC() const;
+ ALWAYS_INLINE int32_t VRegC(Format format) const;
int8_t VRegC_22b() const;
uint16_t VRegC_22c() const;
diff --git a/runtime/interpreter/interpreter_switch_impl-inl.h b/runtime/interpreter/interpreter_switch_impl-inl.h
index 1a88f1b..7553527 100644
--- a/runtime/interpreter/interpreter_switch_impl-inl.h
+++ b/runtime/interpreter/interpreter_switch_impl-inl.h
@@ -46,7 +46,7 @@
// Helper methods may return boolean value - in which case 'false' always means
// "stop executing current opcode" (which does not necessarily exit the interpreter loop).
//
-template<bool do_access_check, bool transaction_active>
+template<bool do_access_check, bool transaction_active, Instruction::Format kFormat>
class InstructionHandler {
public:
ALWAYS_INLINE WARN_UNUSED bool CheckForceReturn()
@@ -110,7 +110,7 @@
// address even in the handler copy. Make a copy of them just for the call as well.
const Instruction* inst_copy = inst;
bool exit_loop_copy = exit_interpreter_loop;
- InstructionHandler<do_access_check, transaction_active> handler_copy(
+ InstructionHandler<do_access_check, transaction_active, kFormat> handler_copy(
ctx, instrumentation, self, shadow_frame, dex_pc, inst_copy, inst_data, exit_loop_copy);
bool result = handler_copy.HandlePendingExceptionWithInstrumentationImpl(instr);
inst = inst_copy;
@@ -357,78 +357,78 @@
}
ALWAYS_INLINE void MOVE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_12x(inst_data),
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void MOVE_FROM16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22x(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22x()));
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void MOVE_16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_32x(),
- shadow_frame.GetVReg(inst->VRegB_32x()));
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()));
inst = inst->Next_3xx();
}
ALWAYS_INLINE void MOVE_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_12x(inst_data),
- shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+ shadow_frame.SetVRegLong(A(),
+ shadow_frame.GetVRegLong(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void MOVE_WIDE_FROM16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_22x(inst_data),
- shadow_frame.GetVRegLong(inst->VRegB_22x()));
+ shadow_frame.SetVRegLong(A(),
+ shadow_frame.GetVRegLong(B()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void MOVE_WIDE_16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_32x(),
- shadow_frame.GetVRegLong(inst->VRegB_32x()));
+ shadow_frame.SetVRegLong(A(),
+ shadow_frame.GetVRegLong(B()));
inst = inst->Next_3xx();
}
ALWAYS_INLINE void MOVE_OBJECT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegReference(inst->VRegA_12x(inst_data),
- shadow_frame.GetVRegReference(inst->VRegB_12x(inst_data)));
+ shadow_frame.SetVRegReference(A(),
+ shadow_frame.GetVRegReference(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void MOVE_OBJECT_FROM16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegReference(inst->VRegA_22x(inst_data),
- shadow_frame.GetVRegReference(inst->VRegB_22x()));
+ shadow_frame.SetVRegReference(A(),
+ shadow_frame.GetVRegReference(B()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void MOVE_OBJECT_16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegReference(inst->VRegA_32x(),
- shadow_frame.GetVRegReference(inst->VRegB_32x()));
+ shadow_frame.SetVRegReference(A(),
+ shadow_frame.GetVRegReference(B()));
inst = inst->Next_3xx();
}
ALWAYS_INLINE void MOVE_RESULT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_11x(inst_data), ResultRegister()->GetI());
+ shadow_frame.SetVReg(A(), ResultRegister()->GetI());
inst = inst->Next_1xx();
}
ALWAYS_INLINE void MOVE_RESULT_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_11x(inst_data), ResultRegister()->GetJ());
+ shadow_frame.SetVRegLong(A(), ResultRegister()->GetJ());
inst = inst->Next_1xx();
}
ALWAYS_INLINE void MOVE_RESULT_OBJECT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegReference(inst->VRegA_11x(inst_data), ResultRegister()->GetL());
+ shadow_frame.SetVRegReference(A(), ResultRegister()->GetL());
inst = inst->Next_1xx();
}
ALWAYS_INLINE void MOVE_EXCEPTION() REQUIRES_SHARED(Locks::mutator_lock_) {
ObjPtr<mirror::Throwable> exception = self->GetException();
DCHECK(exception != nullptr) << "No pending exception on MOVE_EXCEPTION instruction";
- shadow_frame.SetVRegReference(inst->VRegA_11x(inst_data), exception);
+ shadow_frame.SetVRegReference(A(), exception);
self->ClearException();
inst = inst->Next_1xx();
}
@@ -489,7 +489,7 @@
ALWAYS_INLINE void RETURN() REQUIRES_SHARED(Locks::mutator_lock_) {
JValue result;
result.SetJ(0);
- result.SetI(shadow_frame.GetVReg(inst->VRegA_11x(inst_data)));
+ result.SetI(shadow_frame.GetVReg(A()));
self->AllowThreadSuspension();
if (!HandleMonitorChecks()) {
return;
@@ -516,7 +516,7 @@
ALWAYS_INLINE void RETURN_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
JValue result;
- result.SetJ(shadow_frame.GetVRegLong(inst->VRegA_11x(inst_data)));
+ result.SetJ(shadow_frame.GetVRegLong(A()));
self->AllowThreadSuspension();
if (!HandleMonitorChecks()) {
return;
@@ -631,22 +631,22 @@
}
ALWAYS_INLINE void CONST_WIDE_16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_21s(inst_data), inst->VRegB_21s());
+ shadow_frame.SetVRegLong(A(), inst->VRegB_21s());
inst = inst->Next_2xx();
}
ALWAYS_INLINE void CONST_WIDE_32() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_31i(inst_data), inst->VRegB_31i());
+ shadow_frame.SetVRegLong(A(), inst->VRegB_31i());
inst = inst->Next_3xx();
}
ALWAYS_INLINE void CONST_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_51l(inst_data), inst->VRegB_51l());
+ shadow_frame.SetVRegLong(A(), inst->VRegB_51l());
inst = inst->Next_51l();
}
ALWAYS_INLINE void CONST_WIDE_HIGH16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_21h(inst_data),
+ shadow_frame.SetVRegLong(A(),
static_cast<uint64_t>(inst->VRegB_21h()) << 48);
inst = inst->Next_2xx();
}
@@ -658,7 +658,7 @@
if (UNLIKELY(s == nullptr)) {
HANDLE_PENDING_EXCEPTION();
} else {
- shadow_frame.SetVRegReference(inst->VRegA_21c(inst_data), s);
+ shadow_frame.SetVRegReference(A(), s);
inst = inst->Next_2xx();
}
}
@@ -670,7 +670,7 @@
if (UNLIKELY(s == nullptr)) {
HANDLE_PENDING_EXCEPTION();
} else {
- shadow_frame.SetVRegReference(inst->VRegA_31c(inst_data), s);
+ shadow_frame.SetVRegReference(A(), s);
inst = inst->Next_3xx();
}
}
@@ -684,7 +684,7 @@
if (UNLIKELY(c == nullptr)) {
HANDLE_PENDING_EXCEPTION();
} else {
- shadow_frame.SetVRegReference(inst->VRegA_21c(inst_data), c);
+ shadow_frame.SetVRegReference(A(), c);
inst = inst->Next_2xx();
}
}
@@ -697,7 +697,7 @@
if (UNLIKELY(mh == nullptr)) {
HANDLE_PENDING_EXCEPTION();
} else {
- shadow_frame.SetVRegReference(inst->VRegA_21c(inst_data), mh);
+ shadow_frame.SetVRegReference(A(), mh);
inst = inst->Next_2xx();
}
}
@@ -710,7 +710,7 @@
if (UNLIKELY(mt == nullptr)) {
HANDLE_PENDING_EXCEPTION();
} else {
- shadow_frame.SetVRegReference(inst->VRegA_21c(inst_data), mt);
+ shadow_frame.SetVRegReference(A(), mt);
inst = inst->Next_2xx();
}
}
@@ -719,7 +719,7 @@
if (!HandleAsyncException()) {
return;
}
- ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(inst->VRegA_11x(inst_data));
+ ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(A());
if (UNLIKELY(obj == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
@@ -733,7 +733,7 @@
if (!HandleAsyncException()) {
return;
}
- ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(inst->VRegA_11x(inst_data));
+ ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(A());
if (UNLIKELY(obj == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
@@ -752,7 +752,7 @@
if (UNLIKELY(c == nullptr)) {
HANDLE_PENDING_EXCEPTION();
} else {
- ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(inst->VRegA_21c(inst_data));
+ ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(A());
if (UNLIKELY(obj != nullptr && !obj->InstanceOf(c))) {
ThrowClassCastException(c, obj->GetClass());
HANDLE_PENDING_EXCEPTION();
@@ -771,20 +771,20 @@
if (UNLIKELY(c == nullptr)) {
HANDLE_PENDING_EXCEPTION();
} else {
- ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(inst->VRegB_22c(inst_data));
- shadow_frame.SetVReg(inst->VRegA_22c(inst_data),
+ ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(B());
+ shadow_frame.SetVReg(A(),
(obj != nullptr && obj->InstanceOf(c)) ? 1 : 0);
inst = inst->Next_2xx();
}
}
ALWAYS_INLINE void ARRAY_LENGTH() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> array = shadow_frame.GetVRegReference(inst->VRegB_12x(inst_data));
+ ObjPtr<mirror::Object> array = shadow_frame.GetVRegReference(B());
if (UNLIKELY(array == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
} else {
- shadow_frame.SetVReg(inst->VRegA_12x(inst_data), array->AsArray()->GetLength());
+ shadow_frame.SetVReg(A(), array->AsArray()->GetLength());
inst = inst->Next_1xx();
}
}
@@ -815,13 +815,13 @@
obj->PrettyTypeOf().c_str());
HANDLE_PENDING_EXCEPTION();
}
- shadow_frame.SetVRegReference(inst->VRegA_21c(inst_data), obj);
+ shadow_frame.SetVRegReference(A(), obj);
inst = inst->Next_2xx();
}
}
ALWAYS_INLINE void NEW_ARRAY() REQUIRES_SHARED(Locks::mutator_lock_) {
- int32_t length = shadow_frame.GetVReg(inst->VRegB_22c(inst_data));
+ int32_t length = shadow_frame.GetVReg(B());
ObjPtr<mirror::Object> obj = AllocArrayFromCode<do_access_check>(
dex::TypeIndex(inst->VRegC_22c()),
length,
@@ -831,7 +831,7 @@
if (UNLIKELY(obj == nullptr)) {
HANDLE_PENDING_EXCEPTION();
} else {
- shadow_frame.SetVRegReference(inst->VRegA_22c(inst_data), obj);
+ shadow_frame.SetVRegReference(A(), obj);
inst = inst->Next_2xx();
}
}
@@ -854,7 +854,7 @@
const uint16_t* payload_addr = reinterpret_cast<const uint16_t*>(inst) + inst->VRegB_31t();
const Instruction::ArrayDataPayload* payload =
reinterpret_cast<const Instruction::ArrayDataPayload*>(payload_addr);
- ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(inst->VRegA_31t(inst_data));
+ ObjPtr<mirror::Object> obj = shadow_frame.GetVRegReference(A());
bool success = FillArrayData(obj, payload);
if (!success) {
HANDLE_PENDING_EXCEPTION();
@@ -870,7 +870,7 @@
return;
}
ObjPtr<mirror::Object> exception =
- shadow_frame.GetVRegReference(inst->VRegA_11x(inst_data));
+ shadow_frame.GetVRegReference(A());
if (UNLIKELY(exception == nullptr)) {
ThrowNullPointerException("throw with null exception");
} else if (do_assignability_check && !exception->GetClass()->IsThrowableClass()) {
@@ -934,8 +934,8 @@
ALWAYS_INLINE void CMPL_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
- float val1 = shadow_frame.GetVRegFloat(inst->VRegB_23x());
- float val2 = shadow_frame.GetVRegFloat(inst->VRegC_23x());
+ float val1 = shadow_frame.GetVRegFloat(B());
+ float val2 = shadow_frame.GetVRegFloat(C());
int32_t result;
if (val1 > val2) {
result = 1;
@@ -944,13 +944,13 @@
} else {
result = -1;
}
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data), result);
+ shadow_frame.SetVReg(A(), result);
inst = inst->Next_2xx();
}
ALWAYS_INLINE void CMPG_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
- float val1 = shadow_frame.GetVRegFloat(inst->VRegB_23x());
- float val2 = shadow_frame.GetVRegFloat(inst->VRegC_23x());
+ float val1 = shadow_frame.GetVRegFloat(B());
+ float val2 = shadow_frame.GetVRegFloat(C());
int32_t result;
if (val1 < val2) {
result = -1;
@@ -959,13 +959,13 @@
} else {
result = 1;
}
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data), result);
+ shadow_frame.SetVReg(A(), result);
inst = inst->Next_2xx();
}
ALWAYS_INLINE void CMPL_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
- double val1 = shadow_frame.GetVRegDouble(inst->VRegB_23x());
- double val2 = shadow_frame.GetVRegDouble(inst->VRegC_23x());
+ double val1 = shadow_frame.GetVRegDouble(B());
+ double val2 = shadow_frame.GetVRegDouble(C());
int32_t result;
if (val1 > val2) {
result = 1;
@@ -974,14 +974,14 @@
} else {
result = -1;
}
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data), result);
+ shadow_frame.SetVReg(A(), result);
inst = inst->Next_2xx();
}
ALWAYS_INLINE void CMPG_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
- double val1 = shadow_frame.GetVRegDouble(inst->VRegB_23x());
- double val2 = shadow_frame.GetVRegDouble(inst->VRegC_23x());
+ double val1 = shadow_frame.GetVRegDouble(B());
+ double val2 = shadow_frame.GetVRegDouble(C());
int32_t result;
if (val1 < val2) {
result = -1;
@@ -990,7 +990,7 @@
} else {
result = 1;
}
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data), result);
+ shadow_frame.SetVReg(A(), result);
inst = inst->Next_2xx();
}
@@ -998,8 +998,8 @@
ALWAYS_INLINE void CMP_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- int64_t val1 = shadow_frame.GetVRegLong(inst->VRegB_23x());
- int64_t val2 = shadow_frame.GetVRegLong(inst->VRegC_23x());
+ int64_t val1 = shadow_frame.GetVRegLong(B());
+ int64_t val2 = shadow_frame.GetVRegLong(C());
int32_t result;
if (val1 > val2) {
result = 1;
@@ -1008,13 +1008,13 @@
} else {
result = -1;
}
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data), result);
+ shadow_frame.SetVReg(A(), result);
inst = inst->Next_2xx();
}
ALWAYS_INLINE void IF_EQ() REQUIRES_SHARED(Locks::mutator_lock_) {
- if (shadow_frame.GetVReg(inst->VRegA_22t(inst_data)) ==
- shadow_frame.GetVReg(inst->VRegB_22t(inst_data))) {
+ if (shadow_frame.GetVReg(A()) ==
+ shadow_frame.GetVReg(B())) {
int16_t offset = inst->VRegC_22t();
BRANCH_INSTRUMENTATION(offset);
inst = inst->RelativeAt(offset);
@@ -1026,8 +1026,8 @@
}
ALWAYS_INLINE void IF_NE() REQUIRES_SHARED(Locks::mutator_lock_) {
- if (shadow_frame.GetVReg(inst->VRegA_22t(inst_data)) !=
- shadow_frame.GetVReg(inst->VRegB_22t(inst_data))) {
+ if (shadow_frame.GetVReg(A()) !=
+ shadow_frame.GetVReg(B())) {
int16_t offset = inst->VRegC_22t();
BRANCH_INSTRUMENTATION(offset);
inst = inst->RelativeAt(offset);
@@ -1039,8 +1039,8 @@
}
ALWAYS_INLINE void IF_LT() REQUIRES_SHARED(Locks::mutator_lock_) {
- if (shadow_frame.GetVReg(inst->VRegA_22t(inst_data)) <
- shadow_frame.GetVReg(inst->VRegB_22t(inst_data))) {
+ if (shadow_frame.GetVReg(A()) <
+ shadow_frame.GetVReg(B())) {
int16_t offset = inst->VRegC_22t();
BRANCH_INSTRUMENTATION(offset);
inst = inst->RelativeAt(offset);
@@ -1052,8 +1052,8 @@
}
ALWAYS_INLINE void IF_GE() REQUIRES_SHARED(Locks::mutator_lock_) {
- if (shadow_frame.GetVReg(inst->VRegA_22t(inst_data)) >=
- shadow_frame.GetVReg(inst->VRegB_22t(inst_data))) {
+ if (shadow_frame.GetVReg(A()) >=
+ shadow_frame.GetVReg(B())) {
int16_t offset = inst->VRegC_22t();
BRANCH_INSTRUMENTATION(offset);
inst = inst->RelativeAt(offset);
@@ -1065,8 +1065,8 @@
}
ALWAYS_INLINE void IF_GT() REQUIRES_SHARED(Locks::mutator_lock_) {
- if (shadow_frame.GetVReg(inst->VRegA_22t(inst_data)) >
- shadow_frame.GetVReg(inst->VRegB_22t(inst_data))) {
+ if (shadow_frame.GetVReg(A()) >
+ shadow_frame.GetVReg(B())) {
int16_t offset = inst->VRegC_22t();
BRANCH_INSTRUMENTATION(offset);
inst = inst->RelativeAt(offset);
@@ -1078,8 +1078,8 @@
}
ALWAYS_INLINE void IF_LE() REQUIRES_SHARED(Locks::mutator_lock_) {
- if (shadow_frame.GetVReg(inst->VRegA_22t(inst_data)) <=
- shadow_frame.GetVReg(inst->VRegB_22t(inst_data))) {
+ if (shadow_frame.GetVReg(A()) <=
+ shadow_frame.GetVReg(B())) {
int16_t offset = inst->VRegC_22t();
BRANCH_INSTRUMENTATION(offset);
inst = inst->RelativeAt(offset);
@@ -1091,7 +1091,7 @@
}
ALWAYS_INLINE void IF_EQZ() REQUIRES_SHARED(Locks::mutator_lock_) {
- if (shadow_frame.GetVReg(inst->VRegA_21t(inst_data)) == 0) {
+ if (shadow_frame.GetVReg(A()) == 0) {
int16_t offset = inst->VRegB_21t();
BRANCH_INSTRUMENTATION(offset);
inst = inst->RelativeAt(offset);
@@ -1103,7 +1103,7 @@
}
ALWAYS_INLINE void IF_NEZ() REQUIRES_SHARED(Locks::mutator_lock_) {
- if (shadow_frame.GetVReg(inst->VRegA_21t(inst_data)) != 0) {
+ if (shadow_frame.GetVReg(A()) != 0) {
int16_t offset = inst->VRegB_21t();
BRANCH_INSTRUMENTATION(offset);
inst = inst->RelativeAt(offset);
@@ -1115,7 +1115,7 @@
}
ALWAYS_INLINE void IF_LTZ() REQUIRES_SHARED(Locks::mutator_lock_) {
- if (shadow_frame.GetVReg(inst->VRegA_21t(inst_data)) < 0) {
+ if (shadow_frame.GetVReg(A()) < 0) {
int16_t offset = inst->VRegB_21t();
BRANCH_INSTRUMENTATION(offset);
inst = inst->RelativeAt(offset);
@@ -1127,7 +1127,7 @@
}
ALWAYS_INLINE void IF_GEZ() REQUIRES_SHARED(Locks::mutator_lock_) {
- if (shadow_frame.GetVReg(inst->VRegA_21t(inst_data)) >= 0) {
+ if (shadow_frame.GetVReg(A()) >= 0) {
int16_t offset = inst->VRegB_21t();
BRANCH_INSTRUMENTATION(offset);
inst = inst->RelativeAt(offset);
@@ -1139,7 +1139,7 @@
}
ALWAYS_INLINE void IF_GTZ() REQUIRES_SHARED(Locks::mutator_lock_) {
- if (shadow_frame.GetVReg(inst->VRegA_21t(inst_data)) > 0) {
+ if (shadow_frame.GetVReg(A()) > 0) {
int16_t offset = inst->VRegB_21t();
BRANCH_INSTRUMENTATION(offset);
inst = inst->RelativeAt(offset);
@@ -1151,7 +1151,7 @@
}
ALWAYS_INLINE void IF_LEZ() REQUIRES_SHARED(Locks::mutator_lock_) {
- if (shadow_frame.GetVReg(inst->VRegA_21t(inst_data)) <= 0) {
+ if (shadow_frame.GetVReg(A()) <= 0) {
int16_t offset = inst->VRegB_21t();
BRANCH_INSTRUMENTATION(offset);
inst = inst->RelativeAt(offset);
@@ -1163,15 +1163,15 @@
}
ALWAYS_INLINE void AGET_BOOLEAN() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ int32_t index = shadow_frame.GetVReg(C());
ObjPtr<mirror::BooleanArray> array = a->AsBooleanArray();
if (array->CheckIsValidIndex(index)) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+ shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
inst = inst->Next_2xx();
} else {
HANDLE_PENDING_EXCEPTION();
@@ -1179,15 +1179,15 @@
}
ALWAYS_INLINE void AGET_BYTE() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ int32_t index = shadow_frame.GetVReg(C());
ObjPtr<mirror::ByteArray> array = a->AsByteArray();
if (array->CheckIsValidIndex(index)) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+ shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
inst = inst->Next_2xx();
} else {
HANDLE_PENDING_EXCEPTION();
@@ -1195,15 +1195,15 @@
}
ALWAYS_INLINE void AGET_CHAR() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ int32_t index = shadow_frame.GetVReg(C());
ObjPtr<mirror::CharArray> array = a->AsCharArray();
if (array->CheckIsValidIndex(index)) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+ shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
inst = inst->Next_2xx();
} else {
HANDLE_PENDING_EXCEPTION();
@@ -1211,15 +1211,15 @@
}
ALWAYS_INLINE void AGET_SHORT() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ int32_t index = shadow_frame.GetVReg(C());
ObjPtr<mirror::ShortArray> array = a->AsShortArray();
if (array->CheckIsValidIndex(index)) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+ shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
inst = inst->Next_2xx();
} else {
HANDLE_PENDING_EXCEPTION();
@@ -1227,16 +1227,16 @@
}
ALWAYS_INLINE void AGET() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ int32_t index = shadow_frame.GetVReg(C());
DCHECK(a->IsIntArray() || a->IsFloatArray()) << a->PrettyTypeOf();
ObjPtr<mirror::IntArray> array = ObjPtr<mirror::IntArray>::DownCast(a);
if (array->CheckIsValidIndex(index)) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+ shadow_frame.SetVReg(A(), array->GetWithoutChecks(index));
inst = inst->Next_2xx();
} else {
HANDLE_PENDING_EXCEPTION();
@@ -1244,16 +1244,16 @@
}
ALWAYS_INLINE void AGET_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ int32_t index = shadow_frame.GetVReg(C());
DCHECK(a->IsLongArray() || a->IsDoubleArray()) << a->PrettyTypeOf();
ObjPtr<mirror::LongArray> array = ObjPtr<mirror::LongArray>::DownCast(a);
if (array->CheckIsValidIndex(index)) {
- shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+ shadow_frame.SetVRegLong(A(), array->GetWithoutChecks(index));
inst = inst->Next_2xx();
} else {
HANDLE_PENDING_EXCEPTION();
@@ -1261,15 +1261,15 @@
}
ALWAYS_INLINE void AGET_OBJECT() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ int32_t index = shadow_frame.GetVReg(C());
ObjPtr<mirror::ObjectArray<mirror::Object>> array = a->AsObjectArray<mirror::Object>();
if (array->CheckIsValidIndex(index)) {
- shadow_frame.SetVRegReference(inst->VRegA_23x(inst_data), array->GetWithoutChecks(index));
+ shadow_frame.SetVRegReference(A(), array->GetWithoutChecks(index));
inst = inst->Next_2xx();
} else {
HANDLE_PENDING_EXCEPTION();
@@ -1277,13 +1277,13 @@
}
ALWAYS_INLINE void APUT_BOOLEAN() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- uint8_t val = shadow_frame.GetVReg(inst->VRegA_23x(inst_data));
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ uint8_t val = shadow_frame.GetVReg(A());
+ int32_t index = shadow_frame.GetVReg(C());
ObjPtr<mirror::BooleanArray> array = a->AsBooleanArray();
if (array->CheckIsValidIndex(index)) {
array->SetWithoutChecks<transaction_active>(index, val);
@@ -1294,13 +1294,13 @@
}
ALWAYS_INLINE void APUT_BYTE() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- int8_t val = shadow_frame.GetVReg(inst->VRegA_23x(inst_data));
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ int8_t val = shadow_frame.GetVReg(A());
+ int32_t index = shadow_frame.GetVReg(C());
ObjPtr<mirror::ByteArray> array = a->AsByteArray();
if (array->CheckIsValidIndex(index)) {
array->SetWithoutChecks<transaction_active>(index, val);
@@ -1311,13 +1311,13 @@
}
ALWAYS_INLINE void APUT_CHAR() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- uint16_t val = shadow_frame.GetVReg(inst->VRegA_23x(inst_data));
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ uint16_t val = shadow_frame.GetVReg(A());
+ int32_t index = shadow_frame.GetVReg(C());
ObjPtr<mirror::CharArray> array = a->AsCharArray();
if (array->CheckIsValidIndex(index)) {
array->SetWithoutChecks<transaction_active>(index, val);
@@ -1328,13 +1328,13 @@
}
ALWAYS_INLINE void APUT_SHORT() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- int16_t val = shadow_frame.GetVReg(inst->VRegA_23x(inst_data));
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ int16_t val = shadow_frame.GetVReg(A());
+ int32_t index = shadow_frame.GetVReg(C());
ObjPtr<mirror::ShortArray> array = a->AsShortArray();
if (array->CheckIsValidIndex(index)) {
array->SetWithoutChecks<transaction_active>(index, val);
@@ -1345,13 +1345,13 @@
}
ALWAYS_INLINE void APUT() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- int32_t val = shadow_frame.GetVReg(inst->VRegA_23x(inst_data));
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ int32_t val = shadow_frame.GetVReg(A());
+ int32_t index = shadow_frame.GetVReg(C());
DCHECK(a->IsIntArray() || a->IsFloatArray()) << a->PrettyTypeOf();
ObjPtr<mirror::IntArray> array = ObjPtr<mirror::IntArray>::DownCast(a);
if (array->CheckIsValidIndex(index)) {
@@ -1363,13 +1363,13 @@
}
ALWAYS_INLINE void APUT_WIDE() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- int64_t val = shadow_frame.GetVRegLong(inst->VRegA_23x(inst_data));
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
+ int64_t val = shadow_frame.GetVRegLong(A());
+ int32_t index = shadow_frame.GetVReg(C());
DCHECK(a->IsLongArray() || a->IsDoubleArray()) << a->PrettyTypeOf();
ObjPtr<mirror::LongArray> array = ObjPtr<mirror::LongArray>::DownCast(a);
if (array->CheckIsValidIndex(index)) {
@@ -1381,13 +1381,13 @@
}
ALWAYS_INLINE void APUT_OBJECT() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(inst->VRegB_23x());
+ ObjPtr<mirror::Object> a = shadow_frame.GetVRegReference(B());
if (UNLIKELY(a == nullptr)) {
ThrowNullPointerExceptionFromInterpreter();
HANDLE_PENDING_EXCEPTION();
}
- int32_t index = shadow_frame.GetVReg(inst->VRegC_23x());
- ObjPtr<mirror::Object> val = shadow_frame.GetVRegReference(inst->VRegA_23x(inst_data));
+ int32_t index = shadow_frame.GetVReg(C());
+ ObjPtr<mirror::Object> val = shadow_frame.GetVRegReference(A());
ObjPtr<mirror::ObjectArray<mirror::Object>> array = a->AsObjectArray<mirror::Object>();
if (array->CheckIsValidIndex(index) && array->CheckAssignable(val)) {
array->SetWithoutChecks<transaction_active>(index, val);
@@ -1744,362 +1744,362 @@
ALWAYS_INLINE void NEG_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
shadow_frame.SetVReg(
- inst->VRegA_12x(inst_data), -shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+ inst->VRegA_12x(inst_data), -shadow_frame.GetVReg(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void NOT_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
shadow_frame.SetVReg(
- inst->VRegA_12x(inst_data), ~shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+ inst->VRegA_12x(inst_data), ~shadow_frame.GetVReg(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void NEG_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
shadow_frame.SetVRegLong(
- inst->VRegA_12x(inst_data), -shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+ inst->VRegA_12x(inst_data), -shadow_frame.GetVRegLong(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void NOT_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
shadow_frame.SetVRegLong(
- inst->VRegA_12x(inst_data), ~shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+ inst->VRegA_12x(inst_data), ~shadow_frame.GetVRegLong(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void NEG_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
shadow_frame.SetVRegFloat(
- inst->VRegA_12x(inst_data), -shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data)));
+ inst->VRegA_12x(inst_data), -shadow_frame.GetVRegFloat(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void NEG_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
shadow_frame.SetVRegDouble(
- inst->VRegA_12x(inst_data), -shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data)));
+ inst->VRegA_12x(inst_data), -shadow_frame.GetVRegDouble(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void INT_TO_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_12x(inst_data),
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+ shadow_frame.SetVRegLong(A(),
+ shadow_frame.GetVReg(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void INT_TO_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegFloat(inst->VRegA_12x(inst_data),
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+ shadow_frame.SetVRegFloat(A(),
+ shadow_frame.GetVReg(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void INT_TO_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegDouble(inst->VRegA_12x(inst_data),
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+ shadow_frame.SetVRegDouble(A(),
+ shadow_frame.GetVReg(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void LONG_TO_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_12x(inst_data),
- shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVRegLong(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void LONG_TO_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegFloat(inst->VRegA_12x(inst_data),
- shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+ shadow_frame.SetVRegFloat(A(),
+ shadow_frame.GetVRegLong(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void LONG_TO_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegDouble(inst->VRegA_12x(inst_data),
- shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+ shadow_frame.SetVRegDouble(A(),
+ shadow_frame.GetVRegLong(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void FLOAT_TO_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- float val = shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data));
+ float val = shadow_frame.GetVRegFloat(B());
int32_t result = art_float_to_integral<int32_t, float>(val);
- shadow_frame.SetVReg(inst->VRegA_12x(inst_data), result);
+ shadow_frame.SetVReg(A(), result);
inst = inst->Next_1xx();
}
ALWAYS_INLINE void FLOAT_TO_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- float val = shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data));
+ float val = shadow_frame.GetVRegFloat(B());
int64_t result = art_float_to_integral<int64_t, float>(val);
- shadow_frame.SetVRegLong(inst->VRegA_12x(inst_data), result);
+ shadow_frame.SetVRegLong(A(), result);
inst = inst->Next_1xx();
}
ALWAYS_INLINE void FLOAT_TO_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegDouble(inst->VRegA_12x(inst_data),
- shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data)));
+ shadow_frame.SetVRegDouble(A(),
+ shadow_frame.GetVRegFloat(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void DOUBLE_TO_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- double val = shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data));
+ double val = shadow_frame.GetVRegDouble(B());
int32_t result = art_float_to_integral<int32_t, double>(val);
- shadow_frame.SetVReg(inst->VRegA_12x(inst_data), result);
+ shadow_frame.SetVReg(A(), result);
inst = inst->Next_1xx();
}
ALWAYS_INLINE void DOUBLE_TO_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- double val = shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data));
+ double val = shadow_frame.GetVRegDouble(B());
int64_t result = art_float_to_integral<int64_t, double>(val);
- shadow_frame.SetVRegLong(inst->VRegA_12x(inst_data), result);
+ shadow_frame.SetVRegLong(A(), result);
inst = inst->Next_1xx();
}
ALWAYS_INLINE void DOUBLE_TO_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegFloat(inst->VRegA_12x(inst_data),
- shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data)));
+ shadow_frame.SetVRegFloat(A(),
+ shadow_frame.GetVRegDouble(B()));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void INT_TO_BYTE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_12x(inst_data), static_cast<int8_t>(
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data))));
+ shadow_frame.SetVReg(A(), static_cast<int8_t>(
+ shadow_frame.GetVReg(B())));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void INT_TO_CHAR() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_12x(inst_data), static_cast<uint16_t>(
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data))));
+ shadow_frame.SetVReg(A(), static_cast<uint16_t>(
+ shadow_frame.GetVReg(B())));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void INT_TO_SHORT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_12x(inst_data), static_cast<int16_t>(
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data))));
+ shadow_frame.SetVReg(A(), static_cast<int16_t>(
+ shadow_frame.GetVReg(B())));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void ADD_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
- SafeAdd(shadow_frame.GetVReg(inst->VRegB_23x()),
- shadow_frame.GetVReg(inst->VRegC_23x())));
+ shadow_frame.SetVReg(A(),
+ SafeAdd(shadow_frame.GetVReg(B()),
+ shadow_frame.GetVReg(C())));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void SUB_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
- SafeSub(shadow_frame.GetVReg(inst->VRegB_23x()),
- shadow_frame.GetVReg(inst->VRegC_23x())));
+ shadow_frame.SetVReg(A(),
+ SafeSub(shadow_frame.GetVReg(B()),
+ shadow_frame.GetVReg(C())));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void MUL_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
- SafeMul(shadow_frame.GetVReg(inst->VRegB_23x()),
- shadow_frame.GetVReg(inst->VRegC_23x())));
+ shadow_frame.SetVReg(A(),
+ SafeMul(shadow_frame.GetVReg(B()),
+ shadow_frame.GetVReg(C())));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void DIV_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
bool success = DoIntDivide(shadow_frame, inst->VRegA_23x(inst_data),
- shadow_frame.GetVReg(inst->VRegB_23x()),
- shadow_frame.GetVReg(inst->VRegC_23x()));
+ shadow_frame.GetVReg(B()),
+ shadow_frame.GetVReg(C()));
POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
}
ALWAYS_INLINE void REM_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
bool success = DoIntRemainder(shadow_frame, inst->VRegA_23x(inst_data),
- shadow_frame.GetVReg(inst->VRegB_23x()),
- shadow_frame.GetVReg(inst->VRegC_23x()));
+ shadow_frame.GetVReg(B()),
+ shadow_frame.GetVReg(C()));
POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
}
ALWAYS_INLINE void SHL_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
- shadow_frame.GetVReg(inst->VRegB_23x()) <<
- (shadow_frame.GetVReg(inst->VRegC_23x()) & 0x1f));
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) <<
+ (shadow_frame.GetVReg(C()) & 0x1f));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void SHR_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
- shadow_frame.GetVReg(inst->VRegB_23x()) >>
- (shadow_frame.GetVReg(inst->VRegC_23x()) & 0x1f));
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) >>
+ (shadow_frame.GetVReg(C()) & 0x1f));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void USHR_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
- static_cast<uint32_t>(shadow_frame.GetVReg(inst->VRegB_23x())) >>
- (shadow_frame.GetVReg(inst->VRegC_23x()) & 0x1f));
+ shadow_frame.SetVReg(A(),
+ static_cast<uint32_t>(shadow_frame.GetVReg(B())) >>
+ (shadow_frame.GetVReg(C()) & 0x1f));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void AND_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
- shadow_frame.GetVReg(inst->VRegB_23x()) &
- shadow_frame.GetVReg(inst->VRegC_23x()));
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) &
+ shadow_frame.GetVReg(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void OR_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
- shadow_frame.GetVReg(inst->VRegB_23x()) |
- shadow_frame.GetVReg(inst->VRegC_23x()));
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) |
+ shadow_frame.GetVReg(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void XOR_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_23x(inst_data),
- shadow_frame.GetVReg(inst->VRegB_23x()) ^
- shadow_frame.GetVReg(inst->VRegC_23x()));
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) ^
+ shadow_frame.GetVReg(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void ADD_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
- SafeAdd(shadow_frame.GetVRegLong(inst->VRegB_23x()),
- shadow_frame.GetVRegLong(inst->VRegC_23x())));
+ shadow_frame.SetVRegLong(A(),
+ SafeAdd(shadow_frame.GetVRegLong(B()),
+ shadow_frame.GetVRegLong(C())));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void SUB_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
- SafeSub(shadow_frame.GetVRegLong(inst->VRegB_23x()),
- shadow_frame.GetVRegLong(inst->VRegC_23x())));
+ shadow_frame.SetVRegLong(A(),
+ SafeSub(shadow_frame.GetVRegLong(B()),
+ shadow_frame.GetVRegLong(C())));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void MUL_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
- SafeMul(shadow_frame.GetVRegLong(inst->VRegB_23x()),
- shadow_frame.GetVRegLong(inst->VRegC_23x())));
+ shadow_frame.SetVRegLong(A(),
+ SafeMul(shadow_frame.GetVRegLong(B()),
+ shadow_frame.GetVRegLong(C())));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void DIV_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
DoLongDivide(shadow_frame, inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegLong(inst->VRegB_23x()),
- shadow_frame.GetVRegLong(inst->VRegC_23x()));
+ shadow_frame.GetVRegLong(B()),
+ shadow_frame.GetVRegLong(C()));
POSSIBLY_HANDLE_PENDING_EXCEPTION(self->IsExceptionPending(), Next_2xx);
}
ALWAYS_INLINE void REM_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
DoLongRemainder(shadow_frame, inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegLong(inst->VRegB_23x()),
- shadow_frame.GetVRegLong(inst->VRegC_23x()));
+ shadow_frame.GetVRegLong(B()),
+ shadow_frame.GetVRegLong(C()));
POSSIBLY_HANDLE_PENDING_EXCEPTION(self->IsExceptionPending(), Next_2xx);
}
ALWAYS_INLINE void AND_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegLong(inst->VRegB_23x()) &
- shadow_frame.GetVRegLong(inst->VRegC_23x()));
+ shadow_frame.SetVRegLong(A(),
+ shadow_frame.GetVRegLong(B()) &
+ shadow_frame.GetVRegLong(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void OR_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegLong(inst->VRegB_23x()) |
- shadow_frame.GetVRegLong(inst->VRegC_23x()));
+ shadow_frame.SetVRegLong(A(),
+ shadow_frame.GetVRegLong(B()) |
+ shadow_frame.GetVRegLong(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void XOR_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegLong(inst->VRegB_23x()) ^
- shadow_frame.GetVRegLong(inst->VRegC_23x()));
+ shadow_frame.SetVRegLong(A(),
+ shadow_frame.GetVRegLong(B()) ^
+ shadow_frame.GetVRegLong(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void SHL_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegLong(inst->VRegB_23x()) <<
- (shadow_frame.GetVReg(inst->VRegC_23x()) & 0x3f));
+ shadow_frame.SetVRegLong(A(),
+ shadow_frame.GetVRegLong(B()) <<
+ (shadow_frame.GetVReg(C()) & 0x3f));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void SHR_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegLong(inst->VRegB_23x()) >>
- (shadow_frame.GetVReg(inst->VRegC_23x()) & 0x3f));
+ shadow_frame.SetVRegLong(A(),
+ shadow_frame.GetVRegLong(B()) >>
+ (shadow_frame.GetVReg(C()) & 0x3f));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void USHR_LONG() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegLong(inst->VRegA_23x(inst_data),
- static_cast<uint64_t>(shadow_frame.GetVRegLong(inst->VRegB_23x())) >>
- (shadow_frame.GetVReg(inst->VRegC_23x()) & 0x3f));
+ shadow_frame.SetVRegLong(A(),
+ static_cast<uint64_t>(shadow_frame.GetVRegLong(B())) >>
+ (shadow_frame.GetVReg(C()) & 0x3f));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void ADD_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegFloat(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegFloat(inst->VRegB_23x()) +
- shadow_frame.GetVRegFloat(inst->VRegC_23x()));
+ shadow_frame.SetVRegFloat(A(),
+ shadow_frame.GetVRegFloat(B()) +
+ shadow_frame.GetVRegFloat(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void SUB_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegFloat(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegFloat(inst->VRegB_23x()) -
- shadow_frame.GetVRegFloat(inst->VRegC_23x()));
+ shadow_frame.SetVRegFloat(A(),
+ shadow_frame.GetVRegFloat(B()) -
+ shadow_frame.GetVRegFloat(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void MUL_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegFloat(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegFloat(inst->VRegB_23x()) *
- shadow_frame.GetVRegFloat(inst->VRegC_23x()));
+ shadow_frame.SetVRegFloat(A(),
+ shadow_frame.GetVRegFloat(B()) *
+ shadow_frame.GetVRegFloat(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void DIV_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegFloat(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegFloat(inst->VRegB_23x()) /
- shadow_frame.GetVRegFloat(inst->VRegC_23x()));
+ shadow_frame.SetVRegFloat(A(),
+ shadow_frame.GetVRegFloat(B()) /
+ shadow_frame.GetVRegFloat(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void REM_FLOAT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegFloat(inst->VRegA_23x(inst_data),
- fmodf(shadow_frame.GetVRegFloat(inst->VRegB_23x()),
- shadow_frame.GetVRegFloat(inst->VRegC_23x())));
+ shadow_frame.SetVRegFloat(A(),
+ fmodf(shadow_frame.GetVRegFloat(B()),
+ shadow_frame.GetVRegFloat(C())));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void ADD_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegDouble(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegDouble(inst->VRegB_23x()) +
- shadow_frame.GetVRegDouble(inst->VRegC_23x()));
+ shadow_frame.SetVRegDouble(A(),
+ shadow_frame.GetVRegDouble(B()) +
+ shadow_frame.GetVRegDouble(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void SUB_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegDouble(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegDouble(inst->VRegB_23x()) -
- shadow_frame.GetVRegDouble(inst->VRegC_23x()));
+ shadow_frame.SetVRegDouble(A(),
+ shadow_frame.GetVRegDouble(B()) -
+ shadow_frame.GetVRegDouble(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void MUL_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegDouble(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegDouble(inst->VRegB_23x()) *
- shadow_frame.GetVRegDouble(inst->VRegC_23x()));
+ shadow_frame.SetVRegDouble(A(),
+ shadow_frame.GetVRegDouble(B()) *
+ shadow_frame.GetVRegDouble(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void DIV_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegDouble(inst->VRegA_23x(inst_data),
- shadow_frame.GetVRegDouble(inst->VRegB_23x()) /
- shadow_frame.GetVRegDouble(inst->VRegC_23x()));
+ shadow_frame.SetVRegDouble(A(),
+ shadow_frame.GetVRegDouble(B()) /
+ shadow_frame.GetVRegDouble(C()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void REM_DOUBLE() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVRegDouble(inst->VRegA_23x(inst_data),
- fmod(shadow_frame.GetVRegDouble(inst->VRegB_23x()),
- shadow_frame.GetVRegDouble(inst->VRegC_23x())));
+ shadow_frame.SetVRegDouble(A(),
+ fmod(shadow_frame.GetVRegDouble(B()),
+ shadow_frame.GetVRegDouble(C())));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void ADD_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVReg(vregA, SafeAdd(shadow_frame.GetVReg(vregA),
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data))));
+ shadow_frame.GetVReg(B())));
inst = inst->Next_1xx();
}
@@ -2107,7 +2107,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVReg(vregA,
SafeSub(shadow_frame.GetVReg(vregA),
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data))));
+ shadow_frame.GetVReg(B())));
inst = inst->Next_1xx();
}
@@ -2115,21 +2115,21 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVReg(vregA,
SafeMul(shadow_frame.GetVReg(vregA),
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data))));
+ shadow_frame.GetVReg(B())));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void DIV_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
uint4_t vregA = inst->VRegA_12x(inst_data);
bool success = DoIntDivide(shadow_frame, vregA, shadow_frame.GetVReg(vregA),
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVReg(B()));
POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_1xx);
}
ALWAYS_INLINE void REM_INT_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
uint4_t vregA = inst->VRegA_12x(inst_data);
bool success = DoIntRemainder(shadow_frame, vregA, shadow_frame.GetVReg(vregA),
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVReg(B()));
POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_1xx);
}
@@ -2137,7 +2137,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVReg(vregA,
shadow_frame.GetVReg(vregA) <<
- (shadow_frame.GetVReg(inst->VRegB_12x(inst_data)) & 0x1f));
+ (shadow_frame.GetVReg(B()) & 0x1f));
inst = inst->Next_1xx();
}
@@ -2145,7 +2145,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVReg(vregA,
shadow_frame.GetVReg(vregA) >>
- (shadow_frame.GetVReg(inst->VRegB_12x(inst_data)) & 0x1f));
+ (shadow_frame.GetVReg(B()) & 0x1f));
inst = inst->Next_1xx();
}
@@ -2153,7 +2153,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVReg(vregA,
static_cast<uint32_t>(shadow_frame.GetVReg(vregA)) >>
- (shadow_frame.GetVReg(inst->VRegB_12x(inst_data)) & 0x1f));
+ (shadow_frame.GetVReg(B()) & 0x1f));
inst = inst->Next_1xx();
}
@@ -2161,7 +2161,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVReg(vregA,
shadow_frame.GetVReg(vregA) &
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVReg(B()));
inst = inst->Next_1xx();
}
@@ -2169,7 +2169,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVReg(vregA,
shadow_frame.GetVReg(vregA) |
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVReg(B()));
inst = inst->Next_1xx();
}
@@ -2177,7 +2177,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVReg(vregA,
shadow_frame.GetVReg(vregA) ^
- shadow_frame.GetVReg(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVReg(B()));
inst = inst->Next_1xx();
}
@@ -2185,7 +2185,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegLong(vregA,
SafeAdd(shadow_frame.GetVRegLong(vregA),
- shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data))));
+ shadow_frame.GetVRegLong(B())));
inst = inst->Next_1xx();
}
@@ -2193,7 +2193,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegLong(vregA,
SafeSub(shadow_frame.GetVRegLong(vregA),
- shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data))));
+ shadow_frame.GetVRegLong(B())));
inst = inst->Next_1xx();
}
@@ -2201,21 +2201,21 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegLong(vregA,
SafeMul(shadow_frame.GetVRegLong(vregA),
- shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data))));
+ shadow_frame.GetVRegLong(B())));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void DIV_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
uint4_t vregA = inst->VRegA_12x(inst_data);
DoLongDivide(shadow_frame, vregA, shadow_frame.GetVRegLong(vregA),
- shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegLong(B()));
POSSIBLY_HANDLE_PENDING_EXCEPTION(self->IsExceptionPending(), Next_1xx);
}
ALWAYS_INLINE void REM_LONG_2ADDR() REQUIRES_SHARED(Locks::mutator_lock_) {
uint4_t vregA = inst->VRegA_12x(inst_data);
DoLongRemainder(shadow_frame, vregA, shadow_frame.GetVRegLong(vregA),
- shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegLong(B()));
POSSIBLY_HANDLE_PENDING_EXCEPTION(self->IsExceptionPending(), Next_1xx);
}
@@ -2223,7 +2223,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegLong(vregA,
shadow_frame.GetVRegLong(vregA) &
- shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegLong(B()));
inst = inst->Next_1xx();
}
@@ -2231,7 +2231,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegLong(vregA,
shadow_frame.GetVRegLong(vregA) |
- shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegLong(B()));
inst = inst->Next_1xx();
}
@@ -2239,7 +2239,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegLong(vregA,
shadow_frame.GetVRegLong(vregA) ^
- shadow_frame.GetVRegLong(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegLong(B()));
inst = inst->Next_1xx();
}
@@ -2247,7 +2247,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegLong(vregA,
shadow_frame.GetVRegLong(vregA) <<
- (shadow_frame.GetVReg(inst->VRegB_12x(inst_data)) & 0x3f));
+ (shadow_frame.GetVReg(B()) & 0x3f));
inst = inst->Next_1xx();
}
@@ -2255,7 +2255,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegLong(vregA,
shadow_frame.GetVRegLong(vregA) >>
- (shadow_frame.GetVReg(inst->VRegB_12x(inst_data)) & 0x3f));
+ (shadow_frame.GetVReg(B()) & 0x3f));
inst = inst->Next_1xx();
}
@@ -2263,7 +2263,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegLong(vregA,
static_cast<uint64_t>(shadow_frame.GetVRegLong(vregA)) >>
- (shadow_frame.GetVReg(inst->VRegB_12x(inst_data)) & 0x3f));
+ (shadow_frame.GetVReg(B()) & 0x3f));
inst = inst->Next_1xx();
}
@@ -2271,7 +2271,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegFloat(vregA,
shadow_frame.GetVRegFloat(vregA) +
- shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegFloat(B()));
inst = inst->Next_1xx();
}
@@ -2279,7 +2279,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegFloat(vregA,
shadow_frame.GetVRegFloat(vregA) -
- shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegFloat(B()));
inst = inst->Next_1xx();
}
@@ -2287,7 +2287,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegFloat(vregA,
shadow_frame.GetVRegFloat(vregA) *
- shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegFloat(B()));
inst = inst->Next_1xx();
}
@@ -2295,7 +2295,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegFloat(vregA,
shadow_frame.GetVRegFloat(vregA) /
- shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegFloat(B()));
inst = inst->Next_1xx();
}
@@ -2303,7 +2303,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegFloat(vregA,
fmodf(shadow_frame.GetVRegFloat(vregA),
- shadow_frame.GetVRegFloat(inst->VRegB_12x(inst_data))));
+ shadow_frame.GetVRegFloat(B())));
inst = inst->Next_1xx();
}
@@ -2311,7 +2311,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegDouble(vregA,
shadow_frame.GetVRegDouble(vregA) +
- shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegDouble(B()));
inst = inst->Next_1xx();
}
@@ -2319,7 +2319,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegDouble(vregA,
shadow_frame.GetVRegDouble(vregA) -
- shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegDouble(B()));
inst = inst->Next_1xx();
}
@@ -2327,7 +2327,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegDouble(vregA,
shadow_frame.GetVRegDouble(vregA) *
- shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegDouble(B()));
inst = inst->Next_1xx();
}
@@ -2335,7 +2335,7 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegDouble(vregA,
shadow_frame.GetVRegDouble(vregA) /
- shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data)));
+ shadow_frame.GetVRegDouble(B()));
inst = inst->Next_1xx();
}
@@ -2343,134 +2343,134 @@
uint4_t vregA = inst->VRegA_12x(inst_data);
shadow_frame.SetVRegDouble(vregA,
fmod(shadow_frame.GetVRegDouble(vregA),
- shadow_frame.GetVRegDouble(inst->VRegB_12x(inst_data))));
+ shadow_frame.GetVRegDouble(B())));
inst = inst->Next_1xx();
}
ALWAYS_INLINE void ADD_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22s(inst_data),
- SafeAdd(shadow_frame.GetVReg(inst->VRegB_22s(inst_data)),
+ shadow_frame.SetVReg(A(),
+ SafeAdd(shadow_frame.GetVReg(B()),
inst->VRegC_22s()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void RSUB_INT() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22s(inst_data),
+ shadow_frame.SetVReg(A(),
SafeSub(inst->VRegC_22s(),
- shadow_frame.GetVReg(inst->VRegB_22s(inst_data))));
+ shadow_frame.GetVReg(B())));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void MUL_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22s(inst_data),
- SafeMul(shadow_frame.GetVReg(inst->VRegB_22s(inst_data)),
+ shadow_frame.SetVReg(A(),
+ SafeMul(shadow_frame.GetVReg(B()),
inst->VRegC_22s()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void DIV_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
bool success = DoIntDivide(shadow_frame, inst->VRegA_22s(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22s(inst_data)),
+ shadow_frame.GetVReg(B()),
inst->VRegC_22s());
POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
}
ALWAYS_INLINE void REM_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
bool success = DoIntRemainder(shadow_frame, inst->VRegA_22s(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22s(inst_data)),
+ shadow_frame.GetVReg(B()),
inst->VRegC_22s());
POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
}
ALWAYS_INLINE void AND_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22s(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22s(inst_data)) &
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) &
inst->VRegC_22s());
inst = inst->Next_2xx();
}
ALWAYS_INLINE void OR_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22s(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22s(inst_data)) |
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) |
inst->VRegC_22s());
inst = inst->Next_2xx();
}
ALWAYS_INLINE void XOR_INT_LIT16() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22s(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22s(inst_data)) ^
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) ^
inst->VRegC_22s());
inst = inst->Next_2xx();
}
ALWAYS_INLINE void ADD_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
- SafeAdd(shadow_frame.GetVReg(inst->VRegB_22b()), inst->VRegC_22b()));
+ shadow_frame.SetVReg(A(),
+ SafeAdd(shadow_frame.GetVReg(B()), inst->VRegC_22b()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void RSUB_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
- SafeSub(inst->VRegC_22b(), shadow_frame.GetVReg(inst->VRegB_22b())));
+ shadow_frame.SetVReg(A(),
+ SafeSub(inst->VRegC_22b(), shadow_frame.GetVReg(B())));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void MUL_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
- SafeMul(shadow_frame.GetVReg(inst->VRegB_22b()), inst->VRegC_22b()));
+ shadow_frame.SetVReg(A(),
+ SafeMul(shadow_frame.GetVReg(B()), inst->VRegC_22b()));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void DIV_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
bool success = DoIntDivide(shadow_frame, inst->VRegA_22b(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22b()), inst->VRegC_22b());
+ shadow_frame.GetVReg(B()), inst->VRegC_22b());
POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
}
ALWAYS_INLINE void REM_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
bool success = DoIntRemainder(shadow_frame, inst->VRegA_22b(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22b()), inst->VRegC_22b());
+ shadow_frame.GetVReg(B()), inst->VRegC_22b());
POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, Next_2xx);
}
ALWAYS_INLINE void AND_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22b()) &
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) &
inst->VRegC_22b());
inst = inst->Next_2xx();
}
ALWAYS_INLINE void OR_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22b()) |
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) |
inst->VRegC_22b());
inst = inst->Next_2xx();
}
ALWAYS_INLINE void XOR_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22b()) ^
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) ^
inst->VRegC_22b());
inst = inst->Next_2xx();
}
ALWAYS_INLINE void SHL_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22b()) <<
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) <<
(inst->VRegC_22b() & 0x1f));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void SHR_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
- shadow_frame.GetVReg(inst->VRegB_22b()) >>
+ shadow_frame.SetVReg(A(),
+ shadow_frame.GetVReg(B()) >>
(inst->VRegC_22b() & 0x1f));
inst = inst->Next_2xx();
}
ALWAYS_INLINE void USHR_INT_LIT8() REQUIRES_SHARED(Locks::mutator_lock_) {
- shadow_frame.SetVReg(inst->VRegA_22b(inst_data),
- static_cast<uint32_t>(shadow_frame.GetVReg(inst->VRegB_22b())) >>
+ shadow_frame.SetVReg(A(),
+ static_cast<uint32_t>(shadow_frame.GetVReg(B())) >>
(inst->VRegC_22b() & 0x1f));
inst = inst->Next_2xx();
}
@@ -2560,6 +2560,10 @@
const uint16_t* Insns() { return ctx->accessor.Insns(); }
JValue* ResultRegister() { return &ctx->result_register; }
+ ALWAYS_INLINE int32_t A() { return inst->VRegA(kFormat, inst_data); }
+ ALWAYS_INLINE int32_t B() { return inst->VRegB(kFormat, inst_data); }
+ ALWAYS_INLINE int32_t C() { return inst->VRegC(kFormat); }
+
SwitchImplContext* const ctx;
const instrumentation::Instrumentation* const instrumentation;
Thread* const self;
@@ -2608,7 +2612,7 @@
inst_data = inst->Fetch16(0);
{
bool exit_loop = false;
- InstructionHandler<do_access_check, transaction_active> handler(
+ InstructionHandler<do_access_check, transaction_active, Instruction::kInvalidFormat> handler(
ctx, instrumentation, self, shadow_frame, dex_pc, inst, inst_data, exit_loop);
if (!handler.Preamble()) {
if (UNLIKELY(exit_loop)) {
@@ -2621,10 +2625,10 @@
}
}
switch (inst->Opcode(inst_data)) {
-#define OPCODE_CASE(OPCODE, OPCODE_NAME, pname, f, i, a, e, v) \
+#define OPCODE_CASE(OPCODE, OPCODE_NAME, pname, FORMAT, i, a, e, v) \
case OPCODE: { \
bool exit_loop = false; \
- InstructionHandler<do_access_check, transaction_active> handler( \
+ InstructionHandler<do_access_check, transaction_active, Instruction::FORMAT> handler( \
ctx, instrumentation, self, shadow_frame, dex_pc, inst, inst_data, exit_loop); \
handler.OPCODE_NAME(); \
/* TODO: Advance 'inst' here, instead of explicitly in each handler */ \