]> Joshua Wise's Git repositories - snipe.git/blobdiff - top/top.sml
Add string pasting support to the gramamr.
[snipe.git] / top / top.sml
index 4b58d00cb08d8fbb9cab41e7ba2c6e0ec842f355..c03263fcf40bb5e33c8553fcc7e60523c85f8091 100644 (file)
@@ -29,12 +29,12 @@ struct
   exception EXIT
   
   val alloptimizations =
-    [ConstantFold.optimizer,
+    [(*ConstantFold.optimizer,
      StupidFunctionElim.optimizer,
      FeckfulnessAnalysis.optimizer,
      ConstantFold.optimizer,
      LabelCoalescing.optimizer,
-     Peephole.optimizer]
+     Peephole.optimizer*)] : Optimizer.optimization list
   
   val uniqopts =
     foldr
@@ -104,10 +104,10 @@ struct
       
         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
@@ -119,7 +119,7 @@ struct
                     (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
@@ -142,22 +142,22 @@ struct
                   (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
@@ -213,10 +213,22 @@ struct
         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 ^ " ...")
This page took 0.024195 seconds and 4 git commands to generate.