diff options
author | Mike Pall <mike> | 2009-12-28 21:00:03 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2009-12-28 21:00:03 +0100 |
commit | da65e0dfed4107adcd10bfff671af3630f304f35 (patch) | |
tree | e05df20c05da3e4b202b0b0229d940af6504fb34 | |
parent | 8bb38bd93b01ca1107096a7e711c80289488805a (diff) | |
download | luajit-da65e0dfed4107adcd10bfff671af3630f304f35.tar.gz luajit-da65e0dfed4107adcd10bfff671af3630f304f35.tar.bz2 luajit-da65e0dfed4107adcd10bfff671af3630f304f35.zip |
Fix DynASM x64 encoding for qword-only instructions.
-rw-r--r-- | dynasm/dasm_x86.lua | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/dynasm/dasm_x86.lua b/dynasm/dasm_x86.lua index 8a370f9b..d985e3ff 100644 --- a/dynasm/dasm_x86.lua +++ b/dynasm/dasm_x86.lua | |||
@@ -922,8 +922,9 @@ local map_op = { | |||
922 | -- 3F: *aas | 922 | -- 3F: *aas |
923 | inc_1 = x64 and "m:FF0m" or "rdw:40r|m:FF0m", | 923 | inc_1 = x64 and "m:FF0m" or "rdw:40r|m:FF0m", |
924 | dec_1 = x64 and "m:FF1m" or "rdw:48r|m:FF1m", | 924 | dec_1 = x64 and "m:FF1m" or "rdw:48r|m:FF1m", |
925 | push_1 = (x64 and "rqw:50r|mqw:FF6m" or "rdw:50r|mdw:FF6m").."|S.:6AS|ib:n6Ai|i.:68i", | 925 | push_1 = (x64 and "rq:n50r|rw:50r|mq:nFF6m|mw:FF6m" or |
926 | pop_1 = x64 and "rqw:58r|mqw:8F0m" or "rdw:58r|mdw:8F0m", | 926 | "rdw:50r|mdw:FF6m").."|S.:6AS|ib:n6Ai|i.:68i", |
927 | pop_1 = x64 and "rq:n58r|rw:58r|mq:n8F0m|mw:8F0m" or "rdw:58r|mdw:8F0m", | ||
927 | -- 60: *pusha, *pushad, *pushaw | 928 | -- 60: *pusha, *pushad, *pushaw |
928 | -- 61: *popa, *popad, *popaw | 929 | -- 61: *popa, *popad, *popaw |
929 | -- 62: *bound rdw,x | 930 | -- 62: *bound rdw,x |
@@ -970,11 +971,11 @@ local map_op = { | |||
970 | wait_0 = "9B", | 971 | wait_0 = "9B", |
971 | fwait_0 = "9B", | 972 | fwait_0 = "9B", |
972 | pushf_0 = "9C", | 973 | pushf_0 = "9C", |
973 | pushfw_0 = "669C", | 974 | pushfd_0 = not x64 and "9C", |
974 | pushfd_0 = "9C", | 975 | pushfq_0 = x64 and "9C", |
975 | popf_0 = "9D", | 976 | popf_0 = "9D", |
976 | popfw_0 = "669D", | 977 | popfd_0 = not x64 and "9D", |
977 | popfd_0 = "9D", | 978 | popfq_0 = x64 and "9D", |
978 | sahf_0 = "9E", | 979 | sahf_0 = "9E", |
979 | lahf_0 = "9F", | 980 | lahf_0 = "9F", |
980 | mov_2 = "OR:A3o|RO:A1O|mr:89Rm|rm:8BrM|rib:nB0ri|ridw:B8ri|mi:C70mi", | 981 | mov_2 = "OR:A3o|RO:A1O|mr:89Rm|rm:8BrM|rib:nB0ri|ridw:B8ri|mi:C70mi", |
@@ -1030,8 +1031,8 @@ local map_op = { | |||
1030 | -- E5: *in Rdw,ib | 1031 | -- E5: *in Rdw,ib |
1031 | -- E6: *out ib,Rb | 1032 | -- E6: *out ib,Rb |
1032 | -- E7: *out ib,Rdw | 1033 | -- E7: *out ib,Rdw |
1033 | call_1 = x64 and "mq:FF2m|J.:E8J" or "md:FF2m|J.:E8J", | 1034 | call_1 = x64 and "mq:nFF2m|J.:E8nJ" or "md:FF2m|J.:E8J", |
1034 | jmp_1 = x64 and "mq:FF4m|J.:E9J" or "md:FF4m|J.:E9J", -- short: EB | 1035 | jmp_1 = x64 and "mq:nFF4m|J.:E9nJ" or "md:FF4m|J.:E9J", -- short: EB |
1035 | -- EA: *jmp iw:idw | 1036 | -- EA: *jmp iw:idw |
1036 | -- EB: jmp ib | 1037 | -- EB: jmp ib |
1037 | -- EC: *in Rb,dx | 1038 | -- EC: *in Rb,dx |
@@ -1423,7 +1424,7 @@ end | |||
1423 | 1424 | ||
1424 | -- Conditional ops. | 1425 | -- Conditional ops. |
1425 | for cc,n in pairs(map_cc) do | 1426 | for cc,n in pairs(map_cc) do |
1426 | map_op["j"..cc.."_1"] = format("J.:0F8%XJ", n) -- short: 7%X | 1427 | map_op["j"..cc.."_1"] = format("J.:n0F8%XJ", n) -- short: 7%X |
1427 | map_op["set"..cc.."_1"] = format("mb:n0F9%X2m", n) | 1428 | map_op["set"..cc.."_1"] = format("mb:n0F9%X2m", n) |
1428 | map_op["cmov"..cc.."_2"] = format("rmqdw:0F4%XrM", n) -- P6+ | 1429 | map_op["cmov"..cc.."_2"] = format("rmqdw:0F4%XrM", n) -- P6+ |
1429 | end | 1430 | end |