diff options
author | Mike Pall <mike> | 2012-01-23 19:06:58 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2012-01-23 19:06:58 +0100 |
commit | b9651b4ba2a7a76d722acbb4e13d29866d517868 (patch) | |
tree | 420677cf08e1327b5b21c162bf168a73afa4ca2c /dynasm | |
parent | a72134e28099dac14765cd84810844c742b34029 (diff) | |
download | luajit-b9651b4ba2a7a76d722acbb4e13d29866d517868.tar.gz luajit-b9651b4ba2a7a76d722acbb4e13d29866d517868.tar.bz2 luajit-b9651b4ba2a7a76d722acbb4e13d29866d517868.zip |
MIPS: Add missing opcodes to the DynASM MIPS module plus minor fixes.
Allow single dot as macro name.
Diffstat (limited to 'dynasm')
-rw-r--r-- | dynasm/dasm_mips.lua | 17 | ||||
-rw-r--r-- | dynasm/dynasm.lua | 2 |
2 files changed, 15 insertions, 4 deletions
diff --git a/dynasm/dasm_mips.lua b/dynasm/dasm_mips.lua index 5cbae8ba..d8ce3b0c 100644 --- a/dynasm/dasm_mips.lua +++ b/dynasm/dasm_mips.lua | |||
@@ -11,7 +11,7 @@ local _info = { | |||
11 | description = "DynASM MIPS module", | 11 | description = "DynASM MIPS module", |
12 | version = "1.3.0", | 12 | version = "1.3.0", |
13 | vernum = 10300, | 13 | vernum = 10300, |
14 | release = "2011-12-16", | 14 | release = "2012-01-23", |
15 | author = "Mike Pall", | 15 | author = "Mike Pall", |
16 | license = "MIT", | 16 | license = "MIT", |
17 | } | 17 | } |
@@ -278,7 +278,9 @@ local map_op = { | |||
278 | -- Opcode SPECIAL. | 278 | -- Opcode SPECIAL. |
279 | nop_0 = "00000000", | 279 | nop_0 = "00000000", |
280 | sll_3 = "00000000DTA", | 280 | sll_3 = "00000000DTA", |
281 | movf_2 = "00000001DS", | ||
281 | movf_3 = "00000001DSC", | 282 | movf_3 = "00000001DSC", |
283 | movt_2 = "00010001DS", | ||
282 | movt_3 = "00010001DSC", | 284 | movt_3 = "00010001DSC", |
283 | srl_3 = "00000002DTA", | 285 | srl_3 = "00000002DTA", |
284 | rotr_3 = "00200002DTA", | 286 | rotr_3 = "00200002DTA", |
@@ -309,10 +311,12 @@ local map_op = { | |||
309 | move_2 = "00000021DS", | 311 | move_2 = "00000021DS", |
310 | addu_3 = "00000021DST", | 312 | addu_3 = "00000021DST", |
311 | sub_3 = "00000022DST", | 313 | sub_3 = "00000022DST", |
314 | negu_2 = "00000023DT", | ||
312 | subu_3 = "00000023DST", | 315 | subu_3 = "00000023DST", |
313 | and_3 = "00000024DST", | 316 | and_3 = "00000024DST", |
314 | or_3 = "00000025DST", | 317 | or_3 = "00000025DST", |
315 | xor_3 = "00000026DST", | 318 | xor_3 = "00000026DST", |
319 | not_2 = "00000027DS", | ||
316 | nor_3 = "00000027DST", | 320 | nor_3 = "00000027DST", |
317 | slt_3 = "0000002aDST", | 321 | slt_3 = "0000002aDST", |
318 | sltu_3 = "0000002bDST", | 322 | sltu_3 = "0000002bDST", |
@@ -341,6 +345,7 @@ local map_op = { | |||
341 | teqi_2 = "040c0000SI", | 345 | teqi_2 = "040c0000SI", |
342 | tnei_2 = "040e0000SI", | 346 | tnei_2 = "040e0000SI", |
343 | bltzal_2 = "04100000SB", | 347 | bltzal_2 = "04100000SB", |
348 | bal_1 = "04110000B", | ||
344 | bgezal_2 = "04110000SB", | 349 | bgezal_2 = "04110000SB", |
345 | bltzall_2 = "04120000SB", | 350 | bltzall_2 = "04120000SB", |
346 | bgezall_2 = "04130000SB", | 351 | bgezall_2 = "04130000SB", |
@@ -659,8 +664,14 @@ end | |||
659 | local function parse_disp(disp) | 664 | local function parse_disp(disp) |
660 | local imm, reg = match(disp, "^(.*)%(([%w_:]+)%)$") | 665 | local imm, reg = match(disp, "^(.*)%(([%w_:]+)%)$") |
661 | if imm then | 666 | if imm then |
662 | local r = parse_gpr(reg) | 667 | local r = parse_gpr(reg)*2^21 |
663 | return r*2^21 + parse_imm(imm, 16, 0, 0, true) | 668 | local extname = match(imm, "^extern%s+(%S+)$") |
669 | if extname then | ||
670 | waction("REL_EXT", map_extern[extname], nil, 1) | ||
671 | return r | ||
672 | else | ||
673 | return r + parse_imm(imm, 16, 0, 0, true) | ||
674 | end | ||
664 | end | 675 | end |
665 | local reg, tailr = match(disp, "^([%w_:]+)%s*(.*)$") | 676 | local reg, tailr = match(disp, "^([%w_:]+)%s*(.*)$") |
666 | if reg and tailr ~= "" then | 677 | if reg and tailr ~= "" then |
diff --git a/dynasm/dynasm.lua b/dynasm/dynasm.lua index 8ff98513..34974c06 100644 --- a/dynasm/dynasm.lua +++ b/dynasm/dynasm.lua | |||
@@ -390,7 +390,7 @@ map_coreop[".macro_*"] = function(mparams) | |||
390 | -- Split off and validate macro name. | 390 | -- Split off and validate macro name. |
391 | local name = remove(mparams, 1) | 391 | local name = remove(mparams, 1) |
392 | if not name then werror("missing macro name") end | 392 | if not name then werror("missing macro name") end |
393 | if not (match(name, "^[%a_][%w_%.]*$") or match(name, "^%.[%w_%.]+$")) then | 393 | if not (match(name, "^[%a_][%w_%.]*$") or match(name, "^%.[%w_%.]*$")) then |
394 | wfatal("bad macro name `"..name.."'") | 394 | wfatal("bad macro name `"..name.."'") |
395 | end | 395 | end |
396 | -- Validate macro parameter names. | 396 | -- Validate macro parameter names. |