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") |