diff options
author | Razvan A Lupusoru <razvan.a.lupusoru@intel.com> | 2014-01-28 17:05:21 -0800 |
---|---|---|
committer | Razvan A Lupusoru <razvan.a.lupusoru@intel.com> | 2014-02-11 18:10:33 -0800 |
commit | 614c2b4e219631e8c190fd9fd5d4d9cd343434e1 (patch) | |
tree | 8236046426615c78eb6b2f6c2ca29b63d5665d97 /disassembler | |
parent | 6b3697fec487b355d107b693c965919bf5fff906 (diff) | |
download | art-614c2b4e219631e8c190fd9fd5d4d9cd343434e1.zip art-614c2b4e219631e8c190fd9fd5d4d9cd343434e1.tar.gz art-614c2b4e219631e8c190fd9fd5d4d9cd343434e1.tar.bz2 |
Support to generate inline long to FP bytecodes for x86
long-to-float and long-to-double are now generated inline instead of calling
a helper routine. The conversion is done by using x87.
Change-Id: I196e526afec1be212898baceca8527549c3655b6
Signed-off-by: Razvan A Lupusoru <razvan.a.lupusoru@intel.com>
Diffstat (limited to 'disassembler')
-rw-r--r-- | disassembler/disassembler_x86.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/disassembler/disassembler_x86.cc b/disassembler/disassembler_x86.cc index 903d755..b6ddc95 100644 --- a/disassembler/disassembler_x86.cc +++ b/disassembler/disassembler_x86.cc @@ -672,6 +672,13 @@ DISASSEMBLER_ENTRY(cmp, has_modrm = true; reg_is_opcode = true; break; + case 0xDB: + static const char* db_opcodes[] = {"fildl", "unknown-db", "unknown-db", "unknown-db", "unknown-db", "unknown-db", "unknown-db", "unknown-db"}; + modrm_opcodes = db_opcodes; + load = true; + has_modrm = true; + reg_is_opcode = true; + break; case 0xDD: static const char* dd_opcodes[] = {"fldl", "fisttp", "fstl", "fstpl", "frstor", "unknown-dd", "fnsave", "fnstsw"}; modrm_opcodes = dd_opcodes; @@ -679,6 +686,13 @@ DISASSEMBLER_ENTRY(cmp, has_modrm = true; reg_is_opcode = true; break; + case 0xDF: + static const char* df_opcodes[] = {"fild", "unknown-df", "unknown-df", "unknown-df", "unknown-df", "fildll", "unknown-df", "unknown-df"}; + modrm_opcodes = df_opcodes; + load = true; + has_modrm = true; + reg_is_opcode = true; + break; case 0xE8: opcode << "call"; branch_bytes = 4; break; case 0xE9: opcode << "jmp"; branch_bytes = 4; break; case 0xEB: opcode << "jmp"; branch_bytes = 1; break; |