FeckfulnessAnalysis.optimizer,
ConstantFold.optimizer,
LabelCoalescing.optimizer,
- Peephole.optimizer*)]
+ Peephole.optimizer*)] : Optimizer.optimization list
val uniqopts =
foldr
val _ = Flag.guard Flags.verbose say ("Processing function: " ^ name)
- val _ = Flag.guard Flags.verbose say " Generating proto-x86_64 code..."
+ val _ = Flag.guard Flags.verbose say " Generating proto-blargCPU code..."
val assem = Codegen.codegen ir
val _ = Flag.guard Flags.assem
- (fn () => List.app (TextIO.print o (x86.print)) assem) ()
+ (fn () => List.app (TextIO.print o (Blarg.print)) assem) ()
val _ = Flag.guard Flags.verbose say " Optimizing pre-liveness..."
val assem = Optimizer.optimize_preliveness (!enabledopts) assem
(fn (asm, liv) =>
TextIO.print (
let
- val xpp = x86.print asm
+ val xpp = Blarg.print asm
val xpp = String.extract (xpp, 0, SOME (size xpp - 1))
val spaces = implode (List.tabulate (40 - size xpp, fn _ => #" ")) handle size => ""
val lpp = Liveness.prettyprint liv
(fn () => List.app (TextIO.print o
(fn (t, i) =>
(Temp.name t) ^ " => " ^ (
- if (i <= x86.regtonum x86.R13D)
- then (x86.pp_oper (x86.REG (x86.numtoreg i), Temp.Long))
+ if (i <= 10)
+ then (Blarg.pp_oper (Blarg.REG (Blarg.numtoreg i)))
else
- "spill[" ^ Int.toString (i - x86.regtonum x86.R13D) ^ "]")
+ "spill[" ^ Int.toString (i - 11) ^ "]")
^ "--"^ Int.toString i ^ "\n"))
colors) ()
- val _ = Flag.guard Flags.verbose say " Solidifying x86_64 code..."
+ val _ = Flag.guard Flags.verbose say " Solidifying blargCPU code..."
val x86 = Solidify.solidify colors assem
val _ = Flag.guard Flags.verbose say " Optimizing final assembly..."
val x86p = Optimizer.optimize_final (!enabledopts) x86
val _ = Flag.guard Flags.verbose say " Stringifying..."
- val x86d = [x86.DIRECTIVE(".globl " ^ name),
- x86.DIRECTIVE(name ^ ":")]
+ val x86d = [Blarg.DIRECTIVE(".globl " ^ name),
+ Blarg.DIRECTIVE(name ^ ":")]
@ x86p
val code = Stringify.stringify realname x86d
in
val _ = Flag.guard Flags.verbose say "Optimizing whole-program IR..."
val ir = Optimizer.optimize_ir (!enabledopts) ir
val _ = Flag.guard Flags.ir (fn () => say (TreeUtils.Print.pp_program ir)) ()
-
- val output = foldr (fn (func, code) => (processir ("calloc" (* lololololol *) :: (Symbol.elems externs)) func) ^ code)
- (".file\t\"" ^ source ^ "\"\n.ident\t\"15-411 ASS compiler by czl@ and jwise@\"\n" ^
- ".ident \"Optimizations enabled: " ^ String.concat (map (fn x => (#shortname x) ^ " ") (!enabledopts)) ^ "\"\n") ir
+
+ val code = map (fn func => processir ("calloc" (* lololololol *) :: (Symbol.elems externs)) func) ir
+ val strings = map (fn (sn, s) => String.concat (
+ [Stringref.name sn, ": .word "] @
+ (map (fn c => (Int.toString (ord c)) ^ ", ") (String.explode s)) @
+ ["0\n"]
+ ) ) (Stringref.all ())
+
+ val output =
+ String.concat (
+ ".file\t\"" :: source :: "\"\n" ::
+ ".ident\t\"15-411 ASS compiler by czl@ and jwise@\"\n" ::
+ ".ident \"Optimizations enabled: " :: (map (fn x => (#shortname x) ^ " ") (!enabledopts)) @ [ "\"\n" ] @
+ code @
+ [ ".section .rodata\n" ] @
+ strings )
val afname = stem source ^ ".s"
val _ = Flag.guard Flags.verbose say ("Writing assembly to " ^ afname ^ " ...")