annotate lab4/test/callshare.p @ 0:bfdcc3820b32

Basis
author Mike Spivey <mike@cs.ox.ac.uk>
date Thu, 05 Oct 2017 08:04:15 +0100
parents
children
rev   line source
mike@0 1 (* Identical function calls are not merged by CSE *)
mike@0 2
mike@0 3 var x, y: integer;
mike@0 4
mike@0 5 proc f(n: integer): integer;
mike@0 6 begin x := x + n; return x end;
mike@0 7
mike@0 8 begin
mike@0 9 x := 2;
mike@0 10 y := f(3) + 1;
mike@0 11 y := f(3) + 1;
mike@0 12 print_num(x); newline()
mike@0 13 end.
mike@0 14
mike@0 15 (*<<
mike@0 16 8
mike@0 17 >>*)
mike@0 18
mike@0 19 (*[[
mike@0 20 @ picoPascal compiler output
mike@0 21 .include "fixup.s"
mike@0 22 .global pmain
mike@0 23
mike@0 24 @ proc f(n: integer): integer;
mike@0 25 .text
mike@0 26 _f:
mike@0 27 mov ip, sp
mike@0 28 stmfd sp!, {r0-r1}
mike@0 29 stmfd sp!, {r4-r10, fp, ip, lr}
mike@0 30 mov fp, sp
mike@0 31 @ begin x := x + n; return x end;
mike@0 32 set r4, _x
mike@0 33 ldr r0, [r4]
mike@0 34 ldr r1, [fp, #40]
mike@0 35 add r5, r0, r1
mike@0 36 str r5, [r4]
mike@0 37 mov r0, r5
mike@0 38 ldmfd fp, {r4-r10, fp, sp, pc}
mike@0 39 .ltorg
mike@0 40
mike@0 41 pmain:
mike@0 42 mov ip, sp
mike@0 43 stmfd sp!, {r4-r10, fp, ip, lr}
mike@0 44 mov fp, sp
mike@0 45 @ x := 2;
mike@0 46 mov r0, #2
mike@0 47 set r1, _x
mike@0 48 str r0, [r1]
mike@0 49 @ y := f(3) + 1;
mike@0 50 mov r0, #3
mike@0 51 bl _f
mike@0 52 add r0, r0, #1
mike@0 53 set r1, _y
mike@0 54 str r0, [r1]
mike@0 55 @ y := f(3) + 1;
mike@0 56 mov r0, #3
mike@0 57 bl _f
mike@0 58 add r0, r0, #1
mike@0 59 set r1, _y
mike@0 60 str r0, [r1]
mike@0 61 @ print_num(x); newline()
mike@0 62 set r0, _x
mike@0 63 ldr r0, [r0]
mike@0 64 bl print_num
mike@0 65 bl newline
mike@0 66 ldmfd fp, {r4-r10, fp, sp, pc}
mike@0 67 .ltorg
mike@0 68
mike@0 69 .comm _x, 4, 4
mike@0 70 .comm _y, 4, 4
mike@0 71 @ End
mike@0 72 ]]*)