Decompiler: Cleanup CLI and make overriding the config much easier (#1711)

* decomp: cleaned up CLI for decompiler

* decomp: much more flexible and clean decomp override mechanism

* decomp: cleanup scripts
This commit is contained in:
Tyler Wilding
2022-07-29 20:10:11 -04:00
committed by GitHub
parent a04bdff80d
commit eaac247074
12 changed files with 60 additions and 408 deletions
-27
View File
@@ -1,27 +0,0 @@
# Find files that are added to gsrc, but not to ref tests
from jak1_file_list import file_list
import os
src_path = ""
for f in file_list:
if f[2] != 3:
continue
if f[4] == "kernel":
continue
src_path = f[4]
gsrc_exists = False
gsrc_path = "./goal_src/{}/{}.gc".format(src_path, f[0])
if os.path.exists(gsrc_path):
with open(gsrc_path, "r") as gsrc_file:
lines = gsrc_file.readlines()
line_count = len(lines)
if line_count > 100:
gsrc_exists = True
# now check if there is a ref test file
if gsrc_exists:
ref_path = "./test/decompiler/reference/{}/{}_REF.gc".format(src_path, f[0])
if not os.path.exists(ref_path):
print("No Ref Test for - {}".format(f[0]))
print(gsrc_path)
print(ref_path)
-61
View File
@@ -1,61 +0,0 @@
import sys
from jak1_file_list import file_list
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--files")
parser.add_argument("--list", type=int)
args = parser.parse_args()
def update_json_file(decomp_list):
new_file_contents = []
print("Decompiling - " + ','.join(decomp_list))
# TODO, update the CGO/DGO
with open("decompiler\config\jak1_ntsc_black_label.jsonc", "r") as config_file:
cfg_lines = config_file.readlines()
for line in cfg_lines:
if "allowed_objects" in line:
line = " \"allowed_objects\": [\"" + ','.join(decomp_list) + "\"],\n"
new_file_contents.append(line)
if len(new_file_contents) > 0:
with open("decompiler\config\jak1_ntsc_black_label.jsonc", "w") as f:
f.writelines(new_file_contents)
print("Allowed objects list updated")
if args.files:
input_list = args.files.split(",")
decomp_list = []
for inFile in input_list:
for file in file_list:
if file[0] == inFile:
decomp_list.append(file[0])
break
elif file[1] == inFile:
# NOTE - kinda a hack, assumes -ag files always come after
decomp_list.append(file[1])
break
if len(decomp_list) > 0:
update_json_file(decomp_list)
else:
list_eligible = []
for file in file_list:
if file[2] != 3:
continue
if len(list_eligible) > args.list:
break
src_path = "goal_src/" + file[4] + "/" + file[0] + ".gc"
with open(src_path) as f:
lines = f.readlines()
if len(lines) <= 7:
list_eligible.append("{} - Empty".format(file[0]))
else:
# Check for TODOs
count_todos = 0
for line in lines:
if "TODO" in line:
count_todos = count_todos + 1
if count_todos > 0:
list_eligible.append("{} - {} TODOs - {}".format(file[0], count_todos, src_path))
if len(list_eligible) > 0:
print("The next {} files that need to be addressed:".format(args.list))
print(*list_eligible, sep = "\n")
-3
View File
@@ -1,3 +0,0 @@
watchdog[watchmedo]
prompt_toolkit
jsmin
+8
View File
@@ -42,11 +42,19 @@ decomp_config_map = {
}
}
default_config_map = {
"jak1": "jak1_ntsc_black_label.jsonc",
"jak2": "jak2_ntsc_v1.jsonc"
}
if args.game:
if args.game not in valid_games:
print("Unsupported game '{}'".format(args.game))
sys.exit(1)
curr = file["GAME"]
file["GAME"] = args.game
if (curr != file["GAME"]) or file["DECOMP_CONFIG"] not in decomp_config_map[file["GAME"]]:
file["DECOMP_CONFIG"] = default_config_map[file["GAME"]]
if args.decomp_config:
if args.decomp_config not in decomp_config_map[file["GAME"]]:
print("Unsupported decomp config '{}' for game '{}'".format(args.decomp_config, file["GAME"]))
-48
View File
@@ -1,48 +0,0 @@
TEST(DecompilerAtomicOpBuilder, BEQ) {test_case(assembly_from_list({"L100:", "beq a0, a1, L100", "sll r0, r0, 0", ""}), {"(b! (= a0 a1) L100 (nop!))"}, {{""}}, {{"a0","a1"}}, {{""}});test_case(assembly_from_list({"L100:", "beq r0, r0, L100", "sll r0, r0, 0", ""}), {"(b! #t L100 (nop!))"}, {{""}}, {{""}}, {{""}});test_case(assembly_from_list({"L100:", "beq a0, r0, L100", "sll r0, r0, 0", ""}), {"(b! (zero? a0) L100 (nop!))"}, {{""}}, {{"a0"}}, {{""}});test_case(assembly_from_list({"L100:", "beq s7, a0, L100", "sll r0, r0, 0", ""}), {"(b! (not a0) L100 (nop!))"}, {{""}}, {{"a0"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, BEQL) {test_case(assembly_from_list({"L100:", "beql a0, a1, L100", "sll r0, r0, 0", ""}), {"(bl! (= a0 a1) L100 (nop!))"}, {{""}}, {{"a0","a1"}}, {{""}});test_case(assembly_from_list({"L100:", "beql r0, r0, L100", "sll r0, r0, 0", ""}), {"(bl! #t L100 (nop!))"}, {{""}}, {{""}}, {{""}});test_case(assembly_from_list({"L100:", "beql a0, r0, L100", "sll r0, r0, 0", ""}), {"(bl! (zero? a0) L100 (nop!))"}, {{""}}, {{"a0"}}, {{""}});test_case(assembly_from_list({"L100:", "beql s7, a0, L100", "sll r0, r0, 0", ""}), {"(bl! (not a0) L100 (nop!))"}, {{""}}, {{"a0"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, BGEZL) {test_case(assembly_from_list({"L100:", "bgezl a0, L100", "sll r0, r0, 0", ""}), {"(bl! (>=0.si a0) L100 (nop!))"}, {{""}}, {{"a0"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, BGTZL) {test_case(assembly_from_list({"L100:", "bgtzl a0, L100", "sll r0, r0, 0", ""}), {"(bl! (>0.si a0) L100 (nop!))"}, {{""}}, {{"a0"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, BLTZL) {test_case(assembly_from_list({"L100:", "bltzl a0, L100", "sll r0, r0, 0", ""}), {"(bl! (<0.si a0) L100 (nop!))"}, {{""}}, {{"a0"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, BNE) {test_case(assembly_from_list({"L100:", "bne a1, a2, L100", "sll r0, r0, 0", ""}), {"(b! (!= a1 a2) L100 (nop!))"}, {{""}}, {{"a1","a2"}}, {{""}});test_case(assembly_from_list({"L100:", "bne a1, a2, L100", "or a3, s7, r0", ""}), {"(b! (!= a1 a2) L100 (set! a3 #f))"}, {{"a3"}}, {{"a1","a2"}}, {{""}});test_case(assembly_from_list({"L100:", "bne a1, a2, L100", "or a3, t0, r0", ""}), {"(b! (!= a1 a2) L100 (set! a3 t0))"}, {{"a3"}}, {{"a1","a2","t0"}}, {{""}});test_case(assembly_from_list({"L100:", "bne a1, a2, L100", "daddiu a3, s7, 8", ""}), {"(b! (!= a1 a2) L100 (set! a3 #t))"}, {{"a3"}}, {{"a1","a2"}}, {{""}});test_case(assembly_from_list({"L100:", "bne a1, a2, L100", "lw a3, pair(s7)", ""}), {"(b! (!= a1 a2) L100 (set! a3 pair))"}, {{"a3"}}, {{"a1","a2"}}, {{""}});test_case(assembly_from_list({"L100:", "bne a1, a2, L100", "lw a3, binteger(s7)", ""}), {"(b! (!= a1 a2) L100 (set! a3 binteger))"}, {{"a3"}}, {{"a1","a2"}}, {{""}});test_case(assembly_from_list({"L100:", "bne a1, a2, L100", "dsllv a3, t0, t1", ""}), {"(b! (!= a1 a2) L100 (set! a3 (sll t0 t1)))"}, {{"a3"}}, {{"a1","a2","t0","t1"}}, {{""}});test_case(assembly_from_list({"L100:", "bne a1, a2, L100", "dsubu a3, r0, t1", ""}), {"(b! (!= a1 a2) L100 (set! a3 (- t1)))"}, {{"a3"}}, {{"a1","a2","","t1"}}, {{""}});test_case(assembly_from_list({"L100:", "bne a1, r0, L100", "sll r0, r0, 0", ""}), {"(b! (nonzero? a1) L100 (nop!))"}, {{""}}, {{"a1"}}, {{""}});test_case(assembly_from_list({"L100:", "bne s7, a1, L100", "sll r0, r0, 0", ""}), {"(b! (truthy a1) L100 (nop!))"}, {{""}}, {{"a1"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, BNEL) {test_case(assembly_from_list({"L100:", "bnel a1, a2, L100", "sll r0, r0, 0", ""}), {"(bl! (!= a1 a2) L100 (nop!))"}, {{""}}, {{"a1","a2"}}, {{""}});test_case(assembly_from_list({"L100:", "bnel a1, r0, L100", "sll r0, r0, 0", ""}), {"(bl! (nonzero? a1) L100 (nop!))"}, {{""}}, {{"a1"}}, {{""}});test_case(assembly_from_list({"L100:", "bnel s7, a1, L100", "sll r0, r0, 0", ""}), {"(bl! (truthy a1) L100 (nop!))"}, {{""}}, {{"a1"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, C_EQ_S) {test_case(assembly_from_list({"L100:", "c.eq.s f1, f2", "bc1t L100", "sll r0, r0, 0", ""}), {"(b! (=.s f1 f2) L100 (nop!))"}, {{""}}, {{"f1","f2"}}, {{""}});test_case(assembly_from_list({"L100:", "c.eq.s f1, f2", "bc1f L100", "sll r0, r0, 0", ""}), {"(b! (!=.s f1 f2) L100 (nop!))"}, {{""}}, {{"f1","f2"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, C_LE_S) {test_case(assembly_from_list({"L100:", "c.le.s f1, f2", "bc1t L100", "sll r0, r0, 0", ""}), {"(b! (<=.s f1 f2) L100 (nop!))"}, {{""}}, {{"f1","f2"}}, {{""}});test_case(assembly_from_list({"L100:", "c.le.s f1, f2", "bc1f L100", "sll r0, r0, 0", ""}), {"(b! (>.s f1 f2) L100 (nop!))"}, {{""}}, {{"f1","f2"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, C_LT_S) {test_case(assembly_from_list({"L100:", "c.lt.s f1, f2", "bc1t L100", "sll r0, r0, 0", ""}), {"(b! (<.s f1 f2) L100 (nop!))"}, {{""}}, {{"f1","f2"}}, {{""}});test_case(assembly_from_list({"L100:", "c.lt.s f1, f2", "bc1f L100", "sll r0, r0, 0", ""}), {"(b! (>=.s f1 f2) L100 (nop!))"}, {{""}}, {{"f1","f2"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, DADDIU) {test_case(assembly_from_list({"daddiu a1, s7, 8", "movn a1, s7, a0", ""}), {"(set! a1 (zero? a0))"}, {{"a1"}}, {{"a0"}}, {{""}});test_case(assembly_from_list({"daddiu a1, s7, 8", "movz a1, s7, a0", ""}), {"(set! a1 (nonzero? a0))"}, {{"a1"}}, {{"a0"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, DADDU) {test_case(assembly_from_list({"daddu v1, r0, v0", ""}), {"(set! v1 (+ v0 0))"}, {{"v1"}}, {{"v0"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, DIV) {test_case(assembly_from_list({"div a1, a2", "mflo a3", ""}), {"(set! a3 (/.si a1 a2))"}, {{"a3"}}, {{"a1","a2"}}, {{""}});test_case(assembly_from_list({"div a1, a2", "mfhi a3", ""}), {"(set! a3 (mod.si a1 a2))"}, {{"a3"}}, {{"a1","a2"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, DIVU) {test_case(assembly_from_list({"divu a1, a2", "mflo a3", ""}), {"(set! a3 (/.ui a1 a2))"}, {{"a3"}}, {{"a1","a2"}}, {{""}});test_case(assembly_from_list({"divu a1, a2", "mfhi a3", ""}), {"(set! a3 (mod.ui a1 a2))"}, {{"a3"}}, {{"a1","a2"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, DSLL32) {test_case(assembly_from_list({"L100:", "dsll32 v1, s4, 30", "slt v1, v1, r0", "beq v1, r0, L100", "sll r0, r0, 0", ""}), {"(b! (not-pair? s4) L100 (nop!))"}, {{""}}, {{"s4"}}, {{"v1"}});}
TEST(DecompilerAtomicOpBuilder, DSUBU) {test_case(assembly_from_list({"dsubu a0, a1, a2", "daddiu t0, s7, 8", "movn t0, s7, a0", ""}), {"(set! t0 (= a1 a2))"}, {{"t0"}}, {{"a1","a2"}}, {{"a0"}});test_case(assembly_from_list({"dsubu a0, a1, a2", "daddiu t0, s7, 8", "movz t0, s7, a0", ""}), {"(set! t0 (!= a1 a2))"}, {{"t0"}}, {{"a1","a2"}}, {{"a0"}});}
TEST(DecompilerAtomicOpBuilder, JALR) {test_case(assembly_from_list({"jalr ra, t9", "sll v0, ra, 0", ""}), {"(call!)"}, {{""}}, {{"t9"}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, LUI) {test_case(assembly_from_list({"L100:", "lui a0, 2", "ori a1, a0, 3", ""}), {"(set! a1 131075)"}, {{"a1"}}, {{""}}, {{"a0"}});test_case(assembly_from_list({"L100:", "lui a0, 2", "ori a0, a0, 3", ""}), {"(set! a0 131075)"}, {{"a0"}}, {{""}}, {{""}});test_case(assembly_from_list({"L100:", "lui a0, L100", "ori a1, a0, L100", ""}), {"(set! a1 L100)"}, {{"a1"}}, {{""}}, {{"a0"}});test_case(assembly_from_list({"L100:", "lui a0, L100", "ori a0, a0, L100", ""}), {"(set! a0 L100)"}, {{"a0"}}, {{""}}, {{""}});test_case(assembly_from_list({"L100:", "lui a0, L100", "ori a1, a0, L100", "addu a1, fp, a1", ""}), {"(set! a1 L100)"}, {{"a1"}}, {{""}}, {{"a0"}});test_case(assembly_from_list({"L100:", "lui a1, L100", "ori a1, a1, L100", "addu a1, fp, a1", ""}), {"(set! a1 L100)"}, {{"a1"}}, {{""}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, MTC1) {test_case(assembly_from_list({"mtc1 f3, r0", ""}), {"(set! f3 0)"}, {{"f3"}}, {{""}}, {{""}});}
TEST(DecompilerAtomicOpBuilder, SLT) {test_case(assembly_from_list({"slt a0, a1, a2", "movz a1, a2, a0", ""}), {"(set! a1 (min.si a1 a2))"}, {{"a1"}}, {{"a1","a2"}}, {{"a0"}});test_case(assembly_from_list({"slt a0, a1, a2", "movn a1, a2, a0", ""}), {"(set! a1 (max.si a1 a2))"}, {{"a1"}}, {{"a1","a2"}}, {{"a0"}});test_case(assembly_from_list({"L100:", "slt a3, a0, a1", "bne a3, r0, L100", "or a3, s7, r0", ""}), {"(b! (<.si a0 a1) L100 (set! a3 #f))"}, {{"a3"}}, {{"a0","a1"}}, {{""}});test_case(assembly_from_list({"L100:", "slt a3, a0, a1", "bne a3, r0, L100", "or a2, s7, r0", ""}), {"(b! (<.si a0 a1) L100 (set! a2 #f))"}, {{"a2"}}, {{"a0","a1"}}, {{"a3"}});test_case(assembly_from_list({"L100:", "slt a3, a0, a1", "beq a3, r0, L100", "or a3, s7, r0", ""}), {"(b! (>=.si a0 a1) L100 (set! a3 #f))"}, {{"a3"}}, {{"a0","a1"}}, {{""}});test_case(assembly_from_list({"L100:", "slt a3, a0, a1", "beq a3, r0, L100", "or a2, s7, r0", ""}), {"(b! (>=.si a0 a1) L100 (set! a2 #f))"}, {{"a2"}}, {{"a0","a1"}}, {{"a3"}});test_case(assembly_from_list({"slt a3, a0, a1", "daddiu a2, s7, 8", "movz a2, s7, a3", ""}), {"(set! a2 (<.si a0 a1))"}, {{"a2"}}, {{"a0","a1"}}, {{"a3"}});test_case(assembly_from_list({"slt a3, a0, r0", "daddiu a2, s7, 8", "movz a2, s7, a3", ""}), {"(set! a2 (<0.si a0))"}, {{"a2"}}, {{"a0"}}, {{"a3"}});test_case(assembly_from_list({"slt a3, a0, a1", "daddiu a2, s7, 8", "movn a2, s7, a3", ""}), {"(set! a2 (>=.si a0 a1))"}, {{"a2"}}, {{"a0","a1"}}, {{"a3"}});test_case(assembly_from_list({"slt a3, a0, r0", "daddiu a2, s7, 8", "movn a2, s7, a3", ""}), {"(set! a2 (>=0.si a0))"}, {{"a2"}}, {{"a0"}}, {{"a3"}});test_case(assembly_from_list({"slt a3, r0, a0", "daddiu a2, s7, 8", "movz a2, s7, a3", ""}), {"(set! a2 (>0.si a0))"}, {{"a2"}}, {{"a0"}}, {{"a3"}});test_case(assembly_from_list({"L100:", "slt v1, s2, r0", "beq v1, r0, L100", "or v1, s7, r0", ""}), {"(b! (>=0.si s2) L100 (set! v1 #f))"}, {{"v1"}}, {{"s2"}}, {{""}});test_case(assembly_from_list({"L100:", "slt v1, s2, r0", "beq v1, r0, L100", "or v0, s7, r0", ""}), {"(b! (>=0.si s2) L100 (set! v0 #f))"}, {{"v0"}}, {{"s2"}}, {{"v1"}});}
TEST(DecompilerAtomicOpBuilder, SLTI) {test_case(assembly_from_list({"L100:", "slti a3, a0, 12", "bne a3, r0, L100", "or a3, s7, r0", ""}), {"(b! (<.si a0 12) L100 (set! a3 #f))"}, {{"a3"}}, {{"a0"}}, {{""}});test_case(assembly_from_list({"L100:", "slti a3, a0, 12", "bne a3, r0, L100", "or a2, s7, r0", ""}), {"(b! (<.si a0 12) L100 (set! a2 #f))"}, {{"a2"}}, {{"a0"}}, {{"a3"}});test_case(assembly_from_list({"L100:", "slti a3, a0, 12", "beq a3, r0, L100", "or a3, s7, r0", ""}), {"(b! (>=.si a0 12) L100 (set! a3 #f))"}, {{"a3"}}, {{"a0"}}, {{""}});test_case(assembly_from_list({"L100:", "slti a3, a0, 12", "beq a3, r0, L100", "or a2, s7, r0", ""}), {"(b! (>=.si a0 12) L100 (set! a2 #f))"}, {{"a2"}}, {{"a0"}}, {{"a3"}});test_case(assembly_from_list({"slti a3, a0, 12", "daddiu a2, s7, 8", "movz a2, s7, a3", ""}), {"(set! a2 (<.si a0 12))"}, {{"a2"}}, {{"a0"}}, {{"a3"}});test_case(assembly_from_list({"slti a3, a0, 12", "daddiu a2, s7, 8", "movn a2, s7, a3", ""}), {"(set! a2 (>=.si a0 12))"}, {{"a2"}}, {{"a0"}}, {{"a3"}});}
TEST(DecompilerAtomicOpBuilder, SLTIU) {test_case(assembly_from_list({"L100:", "sltiu a3, a0, 12", "bne a3, r0, L100", "or a3, s7, r0", ""}), {"(b! (<.ui a0 12) L100 (set! a3 #f))"}, {{"a3"}}, {{"a0"}}, {{""}});test_case(assembly_from_list({"L100:", "sltiu a3, a0, 12", "bne a3, r0, L100", "or a2, s7, r0", ""}), {"(b! (<.ui a0 12) L100 (set! a2 #f))"}, {{"a2"}}, {{"a0"}}, {{"a3"}});test_case(assembly_from_list({"L100:", "sltiu a3, a0, 12", "beq a3, r0, L100", "or a3, s7, r0", ""}), {"(b! (>=.ui a0 12) L100 (set! a3 #f))"}, {{"a3"}}, {{"a0"}}, {{""}});test_case(assembly_from_list({"L100:", "sltiu a3, a0, 12", "beq a3, r0, L100", "or a2, s7, r0", ""}), {"(b! (>=.ui a0 12) L100 (set! a2 #f))"}, {{"a2"}}, {{"a0"}}, {{"a3"}});test_case(assembly_from_list({"sltiu a3, a0, 12", "daddiu a2, s7, 8", "movz a2, s7, a3", ""}), {"(set! a2 (<.ui a0 12))"}, {{"a2"}}, {{"a0"}}, {{"a3"}});test_case(assembly_from_list({"sltiu a3, a0, 12", "daddiu a2, s7, 8", "movn a2, s7, a3", ""}), {"(set! a2 (>=.ui a0 12))"}, {{"a2"}}, {{"a0"}}, {{"a3"}});}
TEST(DecompilerAtomicOpBuilder, SLTU) {test_case(assembly_from_list({"sltu a0, a1, a2", "movz a1, a2, a0", ""}), {"(set! a1 (min.ui a1 a2))"}, {{"a1"}}, {{"a1","a2"}}, {{"a0"}});test_case(assembly_from_list({"sltu a0, a1, a2", "movn a1, a2, a0", ""}), {"(set! a1 (max.ui a1 a2))"}, {{"a1"}}, {{"a1","a2"}}, {{"a0"}});test_case(assembly_from_list({"L100:", "sltu a3, a0, a1", "bne a3, r0, L100", "or a3, s7, r0", ""}), {"(b! (<.ui a0 a1) L100 (set! a3 #f))"}, {{"a3"}}, {{"a0","a1"}}, {{""}});test_case(assembly_from_list({"L100:", "sltu a3, a0, a1", "bne a3, r0, L100", "or a2, s7, r0", ""}), {"(b! (<.ui a0 a1) L100 (set! a2 #f))"}, {{"a2"}}, {{"a0","a1"}}, {{"a3"}});test_case(assembly_from_list({"L100:", "sltu a3, a0, a1", "beq a3, r0, L100", "or a3, s7, r0", ""}), {"(b! (>=.ui a0 a1) L100 (set! a3 #f))"}, {{"a3"}}, {{"a0","a1"}}, {{""}});test_case(assembly_from_list({"L100:", "sltu a3, a0, a1", "beq a3, r0, L100", "or a2, s7, r0", ""}), {"(b! (>=.ui a0 a1) L100 (set! a2 #f))"}, {{"a2"}}, {{"a0","a1"}}, {{"a3"}});test_case(assembly_from_list({"sltu a3, a0, a1", "daddiu a2, s7, 8", "movz a2, s7, a3", ""}), {"(set! a2 (<.ui a0 a1))"}, {{"a2"}}, {{"a0","a1"}}, {{"a3"}});test_case(assembly_from_list({"sltu a3, a0, a1", "daddiu a2, s7, 8", "movn a2, s7, a3", ""}), {"(set! a2 (>=.ui a0 a1))"}, {{"a2"}}, {{"a0","a1"}}, {{"a3"}});}
TEST(DecompilerAtomicOpBuilder, SW) {test_case(assembly_from_list({"sw r0, test(s7)", ""}), {"(s.w! test 0)"}, {{""}}, {{""}}, {{""}});test_case(assembly_from_list({"sw r0, 2(a3)", ""}), {"(s.w! (+ a3 2) 0)"}, {{""}}, {{"a3"}}, {{""}});test_case(assembly_from_list({"sw r0, 0(a3)", ""}), {"(s.w! a3 0)"}, {{""}}, {{"a3"}}, {{""}});}
-183
View File
@@ -1,183 +0,0 @@
" or a1, a2, a3\n", {"(set! a1 (logior a2 a3))"}, {"a1"}, {"a2 a3"}, {""}
" or a2, r0, r0\n", {"(set! a2 0)"}, {"a2"}, {""}, {""}
" or a1, s7, r0\n", {"(set! a1 '#f)"}, {"a1"}, {""}, {""}
" ori a2, r0, 1234\n", {"(set! a2 1234)"}, {"a2"}, {""}, {""}
" ori a2, r0, -1234\n", {"(set! a2 -1234)"}, {"a2"}, {""}, {""}
" ori a2, a3, -1234\n", {"(set! a2 (logior a3 -1234))"}, {"a2"}, {"a3"}, {""}
" mtc1 f3, a1\n", {"(set! f3 (gpr->fpr a1))"}, {"f3"}, {"a1"}, {""}
" mfc1 a1, f3\n", {"(set! a1 (fpr->gpr f3))"}, {"a1"}, {"f3"}, {""}
" and a1, a2, a3\n", {"(set! a1 (logand a2 a3))"}, {"a1"}, {"a2 a3"}, {""}
"L123:\n lwc1 f3, L123(fp)\n", {"(set! f3 (l.f L123))"}, {"f3"}, {""}, {""}
" lwc1 f2, 0(a3)\n", {"(set! f2 (l.f a3))"}, {"f2"}, {"a3"}, {""}
" lwc1 f2, 12(a3)\n", {"(set! f2 (l.f (+ a3 12)))"}, {"f2"}, {"a3"}, {""}
"L123:\n lb a3, L123(fp)\n", {"(set! a3 (l.b L123))"}, {"a3"}, {""}, {""}
" lb a2, 0(a3)\n", {"(set! a2 (l.b a3))"}, {"a2"}, {"a3"}, {""}
" lb a2, 12(a3)\n", {"(set! a2 (l.b (+ a3 12)))"}, {"a2"}, {"a3"}, {""}
"L123:\n lbu a3, L123(fp)\n", {"(set! a3 (l.bu L123))"}, {"a3"}, {""}, {""}
" lbu a2, 0(a3)\n", {"(set! a2 (l.bu a3))"}, {"a2"}, {"a3"}, {""}
" lbu a2, 12(a3)\n", {"(set! a2 (l.bu (+ a3 12)))"}, {"a2"}, {"a3"}, {""}
"L123:\n lh a3, L123(fp)\n", {"(set! a3 (l.h L123))"}, {"a3"}, {""}, {""}
" lh a2, 0(a3)\n", {"(set! a2 (l.h a3))"}, {"a2"}, {"a3"}, {""}
" lh a2, 12(a3)\n", {"(set! a2 (l.h (+ a3 12)))"}, {"a2"}, {"a3"}, {""}
"L123:\n lhu a3, L123(fp)\n", {"(set! a3 (l.hu L123))"}, {"a3"}, {""}, {""}
" lhu a2, 0(a3)\n", {"(set! a2 (l.hu a3))"}, {"a2"}, {"a3"}, {""}
" lhu a2, 12(a3)\n", {"(set! a2 (l.hu (+ a3 12)))"}, {"a2"}, {"a3"}, {""}
"L123:\n lwu a3, L123(fp)\n", {"(set! a3 (l.wu L123))"}, {"a3"}, {""}, {""}
" lwu a2, 0(a3)\n", {"(set! a2 (l.wu a3))"}, {"a2"}, {"a3"}, {""}
" lwu a2, 12(a3)\n", {"(set! a2 (l.wu (+ a3 12)))"}, {"a2"}, {"a3"}, {""}
"L123:\n ld a3, L123(fp)\n", {"(set! a3 (l.d L123))"}, {"a3"}, {""}, {""}
" ld a2, 0(a3)\n", {"(set! a2 (l.d a3))"}, {"a2"}, {"a3"}, {""}
" ld a2, 12(a3)\n", {"(set! a2 (l.d (+ a3 12)))"}, {"a2"}, {"a3"}, {""}
" lw r0, 2(r0)\n", {"(break!)"}, {""}, {""}, {""}
" lw a2, test(s7)\n", {"(set! a2 test)"}, {"a2"}, {""}, {""}
"L123:\n lw a3, L123(fp)\n", {"(set! a3 (l.w L123))"}, {"a3"}, {""}, {""}
" lw a2, 0(a3)\n", {"(set! a2 (l.w a3))"}, {"a2"}, {"a3"}, {""}
" lw a2, 12(a3)\n", {"(set! a2 (l.w (+ a3 12)))"}, {"a2"}, {"a3"}, {""}
" dsll a2, a3, 3\n", {"(set! a2 (shl a3 3))"}, {"a2"}, {"a3"}, {""}
" dsll32 a2, a3, 3\n", {"(set! a2 (shl a3 35))"}, {"a2"}, {"a3"}, {""}
" dsrl a2, a3, 3\n", {"(set! a2 (srl a3 3))"}, {"a2"}, {"a3"}, {""}
" dsrl32 a2, a3, 3\n", {"(set! a2 (srl a3 35))"}, {"a2"}, {"a3"}, {""}
" dsra a2, a3, 3\n", {"(set! a2 (sra a3 3))"}, {"a2"}, {"a3"}, {""}
" dsra32 a2, a3, 3\n", {"(set! a2 (sra a3 35))"}, {"a2"}, {"a3"}, {""}
" div.s f1, f2, f3\n", {"(set! f1 (/.s f2 f3))"}, {"f1"}, {"f2 f3"}, {""}
" min.s f1, f2, f3\n", {"(set! f1 (min.s f2 f3))"}, {"f1"}, {"f2 f3"}, {""}
" max.s f1, f2, f3\n", {"(set! f1 (max.s f2 f3))"}, {"f1"}, {"f2 f3"}, {""}
" mul.s f1, f2, f3\n", {"(set! f1 (*.s f2 f3))"}, {"f1"}, {"f2 f3"}, {""}
" add.s f1, f2, f3\n", {"(set! f1 (+.s f2 f3))"}, {"f1"}, {"f2 f3"}, {""}
" sub.s f1, f2, f3\n", {"(set! f1 (-.s f2 f3))"}, {"f1"}, {"f2 f3"}, {""}
" daddiu a1, s7, test\n", {"(set! a1 'test)"}, {"a1"}, {""}, {""}
" daddiu a1, s7, -10\n", {"(set! a1 '())"}, {"a1"}, {""}, {""}
" daddiu a1, s7, -32768\n", {"(set! a1 __START-OF-TABLE__)"}, {"a1"}, {""}, {""}
" daddiu a1, s7, 8\n", {"(set! a1 '#t)"}, {"a1"}, {""}, {""}
"L123:\n daddiu a1, fp, L123\n", {"(set! a1 L123)"}, {"a1"}, {""}, {""}
" daddiu a1, a2, 1234\n", {"(set! a1 (+ a2 1234))"}, {"a1"}, {"a2"}, {""}
" daddu a1, a2, a3\n", {"(set! a1 (+ a2 a3))"}, {"a1"}, {"a2 a3"}, {""}
" dsubu a1, a2, a3\n", {"(set! a1 (- a2 a3))"}, {"a1"}, {"a2 a3"}, {""}
" dsubu a1, r0, a3\n", {"(set! a1 (- a3))"}, {"a1"}, {"a3"}, {""}
" mult3 a1, a2, a3\n", {"(set! a1 (*.si a2 a3))"}, {"a1"}, {"a2 a3"}, {""}
" multu3 a1, a2, a3\n", {"(set! a1 (*.ui a2 a3))"}, {"a1"}, {"a2 a3"}, {""}
" andi a1, a2, 1234\n", {"(set! a1 (logand a2 1234))"}, {"a1"}, {"a2"}, {""}
" xori a1, a2, 1234\n", {"(set! a1 (logxor a2 1234))"}, {"a1"}, {"a2"}, {""}
" nor a1, a2, r0\n", {"(set! a1 (lognot a2))"}, {"a1"}, {"a2"}, {""}
" nor a1, a2, a3\n", {"(set! a1 (lognor a2 a3))"}, {"a1"}, {"a2 a3"}, {""}
" xor a1, a2, a3\n", {"(set! a1 (logxor a2 a3))"}, {"a1"}, {"a2 a3"}, {""}
" addiu a1, r0, 12\n", {"(set! a1 12)"}, {"a1"}, {""}, {""}
" lui a3, 2\n", {"(set! a3 131072)"}, {"a3"}, {""}, {""}
" sll r0, r0, 0\n", {"(nop!)"}, {""}, {""}, {""}
" dsrav a1, a2, a3\n", {"(set! a1 (sra a2 a3))"}, {"a1"}, {"a2 a3"}, {""}
" dsrlv a1, a2, a3\n", {"(set! a1 (srl a2 a3))"}, {"a1"}, {"a2 a3"}, {""}
" dsllv a1, a2, a3\n", {"(set! a1 (sll a2 a3))"}, {"a1"}, {"a2 a3"}, {""}
" sb a1, 2(a3)\n", {"(s.b! (+ a3 2) a1)"}, {""}, {"a1 a3"}, {""}
" sb a1, 0(a3)\n", {"(s.b! a3 a1)"}, {""}, {"a1 a3"}, {""}
" sb s7, 2(a3)\n", {"(s.b! (+ a3 2) '#f)"}, {""}, {"a3"}, {""}
" sb s7, 0(a3)\n", {"(s.b! a3 '#f)"}, {""}, {"a3"}, {""}
" sh a1, 2(a3)\n", {"(s.h! (+ a3 2) a1)"}, {""}, {"a1 a3"}, {""}
" sh a1, 0(a3)\n", {"(s.h! a3 a1)"}, {""}, {"a1 a3"}, {""}
" sh s7, 2(a3)\n", {"(s.h! (+ a3 2) '#f)"}, {""}, {"a3"}, {""}
" sh s7, 0(a3)\n", {"(s.h! a3 '#f)"}, {""}, {"a3"}, {""}
" sw a1, test(s7)\n", {"(s.w! test a1)"}, {""}, {"a1"}, {""}
" sw s7, test(s7)\n", {"(s.w! test '#f)"}, {""}, {""}, {""}
" sw a1, 2(a3)\n", {"(s.w! (+ a3 2) a1)"}, {""}, {"a1 a3"}, {""}
" sw a1, 0(a3)\n", {"(s.w! a3 a1)"}, {""}, {"a1 a3"}, {""}
" sw s7, 2(a3)\n", {"(s.w! (+ a3 2) '#f)"}, {""}, {"a3"}, {""}
" sw s7, 0(a3)\n", {"(s.w! a3 '#f)"}, {""}, {"a3"}, {""}
" sd a1, 2(a3)\n", {"(s.d! (+ a3 2) a1)"}, {""}, {"a1 a3"}, {""}
" sd a1, 0(a3)\n", {"(s.d! a3 a1)"}, {""}, {"a1 a3"}, {""}
" sd s7, 2(a3)\n", {"(s.d! (+ a3 2) '#f)"}, {""}, {"a3"}, {""}
" sd s7, 0(a3)\n", {"(s.d! a3 '#f)"}, {""}, {"a3"}, {""}
" swc1 f2, 2(a3)\n", {"(s.f! (+ a3 2) f2)"}, {""}, {"f2 a3"}, {""}
" swc1 f2, 0(a3)\n", {"(s.f! a3 f2)"}, {""}, {"f2 a3"}, {""}
" cvt.s.w f1, f2\n", {"(set! f1 (i2f f2))"}, {"f1"}, {"f2"}, {""}
" cvt.w.s f1, f2\n", {"(set! f1 (f2i f2))"}, {"f1"}, {"f2"}, {""}
" abs.s f1, f2\n", {"(set! f1 (abs.s f2))"}, {"f1"}, {"f2"}, {""}
" neg.s f1, f2\n", {"(set! f1 (neg.s f2))"}, {"f1"}, {"f2"}, {""}
" sqrt.s f1, f2\n", {"(set! f1 (sqrt.s f2))"}, {"f1"}, {"f2"}, {""}
" mov.s f1, f2\n", {"(set! f1 f2)"}, {"f1"}, {"f2"}, {""}
" movz a1, s7, a2\n", {"(cmove-#f-zero a1 a2)"}, {"a1"}, {"a2"}, {""}
" movn a1, s7, a2\n", {"(cmove-#f-nonzero a1 a2)"}, {"a1"}, {"a2"}, {""}
" div a1, a2\n mflo a3\n", {"(set! a3 (/.si a1 a2))"}, {"a3"}, {"a1 a2"}, {""}
" divu a1, a2\n mflo a3\n", {"(set! a3 (/.ui a1 a2))"}, {"a3"}, {"a1 a2"}, {""}
" div a1, a2\n mfhi a3\n", {"(set! a3 (mod.si a1 a2))"}, {"a3"}, {"a1 a2"}, {""}
" divu a1, a2\n mfhi a3\n", {"(set! a3 (mod.ui a1 a2))"}, {"a3"}, {"a1 a2"}, {""}
" jalr ra, t9\n sll v0, ra, 0\n", {"(call!)"}, {""}, {"t9"}, {""}
"L100:\n bne a1, a2, L100\n sll r0, r0, 0\n", {"(b! (!= a1 a2) L100 (nop!))"}, {""}, {"a1 a2"}, {""}
"L100:\n bne a1, a2, L100\n or a3, s7, r0\n", {"(b! (!= a1 a2) L100 (set! a3 #f))"}, {"a3"}, {"a1 a2"}, {""}
"L100:\n bne a1, a2, L100\n or a3, t0, r0\n", {"(b! (!= a1 a2) L100 (set! a3 t0))"}, {"a3"}, {"a1 a2 t0"}, {""}
"L100:\n bne a1, a2, L100\n daddiu a3, s7, 8\n", {"(b! (!= a1 a2) L100 (set! a3 #t))"}, {"a3"}, {"a1 a2"}, {""}
"L100:\n bne a1, a2, L100\n lw a3, pair(s7)\n", {"(b! (!= a1 a2) L100 (set! a3 pair))"}, {"a3"}, {"a1 a2"}, {""}
"L100:\n bne a1, a2, L100\n lw a3, binteger(s7)\n", {"(b! (!= a1 a2) L100 (set! a3 binteger))"}, {"a3"}, {"a1 a2"}, {""}
"L100:\n bne a1, a2, L100\n dsllv a3, t0, t1\n", {"(b! (!= a1 a2) L100 (set! a3 (sll t0 t1)))"}, {"a3"}, {"a1 a2 t0 t1"}, {""}
"L100:\n bne a1, a2, L100\n dsubu a3, r0, t1\n", {"(b! (!= a1 a2) L100 (set! a3 (- t1)))"}, {"a3"}, {"a1 a2 t1"}, {""}
"L100:\n bne a1, r0, L100\n sll r0, r0, 0\n", {"(b! (nonzero? a1) L100 (nop!))"}, {""}, {"a1"}, {""}
"L100:\n bne s7, a1, L100\n sll r0, r0, 0\n", {"(b! (truthy a1) L100 (nop!))"}, {""}, {"a1"}, {""}
"L100:\n bnel a1, a2, L100\n sll r0, r0, 0\n", {"(bl! (!= a1 a2) L100 (nop!))"}, {""}, {"a1 a2"}, {""}
"L100:\n bnel a1, r0, L100\n sll r0, r0, 0\n", {"(bl! (nonzero? a1) L100 (nop!))"}, {""}, {"a1"}, {""}
"L100:\n bnel s7, a1, L100\n sll r0, r0, 0\n", {"(bl! (truthy a1) L100 (nop!))"}, {""}, {"a1"}, {""}
"L100:\n beq a0, a1, L100\n sll r0, r0, 0\n", {"(b! (= a0 a1) L100 (nop!))"}, {""}, {"a0 a1"}, {""}
"L100:\n beq r0, r0, L100\n sll r0, r0, 0\n", {"(b! #t L100 (nop!))"}, {""}, {""}, {""}
"L100:\n beq a0, r0, L100\n sll r0, r0, 0\n", {"(b! (zero? a0) L100 (nop!))"}, {""}, {"a0"}, {""}
"L100:\n beq s7, a0, L100\n sll r0, r0, 0\n", {"(b! (not a0) L100 (nop!))"}, {""}, {"a0"}, {""}
"L100:\n beql a0, a1, L100\n sll r0, r0, 0\n", {"(bl! (= a0 a1) L100 (nop!))"}, {""}, {"a0 a1"}, {""}
"L100:\n beql r0, r0, L100\n sll r0, r0, 0\n", {"(bl! #t L100 (nop!))"}, {""}, {""}, {""}
"L100:\n beql a0, r0, L100\n sll r0, r0, 0\n", {"(bl! (zero? a0) L100 (nop!))"}, {""}, {"a0"}, {""}
"L100:\n beql s7, a0, L100\n sll r0, r0, 0\n", {"(bl! (not a0) L100 (nop!))"}, {""}, {"a0"}, {""}
"L100:\n bgtzl a0, L100\n sll r0, r0, 0\n", {"(bl! (>0.si a0) L100 (nop!))"}, {""}, {"a0"}, {""}
"L100:\n bgezl a0, L100\n sll r0, r0, 0\n", {"(bl! (>=0.si a0) L100 (nop!))"}, {""}, {"a0"}, {""}
"L100:\n bltzl a0, L100\n sll r0, r0, 0\n", {"(bl! (<0.si a0) L100 (nop!))"}, {""}, {"a0"}, {""}
" daddiu a1, s7, 8\n movn a1, s7, a0\n", {"(set! a1 (zero? a0))"}, {"a1"}, {"a0"}, {""}
" daddiu a1, s7, 8\n movz a1, s7, a0\n", {"(set! a1 (nonzero? a0))"}, {"a1"}, {"a0"}, {""}
"L100:\n lui a0, 2\n ori a1, a0, 3\n", {"(set! a1 131075)"}, {"a1"}, {""}, {"a0"}
"L100:\n lui a0, 2\n ori a0, a0, 3\n", {"(set! a0 131075)"}, {"a0"}, {""}, {""}
"L100:\n lui a0, L100\n ori a1, a0, L100\n", {"(set! a1 L100)"}, {"a1"}, {""}, {"a0"}
"L100:\n lui a0, L100\n ori a0, a0, L100\n", {"(set! a0 L100)"}, {"a0"}, {""}, {""}
" slt a0, a1, a2\n movz a1, a2, a0\n", {"(set! a1 (min.si a1 a2))"}, {"a1"}, {"a1 a2"}, {"a0"}
" slt a0, a1, a2\n movn a1, a2, a0\n", {"(set! a1 (max.si a1 a2))"}, {"a1"}, {"a1 a2"}, {"a0"}
" sltu a0, a1, a2\n movz a1, a2, a0\n", {"(set! a1 (min.ui a1 a2))"}, {"a1"}, {"a1 a2"}, {"a0"}
" sltu a0, a1, a2\n movn a1, a2, a0\n", {"(set! a1 (max.ui a1 a2))"}, {"a1"}, {"a1 a2"}, {"a0"}
"L100:\n lui a0, L100\n ori a1, a0, L100\n addu a1, fp, a1\n", {"(set! a1 L100)"}, {"a1"}, {""}, {"a0"}
"L100:\n lui a1, L100\n ori a1, a1, L100\n addu a1, fp, a1\n", {"(set! a1 L100)"}, {"a1"}, {""}, {""}
" dsubu a0, a1, a2\n daddiu t0, s7, 8\n movn t0, s7, a0\n", {"(set! t0 (= a1 a2))"}, {"t0"}, {"a1 a2"}, {"a0"}
" dsubu a0, a1, a2\n daddiu t0, s7, 8\n movz t0, s7, a0\n", {"(set! t0 (!= a1 a2))"}, {"t0"}, {"a1 a2"}, {"a0"}
"L100:\n slt a3, a0, a1\n bne a3, r0, L100\n or a3, s7, r0\n", {"(b! (<.si a0 a1) L100 (set! a3 #f))"}, {"a3"}, {"a0 a1"}, {""}
"L100:\n slt a3, a0, a1\n bne a3, r0, L100\n or a2, s7, r0\n", {"(b! (<.si a0 a1) L100 (set! a2 #f))"}, {"a2"}, {"a0 a1"}, {"a3"}
"L100:\n sltu a3, a0, a1\n bne a3, r0, L100\n or a3, s7, r0\n", {"(b! (<.ui a0 a1) L100 (set! a3 #f))"}, {"a3"}, {"a0 a1"}, {""}
"L100:\n sltu a3, a0, a1\n bne a3, r0, L100\n or a2, s7, r0\n", {"(b! (<.ui a0 a1) L100 (set! a2 #f))"}, {"a2"}, {"a0 a1"}, {"a3"}
"L100:\n slt a3, a0, a1\n beq a3, r0, L100\n or a3, s7, r0\n", {"(b! (>=.si a0 a1) L100 (set! a3 #f))"}, {"a3"}, {"a0 a1"}, {""}
"L100:\n slt a3, a0, a1\n beq a3, r0, L100\n or a2, s7, r0\n", {"(b! (>=.si a0 a1) L100 (set! a2 #f))"}, {"a2"}, {"a0 a1"}, {"a3"}
"L100:\n sltu a3, a0, a1\n beq a3, r0, L100\n or a3, s7, r0\n", {"(b! (>=.ui a0 a1) L100 (set! a3 #f))"}, {"a3"}, {"a0 a1"}, {""}
"L100:\n sltu a3, a0, a1\n beq a3, r0, L100\n or a2, s7, r0\n", {"(b! (>=.ui a0 a1) L100 (set! a2 #f))"}, {"a2"}, {"a0 a1"}, {"a3"}
" slt a3, a0, a1\n daddiu a2, s7, 8\n movz a2, s7, a3\n", {"(set! a2 (<.si a0 a1))"}, {"a2"}, {"a0 a1"}, {"a3"}
" slt a3, a0, r0\n daddiu a2, s7, 8\n movz a2, s7, a3\n", {"(set! a2 (<0.si a0))"}, {"a2"}, {"a0"}, {"a3"}
" sltu a3, a0, a1\n daddiu a2, s7, 8\n movz a2, s7, a3\n", {"(set! a2 (<.ui a0 a1))"}, {"a2"}, {"a0 a1"}, {"a3"}
" slt a3, a0, a1\n daddiu a2, s7, 8\n movn a2, s7, a3\n", {"(set! a2 (>=.si a0 a1))"}, {"a2"}, {"a0 a1"}, {"a3"}
" slt a3, a0, r0\n daddiu a2, s7, 8\n movn a2, s7, a3\n", {"(set! a2 (>=0.si a0))"}, {"a2"}, {"a0"}, {"a3"}
" sltu a3, a0, a1\n daddiu a2, s7, 8\n movn a2, s7, a3\n", {"(set! a2 (>=.ui a0 a1))"}, {"a2"}, {"a0 a1"}, {"a3"}
"L100:\n slti a3, a0, 12\n bne a3, r0, L100\n or a3, s7, r0\n", {"(b! (<.si a0 12) L100 (set! a3 #f))"}, {"a3"}, {"a0"}, {""}
"L100:\n slti a3, a0, 12\n bne a3, r0, L100\n or a2, s7, r0\n", {"(b! (<.si a0 12) L100 (set! a2 #f))"}, {"a2"}, {"a0"}, {"a3"}
"L100:\n sltiu a3, a0, 12\n bne a3, r0, L100\n or a3, s7, r0\n", {"(b! (<.ui a0 12) L100 (set! a3 #f))"}, {"a3"}, {"a0"}, {""}
"L100:\n sltiu a3, a0, 12\n bne a3, r0, L100\n or a2, s7, r0\n", {"(b! (<.ui a0 12) L100 (set! a2 #f))"}, {"a2"}, {"a0"}, {"a3"}
"L100:\n slti a3, a0, 12\n beq a3, r0, L100\n or a3, s7, r0\n", {"(b! (>=.si a0 12) L100 (set! a3 #f))"}, {"a3"}, {"a0"}, {""}
"L100:\n slti a3, a0, 12\n beq a3, r0, L100\n or a2, s7, r0\n", {"(b! (>=.si a0 12) L100 (set! a2 #f))"}, {"a2"}, {"a0"}, {"a3"}
"L100:\n sltiu a3, a0, 12\n beq a3, r0, L100\n or a3, s7, r0\n", {"(b! (>=.ui a0 12) L100 (set! a3 #f))"}, {"a3"}, {"a0"}, {""}
"L100:\n sltiu a3, a0, 12\n beq a3, r0, L100\n or a2, s7, r0\n", {"(b! (>=.ui a0 12) L100 (set! a2 #f))"}, {"a2"}, {"a0"}, {"a3"}
" slti a3, a0, 12\n daddiu a2, s7, 8\n movz a2, s7, a3\n", {"(set! a2 (<.si a0 12))"}, {"a2"}, {"a0"}, {"a3"}
" sltiu a3, a0, 12\n daddiu a2, s7, 8\n movz a2, s7, a3\n", {"(set! a2 (<.ui a0 12))"}, {"a2"}, {"a0"}, {"a3"}
" slti a3, a0, 12\n daddiu a2, s7, 8\n movn a2, s7, a3\n", {"(set! a2 (>=.si a0 12))"}, {"a2"}, {"a0"}, {"a3"}
" sltiu a3, a0, 12\n daddiu a2, s7, 8\n movn a2, s7, a3\n", {"(set! a2 (>=.ui a0 12))"}, {"a2"}, {"a0"}, {"a3"}
"L100:\n c.eq.s f1, f2\n bc1t L100\n sll r0, r0, 0\n", {"(b! (=.s f1 f2) L100 (nop!))"}, {""}, {"f1 f2"}, {""}
"L100:\n c.eq.s f1, f2\n bc1f L100\n sll r0, r0, 0\n", {"(b! (!=.s f1 f2) L100 (nop!))"}, {""}, {"f1 f2"}, {""}
"L100:\n c.lt.s f1, f2\n bc1t L100\n sll r0, r0, 0\n", {"(b! (<.s f1 f2) L100 (nop!))"}, {""}, {"f1 f2"}, {""}
"L100:\n c.lt.s f1, f2\n bc1f L100\n sll r0, r0, 0\n", {"(b! (>=.s f1 f2) L100 (nop!))"}, {""}, {"f1 f2"}, {""}
"L100:\n c.le.s f1, f2\n bc1t L100\n sll r0, r0, 0\n", {"(b! (<=.s f1 f2) L100 (nop!))"}, {""}, {"f1 f2"}, {""}
"L100:\n c.le.s f1, f2\n bc1f L100\n sll r0, r0, 0\n", {"(b! (>.s f1 f2) L100 (nop!))"}, {""}, {"f1 f2"}, {""}
"L100:\n dsll32 v1, s4, 30\n slt v1, v1, r0\n beq v1, r0, L100\n sll r0, r0, 0\n", {"(b! (not-pair? s4) L100 (nop!))"}, {""}, {"s4"}, {"v1"}
" slt a3, r0, a0\n daddiu a2, s7, 8\n movz a2, s7, a3\n", {"(set! a2 (>0.si a0))"}, {"a2"}, {"a0"}, {"a3"}
" daddu v1, r0, v0\n", {"(set! v1 (+ v0 0))"}, {"v1"}, {"v0"}, {""}
" sw r0, test(s7)\n", {"(s.w! test 0)"}, {""}, {""}, {""}
" sw r0, 2(a3)\n", {"(s.w! (+ a3 2) 0)"}, {""}, {"a3"}, {""}
" sw r0, 0(a3)\n", {"(s.w! a3 0)"}, {""}, {"a3"}, {""}
"L100:\n slt v1, s2, r0\n beq v1, r0, L100\n or v1, s7, r0\n", {"(b! (>=0.si s2) L100 (set! v1 #f))"}, {"v1"}, {"s2"}, {""}
"L100:\n slt v1, s2, r0\n beq v1, r0, L100\n or v0, s7, r0\n", {"(b! (>=0.si s2) L100 (set! v0 #f))"}, {"v0"}, {"s2"}, {"v1"}
" mtc1 f3, r0\n", {"(set! f3 0)"}, {"f3"}, {""}, {""}