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 | |
| 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.
| -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. |
