scala/ex_jvm.scala
changeset 227 10d4d20c4e4b
parent 226 df455e0a9f98
child 228 e9ef4ada308b
equal deleted inserted replaced
226:df455e0a9f98 227:10d4d20c4e4b
    72 .end method
    72 .end method
    73 """
    73 """
    74 
    74 
    75 
    75 
    76 def compile(f: Rec, ns: List[Int]) : Unit = {
    76 def compile(f: Rec, ns: List[Int]) : Unit = {
    77   val class_name = "Prog"
    77   val class_name = "Prog"  // name of the class and program
    78   val (aprog, res, max) = compile_rec(f)
    78   val (aprog, res, max) = compile_rec(f)
    79 
    79 
    80   val init_code = init_regs(ns.padTo(max, 0))
    80   val init_code = init_regs(ns.padTo(max, 0))  // initialising registers with input data
    81   val main_code = compile_aprog(aprog.p) 
    81   val main_code = compile_aprog(aprog.p) 
    82   val fin_code = print_result(aprog.p.length, res, class_name)
    82   val end_code = print_result(aprog.p.length, res, class_name)
    83   val code = init_code.mkString + main_code.mkString + fin_code
    83   val code = beginning(class_name) + init_code + main_code + end_code + ending
    84   
    84   
    85   val assembly = beginning(class_name) ++ code ++ ending
    85   val fw = new java.io.FileWriter(class_name + ".j") // temporary file
       
    86   fw.write(code) 
       
    87   fw.close()
    86 
    88 
    87   val fw = new java.io.FileWriter(class_name + ".j") 
       
    88   fw.write(assembly) 
       
    89   fw.close()
       
    90   val _ = ("java -jar jvm/jasmin-2.4/jasmin.jar " + class_name + ".j").!!
    89   val _ = ("java -jar jvm/jasmin-2.4/jasmin.jar " + class_name + ".j").!!
    91   val start = System.nanoTime()
    90   val start = System.nanoTime()
    92   val result = ("java " + class_name + "/" + class_name).!!
    91   val result = ("java " + class_name + "/" + class_name).!!
    93   val end = System.nanoTime()
    92   val end = System.nanoTime()
    94   println("Result: " + result + "  Time: " + (end - start) / 1.0e9)
    93   println("Result: " + result + "  Time: " + (end - start) / 1.0e9)
    99 print("Power(3, 4)   "); compile(Power, List(3, 4))
    98 print("Power(3, 4)   "); compile(Power, List(3, 4))
   100 print("Strt:  ");  compile(Strt(2), List(2,3))
    99 print("Strt:  ");  compile(Strt(2), List(2,3))
   101 
   100 
   102 println("FACTORIAL")
   101 println("FACTORIAL")
   103 
   102 
   104 for (i <- 5 to 9) {
   103 for (i <- 7 to 14) {
   105   println("Input:  " + i)
   104   println("Input:  " + i)
   106   compile(Fact, List(i))
   105   compile(Fact, List(i))
   107 }
   106 }
   108 
   107 
   109 println("PRIME TEST")
   108 println("PRIME TEST")