Skip to content

Commit 32eef9b

Browse files
committed
R3: Fix sbb and disallow multiple immediates
1 parent 128eaa9 commit 32eef9b

1 file changed

Lines changed: 7 additions & 2 deletions

File tree

src/archs/r3.lua

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ local mnemonic_info = {
115115
[ "jy" ] = { traits = "J STE ", code = 0x00010000 },
116116
[ "ld" ] = { traits = " PSTE ", code = 0x00020000 },
117117
[ "exh" ] = { traits = "FPSTD ", code = 0x00030000 },
118-
[ "sub" ] = { traits = "FPSTDX ", code = 0x00040000, companion_code_xor = 0x00020000, companion_add_one = true },
119-
[ "sbb" ] = { traits = "FPSTDX ", code = 0x00050000, companion_code_xor = 0x00020000, companion_add_one = true },
118+
[ "sub" ] = { traits = "FPSTDX ", code = 0x00040000, companion_code_xor = 0x00020000, companion_add_one = true },
119+
[ "sbb" ] = { traits = "FPSTDX ", code = 0x00050000, companion_code_xor = 0x00020000, companion_add_one = false },
120120
[ "add" ] = { traits = "FPSTD ", code = 0x00060000 },
121121
[ "adc" ] = { traits = "FPSTD ", code = 0x00070000 },
122122
[ "or" ] = { traits = "FPSTD ", code = 0x00090000 },
@@ -206,9 +206,11 @@ function mnemonic_desc.emit(mnemonic_token, parameters)
206206
if info.traits:find("X") then
207207
imm_index = 2
208208
end
209+
local imm_count = 0
209210
for ix_operand = 1, #operands do
210211
local operand = operands[ix_operand]
211212
if operand and operand.type == "imm" then
213+
imm_count = imm_count + 1
212214
local trunc_bits = 16
213215
if info.traits:find("H") then
214216
trunc_bits = 4
@@ -253,6 +255,9 @@ function mnemonic_desc.emit(mnemonic_token, parameters)
253255
end
254256

255257
local final_code = nop:clone():merge(code, 0)
258+
if imm_count > 1 then
259+
final_code = nil
260+
end
256261
if final_code and info.traits:find("P") then
257262
if named_ops[1] then
258263
final_code = final_code:merge(named_ops[1].value, 25)

0 commit comments

Comments
 (0)