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
/
quicksort.out.bak
< prev
next >
Wrap
Text File
|
2006-03-05
|
27KB
|
1,507 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
str3: .asciz "The sorted array is:"
str2: .asciz "Input values must be between -9998 and +9998; try again..."
str1: .asciz "Enter 9 integers (between -9998 and +9998):"
.align 8
! MAIN...
! mainEntry
.global main
main: save %sp,-128,%sp
set display0,%o0
st %fp,[%o0]
! VAR INITIALIZATION...
! a := 0
set 0,%o0
st %o0,[%fp+-4]
! ASSIGNMENT STMT...
! t1 := 0
set 0,%o0
st %o0,[%fp+-8]
! if 11 <= 0 goto runtimeError5 (integer)
set 11,%o0
set 0,%o1
cmp %o0,%o1
ble runtimeError5
nop
! t1 := t1 + 11 (integer)
ld [%fp+-8],%o0
set 11,%o1
add %o0,%o1,%o1
st %o1,[%fp+-8]
! t2 := t1 * 4 (integer)
ld [%fp+-8],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-12]
! t2 := t2 + 4 (integer)
ld [%fp+-12],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-12]
! t2 := alloc (t2)
set 1,%o0
ld [%fp+-12],%o1
call calloc
nop
st %o0,[%fp+-12]
! if t2 = 0 goto runtimeError1 (integer)
ld [%fp+-12],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError1
nop
! t3 := t2
ld [%fp+-12],%o0
st %o0,[%fp+-16]
! *t2 := t1
ld [%fp+-8],%o0
ld [%fp+-12],%o1
st %o0,[%o1]
! t4 := 11
set 11,%o0
st %o0,[%fp+-20]
! Label_1:
Label_1:
! t2 := t2 + 4 (integer)
ld [%fp+-12],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-12]
! *t2 := 0
set 0,%o0
ld [%fp+-12],%o1
st %o0,[%o1]
! t4 := t4 - 1 (integer)
ld [%fp+-20],%o0
set 1,%o1
sub %o0,%o1,%o1
st %o1,[%fp+-20]
! if t4 > 0 goto Label_1 (integer)
ld [%fp+-20],%o0
set 0,%o1
cmp %o0,%o1
bg Label_1
nop
! a := t3
ld [%fp+-16],%o0
st %o0,[%fp+-4]
! ASSIGNMENT STMT...
! if a = 0 goto runtimeError2 (integer)
ld [%fp+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if 0 < 0 goto runtimeError4 (integer)
set 0,%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t5 := *a
ld [%fp+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-24]
! if 0 >= t5 goto runtimeError4 (integer)
set 0,%o0
ld [%fp+-24],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t5 := 0 * 4 (integer)
set 0,%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-24]
! t5 := t5 + 4 (integer)
ld [%fp+-24],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-24]
! t5 := a + t5 (integer)
ld [%fp+-4],%o0
ld [%fp+-24],%o1
add %o0,%o1,%o1
st %o1,[%fp+-24]
! t6 := - 9999 (integer)
set 9999,%o0
neg %o0,%o1
st %o1,[%fp+-28]
! *t5 := t6
ld [%fp+-28],%o0
ld [%fp+-24],%o1
st %o0,[%o1]
! ASSIGNMENT STMT...
! if a = 0 goto runtimeError2 (integer)
ld [%fp+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if 10 < 0 goto runtimeError4 (integer)
set 10,%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t7 := *a
ld [%fp+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-32]
! if 10 >= t7 goto runtimeError4 (integer)
set 10,%o0
ld [%fp+-32],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t7 := 10 * 4 (integer)
set 10,%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-32]
! t7 := t7 + 4 (integer)
ld [%fp+-32],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-32]
! t7 := a + t7 (integer)
ld [%fp+-4],%o0
ld [%fp+-32],%o1
add %o0,%o1,%o1
st %o1,[%fp+-32]
! *t7 := 9999
set 9999,%o0
ld [%fp+-32],%o1
st %o0,[%o1]
! CALL STMT...
! call p1_readArray
call p1_readArray
nop
! CALL STMT...
! param 1,1
set 1,%o0
st %o0,[%sp+68]
! param 2,9
set 9,%o0
st %o0,[%sp+72]
! call p4_quicksort
call p4_quicksort
nop
! CALL STMT...
! call p2_printArray
call p2_printArray
nop
! MAIN EXIT...
! mainExit
ret
restore
! PROCEDURE...
! procEntry p1_readArray,lexLev=1,frameSize=136
p1_readArray: save %sp,-136,%sp
set display1,%o0
ld [%o0],%o1
st %o1,[%fp+64]
st %fp,[%o0]
! VAR INITIALIZATION...
! i := 0
set 0,%o0
st %o0,[%fp+-4]
! 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
! FOR...
! t11 := &i
add %fp,-4,%o0
st %o0,[%fp+-20]
! t8 := 1
set 1,%o0
st %o0,[%fp+-8]
! t9 := 9
set 9,%o0
st %o0,[%fp+-12]
! t10 := 1
set 1,%o0
st %o0,[%fp+-16]
! *t11 := t8
ld [%fp+-8],%o0
ld [%fp+-20],%o1
st %o0,[%o1]
! Label_2:
Label_2:
! if t8 > t9 goto Label_3 (integer)
ld [%fp+-8],%o0
ld [%fp+-12],%o1
cmp %o0,%o1
bg Label_3
nop
! LOOP...
! Label_4:
Label_4:
! READ STMT...
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if i < 0 goto runtimeError4 (integer)
ld [%fp+-4],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t12 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-24]
! if i >= t12 goto runtimeError4 (integer)
ld [%fp+-4],%o0
ld [%fp+-24],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t12 := i * 4 (integer)
ld [%fp+-4],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-24]
! t12 := t12 + 4 (integer)
ld [%fp+-24],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-24]
! t12 := a + t12 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-24],%o1
add %o0,%o1,%o1
st %o1,[%fp+-24]
! readInt t12
ld [%fp+-24],%o1
sethi %hi(strInt),%o0
call scanf
or %o0,%lo(strInt),%o0
cmp %o0,0
be runtimeError3
nop
! IF...
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if i < 0 goto runtimeError4 (integer)
ld [%fp+-4],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t13 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-28]
! if i >= t13 goto runtimeError4 (integer)
ld [%fp+-4],%o0
ld [%fp+-28],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t13 := i * 4 (integer)
ld [%fp+-4],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-28]
! t13 := t13 + 4 (integer)
ld [%fp+-28],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-28]
! t13 := a + t13 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-28],%o1
add %o0,%o1,%o1
st %o1,[%fp+-28]
! t14 := *t13
ld [%fp+-28],%o0
ld [%o0],%o0
st %o0,[%fp+-32]
! t15 := - 9998 (integer)
set 9998,%o0
neg %o0,%o1
st %o1,[%fp+-36]
! if t14 >= t15 goto Label_8 (integer)
ld [%fp+-32],%o0
ld [%fp+-36],%o1
cmp %o0,%o1
bge Label_8
nop
! goto Label_7
ba Label_7
nop
! Label_8:
Label_8:
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if i < 0 goto runtimeError4 (integer)
ld [%fp+-4],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t16 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-40]
! if i >= t16 goto runtimeError4 (integer)
ld [%fp+-4],%o0
ld [%fp+-40],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t16 := i * 4 (integer)
ld [%fp+-4],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-40]
! t16 := t16 + 4 (integer)
ld [%fp+-40],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-40]
! t16 := a + t16 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-40],%o1
add %o0,%o1,%o1
st %o1,[%fp+-40]
! t17 := *t16
ld [%fp+-40],%o0
ld [%o0],%o0
st %o0,[%fp+-44]
! if t17 <= 9998 goto Label_6 (integer)
ld [%fp+-44],%o0
set 9998,%o1
cmp %o0,%o1
ble Label_6
nop
! goto Label_7
ba Label_7
nop
! Label_6:
Label_6:
! THEN...
! EXIT...
! goto Label_5
ba Label_5
nop
! END IF...
! Label_7:
Label_7:
! 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
! END LOOP...
! goto Label_4
ba Label_4
nop
! Label_5:
Label_5:
! END FOR...
! t8 := *t11
ld [%fp+-20],%o0
ld [%o0],%o0
st %o0,[%fp+-8]
! t8 := t8 + t10 (integer)
ld [%fp+-8],%o0
ld [%fp+-16],%o1
add %o0,%o1,%o1
st %o1,[%fp+-8]
! *t11 := t8
ld [%fp+-8],%o0
ld [%fp+-20],%o1
st %o0,[%o1]
! goto Label_2
ba Label_2
nop
! Label_3:
Label_3:
! RETURN...
! returnVoid
set display1,%o0
ld [%fp+64],%o1
st %o1,[%o0]
ret
restore
! PROCEDURE...
! procEntry p2_printArray,lexLev=1,frameSize=120
p2_printArray: save %sp,-120,%sp
set display1,%o0
ld [%o0],%o1
st %o1,[%fp+64]
st %fp,[%o0]
! VAR INITIALIZATION...
! i := 0
set 0,%o0
st %o0,[%fp+-4]
! WRITE STMT...
! writeString str3
sethi %hi(str3),%o0
call printf
or %o0,%lo(str3),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! FOR...
! t21 := &i
add %fp,-4,%o0
st %o0,[%fp+-20]
! t18 := 1
set 1,%o0
st %o0,[%fp+-8]
! t19 := 9
set 9,%o0
st %o0,[%fp+-12]
! t20 := 1
set 1,%o0
st %o0,[%fp+-16]
! *t21 := t18
ld [%fp+-8],%o0
ld [%fp+-20],%o1
st %o0,[%o1]
! Label_9:
Label_9:
! if t18 > t19 goto Label_10 (integer)
ld [%fp+-8],%o0
ld [%fp+-12],%o1
cmp %o0,%o1
bg Label_10
nop
! WRITE STMT...
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if i < 0 goto runtimeError4 (integer)
ld [%fp+-4],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t22 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-24]
! if i >= t22 goto runtimeError4 (integer)
ld [%fp+-4],%o0
ld [%fp+-24],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t22 := i * 4 (integer)
ld [%fp+-4],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-24]
! t22 := t22 + 4 (integer)
ld [%fp+-24],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-24]
! t22 := a + t22 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-24],%o1
add %o0,%o1,%o1
st %o1,[%fp+-24]
! t23 := *t22
ld [%fp+-24],%o0
ld [%o0],%o0
st %o0,[%fp+-28]
! writeInt t23
ld [%fp+-28],%o1
sethi %hi(strInt),%o0
call printf
or %o0,%lo(strInt),%o0
! writeNewline
sethi %hi(strNL),%o0
call printf
or %o0,%lo(strNL),%o0
! END FOR...
! t18 := *t21
ld [%fp+-20],%o0
ld [%o0],%o0
st %o0,[%fp+-8]
! t18 := t18 + t20 (integer)
ld [%fp+-8],%o0
ld [%fp+-16],%o1
add %o0,%o1,%o1
st %o1,[%fp+-8]
! *t21 := t18
ld [%fp+-8],%o0
ld [%fp+-20],%o1
st %o0,[%o1]
! goto Label_9
ba Label_9
nop
! Label_10:
Label_10:
! RETURN...
! returnVoid
set display1,%o0
ld [%fp+64],%o1
st %o1,[%o0]
ret
restore
! PROCEDURE...
! procEntry p3_partition,lexLev=1,frameSize=208
p3_partition: save %sp,-208,%sp
set display1,%o0
ld [%o0],%o1
st %o1,[%fp+64]
st %fp,[%o0]
! formal 1,l
! formal 2,r
! VAR INITIALIZATION...
! i := 0
set 0,%o0
st %o0,[%fp+-4]
! VAR INITIALIZATION...
! j := i
ld [%fp+-4],%o0
st %o0,[%fp+-8]
! VAR INITIALIZATION...
! v := i
ld [%fp+-4],%o0
st %o0,[%fp+-12]
! VAR INITIALIZATION...
! t := i
ld [%fp+-4],%o0
st %o0,[%fp+-16]
! ASSIGNMENT STMT...
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if r < 0 goto runtimeError4 (integer)
ld [%fp+72],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t24 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-20]
! if r >= t24 goto runtimeError4 (integer)
ld [%fp+72],%o0
ld [%fp+-20],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t24 := r * 4 (integer)
ld [%fp+72],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-20]
! t24 := t24 + 4 (integer)
ld [%fp+-20],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-20]
! t24 := a + t24 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-20],%o1
add %o0,%o1,%o1
st %o1,[%fp+-20]
! t25 := *t24
ld [%fp+-20],%o0
ld [%o0],%o0
st %o0,[%fp+-24]
! v := t25
ld [%fp+-24],%o0
st %o0,[%fp+-12]
! ASSIGNMENT STMT...
! t26 := l - 1 (integer)
ld [%fp+68],%o0
set 1,%o1
sub %o0,%o1,%o1
st %o1,[%fp+-28]
! i := t26
ld [%fp+-28],%o0
st %o0,[%fp+-4]
! ASSIGNMENT STMT...
! j := r
ld [%fp+72],%o0
st %o0,[%fp+-8]
! LOOP...
! Label_11:
Label_11:
! ASSIGNMENT STMT...
! t27 := i + 1 (integer)
ld [%fp+-4],%o0
set 1,%o1
add %o0,%o1,%o1
st %o1,[%fp+-32]
! i := t27
ld [%fp+-32],%o0
st %o0,[%fp+-4]
! WHILE...
! Label_13:
Label_13:
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if i < 0 goto runtimeError4 (integer)
ld [%fp+-4],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t28 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-36]
! if i >= t28 goto runtimeError4 (integer)
ld [%fp+-4],%o0
ld [%fp+-36],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t28 := i * 4 (integer)
ld [%fp+-4],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-36]
! t28 := t28 + 4 (integer)
ld [%fp+-36],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-36]
! t28 := a + t28 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-36],%o1
add %o0,%o1,%o1
st %o1,[%fp+-36]
! t29 := *t28
ld [%fp+-36],%o0
ld [%o0],%o0
st %o0,[%fp+-40]
! if t29 < v goto Label_14 (integer)
ld [%fp+-40],%o0
ld [%fp+-12],%o1
cmp %o0,%o1
bl Label_14
nop
! goto Label_15
ba Label_15
nop
! Label_14:
Label_14:
! ASSIGNMENT STMT...
! t30 := i + 1 (integer)
ld [%fp+-4],%o0
set 1,%o1
add %o0,%o1,%o1
st %o1,[%fp+-44]
! i := t30
ld [%fp+-44],%o0
st %o0,[%fp+-4]
! END WHILE...
! goto Label_13
ba Label_13
nop
! Label_15:
Label_15:
! ASSIGNMENT STMT...
! t31 := j - 1 (integer)
ld [%fp+-8],%o0
set 1,%o1
sub %o0,%o1,%o1
st %o1,[%fp+-48]
! j := t31
ld [%fp+-48],%o0
st %o0,[%fp+-8]
! WHILE...
! Label_16:
Label_16:
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if j < 0 goto runtimeError4 (integer)
ld [%fp+-8],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t32 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-52]
! if j >= t32 goto runtimeError4 (integer)
ld [%fp+-8],%o0
ld [%fp+-52],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t32 := j * 4 (integer)
ld [%fp+-8],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-52]
! t32 := t32 + 4 (integer)
ld [%fp+-52],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-52]
! t32 := a + t32 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-52],%o1
add %o0,%o1,%o1
st %o1,[%fp+-52]
! t33 := *t32
ld [%fp+-52],%o0
ld [%o0],%o0
st %o0,[%fp+-56]
! if t33 > v goto Label_17 (integer)
ld [%fp+-56],%o0
ld [%fp+-12],%o1
cmp %o0,%o1
bg Label_17
nop
! goto Label_18
ba Label_18
nop
! Label_17:
Label_17:
! ASSIGNMENT STMT...
! t34 := j - 1 (integer)
ld [%fp+-8],%o0
set 1,%o1
sub %o0,%o1,%o1
st %o1,[%fp+-60]
! j := t34
ld [%fp+-60],%o0
st %o0,[%fp+-8]
! END WHILE...
! goto Label_16
ba Label_16
nop
! Label_18:
Label_18:
! ASSIGNMENT STMT...
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if i < 0 goto runtimeError4 (integer)
ld [%fp+-4],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t35 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-64]
! if i >= t35 goto runtimeError4 (integer)
ld [%fp+-4],%o0
ld [%fp+-64],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t35 := i * 4 (integer)
ld [%fp+-4],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-64]
! t35 := t35 + 4 (integer)
ld [%fp+-64],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-64]
! t35 := a + t35 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-64],%o1
add %o0,%o1,%o1
st %o1,[%fp+-64]
! t36 := *t35
ld [%fp+-64],%o0
ld [%o0],%o0
st %o0,[%fp+-68]
! t := t36
ld [%fp+-68],%o0
st %o0,[%fp+-16]
! ASSIGNMENT STMT...
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if i < 0 goto runtimeError4 (integer)
ld [%fp+-4],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t37 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-72]
! if i >= t37 goto runtimeError4 (integer)
ld [%fp+-4],%o0
ld [%fp+-72],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t37 := i * 4 (integer)
ld [%fp+-4],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-72]
! t37 := t37 + 4 (integer)
ld [%fp+-72],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-72]
! t37 := a + t37 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-72],%o1
add %o0,%o1,%o1
st %o1,[%fp+-72]
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if j < 0 goto runtimeError4 (integer)
ld [%fp+-8],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t38 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-76]
! if j >= t38 goto runtimeError4 (integer)
ld [%fp+-8],%o0
ld [%fp+-76],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t38 := j * 4 (integer)
ld [%fp+-8],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-76]
! t38 := t38 + 4 (integer)
ld [%fp+-76],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-76]
! t38 := a + t38 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-76],%o1
add %o0,%o1,%o1
st %o1,[%fp+-76]
! t39 := *t38
ld [%fp+-76],%o0
ld [%o0],%o0
st %o0,[%fp+-80]
! *t37 := t39
ld [%fp+-80],%o0
ld [%fp+-72],%o1
st %o0,[%o1]
! ASSIGNMENT STMT...
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if j < 0 goto runtimeError4 (integer)
ld [%fp+-8],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t40 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-84]
! if j >= t40 goto runtimeError4 (integer)
ld [%fp+-8],%o0
ld [%fp+-84],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t40 := j * 4 (integer)
ld [%fp+-8],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-84]
! t40 := t40 + 4 (integer)
ld [%fp+-84],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-84]
! t40 := a + t40 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-84],%o1
add %o0,%o1,%o1
st %o1,[%fp+-84]
! *t40 := t
ld [%fp+-16],%o0
ld [%fp+-84],%o1
st %o0,[%o1]
! IF...
! if j <= i goto Label_19 (integer)
ld [%fp+-8],%o0
ld [%fp+-4],%o1
cmp %o0,%o1
ble Label_19
nop
! goto Label_20
ba Label_20
nop
! Label_19:
Label_19:
! THEN...
! EXIT...
! goto Label_12
ba Label_12
nop
! END IF...
! Label_20:
Label_20:
! END LOOP...
! goto Label_11
ba Label_11
nop
! Label_12:
Label_12:
! ASSIGNMENT STMT...
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if j < 0 goto runtimeError4 (integer)
ld [%fp+-8],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t41 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-88]
! if j >= t41 goto runtimeError4 (integer)
ld [%fp+-8],%o0
ld [%fp+-88],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t41 := j * 4 (integer)
ld [%fp+-8],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-88]
! t41 := t41 + 4 (integer)
ld [%fp+-88],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-88]
! t41 := a + t41 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-88],%o1
add %o0,%o1,%o1
st %o1,[%fp+-88]
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if i < 0 goto runtimeError4 (integer)
ld [%fp+-4],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t42 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-92]
! if i >= t42 goto runtimeError4 (integer)
ld [%fp+-4],%o0
ld [%fp+-92],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t42 := i * 4 (integer)
ld [%fp+-4],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-92]
! t42 := t42 + 4 (integer)
ld [%fp+-92],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-92]
! t42 := a + t42 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-92],%o1
add %o0,%o1,%o1
st %o1,[%fp+-92]
! t43 := *t42
ld [%fp+-92],%o0
ld [%o0],%o0
st %o0,[%fp+-96]
! *t41 := t43
ld [%fp+-96],%o0
ld [%fp+-88],%o1
st %o0,[%o1]
! ASSIGNMENT STMT...
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if i < 0 goto runtimeError4 (integer)
ld [%fp+-4],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t44 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-100]
! if i >= t44 goto runtimeError4 (integer)
ld [%fp+-4],%o0
ld [%fp+-100],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t44 := i * 4 (integer)
ld [%fp+-4],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-100]
! t44 := t44 + 4 (integer)
ld [%fp+-100],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-100]
! t44 := a + t44 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-100],%o1
add %o0,%o1,%o1
st %o1,[%fp+-100]
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if r < 0 goto runtimeError4 (integer)
ld [%fp+72],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t45 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-104]
! if r >= t45 goto runtimeError4 (integer)
ld [%fp+72],%o0
ld [%fp+-104],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t45 := r * 4 (integer)
ld [%fp+72],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-104]
! t45 := t45 + 4 (integer)
ld [%fp+-104],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-104]
! t45 := a + t45 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-104],%o1
add %o0,%o1,%o1
st %o1,[%fp+-104]
! t46 := *t45
ld [%fp+-104],%o0
ld [%o0],%o0
st %o0,[%fp+-108]
! *t44 := t46
ld [%fp+-108],%o0
ld [%fp+-100],%o1
st %o0,[%o1]
! ASSIGNMENT STMT...
! if a = 0 goto runtimeError2 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
set 0,%o1
cmp %o0,%o1
be runtimeError2
nop
! if r < 0 goto runtimeError4 (integer)
ld [%fp+72],%o0
set 0,%o1
cmp %o0,%o1
bl runtimeError4
nop
! t47 := *a
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%o0],%o0
st %o0,[%fp+-112]
! if r >= t47 goto runtimeError4 (integer)
ld [%fp+72],%o0
ld [%fp+-112],%o1
cmp %o0,%o1
bge runtimeError4
nop
! t47 := r * 4 (integer)
ld [%fp+72],%o0
set 4,%o1
smul %o0,%o1,%o1
st %o1,[%fp+-112]
! t47 := t47 + 4 (integer)
ld [%fp+-112],%o0
set 4,%o1
add %o0,%o1,%o1
st %o1,[%fp+-112]
! t47 := a + t47 (integer)
set display0,%o0
ld [%o0],%o0
ld [%o0+-4],%o0
ld [%fp+-112],%o1
add %o0,%o1,%o1
st %o1,[%fp+-112]
! *t47 := t
ld [%fp+-16],%o0
ld [%fp+-112],%o1
st %o0,[%o1]
! RETURN...
! returnExpr i
ld [%fp+-4],%i0
set display1,%o0
ld [%fp+64],%o1
st %o1,[%o0]
ret
restore
! PROCEDURE...
! procEntry p4_quicksort,lexLev=1,frameSize=112
p4_quicksort: save %sp,-112,%sp
set display1,%o0
ld [%o0],%o1
st %o1,[%fp+64]
st %fp,[%o0]
! formal 1,m
! formal 2,n
! VAR INITIALIZATION...
! i := 0
set 0,%o0
st %o0,[%fp+-4]
! IF...
! if n > m goto Label_21 (integer)
ld [%fp+72],%o0
ld [%fp+68],%o1
cmp %o0,%o1
bg Label_21
nop
! goto Label_22
ba Label_22
nop
! Label_21:
Label_21:
! THEN...
! ASSIGNMENT STMT...
! param 1,m
ld [%fp+68],%o0
st %o0,[%sp+68]
! param 2,n
ld [%fp+72],%o0
st %o0,[%sp+72]
! call p3_partition
call p3_partition
nop
! resultTo t48
st %o0,[%fp+-8]
! i := t48
ld [%fp+-8],%o0
st %o0,[%fp+-4]
! CALL STMT...
! t49 := i - 1 (integer)
ld [%fp+-4],%o0
set 1,%o1
sub %o0,%o1,%o1
st %o1,[%fp+-12]
! param 1,m
ld [%fp+68],%o0
st %o0,[%sp+68]
! param 2,t49
ld [%fp+-12],%o0
st %o0,[%sp+72]
! call p4_quicksort
call p4_quicksort
nop
! CALL STMT...
! t50 := i + 1 (integer)
ld [%fp+-4],%o0
set 1,%o1
add %o0,%o1,%o1
st %o1,[%fp+-16]
! param 1,t50
ld [%fp+-16],%o0
st %o0,[%sp+68]
! param 2,n
ld [%fp+72],%o0
st %o0,[%sp+72]
! call p4_quicksort
call p4_quicksort
nop
! END IF...
! Label_22:
Label_22:
! RETURN...
! returnVoid
set display1,%o0
ld [%fp+64],%o1
st %o1,[%o0]
ret
restore