-sml @SMLcmdname=$0 @SMLload=bin/snipe.heap.x86-darwin $*
+sml @SMLcmdname=$0 @SMLload=$(dirname $0)/snipe.heap.x86-darwin $*
val compare = Int.compare
end)
- fun pp_oper (REG r) = "%" ^ (regname r)
+ fun pp_oper (REG r) = (regname r)
| pp_oper (TEMP t) = (Temp.name t)
| pp_oper (STACKARG i) = "arg#"^Int.toString i
- fun pp_insn pr (MOVLIT (d, w)) = "\tmov"^pr^" "^(pp_oper d)^", #"^(Word.toString w)^"\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 (LDR (d, s)) = "\tldr"^pr^" "^(pp_oper d)^", ["^(pp_oper s)^"]\n"
| pp_insn pr (NOTS (d, s)) = "\tnots"^pr^" "^(pp_oper d)^", "^(pp_oper s)^"\n"
| pp_insn pr (PUSH (d, s)) = "\tpush"^pr^" "^(pp_oper d)^", "^(pp_oper s)^"\n"
| pp_insn pr (POP (d, s)) = "\tpop"^pr^" "^(pp_oper d)^", "^(pp_oper s)^"\n"
- | pp_insn pr (CALL (d, s, n)) = "\tcall"^pr^" "^(pp_oper d)^", "^(pp_oper s)^" # ("^(Int.toString n)^" args)\n"
+ | pp_insn pr (CALL (d, s, n)) = "\tcall"^pr^" "^(pp_oper d)^", "^(pp_oper s)^" @ ("^(Int.toString n)^" args)\n"
| pp_insn pr (SHR (d, s)) = "\tshr"^pr^" "^(pp_oper d)^", "^(pp_oper s)^"\n"
| pp_insn pr (SHL (d, s)) = "\tshl"^pr^" "^(pp_oper d)^", "^(pp_oper s)^"\n"
(* pretty prints the asm *)
fun print (DIRECTIVE(str)) = str ^ "\n"
- | print (COMMENT(str)) = "// " ^ str ^ "\n"
+ | print (COMMENT(str)) = "@ " ^ str ^ "\n"
| print (LABEL(l)) = Label.name l ^ ":\n"
| print (INSN (pred, insn)) = pp_insn (predname pred) insn
| print (LIVEIGN i) = print i
(* val _ = print ("s1 = " ^ Tm.sfx s1 ^ ", s2 = " ^ Tm.sfx s2 ^ ", ") *)
(* val _ = print ("rs = " ^ Tm.sfx rs ^ " from " ^ TU.Print.pp_exp e1 ^ " and " ^ TU.Print.pp_exp e2 ^ "\n") *)
in
- i1 @ i2 @ [X.INSN (X.AL, oper (d, t))]
+ [X.COMMENT "binophit" ] @ i1 @ i2 @ [X.INSN (X.AL, oper (d, t)), X.COMMENT "binophit done"]
end
(* cmphit : X.oper -> X.exp -> X.insn list
and condhit e1 e2 (pos, neg) =
let
- val t1 = X.TEMP (Temp.new ("var neq 1"))
- val t2 = X.TEMP (Temp.new ("var neq 2"))
+ val t1 = X.TEMP (Temp.new ("var cond 1"))
+ val t2 = X.TEMP (Temp.new ("var cond 2"))
val i1 = munch_exp t1 e1
val i2 = munch_exp t2 e2
in
(insns, neg, pos)
end
| munch_cond (T.BINOP(T.NEQ, e1, e2)) = condhit e1 e2 (X.NE, X.EQ)
- | munch_cond (T.BINOP(T.EQ, e1, e2)) = condhit e1 e2 (X.EQ, X.NE)
- | munch_cond (T.BINOP(T.LE, e1, e2)) = condhit e1 e2 (X.LE, X.GT)
- | munch_cond (T.BINOP(T.LT, e1, e2)) = condhit e1 e2 (X.LT, X.GE)
- | munch_cond (T.BINOP(T.GT, e1, e2)) = condhit e1 e2 (X.GT, X.LE)
- | munch_cond (T.BINOP(T.GE, e1, e2)) = condhit e1 e2 (X.GE, X.LT)
+ | munch_cond (T.BINOP(T.EQ, e1, e2)) = condhit e1 e2 (X.EQ, X.NE)
+ | munch_cond (T.BINOP(T.LE, e1, e2)) = condhit e1 e2 (X.LE, X.GT)
+ | munch_cond (T.BINOP(T.LT, e1, e2)) = condhit e1 e2 (X.LT, X.GE)
+ | munch_cond (T.BINOP(T.GT, e1, e2)) = condhit e1 e2 (X.GT, X.LE)
+ | munch_cond (T.BINOP(T.GE, e1, e2)) = condhit e1 e2 (X.GE, X.LT)
| munch_cond (T.BINOP(T.BE, e1, e2)) = raise ErrorMsg.InternalError "memory safety not supported"
(* munch_lval : T.exp -> X.operand
* Takes an expression that has been typechecked as being a valid lvalue and a location of a datum, and then returns an instruction list to store.
*)
- and munch_lval (T.TEMP t) oper = [X.INSN (X.AL, X.MOV (oper, X.TEMP t))]
+ and munch_lval (T.TEMP t) oper = [X.INSN (X.AL, X.MOV (X.TEMP t, oper))]
| munch_lval (T.MEMORY m) oper =
let
val t = X.TEMP (Tm.new "lv addr")
(* val gendef : ident * X.insn -> ident * pred list
* generates the def/use/succ predicates for a single insn
*)
- fun gendef (n, X.DIRECTIVE(_)) = (nil)
- | gendef (n, X.COMMENT(_)) = (nil)
+ fun gendef (n, X.DIRECTIVE(_)) = ([SUCC (n+1)])
+ | gendef (n, X.COMMENT(_)) = ([SUCC (n+1)])
| gendef (n, X.LIVEIGN (_)) = ([SUCC (n+1)])
| gendef (n, X.LABEL l) = ([SUCC (n+1)])
| gendef (n, X.INSN(X.NV, _)) = ([SUCC (n+1)])
(fn () => List.app (TextIO.print o
(fn (t, i) =>
(Temp.name t) ^ " => " ^ (
- if (i <= Blarg.regtonum Blarg.R3)
+ if (i <= 15)
then (Blarg.pp_oper (Blarg.REG (Blarg.numtoreg i)))
else
- "spill[" ^ Int.toString (i - Blarg.regtonum Blarg.R3) ^ "]")
+ "spill[" ^ Int.toString (i - Blarg.regtonum Blarg.PC) ^ "]")
^ "--"^ Int.toString i ^ "\n"))
colors) ()