X-Git-Url: http://git.joshuawise.com/snipe.git/blobdiff_plain/4f528370c7d70f4fd271c7ce5eee517284852940..a644da892dbd55a7be1aed029dafebe28d26d27e:/codegen/blarg.sml?ds=sidebyside diff --git a/codegen/blarg.sml b/codegen/blarg.sml index c350b9d..4df4d48 100644 --- a/codegen/blarg.sml +++ b/codegen/blarg.sml @@ -19,6 +19,7 @@ sig MOVLIT of oper * word | MOVSYM of oper * Symbol.symbol | MOVLBL of oper * Label.label | + MOVSTR of oper * Stringref.stringref | LDR of oper * oper | STO of oper * oper | MOV of oper * oper | @@ -76,6 +77,7 @@ struct MOVLIT of oper * word | MOVSYM of oper * Symbol.symbol | MOVLBL of oper * Label.label | + MOVSTR of oper * Stringref.stringref | LDR of oper * oper | STO of oper * oper | MOV of oper * oper | @@ -152,8 +154,9 @@ struct | regtonum R10 = 10 | regtonum R11 = 11 | regtonum R12 = 12 - | regtonum SP = 4 - | regtonum _ = raise ErrorMsg.InternalError ("regtonum: Invalid register") + | regtonum FR = 13 + | regtonum SP = 14 + | regtonum PC = 15 (* gives reg associated with number (color) *) fun numtoreg 0 = R0 @@ -204,6 +207,7 @@ struct fun pp_insn pr (MOVLIT (d, w)) = "\tmov"^pr^" "^(pp_oper d)^", #0x"^(Word.toString w)^"\n" | pp_insn pr (MOVSYM (d, s)) = "\tmov"^pr^" "^(pp_oper d)^", #"^(Symbol.name s)^"\n" | pp_insn pr (MOVLBL (d, l)) = "\tmov"^pr^" "^(pp_oper d)^", #"^(Label.name l)^"\n" + | pp_insn pr (MOVSTR (d, s)) = "\tmov"^pr^" "^(pp_oper d)^", #"^(Stringref.name s)^"\n" | pp_insn pr (LDR (d, s)) = "\tldr"^pr^" "^(pp_oper d)^", ["^(pp_oper s)^"]\n" | pp_insn pr (STO (d, s)) = "\tsto"^pr^" ["^(pp_oper d)^"], "^(pp_oper s)^"\n" | pp_insn pr (MOV (d, s)) = "\tmov"^pr^" "^(pp_oper d)^", "^(pp_oper s)^"\n"