@@ -18,15 +18,13 @@ public class CodeGenerator
1818 private String output ;
1919 private List <Quadruple > IRList ;
2020 private Hashtable <Quadruple , List <Label >> labels ;
21- private List <Variable > varList ;
2221 private RegisterAllocator allocator ;
2322
24- public CodeGenerator (List <Quadruple > list , Hashtable <Quadruple , List <Label >> label , List < Variable > vars , String fileName )
23+ public CodeGenerator (List <Quadruple > list , Hashtable <Quadruple , List <Label >> label , String fileName )
2524 {
2625 IRList = list ;
2726 output = fileName ;
2827 labels = label ;
29- varList = vars ;
3028 allocator = new RegisterAllocator ();
3129 }
3230
@@ -39,10 +37,6 @@ public void generateMIPS()
3937 FileWriter fw = new FileWriter (output );
4038 BufferedWriter bw = new BufferedWriter (fw );
4139
42- //Allocated Variables
43- bw .write (".data\n " );
44- generateDataSeg (varList , bw );
45-
4640 bw .write (".text\n " , 0 , 6 );
4741 bw .write ("main:\n " , 0 , 6 );
4842
@@ -60,22 +54,6 @@ public void generateMIPS()
6054 {
6155 if (l .printBefore == true )
6256 {
63- //Print system exit at the end of main
64- if (l .toString ().equals ("L1:" ))
65- {
66- String temp = "jal _system_exit\n " ;
67- bw .write (temp , 0 , temp .length ());
68- printedExit = true ;
69- }
70- else //Print jr return jump before the label
71- {
72- if (!l .toString ().equals ("L0:" ))
73- {
74- String temp = "jr $ra\n " ;
75- bw .write (temp , 0 , temp .length ());
76- }
77- }
78-
7957 //Print label
8058 String temp = l .toString () + "\n " ;
8159 bw .write (temp , 0 , temp .length ());
@@ -111,22 +89,6 @@ else if(q instanceof UnaryAssignmentIR)
11189 {
11290 if (l .printBefore == false )
11391 {
114- //Print system exit at the end of main
115- if (l .toString ().equals ("L1:" ))
116- {
117- String temp = "jal _system_exit\n " ;
118- bw .write (temp , 0 , temp .length ());
119- printedExit = true ;
120- }
121- else //Print jr return jump before the label
122- {
123- if (!l .toString ().equals ("L0:" ))
124- {
125- String temp = "jr $ra\n " ;
126- bw .write (temp , 0 , temp .length ());
127- }
128- }
129-
13092 //Print label
13193 String temp = l .toString () + "\n " ;
13294 bw .write (temp , 0 , temp .length ());
@@ -135,18 +97,6 @@ else if(q instanceof UnaryAssignmentIR)
13597 }
13698 }
13799
138- //Print the closing exit/return
139- if (printedExit == true )
140- {
141- String temp = "jr $ra\n " ;
142- bw .write (temp , 0 , temp .length ());
143- }
144- else
145- {
146- String temp = "jal _system_exit\n " ;
147- bw .write (temp , 0 , temp .length ());
148- }
149-
150100 //Close output file resources
151101 if (bw != null )
152102 bw .close ();
@@ -157,36 +107,6 @@ else if(q instanceof UnaryAssignmentIR)
157107 }
158108 }
159109
160- private void generateDataSeg (List <Variable > varList , BufferedWriter bw )
161- {
162- for (int i = 0 ; i < varList .size (); i ++)
163- {
164- try
165- {
166- String name = varList .get (i ).getName ();
167- String type = varList .get (i ).getType ();
168- String value = "" ;
169-
170- if (type .equals ("int" ) || type .equals ("boolean" ))
171- {
172- type = ".word" ;
173- value = "0" ; //Default value of 0d or false
174- }
175- else //Don't handle objects or int[] yet
176- {
177- return ;
178- }
179-
180- String data = name + ": " + type + " " + value + "\n " ;
181- bw .write (data , 0 , data .length ());
182- }
183- catch (IOException e )
184- {
185- e .printStackTrace ();
186- }
187- }
188- }
189-
190110 private void handleCopy (Quadruple instruction , BufferedWriter bw )
191111 {
192112 try
@@ -331,6 +251,9 @@ else if(arg1.getType().equals("temporary"))
331251 }
332252
333253 bw .write (temp , 0 , temp .length ());
254+
255+ temp = "jr $ra\n " ;
256+ bw .write (temp , 0 , temp .length ());
334257 }
335258 catch (IOException e )
336259 {
@@ -544,6 +467,15 @@ private void functionCall(List<Quadruple>IRList, int index, BufferedWriter bw)
544467 {
545468 CallIR instruction = (CallIR )IRList .get (index );
546469 int paramCount = Integer .parseInt ((String )instruction .getArg2 ());
470+ String function = (String )instruction .getArg1 ();
471+
472+ //Handle System.exit (no need to worry about params nor registers)
473+ if (function .equals ("_system_exit" ))
474+ {
475+ String temp = "jal " + function + "\n " ;
476+ bw .write (temp , 0 , temp .length ());
477+ return ;
478+ }
547479
548480 //Store $ra on stack
549481 String temp = "addi $sp, $sp, -68\n " ; //Make enough space on stack to save all reg
@@ -606,8 +538,6 @@ else if(argType.equals("temporary"))
606538 }
607539
608540 //Jump to the function
609- String function = (String )instruction .getArg1 ();
610-
611541 temp = "jal " + function + "\n " ;
612542 bw .write (temp , 0 , temp .length ());
613543
0 commit comments