diff options
author | Fred Shih <ffred@google.com> | 2014-07-16 18:38:08 -0700 |
---|---|---|
committer | Fred Shih <ffred@google.com> | 2014-08-25 11:16:53 -0700 |
commit | 37f05ef45e0393de812d51261dc293240c17294d (patch) | |
tree | 7c7793862efa52e1deb42babbdcb652c245ab941 /runtime/interpreter/interpreter_goto_table_impl.cc | |
parent | e25826e28ea65d9c1aa23f84788a091c677b20c7 (diff) | |
download | android_art-37f05ef45e0393de812d51261dc293240c17294d.tar.gz android_art-37f05ef45e0393de812d51261dc293240c17294d.tar.bz2 android_art-37f05ef45e0393de812d51261dc293240c17294d.zip |
Reduced memory usage of primitive fields smaller than 4-bytes
Reduced memory used by byte and boolean fields from 4 bytes down to a
single byte and shorts and chars down to two bytes. Fields are now
arranged as Reference followed by decreasing component sizes, with
fields shuffled forward as needed.
Bug: 8135266
Change-Id: I65eaf31ed27e5bd5ba0c7d4606454b720b074752
Diffstat (limited to 'runtime/interpreter/interpreter_goto_table_impl.cc')
-rw-r--r-- | runtime/interpreter/interpreter_goto_table_impl.cc | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/runtime/interpreter/interpreter_goto_table_impl.cc b/runtime/interpreter/interpreter_goto_table_impl.cc index e098ac86ed..755e1ed814 100644 --- a/runtime/interpreter/interpreter_goto_table_impl.cc +++ b/runtime/interpreter/interpreter_goto_table_impl.cc @@ -1369,6 +1369,30 @@ JValue ExecuteGotoImpl(Thread* self, MethodHelper& mh, const DexFile::CodeItem* } HANDLE_INSTRUCTION_END(); + HANDLE_INSTRUCTION_START(IPUT_BOOLEAN_QUICK) { + bool success = DoIPutQuick<Primitive::kPrimBoolean, transaction_active>(shadow_frame, inst, inst_data); + POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, 2); + } + HANDLE_INSTRUCTION_END(); + + HANDLE_INSTRUCTION_START(IPUT_BYTE_QUICK) { + bool success = DoIPutQuick<Primitive::kPrimByte, transaction_active>(shadow_frame, inst, inst_data); + POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, 2); + } + HANDLE_INSTRUCTION_END(); + + HANDLE_INSTRUCTION_START(IPUT_CHAR_QUICK) { + bool success = DoIPutQuick<Primitive::kPrimChar, transaction_active>(shadow_frame, inst, inst_data); + POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, 2); + } + HANDLE_INSTRUCTION_END(); + + HANDLE_INSTRUCTION_START(IPUT_SHORT_QUICK) { + bool success = DoIPutQuick<Primitive::kPrimShort, transaction_active>(shadow_frame, inst, inst_data); + POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, 2); + } + HANDLE_INSTRUCTION_END(); + HANDLE_INSTRUCTION_START(IPUT_WIDE_QUICK) { bool success = DoIPutQuick<Primitive::kPrimLong, transaction_active>(shadow_frame, inst, inst_data); POSSIBLY_HANDLE_PENDING_EXCEPTION(!success, 2); @@ -2304,22 +2328,6 @@ JValue ExecuteGotoImpl(Thread* self, MethodHelper& mh, const DexFile::CodeItem* UnexpectedOpcode(inst, mh); HANDLE_INSTRUCTION_END(); - HANDLE_INSTRUCTION_START(UNUSED_EB) - UnexpectedOpcode(inst, mh); - HANDLE_INSTRUCTION_END(); - - HANDLE_INSTRUCTION_START(UNUSED_EC) - UnexpectedOpcode(inst, mh); - HANDLE_INSTRUCTION_END(); - - HANDLE_INSTRUCTION_START(UNUSED_ED) - UnexpectedOpcode(inst, mh); - HANDLE_INSTRUCTION_END(); - - HANDLE_INSTRUCTION_START(UNUSED_EE) - UnexpectedOpcode(inst, mh); - HANDLE_INSTRUCTION_END(); - HANDLE_INSTRUCTION_START(UNUSED_EF) UnexpectedOpcode(inst, mh); HANDLE_INSTRUCTION_END(); |