diff options
author | Mike Pall <mike> | 2009-12-15 04:45:34 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2009-12-15 04:45:34 +0100 |
commit | 267d7152abbb99f2fdd69e6ece40958589c25d6f (patch) | |
tree | 273c3bb6cd93799dc25988aa02a0c4114b8008eb | |
parent | 31f0074c5e74a317525de249a8d51428f0847e21 (diff) | |
download | luajit-267d7152abbb99f2fdd69e6ece40958589c25d6f.tar.gz luajit-267d7152abbb99f2fdd69e6ece40958589c25d6f.tar.bz2 luajit-267d7152abbb99f2fdd69e6ece40958589c25d6f.zip |
Allow 32 bit regs for indexing even for DynASM x64.
-rw-r--r-- | dynasm/dasm_x86.lua | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/dynasm/dasm_x86.lua b/dynasm/dasm_x86.lua index 1b79d3af..41144e12 100644 --- a/dynasm/dasm_x86.lua +++ b/dynasm/dasm_x86.lua | |||
@@ -273,7 +273,7 @@ local function mkrmap(sz, cl, names) | |||
273 | map_reg_rev[cname] = cl | 273 | map_reg_rev[cname] = cl |
274 | map_reg_num[cname] = -1 | 274 | map_reg_num[cname] = -1 |
275 | map_reg_opsize[cname] = sz | 275 | map_reg_opsize[cname] = sz |
276 | if sz == addrsize then | 276 | if sz == addrsize or sz == "d" then |
277 | map_reg_valid_base[cname] = true | 277 | map_reg_valid_base[cname] = true |
278 | map_reg_valid_index[cname] = true | 278 | map_reg_valid_index[cname] = true |
279 | end | 279 | end |
@@ -285,7 +285,7 @@ local function mkrmap(sz, cl, names) | |||
285 | map_reg_rev[iname] = name | 285 | map_reg_rev[iname] = name |
286 | map_reg_num[iname] = n-1 | 286 | map_reg_num[iname] = n-1 |
287 | map_reg_opsize[iname] = sz | 287 | map_reg_opsize[iname] = sz |
288 | if sz == addrsize then | 288 | if sz == addrsize or sz == "d" then |
289 | map_reg_valid_base[iname] = true | 289 | map_reg_valid_base[iname] = true |
290 | map_reg_valid_index[iname] = true | 290 | map_reg_valid_index[iname] = true |
291 | end | 291 | end |
@@ -303,7 +303,7 @@ local function mkrmap(sz, cl, names) | |||
303 | map_reg_rev[iname] = name | 303 | map_reg_rev[iname] = name |
304 | map_reg_num[iname] = i | 304 | map_reg_num[iname] = i |
305 | map_reg_opsize[iname] = sz | 305 | map_reg_opsize[iname] = sz |
306 | if sz == addrsize then | 306 | if sz == addrsize or sz == "d" then |
307 | map_reg_valid_base[iname] = true | 307 | map_reg_valid_base[iname] = true |
308 | map_reg_valid_index[iname] = true | 308 | map_reg_valid_index[iname] = true |
309 | end | 309 | end |
@@ -320,7 +320,8 @@ mkrmap("d", "Rd", {"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi"}) | |||
320 | mkrmap("w", "Rw", {"ax", "cx", "dx", "bx", "sp", "bp", "si", "di"}) | 320 | mkrmap("w", "Rw", {"ax", "cx", "dx", "bx", "sp", "bp", "si", "di"}) |
321 | mkrmap("b", "Rb", {"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"}) | 321 | mkrmap("b", "Rb", {"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"}) |
322 | -- !x64: ah, ch, dh, bh not valid with REX, r4b-r15b require REX | 322 | -- !x64: ah, ch, dh, bh not valid with REX, r4b-r15b require REX |
323 | map_reg_valid_index[map_archdef[x64 and "rsp" or "esp"]] = false | 323 | map_reg_valid_index[map_archdef.esp] = false |
324 | if x64 then map_reg_valid_index[map_archdef.rsp] = false end | ||
324 | map_archdef["Ra"] = "@"..addrsize | 325 | map_archdef["Ra"] = "@"..addrsize |
325 | 326 | ||
326 | -- FP registers (internally tword sized, but use "f" as operand size). | 327 | -- FP registers (internally tword sized, but use "f" as operand size). |