CS 132 Fall 2005, Final Exam, Proposed Solutions ------------------------------------------------ Q.1. P ---> fields: next:Q methods: expand: () -> void locals: temp: Q v: P Q ---> fields: pred: P succ: P methods: insert: (x:P, y:P) -> void Q.2. --->[next] // I will show code that relies on that there are no extends clauses // and that does not build virtual tables. // I am writing "TEMP n" as "TEMP_n", for readability. // this -> TEMP_0 // temp -> TEMP_1 // v -> TEMP_2 HLOAD TEMP_1 TEMP_0 0 // temp = next; HALLOCATE TEMP_2 4 // v = new P(); HSTORE TEMP_2 0 0 HALLOCATE TEMP_10 8 // next = new Q(); HSTORE TEMP_10 0 0 HSTORE TEMP_10 4 0 HSTORE TEMP_0 0 TEMP_10 HSTORE TEMP_2 0 TEMP_1 // v.next = temp; HSTORE TEMP_1 0 TEMP_2 // temp.pred = v; move TEMP_20 CALL Q_insert(TEMP_0 TEMP_2) // next.insert(this, v) Q.3. this (incoming parameter) ------ old fp ra ------ temp v ------ compiler-generated temporaries ------ callee-save registers ------ this (outgoing parameters) v Q.4. | a | v i = 10 | a,i | v L1: if i < 80 then goto L2 | | ^ a,i | | | v | | a = a + 1 | | | | | a,i | | | v | | b = a | | | | | b,i | a,i | | a,i v | | a = i | | | | | a,b | | | v | | i = b | | | | | a,i | | | v | | i = i + 2 | | | | | a,i | | | v | | goto L2 | | | | | a,i | a = a + i | | v v | L2: if i < 9 then goto L1 | i | v return i Q.5. 1 b | | 1 |4 1 f ---- a ---- e |\ /| | \ / | | \/ | | /\ | | / \ | |/ \| d ---- c 2 3 r4 = 1 r1 = 10 r3 = 8 + r1 r2 = r4 + r3 r1 = r4 + r2 r1 = r3 + r1 r2 = r4 + r1 r3 = r2 + r1 r1 = r4 + r3 return r3 + r1 Q.6. available: r1,r2,r3 a b c d e f |1 | |2 | |2->spill | | |3 | | | |2 | | | |2 | | | | | | | | | r1 = 1 r2 = 10 c = 8 + r2 r3 = r1 + c r2 = r1 + r3 r2 = c + r2 r3 = r1 + r2 c = r3 + r2 r2 = r1 + c return c + r2 available: s1,s2 a b c d e f |1->spill | |2 | |2->spill | | |2 | | | |1 | | | |1 | | | | | | | | | a = 1 s2 = 10 c = 8 + s2 s2 = a + c s1 = a + s2 s1 = c + s1 s2 = a + s1 c = s2 + s1 s1 = a + c return c + s1