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 |
