home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.ee.pdx.edu
/
2014.02.ftp.ee.pdx.edu.tar
/
ftp.ee.pdx.edu
/
pub
/
users
/
Harry
/
compilers
/
p11
/
tst
/
param1.out.bak
< prev
next >
Wrap
Text File
|
2006-03-05
|
9KB
|
461 lines
!
! PCAT Compiler Version 1.0
!
.global .div
.global .rem
!
! Standard data fields
!
.data
.align 8
temp: .double 0
.text
strNL: .asciz "\n"
strInt: .asciz "%d"
strFlt: .asciz "%g"
strTrue: .asciz "TRUE"
strFalse: .asciz "FALSE"
message1: .asciz "Execution Error: Allocation failed!\n"
message2: .asciz "Execution Error: Pointer is NIL!\n"
message3: .asciz "Execution Error: Read statement failed!\n"
message4: .asciz "Execution Error: Array index is out of bounds!\n"
message5: .asciz "Execution Error: Count is not positive in array constructor!\n"
.align 8
!
! runtimeError1-5
!
! Branch to one of these labels to print an error message and abort.
!
runtimeError1:
set message1,%o0
call printf
nop
call exit
mov 1,%o0
runtimeError2:
set message2,%o0
call printf
nop
call exit
mov 1,%o0
runtimeError3:
set message3,%o0
call printf
nop
call exit
mov 1,%o0
runtimeError4:
set message4,%o0
call printf
nop
call exit
mov 1,%o0
runtimeError5:
set message5,%o0
call printf
nop
call exit
mov 1,%o0
! writeFlt
!
! This routine is passed a single precision floating number in %f0.
! It prints it by calling printf. It uses registers %f0, %f1.
!
writeFlt:
save %sp,-128,%sp
fstod %f0,%f0
set temp,%l0
std %f0,[%l0]
ldd [%l0],%o0
mov %o1,%o2
mov %o0,%o1
set strFlt,%o0
call printf
nop
ret
restore
! writeBool
!
! This routine is passed an integer in %i0/o0. It prints "FALSE" if this
! integer is 0 and "TRUE" otherwise.
!
writeBool:
save %sp,-128,%sp
cmp %i0,%g0
be printFalse
nop
set strTrue,%o0
ba printEnd
nop
printFalse:
set strFalse,%o0
printEnd:
call printf
nop
ret
restore
!
! Additional Fields
!
.data
display0: .word 0
display1: .word 0
.text
float10: .single 0r10.1
float9: .single 0r9.9
float8: .single 0r8.8
float7: .single 0r7.7
float6: .single 0r6.6
float5: .single 0r5.5
float4: .single 0r4.4
float3: .single 0r3.3
float2: .single 0r2.2
float1: .single 0r1.1
str2: .asciz "Should print 1.1, 2.2, 3.3, ..., 10.1:"
str1: .asciz "Should print 1, 2, 3, ..., 10:"
.align 8
! MAIN...
! mainEntry
.global main
main: save %sp,-112,%sp
set display0,%o0
st %fp,[%o0]
! WRITE STMT...
! writeString str1
sethi %hi(str1),%o0
call printf
or %o0,%lo(str1),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! CALL STMT...
! param 1,1
set 1,%o0
st %o0,[%sp+68]
! param 2,2
set 2,%o0
st %o0,[%sp+72]
! param 3,3
set 3,%o0
st %o0,[%sp+76]
! param 4,4
set 4,%o0
st %o0,[%sp+80]
! param 5,5
set 5,%o0
st %o0,[%sp+84]
! param 6,6
set 6,%o0
st %o0,[%sp+88]
! param 7,7
set 7,%o0
st %o0,[%sp+92]
! param 8,8
set 8,%o0
st %o0,[%sp+96]
! param 9,9
set 9,%o0
st %o0,[%sp+100]
! param 10,10
set 10,%o0
st %o0,[%sp+104]
! call p1_foo1
call p1_foo1
nop
! WRITE STMT...
! writeString str2
sethi %hi(str2),%o0
call printf
or %o0,%lo(str2),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! CALL STMT...
! param 1,1.1
set float1,%o0
ld [%o0],%o0
st %o0,[%sp+68]
! param 2,2.2
set float2,%o0
ld [%o0],%o0
st %o0,[%sp+72]
! param 3,3.3
set float3,%o0
ld [%o0],%o0
st %o0,[%sp+76]
! param 4,4.4
set float4,%o0
ld [%o0],%o0
st %o0,[%sp+80]
! param 5,5.5
set float5,%o0
ld [%o0],%o0
st %o0,[%sp+84]
! param 6,6.6
set float6,%o0
ld [%o0],%o0
st %o0,[%sp+88]
! param 7,7.7
set float7,%o0
ld [%o0],%o0
st %o0,[%sp+92]
! param 8,8.8
set float8,%o0
ld [%o0],%o0
st %o0,[%sp+96]
! param 9,9.9
set float9,%o0
ld [%o0],%o0
st %o0,[%sp+100]
! param 10,10.1
set float10,%o0
ld [%o0],%o0
st %o0,[%sp+104]
! call p2_foo2
call p2_foo2
nop
! MAIN EXIT...
! mainExit
ret
restore
! PROCEDURE...
! procEntry p1_foo1,lexLev=1,frameSize=96
p1_foo1: save %sp,-96,%sp
set display1,%o0
ld [%o0],%o1
st %o1,[%fp+64]
st %fp,[%o0]
! formal 1,a1
! formal 2,a2
! formal 3,a3
! formal 4,a4
! formal 5,a5
! formal 6,a6
! formal 7,a7
! formal 8,a8
! formal 9,a9
! formal 10,a10
! WRITE STMT...
! writeInt a1
ld [%fp+68],%o1
sethi %hi(strInt),%o0
call printf
or %o0,%lo(strInt),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeInt a2
ld [%fp+72],%o1
sethi %hi(strInt),%o0
call printf
or %o0,%lo(strInt),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeInt a3
ld [%fp+76],%o1
sethi %hi(strInt),%o0
call printf
or %o0,%lo(strInt),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeInt a4
ld [%fp+80],%o1
sethi %hi(strInt),%o0
call printf
or %o0,%lo(strInt),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeInt a5
ld [%fp+84],%o1
sethi %hi(strInt),%o0
call printf
or %o0,%lo(strInt),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeInt a6
ld [%fp+88],%o1
sethi %hi(strInt),%o0
call printf
or %o0,%lo(strInt),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeInt a7
ld [%fp+92],%o1
sethi %hi(strInt),%o0
call printf
or %o0,%lo(strInt),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeInt a8
ld [%fp+96],%o1
sethi %hi(strInt),%o0
call printf
or %o0,%lo(strInt),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeInt a9
ld [%fp+100],%o1
sethi %hi(strInt),%o0
call printf
or %o0,%lo(strInt),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeInt a10
ld [%fp+104],%o1
sethi %hi(strInt),%o0
call printf
or %o0,%lo(strInt),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! RETURN...
! returnVoid
set display1,%o0
ld [%fp+64],%o1
st %o1,[%o0]
ret
restore
! PROCEDURE...
! procEntry p2_foo2,lexLev=1,frameSize=96
p2_foo2: save %sp,-96,%sp
set display1,%o0
ld [%o0],%o1
st %o1,[%fp+64]
st %fp,[%o0]
! formal 1,a1
! formal 2,a2
! formal 3,a3
! formal 4,a4
! formal 5,a5
! formal 6,a6
! formal 7,a7
! formal 8,a8
! formal 9,a9
! formal 10,a10
! WRITE STMT...
! writeFloat a1
ld [%fp+68],%f0
call writeFlt
nop
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeFloat a2
ld [%fp+72],%f0
call writeFlt
nop
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeFloat a3
ld [%fp+76],%f0
call writeFlt
nop
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeFloat a4
ld [%fp+80],%f0
call writeFlt
nop
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeFloat a5
ld [%fp+84],%f0
call writeFlt
nop
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeFloat a6
ld [%fp+88],%f0
call writeFlt
nop
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeFloat a7
ld [%fp+92],%f0
call writeFlt
nop
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeFloat a8
ld [%fp+96],%f0
call writeFlt
nop
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeFloat a9
ld [%fp+100],%f0
call writeFlt
nop
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! WRITE STMT...
! writeFloat a10
ld [%fp+104],%f0
call writeFlt
nop
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! RETURN...
! returnVoid
set display1,%o0
ld [%fp+64],%o1
st %o1,[%o0]
ret
restore