summaryrefslogtreecommitdiffstats
path: root/disassembler
diff options
context:
space:
mode:
authorRazvan A Lupusoru <razvan.a.lupusoru@intel.com>2014-01-28 17:05:21 -0800
committerRazvan A Lupusoru <razvan.a.lupusoru@intel.com>2014-02-11 18:10:33 -0800
commit614c2b4e219631e8c190fd9fd5d4d9cd343434e1 (patch)
tree8236046426615c78eb6b2f6c2ca29b63d5665d97 /disassembler
parent6b3697fec487b355d107b693c965919bf5fff906 (diff)
downloadart-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.cc14
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;