s: st %r2 -> [sp]-- ld [fp+16] -> %r0 / Step 1 mov #3 -> %r1 mul %r0, %r1 -> %r0 ld [fp+20] -> %r1 / Step 2 mov #5 -> %r2 mul %r1, %r2 -> %r1 add %r0, %r1 -> %r0 / Step 3 mov #4 -> %r1 / Step 4 mul %r0, %r1 -> %r0 ld [fp+12] -> %r1 add %r0, %r1 -> %r0 ld [r0] -> %r0 / Step 5 ld [fp+24] -> %r1 / Step 6 mov #3 -> %r2 sub %r1, %r2 -> %r1 mov #4 -> %r2 / Step 7 mul %r1, %r2 -> %r1 add %r0, %r1 -> %r0 ld [r0] -> %r0 / Step 8 ld ++[sp] -> %r2 ret /main() /{ / int i[5], *ip[5], j; / / for (j = 0; j < 5; j++) { / i[j] = 11+j; / ip[j] = i+j; / } / retval = s(ip, 3, 10, -55); /* This should return *ip[1] = 12 */ /} main: push #44 / i = fp-40, ip = fp-20, j = [fp] st %r2 -> [sp]-- st %g0 -> [fp] b ftest ftop: ld [fp] -> %r0 add %r0, %g1 -> %r0 st %r0 -> [fp] ftest: ld [fp] -> %r0 mov #5 -> %r1 cmp %r0, %r1 bge fend ld [fp] -> %r0 mov #11 -> %r1 add %r0, %r1 -> %r0 ld [fp] -> %r1 mov #4 -> %r2 mul %r1, %r2 -> %r1 mov #40 -> %r2 sub %r1, %r2 -> %r1 add %fp, %r1 -> %r1 st %r0 -> [r1] ld [fp] -> %r0 mov #4 -> %r1 mul %r0, %r1 -> %r0 mov #40 -> %r1 sub %r0, %r1 -> %r0 add %fp, %r0 -> %r0 ld [fp] -> %r1 mov #4 -> %r2 mul %r1, %r2 -> %r1 mov #20 -> %r2 sub %r1, %r2 -> %r1 add %fp, %r1 -> %r1 st %r0 -> [r1] b ftop fend: mov #-55 -> %r0 st %r0 -> [sp]-- mov #10 -> %r0 st %r0 -> [sp]-- mov #3 -> %r0 st %r0 -> [sp]-- mov #20 -> %r0 sub %fp, %r0 -> %r0 st %r0 -> [sp]-- jsr s pop #16 st %r0 -> retval ld ++[sp] -> %r2 ret