All pastes #551764 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-06-08 22:52 UTC
rendered paste body
VAR i : INTEGER;

FUNCTION foo2(REF z : INTEGER) : INTEGER;
BEGIN
        z := z * 2;
        COUT << "z = " << z << NL;
        RETURN 1;
END foo2;

FUNCTION foo(REF c : INTEGER) : INTEGER;
BEGIN
        RETURN foo2(c);
END foo;

BEGIN
i := 5;
COUT << "i = " << foo(i) << NL;
RETURN 3;
END.    

Compile: success.
/*
 * Generated Fri Jun 08 15:48:09 PDT 2007
 */


.section        ".rodata"
NL:     .asciz "\n"
intFmt: .asciz "%d"
strFmt: .asciz "%s"
boolT:  .asciz "TRUE"
boolF:  .asciz "FALSE"
.section        ".data"
.align  4
id0:    .word 0         ! Setting up variable integer: id0 == i
.section        ".text"
.align  4
.global foo2.I
foo2.I:
set     foo2.I.SIZE, %g1
save    %sp, %g1, %sp           ! Setting up proc header
st      %i0, [%fp-4]            ! storing parameter away into memory ==================================================
.section        ".text"
.align  4
ld      [%fp-4], %l0            ! -------------------------------------------------- Dealing with the fact that this is a REF param
ld      [%l0], %l0
st      %l0, [%fp-8]
ld      [%fp-4], %l0            ! -------------------------------------------------- Dealing with the fact that this is a REF param
ld      [%l0], %l0
st      %l0, [%fp-12]
set     2, %l0          ! store 2 into register
st      %l0, [%fp-16]           ! store 2 into memory
ld      [%fp-12], %l0           ! setting first variable into register
ld      [%fp-16], %l1           ! setting second variable into register
mov     %l0, %o0                ! moving first multiplicand
mov     %l1, %o1                ! moving second multiplicand
call    .mul            ! mulling
nop
st      %o0, [%fp-20]           ! storing
sub     %fp, 4, %l0             ! doing final assignment of op into var that is PARAM
ld      [%l0], %l0              ! doing final assignment of op into var that is PARAM
ld      [%fp-20], %l1           ! loading what we want to save
st      %l1, [%l0]              ! storing it up
.section        ".data"
id1:    .asciz "z = "           ! setting string
.section        ".text"
set     strFmt, %o0
set     id1, %o1
call    printf
nop             ! printing string
ld      [%fp-4], %l0            ! -------------------------------------------------- Dealing with the fact that this is a REF param
ld      [%l0], %l0
st      %l0, [%fp-24]
ld      [%fp-24], %l0           ! setting first variable into register
set     intFmt, %o0
mov     %l0, %o1
call    printf
nop             ! printing integer
set     NL, %o0
call    printf
nop             ! printing new line
set     1, %l0          ! store 1 into register
st      %l0, [%fp-28]           ! store 1 into memory
ld      [%fp-28], %i0
ret
restore
foo2.I.SIZE = -(92 + 0 + 28) & -8               ! Finishing up proc
.section        ".text"
.align  4
.global foo.I
foo.I:
set     foo.I.SIZE, %g1
save    %sp, %g1, %sp           ! Setting up proc header
st      %i0, [%fp-4]            ! storing parameter away into memory ==================================================
.section        ".text"
.align  4
ld      [%fp-4], %l0            ! -------------------------------------------------- Dealing with the fact that this is a REF param
ld      [%l0], %l0
st      %l0, [%fp-8]
ld      [%fp - 4], %o0          ! ref -> ref
call    foo2.I          ! calling function
nop
st      %o0, [%fp-12]           ! storing
ld      [%fp-12], %i0
ret
restore
foo.I.SIZE = -(92 + 0 + 12) & -8                ! Finishing up proc
.section        ".text"
.align  4
.global main
main:
set     main.SIZE, %g1
save    %sp, %g1, %sp           ! Setting up MAIN header
set     5, %l0          ! store 5 into register
st      %l0, [%fp-4]            ! store 5 into memory
set     id0, %l0                ! doing final assignment of op into var that is VAR
ld      [%fp-4], %l1            ! loading what we want to save
st      %l1, [%l0]              ! storing it up
.section        ".data"
id2:    .asciz "i = "           ! setting string
.section        ".text"
set     strFmt, %o0
set     id2, %o1
call    printf
nop             ! printing string
set     id0, %o0                ! var -> ref
call    foo.I           ! calling function
nop
st      %o0, [%fp-8]            ! storing
ld      [%fp-8], %l0            ! setting first variable into register
set     intFmt, %o0
mov     %l0, %o1
call    printf
nop             ! printing integer
set     NL, %o0
call    printf
nop             ! printing new line
set     3, %l0          ! store 3 into register
st      %l0, [%fp-12]           ! store 3 into memory
ld      [%fp-12], %i0
ret
restore
main.SIZE = -(92 + 0 + 12) & -8         ! Setting up MAIN tail with local and temp offset