]> Joshua Wise's Git repositories - snipe.git/blobdiff - codegen/blarg.sml
Add string pasting support to the gramamr.
[snipe.git] / codegen / blarg.sml
index c350b9d4886e5911d06b5498b28afb59dc73f78c..4df4d4851819e5ca998386242556bf209b2705f0 100644 (file)
@@ -19,6 +19,7 @@ sig
     MOVLIT of oper * word |
     MOVSYM of oper * Symbol.symbol |
     MOVLBL of oper * Label.label |
     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 |
     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 |
     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 |
     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 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
 
   (* 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"
   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"
     | 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"
This page took 0.025918 seconds and 4 git commands to generate.