Commit 870d25ee authored by Richard Torenvliet's avatar Richard Torenvliet

Merge branch 'master' of github.com:taddeus/peephole

Conflicts:
	src/optimize.py
parents eea69c60 61b61a39
......@@ -2,7 +2,13 @@
*.pdf
*.pyc
*~
*.aux
*.log
*.out
*.toc
.coverage
parser.out
parsetab.py
coverage/
build/
src/Makefile_old
BUILD=build/
CLEAN=src/*.pyc src/optimize/*.pyc
# Fix pdflatex search path
TGT_DIR :=
......
Common subexpression elimination
Loop through statements of each block
for each binary operator, look back for usage of rs and rt. If rs or rt are
assigned, break. If exact same operator is found, add it to the list of
common subexpressions. If you reach the end of the block, or rs or rt are
assigned, make new destination address, and change each occurence of this
expression with a move from the new register address.
acron
clinpack
dhrystone
pi
slalom
whet
......@@ -6,33 +6,65 @@
# -mgas -mgpOPT
# Cc1 arguments (-G value = 8, Cpu = default, ISA = 1):
# -quiet -dumpbase -o
# -quiet -dumpbase -O0 -o
gcc2_compiled.:
__gnu_compiled_c:
.sdata
.align 2
$LC2:
.ascii "e: %d\n\000"
.align 3
$LC0:
.word 0x00000000 # 2
.word 0x40000000
.align 3
$LC1:
.word 0x00000000 # 3.5
.word 0x400c0000
.text
.align 2
.globl main
.text
.loc 1 2
.loc 1 3
.ent main
main:
.frame $fp,24,$31 # vars= 0, regs= 2/0, args= 16, extra= 0
.frame $fp,64,$31 # vars= 40, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,24
sw $31,20($sp)
sw $fp,16($sp)
subu $sp,$sp,64
sw $31,60($sp)
sw $fp,56($sp)
move $fp,$sp
jal __main
li $2,0x00000001 # 1
sw $2,16($fp)
li $2,0x00000005 # 5
sw $2,20($fp)
lw $2,16($fp)
lw $3,20($fp)
addu $2,$2,$3
sw $2,24($fp)
lw $2,16($fp)
addu $3,$2,10
sw $3,28($fp)
l.d $f0,$LC0
s.d $f0,32($fp)
l.d $f0,$LC1
s.d $f0,40($fp)
li $2,0x00000061 # 97
sb $2,48($fp)
la $4,$LC2
lw $5,28($fp)
jal printf
move $2,$0
j $L1
$L1:
move $sp,$fp # sp not trusted here
lw $31,20($sp)
lw $fp,16($sp)
addu $sp,$sp,24
lw $31,60($sp)
lw $fp,56($sp)
addu $sp,$sp,64
j $31
.end main
int main(void)
{
#include <stdio.h>
int main(void) {
int x = 1, b = 5, d = x + b, e = x + 10;
double y = 2., z = 3.5;
char c = 'a';
printf("e: %d\n", e); // 11
return 0;
}
.file 1 "acron.c"
# GNU C 2.7.2.3 [AL 1.1, MM 40, tma 0.1] SimpleScalar running sstrix compiled by GNU C
# Cc1 defaults:
# -mgas -mgpOPT
# Cc1 arguments (-G value = 8, Cpu = default, ISA = 1):
# -quiet -dumpbase -O0 -o
gcc2_compiled.:
__gnu_compiled_c:
.globl w
.data
.align 2
w:
.word $LC0
.word $LC1
.word $LC2
.word $LC3
.word $LC4
.word $LC5
.sdata
.align 2
$LC5:
.ascii "Eephole\000"
.rdata
.align 2
$LC4:
.ascii "Peephole\000"
.align 2
$LC3:
.ascii "Optimization\000"
.align 2
$LC2:
.ascii "Practicum\000"
.align 2
$LC1:
.ascii "Ertalerbouw\000"
.align 2
$LC0:
.ascii "Vertalerbouw\000"
.text
.align 2
.globl is_vowel
.sdata
.align 2
$LC6:
.ascii "%s\000"
.align 2
$LC7:
.ascii " %s\000"
.align 2
$LC8:
.ascii "\n\000"
.text
.align 2
.globl do_perm
.align 2
.globl main
.comm acron,12
.comm command,100
.comm done,24
.comm pindex,28
.text
.loc 1 10
.ent is_vowel
is_vowel:
.frame $fp,16,$31 # vars= 8, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,16
sw $fp,8($sp)
move $fp,$sp
move $3,$4
sb $3,0($fp)
move $2,$0
lb $4,0($fp)
li $5,0x00000041 # 65
beq $4,$5,$L3
lb $4,0($fp)
li $5,0x00000045 # 69
beq $4,$5,$L3
lb $4,0($fp)
li $5,0x00000049 # 73
beq $4,$5,$L3
lb $4,0($fp)
li $5,0x0000004f # 79
beq $4,$5,$L3
lb $4,0($fp)
li $5,0x00000055 # 85
beq $4,$5,$L3
lb $4,0($fp)
li $5,0x00000059 # 89
bne $4,$5,$L2
$L3:
li $2,0x00000001 # 1
$L2:
j $L1
$L1:
move $sp,$fp # sp not trusted here
lw $fp,8($sp)
addu $sp,$sp,16
j $31
.end is_vowel
.loc 1 15
.ent do_perm
do_perm:
.frame $fp,56,$31 # vars= 24, regs= 4/0, args= 16, extra= 0
.mask 0xc0030000,-4
.fmask 0x00000000,0
subu $sp,$sp,56
sw $31,52($sp)
sw $fp,48($sp)
sw $17,44($sp)
sw $16,40($sp)
move $fp,$sp
sw $4,56($fp)
sw $5,60($fp)
sw $6,64($fp)
sw $7,68($fp)
sw $0,24($fp)
lw $2,64($fp)
li $3,0x00000001 # 1
bne $2,$3,$L5
lw $2,pindex
move $3,$2
sll $2,$3,2
la $3,w
addu $2,$2,$3
lw $3,0($2)
lb $4,0($3)
jal is_vowel
bne $2,$0,$L5
lw $2,56($fp)
move $3,$2
sll $2,$3,2
la $3,w
addu $2,$2,$3
lw $3,0($2)
lb $4,0($3)
jal is_vowel
beq $2,$0,$L4
$L5:
lw $2,64($fp)
slt $3,$2,2
bne $3,$0,$L6
lw $2,64($fp)
move $3,$2
sll $2,$3,2
la $3,pindex-8
addu $2,$2,$3
lw $3,0($2)
move $2,$3
sll $3,$2,2
la $4,w
addu $2,$3,$4
lw $3,0($2)
lb $4,0($3)
jal is_vowel
move $16,$2
lw $2,64($fp)
move $3,$2
sll $2,$3,2
la $3,pindex-4
addu $2,$2,$3
lw $3,0($2)
move $2,$3
sll $3,$2,2
la $4,w
addu $2,$3,$4
lw $3,0($2)
lb $4,0($3)
jal is_vowel
move $17,$2
lw $2,56($fp)
move $3,$2
sll $2,$3,2
la $3,w
addu $2,$2,$3
lw $3,0($2)
lb $4,0($3)
jal is_vowel
addu $3,$16,$17
addu $2,$3,$2
sw $2,24($fp)
lw $2,24($fp)
beq $2,$0,$L8
lw $2,24($fp)
li $3,0x00000003 # 3
bne $2,$3,$L7
$L8:
j $L4
$L7:
$L6:
lw $2,64($fp)
addu $3,$2,1
sw $3,64($fp)
sll $3,$2,2
la $4,pindex
addu $2,$3,$4
lw $3,56($fp)
sw $3,0($2)
lw $2,64($fp)
slt $3,$2,6
beq $3,$0,$L9
lw $3,68($fp)
subu $2,$3,1
move $3,$2
sw $3,68($fp)
beq $3,$0,$L9
sw $0,16($fp)
$L10:
lw $2,16($fp)
slt $3,$2,6
beq $3,$0,$L11
$L13:
lw $2,16($fp)
move $3,$2
sll $2,$3,2
lw $3,60($fp)
addu $2,$2,$3
lw $3,0($2)
bne $3,$0,$L14
lw $2,16($fp)
move $3,$2
sll $2,$3,2
lw $3,60($fp)
addu $2,$2,$3
li $3,0x00000001 # 1
sw $3,0($2)
lw $4,16($fp)
lw $5,60($fp)
lw $6,64($fp)
lw $7,68($fp)
jal do_perm
lw $2,16($fp)
move $3,$2
sll $2,$3,2
lw $3,60($fp)
addu $2,$2,$3
sw $0,0($2)
$L14:
$L12:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L10
$L11:
j $L15
$L9:
sw $0,28($fp)
sw $0,20($fp)
$L16:
lw $2,20($fp)
lw $3,64($fp)
slt $2,$2,$3
beq $2,$0,$L17
$L19:
sw $0,32($fp)
$L20:
lw $2,20($fp)
move $3,$2
sll $2,$3,2
la $3,pindex
addu $2,$2,$3
lw $3,0($2)
move $2,$3
sll $3,$2,2
la $4,w
addu $2,$3,$4
lw $3,0($2)
lw $4,32($fp)
addu $2,$3,$4
lb $4,0($2)
jal isupper
beq $2,$0,$L21
$L22:
lw $2,28($fp)
addu $3,$2,1
sw $3,28($fp)
lw $3,20($fp)
move $4,$3
sll $3,$4,2
la $4,pindex
addu $3,$3,$4
lw $4,0($3)
move $3,$4
sll $4,$3,2
la $5,w
addu $3,$4,$5
lw $4,32($fp)
addu $5,$4,1
sw $5,32($fp)
lw $5,0($3)
addu $3,$4,$5
lbu $4,0($3)
sb $4,acron($2)
j $L20
$L21:
$L18:
lw $3,20($fp)
addu $2,$3,1
move $3,$2
sw $3,20($fp)
j $L16
$L17:
lw $2,28($fp)
la $3,acron
addu $2,$2,$3
sb $0,0($2)
la $4,$LC6
la $5,acron
jal printf
sw $0,20($fp)
$L23:
lw $2,20($fp)
lw $3,64($fp)
slt $2,$2,$3
beq $2,$0,$L24
$L26:
lw $2,20($fp)
move $3,$2
sll $2,$3,2
la $3,pindex
addu $2,$2,$3
lw $3,0($2)
move $2,$3
sll $3,$2,2
la $4,w
addu $2,$3,$4
la $4,$LC7
lw $5,0($2)
jal printf
$L25:
lw $3,20($fp)
addu $2,$3,1
move $3,$2
sw $3,20($fp)
j $L23
$L24:
la $4,$LC8
jal printf
$L15:
$L4:
move $sp,$fp # sp not trusted here
lw $31,52($sp)
lw $fp,48($sp)
lw $17,44($sp)
lw $16,40($sp)
addu $sp,$sp,56
j $31
.end do_perm
.loc 1 53
.ent main
main:
.frame $fp,32,$31 # vars= 8, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,32
sw $31,28($sp)
sw $fp,24($sp)
move $fp,$sp
jal __main
li $2,0x00000004 # 4
sw $2,20($fp)
$L28:
lw $2,20($fp)
slt $3,$2,7
beq $3,$0,$L29
$L31:
sw $0,16($fp)
$L32:
lw $2,16($fp)
slt $3,$2,6
beq $3,$0,$L33
$L35:
lw $2,16($fp)
move $3,$2
sll $2,$3,2
la $3,done
addu $2,$2,$3
li $3,0x00000001 # 1
sw $3,0($2)
lw $4,16($fp)
la $5,done
move $6,$0
lw $7,20($fp)
jal do_perm
lw $2,16($fp)
move $3,$2
sll $2,$3,2
la $3,done
addu $2,$2,$3
sw $0,0($2)
$L34:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L32
$L33:
$L30:
lw $3,20($fp)
addu $2,$3,1
move $3,$2
sw $3,20($fp)
j $L28
$L29:
$L27:
move $sp,$fp # sp not trusted here
lw $31,28($sp)
lw $fp,24($sp)
addu $sp,$sp,32
j $31
.end main
\ No newline at end of file
.file 1 "clinpack.c"
# GNU C 2.7.2.3 [AL 1.1, MM 40, tma 0.1] SimpleScalar running sstrix compiled by GNU C
# Cc1 defaults:
# -mgas -mgpOPT
# Cc1 arguments (-G value = 8, Cpu = default, ISA = 1):
# -quiet -dumpbase -O0 -o
gcc2_compiled.:
__gnu_compiled_c:
.lcomm aa.2,320000
.lcomm a.3,321600
.lcomm b.4,1600
.lcomm x.5,1600
.lcomm ipvt.6,800
.lcomm n.7,4
.lcomm i.8,4
.lcomm ntimes.9,4
.lcomm info.10,4
.lcomm lda.11,4
.lcomm ldaa.12,4
.lcomm kflops.13,4
.rdata
.align 2
$LC1:
.ascii "Unrolled \000"
.sdata
.align 2
$LC2:
.ascii "Double \000"
.rdata
.align 2
$LC3:
.ascii "Precision Linpack\n\n\000"
.align 2
$LC6:
.ascii " norm. resid resid machep\000"
.align 2
$LC7:
.ascii " x[0]-1 x[n-1]-1\n\000"
.align 2
$LC8:
.ascii "%8.1f %16.8e%16.8e%16.8e%16.8e\n\000"
.align 2
$LC9:
.ascii " times are reported for matrices of order %5d\n\000"
.align 2
$LC10:
.ascii " dgefa dgesl total kflops unit\000"
.align 2
$LC11:
.ascii " ratio\n\000"
.align 2
$LC14:
.ascii " times for array with leading dimension of%5d\n\000"
.align 2
$LC16:
.ascii " times for array with leading dimension of%4d\n\000"
.align 2
$LC17:
.ascii " Precision %5d Kflops ; %d Reps \n\000"
.sdata
.align 3
$LC0:
.word 0x3126e979 # 0.056000000000000001166
.word 0x3facac08
.align 3
$LC4:
.word 0x00000000 # 3
.word 0x40080000
.align 3
$LC5:
.word 0x00000000 # 1
.word 0x3ff00000
.align 3
$LC12:
.word 0x00000000 # 1000
.word 0x408f4000
.align 3
$LC13:
.word 0x00000000 # 2000
.word 0x409f4000
.align 3
$LC15:
.word 0x00000000 # 0.5
.word 0x3fe00000
.text
.align 2
.globl main
.rdata
.align 2
$LC18:
.ascii "%11.2f%11.2f%11.2f%11.0f%11.2f%11.2f\n\000"
.text
.align 2
.globl print_time
.sdata
.align 3
$LC19:
.word 0x00000000 # 32768
.word 0x40e00000
.align 3
$LC20:
.word 0x00000000 # 16384
.word 0x40d00000
.text
.align 2
.globl matgen
.sdata
.align 3
$LC21:
.word 0x00000000 # -1
.word 0xbff00000
.text
.align 2
.globl dgefa
.align 2
.globl dgesl
.align 2
.globl daxpy
.align 2
.globl ddot
.align 2
.globl dscal
.align 2
.globl idamax
.sdata
.align 3
$LC22:
.word 0x55555555 # 1.3333333333333332593
.word 0x3ff55555
.align 3
$LC23:
.word 0x00000000 # 1
.word 0x3ff00000
.text
.align 2
.globl epslon
.align 2
.globl dmxpy
.sdata
.align 3
$LC24:
.word 0xa0b5ed8d # 9.9999999999999995475e-07
.word 0x3eb0c6f7
.text
.align 2
.globl dtime
.lcomm st,384
.comm rusage,72
.text
.loc 1 72
.ent main
main:
.frame $fp,168,$31 # vars= 96, regs= 2/2, args= 48, extra= 0
.mask 0xc0000000,-20
.fmask 0x00f00000,-4
subu $sp,$sp,168
sw $31,148($sp)
sw $fp,144($sp)
s.d $f22,160($sp)
s.d $f20,152($sp)
move $fp,$sp
jal __main
li $2,0x000000c9 # 201
sw $2,lda.11
li $2,0x000000c8 # 200
sw $2,ldaa.12
l.d $f0,$LC0
s.d $f0,48($fp)
li $2,0x00000019 # 25
sw $2,n.7
la $4,$LC1
jal printf
la $4,$LC2
jal printf
la $4,$LC3
jal printf
lw $2,n.7
lw $3,n.7
mult $2,$3
mflo $2
lw $3,n.7
mult $2,$3
mflo $2
mtc1 $2,$f20
#nop
cvt.d.w $f20,$f20
add.d $f0,$f20,$f20
l.d $f2,$LC4
div.d $f0,$f0,$f2
lw $2,n.7
lw $3,n.7
mult $2,$3
mflo $2
mtc1 $2,$f22
#nop
cvt.d.w $f22,$f22
add.d $f2,$f22,$f22
add.d $f0,$f0,$f2
s.d $f0,56($fp)
addu $2,$fp,72
sw $2,16($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,b.4
jal matgen
jal dtime
s.d $f0,120($fp)
la $2,info.10
sw $2,16($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,ipvt.6
jal dgefa
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
s.d $f0,st
jal dtime
s.d $f0,120($fp)
la $2,b.4
sw $2,16($sp)
sw $0,20($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,ipvt.6
jal dgesl
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
s.d $f0,st+48
l.d $f0,st
l.d $f2,st+48
add.d $f0,$f0,$f2
s.d $f0,64($fp)
sw $0,i.8
$L2:
lw $2,i.8
lw $3,n.7
slt $2,$2,$3
bne $2,$0,$L5
j $L3
$L5:
lw $2,i.8
move $3,$2
sll $2,$3,3
la $3,x.5
addu $2,$2,$3
lw $3,i.8
move $4,$3
sll $3,$4,3
la $4,b.4
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
$L4:
lw $3,i.8
addu $2,$3,1
move $3,$2
sw $3,i.8
j $L2
$L3:
addu $2,$fp,72
sw $2,16($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,b.4
jal matgen
sw $0,i.8
$L6:
lw $2,i.8
lw $3,n.7
slt $2,$2,$3
bne $2,$0,$L9
j $L7
$L9:
lw $2,i.8
move $3,$2
sll $2,$3,3
la $3,b.4
addu $2,$2,$3
lw $3,i.8
move $4,$3
sll $3,$4,3
la $4,b.4
addu $3,$3,$4
l.d $f0,0($3)
neg.d $f2,$f0
s.d $f2,0($2)
$L8:
lw $3,i.8
addu $2,$3,1
move $3,$2
sw $3,i.8
j $L6
$L7:
la $2,x.5
sw $2,16($sp)
la $2,a.3
sw $2,20($sp)
lw $4,n.7
la $5,b.4
lw $6,n.7
lw $7,lda.11
jal dmxpy
dsz 88($fp)
dsz 80($fp)
sw $0,i.8
$L10:
lw $2,i.8
lw $3,n.7
slt $2,$2,$3
bne $2,$0,$L13
j $L11
$L13:
lw $2,i.8
move $3,$2
sll $2,$3,3
la $3,b.4
addu $2,$2,$3
l.d $f2,0($2)
abs.d $f0,$f2
l.d $f2,88($fp)
c.lt.d $f0,$f2
bc1f $L14
l.d $f0,88($fp)
j $L15
$L14:
lw $2,i.8
move $3,$2
sll $2,$3,3
la $3,b.4
addu $2,$2,$3
l.d $f2,0($2)
abs.d $f0,$f2
$L15:
s.d $f0,88($fp)
lw $2,i.8
move $3,$2
sll $2,$3,3
la $3,x.5
addu $2,$2,$3
l.d $f2,0($2)
abs.d $f0,$f2
l.d $f2,80($fp)
c.lt.d $f0,$f2
bc1f $L16
l.d $f0,80($fp)
j $L17
$L16:
lw $2,i.8
move $3,$2
sll $2,$3,3
la $3,x.5
addu $2,$2,$3
l.d $f2,0($2)
abs.d $f0,$f2
$L17:
s.d $f0,80($fp)
$L12:
lw $3,i.8
addu $2,$3,1
move $3,$2
sw $3,i.8
j $L10
$L11:
l.d $f12,$LC5
jal epslon
s.d $f0,104($fp)
l.s $f0,n.7
#nop
cvt.d.w $f0,$f0
l.d $f2,72($fp)
mul.d $f0,$f0,$f2
l.d $f2,80($fp)
mul.d $f0,$f0,$f2
l.d $f2,104($fp)
mul.d $f0,$f0,$f2
l.d $f2,88($fp)
div.d $f0,$f2,$f0
s.d $f0,96($fp)
la $4,$LC6
jal printf
la $4,$LC7
jal printf
l.d $f0,88($fp)
s.d $f0,16($sp)
l.d $f0,104($fp)
s.d $f0,24($sp)
l.d $f0,x.5
l.d $f2,$LC5
sub.d $f0,$f0,$f2
s.d $f0,32($sp)
lw $2,n.7
move $3,$2
sll $2,$3,3
addu $2,$2,$3
l.d $f0,0($2)
l.d $f2,$LC5
sub.d $f0,$f0,$f2
s.d $f0,40($sp)
la $4,$LC8
dlw $6,96($fp)
jal printf
la $4,$LC9
lw $5,n.7
jal printf
la $4,$LC10
jal printf
la $4,$LC11
jal printf
l.d $f0,64($fp)
s.d $f0,st+96
l.d $f0,64($fp)
l.d $f2,$LC12
mul.d $f0,$f0,$f2
l.d $f2,56($fp)
div.d $f0,$f2,$f0
s.d $f0,st+144
l.d $f0,$LC13
l.d $f2,st+144
div.d $f0,$f0,$f2
s.d $f0,st+192
l.d $f0,64($fp)
l.d $f2,48($fp)
div.d $f0,$f0,$f2
s.d $f0,st+240
la $4,$LC14
lw $5,lda.11
jal printf
move $4,$0
jal print_time
addu $2,$fp,72
sw $2,16($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,b.4
jal matgen
jal dtime
s.d $f0,120($fp)
la $2,info.10
sw $2,16($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,ipvt.6
jal dgefa
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
s.d $f0,st+8
jal dtime
s.d $f0,120($fp)
la $2,b.4
sw $2,16($sp)
sw $0,20($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,ipvt.6
jal dgesl
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
s.d $f0,st+56
l.d $f0,st+8
l.d $f2,st+56
add.d $f0,$f0,$f2
s.d $f0,64($fp)
l.d $f0,64($fp)
s.d $f0,st+104
l.d $f0,64($fp)
l.d $f2,$LC12
mul.d $f0,$f0,$f2
l.d $f2,56($fp)
div.d $f0,$f2,$f0
s.d $f0,st+152
l.d $f0,$LC13
l.d $f2,st+152
div.d $f0,$f0,$f2
s.d $f0,st+200
l.d $f0,64($fp)
l.d $f2,48($fp)
div.d $f0,$f0,$f2
s.d $f0,st+248
addu $2,$fp,72
sw $2,16($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,b.4
jal matgen
jal dtime
s.d $f0,120($fp)
la $2,info.10
sw $2,16($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,ipvt.6
jal dgefa
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
s.d $f0,st+16
jal dtime
s.d $f0,120($fp)
la $2,b.4
sw $2,16($sp)
sw $0,20($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,ipvt.6
jal dgesl
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
s.d $f0,st+64
l.d $f0,st+16
l.d $f2,st+64
add.d $f0,$f0,$f2
s.d $f0,64($fp)
l.d $f0,64($fp)
s.d $f0,st+112
l.d $f0,64($fp)
l.d $f2,$LC12
mul.d $f0,$f0,$f2
l.d $f2,56($fp)
div.d $f0,$f2,$f0
s.d $f0,st+160
l.d $f0,$LC13
l.d $f2,st+160
div.d $f0,$f0,$f2
s.d $f0,st+208
l.d $f0,64($fp)
l.d $f2,48($fp)
div.d $f0,$f0,$f2
s.d $f0,st+256
li $2,0x00000001 # 1
sw $2,ntimes.9
dsz 136($fp)
jal dtime
s.d $f0,120($fp)
sw $0,i.8
$L18:
lw $2,i.8
lw $3,ntimes.9
slt $2,$2,$3
bne $2,$0,$L21
j $L19
$L21:
jal dtime
s.d $f0,128($fp)
addu $2,$fp,72
sw $2,16($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,b.4
jal matgen
jal dtime
l.d $f2,136($fp)
add.d $f0,$f0,$f2
l.d $f2,128($fp)
sub.d $f0,$f0,$f2
s.d $f0,136($fp)
la $2,info.10
sw $2,16($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,ipvt.6
jal dgefa
$L20:
lw $3,i.8
addu $2,$3,1
move $3,$2
sw $3,i.8
j $L18
$L19:
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
l.d $f2,136($fp)
sub.d $f0,$f0,$f2
l.s $f2,ntimes.9
#nop
cvt.d.w $f2,$f2
div.d $f0,$f0,$f2
s.d $f0,st+24
jal dtime
s.d $f0,120($fp)
sw $0,i.8
$L22:
lw $2,i.8
lw $3,ntimes.9
slt $2,$2,$3
bne $2,$0,$L25
j $L23
$L25:
la $2,b.4
sw $2,16($sp)
sw $0,20($sp)
la $4,a.3
lw $5,lda.11
lw $6,n.7
la $7,ipvt.6
jal dgesl
$L24:
lw $3,i.8
addu $2,$3,1
move $3,$2
sw $3,i.8
j $L22
$L23:
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
l.s $f2,ntimes.9
#nop
cvt.d.w $f2,$f2
div.d $f0,$f0,$f2
s.d $f0,st+72
l.d $f0,st+24
l.d $f2,st+72
add.d $f0,$f0,$f2
s.d $f0,64($fp)
l.d $f0,64($fp)
s.d $f0,st+120
l.d $f0,64($fp)
l.d $f2,$LC12
mul.d $f0,$f0,$f2
l.d $f2,56($fp)
div.d $f0,$f2,$f0
s.d $f0,st+168
l.d $f0,$LC13
l.d $f2,st+168
div.d $f0,$f0,$f2
s.d $f0,st+216
l.d $f0,64($fp)
l.d $f2,48($fp)
div.d $f0,$f0,$f2
s.d $f0,st+264
li $4,0x00000001 # 1
jal print_time
li $4,0x00000002 # 2
jal print_time
li $4,0x00000003 # 3
jal print_time
addu $2,$fp,72
sw $2,16($sp)
la $4,aa.2
lw $5,ldaa.12
lw $6,n.7
la $7,b.4
jal matgen
jal dtime
s.d $f0,120($fp)
la $2,info.10
sw $2,16($sp)
la $4,aa.2
lw $5,ldaa.12
lw $6,n.7
la $7,ipvt.6
jal dgefa
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
s.d $f0,st+32
jal dtime
s.d $f0,120($fp)
la $2,b.4
sw $2,16($sp)
sw $0,20($sp)
la $4,aa.2
lw $5,ldaa.12
lw $6,n.7
la $7,ipvt.6
jal dgesl
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
s.d $f0,st+80
l.d $f0,st+32
l.d $f2,st+80
add.d $f0,$f0,$f2
s.d $f0,64($fp)
l.d $f0,64($fp)
s.d $f0,st+128
l.d $f0,64($fp)
l.d $f2,$LC12
mul.d $f0,$f0,$f2
l.d $f2,56($fp)
div.d $f0,$f2,$f0
s.d $f0,st+176
l.d $f0,$LC13
l.d $f2,st+176
div.d $f0,$f0,$f2
s.d $f0,st+224
l.d $f0,64($fp)
l.d $f2,48($fp)
div.d $f0,$f0,$f2
s.d $f0,st+272
addu $2,$fp,72
sw $2,16($sp)
la $4,aa.2
lw $5,ldaa.12
lw $6,n.7
la $7,b.4
jal matgen
jal dtime
s.d $f0,120($fp)
la $2,info.10
sw $2,16($sp)
la $4,aa.2
lw $5,ldaa.12
lw $6,n.7
la $7,ipvt.6
jal dgefa
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
s.d $f0,st+40
jal dtime
s.d $f0,120($fp)
la $2,b.4
sw $2,16($sp)
sw $0,20($sp)
la $4,aa.2
lw $5,ldaa.12
lw $6,n.7
la $7,ipvt.6
jal dgesl
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
s.d $f0,st+88
l.d $f0,st+40
l.d $f2,st+88
add.d $f0,$f0,$f2
s.d $f0,64($fp)
l.d $f0,64($fp)
s.d $f0,st+136
l.d $f0,64($fp)
l.d $f2,$LC12
mul.d $f0,$f0,$f2
l.d $f2,56($fp)
div.d $f0,$f2,$f0
s.d $f0,st+184
l.d $f0,$LC13
l.d $f2,st+184
div.d $f0,$f0,$f2
s.d $f0,st+232
l.d $f0,64($fp)
l.d $f2,48($fp)
div.d $f0,$f0,$f2
s.d $f0,st+280
addu $2,$fp,72
sw $2,16($sp)
la $4,aa.2
lw $5,ldaa.12
lw $6,n.7
la $7,b.4
jal matgen
jal dtime
s.d $f0,120($fp)
la $2,info.10
sw $2,16($sp)
la $4,aa.2
lw $5,ldaa.12
lw $6,n.7
la $7,ipvt.6
jal dgefa
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
s.d $f0,st+48
jal dtime
s.d $f0,120($fp)
la $2,b.4
sw $2,16($sp)
sw $0,20($sp)
la $4,aa.2
lw $5,ldaa.12
lw $6,n.7
la $7,ipvt.6
jal dgesl
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
s.d $f0,st+96
l.d $f0,st+48
l.d $f2,st+96
add.d $f0,$f0,$f2
s.d $f0,64($fp)
l.d $f0,64($fp)
s.d $f0,st+144
l.d $f0,64($fp)
l.d $f2,$LC12
mul.d $f0,$f0,$f2
l.d $f2,56($fp)
div.d $f0,$f2,$f0
s.d $f0,st+192
l.d $f0,$LC13
l.d $f2,st+192
div.d $f0,$f0,$f2
s.d $f0,st+240
l.d $f0,64($fp)
l.d $f2,48($fp)
div.d $f0,$f0,$f2
s.d $f0,st+288
li $2,0x00000001 # 1
sw $2,ntimes.9
dsz 136($fp)
jal dtime
s.d $f0,120($fp)
sw $0,i.8
$L26:
lw $2,i.8
lw $3,ntimes.9
slt $2,$2,$3
bne $2,$0,$L29
j $L27
$L29:
jal dtime
s.d $f0,128($fp)
addu $2,$fp,72
sw $2,16($sp)
la $4,aa.2
lw $5,ldaa.12
lw $6,n.7
la $7,b.4
jal matgen
jal dtime
l.d $f2,136($fp)
add.d $f0,$f0,$f2
l.d $f2,128($fp)
sub.d $f0,$f0,$f2
s.d $f0,136($fp)
la $2,info.10
sw $2,16($sp)
la $4,aa.2
lw $5,ldaa.12
lw $6,n.7
la $7,ipvt.6
jal dgefa
$L28:
lw $3,i.8
addu $2,$3,1
move $3,$2
sw $3,i.8
j $L26
$L27:
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
l.d $f2,136($fp)
sub.d $f0,$f0,$f2
l.s $f2,ntimes.9
#nop
cvt.d.w $f2,$f2
div.d $f0,$f0,$f2
s.d $f0,st+56
jal dtime
s.d $f0,120($fp)
sw $0,i.8
$L30:
lw $2,i.8
lw $3,ntimes.9
slt $2,$2,$3
bne $2,$0,$L33
j $L31
$L33:
la $2,b.4
sw $2,16($sp)
sw $0,20($sp)
la $4,aa.2
lw $5,ldaa.12
lw $6,n.7
la $7,ipvt.6
jal dgesl
$L32:
lw $3,i.8
addu $2,$3,1
move $3,$2
sw $3,i.8
j $L30
$L31:
jal dtime
l.d $f2,120($fp)
sub.d $f0,$f0,$f2
l.s $f2,ntimes.9
#nop
cvt.d.w $f2,$f2
div.d $f0,$f0,$f2
s.d $f0,st+104
l.d $f0,st+56
l.d $f2,st+104
add.d $f0,$f0,$f2
s.d $f0,64($fp)
l.d $f0,64($fp)
s.d $f0,st+152
l.d $f0,64($fp)
l.d $f2,$LC12
mul.d $f0,$f0,$f2
l.d $f2,56($fp)
div.d $f0,$f2,$f0
s.d $f0,st+200
l.d $f0,$LC13
l.d $f2,st+200
div.d $f0,$f0,$f2
s.d $f0,st+248
l.d $f0,64($fp)
l.d $f2,48($fp)
div.d $f0,$f0,$f2
s.d $f0,st+296
l.d $f0,st+168
mtc1 $0,$f2
mtc1 $0,$f3
c.lt.d $f0,$f2
bc1f $L34
dsz st+168
$L34:
l.d $f0,st+200
mtc1 $0,$f2
mtc1 $0,$f3
c.lt.d $f0,$f2
bc1f $L35
dsz st+200
$L35:
l.d $f0,st+168
s.d $f0,112($fp)
l.d $f0,st+200
l.d $f2,st+168
c.lt.d $f0,$f2
bc1f $L36
l.d $f0,st+200
s.d $f0,112($fp)
$L36:
l.d $f0,112($fp)
l.d $f2,$LC15
add.d $f0,$f0,$f2
trunc.w.d $f4,$f0,$8
s.s $f4,kflops.13
la $4,$LC16
lw $5,ldaa.12
jal printf
li $4,0x00000004 # 4
jal print_time
li $4,0x00000005 # 5
jal print_time
li $4,0x00000006 # 6
jal print_time
li $4,0x00000007 # 7
jal print_time
la $4,$LC1
jal printf
la $4,$LC2
jal printf
la $4,$LC17
lw $5,kflops.13
li $6,0x00000001 # 1
jal printf
$L1:
move $sp,$fp # sp not trusted here
lw $31,148($sp)
lw $fp,144($sp)
l.d $f22,160($sp)
l.d $f20,152($sp)
addu $sp,$sp,168
j $31
.end main
.loc 1 300
.ent print_time
print_time:
.frame $fp,64,$31 # vars= 0, regs= 2/0, args= 56, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,64
sw $31,60($sp)
sw $fp,56($sp)
move $fp,$sp
sw $4,64($fp)
lw $2,64($fp)
move $3,$2
sll $2,$3,3
la $3,st
addu $2,$2,$3
lw $3,64($fp)
move $4,$3
sll $3,$4,3
la $4,st+48
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,16($sp)
lw $3,64($fp)
move $4,$3
sll $3,$4,3
la $4,st+96
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,24($sp)
lw $3,64($fp)
move $4,$3
sll $3,$4,3
la $4,st+144
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,32($sp)
lw $3,64($fp)
move $4,$3
sll $3,$4,3
la $4,st+192
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,40($sp)
lw $3,64($fp)
move $4,$3
sll $3,$4,3
la $4,st+240
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,48($sp)
la $4,$LC18
dlw $6,0($2)
jal printf
$L37:
move $sp,$fp # sp not trusted here
lw $31,60($sp)
lw $fp,56($sp)
addu $sp,$sp,64
j $31
.end print_time
.loc 1 309
.ent matgen
matgen:
.frame $fp,24,$31 # vars= 16, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,24
sw $fp,16($sp)
move $fp,$sp
sw $4,24($fp)
sw $5,28($fp)
sw $6,32($fp)
sw $7,36($fp)
li $2,0x0000052d # 1325
sw $2,0($fp)
lw $2,40($fp)
dsz 0($2)
sw $0,8($fp)
$L39:
lw $2,8($fp)
lw $3,32($fp)
slt $2,$2,$3
bne $2,$0,$L42
j $L40
$L42:
sw $0,4($fp)
$L43:
lw $2,4($fp)
lw $3,32($fp)
slt $2,$2,$3
bne $2,$0,$L46
j $L44
$L46:
lw $3,0($fp)
move $4,$3
sll $2,$4,1
addu $2,$2,$3
sll $4,$2,6
addu $2,$2,$4
sll $4,$2,2
addu $4,$4,$3
sll $2,$4,2
addu $2,$2,$3
move $3,$2
bgez $3,$L47
li $4,0x0000ffff # 65535
addu $3,$3,$4
$L47:
sra $3,$3,16
move $4,$3
sll $3,$4,16
subu $2,$2,$3
sw $2,0($fp)
lw $2,28($fp)
lw $3,8($fp)
mult $2,$3
mflo $2
lw $3,4($fp)
addu $2,$2,$3
move $3,$2
sll $2,$3,3
lw $3,24($fp)
addu $2,$2,$3
l.s $f0,0($fp)
#nop
cvt.d.w $f0,$f0
l.d $f2,$LC19
sub.d $f0,$f0,$f2
l.d $f2,$LC20
div.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,40($fp)
lw $3,28($fp)
lw $4,8($fp)
mult $3,$4
mflo $3
lw $4,4($fp)
addu $3,$3,$4
move $4,$3
sll $3,$4,3
lw $4,24($fp)
addu $3,$3,$4
lw $4,40($fp)
l.d $f0,0($3)
l.d $f2,0($4)
c.lt.d $f2,$f0
bc1f $L48
lw $3,28($fp)
lw $4,8($fp)
mult $3,$4
mflo $3
lw $4,4($fp)
addu $3,$3,$4
move $4,$3
sll $3,$4,3
lw $4,24($fp)
addu $3,$3,$4
l.d $f0,0($3)
j $L49
$L48:
lw $3,40($fp)
l.d $f0,0($3)
$L49:
s.d $f0,0($2)
$L45:
lw $3,4($fp)
addu $2,$3,1
move $3,$2
sw $3,4($fp)
j $L43
$L44:
$L41:
lw $3,8($fp)
addu $2,$3,1
move $3,$2
sw $3,8($fp)
j $L39
$L40:
.set noreorder
nop
.set reorder
sw $0,4($fp)
$L50:
lw $2,4($fp)
lw $3,32($fp)
slt $2,$2,$3
bne $2,$0,$L53
j $L51
$L53:
lw $2,4($fp)
move $3,$2
sll $2,$3,3
lw $3,36($fp)
addu $2,$2,$3
dsz 0($2)
$L52:
lw $3,4($fp)
addu $2,$3,1
move $3,$2
sw $3,4($fp)
j $L50
$L51:
.set noreorder
nop
.set reorder
sw $0,8($fp)
$L54:
lw $2,8($fp)
lw $3,32($fp)
slt $2,$2,$3
bne $2,$0,$L57
j $L55
$L57:
sw $0,4($fp)
$L58:
lw $2,4($fp)
lw $3,32($fp)
slt $2,$2,$3
bne $2,$0,$L61
j $L59
$L61:
lw $2,4($fp)
move $3,$2
sll $2,$3,3
lw $3,36($fp)
addu $2,$2,$3
lw $3,4($fp)
move $4,$3
sll $3,$4,3
lw $4,36($fp)
addu $3,$3,$4
lw $4,28($fp)
lw $5,8($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,24($fp)
addu $4,$4,$5
l.d $f0,0($3)
l.d $f2,0($4)
add.d $f0,$f0,$f2
s.d $f0,0($2)
$L60:
lw $3,4($fp)
addu $2,$3,1
move $3,$2
sw $3,4($fp)
j $L58
$L59:
$L56:
lw $3,8($fp)
addu $2,$3,1
move $3,$2
sw $3,8($fp)
j $L54
$L55:
$L38:
move $sp,$fp # sp not trusted here
lw $fp,16($sp)
addu $sp,$sp,24
j $31
.end matgen
.loc 1 339
.ent dgefa
dgefa:
.frame $fp,72,$31 # vars= 32, regs= 2/0, args= 32, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,72
sw $31,68($sp)
sw $fp,64($sp)
move $fp,$sp
sw $4,72($fp)
sw $5,76($fp)
sw $6,80($fp)
sw $7,84($fp)
lw $2,88($fp)
sw $0,0($2)
lw $2,80($fp)
subu $3,$2,1
sw $3,56($fp)
lw $2,56($fp)
bltz $2,$L63
sw $0,44($fp)
$L64:
lw $2,44($fp)
lw $3,56($fp)
slt $2,$2,$3
bne $2,$0,$L67
j $L65
$L67:
lw $2,44($fp)
addu $3,$2,1
sw $3,48($fp)
lw $2,80($fp)
lw $3,44($fp)
subu $2,$2,$3
lw $3,76($fp)
lw $4,44($fp)
mult $3,$4
mflo $3
lw $4,44($fp)
addu $3,$3,$4
move $4,$3
sll $3,$4,3
lw $4,72($fp)
addu $3,$3,$4
move $4,$2
move $5,$3
li $6,0x00000001 # 1
jal idamax
lw $3,44($fp)
addu $2,$2,$3
sw $2,52($fp)
lw $2,44($fp)
move $3,$2
sll $2,$3,2
lw $3,84($fp)
addu $2,$2,$3
lw $3,52($fp)
sw $3,0($2)
lw $2,76($fp)
lw $3,44($fp)
mult $2,$3
mflo $2
lw $3,52($fp)
addu $2,$2,$3
move $3,$2
sll $2,$3,3
lw $3,72($fp)
addu $2,$2,$3
l.d $f0,0($2)
mtc1 $0,$f2
mtc1 $0,$f3
c.eq.d $f0,$f2
bc1t $L68
lw $2,52($fp)
lw $3,44($fp)
beq $2,$3,$L69
lw $2,76($fp)
lw $3,44($fp)
mult $2,$3
mflo $2
lw $3,52($fp)
addu $2,$2,$3
move $3,$2
sll $2,$3,3
lw $3,72($fp)
addu $2,$2,$3
l.d $f0,0($2)
s.d $f0,32($fp)
lw $2,76($fp)
lw $3,44($fp)
mult $2,$3
mflo $2
lw $3,52($fp)
addu $2,$2,$3
move $3,$2
sll $2,$3,3
lw $3,72($fp)
addu $2,$2,$3
lw $3,76($fp)
lw $4,44($fp)
mult $3,$4
mflo $3
lw $4,44($fp)
addu $3,$3,$4
move $4,$3
sll $3,$4,3
lw $4,72($fp)
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
lw $2,76($fp)
lw $3,44($fp)
mult $2,$3
mflo $2
lw $3,44($fp)
addu $2,$2,$3
move $3,$2
sll $2,$3,3
lw $3,72($fp)
addu $2,$2,$3
l.d $f0,32($fp)
s.d $f0,0($2)
$L69:
lw $2,76($fp)
lw $3,44($fp)
mult $2,$3
mflo $2
lw $3,44($fp)
addu $2,$2,$3
move $3,$2
sll $2,$3,3
lw $3,72($fp)
addu $2,$2,$3
l.d $f0,$LC21
l.d $f2,0($2)
div.d $f0,$f0,$f2
s.d $f0,32($fp)
lw $3,80($fp)
subu $2,$3,1
lw $3,44($fp)
subu $2,$2,$3
lw $3,76($fp)
lw $4,44($fp)
mult $3,$4
mflo $3
lw $4,44($fp)
addu $3,$3,$4
move $4,$3
sll $3,$4,3
addu $4,$3,8
lw $3,72($fp)
addu $4,$3,$4
sw $4,16($sp)
li $3,0x00000001 # 1
sw $3,20($sp)
move $4,$2
dlw $6,32($fp)
jal dscal
lw $2,48($fp)
sw $2,40($fp)
$L70:
lw $2,40($fp)
lw $3,80($fp)
slt $2,$2,$3
bne $2,$0,$L73
j $L71
$L73:
lw $2,76($fp)
lw $3,40($fp)
mult $2,$3
mflo $2
lw $3,52($fp)
addu $2,$2,$3
move $3,$2
sll $2,$3,3
lw $3,72($fp)
addu $2,$2,$3
l.d $f0,0($2)
s.d $f0,32($fp)
lw $2,52($fp)
lw $3,44($fp)
beq $2,$3,$L74
lw $2,76($fp)
lw $3,40($fp)
mult $2,$3
mflo $2
lw $3,52($fp)
addu $2,$2,$3
move $3,$2
sll $2,$3,3
lw $3,72($fp)
addu $2,$2,$3
lw $3,76($fp)
lw $4,40($fp)
mult $3,$4
mflo $3
lw $4,44($fp)
addu $3,$3,$4
move $4,$3
sll $3,$4,3
lw $4,72($fp)
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
lw $2,76($fp)
lw $3,40($fp)
mult $2,$3
mflo $2
lw $3,44($fp)
addu $2,$2,$3
move $3,$2
sll $2,$3,3
lw $3,72($fp)
addu $2,$2,$3
l.d $f0,32($fp)
s.d $f0,0($2)
$L74:
lw $3,80($fp)
subu $2,$3,1
lw $3,44($fp)
subu $2,$2,$3
lw $3,76($fp)
lw $4,44($fp)
mult $3,$4
mflo $3
lw $4,44($fp)
addu $3,$3,$4
move $4,$3
sll $3,$4,3
addu $4,$3,8
lw $3,72($fp)
addu $4,$3,$4
sw $4,16($sp)
li $3,0x00000001 # 1
sw $3,20($sp)
lw $3,76($fp)
lw $4,40($fp)
mult $3,$4
mflo $3
lw $4,44($fp)
addu $3,$3,$4
move $4,$3
sll $3,$4,3
addu $4,$3,8
lw $3,72($fp)
addu $4,$3,$4
sw $4,24($sp)
li $3,0x00000001 # 1
sw $3,28($sp)
move $4,$2
dlw $6,32($fp)
jal daxpy
$L72:
lw $3,40($fp)
addu $2,$3,1
move $3,$2
sw $3,40($fp)
j $L70
$L71:
j $L75
$L68:
lw $2,88($fp)
lw $3,44($fp)
sw $3,0($2)
$L75:
$L66:
lw $3,44($fp)
addu $2,$3,1
move $3,$2
sw $3,44($fp)
j $L64
$L65:
$L63:
lw $2,80($fp)
move $3,$2
sll $2,$3,2
lw $4,84($fp)
addu $3,$2,$4
subu $2,$3,4
lw $3,80($fp)
subu $4,$3,1
sw $4,0($2)
lw $3,80($fp)
subu $2,$3,1
lw $3,76($fp)
mult $2,$3
mflo $2
lw $3,80($fp)
addu $2,$2,$3
move $3,$2
sll $2,$3,3
lw $3,72($fp)
addu $2,$2,$3
subu $3,$2,8
l.d $f0,0($3)
mtc1 $0,$f2
mtc1 $0,$f3
c.eq.d $f0,$f2
bc1f $L76
lw $2,88($fp)
lw $3,80($fp)
subu $4,$3,1
sw $4,0($2)
$L76:
$L62:
move $sp,$fp # sp not trusted here
lw $31,68($sp)
lw $fp,64($sp)
addu $sp,$sp,72
j $31
.end dgefa
.loc 1 455
.ent dgesl
dgesl:
.frame $fp,64,$31 # vars= 24, regs= 2/0, args= 32, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,64
sw $31,60($sp)
sw $fp,56($sp)
move $fp,$sp
sw $4,64($fp)
sw $5,68($fp)
sw $6,72($fp)
sw $7,76($fp)
lw $2,72($fp)
subu $3,$2,1
sw $3,52($fp)
lw $2,84($fp)
bne $2,$0,$L78
lw $2,52($fp)
blez $2,$L79
sw $0,40($fp)
$L80:
lw $2,40($fp)
lw $3,52($fp)
slt $2,$2,$3
bne $2,$0,$L83
j $L81
$L83:
lw $2,40($fp)
move $3,$2
sll $2,$3,2
lw $3,76($fp)
addu $2,$2,$3
lw $3,0($2)
sw $3,48($fp)
lw $2,48($fp)
move $3,$2
sll $2,$3,3
lw $3,80($fp)
addu $2,$2,$3
l.d $f0,0($2)
s.d $f0,32($fp)
lw $2,48($fp)
lw $3,40($fp)
beq $2,$3,$L84
lw $2,48($fp)
move $3,$2
sll $2,$3,3
lw $3,80($fp)
addu $2,$2,$3
lw $3,40($fp)
move $4,$3
sll $3,$4,3
lw $4,80($fp)
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
lw $2,40($fp)
move $3,$2
sll $2,$3,3
lw $3,80($fp)
addu $2,$2,$3
l.d $f0,32($fp)
s.d $f0,0($2)
$L84:
lw $3,72($fp)
subu $2,$3,1
lw $3,40($fp)
subu $2,$2,$3
lw $3,68($fp)
lw $4,40($fp)
mult $3,$4
mflo $3
lw $4,40($fp)
addu $3,$3,$4
move $4,$3
sll $3,$4,3
addu $4,$3,8
lw $3,64($fp)
addu $4,$3,$4
sw $4,16($sp)
li $3,0x00000001 # 1
sw $3,20($sp)
lw $3,40($fp)
move $4,$3
sll $3,$4,3
addu $4,$3,8
lw $3,80($fp)
addu $4,$3,$4
sw $4,24($sp)
li $3,0x00000001 # 1
sw $3,28($sp)
move $4,$2
dlw $6,32($fp)
jal daxpy
$L82:
lw $3,40($fp)
addu $2,$3,1
move $3,$2
sw $3,40($fp)
j $L80
$L81:
$L79:
.set noreorder
nop
.set reorder
sw $0,44($fp)
$L85:
lw $2,44($fp)
lw $3,72($fp)
slt $2,$2,$3
bne $2,$0,$L88
j $L86
$L88:
lw $3,72($fp)
subu $2,$3,1
lw $3,44($fp)
subu $2,$2,$3
sw $2,40($fp)
lw $2,40($fp)
move $3,$2
sll $2,$3,3
lw $3,80($fp)
addu $2,$2,$3
lw $3,40($fp)
move $4,$3
sll $3,$4,3
lw $4,80($fp)
addu $3,$3,$4
lw $4,68($fp)
lw $5,40($fp)
mult $4,$5
mflo $4
lw $5,40($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,64($fp)
addu $4,$4,$5
l.d $f0,0($3)
l.d $f2,0($4)
div.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,40($fp)
move $3,$2
sll $2,$3,3
lw $3,80($fp)
addu $2,$2,$3
l.d $f0,0($2)
neg.d $f2,$f0
s.d $f2,32($fp)
lw $2,68($fp)
lw $3,40($fp)
mult $2,$3
mflo $2
move $3,$2
sll $2,$3,3
lw $3,64($fp)
addu $2,$3,$2
sw $2,16($sp)
li $2,0x00000001 # 1
sw $2,20($sp)
lw $2,80($fp)
sw $2,24($sp)
li $2,0x00000001 # 1
sw $2,28($sp)
lw $4,40($fp)
dlw $6,32($fp)
jal daxpy
$L87:
lw $3,44($fp)
addu $2,$3,1
move $3,$2
sw $3,44($fp)
j $L85
$L86:
j $L89
$L78:
sw $0,40($fp)
$L90:
lw $2,40($fp)
lw $3,72($fp)
slt $2,$2,$3
bne $2,$0,$L93
j $L91
$L93:
lw $2,68($fp)
lw $3,40($fp)
mult $2,$3
mflo $2
move $3,$2
sll $2,$3,3
lw $3,64($fp)
addu $2,$2,$3
li $3,0x00000001 # 1
sw $3,16($sp)
lw $4,40($fp)
move $5,$2
li $6,0x00000001 # 1
lw $7,80($fp)
jal ddot
s.d $f0,32($fp)
lw $2,40($fp)
move $3,$2
sll $2,$3,3
lw $3,80($fp)
addu $2,$2,$3
lw $3,40($fp)
move $4,$3
sll $3,$4,3
lw $4,80($fp)
addu $3,$3,$4
l.d $f0,0($3)
l.d $f2,32($fp)
sub.d $f0,$f0,$f2
lw $3,68($fp)
lw $4,40($fp)
mult $3,$4
mflo $3
lw $4,40($fp)
addu $3,$3,$4
move $4,$3
sll $3,$4,3
lw $4,64($fp)
addu $3,$3,$4
l.d $f2,0($3)
div.d $f0,$f0,$f2
s.d $f0,0($2)
$L92:
lw $3,40($fp)
addu $2,$3,1
move $3,$2
sw $3,40($fp)
j $L90
$L91:
lw $2,52($fp)
blez $2,$L94
li $2,0x00000001 # 1
sw $2,44($fp)
$L95:
lw $2,44($fp)
lw $3,52($fp)
slt $2,$2,$3
bne $2,$0,$L98
j $L96
$L98:
lw $3,72($fp)
subu $2,$3,1
lw $3,44($fp)
subu $2,$2,$3
sw $2,40($fp)
lw $3,72($fp)
subu $2,$3,1
lw $3,40($fp)
subu $2,$2,$3
lw $3,68($fp)
lw $4,40($fp)
mult $3,$4
mflo $3
lw $4,40($fp)
addu $3,$3,$4
move $4,$3
sll $3,$4,3
addu $4,$3,8
lw $5,64($fp)
addu $3,$4,$5
lw $4,40($fp)
move $5,$4
sll $4,$5,3
addu $5,$4,8
lw $4,80($fp)
addu $7,$5,$4
li $4,0x00000001 # 1
sw $4,16($sp)
move $4,$2
move $5,$3
li $6,0x00000001 # 1
jal ddot
lw $2,40($fp)
move $3,$2
sll $2,$3,3
lw $3,80($fp)
addu $2,$2,$3
lw $3,40($fp)
move $4,$3
sll $3,$4,3
lw $4,80($fp)
addu $3,$3,$4
l.d $f2,0($3)
add.d $f0,$f2,$f0
s.d $f0,0($2)
lw $2,40($fp)
move $3,$2
sll $2,$3,2
lw $3,76($fp)
addu $2,$2,$3
lw $3,0($2)
sw $3,48($fp)
lw $2,48($fp)
lw $3,40($fp)
beq $2,$3,$L99
lw $2,48($fp)
move $3,$2
sll $2,$3,3
lw $3,80($fp)
addu $2,$2,$3
l.d $f0,0($2)
s.d $f0,32($fp)
lw $2,48($fp)
move $3,$2
sll $2,$3,3
lw $3,80($fp)
addu $2,$2,$3
lw $3,40($fp)
move $4,$3
sll $3,$4,3
lw $4,80($fp)
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
lw $2,40($fp)
move $3,$2
sll $2,$3,3
lw $3,80($fp)
addu $2,$2,$3
l.d $f0,32($fp)
s.d $f0,0($2)
$L99:
$L97:
lw $3,44($fp)
addu $2,$3,1
move $3,$2
sw $3,44($fp)
j $L95
$L96:
$L94:
$L89:
$L77:
move $sp,$fp # sp not trusted here
lw $31,60($sp)
lw $fp,56($sp)
addu $sp,$sp,64
j $31
.end dgesl
.loc 1 585
.ent daxpy
daxpy:
.frame $fp,32,$31 # vars= 24, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,32
sw $fp,24($sp)
move $fp,$sp
sw $4,32($fp)
dsw $6,40($fp)
lw $2,32($fp)
bgtz $2,$L101
j $L100
$L101:
l.d $f0,40($fp)
mtc1 $0,$f2
mtc1 $0,$f3
c.eq.d $f0,$f2
bc1f $L102
j $L100
$L102:
lw $2,52($fp)
li $3,0x00000001 # 1
bne $2,$3,$L104
lw $2,60($fp)
li $3,0x00000001 # 1
bne $2,$3,$L104
j $L103
$L104:
li $2,0x00000001 # 1
sw $2,4($fp)
li $2,0x00000001 # 1
sw $2,8($fp)
lw $2,52($fp)
bgez $2,$L105
lw $3,32($fp)
subu $2,$0,$3
addu $3,$2,1
lw $4,52($fp)
mult $3,$4
mflo $2
addu $3,$2,1
sw $3,4($fp)
$L105:
lw $2,60($fp)
bgez $2,$L106
lw $3,32($fp)
subu $2,$0,$3
addu $3,$2,1
lw $4,60($fp)
mult $3,$4
mflo $2
addu $3,$2,1
sw $3,8($fp)
$L106:
.set noreorder
nop
.set reorder
sw $0,0($fp)
$L107:
lw $2,0($fp)
lw $3,32($fp)
slt $2,$2,$3
bne $2,$0,$L110
j $L108
$L110:
lw $2,8($fp)
move $3,$2
sll $2,$3,3
lw $3,56($fp)
addu $2,$2,$3
lw $3,8($fp)
move $4,$3
sll $3,$4,3
lw $4,56($fp)
addu $3,$3,$4
lw $4,4($fp)
move $5,$4
sll $4,$5,3
lw $5,48($fp)
addu $4,$4,$5
l.d $f0,40($fp)
l.d $f2,0($4)
mul.d $f0,$f0,$f2
l.d $f2,0($3)
add.d $f0,$f2,$f0
s.d $f0,0($2)
lw $2,4($fp)
lw $3,52($fp)
addu $2,$2,$3
sw $2,4($fp)
lw $2,8($fp)
lw $3,60($fp)
addu $2,$2,$3
sw $2,8($fp)
$L109:
lw $3,0($fp)
addu $2,$3,1
move $3,$2
sw $3,0($fp)
j $L107
$L108:
j $L100
$L103:
lw $2,32($fp)
move $3,$2
bgez $3,$L111
addu $3,$3,3
$L111:
sra $3,$3,2
move $4,$3
sll $3,$4,2
subu $2,$2,$3
sw $2,12($fp)
lw $2,12($fp)
beq $2,$0,$L112
sw $0,0($fp)
$L113:
lw $2,0($fp)
lw $3,12($fp)
slt $2,$2,$3
bne $2,$0,$L116
j $L114
$L116:
lw $2,0($fp)
move $3,$2
sll $2,$3,3
lw $3,56($fp)
addu $2,$2,$3
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,56($fp)
addu $3,$3,$4
lw $4,0($fp)
move $5,$4
sll $4,$5,3
lw $5,48($fp)
addu $4,$4,$5
l.d $f0,40($fp)
l.d $f2,0($4)
mul.d $f0,$f0,$f2
l.d $f2,0($3)
add.d $f0,$f2,$f0
s.d $f0,0($2)
$L115:
lw $3,0($fp)
addu $2,$3,1
move $3,$2
sw $3,0($fp)
j $L113
$L114:
lw $2,32($fp)
slt $3,$2,4
bne $3,$0,$L100
$L117:
$L112:
.set noreorder
nop
.set reorder
lw $2,12($fp)
sw $2,0($fp)
$L118:
lw $2,0($fp)
lw $3,32($fp)
slt $2,$2,$3
bne $2,$0,$L121
j $L119
$L121:
lw $2,0($fp)
move $3,$2
sll $2,$3,3
lw $3,56($fp)
addu $2,$2,$3
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,56($fp)
addu $3,$3,$4
lw $4,0($fp)
move $5,$4
sll $4,$5,3
lw $5,48($fp)
addu $4,$4,$5
l.d $f0,40($fp)
l.d $f2,0($4)
mul.d $f0,$f0,$f2
l.d $f2,0($3)
add.d $f0,$f2,$f0
s.d $f0,0($2)
lw $2,0($fp)
move $3,$2
sll $2,$3,3
lw $4,56($fp)
addu $3,$2,$4
addu $2,$3,8
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,56($fp)
addu $4,$3,$5
addu $3,$4,8
lw $4,0($fp)
move $5,$4
sll $4,$5,3
lw $5,48($fp)
addu $4,$4,$5
addu $5,$4,8
l.d $f0,40($fp)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
l.d $f2,0($3)
add.d $f0,$f2,$f0
s.d $f0,0($2)
lw $2,0($fp)
move $3,$2
sll $2,$3,3
lw $4,56($fp)
addu $3,$2,$4
addu $2,$3,16
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,56($fp)
addu $4,$3,$5
addu $3,$4,16
lw $4,0($fp)
move $5,$4
sll $4,$5,3
lw $5,48($fp)
addu $4,$4,$5
addu $5,$4,16
l.d $f0,40($fp)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
l.d $f2,0($3)
add.d $f0,$f2,$f0
s.d $f0,0($2)
lw $2,0($fp)
move $3,$2
sll $2,$3,3
lw $4,56($fp)
addu $3,$2,$4
addu $2,$3,24
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,56($fp)
addu $4,$3,$5
addu $3,$4,24
lw $4,0($fp)
move $5,$4
sll $4,$5,3
lw $5,48($fp)
addu $4,$4,$5
addu $5,$4,24
l.d $f0,40($fp)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
l.d $f2,0($3)
add.d $f0,$f2,$f0
s.d $f0,0($2)
$L120:
lw $2,0($fp)
addu $3,$2,4
sw $3,0($fp)
j $L118
$L119:
$L100:
move $sp,$fp # sp not trusted here
lw $fp,24($sp)
addu $sp,$sp,32
j $31
.end daxpy
.loc 1 641
.ent ddot
ddot:
.frame $fp,40,$31 # vars= 32, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,40
sw $fp,32($sp)
move $fp,$sp
sw $4,40($fp)
sw $5,44($fp)
sw $6,48($fp)
sw $7,52($fp)
dsz 0($fp)
lw $2,40($fp)
bgtz $2,$L123
mtc1 $0,$f0
mtc1 $0,$f1
j $L122
$L123:
lw $2,48($fp)
li $3,0x00000001 # 1
bne $2,$3,$L125
lw $2,56($fp)
li $3,0x00000001 # 1
bne $2,$3,$L125
j $L124
$L125:
sw $0,12($fp)
sw $0,16($fp)
lw $2,48($fp)
bgez $2,$L126
lw $3,40($fp)
subu $2,$0,$3
addu $3,$2,1
lw $2,48($fp)
mult $3,$2
mflo $3
sw $3,12($fp)
$L126:
lw $2,56($fp)
bgez $2,$L127
lw $3,40($fp)
subu $2,$0,$3
addu $3,$2,1
lw $2,56($fp)
mult $3,$2
mflo $3
sw $3,16($fp)
$L127:
.set noreorder
nop
.set reorder
sw $0,8($fp)
$L128:
lw $2,8($fp)
lw $3,40($fp)
slt $2,$2,$3
bne $2,$0,$L131
j $L129
$L131:
lw $2,12($fp)
move $3,$2
sll $2,$3,3
lw $3,44($fp)
addu $2,$2,$3
lw $3,16($fp)
move $4,$3
sll $3,$4,3
lw $4,52($fp)
addu $3,$3,$4
l.d $f0,0($2)
l.d $f2,0($3)
mul.d $f0,$f0,$f2
l.d $f2,0($fp)
add.d $f0,$f2,$f0
s.d $f0,0($fp)
lw $2,12($fp)
lw $3,48($fp)
addu $2,$2,$3
sw $2,12($fp)
lw $2,16($fp)
lw $3,56($fp)
addu $2,$2,$3
sw $2,16($fp)
$L130:
lw $3,8($fp)
addu $2,$3,1
move $3,$2
sw $3,8($fp)
j $L128
$L129:
l.d $f0,0($fp)
j $L122
$L124:
lw $2,40($fp)
li $6,0x66666667 # 1717986919
mult $2,$6
mfhi $5
mflo $4
srl $6,$5,0
move $7,$0
sra $3,$6,1
sra $4,$2,31
subu $3,$3,$4
move $5,$3
sll $4,$5,2
addu $4,$4,$3
subu $2,$2,$4
sw $2,20($fp)
lw $2,20($fp)
beq $2,$0,$L132
sw $0,8($fp)
$L133:
lw $2,8($fp)
lw $3,20($fp)
slt $2,$2,$3
bne $2,$0,$L136
j $L134
$L136:
lw $2,8($fp)
move $3,$2
sll $2,$3,3
lw $3,44($fp)
addu $2,$2,$3
lw $3,8($fp)
move $4,$3
sll $3,$4,3
lw $4,52($fp)
addu $3,$3,$4
l.d $f0,0($2)
l.d $f2,0($3)
mul.d $f0,$f0,$f2
l.d $f2,0($fp)
add.d $f0,$f2,$f0
s.d $f0,0($fp)
$L135:
lw $3,8($fp)
addu $2,$3,1
move $3,$2
sw $3,8($fp)
j $L133
$L134:
lw $2,40($fp)
slt $3,$2,5
beq $3,$0,$L137
l.d $f0,0($fp)
j $L122
$L137:
$L132:
.set noreorder
nop
.set reorder
lw $2,20($fp)
sw $2,8($fp)
$L138:
lw $2,8($fp)
lw $3,40($fp)
slt $2,$2,$3
bne $2,$0,$L141
j $L139
$L141:
lw $2,8($fp)
move $3,$2
sll $2,$3,3
lw $3,44($fp)
addu $2,$2,$3
lw $3,8($fp)
move $4,$3
sll $3,$4,3
lw $4,52($fp)
addu $3,$3,$4
l.d $f0,0($2)
l.d $f2,0($3)
mul.d $f0,$f0,$f2
l.d $f2,0($fp)
add.d $f0,$f0,$f2
lw $2,8($fp)
move $3,$2
sll $2,$3,3
lw $4,44($fp)
addu $3,$2,$4
addu $2,$3,8
lw $3,8($fp)
move $4,$3
sll $3,$4,3
lw $4,52($fp)
addu $3,$3,$4
addu $4,$3,8
l.d $f2,0($2)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $2,8($fp)
move $3,$2
sll $2,$3,3
lw $4,44($fp)
addu $3,$2,$4
addu $2,$3,16
lw $3,8($fp)
move $4,$3
sll $3,$4,3
lw $4,52($fp)
addu $3,$3,$4
addu $4,$3,16
l.d $f2,0($2)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $2,8($fp)
move $3,$2
sll $2,$3,3
lw $4,44($fp)
addu $3,$2,$4
addu $2,$3,24
lw $3,8($fp)
move $4,$3
sll $3,$4,3
lw $4,52($fp)
addu $3,$3,$4
addu $4,$3,24
l.d $f2,0($2)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $2,8($fp)
move $3,$2
sll $2,$3,3
lw $4,44($fp)
addu $3,$2,$4
addu $2,$3,32
lw $3,8($fp)
move $4,$3
sll $3,$4,3
lw $4,52($fp)
addu $3,$3,$4
addu $4,$3,32
l.d $f2,0($2)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
s.d $f0,0($fp)
$L140:
lw $2,8($fp)
addu $3,$2,5
sw $3,8($fp)
j $L138
$L139:
l.d $f0,0($fp)
j $L122
$L122:
move $sp,$fp # sp not trusted here
lw $fp,32($sp)
addu $sp,$sp,40
j $31
.end ddot
.loc 1 699
.ent dscal
dscal:
.frame $fp,24,$31 # vars= 16, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,24
sw $fp,16($sp)
move $fp,$sp
sw $4,24($fp)
dsw $6,32($fp)
lw $2,24($fp)
bgtz $2,$L143
j $L142
$L143:
lw $2,44($fp)
li $3,0x00000001 # 1
beq $2,$3,$L144
lw $2,24($fp)
lw $3,44($fp)
mult $2,$3
mflo $2
sw $2,12($fp)
sw $0,0($fp)
$L145:
lw $2,0($fp)
lw $3,12($fp)
slt $2,$2,$3
bne $2,$0,$L148
j $L146
$L148:
lw $2,0($fp)
move $3,$2
sll $2,$3,3
lw $3,40($fp)
addu $2,$2,$3
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,40($fp)
addu $3,$3,$4
l.d $f0,32($fp)
l.d $f2,0($3)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
$L147:
lw $2,0($fp)
lw $3,44($fp)
addu $2,$2,$3
sw $2,0($fp)
j $L145
$L146:
j $L142
$L144:
lw $2,24($fp)
li $6,0x66666667 # 1717986919
mult $2,$6
mfhi $5
mflo $4
srl $6,$5,0
move $7,$0
sra $3,$6,1
sra $4,$2,31
subu $3,$3,$4
move $5,$3
sll $4,$5,2
addu $4,$4,$3
subu $2,$2,$4
sw $2,4($fp)
lw $2,4($fp)
beq $2,$0,$L149
sw $0,0($fp)
$L150:
lw $2,0($fp)
lw $3,4($fp)
slt $2,$2,$3
bne $2,$0,$L153
j $L151
$L153:
lw $2,0($fp)
move $3,$2
sll $2,$3,3
lw $3,40($fp)
addu $2,$2,$3
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,40($fp)
addu $3,$3,$4
l.d $f0,32($fp)
l.d $f2,0($3)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
$L152:
lw $3,0($fp)
addu $2,$3,1
move $3,$2
sw $3,0($fp)
j $L150
$L151:
lw $2,24($fp)
slt $3,$2,5
bne $3,$0,$L142
$L154:
$L149:
.set noreorder
nop
.set reorder
lw $2,4($fp)
sw $2,0($fp)
$L155:
lw $2,0($fp)
lw $3,24($fp)
slt $2,$2,$3
bne $2,$0,$L158
j $L156
$L158:
lw $2,0($fp)
move $3,$2
sll $2,$3,3
lw $3,40($fp)
addu $2,$2,$3
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,40($fp)
addu $3,$3,$4
l.d $f0,32($fp)
l.d $f2,0($3)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,0($fp)
move $3,$2
sll $2,$3,3
lw $4,40($fp)
addu $3,$2,$4
addu $2,$3,8
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,40($fp)
addu $3,$3,$4
addu $4,$3,8
l.d $f0,32($fp)
l.d $f2,0($4)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,0($fp)
move $3,$2
sll $2,$3,3
lw $4,40($fp)
addu $3,$2,$4
addu $2,$3,16
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,40($fp)
addu $3,$3,$4
addu $4,$3,16
l.d $f0,32($fp)
l.d $f2,0($4)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,0($fp)
move $3,$2
sll $2,$3,3
lw $4,40($fp)
addu $3,$2,$4
addu $2,$3,24
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,40($fp)
addu $3,$3,$4
addu $4,$3,24
l.d $f0,32($fp)
l.d $f2,0($4)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,0($fp)
move $3,$2
sll $2,$3,3
lw $4,40($fp)
addu $3,$2,$4
addu $2,$3,32
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,40($fp)
addu $3,$3,$4
addu $4,$3,32
l.d $f0,32($fp)
l.d $f2,0($4)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
$L157:
lw $2,0($fp)
addu $3,$2,5
sw $3,0($fp)
j $L155
$L156:
$L142:
move $sp,$fp # sp not trusted here
lw $fp,16($sp)
addu $sp,$sp,24
j $31
.end dscal
.loc 1 748
.ent idamax
idamax:
.frame $fp,32,$31 # vars= 24, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,32
sw $fp,24($sp)
move $fp,$sp
sw $4,32($fp)
sw $5,36($fp)
sw $6,40($fp)
lw $2,32($fp)
bgtz $2,$L160
li $2,-1 # 0xffffffff
j $L159
$L160:
lw $2,32($fp)
li $3,0x00000001 # 1
bne $2,$3,$L161
move $2,$0
j $L159
$L161:
lw $2,40($fp)
li $3,0x00000001 # 1
beq $2,$3,$L162
li $2,0x00000001 # 1
sw $2,12($fp)
lw $2,36($fp)
l.d $f0,0($2)
abs.d $f2,$f0
s.d $f2,0($fp)
lw $2,12($fp)
lw $3,40($fp)
addu $2,$2,$3
sw $2,12($fp)
li $2,0x00000001 # 1
sw $2,8($fp)
$L163:
lw $2,8($fp)
lw $3,32($fp)
slt $2,$2,$3
bne $2,$0,$L166
j $L164
$L166:
lw $2,12($fp)
move $3,$2
sll $2,$3,3
lw $3,36($fp)
addu $2,$2,$3
l.d $f2,0($2)
abs.d $f0,$f2
l.d $f2,0($fp)
c.lt.d $f2,$f0
bc1f $L167
lw $2,8($fp)
sw $2,16($fp)
lw $2,12($fp)
move $3,$2
sll $2,$3,3
lw $3,36($fp)
addu $2,$2,$3
l.d $f0,0($2)
abs.d $f2,$f0
s.d $f2,0($fp)
$L167:
lw $2,12($fp)
lw $3,40($fp)
addu $2,$2,$3
sw $2,12($fp)
$L165:
lw $3,8($fp)
addu $2,$3,1
move $3,$2
sw $3,8($fp)
j $L163
$L164:
j $L168
$L162:
sw $0,16($fp)
lw $2,36($fp)
l.d $f0,0($2)
abs.d $f2,$f0
s.d $f2,0($fp)
li $2,0x00000001 # 1
sw $2,8($fp)
$L169:
lw $2,8($fp)
lw $3,32($fp)
slt $2,$2,$3
bne $2,$0,$L172
j $L170
$L172:
lw $2,8($fp)
move $3,$2
sll $2,$3,3
lw $3,36($fp)
addu $2,$2,$3
l.d $f2,0($2)
abs.d $f0,$f2
l.d $f2,0($fp)
c.lt.d $f2,$f0
bc1f $L173
lw $2,8($fp)
sw $2,16($fp)
lw $2,8($fp)
move $3,$2
sll $2,$3,3
lw $3,36($fp)
addu $2,$2,$3
l.d $f0,0($2)
abs.d $f2,$f0
s.d $f2,0($fp)
$L173:
$L171:
lw $3,8($fp)
addu $2,$3,1
move $3,$2
sw $3,8($fp)
j $L169
$L170:
$L168:
lw $2,16($fp)
j $L159
$L159:
move $sp,$fp # sp not trusted here
lw $fp,24($sp)
addu $sp,$sp,32
j $31
.end idamax
.loc 1 789
.ent epslon
epslon:
.frame $fp,40,$31 # vars= 32, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,40
sw $fp,32($sp)
move $fp,$sp
s.d $f12,40($fp)
l.d $f0,$LC22
s.d $f0,0($fp)
dsz 24($fp)
$L175:
l.d $f0,24($fp)
mtc1 $0,$f2
mtc1 $0,$f3
c.eq.d $f0,$f2
bc1t $L177
j $L176
$L177:
l.d $f0,0($fp)
l.d $f2,$LC23
sub.d $f0,$f0,$f2
s.d $f0,8($fp)
l.d $f0,8($fp)
l.d $f2,8($fp)
add.d $f0,$f0,$f2
l.d $f2,8($fp)
add.d $f0,$f0,$f2
s.d $f0,16($fp)
l.d $f0,16($fp)
l.d $f2,$LC23
sub.d $f0,$f0,$f2
abs.d $f2,$f0
s.d $f2,24($fp)
j $L175
$L176:
l.d $f2,40($fp)
abs.d $f0,$f2
l.d $f4,24($fp)
mul.d $f2,$f0,$f4
mov.d $f0,$f2
j $L174
$L174:
move $sp,$fp # sp not trusted here
lw $fp,32($sp)
addu $sp,$sp,40
j $31
.end epslon
.loc 1 836
.ent dmxpy
dmxpy:
.frame $fp,24,$31 # vars= 16, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,24
sw $fp,16($sp)
move $fp,$sp
sw $4,24($fp)
sw $5,28($fp)
sw $6,32($fp)
sw $7,36($fp)
lw $2,32($fp)
sra $3,$2,31
srl $4,$3,31
addu $5,$2,$4
sra $3,$5,1
move $4,$3
sll $3,$4,1
subu $2,$2,$3
sw $2,0($fp)
lw $2,0($fp)
blez $2,$L179
lw $2,0($fp)
subu $3,$2,1
sw $3,0($fp)
sw $0,4($fp)
$L180:
lw $2,4($fp)
lw $3,24($fp)
slt $2,$2,$3
bne $2,$0,$L183
j $L181
$L183:
lw $2,4($fp)
move $3,$2
sll $2,$3,3
lw $3,28($fp)
addu $2,$2,$3
lw $3,4($fp)
move $4,$3
sll $3,$4,3
lw $4,28($fp)
addu $3,$3,$4
lw $4,0($fp)
move $5,$4
sll $4,$5,3
lw $5,40($fp)
addu $4,$4,$5
lw $5,36($fp)
lw $6,0($fp)
mult $5,$6
mflo $5
lw $6,4($fp)
addu $5,$5,$6
move $6,$5
sll $5,$6,3
lw $6,44($fp)
addu $5,$5,$6
l.d $f0,0($4)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
l.d $f2,0($3)
add.d $f0,$f2,$f0
s.d $f0,0($2)
$L182:
lw $3,4($fp)
addu $2,$3,1
move $3,$2
sw $3,4($fp)
j $L180
$L181:
$L179:
lw $2,32($fp)
move $3,$2
bgez $3,$L184
addu $3,$3,3
$L184:
sra $3,$3,2
move $4,$3
sll $3,$4,2
subu $2,$2,$3
sw $2,0($fp)
lw $2,0($fp)
slt $3,$2,2
bne $3,$0,$L185
lw $2,0($fp)
subu $3,$2,1
sw $3,0($fp)
sw $0,4($fp)
$L186:
lw $2,4($fp)
lw $3,24($fp)
slt $2,$2,$3
bne $2,$0,$L189
j $L187
$L189:
lw $2,4($fp)
move $3,$2
sll $2,$3,3
lw $3,28($fp)
addu $2,$2,$3
lw $3,4($fp)
move $4,$3
sll $3,$4,3
lw $4,28($fp)
addu $3,$3,$4
lw $4,0($fp)
move $5,$4
sll $4,$5,3
lw $6,40($fp)
addu $5,$4,$6
subu $4,$5,8
lw $6,0($fp)
subu $5,$6,1
lw $6,36($fp)
mult $5,$6
mflo $5
lw $6,4($fp)
addu $5,$5,$6
move $6,$5
sll $5,$6,3
lw $6,44($fp)
addu $5,$5,$6
l.d $f0,0($4)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
l.d $f2,0($3)
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,40($fp)
addu $3,$3,$4
lw $4,36($fp)
lw $5,0($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
s.d $f0,0($2)
$L188:
lw $3,4($fp)
addu $2,$3,1
move $3,$2
sw $3,4($fp)
j $L186
$L187:
$L185:
lw $2,32($fp)
move $3,$2
bgez $3,$L190
addu $3,$3,7
$L190:
sra $3,$3,3
move $4,$3
sll $3,$4,3
subu $2,$2,$3
sw $2,0($fp)
lw $2,0($fp)
slt $3,$2,4
bne $3,$0,$L191
lw $2,0($fp)
subu $3,$2,1
sw $3,0($fp)
sw $0,4($fp)
$L192:
lw $2,4($fp)
lw $3,24($fp)
slt $2,$2,$3
bne $2,$0,$L195
j $L193
$L195:
lw $2,4($fp)
move $3,$2
sll $2,$3,3
lw $3,28($fp)
addu $2,$2,$3
lw $3,4($fp)
move $4,$3
sll $3,$4,3
lw $4,28($fp)
addu $3,$3,$4
lw $4,0($fp)
move $5,$4
sll $4,$5,3
lw $6,40($fp)
addu $5,$4,$6
subu $4,$5,24
lw $6,0($fp)
subu $5,$6,3
lw $6,36($fp)
mult $5,$6
mflo $5
lw $6,4($fp)
addu $5,$5,$6
move $6,$5
sll $5,$6,3
lw $6,44($fp)
addu $5,$5,$6
l.d $f0,0($4)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
l.d $f2,0($3)
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,16
lw $5,0($fp)
subu $4,$5,2
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,8
lw $5,0($fp)
subu $4,$5,1
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,40($fp)
addu $3,$3,$4
lw $4,36($fp)
lw $5,0($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
s.d $f0,0($2)
$L194:
lw $3,4($fp)
addu $2,$3,1
move $3,$2
sw $3,4($fp)
j $L192
$L193:
$L191:
lw $2,32($fp)
move $3,$2
bgez $3,$L196
addu $3,$3,15
$L196:
sra $3,$3,4
move $4,$3
sll $3,$4,4
subu $2,$2,$3
sw $2,0($fp)
lw $2,0($fp)
slt $3,$2,8
bne $3,$0,$L197
lw $2,0($fp)
subu $3,$2,1
sw $3,0($fp)
sw $0,4($fp)
$L198:
lw $2,4($fp)
lw $3,24($fp)
slt $2,$2,$3
bne $2,$0,$L201
j $L199
$L201:
lw $2,4($fp)
move $3,$2
sll $2,$3,3
lw $3,28($fp)
addu $2,$2,$3
lw $3,4($fp)
move $4,$3
sll $3,$4,3
lw $4,28($fp)
addu $3,$3,$4
lw $4,0($fp)
move $5,$4
sll $4,$5,3
lw $6,40($fp)
addu $5,$4,$6
subu $4,$5,56
lw $6,0($fp)
subu $5,$6,7
lw $6,36($fp)
mult $5,$6
mflo $5
lw $6,4($fp)
addu $5,$5,$6
move $6,$5
sll $5,$6,3
lw $6,44($fp)
addu $5,$5,$6
l.d $f0,0($4)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
l.d $f2,0($3)
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,48
lw $5,0($fp)
subu $4,$5,6
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,40
lw $5,0($fp)
subu $4,$5,5
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,32
lw $5,0($fp)
subu $4,$5,4
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,24
lw $5,0($fp)
subu $4,$5,3
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,16
lw $5,0($fp)
subu $4,$5,2
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,8
lw $5,0($fp)
subu $4,$5,1
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,40($fp)
addu $3,$3,$4
lw $4,36($fp)
lw $5,0($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
s.d $f0,0($2)
$L200:
lw $3,4($fp)
addu $2,$3,1
move $3,$2
sw $3,4($fp)
j $L198
$L199:
$L197:
lw $2,32($fp)
move $3,$2
bgez $3,$L202
addu $3,$3,15
$L202:
sra $3,$3,4
move $4,$3
sll $3,$4,4
subu $2,$2,$3
addu $3,$2,16
sw $3,8($fp)
lw $2,8($fp)
subu $3,$2,1
sw $3,0($fp)
$L203:
lw $2,0($fp)
lw $3,32($fp)
slt $2,$2,$3
bne $2,$0,$L206
j $L204
$L206:
sw $0,4($fp)
$L207:
lw $2,4($fp)
lw $3,24($fp)
slt $2,$2,$3
bne $2,$0,$L210
j $L208
$L210:
lw $2,4($fp)
move $3,$2
sll $2,$3,3
lw $3,28($fp)
addu $2,$2,$3
lw $3,4($fp)
move $4,$3
sll $3,$4,3
lw $4,28($fp)
addu $3,$3,$4
lw $4,0($fp)
move $5,$4
sll $4,$5,3
lw $6,40($fp)
addu $5,$4,$6
subu $4,$5,120
lw $6,0($fp)
subu $5,$6,15
lw $6,36($fp)
mult $5,$6
mflo $5
lw $6,4($fp)
addu $5,$5,$6
move $6,$5
sll $5,$6,3
lw $6,44($fp)
addu $5,$5,$6
l.d $f0,0($4)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
l.d $f2,0($3)
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,112
lw $5,0($fp)
subu $4,$5,14
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,104
lw $5,0($fp)
subu $4,$5,13
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,96
lw $5,0($fp)
subu $4,$5,12
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,88
lw $5,0($fp)
subu $4,$5,11
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,80
lw $5,0($fp)
subu $4,$5,10
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,72
lw $5,0($fp)
subu $4,$5,9
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,64
lw $5,0($fp)
subu $4,$5,8
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,56
lw $5,0($fp)
subu $4,$5,7
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,48
lw $5,0($fp)
subu $4,$5,6
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,40
lw $5,0($fp)
subu $4,$5,5
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,32
lw $5,0($fp)
subu $4,$5,4
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,24
lw $5,0($fp)
subu $4,$5,3
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,16
lw $5,0($fp)
subu $4,$5,2
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $5,40($fp)
addu $4,$3,$5
subu $3,$4,8
lw $5,0($fp)
subu $4,$5,1
lw $5,36($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,0($fp)
move $4,$3
sll $3,$4,3
lw $4,40($fp)
addu $3,$3,$4
lw $4,36($fp)
lw $5,0($fp)
mult $4,$5
mflo $4
lw $5,4($fp)
addu $4,$4,$5
move $5,$4
sll $4,$5,3
lw $5,44($fp)
addu $4,$4,$5
l.d $f2,0($3)
l.d $f4,0($4)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
s.d $f0,0($2)
$L209:
lw $3,4($fp)
addu $2,$3,1
move $3,$2
sw $3,4($fp)
j $L207
$L208:
$L205:
lw $2,0($fp)
addu $3,$2,16
sw $3,0($fp)
j $L203
$L204:
$L178:
move $sp,$fp # sp not trusted here
lw $fp,16($sp)
addu $sp,$sp,24
j $31
.end dmxpy
.loc 1 995
.ent dtime
dtime:
.frame $fp,32,$31 # vars= 8, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,32
sw $31,28($sp)
sw $fp,24($sp)
move $fp,$sp
move $4,$0
la $5,rusage
jal getrusage
l.s $f0,rusage
#nop
cvt.d.w $f0,$f0
s.d $f0,16($fp)
l.s $f0,rusage+4
#nop
cvt.d.w $f0,$f0
l.d $f2,$LC24
mul.d $f0,$f0,$f2
l.d $f2,16($fp)
add.d $f0,$f2,$f0
s.d $f0,16($fp)
l.d $f0,16($fp)
j $L211
$L211:
move $sp,$fp # sp not trusted here
lw $31,28($sp)
lw $fp,24($sp)
addu $sp,$sp,32
j $31
.end dtime
\ No newline at end of file
.file 1 "dhrystone.c"
# GNU C 2.7.2.3 [AL 1.1, MM 40, tma 0.1] SimpleScalar running sstrix compiled by GNU C
# Cc1 defaults:
# -mgas -mgpOPT
# Cc1 arguments (-G value = 8, Cpu = default, ISA = 1):
# -quiet -dumpbase -O0 -o
gcc2_compiled.:
__gnu_compiled_c:
.globl Version
.sdata
.align 2
Version:
.ascii "1.1\000"
.text
.align 2
.globl main
.rdata
.align 2
$LC0:
.ascii "DHRYSTONE PROGRAM, SOME STRING\000"
.align 2
$LC1:
.ascii "DHRYSTONE PROGRAM, 1'ST STRING\000"
.align 2
$LC2:
.ascii "DHRYSTONE PROGRAM, 2'ND STRING\000"
.align 2
$LC3:
.ascii "Dhrystone(%s) time for %ld passes = %ld\n\000"
.align 2
$LC4:
.ascii "This machine benchmarks at %ld dhrystones/second\n\000"
.text
.align 2
.globl Proc0
.align 2
.globl Proc1
.align 2
.globl Proc2
.align 2
.globl Proc3
.align 2
.globl Proc4
.align 2
.globl Proc5
.align 2
.globl Proc6
.align 2
.globl Proc7
.align 2
.globl Proc8
.align 2
.globl Func1
.align 2
.globl Func2
.align 2
.globl Func3
.comm IntGlob,4
.comm BoolGlob,4
.comm Char1Glob,1
.comm Char2Glob,1
.comm Array1Glob,204
.comm Array2Glob,10404
.comm PtrGlb,4
.comm PtrGlbNext,4
.text
.loc 1 414
.ent main
main:
.frame $fp,24,$31 # vars= 0, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,24
sw $31,20($sp)
sw $fp,16($sp)
move $fp,$sp
jal __main
jal Proc0
move $4,$0
jal exit
$L1:
move $sp,$fp # sp not trusted here
lw $31,20($sp)
lw $fp,16($sp)
addu $sp,$sp,24
j $31
.end main
.loc 1 432
.ent Proc0
Proc0:
.frame $fp,152,$31 # vars= 120, regs= 3/0, args= 16, extra= 0
.mask 0xc0010000,-8
.fmask 0x00000000,0
subu $sp,$sp,152
sw $31,144($sp)
sw $fp,140($sp)
sw $16,136($sp)
move $fp,$sp
addu $4,$fp,120
jal times
lw $2,120($fp)
sw $2,104($fp)
move $16,$0
$L3:
sltu $2,$16,5000
beq $2,$0,$L4
$L6:
$L5:
addu $16,$16,1
j $L3
$L4:
addu $4,$fp,120
jal times
lw $2,120($fp)
lw $3,104($fp)
subu $2,$2,$3
sw $2,112($fp)
li $4,0x00000030 # 48
jal malloc
sw $2,PtrGlbNext
li $4,0x00000030 # 48
jal malloc
sw $2,PtrGlb
lw $2,PtrGlb
lw $3,PtrGlbNext
sw $3,0($2)
lw $2,PtrGlb
sw $0,4($2)
lw $2,PtrGlb
li $3,0x00000002 # 2
sw $3,8($2)
lw $2,PtrGlb
li $3,0x00000028 # 40
sw $3,12($2)
lw $3,PtrGlb
addu $2,$3,16
move $4,$2
la $5,$LC0
jal strcpy
addu $2,$fp,40
move $4,$2
la $5,$LC1
jal strcpy
li $2,0x0000000a # 10
sw $2,Array2Glob+1660
addu $4,$fp,120
jal times
lw $2,120($fp)
sw $2,104($fp)
move $16,$0
$L7:
sltu $2,$16,5000
beq $2,$0,$L8
$L10:
jal Proc5
jal Proc4
li $2,0x00000002 # 2
sw $2,16($fp)
li $2,0x00000003 # 3
sw $2,20($fp)
addu $2,$fp,72
move $4,$2
la $5,$LC2
jal strcpy
li $2,0x00000001 # 1
sw $2,32($fp)
addu $2,$fp,40
addu $3,$fp,72
move $4,$2
move $5,$3
jal Func2
xori $3,$2,0x0000
sltu $2,$3,1
sw $2,BoolGlob
$L11:
lw $2,16($fp)
lw $3,20($fp)
slt $2,$2,$3
beq $2,$0,$L12
$L13:
lw $2,16($fp)
move $4,$2
sll $3,$4,2
addu $3,$3,$2
lw $2,20($fp)
subu $3,$3,$2
sw $3,24($fp)
addu $2,$fp,24
lw $4,16($fp)
lw $5,20($fp)
move $6,$2
jal Proc7
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L11
$L12:
la $4,Array1Glob
la $5,Array2Glob
lw $6,16($fp)
lw $7,24($fp)
jal Proc8
lw $4,PtrGlb
jal Proc1
li $2,0x00000041 # 65
sb $2,29($fp)
$L14:
lb $2,29($fp)
lb $3,Char2Glob
slt $2,$3,$2
bne $2,$0,$L15
$L17:
lb $2,29($fp)
move $4,$2
li $5,0x00000043 # 67
jal Func1
lw $3,32($fp)
bne $3,$2,$L18
addu $2,$fp,32
move $4,$0
move $5,$2
jal Proc6
$L18:
$L16:
lbu $2,29($fp)
addu $3,$2,1
move $2,$3
sb $2,29($fp)
j $L14
$L15:
lw $2,20($fp)
lw $3,16($fp)
mult $2,$3
mflo $2
sw $2,24($fp)
lw $2,24($fp)
lw $3,16($fp)
div $2,$2,$3
sw $2,20($fp)
lw $2,24($fp)
lw $3,20($fp)
subu $2,$2,$3
move $4,$2
sll $3,$4,3
subu $3,$3,$2
lw $2,16($fp)
subu $3,$3,$2
sw $3,20($fp)
addu $4,$fp,16
jal Proc2
$L9:
addu $16,$16,1
j $L7
$L8:
addu $4,$fp,120
jal times
lw $2,120($fp)
lw $3,104($fp)
subu $2,$2,$3
lw $3,112($fp)
subu $2,$2,$3
sw $2,108($fp)
lw $2,108($fp)
li $6,0x51eb851f # 1374389535
mult $2,$6
mfhi $5
mflo $4
srl $6,$5,0
move $7,$0
sra $3,$6,5
sra $4,$2,31
subu $2,$3,$4
la $4,$LC3
la $5,Version
li $6,0x00001388 # 5000
move $7,$2
jal printf
li $2,0x0007a120 # 500000
lw $3,108($fp)
div $2,$2,$3
la $4,$LC4
move $5,$2
jal printf
$L2:
move $sp,$fp # sp not trusted here
lw $31,144($sp)
lw $fp,140($sp)
lw $16,136($sp)
addu $sp,$sp,152
j $31
.end Proc0
.loc 1 540
.ent Proc1
Proc1:
.frame $fp,24,$31 # vars= 0, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,24
sw $31,20($sp)
sw $fp,16($sp)
move $fp,$sp
sw $4,24($fp)
lw $2,24($fp)
lw $3,0($2)
lw $2,PtrGlb
move $4,$3
move $5,$2
li $6,0x00000030 # 48
jal memcpy
lw $2,24($fp)
li $3,0x00000005 # 5
sw $3,12($2)
lw $3,24($fp)
lw $2,0($3)
lw $3,24($fp)
lw $4,12($3)
sw $4,12($2)
lw $3,24($fp)
lw $2,0($3)
lw $3,24($fp)
lw $4,0($3)
sw $4,0($2)
lw $2,24($fp)
lw $3,0($2)
lw $4,0($3)
jal Proc3
lw $2,24($fp)
lw $3,0($2)
lw $2,4($3)
bne $2,$0,$L20
lw $2,24($fp)
lw $3,0($2)
li $2,0x00000006 # 6
sw $2,12($3)
lw $2,24($fp)
lw $3,24($fp)
lw $4,0($3)
addu $3,$4,8
lw $4,8($2)
move $5,$3
jal Proc6
lw $3,24($fp)
lw $2,0($3)
lw $3,PtrGlb
lw $4,0($3)
sw $4,0($2)
lw $3,24($fp)
lw $2,0($3)
lw $3,24($fp)
lw $4,0($3)
addu $3,$4,12
lw $4,12($2)
li $5,0x0000000a # 10
move $6,$3
jal Proc7
j $L21
$L20:
lw $2,24($fp)
lw $3,24($fp)
lw $4,0($3)
move $3,$4
move $4,$2
move $5,$3
li $6,0x00000030 # 48
jal memcpy
$L21:
$L19:
move $sp,$fp # sp not trusted here
lw $31,20($sp)
lw $fp,16($sp)
addu $sp,$sp,24
j $31
.end Proc1
.loc 1 563
.ent Proc2
Proc2:
.frame $fp,16,$31 # vars= 8, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,16
sw $fp,8($sp)
move $fp,$sp
sw $4,16($fp)
lw $2,16($fp)
lw $3,0($2)
addu $2,$3,10
sw $2,0($fp)
$L23:
lb $2,Char1Glob
li $3,0x00000041 # 65
bne $2,$3,$L26
lw $3,0($fp)
subu $2,$3,1
move $3,$2
sw $3,0($fp)
lw $2,16($fp)
lw $3,0($fp)
lw $4,IntGlob
subu $3,$3,$4
sw $3,0($2)
sw $0,4($fp)
$L26:
lw $2,4($fp)
beq $2,$0,$L24
$L27:
$L25:
j $L23
$L24:
$L22:
move $sp,$fp # sp not trusted here
lw $fp,8($sp)
addu $sp,$sp,16
j $31
.end Proc2
.loc 1 583
.ent Proc3
Proc3:
.frame $fp,24,$31 # vars= 0, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,24
sw $31,20($sp)
sw $fp,16($sp)
move $fp,$sp
sw $4,24($fp)
lw $2,PtrGlb
beq $2,$0,$L29
lw $2,24($fp)
lw $3,PtrGlb
lw $4,0($3)
sw $4,0($2)
j $L30
$L29:
li $2,0x00000064 # 100
sw $2,IntGlob
$L30:
lw $3,PtrGlb
addu $2,$3,12
li $4,0x0000000a # 10
lw $5,IntGlob
move $6,$2
jal Proc7
$L28:
move $sp,$fp # sp not trusted here
lw $31,20($sp)
lw $fp,16($sp)
addu $sp,$sp,24
j $31
.end Proc3
.loc 1 593
.ent Proc4
Proc4:
.frame $fp,16,$31 # vars= 8, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,16
sw $fp,8($sp)
move $fp,$sp
lb $2,Char1Glob
xori $3,$2,0x0041
sltu $2,$3,1
sw $2,0($fp)
lw $2,0($fp)
lw $3,BoolGlob
or $2,$2,$3
sw $2,0($fp)
li $2,0x00000042 # 66
sb $2,Char2Glob
$L31:
move $sp,$fp # sp not trusted here
lw $fp,8($sp)
addu $sp,$sp,16
j $31
.end Proc4
.loc 1 602
.ent Proc5
Proc5:
.frame $fp,8,$31 # vars= 0, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,8
sw $fp,0($sp)
move $fp,$sp
li $2,0x00000041 # 65
sb $2,Char1Glob
sw $0,BoolGlob
$L32:
move $sp,$fp # sp not trusted here
lw $fp,0($sp)
addu $sp,$sp,8
j $31
.end Proc5
.loc 1 610
.ent Proc6
Proc6:
.frame $fp,24,$31 # vars= 0, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,24
sw $31,20($sp)
sw $fp,16($sp)
move $fp,$sp
sw $4,24($fp)
sw $5,28($fp)
lw $2,28($fp)
lw $3,24($fp)
sw $3,0($2)
lw $4,24($fp)
jal Func3
bne $2,$0,$L34
lw $2,28($fp)
li $3,0x00000003 # 3
sw $3,0($2)
$L34:
lw $2,24($fp)
sltu $3,$2,5
beq $3,$0,$L44
lw $2,24($fp)
move $3,$2
sll $2,$3,2
la $3,$L43
addu $2,$2,$3
lw $3,0($2)
j $3
.rdata
.align 3
.align 2
$L43:
.word $L36
.word $L37
.word $L40
.word $L41
.word $L42
.text
$L36:
lw $2,28($fp)
sw $0,0($2)
j $L35
$L37:
lw $2,IntGlob
slt $3,$2,101
bne $3,$0,$L38
lw $2,28($fp)
sw $0,0($2)
j $L39
$L38:
lw $2,28($fp)
li $3,0x00000003 # 3
sw $3,0($2)
$L39:
j $L35
$L40:
lw $2,28($fp)
li $3,0x00000001 # 1
sw $3,0($2)
j $L35
$L41:
j $L35
$L42:
lw $2,28($fp)
li $3,0x00000002 # 2
sw $3,0($2)
$L44:
$L35:
$L33:
move $sp,$fp # sp not trusted here
lw $31,20($sp)
lw $fp,16($sp)
addu $sp,$sp,24
j $31
.end Proc6
.loc 1 629
.ent Proc7
Proc7:
.frame $fp,16,$31 # vars= 8, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,16
sw $fp,8($sp)
move $fp,$sp
sw $4,16($fp)
sw $5,20($fp)
sw $6,24($fp)
lw $2,16($fp)
addu $3,$2,2
sw $3,0($fp)
lw $2,24($fp)
lw $3,20($fp)
lw $4,0($fp)
addu $3,$3,$4
sw $3,0($2)
$L45:
move $sp,$fp # sp not trusted here
lw $fp,8($sp)
addu $sp,$sp,16
j $31
.end Proc7
.loc 1 640
.ent Proc8
Proc8:
.frame $fp,16,$31 # vars= 8, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,16
sw $fp,8($sp)
move $fp,$sp
sw $4,16($fp)
sw $5,20($fp)
sw $6,24($fp)
sw $7,28($fp)
lw $2,24($fp)
addu $3,$2,5
sw $3,0($fp)
lw $2,0($fp)
move $3,$2
sll $2,$3,2
lw $3,16($fp)
addu $2,$2,$3
lw $3,28($fp)
sw $3,0($2)
lw $2,0($fp)
move $3,$2
sll $2,$3,2
lw $4,16($fp)
addu $3,$2,$4
addu $2,$3,4
lw $3,0($fp)
move $4,$3
sll $3,$4,2
lw $4,16($fp)
addu $3,$3,$4
lw $4,0($3)
sw $4,0($2)
lw $2,0($fp)
move $3,$2
sll $2,$3,2
lw $3,16($fp)
addu $2,$2,$3
addu $3,$2,120
lw $2,0($fp)
sw $2,0($3)
lw $2,0($fp)
sw $2,4($fp)
$L47:
lw $3,0($fp)
addu $2,$3,1
lw $3,4($fp)
slt $2,$2,$3
bne $2,$0,$L48
$L50:
lw $3,0($fp)
lw $2,4($fp)
move $4,$2
sll $2,$4,2
move $5,$3
sll $4,$5,1
addu $4,$4,$3
sll $3,$4,4
addu $4,$4,$3
sll $3,$4,2
lw $4,20($fp)
addu $3,$3,$4
addu $2,$2,$3
lw $3,0($fp)
sw $3,0($2)
$L49:
lw $3,4($fp)
addu $2,$3,1
move $3,$2
sw $3,4($fp)
j $L47
$L48:
lw $3,0($fp)
lw $2,0($fp)
move $4,$2
sll $2,$4,2
move $5,$3
sll $4,$5,1
addu $4,$4,$3
sll $3,$4,4
addu $4,$4,$3
sll $3,$4,2
lw $4,20($fp)
addu $3,$3,$4
addu $4,$2,$3
subu $2,$4,4
lw $3,0($fp)
lw $2,0($fp)
move $4,$2
sll $2,$4,2
move $5,$3
sll $4,$5,1
addu $4,$4,$3
sll $3,$4,4
addu $4,$4,$3
sll $3,$4,2
lw $4,20($fp)
addu $3,$3,$4
addu $4,$2,$3
subu $2,$4,4
lw $4,0($fp)
lw $3,0($fp)
move $5,$3
sll $3,$5,2
move $6,$4
sll $5,$6,1
addu $5,$5,$4
sll $4,$5,4
addu $5,$5,$4
sll $4,$5,2
lw $5,20($fp)
addu $4,$4,$5
addu $3,$3,$4
subu $4,$3,4
lw $5,0($4)
addu $3,$5,1
move $4,$3
sw $4,0($2)
lw $3,0($fp)
lw $2,0($fp)
move $4,$2
sll $2,$4,2
move $5,$3
sll $4,$5,1
addu $4,$4,$3
sll $3,$4,4
addu $4,$4,$3
sll $3,$4,2
lw $4,20($fp)
addu $3,$3,$4
addu $4,$2,$3
addu $2,$4,4080
lw $3,0($fp)
move $4,$3
sll $3,$4,2
lw $4,16($fp)
addu $3,$3,$4
lw $4,0($3)
sw $4,0($2)
li $2,0x00000005 # 5
sw $2,IntGlob
$L46:
move $sp,$fp # sp not trusted here
lw $fp,8($sp)
addu $sp,$sp,16
j $31
.end Proc8
.loc 1 660
.ent Func1
Func1:
.frame $fp,16,$31 # vars= 8, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,16
sw $fp,8($sp)
move $fp,$sp
move $3,$4
move $4,$5
sb $3,0($fp)
sb $4,1($fp)
lbu $2,0($fp)
sb $2,2($fp)
lbu $2,2($fp)
sb $2,3($fp)
lb $2,3($fp)
lb $5,1($fp)
beq $2,$5,$L52
move $2,$0
j $L51
j $L53
$L52:
li $2,0x00000001 # 1
j $L51
$L53:
$L51:
move $sp,$fp # sp not trusted here
lw $fp,8($sp)
addu $sp,$sp,16
j $31
.end Func1
.loc 1 675
.ent Func2
Func2:
.frame $fp,32,$31 # vars= 8, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,32
sw $31,28($sp)
sw $fp,24($sp)
move $fp,$sp
sw $4,32($fp)
sw $5,36($fp)
li $2,0x00000001 # 1
sw $2,16($fp)
$L55:
lw $2,16($fp)
slt $3,$2,2
beq $3,$0,$L56
$L57:
lw $2,32($fp)
lw $4,16($fp)
addu $3,$2,$4
lb $2,0($3)
lw $3,16($fp)
lw $4,36($fp)
addu $3,$3,$4
addu $4,$3,1
lb $3,0($4)
move $4,$2
move $5,$3
jal Func1
bne $2,$0,$L58
li $2,0x00000041 # 65
sb $2,20($fp)
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
$L58:
j $L55
$L56:
lb $2,20($fp)
slt $3,$2,87
bne $3,$0,$L59
lb $2,20($fp)
slt $3,$2,91
beq $3,$0,$L59
li $2,0x00000007 # 7
sw $2,16($fp)
$L59:
lb $2,20($fp)
li $3,0x00000058 # 88
bne $2,$3,$L60
li $2,0x00000001 # 1
j $L54
j $L61
$L60:
lw $4,32($fp)
lw $5,36($fp)
jal strcmp
blez $2,$L62
lw $2,16($fp)
addu $3,$2,7
sw $3,16($fp)
li $2,0x00000001 # 1
j $L54
j $L63
$L62:
move $2,$0
j $L54
$L63:
$L61:
$L54:
move $sp,$fp # sp not trusted here
lw $31,28($sp)
lw $fp,24($sp)
addu $sp,$sp,32
j $31
.end Func2
.loc 1 705
.ent Func3
Func3:
.frame $fp,16,$31 # vars= 8, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,16
sw $fp,8($sp)
move $fp,$sp
sw $4,16($fp)
lw $2,16($fp)
sw $2,0($fp)
lw $2,0($fp)
li $3,0x00000002 # 2
bne $2,$3,$L65
li $2,0x00000001 # 1
j $L64
$L65:
move $2,$0
j $L64
$L64:
move $sp,$fp # sp not trusted here
lw $fp,8($sp)
addu $sp,$sp,16
j $31
.end Func3
\ No newline at end of file
.file 1 "pi.c"
# GNU C 2.7.2.3 [AL 1.1, MM 40, tma 0.1] SimpleScalar running sstrix compiled by GNU C
# Cc1 defaults:
# -mgas -mgpOPT
# Cc1 arguments (-G value = 8, Cpu = default, ISA = 1):
# -quiet -dumpbase -o
gcc2_compiled.:
__gnu_compiled_c:
.rdata
.align 2
$LC0:
.ascii "Usage: %s <iterations>\n\000"
.sdata
.align 2
$LC3:
.ascii "%.10f\n\000"
.align 3
$LC1:
.word 0xffc00000 # 2147483647
.word 0x41dfffff
.align 3
$LC2:
.word 0x00000000 # 1
.word 0x3ff00000
.align 3
$LC4:
.word 0x00000000 # 4
.word 0x40100000
.text
.align 2
.globl main
.extern stderr, 4
.text
.loc 1 5
.ent main
main:
.frame $fp,56,$31 # vars= 32, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,56
sw $31,52($sp)
sw $fp,48($sp)
move $fp,$sp
sw $4,56($fp)
sw $5,60($fp)
jal __main
sw $0,24($fp)
lw $2,56($fp)
li $3,0x00000002 # 2
beq $2,$3,$L2
lw $2,60($fp)
lw $4,stderr
la $5,$LC0
lw $6,0($2)
jal fprintf
move $4,$0
jal exit
$L2:
lw $3,60($fp)
addu $2,$3,4
lw $4,0($2)
jal atoi
sw $2,20($fp)
li $4,0x00000001 # 1
jal srandom
sw $0,16($fp)
$L3:
lw $2,16($fp)
lw $3,20($fp)
slt $2,$2,$3
bne $2,$0,$L6
j $L4
$L6:
jal random
mtc1 $2,$f0
#nop
cvt.d.w $f0,$f0
l.d $f2,$LC1
div.d $f0,$f0,$f2
s.d $f0,32($fp)
jal random
mtc1 $2,$f0
#nop
cvt.d.w $f0,$f0
l.d $f2,$LC1
div.d $f0,$f0,$f2
s.d $f0,40($fp)
l.d $f0,32($fp)
l.d $f2,32($fp)
mul.d $f0,$f0,$f2
l.d $f2,40($fp)
l.d $f4,40($fp)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
l.d $f2,$LC2
c.le.d $f0,$f2
bc1f $L7
lw $3,24($fp)
addu $2,$3,1
move $3,$2
sw $3,24($fp)
$L7:
$L5:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L3
$L4:
l.s $f0,24($fp)
#nop
cvt.d.w $f0,$f0
l.s $f2,20($fp)
#nop
cvt.d.w $f2,$f2
div.d $f0,$f0,$f2
l.d $f2,$LC4
mul.d $f0,$f0,$f2
la $4,$LC3
dmfc1 $6,$f0
jal printf
li $2,0x00000001 # 1
j $L1
$L1:
move $sp,$fp # sp not trusted here
lw $31,52($sp)
lw $fp,48($sp)
addu $sp,$sp,56
j $31
.end main
\ No newline at end of file
.file 1 "slalom.c"
# GNU C 2.7.2.3 [AL 1.1, MM 40, tma 0.1] SimpleScalar running sstrix compiled by GNU C
# Cc1 defaults:
# -mgas -mgpOPT
# Cc1 arguments (-G value = 8, Cpu = default, ISA = 1):
# -quiet -dumpbase -O0 -o
gcc2_compiled.:
__gnu_compiled_c:
.rdata
.align 2
$LC0:
.ascii "Enter the number of seconds that is the goal: \000"
.sdata
.align 2
$LC1:
.ascii "%lg\000"
.rdata
.align 2
$LC2:
.ascii "Enter a lower bound for n: \000"
.sdata
.align 2
$LC3:
.ascii "%d\000"
.rdata
.align 2
$LC4:
.ascii "Must take less than %g seconds. Took %g.\n\000"
.align 2
$LC5:
.ascii "Enter an upper bound for n: \000"
.align 2
$LC6:
.ascii "Must take at least %g seconds. Took %g.\n\000"
.align 2
$LC7:
.ascii "New interval: [%d,%d]\n\000"
.text
.align 2
.globl main
.data
.align 2
info.4:
.word $LC8
.word $LC9
.word $LC10
.word $LC11
.word $LC12
.word $LC13
.word $LC14
.word $LC15
.word $LC16
.word 0
.rdata
.align 2
$LC16:
.ascii "Options: -O Date: 23 May 1990\000"
.align 2
$LC15:
.ascii "Compiler: cc Run by: M. Carter\000"
.align 2
$LC14:
.ascii "Language: C Alone: yes\000"
.align 2
$LC13:
.ascii "OS: SUNOS 4.0.3 Timer: Wall, gettime"
.ascii "ofday()\000"
.align 2
$LC12:
.ascii "Disk: .3GB SCSI+.7GB SMD Node name: amssun2\000"
.align 2
$LC11:
.ascii "NMAX: 512 Clock: 25 MHz\000"
.align 2
$LC10:
.ascii "Cache: 128 KB # used: 1\000"
.align 2
$LC9:
.ascii "Memory: 32 MB # of procs: 1\000"
.align 2
$LC8:
.ascii "Machine: SUN 4/370GX Processor: SPARC\000"
.sdata
.align 2
$LC17:
.ascii "\n\000"
.rdata
.align 2
$LC18:
.ascii "M ops: %-13lg Time: %-.3lf seconds\n\000"
.align 2
$LC20:
.ascii "n: %-6d MFLOPS: %-.5lg\n\000"
.align 2
$LC21:
.ascii "Approximate data memory use: %d bytes.\n\000"
.sdata
.align 3
$LC19:
.word 0xa0b5ed8d # 9.9999999999999995475e-07
.word 0x3eb0c6f7
.text
.align 2
.globl What
.lcomm area.7,16384
.lcomm box.8,56
.lcomm coeff.9,33554432
.lcomm diag.10,49152
.lcomm emiss.11,144
.lcomm place.12,49152
.lcomm result.13,49152
.lcomm rho.14,144
.lcomm rhs.15,49152
.lcomm size.16,32768
.lcomm loop.17,48
.data
.align 2
tasks.18:
.word $LC22
.word $LC23
.word $LC24
.word $LC25
.word $LC26
.word $LC27
.word $LC28
.sdata
.align 2
$LC28:
.ascii "Storer\000"
.align 2
$LC27:
.ascii "Solver\000"
.align 2
$LC26:
.ascii "SetUp3\000"
.align 2
$LC25:
.ascii "SetUp2\000"
.align 2
$LC24:
.ascii "SetUp1\000"
.align 2
$LC23:
.ascii "Region\000"
.align 2
$LC22:
.ascii "Reader\000"
.rdata
.align 2
$LC29:
.ascii "%6.6s%8.3f%17.0f%14.6f%10.1f %%\n\000"
.sdata
.align 2
format.19:
.word $LC29
.rdata
.align 2
$LC30:
.ascii "Must be at least 6, the number of faces.\n\000"
.align 2
$LC31:
.ascii "Exceeds %d = maximum for this system.\n\000"
.sdata
.align 2
$LC32:
.ascii "answer\000"
.rdata
.align 2
$LC50:
.ascii "%d patches:\n\000"
.align 2
$LC51:
.ascii " Task Seconds Operations MFLOPS %% of T"
.ascii "ime\n\000"
.sdata
.align 2
$LC55:
.ascii "TOTALS\000"
.align 3
$LC33:
.word 0x00000000 # 0.5
.word 0x3fe00000
.align 3
$LC34:
.word 0x00000000 # 258
.word 0x40702000
.align 3
$LC35:
.word 0x00000000 # 8
.word 0x40200000
.align 3
$LC36:
.word 0x00000000 # 154
.word 0x40634000
.align 3
$LC37:
.word 0x00000000 # 532
.word 0x4080a000
.align 3
$LC38:
.word 0x00000000 # 6
.word 0x40180000
.align 3
$LC39:
.word 0x00000000 # 370
.word 0x40772000
.align 3
$LC40:
.word 0x00000000 # 2
.word 0x40000000
.align 3
$LC41:
.word 0x00000000 # 9
.word 0x40220000
.align 3
$LC42:
.word 0x00000000 # 72
.word 0x40520000
.align 3
$LC43:
.word 0x00000000 # 7.5
.word 0x401e0000
.align 3
$LC44:
.word 0x00000000 # 2.5
.word 0x40040000
.align 3
$LC45:
.word 0x00000000 # 21
.word 0x40350000
.align 3
$LC46:
.word 0x00000000 # 1
.word 0x3ff00000
.align 3
$LC47:
.word 0x00000000 # 16.5
.word 0x40308000
.align 3
$LC48:
.word 0x00000000 # 35.5
.word 0x4041c000
.align 3
$LC49:
.word 0x00000000 # 3
.word 0x40080000
.align 3
$LC52:
.word 0xd2f1a9fc # 0.0010000000000000000208
.word 0x3f50624d
.align 3
$LC53:
.word 0xa0b5ed8d # 9.9999999999999995475e-07
.word 0x3eb0c6f7
.align 3
$LC54:
.word 0x00000000 # 100
.word 0x40590000
.text
.align 2
.globl Meter
.sdata
.align 3
$LC56:
.word 0xa0b5ed8d # 9.9999999999999995475e-07
.word 0x3eb0c6f7
.text
.align 2
.globl When
.sdata
.align 2
$LC57:
.ascii "geom\000"
.align 2
$LC58:
.ascii "r\000"
.rdata
.align 2
$LC59:
.ascii "slalom: 'geom' geometry file not found.\n\000"
.align 2
$LC60:
.ascii "Must specify exactly 3 box coordinates.\n\000"
.align 2
$LC61:
.ascii "Must specify exactly 18 box coordinates.\n\000"
.align 2
$LC64:
.ascii "Box dimensions must be between 1 and 100.\n\000"
.align 2
$LC66:
.ascii "Reflectivities must be between .000 and .999.\n\000"
.align 2
$LC67:
.ascii "Emissivity cannot be negative.\n\000"
.align 2
$LC68:
.ascii "Emissivities are zero. Problem is trivial.\n\000"
.sdata
.align 3
$LC62:
.word 0x00000000 # 1
.word 0x3ff00000
.align 3
$LC63:
.word 0x00000000 # 100
.word 0x40590000
.align 3
$LC65:
.word 0xd916872b # 0.99899999999999999911
.word 0x3feff7ce
.text
.align 2
.globl Reader
.rdata
.align 2
$LC70:
.ascii "Eccentric box requires more patches.\n\000"
.sdata
.align 3
$LC69:
.word 0x00000000 # 0.5
.word 0x3fe00000
.align 3
$LC71:
.word 0x54442d18 # 25.132741228718344928
.word 0x403921fb
.text
.align 2
.globl Region
.sdata
.align 3
$LC72:
.word 0x00000000 # 1
.word 0x3ff00000
.align 3
$LC73:
.word 0x00000000 # -4
.word 0xc0100000
.text
.align 2
.globl SetUp1
.sdata
.align 3
$LC74:
.word 0xb7f87a0f # 1.0000000000000000079e-35
.word 0x38aa95a5
.align 3
$LC75:
.word 0x00000000 # 1
.word 0x3ff00000
.align 3
$LC76:
.word 0x00000000 # 4
.word 0x40100000
.text
.align 2
.globl SetUp2
.rdata
.align 2
$LC79:
.ascii "Total form factor is too far from unity.\n\000"
.sdata
.align 3
$LC77:
.word 0x00000000 # 1
.word 0x3ff00000
.align 3
$LC78:
.word 0xe826d695 # 5.0000000000000003114e-10
.word 0x3e012e0b
.text
.align 2
.globl SetUp3
.sdata
.align 3
$LC80:
.word 0x00000000 # 1
.word 0x3ff00000
.text
.align 2
.globl Solver
.sdata
.align 2
$LC81:
.ascii "w\000"
.rdata
.align 2
$LC82:
.ascii "Unable to open 'answer' file.\n\000"
.align 2
$LC83:
.ascii " Patch Face Position in w, h, d Widt"
.ascii "h Height\n\000"
.align 2
$LC84:
.ascii "%5d %4d%11.5lf%11.5lf%11.5lf %11.5lf%11.5lf\n\000"
.align 2
$LC85:
.ascii "\n"
.ascii " Patch Face Radiosities\n\000"
.align 2
$LC86:
.ascii "%5d %4d%12.8lf%12.8lf%12.8lf\n\000"
.text
.align 2
.globl Storer
.rdata
.align 2
$LC88:
.ascii "Residual is too large: %lg\n\000"
.sdata
.align 3
$LC87:
.word 0x29a4692c # 1.5000000000000001968e-08
.word 0x3e501b2b
.text
.align 2
.globl Verify
.align 2
.globl Ddot
.comm goal,8
.comm timing,8
.comm work,8
.comm mean,4
.comm n,4
.comm nupper,4
.text
.loc 1 179
.ent main
main:
.frame $fp,40,$31 # vars= 8, regs= 2/0, args= 24, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,40
sw $31,36($sp)
sw $fp,32($sp)
move $fp,$sp
jal __main
la $4,$LC0
jal printf
la $4,$LC1
la $5,goal
jal scanf
$L2:
la $4,$LC2
jal printf
la $4,$LC3
la $5,n
jal scanf
lw $2,n
bgtz $2,$L5
move $4,$0
jal exit
$L5:
lw $4,n
la $5,timing
la $6,work
jal Meter
sw $2,24($fp)
l.d $f0,timing
l.d $f2,goal
c.le.d $f2,$f0
bc1f $L6
l.d $f0,timing
s.d $f0,16($sp)
la $4,$LC4
dlw $6,goal
jal printf
$L6:
$L4:
lw $2,24($fp)
beq $2,$0,$L7
l.d $f0,timing
l.d $f2,goal
c.le.d $f2,$f0
bc1t $L7
j $L3
$L7:
j $L2
$L3:
.set noreorder
nop
.set reorder
$L8:
la $4,$LC5
jal printf
la $4,$LC3
la $5,nupper
jal scanf
lw $2,nupper
bgtz $2,$L11
move $4,$0
jal exit
$L11:
lw $4,nupper
la $5,timing
la $6,work
jal Meter
sw $2,24($fp)
l.d $f0,timing
l.d $f2,goal
c.lt.d $f0,$f2
bc1f $L12
l.d $f0,timing
s.d $f0,16($sp)
la $4,$LC6
dlw $6,goal
jal printf
lw $2,nupper
lw $3,n
slt $4,$2,$3
beq $4,$0,$L13
lw $2,n
$L13:
sw $2,n
$L12:
$L10:
lw $2,24($fp)
beq $2,$0,$L14
l.d $f0,timing
l.d $f2,goal
c.lt.d $f0,$f2
bc1t $L14
j $L9
$L14:
j $L8
$L9:
.set noreorder
nop
.set reorder
$L15:
lw $2,nupper
lw $3,n
subu $2,$2,$3
slt $3,$2,2
bne $3,$0,$L16
$L17:
lw $2,n
lw $3,nupper
addu $2,$2,$3
sra $3,$2,31
srl $4,$3,31
addu $2,$2,$4
sra $3,$2,1
sw $3,mean
lw $4,mean
la $5,timing
la $6,work
jal Meter
sw $2,24($fp)
l.d $f0,timing
l.d $f2,goal
c.lt.d $f0,$f2
bc1f $L18
lw $2,mean
sw $2,n
j $L19
$L18:
lw $2,mean
sw $2,nupper
$L19:
la $4,$LC7
lw $5,n
lw $6,nupper
jal printf
j $L15
$L16:
lw $4,n
la $5,timing
la $6,work
jal Meter
sw $2,24($fp)
l.d $f0,work
s.d $f0,16($sp)
lw $4,n
dlw $6,timing
jal What
$L1:
move $sp,$fp # sp not trusted here
lw $31,36($sp)
lw $fp,32($sp)
addu $sp,$sp,40
j $31
.end main
.loc 1 236
.ent What
What:
.frame $fp,40,$31 # vars= 8, regs= 2/0, args= 24, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,40
sw $31,36($sp)
sw $fp,32($sp)
move $fp,$sp
sw $4,40($fp)
dsw $6,48($fp)
la $4,$LC17
jal printf
sw $0,24($fp)
$L21:
lw $2,24($fp)
move $3,$2
sll $2,$3,2
la $3,info.4
addu $2,$2,$3
lw $3,0($2)
bne $3,$0,$L24
j $L22
$L24:
lw $2,24($fp)
move $3,$2
sll $2,$3,2
la $3,info.4
addu $2,$2,$3
lw $4,0($2)
jal puts
$L23:
lw $3,24($fp)
addu $2,$3,1
move $3,$2
sw $3,24($fp)
j $L21
$L22:
l.d $f0,56($fp)
l.d $f2,$LC19
mul.d $f0,$f0,$f2
l.d $f2,48($fp)
s.d $f2,16($sp)
la $4,$LC18
dmfc1 $6,$f0
jal printf
l.d $f0,56($fp)
l.d $f2,48($fp)
div.d $f0,$f0,$f2
l.d $f2,$LC19
mul.d $f0,$f0,$f2
la $4,$LC20
lw $5,40($fp)
dmfc1 $6,$f0
jal printf
lw $2,40($fp)
move $3,$2
sll $2,$3,3
lw $3,40($fp)
mult $2,$3
mflo $2
lw $3,40($fp)
move $5,$3
sll $4,$5,4
subu $4,$4,$3
sll $3,$4,3
addu $2,$2,$3
addu $3,$2,800
la $4,$LC21
move $5,$3
jal printf
$L20:
move $sp,$fp # sp not trusted here
lw $31,36($sp)
lw $fp,32($sp)
addu $sp,$sp,40
j $31
.end What
.loc 1 282
.ent Meter
Meter:
.frame $fp,280,$31 # vars= 208, regs= 2/3, args= 40, extra= 0
.mask 0xc0000000,-28
.fmask 0x03f00000,-4
subu $sp,$sp,280
sw $31,252($sp)
sw $fp,248($sp)
s.d $f24,272($sp)
s.d $f22,264($sp)
s.d $f20,256($sp)
move $fp,$sp
sw $4,280($fp)
sw $5,284($fp)
sw $6,288($fp)
lw $2,280($fp)
slt $3,$2,6
beq $3,$0,$L26
la $4,$LC30
jal printf
move $2,$0
j $L25
j $L27
$L26:
lw $2,280($fp)
slt $3,$2,2049
bne $3,$0,$L28
la $4,$LC31
li $5,0x00000800 # 2048
jal printf
move $2,$0
j $L25
$L28:
$L27:
la $4,$LC32
jal unlink
jal When
s.d $f0,152($fp)
la $4,box.8
la $5,rho.14
la $6,emiss.11
jal Reader
bne $2,$0,$L29
move $2,$0
j $L25
$L29:
jal When
s.d $f0,160($fp)
la $2,size.16
sw $2,16($sp)
la $2,area.7
sw $2,20($sp)
lw $4,280($fp)
la $5,loop.17
la $6,box.8
la $7,place.12
jal Region
bne $2,$0,$L30
move $2,$0
j $L25
$L30:
jal When
s.d $f0,168($fp)
la $2,size.16
sw $2,16($sp)
lw $4,280($fp)
la $5,loop.17
la $6,coeff.9
la $7,place.12
jal SetUp1
jal When
s.d $f0,176($fp)
la $2,size.16
sw $2,16($sp)
lw $4,280($fp)
la $5,loop.17
la $6,coeff.9
la $7,place.12
jal SetUp2
jal When
s.d $f0,184($fp)
la $2,emiss.11
sw $2,16($sp)
la $2,coeff.9
sw $2,20($sp)
la $2,diag.10
sw $2,24($sp)
la $2,rhs.15
sw $2,28($sp)
lw $4,280($fp)
la $5,loop.17
la $6,area.7
la $7,rho.14
jal SetUp3
bne $2,$0,$L31
move $2,$0
j $L25
$L31:
jal When
s.d $f0,192($fp)
lw $2,loop.17+8
sw $2,240($fp)
la $2,rhs.15
sw $2,16($sp)
la $2,result.13
sw $2,20($sp)
lw $4,280($fp)
lw $5,240($fp)
la $6,coeff.9
la $7,diag.10
jal Solver
jal When
s.d $f0,200($fp)
la $2,result.13
sw $2,16($sp)
lw $4,280($fp)
la $5,loop.17
la $6,place.12
la $7,size.16
jal Storer
jal When
s.d $f0,208($fp)
lw $2,284($fp)
l.d $f0,208($fp)
l.d $f2,152($fp)
sub.d $f0,$f0,$f2
s.d $f0,0($2)
sw $0,232($fp)
$L32:
lw $2,232($fp)
slt $3,$2,7
bne $3,$0,$L35
j $L33
$L35:
lw $2,232($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,40
addu $3,$2,$4
addu $2,$3,112
addu $3,$fp,160
lw $4,232($fp)
move $5,$4
sll $4,$5,3
addu $3,$3,$4
lw $4,232($fp)
move $5,$4
sll $4,$5,3
addu $5,$fp,40
addu $4,$4,$5
addu $5,$4,112
l.d $f0,0($3)
l.d $f2,0($5)
sub.d $f0,$f0,$f2
s.d $f0,0($2)
$L34:
lw $3,232($fp)
addu $2,$3,1
move $3,$2
sw $3,232($fp)
j $L32
$L33:
sw $0,236($fp)
dsz 216($fp)
sw $0,232($fp)
$L36:
lw $2,232($fp)
slt $3,$2,6
bne $3,$0,$L39
j $L37
$L39:
lw $2,232($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,40
addu $3,$2,$4
addu $2,$3,64
lw $3,232($fp)
move $4,$3
sll $3,$4,3
lw $4,232($fp)
move $5,$4
sll $4,$5,3
lw $3,loop.17+4($3)
lw $4,loop.17($4)
subu $3,$3,$4
addu $4,$3,1
mtc1 $4,$f0
#nop
cvt.d.w $f0,$f0
s.d $f0,0($2)
lw $2,232($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,40
addu $3,$2,$4
addu $2,$3,64
lw $3,232($fp)
move $4,$3
sll $3,$4,3
addu $4,$fp,40
addu $3,$3,$4
addu $4,$3,64
l.d $f0,0($2)
l.d $f2,0($4)
mul.d $f0,$f0,$f2
l.d $f2,216($fp)
add.d $f0,$f2,$f0
s.d $f0,216($fp)
l.s $f24,236($fp)
#nop
cvt.d.w $f24,$f24
lw $2,232($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,40
addu $3,$2,$4
addu $2,$3,64
lw $3,232($fp)
move $4,$3
sll $3,$4,3
la $4,box.8
addu $3,$3,$4
l.d $f0,0($2)
l.d $f2,0($3)
mul.d $f0,$f0,$f2
lw $2,232($fp)
move $3,$2
sll $2,$3,3
la $3,box.8+8
addu $2,$2,$3
l.d $f2,0($2)
div.d $f0,$f0,$f2
mov.d $f12,$f0
jal sqrt
l.d $f2,$LC33
add.d $f0,$f0,$f2
add.d $f2,$f24,$f0
trunc.w.d $f10,$f2,$8
s.s $f10,236($fp)
$L38:
lw $3,232($fp)
addu $2,$3,1
move $3,$2
sw $3,232($fp)
j $L36
$L37:
l.d $f0,104($fp)
l.d $f2,128($fp)
mul.d $f0,$f0,$f2
l.d $f2,112($fp)
l.d $f4,136($fp)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
l.d $f2,120($fp)
l.d $f4,144($fp)
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
s.d $f0,224($fp)
l.d $f0,$LC34
s.d $f0,40($fp)
l.s $f0,236($fp)
#nop
cvt.d.w $f0,$f0
l.d $f2,$LC35
mul.d $f0,$f0,$f2
l.d $f2,$LC36
add.d $f0,$f0,$f2
l.s $f2,280($fp)
#nop
cvt.d.w $f2,$f2
add.d $f0,$f0,$f2
s.d $f0,48($fp)
l.d $f0,224($fp)
l.d $f2,$LC37
mul.d $f0,$f0,$f2
l.d $f2,$LC38
add.d $f0,$f0,$f2
s.d $f0,56($fp)
lw $2,280($fp)
move $3,$2
sll $2,$3,3
mtc1 $2,$f0
#nop
cvt.d.w $f0,$f0
l.s $f2,280($fp)
#nop
cvt.d.w $f2,$f2
l.s $f4,280($fp)
#nop
cvt.d.w $f4,$f4
mul.d $f2,$f2,$f4
l.d $f4,216($fp)
sub.d $f2,$f2,$f4
l.d $f20,224($fp)
add.d $f4,$f20,$f20
sub.d $f2,$f2,$f4
l.d $f4,$LC39
mul.d $f2,$f2,$f4
l.d $f4,$LC40
div.d $f2,$f2,$f4
add.d $f0,$f0,$f2
s.d $f0,64($fp)
l.s $f0,280($fp)
#nop
cvt.d.w $f0,$f0
l.d $f2,$LC41
mul.d $f0,$f0,$f2
l.d $f2,$LC42
add.d $f0,$f0,$f2
l.s $f2,280($fp)
#nop
cvt.d.w $f2,$f2
l.s $f4,280($fp)
#nop
cvt.d.w $f4,$f4
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
l.d $f2,216($fp)
sub.d $f0,$f0,$f2
s.d $f0,72($fp)
l.s $f0,280($fp)
#nop
cvt.d.w $f0,$f0
l.s $f2,280($fp)
#nop
cvt.d.w $f2,$f2
l.s $f4,280($fp)
#nop
cvt.d.w $f4,$f4
l.d $f6,$LC43
add.d $f4,$f4,$f6
mul.d $f2,$f2,$f4
l.d $f4,$LC44
sub.d $f2,$f2,$f4
mul.d $f0,$f0,$f2
l.d $f2,$LC45
sub.d $f0,$f0,$f2
lw $3,240($fp)
addu $2,$3,1
mtc1 $2,$f2
#nop
cvt.d.w $f2,$f2
lw $3,240($fp)
addu $2,$3,1
mtc1 $2,$f4
#nop
cvt.d.w $f4,$f4
l.s $f22,240($fp)
#nop
cvt.d.w $f22,$f22
l.d $f6,$LC46
add.d $f22,$f22,$f6
add.d $f6,$f22,$f22
l.d $f8,$LC47
sub.d $f6,$f6,$f8
mul.d $f4,$f4,$f6
l.d $f6,$LC48
add.d $f4,$f4,$f6
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
lw $3,240($fp)
addu $2,$3,1
lw $3,280($fp)
mult $2,$3
mflo $2
mtc1 $2,$f2
#nop
cvt.d.w $f2,$f2
l.s $f4,240($fp)
#nop
cvt.d.w $f4,$f4
l.d $f6,$LC46
add.d $f4,$f4,$f6
l.d $f6,$LC49
mul.d $f4,$f4,$f6
l.d $f6,$LC41
sub.d $f4,$f6,$f4
mul.d $f2,$f2,$f4
add.d $f0,$f0,$f2
s.d $f0,80($fp)
lw $2,280($fp)
move $4,$2
sll $3,$4,1
addu $3,$3,$2
sll $2,$3,4
mtc1 $2,$f0
#nop
cvt.d.w $f0,$f0
s.d $f0,88($fp)
lw $2,288($fp)
l.d $f0,40($fp)
l.d $f2,48($fp)
add.d $f0,$f0,$f2
l.d $f2,56($fp)
add.d $f0,$f0,$f2
l.d $f2,64($fp)
add.d $f0,$f0,$f2
l.d $f2,72($fp)
add.d $f0,$f0,$f2
l.d $f2,80($fp)
add.d $f0,$f0,$f2
l.d $f2,88($fp)
add.d $f0,$f0,$f2
s.d $f0,0($2)
la $4,$LC50
lw $5,280($fp)
jal printf
la $4,$LC51
jal printf
sw $0,232($fp)
$L40:
lw $2,232($fp)
slt $3,$2,7
bne $3,$0,$L43
j $L41
$L43:
lw $2,232($fp)
move $3,$2
sll $2,$3,3
addu $3,$fp,40
addu $2,$2,$3
addu $3,$2,112
l.d $f0,0($3)
mtc1 $0,$f2
mtc1 $0,$f3
c.eq.d $f0,$f2
bc1f $L44
lw $2,232($fp)
move $3,$2
sll $2,$3,3
addu $3,$fp,40
addu $2,$2,$3
addu $3,$2,112
l.d $f0,$LC52
s.d $f0,0($3)
$L44:
lw $2,232($fp)
move $3,$2
sll $2,$3,2
la $3,tasks.18
addu $2,$2,$3
lw $3,232($fp)
move $4,$3
sll $3,$4,3
addu $5,$fp,40
addu $4,$3,$5
addu $3,$4,112
lw $4,232($fp)
move $5,$4
sll $4,$5,3
addu $5,$fp,40
addu $4,$4,$5
l.d $f0,0($4)
s.d $f0,16($sp)
lw $4,232($fp)
move $5,$4
sll $4,$5,3
addu $5,$fp,40
addu $4,$4,$5
lw $5,232($fp)
move $6,$5
sll $5,$6,3
addu $6,$fp,40
addu $5,$5,$6
addu $6,$5,112
l.d $f0,0($4)
l.d $f2,0($6)
div.d $f0,$f0,$f2
l.d $f2,$LC53
mul.d $f0,$f0,$f2
s.d $f0,24($sp)
lw $4,232($fp)
move $5,$4
sll $4,$5,3
addu $5,$fp,40
addu $4,$4,$5
addu $5,$4,112
l.d $f0,0($5)
l.d $f2,$LC54
mul.d $f0,$f0,$f2
lw $4,284($fp)
l.d $f2,0($4)
div.d $f0,$f0,$f2
s.d $f0,32($sp)
lw $4,format.19
lw $5,0($2)
dlw $6,0($3)
jal printf
$L42:
lw $3,232($fp)
addu $2,$3,1
move $3,$2
sw $3,232($fp)
j $L40
$L41:
lw $2,284($fp)
lw $3,288($fp)
l.d $f0,0($3)
s.d $f0,16($sp)
lw $3,288($fp)
lw $4,284($fp)
l.d $f0,0($3)
l.d $f2,0($4)
div.d $f0,$f0,$f2
l.d $f2,$LC53
mul.d $f0,$f0,$f2
s.d $f0,24($sp)
l.d $f0,$LC54
s.d $f0,32($sp)
lw $4,format.19
la $5,$LC55
dlw $6,0($2)
jal printf
la $2,result.13
sw $2,16($sp)
lw $4,280($fp)
la $5,coeff.9
la $6,diag.10
la $7,rhs.15
jal Verify
li $2,0x00000001 # 1
j $L25
$L25:
move $sp,$fp # sp not trusted here
lw $31,252($sp)
lw $fp,248($sp)
l.d $f24,272($sp)
l.d $f22,264($sp)
l.d $f20,256($sp)
addu $sp,$sp,280
j $31
.end Meter
.loc 1 396
.ent When
When:
.frame $fp,40,$31 # vars= 16, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,40
sw $31,36($sp)
sw $fp,32($sp)
move $fp,$sp
addu $2,$fp,24
addu $4,$fp,16
move $5,$2
jal gettimeofday
l.s $f0,16($fp)
#nop
cvt.d.w $f0,$f0
l.s $f2,20($fp)
#nop
cvt.d.w $f2,$f2
l.d $f4,$LC56
mul.d $f2,$f2,$f4
add.d $f4,$f0,$f2
mov.d $f0,$f4
j $L45
$L45:
move $sp,$fp # sp not trusted here
lw $31,36($sp)
lw $fp,32($sp)
addu $sp,$sp,40
j $31
.end When
.loc 1 409
.ent Reader
Reader:
.frame $fp,144,$31 # vars= 120, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,144
sw $31,140($sp)
sw $fp,136($sp)
move $fp,$sp
sw $4,144($fp)
sw $5,148($fp)
sw $6,152($fp)
la $4,$LC57
la $5,$LC58
jal fopen
sw $2,40($fp)
lw $2,40($fp)
bne $2,$0,$L47
la $4,$LC59
jal printf
li $4,0x00000001 # 1
jal exit
$L47:
sw $0,24($fp)
sw $0,16($fp)
$L48:
lw $2,16($fp)
slt $3,$2,3
bne $3,$0,$L51
j $L49
$L51:
lw $2,16($fp)
move $3,$2
sll $2,$3,3
lw $3,144($fp)
addu $2,$2,$3
lw $4,40($fp)
la $5,$LC1
move $6,$2
jal fscanf
lw $3,24($fp)
addu $2,$3,$2
sw $2,24($fp)
$L50:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L48
$L49:
addu $2,$fp,48
move $4,$2
li $5,0x00000050 # 80
lw $6,40($fp)
jal fgets
lw $2,24($fp)
li $3,0x00000003 # 3
beq $2,$3,$L52
la $4,$LC60
jal printf
li $4,0x00000001 # 1
jal exit
$L52:
sw $0,24($fp)
sw $0,20($fp)
$L53:
lw $2,20($fp)
slt $3,$2,3
bne $3,$0,$L56
j $L54
$L56:
sw $0,16($fp)
$L57:
lw $2,16($fp)
slt $3,$2,6
bne $3,$0,$L60
j $L58
$L60:
lw $2,16($fp)
move $4,$2
sll $3,$4,1
addu $3,$3,$2
sll $2,$3,3
lw $3,148($fp)
addu $2,$2,$3
lw $3,20($fp)
move $4,$3
sll $3,$4,3
addu $2,$2,$3
lw $4,40($fp)
la $5,$LC1
move $6,$2
jal fscanf
lw $3,24($fp)
addu $2,$3,$2
sw $2,24($fp)
$L59:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L57
$L58:
$L55:
lw $3,20($fp)
addu $2,$3,1
move $3,$2
sw $3,20($fp)
j $L53
$L54:
addu $2,$fp,48
move $4,$2
li $5,0x00000050 # 80
lw $6,40($fp)
jal fgets
lw $2,24($fp)
li $3,0x00000012 # 18
beq $2,$3,$L61
la $4,$LC61
jal printf
li $4,0x00000001 # 1
jal exit
$L61:
sw $0,24($fp)
sw $0,20($fp)
$L62:
lw $2,20($fp)
slt $3,$2,3
bne $3,$0,$L65
j $L63
$L65:
sw $0,16($fp)
$L66:
lw $2,16($fp)
slt $3,$2,6
bne $3,$0,$L69
j $L67
$L69:
lw $2,16($fp)
move $4,$2
sll $3,$4,1
addu $3,$3,$2
sll $2,$3,3
lw $3,152($fp)
addu $2,$2,$3
lw $3,20($fp)
move $4,$3
sll $3,$4,3
addu $2,$2,$3
lw $4,40($fp)
la $5,$LC1
move $6,$2
jal fscanf
lw $3,24($fp)
addu $2,$3,$2
sw $2,24($fp)
$L68:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L66
$L67:
$L64:
lw $3,20($fp)
addu $2,$3,1
move $3,$2
sw $3,20($fp)
j $L62
$L63:
addu $2,$fp,48
move $4,$2
li $5,0x00000050 # 80
lw $6,40($fp)
jal fgets
lw $2,24($fp)
li $3,0x00000012 # 18
beq $2,$3,$L70
la $4,$LC61
jal printf
li $4,0x00000001 # 1
jal exit
$L70:
lw $4,40($fp)
jal fclose
sw $0,20($fp)
$L71:
lw $2,20($fp)
slt $3,$2,3
bne $3,$0,$L74
j $L72
$L74:
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,144($fp)
addu $2,$2,$3
l.d $f0,0($2)
l.d $f2,$LC62
c.lt.d $f0,$f2
bc1t $L76
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,144($fp)
addu $2,$2,$3
l.d $f0,0($2)
l.d $f2,$LC63
c.le.d $f2,$f0
bc1t $L76
j $L75
$L76:
la $4,$LC64
jal printf
move $2,$0
j $L46
$L75:
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $4,144($fp)
addu $3,$2,$4
addu $2,$3,24
lw $3,20($fp)
move $4,$3
sll $3,$4,3
lw $4,144($fp)
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
dsz 32($fp)
sw $0,16($fp)
$L77:
lw $2,16($fp)
slt $3,$2,6
bne $3,$0,$L80
j $L78
$L80:
lw $3,16($fp)
lw $2,20($fp)
move $4,$2
sll $2,$4,3
move $5,$3
sll $4,$5,1
addu $4,$4,$3
sll $3,$4,3
lw $4,148($fp)
addu $3,$3,$4
addu $2,$2,$3
l.d $f0,0($2)
mtc1 $0,$f2
mtc1 $0,$f3
c.lt.d $f0,$f2
bc1t $L82
lw $3,16($fp)
lw $2,20($fp)
move $4,$2
sll $2,$4,3
move $5,$3
sll $4,$5,1
addu $4,$4,$3
sll $3,$4,3
lw $4,148($fp)
addu $3,$3,$4
addu $2,$2,$3
l.d $f0,0($2)
l.d $f2,$LC65
c.lt.d $f2,$f0
bc1t $L82
j $L81
$L82:
la $4,$LC66
jal printf
move $2,$0
j $L46
$L81:
lw $3,16($fp)
lw $2,20($fp)
move $4,$2
sll $2,$4,3
move $5,$3
sll $4,$5,1
addu $4,$4,$3
sll $3,$4,3
lw $4,152($fp)
addu $3,$3,$4
addu $2,$2,$3
l.d $f0,0($2)
mtc1 $0,$f2
mtc1 $0,$f3
c.lt.d $f0,$f2
bc1f $L83
la $4,$LC67
jal printf
move $2,$0
j $L46
$L83:
lw $3,16($fp)
lw $2,20($fp)
move $4,$2
sll $2,$4,3
move $5,$3
sll $4,$5,1
addu $4,$4,$3
sll $3,$4,3
lw $4,152($fp)
addu $3,$3,$4
addu $2,$2,$3
l.d $f0,32($fp)
l.d $f2,0($2)
c.lt.d $f0,$f2
bc1f $L84
lw $3,16($fp)
lw $2,20($fp)
move $4,$2
sll $2,$4,3
move $5,$3
sll $4,$5,1
addu $4,$4,$3
sll $3,$4,3
lw $4,152($fp)
addu $3,$3,$4
addu $2,$2,$3
l.d $f0,0($2)
s.d $f0,32($fp)
$L84:
$L79:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L77
$L78:
l.d $f0,32($fp)
mtc1 $0,$f2
mtc1 $0,$f3
c.eq.d $f0,$f2
bc1f $L85
la $4,$LC68
jal printf
move $2,$0
j $L46
$L85:
$L73:
lw $3,20($fp)
addu $2,$3,1
move $3,$2
sw $3,20($fp)
j $L71
$L72:
lw $3,144($fp)
addu $2,$3,48
lw $4,144($fp)
addu $3,$4,24
l.d $f0,0($3)
s.d $f0,0($2)
li $2,0x00000001 # 1
j $L46
$L46:
move $sp,$fp # sp not trusted here
lw $31,140($sp)
lw $fp,136($sp)
addu $sp,$sp,144
j $31
.end Reader
.loc 1 504
.ent Region
Region:
.frame $fp,120,$31 # vars= 88, regs= 2/1, args= 16, extra= 0
.mask 0xc0000000,-12
.fmask 0x00300000,-4
subu $sp,$sp,120
sw $31,108($sp)
sw $fp,104($sp)
s.d $f20,112($sp)
move $fp,$sp
sw $4,120($fp)
sw $5,124($fp)
sw $6,128($fp)
sw $7,132($fp)
lw $2,128($fp)
lw $4,128($fp)
addu $3,$4,8
l.d $f0,0($2)
l.d $f2,0($3)
mul.d $f20,$f0,$f2
lw $3,128($fp)
addu $2,$3,8
lw $4,128($fp)
addu $3,$4,16
l.d $f0,0($2)
l.d $f2,0($3)
mul.d $f0,$f0,$f2
add.d $f20,$f20,$f0
lw $3,128($fp)
addu $2,$3,16
lw $3,128($fp)
l.d $f0,0($2)
l.d $f2,0($3)
mul.d $f0,$f0,$f2
add.d $f20,$f20,$f0
add.d $f0,$f20,$f20
s.d $f0,64($fp)
dsz 72($fp)
l.s $f0,120($fp)
#nop
cvt.d.w $f0,$f0
s.d $f0,80($fp)
lw $2,124($fp)
sw $0,0($2)
sw $0,24($fp)
$L87:
lw $2,24($fp)
slt $3,$2,5
bne $3,$0,$L90
j $L88
$L90:
lw $2,24($fp)
move $3,$2
sll $2,$3,3
lw $3,128($fp)
addu $2,$2,$3
lw $3,24($fp)
move $4,$3
sll $3,$4,3
lw $4,128($fp)
addu $3,$3,$4
addu $4,$3,8
l.d $f0,0($2)
l.d $f2,0($4)
mul.d $f0,$f0,$f2
l.d $f2,72($fp)
add.d $f0,$f2,$f0
s.d $f0,72($fp)
lw $2,24($fp)
move $3,$2
sll $2,$3,3
lw $4,124($fp)
addu $3,$2,$4
addu $2,$3,4
l.d $f0,80($fp)
l.d $f2,72($fp)
mul.d $f0,$f0,$f2
l.d $f2,64($fp)
div.d $f0,$f0,$f2
l.d $f2,$LC69
add.d $f0,$f0,$f2
trunc.w.d $f4,$f0,$8
mfc1 $3,$f4
subu $4,$3,1
sw $4,0($2)
lw $2,24($fp)
move $3,$2
sll $2,$3,3
lw $4,124($fp)
addu $3,$2,$4
addu $2,$3,8
lw $3,24($fp)
move $4,$3
sll $3,$4,3
lw $4,124($fp)
addu $3,$3,$4
addu $4,$3,4
lw $3,0($4)
addu $4,$3,1
sw $4,0($2)
$L89:
lw $3,24($fp)
addu $2,$3,1
move $3,$2
sw $3,24($fp)
j $L87
$L88:
lw $3,124($fp)
addu $2,$3,44
lw $3,120($fp)
subu $4,$3,1
sw $4,0($2)
sw $0,24($fp)
$L91:
lw $2,24($fp)
slt $3,$2,6
bne $3,$0,$L94
j $L92
$L94:
lw $2,24($fp)
move $3,$2
sll $2,$3,3
lw $4,124($fp)
addu $3,$2,$4
addu $2,$3,4
lw $3,24($fp)
move $4,$3
sll $3,$4,3
lw $4,124($fp)
addu $3,$3,$4
lw $2,0($2)
lw $3,0($3)
subu $2,$2,$3
addu $3,$2,1
sw $3,48($fp)
dsz 80($fp)
lw $2,24($fp)
slt $3,$2,3
bne $3,$0,$L95
lw $2,24($fp)
move $3,$2
sll $2,$3,3
lw $3,128($fp)
addu $2,$2,$3
subu $3,$2,8
l.d $f0,0($3)
s.d $f0,80($fp)
$L95:
l.s $f0,48($fp)
#nop
cvt.d.w $f0,$f0
lw $2,24($fp)
move $3,$2
sll $2,$3,3
lw $3,128($fp)
addu $2,$2,$3
l.d $f2,0($2)
mul.d $f0,$f0,$f2
lw $2,24($fp)
move $3,$2
sll $2,$3,3
lw $3,128($fp)
addu $2,$2,$3
addu $3,$2,8
l.d $f2,0($3)
div.d $f0,$f0,$f2
mov.d $f12,$f0
jal sqrt
l.d $f2,$LC69
add.d $f0,$f0,$f2
trunc.w.d $f4,$f0,$8
s.s $f4,44($fp)
lw $2,44($fp)
lw $3,48($fp)
slt $2,$3,$2
beq $2,$0,$L96
lw $2,48($fp)
sw $2,44($fp)
$L96:
lw $2,44($fp)
bne $2,$0,$L97
li $2,0x00000001 # 1
sw $2,44($fp)
$L97:
lw $2,24($fp)
move $3,$2
sll $2,$3,3
lw $3,128($fp)
addu $2,$2,$3
l.s $f0,44($fp)
#nop
cvt.d.w $f0,$f0
l.d $f2,0($2)
div.d $f0,$f2,$f0
s.d $f0,96($fp)
lw $2,44($fp)
subu $3,$2,1
sw $3,28($fp)
dsz 64($fp)
sw $0,16($fp)
$L98:
lw $2,16($fp)
lw $3,44($fp)
slt $2,$2,$3
bne $2,$0,$L101
j $L99
$L101:
lw $2,28($fp)
lw $3,44($fp)
div $2,$2,$3
sw $2,32($fp)
lw $2,28($fp)
lw $3,48($fp)
addu $2,$2,$3
lw $3,44($fp)
div $2,$2,$3
lw $3,32($fp)
subu $2,$2,$3
sw $2,52($fp)
lw $2,52($fp)
bne $2,$0,$L102
la $4,$LC70
jal printf
move $2,$0
j $L86
$L102:
lw $2,24($fp)
move $3,$2
sll $2,$3,3
lw $3,128($fp)
addu $2,$2,$3
addu $3,$2,8
l.s $f0,52($fp)
#nop
cvt.d.w $f0,$f0
l.d $f2,0($3)
div.d $f0,$f2,$f0
s.d $f0,56($fp)
dsz 72($fp)
l.d $f0,96($fp)
l.d $f2,56($fp)
mul.d $f0,$f0,$f2
l.d $f2,$LC71
mul.d $f0,$f0,$f2
s.d $f0,88($fp)
lw $2,24($fp)
move $3,$2
sll $2,$3,3
lw $3,124($fp)
addu $2,$2,$3
lw $3,0($2)
lw $2,32($fp)
addu $3,$3,$2
sw $3,40($fp)
lw $2,40($fp)
lw $3,52($fp)
addu $2,$2,$3
sw $2,36($fp)
lw $2,40($fp)
sw $2,20($fp)
$L103:
lw $2,20($fp)
lw $3,36($fp)
slt $2,$2,$3
bne $2,$0,$L106
j $L104
$L106:
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,136($fp)
addu $2,$2,$3
l.d $f0,96($fp)
s.d $f0,0($2)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,136($fp)
addu $2,$2,$3
addu $3,$2,16384
l.d $f0,56($fp)
s.d $f0,0($3)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,132($fp)
addu $2,$2,$3
l.d $f0,64($fp)
s.d $f0,0($2)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,132($fp)
addu $2,$2,$3
addu $3,$2,16384
l.d $f0,72($fp)
s.d $f0,0($3)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,132($fp)
addu $2,$2,$3
li $3,0x00008000 # 32768
addu $2,$2,$3
l.d $f0,80($fp)
s.d $f0,0($2)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,140($fp)
addu $2,$2,$3
l.d $f0,88($fp)
s.d $f0,0($2)
l.d $f0,72($fp)
l.d $f2,56($fp)
add.d $f0,$f0,$f2
s.d $f0,72($fp)
$L105:
lw $3,20($fp)
addu $2,$3,1
move $3,$2
sw $3,20($fp)
j $L103
$L104:
l.d $f0,64($fp)
l.d $f2,96($fp)
add.d $f0,$f0,$f2
s.d $f0,64($fp)
lw $2,28($fp)
lw $3,48($fp)
addu $2,$2,$3
sw $2,28($fp)
$L100:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L98
$L99:
$L93:
lw $3,24($fp)
addu $2,$3,1
move $3,$2
sw $3,24($fp)
j $L91
$L92:
li $2,0x00000001 # 1
j $L86
$L86:
move $sp,$fp # sp not trusted here
lw $31,108($sp)
lw $fp,104($sp)
l.d $f20,112($sp)
addu $sp,$sp,120
j $31
.end Region
.loc 1 590
.ent SetUp1
SetUp1:
.frame $fp,256,$31 # vars= 232, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,256
sw $31,252($sp)
sw $fp,248($sp)
move $fp,$sp
sw $4,256($fp)
sw $5,260($fp)
sw $6,264($fp)
sw $7,268($fp)
sw $0,36($fp)
$L108:
lw $2,36($fp)
slt $3,$2,3
bne $3,$0,$L111
j $L109
$L111:
lw $2,36($fp)
addu $3,$2,3
sw $3,44($fp)
lw $2,44($fp)
move $3,$2
sll $2,$3,3
lw $3,260($fp)
addu $2,$2,$3
lw $3,0($2)
move $2,$3
sll $3,$2,3
lw $4,268($fp)
addu $2,$3,$4
li $3,0x00008000 # 32768
addu $2,$2,$3
lw $3,44($fp)
move $4,$3
sll $3,$4,3
lw $4,260($fp)
addu $3,$3,$4
lw $4,0($3)
move $3,$4
sll $4,$3,3
lw $5,268($fp)
addu $3,$4,$5
li $4,0x00008000 # 32768
addu $3,$3,$4
l.d $f0,0($2)
l.d $f2,0($3)
mul.d $f0,$f0,$f2
s.d $f0,184($fp)
l.d $f0,184($fp)
l.d $f2,184($fp)
add.d $f0,$f0,$f2
s.d $f0,224($fp)
lw $2,36($fp)
move $3,$2
sll $2,$3,3
lw $3,260($fp)
addu $2,$2,$3
lw $3,0($2)
sw $3,40($fp)
$L112:
lw $2,36($fp)
move $3,$2
sll $2,$3,3
lw $3,260($fp)
addu $2,$2,$3
addu $3,$2,4
lw $2,40($fp)
lw $3,0($3)
slt $2,$3,$2
bne $2,$0,$L113
$L115:
lw $2,44($fp)
move $3,$2
sll $2,$3,3
lw $3,260($fp)
addu $2,$2,$3
lw $3,0($2)
sw $3,48($fp)
$L116:
lw $2,44($fp)
move $3,$2
sll $2,$3,3
lw $3,260($fp)
addu $2,$2,$3
addu $3,$2,4
lw $2,48($fp)
lw $3,0($3)
slt $2,$3,$2
bne $2,$0,$L117
$L119:
sw $0,20($fp)
$L120:
lw $2,20($fp)
slt $3,$2,2
bne $3,$0,$L123
j $L121
$L123:
lw $2,20($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,16
addu $3,$2,$4
addu $2,$3,40
lw $4,20($fp)
lw $3,48($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,268($fp)
addu $4,$5,$6
addu $3,$3,$4
lw $5,20($fp)
lw $4,40($fp)
move $6,$4
sll $4,$6,3
sll $6,$5,14
lw $7,268($fp)
addu $5,$6,$7
addu $4,$4,$5
l.d $f0,0($3)
l.d $f2,0($4)
sub.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,16
addu $3,$2,$4
addu $2,$3,72
lw $3,20($fp)
move $4,$3
sll $3,$4,3
addu $5,$fp,16
addu $4,$3,$5
addu $3,$4,40
lw $5,20($fp)
lw $4,48($fp)
move $6,$4
sll $4,$6,3
sll $6,$5,14
lw $7,272($fp)
addu $5,$6,$7
addu $4,$4,$5
l.d $f0,0($3)
l.d $f2,0($4)
add.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,16
addu $3,$2,$4
addu $2,$3,56
lw $3,20($fp)
move $4,$3
sll $3,$4,3
addu $5,$fp,16
addu $4,$3,$5
addu $3,$4,40
lw $5,20($fp)
lw $4,40($fp)
move $6,$4
sll $4,$6,3
sll $6,$5,14
lw $7,272($fp)
addu $5,$6,$7
addu $4,$4,$5
l.d $f0,0($3)
l.d $f2,0($4)
sub.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,16
addu $3,$2,$4
addu $2,$3,88
lw $3,20($fp)
move $4,$3
sll $3,$4,3
addu $5,$fp,16
addu $4,$3,$5
addu $3,$4,72
lw $5,20($fp)
lw $4,40($fp)
move $6,$4
sll $4,$6,3
sll $6,$5,14
lw $7,272($fp)
addu $5,$6,$7
addu $4,$4,$5
l.d $f0,0($3)
l.d $f2,0($4)
sub.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,16
addu $3,$2,$4
addu $2,$3,104
lw $3,20($fp)
move $4,$3
sll $3,$4,3
addu $5,$fp,16
addu $4,$3,$5
addu $3,$4,40
lw $4,20($fp)
move $5,$4
sll $4,$5,3
addu $5,$fp,16
addu $4,$4,$5
addu $5,$4,40
l.d $f0,0($3)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,16
addu $3,$2,$4
addu $2,$3,136
lw $3,20($fp)
move $4,$3
sll $3,$4,3
addu $5,$fp,16
addu $4,$3,$5
addu $3,$4,72
lw $4,20($fp)
move $5,$4
sll $4,$5,3
addu $5,$fp,16
addu $4,$4,$5
addu $5,$4,72
l.d $f0,0($3)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,16
addu $3,$2,$4
addu $2,$3,120
lw $3,20($fp)
move $4,$3
sll $3,$4,3
addu $5,$fp,16
addu $4,$3,$5
addu $3,$4,56
lw $4,20($fp)
move $5,$4
sll $4,$5,3
addu $5,$fp,16
addu $4,$4,$5
addu $5,$4,56
l.d $f0,0($3)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,16
addu $3,$2,$4
addu $2,$3,152
lw $3,20($fp)
move $4,$3
sll $3,$4,3
addu $5,$fp,16
addu $4,$3,$5
addu $3,$4,88
lw $4,20($fp)
move $5,$4
sll $4,$5,3
addu $5,$fp,16
addu $4,$4,$5
addu $5,$4,88
l.d $f0,0($3)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
$L122:
lw $3,20($fp)
addu $2,$3,1
move $3,$2
sw $3,20($fp)
j $L120
$L121:
dsz 192($fp)
sw $0,28($fp)
$L124:
lw $2,28($fp)
slt $3,$2,2
bne $3,$0,$L127
j $L125
$L127:
sw $0,16($fp)
$L128:
lw $2,16($fp)
slt $3,$2,2
bne $3,$0,$L131
j $L129
$L131:
lw $2,16($fp)
move $3,$2
sll $2,$3,4
lw $3,28($fp)
move $4,$3
sll $3,$4,5
addu $2,$2,$3
addu $3,$fp,120
addu $2,$3,$2
l.d $f0,8($2)
l.d $f2,184($fp)
add.d $f0,$f0,$f2
s.d $f0,200($fp)
l.d $f12,200($fp)
jal sqrt
s.d $f0,208($fp)
l.d $f0,$LC72
l.d $f2,208($fp)
div.d $f0,$f0,$f2
s.d $f0,216($fp)
dsz 240($fp)
sw $0,24($fp)
$L132:
lw $2,24($fp)
slt $3,$2,2
bne $3,$0,$L135
j $L133
$L135:
sw $0,32($fp)
$L136:
lw $2,32($fp)
slt $3,$2,2
bne $3,$0,$L139
j $L137
$L139:
lw $2,32($fp)
move $3,$2
sll $2,$3,4
lw $3,24($fp)
move $4,$3
sll $3,$4,5
addu $2,$2,$3
addu $3,$fp,56
addu $2,$3,$2
l.d $f0,0($2)
s.d $f0,232($fp)
l.d $f0,232($fp)
l.d $f2,216($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
l.d $f4,232($fp)
neg.d $f2,$f4
mul.d $f0,$f2,$f0
l.d $f2,240($fp)
sub.d $f0,$f0,$f2
s.d $f0,240($fp)
$L138:
lw $3,32($fp)
addu $2,$3,1
move $3,$2
sw $3,32($fp)
j $L136
$L137:
l.d $f0,240($fp)
neg.d $f2,$f0
s.d $f2,240($fp)
$L134:
lw $3,24($fp)
addu $2,$3,1
move $3,$2
sw $3,24($fp)
j $L132
$L133:
l.d $f0,152($fp)
l.d $f2,200($fp)
add.d $f0,$f0,$f2
l.d $f2,136($fp)
l.d $f4,200($fp)
add.d $f2,$f2,$f4
mul.d $f0,$f0,$f2
l.d $f2,120($fp)
l.d $f4,200($fp)
add.d $f2,$f2,$f4
l.d $f4,168($fp)
l.d $f6,200($fp)
add.d $f4,$f4,$f6
mul.d $f2,$f2,$f4
div.d $f0,$f0,$f2
mov.d $f12,$f0
jal log
l.d $f2,208($fp)
l.d $f4,$LC73
mul.d $f2,$f2,$f4
l.d $f4,240($fp)
mul.d $f2,$f2,$f4
l.d $f4,192($fp)
sub.d $f2,$f2,$f4
l.d $f4,224($fp)
mul.d $f0,$f0,$f4
sub.d $f2,$f2,$f0
s.d $f2,192($fp)
$L130:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L128
$L129:
l.d $f0,192($fp)
neg.d $f2,$f0
s.d $f2,192($fp)
$L126:
lw $3,28($fp)
addu $2,$3,1
move $3,$2
sw $3,28($fp)
j $L124
$L125:
.set noreorder
nop
.set reorder
sw $0,28($fp)
$L140:
lw $2,28($fp)
slt $3,$2,2
bne $3,$0,$L143
j $L141
$L143:
sw $0,16($fp)
$L144:
lw $2,16($fp)
slt $3,$2,2
bne $3,$0,$L147
j $L145
$L147:
lw $2,16($fp)
move $3,$2
sll $2,$3,4
lw $3,28($fp)
move $4,$3
sll $3,$4,5
addu $2,$2,$3
addu $3,$fp,120
addu $2,$3,$2
l.d $f0,0($2)
l.d $f2,184($fp)
add.d $f0,$f0,$f2
mov.d $f12,$f0
jal sqrt
s.d $f0,208($fp)
l.d $f0,$LC72
l.d $f2,208($fp)
div.d $f0,$f0,$f2
s.d $f0,216($fp)
dsz 240($fp)
sw $0,24($fp)
$L148:
lw $2,24($fp)
slt $3,$2,2
bne $3,$0,$L151
j $L149
$L151:
sw $0,32($fp)
$L152:
lw $2,32($fp)
slt $3,$2,2
bne $3,$0,$L155
j $L153
$L155:
lw $2,32($fp)
move $3,$2
sll $2,$3,4
lw $3,24($fp)
move $4,$3
sll $3,$4,5
addu $2,$2,$3
addu $3,$fp,56
addu $2,$3,$2
l.d $f0,8($2)
s.d $f0,232($fp)
l.d $f0,232($fp)
l.d $f2,216($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
l.d $f4,232($fp)
neg.d $f2,$f4
mul.d $f0,$f2,$f0
l.d $f2,240($fp)
sub.d $f0,$f0,$f2
s.d $f0,240($fp)
$L154:
lw $3,32($fp)
addu $2,$3,1
move $3,$2
sw $3,32($fp)
j $L152
$L153:
l.d $f0,240($fp)
neg.d $f2,$f0
s.d $f2,240($fp)
$L150:
lw $3,24($fp)
addu $2,$3,1
move $3,$2
sw $3,24($fp)
j $L148
$L149:
l.d $f0,208($fp)
l.d $f2,$LC73
mul.d $f0,$f0,$f2
l.d $f2,240($fp)
mul.d $f0,$f0,$f2
l.d $f2,192($fp)
sub.d $f0,$f0,$f2
s.d $f0,192($fp)
$L146:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L144
$L145:
l.d $f0,192($fp)
neg.d $f2,$f0
s.d $f2,192($fp)
$L142:
lw $3,28($fp)
addu $2,$3,1
move $3,$2
sw $3,28($fp)
j $L140
$L141:
lw $3,40($fp)
lw $2,48($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,264($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f0,192($fp)
s.d $f0,0($2)
lw $3,48($fp)
lw $2,40($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,264($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f0,192($fp)
s.d $f0,0($2)
$L118:
lw $3,48($fp)
addu $2,$3,1
move $3,$2
sw $3,48($fp)
j $L116
$L117:
$L114:
lw $3,40($fp)
addu $2,$3,1
move $3,$2
sw $3,40($fp)
j $L112
$L113:
$L110:
lw $3,36($fp)
addu $2,$3,1
move $3,$2
sw $3,36($fp)
j $L108
$L109:
$L107:
move $sp,$fp # sp not trusted here
lw $31,252($sp)
lw $fp,248($sp)
addu $sp,$sp,256
j $31
.end SetUp1
.loc 1 673
.ent SetUp2
SetUp2:
.frame $fp,512,$31 # vars= 440, regs= 2/6, args= 16, extra= 0
.mask 0xc0000000,-52
.fmask 0xfff00000,-4
subu $sp,$sp,512
sw $31,460($sp)
sw $fp,456($sp)
s.d $f30,504($sp)
s.d $f28,496($sp)
s.d $f26,488($sp)
s.d $f24,480($sp)
s.d $f22,472($sp)
s.d $f20,464($sp)
move $fp,$sp
sw $4,512($fp)
sw $5,516($fp)
sw $6,520($fp)
sw $7,524($fp)
sw $0,20($fp)
$L157:
lw $2,20($fp)
slt $3,$2,6
bne $3,$0,$L160
j $L158
$L160:
sw $0,16($fp)
$L161:
lw $2,16($fp)
slt $3,$2,2
bne $3,$0,$L164
j $L162
$L164:
lw $2,20($fp)
lw $4,16($fp)
addu $3,$2,$4
addu $2,$3,1
li $6,0x2aaaaaab # 715827883
mult $2,$6
mfhi $5
mflo $4
srl $6,$5,0
move $7,$0
sra $4,$2,31
subu $3,$6,$4
move $5,$3
sll $4,$5,1
addu $4,$4,$3
sll $3,$4,1
subu $2,$2,$3
sw $2,28($fp)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,516($fp)
addu $2,$2,$3
lw $3,0($2)
sw $3,24($fp)
$L165:
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,516($fp)
addu $2,$2,$3
addu $3,$2,4
lw $2,24($fp)
lw $3,0($3)
slt $2,$3,$2
bne $2,$0,$L166
$L168:
lw $3,16($fp)
lw $2,24($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,524($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $3,28($fp)
move $4,$3
sll $3,$4,3
lw $4,516($fp)
addu $3,$3,$4
lw $4,0($3)
move $3,$4
sll $4,$3,3
lw $5,524($fp)
addu $3,$4,$5
li $4,0x00008000 # 32768
addu $3,$3,$4
l.d $f0,0($2)
l.d $f2,0($3)
sub.d $f0,$f0,$f2
s.d $f0,216($fp)
lw $3,16($fp)
lw $2,24($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,528($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f0,216($fp)
l.d $f2,0($2)
add.d $f0,$f0,$f2
s.d $f0,224($fp)
l.d $f0,216($fp)
l.d $f2,216($fp)
mul.d $f0,$f0,$f2
s.d $f0,216($fp)
l.d $f0,224($fp)
l.d $f2,224($fp)
mul.d $f0,$f0,$f2
s.d $f0,224($fp)
lw $2,28($fp)
move $3,$2
sll $2,$3,3
lw $3,516($fp)
addu $2,$2,$3
lw $3,0($2)
sw $3,32($fp)
$L169:
lw $2,28($fp)
move $3,$2
sll $2,$3,3
lw $3,516($fp)
addu $2,$2,$3
addu $3,$2,4
lw $2,32($fp)
lw $3,0($3)
slt $2,$3,$2
bne $2,$0,$L170
$L172:
lw $3,16($fp)
lw $2,32($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,524($fp)
addu $3,$4,$5
addu $2,$2,$3
li $3,0x00000001 # 1
lw $5,16($fp)
subu $4,$3,$5
lw $3,24($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,524($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f0,0($2)
l.d $f2,0($3)
sub.d $f0,$f0,$f2
s.d $f0,56($fp)
lw $3,16($fp)
lw $2,32($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,528($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f0,56($fp)
l.d $f2,0($2)
add.d $f0,$f0,$f2
s.d $f0,64($fp)
li $2,0x00000001 # 1
lw $4,16($fp)
subu $3,$2,$4
lw $2,24($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,528($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f0,56($fp)
l.d $f2,0($2)
sub.d $f0,$f0,$f2
s.d $f0,72($fp)
li $2,0x00000001 # 1
lw $4,16($fp)
subu $3,$2,$4
lw $2,24($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,528($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f0,64($fp)
l.d $f2,0($2)
sub.d $f0,$f0,$f2
s.d $f0,80($fp)
l.d $f0,56($fp)
l.d $f2,56($fp)
mul.d $f0,$f0,$f2
s.d $f0,88($fp)
l.d $f0,64($fp)
l.d $f2,64($fp)
mul.d $f0,$f0,$f2
s.d $f0,96($fp)
l.d $f0,72($fp)
l.d $f2,72($fp)
mul.d $f0,$f0,$f2
s.d $f0,104($fp)
l.d $f0,80($fp)
l.d $f2,80($fp)
mul.d $f0,$f0,$f2
s.d $f0,112($fp)
li $2,0x00000001 # 1
lw $4,16($fp)
subu $3,$2,$4
lw $2,32($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,524($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $3,24($fp)
move $4,$3
sll $3,$4,3
lw $4,524($fp)
addu $3,$3,$4
li $4,0x00008000 # 32768
addu $3,$3,$4
l.d $f0,0($2)
l.d $f2,0($3)
sub.d $f0,$f0,$f2
s.d $f0,232($fp)
li $2,0x00000001 # 1
lw $4,16($fp)
subu $3,$2,$4
lw $2,32($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,528($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f0,232($fp)
l.d $f2,0($2)
add.d $f0,$f0,$f2
s.d $f0,240($fp)
l.d $f0,232($fp)
l.d $f2,232($fp)
mul.d $f0,$f0,$f2
l.d $f2,$LC74
add.d $f0,$f0,$f2
s.d $f0,232($fp)
l.d $f0,240($fp)
l.d $f2,240($fp)
mul.d $f0,$f0,$f2
l.d $f2,$LC74
add.d $f0,$f0,$f2
s.d $f0,240($fp)
l.d $f0,216($fp)
l.d $f2,232($fp)
add.d $f0,$f0,$f2
s.d $f0,152($fp)
l.d $f0,216($fp)
l.d $f2,240($fp)
add.d $f0,$f0,$f2
s.d $f0,160($fp)
l.d $f0,224($fp)
l.d $f2,232($fp)
add.d $f0,$f0,$f2
s.d $f0,168($fp)
l.d $f0,224($fp)
l.d $f2,240($fp)
add.d $f0,$f0,$f2
s.d $f0,176($fp)
l.d $f12,152($fp)
jal sqrt
s.d $f0,120($fp)
l.d $f12,160($fp)
jal sqrt
s.d $f0,128($fp)
l.d $f12,168($fp)
jal sqrt
s.d $f0,136($fp)
l.d $f12,176($fp)
jal sqrt
s.d $f0,144($fp)
l.d $f0,$LC75
l.d $f2,120($fp)
div.d $f0,$f0,$f2
s.d $f0,184($fp)
l.d $f0,$LC75
l.d $f2,128($fp)
div.d $f0,$f0,$f2
s.d $f0,192($fp)
l.d $f0,$LC75
l.d $f2,136($fp)
div.d $f0,$f0,$f2
s.d $f0,200($fp)
l.d $f0,$LC75
l.d $f2,144($fp)
div.d $f0,$f0,$f2
s.d $f0,208($fp)
l.d $f0,56($fp)
l.d $f2,184($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
mov.d $f20,$f0
l.d $f0,64($fp)
l.d $f2,184($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
mov.d $f22,$f0
l.d $f0,72($fp)
l.d $f2,184($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
mov.d $f24,$f0
l.d $f0,80($fp)
l.d $f2,184($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
mov.d $f26,$f0
l.d $f0,56($fp)
l.d $f2,192($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
mov.d $f28,$f0
l.d $f0,64($fp)
l.d $f2,192($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
mov.d $f30,$f0
l.d $f0,72($fp)
l.d $f2,192($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
s.d $f0,376($fp)
l.d $f0,80($fp)
l.d $f2,192($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
s.d $f0,384($fp)
l.d $f0,56($fp)
l.d $f2,200($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
s.d $f0,392($fp)
l.d $f0,64($fp)
l.d $f2,200($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
s.d $f0,400($fp)
l.d $f0,72($fp)
l.d $f2,200($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
s.d $f0,408($fp)
l.d $f0,80($fp)
l.d $f2,200($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
s.d $f0,416($fp)
l.d $f0,56($fp)
l.d $f2,208($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
s.d $f0,424($fp)
l.d $f0,64($fp)
l.d $f2,208($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
s.d $f0,432($fp)
l.d $f0,72($fp)
l.d $f2,208($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
s.d $f0,440($fp)
l.d $f0,80($fp)
l.d $f2,208($fp)
mul.d $f0,$f0,$f2
mov.d $f12,$f0
jal atan
l.d $f4,56($fp)
mul.d $f2,$f20,$f4
l.d $f6,64($fp)
mul.d $f4,$f22,$f6
sub.d $f2,$f2,$f4
l.d $f6,72($fp)
mul.d $f4,$f24,$f6
sub.d $f2,$f2,$f4
l.d $f6,80($fp)
mul.d $f4,$f26,$f6
add.d $f2,$f2,$f4
l.d $f4,120($fp)
mul.d $f2,$f2,$f4
l.d $f4,56($fp)
neg.d $f6,$f4
mul.d $f4,$f6,$f28
l.d $f8,64($fp)
mul.d $f6,$f30,$f8
add.d $f4,$f4,$f6
l.d $f8,72($fp)
l.d $f10,376($fp)
mul.d $f6,$f10,$f8
add.d $f4,$f4,$f6
l.d $f8,80($fp)
l.d $f10,384($fp)
mul.d $f6,$f10,$f8
sub.d $f4,$f4,$f6
l.d $f6,128($fp)
mul.d $f4,$f4,$f6
add.d $f2,$f2,$f4
l.d $f4,56($fp)
neg.d $f6,$f4
l.d $f10,392($fp)
mul.d $f4,$f6,$f10
l.d $f8,64($fp)
l.d $f10,400($fp)
mul.d $f6,$f10,$f8
add.d $f4,$f4,$f6
l.d $f8,72($fp)
l.d $f10,408($fp)
mul.d $f6,$f10,$f8
add.d $f4,$f4,$f6
l.d $f8,80($fp)
l.d $f10,416($fp)
mul.d $f6,$f10,$f8
sub.d $f4,$f4,$f6
l.d $f6,136($fp)
mul.d $f4,$f4,$f6
add.d $f2,$f2,$f4
l.d $f6,56($fp)
l.d $f10,424($fp)
mul.d $f4,$f10,$f6
l.d $f8,64($fp)
l.d $f10,432($fp)
mul.d $f6,$f10,$f8
sub.d $f4,$f4,$f6
l.d $f8,72($fp)
l.d $f10,440($fp)
mul.d $f6,$f10,$f8
sub.d $f4,$f4,$f6
l.d $f6,80($fp)
mul.d $f0,$f0,$f6
add.d $f4,$f4,$f0
l.d $f6,144($fp)
mul.d $f0,$f4,$f6
add.d $f2,$f2,$f0
s.d $f2,48($fp)
l.d $f0,88($fp)
l.d $f2,152($fp)
add.d $f0,$f0,$f2
s.d $f0,248($fp)
l.d $f0,96($fp)
l.d $f2,152($fp)
add.d $f0,$f0,$f2
s.d $f0,256($fp)
l.d $f0,104($fp)
l.d $f2,152($fp)
add.d $f0,$f0,$f2
s.d $f0,264($fp)
l.d $f0,112($fp)
l.d $f2,152($fp)
add.d $f0,$f0,$f2
s.d $f0,272($fp)
l.d $f0,88($fp)
l.d $f2,160($fp)
add.d $f0,$f0,$f2
s.d $f0,280($fp)
l.d $f0,96($fp)
l.d $f2,160($fp)
add.d $f0,$f0,$f2
s.d $f0,288($fp)
l.d $f0,104($fp)
l.d $f2,160($fp)
add.d $f0,$f0,$f2
s.d $f0,296($fp)
l.d $f0,112($fp)
l.d $f2,160($fp)
add.d $f0,$f0,$f2
s.d $f0,304($fp)
l.d $f0,88($fp)
l.d $f2,168($fp)
add.d $f0,$f0,$f2
s.d $f0,312($fp)
l.d $f0,96($fp)
l.d $f2,168($fp)
add.d $f0,$f0,$f2
s.d $f0,320($fp)
l.d $f0,104($fp)
l.d $f2,168($fp)
add.d $f0,$f0,$f2
s.d $f0,328($fp)
l.d $f0,112($fp)
l.d $f2,168($fp)
add.d $f0,$f0,$f2
s.d $f0,336($fp)
l.d $f0,88($fp)
l.d $f2,176($fp)
add.d $f0,$f0,$f2
s.d $f0,344($fp)
l.d $f0,96($fp)
l.d $f2,176($fp)
add.d $f0,$f0,$f2
s.d $f0,352($fp)
l.d $f0,104($fp)
l.d $f2,176($fp)
add.d $f0,$f0,$f2
s.d $f0,360($fp)
l.d $f0,112($fp)
l.d $f2,176($fp)
add.d $f0,$f0,$f2
s.d $f0,368($fp)
l.d $f0,248($fp)
l.d $f2,344($fp)
mul.d $f0,$f0,$f2
l.d $f2,280($fp)
l.d $f4,312($fp)
mul.d $f2,$f2,$f4
div.d $f0,$f0,$f2
mov.d $f12,$f0
jal log
mov.d $f20,$f0
l.d $f0,256($fp)
l.d $f2,352($fp)
mul.d $f0,$f0,$f2
l.d $f2,288($fp)
l.d $f4,320($fp)
mul.d $f2,$f2,$f4
div.d $f0,$f0,$f2
mov.d $f12,$f0
jal log
mov.d $f22,$f0
l.d $f0,264($fp)
l.d $f2,360($fp)
mul.d $f0,$f0,$f2
l.d $f2,296($fp)
l.d $f4,328($fp)
mul.d $f2,$f2,$f4
div.d $f0,$f0,$f2
mov.d $f12,$f0
jal log
mov.d $f24,$f0
l.d $f0,272($fp)
l.d $f2,368($fp)
mul.d $f0,$f0,$f2
l.d $f2,304($fp)
l.d $f4,336($fp)
mul.d $f2,$f2,$f4
div.d $f0,$f0,$f2
mov.d $f12,$f0
jal log
mov.d $f26,$f0
l.d $f0,248($fp)
l.d $f2,272($fp)
mul.d $f0,$f0,$f2
l.d $f2,256($fp)
l.d $f4,264($fp)
mul.d $f2,$f2,$f4
div.d $f0,$f0,$f2
mov.d $f12,$f0
jal log
mov.d $f28,$f0
l.d $f0,280($fp)
l.d $f2,304($fp)
mul.d $f0,$f0,$f2
l.d $f2,288($fp)
l.d $f4,296($fp)
mul.d $f2,$f2,$f4
div.d $f0,$f0,$f2
mov.d $f12,$f0
jal log
mov.d $f30,$f0
l.d $f0,312($fp)
l.d $f2,336($fp)
mul.d $f0,$f0,$f2
l.d $f2,320($fp)
l.d $f4,328($fp)
mul.d $f2,$f2,$f4
div.d $f0,$f0,$f2
mov.d $f12,$f0
jal log
s.d $f0,448($fp)
l.d $f0,344($fp)
l.d $f2,368($fp)
mul.d $f0,$f0,$f2
l.d $f2,352($fp)
l.d $f4,360($fp)
mul.d $f2,$f2,$f4
div.d $f0,$f0,$f2
mov.d $f12,$f0
jal log
l.d $f4,88($fp)
mul.d $f2,$f20,$f4
l.d $f6,96($fp)
mul.d $f4,$f22,$f6
sub.d $f2,$f2,$f4
l.d $f6,104($fp)
mul.d $f4,$f24,$f6
sub.d $f2,$f2,$f4
l.d $f6,112($fp)
mul.d $f4,$f26,$f6
add.d $f2,$f2,$f4
l.d $f6,152($fp)
mul.d $f4,$f28,$f6
sub.d $f2,$f2,$f4
l.d $f6,160($fp)
mul.d $f4,$f30,$f6
add.d $f2,$f2,$f4
l.d $f6,168($fp)
l.d $f10,448($fp)
mul.d $f4,$f10,$f6
add.d $f2,$f2,$f4
l.d $f4,176($fp)
mul.d $f0,$f0,$f4
sub.d $f2,$f2,$f0
s.d $f2,40($fp)
lw $3,24($fp)
lw $2,32($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,520($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f0,48($fp)
l.d $f2,$LC76
mul.d $f0,$f0,$f2
l.d $f2,40($fp)
add.d $f0,$f0,$f2
abs.d $f2,$f0
s.d $f2,0($2)
lw $3,32($fp)
lw $2,24($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,520($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,24($fp)
lw $3,32($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,520($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
$L171:
lw $3,32($fp)
addu $2,$3,1
move $3,$2
sw $3,32($fp)
j $L169
$L170:
$L167:
lw $3,24($fp)
addu $2,$3,1
move $3,$2
sw $3,24($fp)
j $L165
$L166:
$L163:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L161
$L162:
$L159:
lw $3,20($fp)
addu $2,$3,1
move $3,$2
sw $3,20($fp)
j $L157
$L158:
$L156:
move $sp,$fp # sp not trusted here
lw $31,460($sp)
lw $fp,456($sp)
l.d $f30,504($sp)
l.d $f28,496($sp)
l.d $f26,488($sp)
l.d $f24,480($sp)
l.d $f22,472($sp)
l.d $f20,464($sp)
addu $sp,$sp,512
j $31
.end SetUp2
.loc 1 787
.ent SetUp3
SetUp3:
.frame $fp,96,$31 # vars= 72, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,96
sw $31,92($sp)
sw $fp,88($sp)
move $fp,$sp
sw $4,96($fp)
sw $5,100($fp)
sw $6,104($fp)
sw $7,108($fp)
sw $0,20($fp)
$L174:
lw $2,20($fp)
slt $3,$2,6
bne $3,$0,$L177
j $L175
$L177:
sw $0,16($fp)
$L178:
lw $2,16($fp)
slt $3,$2,3
bne $3,$0,$L181
j $L179
$L181:
lw $2,16($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,16
addu $3,$2,$4
addu $2,$3,24
lw $4,20($fp)
lw $3,16($fp)
move $5,$3
sll $3,$5,3
move $6,$4
sll $5,$6,1
addu $5,$5,$4
sll $4,$5,3
lw $5,108($fp)
addu $4,$4,$5
addu $3,$3,$4
l.d $f0,$LC77
l.d $f2,0($3)
div.d $f0,$f0,$f2
s.d $f0,0($2)
lw $2,16($fp)
move $3,$2
sll $2,$3,3
addu $4,$fp,16
addu $3,$2,$4
addu $2,$3,48
lw $4,20($fp)
lw $3,16($fp)
move $5,$3
sll $3,$5,3
move $6,$4
sll $5,$6,1
addu $5,$5,$4
sll $4,$5,3
lw $5,112($fp)
addu $4,$4,$5
addu $3,$3,$4
lw $4,16($fp)
move $5,$4
sll $4,$5,3
addu $5,$fp,16
addu $4,$4,$5
addu $5,$4,24
l.d $f0,0($3)
l.d $f2,0($5)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
$L180:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L178
$L179:
.set noreorder
nop
.set reorder
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,100($fp)
addu $2,$2,$3
lw $3,0($2)
sw $3,24($fp)
$L182:
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,100($fp)
addu $2,$2,$3
addu $3,$2,4
lw $2,24($fp)
lw $3,0($3)
slt $2,$3,$2
bne $2,$0,$L183
$L185:
dsz 32($fp)
sw $0,28($fp)
$L186:
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,100($fp)
addu $2,$2,$3
lw $3,28($fp)
lw $2,0($2)
slt $3,$3,$2
bne $3,$0,$L189
j $L187
$L189:
lw $3,24($fp)
lw $2,28($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,116($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f0,32($fp)
l.d $f2,0($2)
add.d $f0,$f0,$f2
s.d $f0,32($fp)
$L188:
lw $3,28($fp)
addu $2,$3,1
move $3,$2
sw $3,28($fp)
j $L186
$L187:
.set noreorder
nop
.set reorder
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,100($fp)
addu $2,$2,$3
addu $3,$2,4
lw $2,0($3)
addu $3,$2,1
sw $3,28($fp)
$L190:
lw $2,28($fp)
lw $3,96($fp)
slt $2,$2,$3
bne $2,$0,$L193
j $L191
$L193:
lw $3,24($fp)
lw $2,28($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,116($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f0,32($fp)
l.d $f2,0($2)
add.d $f0,$f0,$f2
s.d $f0,32($fp)
$L192:
lw $3,28($fp)
addu $2,$3,1
move $3,$2
sw $3,28($fp)
j $L190
$L191:
lw $2,24($fp)
move $3,$2
sll $2,$3,3
lw $3,104($fp)
addu $2,$2,$3
l.d $f0,32($fp)
l.d $f4,0($2)
sub.d $f2,$f0,$f4
abs.d $f0,$f2
l.d $f2,32($fp)
l.d $f4,$LC78
mul.d $f2,$f2,$f4
c.lt.d $f2,$f0
bc1f $L194
la $4,$LC79
jal printf
move $2,$0
j $L173
$L194:
l.d $f0,32($fp)
neg.d $f2,$f0
s.d $f2,32($fp)
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,100($fp)
addu $2,$2,$3
lw $3,0($2)
sw $3,28($fp)
$L195:
lw $2,20($fp)
move $3,$2
sll $2,$3,3
lw $3,100($fp)
addu $2,$2,$3
addu $3,$2,4
lw $2,28($fp)
lw $3,0($3)
slt $2,$3,$2
bne $2,$0,$L196
$L198:
lw $3,24($fp)
lw $2,28($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,116($fp)
addu $3,$4,$5
addu $2,$2,$3
dsz 0($2)
$L197:
lw $3,28($fp)
addu $2,$3,1
move $3,$2
sw $3,28($fp)
j $L195
$L196:
.set noreorder
nop
.set reorder
sw $0,16($fp)
$L199:
lw $2,16($fp)
slt $3,$2,3
bne $3,$0,$L202
j $L200
$L202:
lw $3,16($fp)
lw $2,24($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,120($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $3,16($fp)
move $4,$3
sll $3,$4,3
addu $4,$fp,16
addu $3,$3,$4
addu $4,$3,24
l.d $f0,0($4)
l.d $f2,32($fp)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
lw $3,16($fp)
lw $2,24($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,124($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $3,16($fp)
move $4,$3
sll $3,$4,3
addu $4,$fp,16
addu $3,$3,$4
addu $4,$3,48
l.d $f0,0($4)
l.d $f2,32($fp)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
$L201:
lw $3,16($fp)
addu $2,$3,1
move $3,$2
sw $3,16($fp)
j $L199
$L200:
$L184:
lw $3,24($fp)
addu $2,$3,1
move $3,$2
sw $3,24($fp)
j $L182
$L183:
$L176:
lw $3,20($fp)
addu $2,$3,1
move $3,$2
sw $3,20($fp)
j $L174
$L175:
li $2,0x00000001 # 1
j $L173
$L173:
move $sp,$fp # sp not trusted here
lw $31,92($sp)
lw $fp,88($sp)
addu $sp,$sp,96
j $31
.end SetUp3
.loc 1 855
.ent Solver
Solver:
.frame $fp,56,$31 # vars= 24, regs= 2/0, args= 24, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,56
sw $31,52($sp)
sw $fp,48($sp)
move $fp,$sp
sw $4,56($fp)
sw $5,60($fp)
sw $6,64($fp)
sw $7,68($fp)
sw $0,36($fp)
$L204:
lw $2,36($fp)
slt $3,$2,3
bne $3,$0,$L207
j $L205
$L207:
lw $2,60($fp)
sw $2,24($fp)
$L208:
lw $2,24($fp)
lw $3,56($fp)
slt $2,$2,$3
bne $2,$0,$L211
j $L209
$L211:
lw $3,24($fp)
lw $2,24($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,64($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,36($fp)
lw $3,24($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,68($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
lw $3,36($fp)
lw $2,24($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,76($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,36($fp)
lw $3,24($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,72($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
sw $0,28($fp)
$L212:
lw $2,28($fp)
lw $3,24($fp)
slt $2,$2,$3
bne $2,$0,$L215
j $L213
$L215:
lw $3,24($fp)
lw $2,28($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,64($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,28($fp)
lw $3,24($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,64($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
$L214:
lw $3,28($fp)
addu $2,$3,1
move $3,$2
sw $3,28($fp)
j $L212
$L213:
$L210:
lw $3,24($fp)
addu $2,$3,1
move $3,$2
sw $3,24($fp)
j $L208
$L209:
.set noreorder
nop
.set reorder
sw $0,28($fp)
$L216:
lw $2,28($fp)
lw $3,60($fp)
slt $2,$2,$3
bne $2,$0,$L219
j $L217
$L219:
lw $3,28($fp)
lw $2,28($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,64($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,36($fp)
lw $3,28($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,68($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f0,$LC80
l.d $f2,0($3)
div.d $f0,$f0,$f2
s.d $f0,0($2)
lw $3,36($fp)
lw $2,28($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,76($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,36($fp)
lw $3,28($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,72($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
$L218:
lw $3,28($fp)
addu $2,$3,1
move $3,$2
sw $3,28($fp)
j $L216
$L217:
.set noreorder
nop
.set reorder
lw $2,60($fp)
sw $2,28($fp)
$L220:
lw $2,28($fp)
lw $3,56($fp)
slt $2,$2,$3
bne $2,$0,$L223
j $L221
$L223:
lw $2,60($fp)
sw $2,32($fp)
$L224:
lw $2,32($fp)
lw $3,28($fp)
slt $2,$2,$3
bne $2,$0,$L227
j $L225
$L227:
lw $2,32($fp)
move $3,$2
sll $2,$3,14
lw $3,64($fp)
addu $2,$2,$3
lw $3,28($fp)
move $4,$3
sll $3,$4,14
lw $4,64($fp)
addu $3,$3,$4
li $4,0x00000001 # 1
sw $4,16($sp)
lw $4,32($fp)
move $5,$2
li $6,0x00000001 # 1
move $7,$3
jal Ddot
lw $3,28($fp)
lw $2,32($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,64($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,28($fp)
lw $3,32($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,64($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f2,0($3)
sub.d $f0,$f2,$f0
s.d $f0,0($2)
$L226:
lw $3,32($fp)
addu $2,$3,1
move $3,$2
sw $3,32($fp)
j $L224
$L225:
.set noreorder
nop
.set reorder
sw $0,32($fp)
$L228:
lw $2,32($fp)
lw $3,28($fp)
slt $2,$2,$3
bne $2,$0,$L231
j $L229
$L231:
lw $3,28($fp)
lw $2,32($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,64($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f0,0($2)
s.d $f0,40($fp)
lw $3,28($fp)
lw $2,32($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,64($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,32($fp)
lw $3,32($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,64($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f0,40($fp)
l.d $f2,0($3)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
lw $3,28($fp)
lw $2,28($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,64($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,28($fp)
lw $3,28($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,64($fp)
addu $4,$5,$6
addu $3,$3,$4
lw $5,28($fp)
lw $4,32($fp)
move $6,$4
sll $4,$6,3
sll $6,$5,14
lw $7,64($fp)
addu $5,$6,$7
addu $4,$4,$5
l.d $f0,40($fp)
l.d $f2,0($4)
mul.d $f0,$f0,$f2
l.d $f2,0($3)
sub.d $f0,$f2,$f0
s.d $f0,0($2)
$L230:
lw $3,32($fp)
addu $2,$3,1
move $3,$2
sw $3,32($fp)
j $L228
$L229:
lw $3,28($fp)
lw $2,28($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,64($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,28($fp)
lw $3,28($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,64($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f0,$LC80
l.d $f2,0($3)
div.d $f0,$f0,$f2
s.d $f0,0($2)
$L222:
lw $3,28($fp)
addu $2,$3,1
move $3,$2
sw $3,28($fp)
j $L220
$L221:
.set noreorder
nop
.set reorder
lw $2,60($fp)
sw $2,32($fp)
$L232:
lw $2,32($fp)
lw $3,56($fp)
slt $2,$2,$3
bne $2,$0,$L235
j $L233
$L235:
lw $2,36($fp)
move $3,$2
sll $2,$3,14
lw $3,76($fp)
addu $2,$2,$3
lw $3,32($fp)
move $4,$3
sll $3,$4,14
lw $4,64($fp)
addu $3,$3,$4
li $4,0x00000001 # 1
sw $4,16($sp)
lw $4,32($fp)
move $5,$2
li $6,0x00000001 # 1
move $7,$3
jal Ddot
lw $3,36($fp)
lw $2,32($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,76($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,36($fp)
lw $3,32($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,76($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f2,0($3)
sub.d $f0,$f2,$f0
s.d $f0,0($2)
$L234:
lw $3,32($fp)
addu $2,$3,1
move $3,$2
sw $3,32($fp)
j $L232
$L233:
.set noreorder
nop
.set reorder
sw $0,32($fp)
$L236:
lw $2,32($fp)
lw $3,56($fp)
slt $2,$2,$3
bne $2,$0,$L239
j $L237
$L239:
lw $3,36($fp)
lw $2,32($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,76($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,36($fp)
lw $3,32($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,76($fp)
addu $4,$5,$6
addu $3,$3,$4
lw $5,32($fp)
lw $4,32($fp)
move $6,$4
sll $4,$6,3
sll $6,$5,14
lw $7,64($fp)
addu $5,$6,$7
addu $4,$4,$5
l.d $f0,0($3)
l.d $f2,0($4)
mul.d $f0,$f0,$f2
s.d $f0,0($2)
$L238:
lw $3,32($fp)
addu $2,$3,1
move $3,$2
sw $3,32($fp)
j $L236
$L237:
.set noreorder
nop
.set reorder
lw $2,56($fp)
subu $3,$2,2
sw $3,32($fp)
$L240:
lw $2,32($fp)
lw $3,60($fp)
slt $2,$2,$3
bne $2,$0,$L241
$L243:
lw $3,56($fp)
subu $2,$3,1
lw $3,32($fp)
subu $2,$2,$3
lw $3,36($fp)
move $4,$3
sll $3,$4,14
lw $4,76($fp)
addu $3,$3,$4
lw $4,32($fp)
move $5,$4
sll $4,$5,3
addu $5,$4,8
addu $3,$3,$5
lw $4,32($fp)
move $5,$4
sll $4,$5,14
addu $5,$4,16384
lw $6,64($fp)
addu $4,$5,$6
lw $5,32($fp)
move $6,$5
sll $5,$6,3
addu $7,$4,$5
li $4,0x00000800 # 2048
sw $4,16($sp)
move $4,$2
move $5,$3
li $6,0x00000001 # 1
jal Ddot
lw $3,36($fp)
lw $2,32($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,76($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,36($fp)
lw $3,32($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,76($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f2,0($3)
sub.d $f0,$f2,$f0
s.d $f0,0($2)
$L242:
lw $3,32($fp)
subu $2,$3,1
move $3,$2
sw $3,32($fp)
j $L240
$L241:
.set noreorder
nop
.set reorder
lw $2,60($fp)
subu $3,$2,1
sw $3,32($fp)
$L244:
lw $2,32($fp)
bgez $2,$L247
j $L245
$L247:
lw $2,56($fp)
lw $3,60($fp)
subu $2,$2,$3
lw $3,36($fp)
move $4,$3
sll $3,$4,14
lw $4,76($fp)
addu $3,$3,$4
lw $4,60($fp)
move $5,$4
sll $4,$5,3
addu $3,$3,$4
lw $4,60($fp)
move $5,$4
sll $4,$5,14
lw $5,64($fp)
addu $4,$4,$5
lw $5,32($fp)
move $6,$5
sll $5,$6,3
addu $7,$4,$5
li $4,0x00000800 # 2048
sw $4,16($sp)
move $4,$2
move $5,$3
li $6,0x00000001 # 1
jal Ddot
lw $3,36($fp)
lw $2,32($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,76($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,36($fp)
lw $3,32($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,76($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f2,0($3)
sub.d $f0,$f2,$f0
s.d $f0,0($2)
$L246:
lw $3,32($fp)
subu $2,$3,1
move $3,$2
sw $3,32($fp)
j $L244
$L245:
$L206:
lw $3,36($fp)
addu $2,$3,1
move $3,$2
sw $3,36($fp)
j $L204
$L205:
$L203:
move $sp,$fp # sp not trusted here
lw $31,52($sp)
lw $fp,48($sp)
addu $sp,$sp,56
j $31
.end Solver
.loc 1 919
.ent Storer
Storer:
.frame $fp,80,$31 # vars= 16, regs= 2/0, args= 56, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,80
sw $31,76($sp)
sw $fp,72($sp)
move $fp,$sp
sw $4,80($fp)
sw $5,84($fp)
sw $6,88($fp)
sw $7,92($fp)
la $4,$LC32
la $5,$LC81
jal fopen
sw $2,68($fp)
lw $2,68($fp)
bne $2,$0,$L249
la $4,$LC82
jal printf
li $4,0x00000001 # 1
jal exit
$L249:
lw $4,68($fp)
la $5,$LC50
lw $6,80($fp)
jal fprintf
lw $4,68($fp)
la $5,$LC83
jal fprintf
sw $0,60($fp)
$L250:
lw $2,60($fp)
slt $3,$2,6
bne $3,$0,$L253
j $L251
$L253:
lw $2,60($fp)
move $3,$2
sll $2,$3,3
lw $3,84($fp)
addu $2,$2,$3
lw $3,0($2)
sw $3,64($fp)
$L254:
lw $2,60($fp)
move $3,$2
sll $2,$3,3
lw $3,84($fp)
addu $2,$2,$3
addu $3,$2,4
lw $2,64($fp)
lw $3,0($3)
slt $2,$3,$2
bne $2,$0,$L255
$L257:
lw $3,64($fp)
addu $2,$3,1
lw $4,60($fp)
addu $3,$4,1
lw $4,64($fp)
move $5,$4
sll $4,$5,3
lw $5,88($fp)
addu $4,$4,$5
l.d $f0,0($4)
s.d $f0,16($sp)
lw $4,64($fp)
move $5,$4
sll $4,$5,3
lw $5,88($fp)
addu $4,$4,$5
addu $5,$4,16384
l.d $f0,0($5)
s.d $f0,24($sp)
lw $4,64($fp)
move $5,$4
sll $4,$5,3
lw $5,88($fp)
addu $4,$4,$5
li $5,0x00008000 # 32768
addu $4,$4,$5
l.d $f0,0($4)
s.d $f0,32($sp)
lw $4,64($fp)
move $5,$4
sll $4,$5,3
lw $5,92($fp)
addu $4,$4,$5
l.d $f0,0($4)
s.d $f0,40($sp)
lw $4,64($fp)
move $5,$4
sll $4,$5,3
lw $5,92($fp)
addu $4,$4,$5
addu $5,$4,16384
l.d $f0,0($5)
s.d $f0,48($sp)
lw $4,68($fp)
la $5,$LC84
move $6,$2
move $7,$3
jal fprintf
$L256:
lw $3,64($fp)
addu $2,$3,1
move $3,$2
sw $3,64($fp)
j $L254
$L255:
$L252:
lw $3,60($fp)
addu $2,$3,1
move $3,$2
sw $3,60($fp)
j $L250
$L251:
lw $4,68($fp)
la $5,$LC85
jal fprintf
sw $0,60($fp)
$L258:
lw $2,60($fp)
slt $3,$2,6
bne $3,$0,$L261
j $L259
$L261:
lw $2,60($fp)
move $3,$2
sll $2,$3,3
lw $3,84($fp)
addu $2,$2,$3
lw $3,0($2)
sw $3,64($fp)
$L262:
lw $2,60($fp)
move $3,$2
sll $2,$3,3
lw $3,84($fp)
addu $2,$2,$3
addu $3,$2,4
lw $2,64($fp)
lw $3,0($3)
slt $2,$3,$2
bne $2,$0,$L263
$L265:
lw $3,64($fp)
addu $2,$3,1
lw $4,60($fp)
addu $3,$4,1
lw $4,64($fp)
move $5,$4
sll $4,$5,3
lw $5,96($fp)
addu $4,$4,$5
l.d $f0,0($4)
s.d $f0,16($sp)
lw $4,64($fp)
move $5,$4
sll $4,$5,3
lw $5,96($fp)
addu $4,$4,$5
addu $5,$4,16384
l.d $f0,0($5)
s.d $f0,24($sp)
lw $4,64($fp)
move $5,$4
sll $4,$5,3
lw $5,96($fp)
addu $4,$4,$5
li $5,0x00008000 # 32768
addu $4,$4,$5
l.d $f0,0($4)
s.d $f0,32($sp)
lw $4,68($fp)
la $5,$LC86
move $6,$2
move $7,$3
jal fprintf
$L264:
lw $3,64($fp)
addu $2,$3,1
move $3,$2
sw $3,64($fp)
j $L262
$L263:
$L260:
lw $3,60($fp)
addu $2,$3,1
move $3,$2
sw $3,60($fp)
j $L258
$L259:
lw $4,68($fp)
jal fclose
$L248:
move $sp,$fp # sp not trusted here
lw $31,76($sp)
lw $fp,72($sp)
addu $sp,$sp,80
j $31
.end Storer
.loc 1 972
.ent Verify
Verify:
.frame $fp,72,$31 # vars= 48, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,72
sw $31,68($sp)
sw $fp,64($sp)
move $fp,$sp
sw $4,72($fp)
sw $5,76($fp)
sw $6,80($fp)
sw $7,84($fp)
dsz 16($fp)
sw $0,56($fp)
$L267:
lw $2,56($fp)
slt $3,$2,3
bne $3,$0,$L270
j $L268
$L270:
sw $0,48($fp)
$L271:
lw $2,48($fp)
lw $3,72($fp)
slt $2,$2,$3
bne $2,$0,$L274
j $L272
$L274:
lw $3,48($fp)
lw $2,48($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,76($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,56($fp)
lw $3,48($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,80($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
sw $0,52($fp)
$L275:
lw $2,52($fp)
lw $3,48($fp)
slt $2,$2,$3
bne $2,$0,$L278
j $L276
$L278:
lw $3,48($fp)
lw $2,52($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,76($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,52($fp)
lw $3,48($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,76($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f0,0($3)
s.d $f0,0($2)
$L277:
lw $3,52($fp)
addu $2,$3,1
move $3,$2
sw $3,52($fp)
j $L275
$L276:
$L273:
lw $3,48($fp)
addu $2,$3,1
move $3,$2
sw $3,48($fp)
j $L271
$L272:
mtc1 $0,$f0
mtc1 $0,$f1
s.d $f0,40($fp)
s.d $f0,32($fp)
sw $0,52($fp)
$L279:
lw $2,52($fp)
lw $3,72($fp)
slt $2,$2,$3
bne $2,$0,$L282
j $L280
$L282:
lw $3,56($fp)
lw $2,52($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,84($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f0,0($2)
s.d $f0,24($fp)
sw $0,48($fp)
$L283:
lw $2,48($fp)
lw $3,72($fp)
slt $2,$2,$3
bne $2,$0,$L286
j $L284
$L286:
lw $3,52($fp)
lw $2,48($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,76($fp)
addu $3,$4,$5
addu $2,$2,$3
lw $4,56($fp)
lw $3,48($fp)
move $5,$3
sll $3,$5,3
sll $5,$4,14
lw $6,88($fp)
addu $4,$5,$6
addu $3,$3,$4
l.d $f0,0($2)
l.d $f2,0($3)
mul.d $f0,$f0,$f2
l.d $f2,24($fp)
sub.d $f0,$f2,$f0
s.d $f0,24($fp)
lw $3,52($fp)
lw $2,48($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,76($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f2,0($2)
abs.d $f0,$f2
l.d $f2,32($fp)
c.lt.d $f0,$f2
bc1f $L287
l.d $f0,32($fp)
j $L288
$L287:
lw $3,52($fp)
lw $2,48($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,76($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f2,0($2)
abs.d $f0,$f2
$L288:
s.d $f0,32($fp)
$L285:
lw $3,48($fp)
addu $2,$3,1
move $3,$2
sw $3,48($fp)
j $L283
$L284:
lw $3,56($fp)
lw $2,52($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,88($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f2,0($2)
abs.d $f0,$f2
l.d $f2,40($fp)
c.lt.d $f0,$f2
bc1f $L289
l.d $f0,40($fp)
j $L290
$L289:
lw $3,56($fp)
lw $2,52($fp)
move $4,$2
sll $2,$4,3
sll $4,$3,14
lw $5,88($fp)
addu $3,$4,$5
addu $2,$2,$3
l.d $f2,0($2)
abs.d $f0,$f2
$L290:
s.d $f0,40($fp)
l.d $f2,24($fp)
abs.d $f0,$f2
l.d $f2,16($fp)
add.d $f0,$f2,$f0
s.d $f0,16($fp)
$L281:
lw $3,52($fp)
addu $2,$3,1
move $3,$2
sw $3,52($fp)
j $L279
$L280:
$L269:
lw $3,56($fp)
addu $2,$3,1
move $3,$2
sw $3,56($fp)
j $L267
$L268:
l.d $f0,32($fp)
l.d $f2,40($fp)
mul.d $f0,$f0,$f2
l.d $f2,16($fp)
div.d $f0,$f2,$f0
s.d $f0,16($fp)
l.d $f0,16($fp)
l.d $f2,$LC87
c.lt.d $f2,$f0
bc1f $L291
la $4,$LC88
dlw $6,16($fp)
jal printf
move $2,$0
j $L266
$L291:
li $2,0x00000001 # 1
j $L266
$L266:
move $sp,$fp # sp not trusted here
lw $31,68($sp)
lw $fp,64($sp)
addu $sp,$sp,72
j $31
.end Verify
.loc 1 1120
.ent Ddot
Ddot:
.frame $fp,8,$31 # vars= 0, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,8
sw $fp,0($sp)
move $fp,$sp
move $2,$6
move $6,$7
lw $3,24($fp)
mtc1 $0,$f2
mtc1 $0,$f3
$L293:
subu $4,$4,1
li $7,-1 # 0xffffffff
bne $4,$7,$L295
j $L294
$L295:
l.d $f0,0($5)
l.d $f4,0($6)
mul.d $f0,$f0,$f4
add.d $f2,$f2,$f0
move $7,$2
sll $8,$7,3
addu $5,$5,$8
move $7,$3
sll $8,$7,3
addu $6,$6,$8
j $L293
$L294:
mov.d $f0,$f2
j $L292
$L292:
move $sp,$fp # sp not trusted here
lw $fp,0($sp)
addu $sp,$sp,8
j $31
.end Ddot
\ No newline at end of file
#!/usr/bin/python
from parser import parse_file
from optimize import optimize
from writer import write_statements
from src.parser import parse_file
from src.optimize import optimize
from src.writer import write_statements
if __name__ == '__main__':
from sys import argv, exit
......
RM=rm -rf
all: report.pdf
%.pdf: %.tex
pdflatex $^
pdflatex $^
clean:
$(RM) *.pdf *.aux *.log *.out *.toc *.snm *.nav
......@@ -11,39 +11,230 @@
\usepackage{hyperref}
\title{Peephole Optimizer}
\author{Jayke Meijer (6049885), Richard Torenvliet (6138861), Taddeus Kroes (6054129)}
\author{Jayke Meijer (6049885), Richard Torenvliet (6138861), Tadde\"us Kroes
(6054129)}
\begin{document}
\maketitle
\tableofcontents
\pagebreak
\section{Introduction}
The goal of the assignment is to implement the optimization stage of the compiler. To reach this goal the parser part of the compiler has to be implemented.
The output of the gcc cross compiler on a c program is our input, the output of the gcc cross compiler is in the form of Assembly code, but not optimized. Our assignment includes a number of c programs, an important part of the assignment is parsing the data. Parsing the data is done with lex and yacc. The lexer is a program that finds keywords that meets the regular expression provided in the lexer. After the lexer, the yaccer takes over. Yaccer can turn the keywords in to an action.
The goal of the assignment is to implement the optimization stage of the
compiler. To reach this goal the parser and the optimizer part of the compiler
have to be implemented.
The output of the xgcc cross compiler on a C program is our input. The output
of the xgcc cross compiler is in the form of Assembly code, but not optimized.
Our assignment includes a number of C programs. An important part of the
assignment is parsing the data. Parsing the data is done with Lex and Yacc. The
Lexer is a program that finds keywords that meets the regular expression
provided in the Lexer. After the Lexer, the Yaccer takes over. Yacc can turn
the keywords in to an action.
\section{Design}
There are two general types of of optimizations of the assembly code, global
optimizations and optimizations on a so-called basic block. These optimizations
will be discussed separately
\subsection{Global optimizations}
We only perform one global optimization, which is optimizing branch-jump
statements. The unoptimized Assembly code contains sequences of code of the
following structure:
\begin{verbatim}
beq ...,$Lx
j $Ly
$Lx: ...
\end{verbatim}
This is inefficient, since there is a jump to a label that follows this code.
It would be more efficient to replace the branch statement with a \texttt{bne}
(the opposite case) to the label used in the jump statement. This way the jump
statement can be eliminated, since the next label follows anyway. The same can
of course be done for the opposite case, where a \texttt{bne} is changed into a
\texttt{beq}.
Since this optimization is done between two series of codes with jumps and
labels, we can not perform this code during the basic block optimizations. The
reason for this will become clearer in the following section.
\subsection{Basic Block Optimizations}
Optimizations on basic blocks are a more important part of the optimizer.
First, what is a basic block? A basic block is a sequence of statements
guaranteed to be executed in that order, and that order alone. This is the case
for a piece of code not containing any branches or jumps.
To create a basic block, you need to define what is the leader of a basic
block. We call a statement a leader if it is either a jump/branch statement, or
the target of such a statement. Then a basic block runs from one leader until
the next leader.
There are quite a few optimizations we perform on these basic blocks, so we
will describe the types of optimizations here in stead of each optimization.
\subsubsection*{Standard peephole optimizations}
These are optimizations that simply look for a certain statement or pattern of
statements, and optimize these. For example,
\begin{verbatim}
mov $regA,$regB
instr $regA, $regA,...
\end{verbatim}
can be optimized into
\begin{verbatim}
instr $regA, $regB,...
\end{verbatim}
since the register \texttt{\$regA} gets overwritten by the second instruction
anyway, and the instruction can easily use \texttt{\$regB} in stead of
\texttt{\$regA}. There are a few more of these cases, which are the same as
those described on the practicum page
\footnote{\url{http://staff.science.uva.nl/~andy/compiler/prac.html}} and in
Appendix \ref{opt}.
\subsubsection*{Common subexpression elimination}
A more advanced optimization is common subexpression elimination. This means
that expensive operations as a multiplication or addition are performed only
once and the result is then `copied' into variables where needed.
A standard method for doing this is the creation of a DAG or Directed Acyclic
Graph. However, this requires a fairly advanced implementation. Our
implementation is a slightly less fancy, but easier to implement.
We search from the end of the block up for instructions that are eligible for
CSE. If we find one, we check further up in the code for the same instruction,
and add that to a temporary storage list. This is done until the beginning of
the block or until one of the arguments of this expression is assigned.
We now add the instruction above the first use, and write the result in a new
variable. Then all occurrences of this expression can be replaced by a move of
from new variable into the original destination variable of the instruction.
This is a less efficient method then the dag, but because the basic blocks are
in general not very large and the execution time of the optimizer is not a
primary concern, this is not a big problem.
\section{Implementation}
We decided to implement the optimization in Python. We chose this programming
language because Python is an easy language to manipulate strings, work
object-oriented etc.
It turns out that a Lex and Yacc are also available as a Python module,
named PLY(Python Lex-Yacc). This allows us to use one language, Python, instead
of two, i.e. C and Python. Also no debugging is needed in C, only in Python
which makes our assignment more feasible.
The program has three steps, parsing the Assembly code into a datastructure we
can use, the so-called Intermediate Representation, performing optimizations on
this IR and writing the IR back to Assembly.
\subsection{Parsing}
The parsing is done with PLY, which allows us to perform Lex-Yacc tasks in
Python by using a Lex-Yacc like syntax. This way there is no need to combine
languages like we should do otherwise since Lex and Yacc are coupled with C.
The decision was made to not recognize exactly every possible instruction in
the parser, but only if something is for example a command, a comment or a gcc
directive. We then transform per line to a object called a Statement. A
statement has a type, a name and optionally a list of arguments. These
statements together form a statement list, which is placed in another object
called a Block. In the beginning there is one block for the entire program, but
after global optimizations this will be separated in several blocks that are
the basic blocks.
\subsection{Optimizations}
The optimizations are done in two different steps. First the global
optimizations are performed, which are only the optimizations on branch-jump
constructions. This is done repeatedly until there are no more changes.
After all possible global optimizations are done, the program is seperated into
basic blocks. The algorithm to do this is described earlier, and means all
jump and branch instructions are called leaders, as are their targets. A basic
block then goes from leader to leader.
After the division in basic blocks, optimizations are performed on each of
these basic blocks. This is also done repeatedly, since some times several
steps can be done to optimize something.
\subsection{Writing}
Once all the optimizations have been done, the IR needs to be rewritten into
Assembly code, so the xgcc crosscompiler can make binary code out of it.
The writer expects a list of statements, so first the blocks have to be
concatenated again into a list. After this is done, the list is passed on to
the writer, which writes the instructions back to Assembly and saves the file
so we can let xgcc compile it.
\section{Design \& Implementation}
We decided to implement the optimization in python. We chose this programming language because python is an easy language to manipulate strings, work objective ori\"ented etc.
It turns out that a lex and yacc are also implemented in a python version, named PLY(Python Lex-Yacc). This allows us to use one language, Python, instead of two i.e. C and Python. Also no debugging is needed in C, only in Python which makes our assignment more feasible.
\section{Results}
\subsection{Design}
\subsection{pi.c}
\subsection{acron.c}
\subsection*{Implementation}
This
\subsection{whet.c}
\subsubsection*{PLY}
\subsection{slalom.c}
\subsection{clinpack.c}
\section{Conclusion}
\appendix
\section{List of all optimizations}
\label{opt}
\textbf{Global optimizations}
\begin{verbatim}
beq ...,$Lx bne ...,$Ly
j $Ly -> $Lx: ...
$Lx: ...
bne ...,$Lx beq ...,$Ly
j $Ly -> $Lx: ...
$Lx: ...
\end{verbatim}
\textbf{Standard basic block optimizations}
\begin{verbatim}
mov $regA,$regA -> --- // remove it
mov $regA,$regB -> instr $regA, $regB,...
instr $regA, $regA,...
instr $regA,... instr $4,...
mov [$4-$7], $regA -> jal XXX
jal XXX
\section{Results}
\subsection*{pi.c}
sw $regA,XXX -> sw $regA, XXX
ld $regA,XXX
\subsection*{arcron.c}
\subsection*{whet.c}
shift $regA,$regA,0 -> --- // remove it
\subsection*{slalom.c}
\subsection*{clinpack.c}
add $regA,$regA,X -> lw ...,X($regA)
lw ...,0($regA)
\end{verbatim}
\textbf{Advanced basic block optimizations}
\section{conclusion}
\end{document}
\ No newline at end of file
\begin{verbatim}
# Common subexpression elimination
addu $regA, $regB, 4 addu $regD, $regB, 4
... move $regA, $regD
Code not writing $regB -> ...
... ...
addu $regC, $regB, 4 move $regC, $regD
\end{verbatim}
\end{document}
from copy import copy
#from copy import copy
from statement import Block
......@@ -122,55 +122,102 @@ def generate_flow_graph(blocks):
b.add_edge_to(blocks[i + 1])
def generate_dominator_tree(nodes):
"""Add dominator administration to the given flow graph nodes."""
# Dominator of the start node is the start itself
nodes[0].dom = set([nodes[0]])
# For all other nodes, set all nodes as the dominators
for n in nodes[1:]:
n.dom = set(copy(nodes))
def pred(n, known=[]):
"""Recursively find all predecessors of a node."""
direct = filter(lambda x: x not in known, n.edges_from)
p = copy(direct)
for ancestor in direct:
p += pred(ancestor, direct)
return p
# Iteratively eliminate nodes that are not dominators
changed = True
while changed:
changed = False
for n in nodes[1:]:
old_dom = n.dom
intersection = lambda p1, p2: p1.dom & p2.dom
n.dom = set([n]) | reduce(intersection, pred(n), set([]))
if n.dom != old_dom:
changed = True
def idom(d, n):
"""Check if d immediately dominates n."""
for b in n.dom:
if b != d and b != n and b in n.dom:
return False
return True
# Build tree using immediate dominators
for n in nodes:
for d in n.dom:
if idom(d, n):
d.set_dominates(n)
break
# statements = parse_file(...)
# b = find_basic_blocks(statements)
# generate_flow_graph(b) # nodes now have edges
# generate_dominator_tree(b) # nodes now have dominators
#def generate_dominator_tree(nodes):
# """Add dominator administration to the given flow graph nodes."""
# # Dominator of the start node is the start itself
# nodes[0].dom = set([nodes[0]])
#
# # For all other nodes, set all nodes as the dominators
# for n in nodes[1:]:
# n.dom = set(copy(nodes))
#
# def pred(n, known=[]):
# """Recursively find all predecessors of a node."""
# direct = filter(lambda x: x not in known, n.edges_from)
# p = copy(direct)
#
# for ancestor in direct:
# p += pred(ancestor, direct)
#
# return p
#
# # Iteratively eliminate nodes that are not dominators
# changed = True
#
# while changed:
# changed = False
#
# for n in nodes[1:]:
# old_dom = n.dom
# intersection = lambda p1, p2: p1.dom & p2.dom
# n.dom = set([n]) | reduce(intersection, pred(n), set([]))
#
# if n.dom != old_dom:
# changed = True
#
# def idom(d, n):
# """Check if d immediately dominates n."""
# for b in n.dom:
# if b != d and b != n and b in n.dom:
# return False
#
# return True
#
# # Build tree using immediate dominators
# for n in nodes:
# for d in n.dom:
# if idom(d, n):
# d.set_dominates(n)
# break
class Dag:
def __init__(self, block):
"""Create the Directed Acyclic Graph of all binary operations in a
basic block."""
self.nodes = []
for s in block:
if s.is_command('move') or s.is_monop():
rd, rs = s
y = self.find_reg_node(rs)
self.find_op_node(s.name, rd, y)
elif s.is_binop():
rd, rs, rt = s
y = self.find_reg_node(rs)
z = self.find_reg_node(rt)
self.find_op_node(s.name, rd, y, z)
def find_reg_node(self, reg):
for n in self.nodes:
if reg in n.reg:
return n
node = DagLeaf(reg)
self.nodes.append(node)
return node
def find_op_node(self, op, rd, *args):
for n in self.nodes:
if not isinstance(n, DagLeaf) and n.op == op and n.nodes == args:
n.labels.append(rd)
return n
node = DagNode(op, rd, *args)
self.nodes.append(node)
return node
class DagNode:
def __init__(self, op, label, *args):
self.op = op
self.labels = [label]
self.nodes = args
class DagLeaf:
def __init__(self, reg):
self.reg = reg
import re
from src.dataflow import find_basic_blocks
from dataflow import find_basic_blocks
from standard import redundant_move_1, redundant_move_2, \
redundant_move_3, redundant_move_4, redundant_load, \
redundant_shift, redundant_add
from advanced import eliminate_common_subexpressions, fold_constants, \
copy_propagation
def optimize_global(statements):
......@@ -13,115 +17,53 @@ def optimize_global(statements):
while not statements.end():
s = statements.read()
# mov $regA, $regA -> --- remove it
if s.is_command('move') and s[0] == s[1]:
statements.replace(1, [])
continue
# mov $regA, $regB -> instr $regA, $regB, ...
# instr $regA, $regA, ...
if s.is_command('move'):
ins = statements.peek()
if ins and len(ins) >= 2 and ins[0] == s[0] and ins[1] == s[0]:
ins[1] = s[1]
statements.replace(2, [ins])
continue
# instr $regA, ... -> instr $4, ...
# mov $4, $regA jal XX
# jal XX
if s.is_command() and len(s):
following = statements.peek(2)
if len(following) == 2:
mov, jal = following
if mov.is_command('move') and mov[1] == s[0] \
and re.match('^\$[4-7]$', mov[0]) \
and jal.is_command('jal'):
s[0] = mov[0]
statements.replace(2, [s])
continue
# sw $regA, XX -> sw $regA, XX
# ld $regA, XX
if s.is_command('sw'):
ld = statements.peek()
if ld.is_command('ld') and ld[0] == s[0]:
statements.replace(2, [s])
continue
# shift $regA, $regA, 0 -> --- remove it
if s.is_shift() and s[0] == s[1] and s[2] == 0:
statements.replace(1, [])
continue
# add $regA, $regA, X -> lw ..., X($regA)
# lw ..., 0($regA)
if s.is_command('add') and s[0] == s[1]:
lw = statements.peek()
if lw.is_command('lw') and lw[-1] == '0(%s)' % s[0]:
lw[-1] = str(s[2]) + lw[-1][1:]
statements.replace(2, [lw])
continue
# beq ..., $Lx -> bne ..., $Ly
# beq/bne ..., $Lx -> bne/beq ..., $Ly
# j $Ly $Lx:
# $Lx:
if s.is_command('beq'):
if s.is_command('beq', 'bne'):
following = statements.peek(2)
if len(following) == 2:
j, label = following
if j.is_command('j') and label.is_label(s[2]):
s.name = 'bne'
s.name = 'bne' if s.is_command('beq') else 'beq'
s[2] = j[0]
statements.replace(3, [s, label])
def optimize_blocks(blocks):
"""Call the optimizer for each basic block. Do this several times until
no more optimizations are achieved."""
changed = True
while changed:
changed = False
optimized = []
for block in blocks:
block_changed, b = optimize_block(block)
optimized.append(b)
if block_changed:
changed = True
blocks = optimized
return reduce(lambda a, b: a + b, blocks, [])
def optimize_block(block):
"""Optimize a basic block."""
standard = [redundant_move_1, redundant_move_2, redundant_move_3, \
redundant_move_4, redundant_load, redundant_shift, \
redundant_add]
old_len = -1
# Standard optimizations
while old_len != len(block):
old_len = len(block)
def optimize_block(statements):
"""Optimize a basic block."""
changed = False
output_statements = []
while not block.end():
s = block.read()
for statement in statements:
new_statement = statement
for callback in standard:
if callback(s, block):
break
output_statements.append(new_statement)
# Advanced optimizations
#changed = True
return changed, output_statements
#while changed:
# changed = eliminate_common_subexpressions(block) \
# or fold_constants(block)
while eliminate_common_subexpressions(block) \
| fold_constants(block) \
| copy_propagation(block):
pass
def optimize(statements, verbose=0):
"""optimization wrapper function, calls global and basic-block level
"""Optimization wrapper function, calls global and basic-block level
optimization functions."""
# Optimize on a global level
o = len(statements)
......@@ -129,8 +71,8 @@ def optimize(statements, verbose=0):
g = len(statements)
# Optimize basic blocks
basic_blocks = find_basic_blocks(statements)
blocks = optimize_blocks(basic_blocks)
blocks = find_basic_blocks(statements)
map(optimize_block, blocks)
block_statements = map(lambda b: b.statements, blocks)
opt_blocks = reduce(lambda a, b: a + b, block_statements)
b = len(opt_blocks)
......@@ -146,7 +88,7 @@ def optimize(statements, verbose=0):
print 'Original statements: %d' % o
print 'After global optimization: %d' % g
print 'After basic blocks optimization: %d' % b
print 'Speedup: %d (%d%%)' \
% (b - o, int((b - o) / o * 100))
print 'Optimization: %d (%d%%)' \
% (b - o, int((b - o) / float(o) * 100))
return opt_blocks
from src.statement import Statement as S
def create_variable():
return '$15'
def eliminate_common_subexpressions(block):
"""
Common subexpression elimination:
- Traverse through the statements in reverse order.
- If the statement can be possibly be eliminated, walk further collecting
all other occurrences of the expression until one of the arguments is
assigned in a statement, or the start of the block has been reached.
- If one or more occurrences were found, insert the expression with a new
destination address before the last found occurrence and change all
occurrences to a move instruction from that address.
"""
found = False
block.reverse_statements()
while not block.end():
s = block.read()
if s.is_arith():
pointer = block.pointer
last = False
new_reg = False
args = s[1:]
# Collect similar statements
while not block.end():
s2 = block.read()
# Stop if one of the arguments is assigned
if len(s2) and s2[0] in args:
break
# Replace a similar expression by a move instruction
if s2.name == s.name and s2[1:] == args:
if not new_reg:
new_reg = create_variable()
block.replace(1, [S('command', 'move', s2[0], new_reg)])
last = block.pointer
# Insert an additional expression with a new destination address
if last:
block.insert(S('command', s.name, [new_reg] + args), last)
found = True
# Reset pointer to and continue from the original statement
block.pointer = pointer
block.reverse_statements()
return found
def to_hex(value):
"""Create the hexadecimal string of an integer."""
return '0x%08x' % value
def fold_constants(block):
"""
Constant folding:
- An immidiate load defines a register value:
li $reg, XX -> register[$reg] = XX
- Integer variable definition is of the following form:
li $reg, XX -> constants[VAR] = XX
sw $reg, VAR -> register[$reg] = XX
- When a variable is used, the following happens:
lw $reg, VAR -> register[$reg] = constants[VAR]
"""
found = False
# Variable values
constants = {}
# Current known values in register
register = {}
while not block.end():
s = block.read()
if not s.is_command():
continue
if s.name == 'li':
# Save value in register
register[s[0]] = int(s[1], 16)
elif s.name == 'move' and s[0] in register:
reg_to, reg_from = s
if reg_from in register:
# Other value is also known, copy its value
register[reg_to] = register[reg_to]
else:
# Other value is unknown, delete the value
del register[reg_to]
elif s.name == 'sw' and s[0] in register:
# Constant variable definition, e.g. 'int a = 1;'
constants[s[1]] = register[s[0]]
elif s.name == 'lw' and s[1] in constants:
# Usage of variable with constant value
register[s[0]] = constants[s[1]]
elif s.name in ['addu', 'subu', 'mult', 'div']:
# Calculation with constants
rd, rs, rt = s
rs_known = rs in register
rt_known = rt in register
if rs_known and rt_known:
# a = 5 -> b = 15
# c = 10
# b = a + c
rs_val = register[rs]
rt_val = register[rt]
if s.name == 'addu':
result = to_hex(rs_val + rt_val)
if s.name == 'subu':
result = to_hex(rs_val - rt_val)
if s.name == 'mult':
result = to_hex(rs_val * rt_val)
if s.name == 'div':
result = to_hex(rs_val / rt_val)
block.replace(1, [S('command', 'li', result)])
register[rd] = result
found = True
elif rt_known:
# c = 10 -> b = a + 10
# b = c + a
s[2] = register[rt]
found = True
elif rs_known and s.name in ['addu', 'mult']:
# a = 10 -> b = c + 10
# b = c + a
s[1] = rt
s[2] = register[rs]
found = True
elif len(s) and s[0] in register:
# Known register is overwritten, remove its value
del register[s[0]]
return found
def copy_propagation(block):
"""
Rename values that were copied to there original, so the copy statement
might be useless, allowing it to be removed by dead code elimination.
"""
moves_from = []
moves_to = []
while not block.end():
s = block.read()
if len(s) == 3:
print "s[0] = ", s[0]
print "s[1] = ", s[1]
print "s[2] = ", s[2]
if moves_from:
print "fr: ", moves_from
print "to: ", moves_to
if s.is_command('move') and s[0] not in moves_to:
moves_from.append(s[1])
moves_to.append(s[0])
print "Added move to list."
elif s.is_command('move'):
for i in xrange(len(moves_to)):
if moves_to[i] == s[0]:
moves_from[i] = s[1]
elif len(s) == 3 and s[0] in moves_to:
print len(s)
print len(moves_to)
for i in xrange(len(moves_to)):
if moves_to[i] == s[0]:
del moves_to[i]
del moves_from[i]
"Removed move from list."
elif len(s) == 3 and (s[1] in moves_to or s[2] in moves_to):
print "Have to propagate."
for i in xrange(len(moves_to)):
if s[1] == moves_to[i]:
s[1] = moves_from[i]
print "Propagated"
if s[2] == moves_to[i]:
s[2] = moves_from[i]
print "Propagated"
print ""
return False
import re
def redundant_move_1(mov, statements):
"""
mov $regA, $regA -> --- remove it
"""
if mov.is_command('move') and mov[0] == mov[1]:
statements.replace(1, [])
return True
def redundant_move_2(mov, statements):
"""
mov $regA, $regB -> instr $regA, $regB, ...
instr $regA, $regA, ...
"""
if mov.is_command('move'):
ins = statements.peek()
if ins and len(ins) >= 2 and ins[0] == mov[0] and ins[1] == mov[0]:
ins[1] = mov[1]
statements.replace(2, [ins])
return True
def redundant_move_3(ins, statements):
"""
instr $regA, ... -> instr $4, ...
mov $4, $regA jal XX
jal XX
"""
if ins.is_command() and len(ins):
following = statements.peek(2)
if len(following) == 2:
mov, jal = following
if mov.is_command('move') and mov[1] == ins[0] \
and re.match('^\$[4-7]$', mov[0]) \
and jal.is_command('jal'):
ins[0] = mov[0]
statements.replace(2, [ins])
return True
def redundant_move_4(mov1, statements):
"""
mov $RegA, $RegB -> move $RegA, $RegB
mov $RegB, $RegA
"""
if mov1.is_command('move'):
mov2 = statements.peek()
if mov2.is_command('move') and mov2[0] == mov1[1] and \
mov2[1] == mov1[0]:
statements.replace(2, [mov1])
return True
def redundant_load(sw, statements):
"""
sw $regA, XX -> sw $regA, XX
ld $regA, XX
"""
if sw.is_command('sw'):
ld = statements.peek()
if ld.is_command('lw') and ld.args == sw.args:
statements.replace(2, [sw])
return True
def redundant_shift(shift, statements):
"""
shift $regA, $regA, 0 -> --- remove it
"""
if shift.is_shift() and shift[0] == shift[1] and shift[2] == 0:
statements.replace(1, [])
return True
def redundant_add(add, statements):
"""
add $regA, $regA, X -> lw ..., X($regA)
lw ..., 0($regA)
"""
if add.is_command('addu') and add[0] == add[1] and isinstance(add[2], int):
lw = statements.peek()
if lw.is_load() and lw[-1] == '0(%s)' % add[0]:
lw[-1] = '%s(%s)' % (add[2], add[0])
statements.replace(2, [lw])
return True
......@@ -3,11 +3,13 @@ import ply.yacc as yacc
from statement import Statement as S, Block
# Global statements administration
statements = []
tokens = ('NEWLINE', 'WORD', 'COMMENT', 'DIRECTIVE', 'COMMA', 'COLON')
# Tokens
def t_NEWLINE(t):
r'\n+'
......@@ -32,7 +34,7 @@ def t_DIRECTIVE(t):
return t
def t_hex_word(t):
r'0x[0-9a-fA-F]{8}'
r'0x([0-9a-fA-F]{8}|[0-9a-fA-F]{4})'
t.type = 'WORD'
return t
......@@ -47,9 +49,10 @@ def t_int(t):
return t
def t_WORD(t):
r'[a-zA-Z0-9$_.+()]+'
r'[a-zA-Z0-9$_.+()-]+'
return t
# Ignore whitespaces
t_ignore = ' \t'
......@@ -57,9 +60,11 @@ def t_error(t):
print('Illegal character "%s"' % t.value[0])
t.lexer.skip(1)
# Build the lexer
lexer = lex.lex()
# Parsing rules
start = 'input'
......@@ -102,9 +107,14 @@ def p_command(p):
def p_error(p):
print 'Syntax error at "%s" on line %d' % (p.value, lexer.lineno)
# Build YACC
yacc.yacc()
def parse_file(filename):
"""Parse a given Assembly file, return a Block with Statement objects
containing the parsed instructions."""
global statements
statements = []
......
......@@ -21,7 +21,7 @@ class Statement:
arguments."""
return self.stype == other.stype and self.name == other.name \
and self.args == other.args
def __len__(self):
return len(self.args)
......@@ -45,9 +45,8 @@ class Statement:
return self.stype == 'label' if name == None \
else self.stype == 'label' and self.name == name
def is_command(self, name=None):
return self.stype == 'command' if name == None \
else self.stype == 'command' and self.name == name
def is_command(self, *args):
return self.stype == 'command' and (not len(args) or self.name in args)
def is_jump(self):
"""Check if the statement is a jump."""
......@@ -74,6 +73,14 @@ class Statement:
return self.is_command() \
and re.match('^(add|sub|mult|div|abs|neg)(u|\.d)?$', self.name)
def is_monop(self):
"""Check if the statement is an unary operation."""
return len(self) == 2 and self.is_arith()
def is_binop(self):
"""Check if the statement is an binary operation."""
return self.is_command() and len(self) == 3 and not self.is_jump()
def jump_target(self):
"""Get the jump target of this statement."""
if not self.is_jump():
......@@ -111,6 +118,9 @@ class Block:
def peek(self, count=1):
"""Read the statements until an offset from the current pointer
position."""
if self.end():
return Statement('empty', '') if count == 1 else []
return self.statements[self.pointer] if count == 1 \
else self.statements[self.pointer:self.pointer + count]
......@@ -120,7 +130,7 @@ class Block:
replacement."""
if self.pointer == 0:
raise Exception('No statement have been read yet.')
if start == None:
start = self.pointer - 1
......@@ -129,7 +139,18 @@ class Block:
self.statements = before + replacement + after
self.pointer = start + len(replacement)
def insert(self, statement, index=None):
if index == None:
index = self.pointer
self.statements.insert(index, statement)
def apply_filter(self, callback):
"""Apply a filter to the statement list. If the callback returns True,
the statement will remain in the list.."""
self.statements = filter(callback, self.statements)
def reverse_statements(self):
"""Reverse the statement list and reset the pointer."""
self.statements = self.statements[::-1]
self.pointer = 0
from math import ceil
def write_statements(statements):
"""Write a list of statements to valid assembly code."""
out = ''
......@@ -12,13 +13,15 @@ def write_statements(statements):
if s.is_label():
line = s.name + ':'
indent_level = 1
elif s.is_inline_comment():
line = '#' + s.name
l = len(prevline.expandtabs(4))
tabs = int(ceil((24 - l) / 4.)) + 1
newline = '\t' * tabs
elif s.is_comment():
line = '\t' * indent_level + line
line = '#' + s.name
if s.is_inline_comment():
l = len(prevline.expandtabs(4))
tabs = int(ceil((24 - l) / 4.)) + 1
newline = '\t' * tabs
else:
line = '\t' * indent_level + line
elif s.is_directive():
line = '\t' + s.name
elif s.is_command():
......@@ -37,6 +40,9 @@ def write_statements(statements):
out += newline + line
prevline = line
# Add newline at end of file
out += '\n'
return out
def write_to_file(filename, statements):
......
......@@ -2,7 +2,7 @@ import unittest
from src.statement import Statement as S
from src.dataflow import BasicBlock as B, find_leaders, find_basic_blocks, \
generate_flow_graph
generate_flow_graph, Dag, DagNode, DagLeaf
class TestDataflow(unittest.TestCase):
......@@ -73,3 +73,54 @@ class TestDataflow(unittest.TestCase):
self.assertEqual(b2.edges_to, [b3])
self.assertIn(b1, b3.edges_from)
self.assertIn(b2, b3.edges_from)
def test_dag_unary(self):
dag = Dag(B([S('command', 'neg.d', '$rd', '$rs')]))
expect = Dag([])
expect.nodes = [DagLeaf('$rs'), DagNode('neg.d', '$rd', \
DagLeaf('$rs'))]
self.assertEqualDag(dag, expect)
def test_dag_binary(self):
dag = Dag(B([S('command', 'addu', '$rd', '$r1', '$r2')]))
expect = Dag([])
expect.nodes = [DagLeaf('$r1'),
DagLeaf('$r2'),
DagNode('addu', '$rd', DagLeaf('$r1'), DagLeaf('$r2'))]
self.assertEqualDag(dag, expect)
# def test_dag_combinednode(self):
# dag = Dag(B([S('command', 'mult', '$rd1', '$r1', '$r2'),
# S('command', 'mult', '$rd2', '$r1', '$r2')]))
# expect = Dag([])
# multnode = DagNode('mult',
# DagLeaf('$r1'),
# DagLeaf('$r2'))
# multnode.labels = ['$rd1', '$rd2']
# expect.nodes = [DagLeaf('$r1'),
# DagLeaf('$r2'),
# multnode]
#
# self.assertEqualDag(dag, expect)
def assertEqualDag(self, dag1, dag2):
self.assertEqual(len(dag1.nodes), len(dag2.nodes))
for node1, node2 in zip(dag1.nodes, dag2.nodes):
self.assertEqualNodes(node1, node2)
def assertEqualNodes(self, node1, node2):
if isinstance(node1, DagLeaf):
self.assertIsInstance(node2, DagLeaf)
self.assertEqual(node1.reg, node2.reg)
elif isinstance(node2, DagLeaf):
raise AssertionError
else:
self.assertEqual(node1.op, node2.op)
self.assertEqual(node1.labels, node2.labels)
self.assertEqual(len(node1.nodes), len(node2.nodes))
for child1, child2 in zip(node1.nodes, node2.nodes):
self.assertEqualNodes(child1, child2)
import unittest
from src.optimize import optimize_global
from src.optimize import optimize_global, optimize_block
from src.statement import Statement as S, Block as B
class TestOptimize(unittest.TestCase):
def setUp(self):
pass
self.foo = S('command', 'foo')
self.bar = S('command', 'bar')
def test_optimize_global_movaa(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
block = B([foo,
def tearDown(self):
del self.foo
del self.bar
def test_optimize_block_movaa(self):
block = B([self.foo,
S('command', 'move', '$regA', '$regA'),
bar])
optimize_global(block)
self.assertEquals(block.statements, [foo, bar])
def test_optimize_global_movab(self):
foo = S('command', 'foo')
self.bar])
optimize_block(block)
self.assertEquals(block.statements, [self.foo, self.bar])
def test_optimize_block_movab(self):
move = S('command', 'move', '$regA', '$regB')
bar = S('command', 'bar')
block = B([foo,
block = B([self.foo,
move,
bar])
optimize_global(block)
self.assertEquals(block.statements, [foo, move, bar])
def test_optimize_global_movinst_true(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
block = B([foo,
self.bar])
optimize_block(block)
self.assertEquals(block.statements, [self.foo, move, self.bar])
def test_optimize_block_movinst_true(self):
block = B([self.foo,
S('command', 'move', '$regA', '$regB'),
S('command', 'addu', '$regA', '$regA', 2),
bar])
optimize_global(block)
self.assertEquals(block.statements, [foo,
S('command', 'addu', '$regA', '$regB', 2),
bar])
def test_optimize_global_movinst_false(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
statements = [foo, \
self.bar])
optimize_block(block)
self.assertEquals(block.statements, [self.foo,
S('command', 'addu', '$regA', '$regB', 2),
self.bar])
def test_optimize_block_movinst_false(self):
statements = [self.foo, \
S('command', 'move', '$regA', '$regB'), \
S('command', 'addu', '$regA', '$regC', 2), \
bar]
self.bar]
block = B(statements)
optimize_global(block)
optimize_block(block)
self.assertEquals(block.statements, statements)
def test_optimize_global_instr_mov_jal_true(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
block = B([foo,
def test_optimize_block_instr_mov_jal_true(self):
block = B([self.foo,
S('command', 'addu', '$regA', '$regC', 2),
S('command', 'move', '$4', '$regA'),
S('command', 'jal', 'L1'),
bar])
optimize_global(block)
self.assertEquals(block.statements, [foo,
self.bar])
optimize_block(block)
self.assertEquals(block.statements, [self.foo,
S('command', 'addu', '$4', '$regC', 2),
S('command', 'jal', 'L1'),
bar])
def test_optimize_global_instr_mov_jal_false(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
arguments = [foo, \
S('command', 'addu', '$regA', '$regC', 2), \
S('command', 'move', '$3', '$regA'), \
S('command', 'jal', 'L1'), \
bar]
S('command', 'jal', 'L1'),
self.bar])
def test_optimize_block_instr_mov_jal_false(self):
arguments = [self.foo, \
S('command', 'addu', '$regA', '$regC', 2), \
S('command', 'move', '$3', '$regA'), \
S('command', 'jal', 'L1'), \
self.bar]
block = B(arguments)
optimize_global(block)
optimize_block(block)
self.assertEquals(block.statements, arguments)
def test_optimize_global_sw_ld_true(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
block = B([foo,
def test_optimize_block_sw_ld_true(self):
block = B([self.foo,
S('command', 'sw', '$regA', '$regB'),
S('command', 'ld', '$regA', '$regC'),
bar])
optimize_global(block)
self.assertEquals(block.statements, [foo,
S('command', 'lw', '$regA', '$regB'),
self.bar])
optimize_block(block)
self.assertEquals(block.statements, [self.foo,
S('command', 'sw', '$regA', '$regB'),
bar])
def test_optimize_global_sw_ld_false(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
arguments = [foo, \
self.bar])
def test_optimize_block_sw_ld_false(self):
arguments = [self.foo, \
S('command', 'sw', '$regA', '$regB'), \
S('command', 'ld', '$regD', '$regC'), \
bar]
S('command', 'lw', '$regD', '$regC'), \
self.bar]
block = B(arguments)
optimize_global(block)
optimize_block(block)
self.assertEquals(block.statements, arguments)
def test_optimize_global_shift_true(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
block = B([foo,
def test_optimize_block_shift_true(self):
block = B([self.foo,
S('command', 'sll', '$regA', '$regA', 0),
bar])
optimize_global(block)
self.assertEquals(block.statements, [foo,
bar])
def test_optimize_global_shift_false(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
arguments = [foo, \
self.bar])
optimize_block(block)
self.assertEquals(block.statements, [self.foo, self.bar])
def test_optimize_block_shift_false(self):
arguments = [self.foo, \
S('command', 'sll', '$regA', '$regB', 0), \
bar]
self.bar]
block = B(arguments)
optimize_global(block)
optimize_block(block)
self.assertEquals(block.statements, arguments)
arguments2 = [foo, \
arguments2 = [self.foo, \
S('command', 'sll', '$regA', '$regA', 1), \
bar]
self.bar]
block2 = B(arguments2)
optimize_global(block2)
optimize_block(block2)
self.assertEquals(block2.statements, arguments2)
def test_optimize_global_add_lw_true(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
block = B([foo,
S('command', 'add', '$regA', '$regA', 10),
def test_optimize_block_add_lw_true(self):
block = B([self.foo,
S('command', 'addu', '$regA', '$regA', 10),
S('command', 'lw', '$regB', '0($regA)'),
bar])
optimize_global(block)
self.assertEquals(block.statements, [foo,
self.bar])
optimize_block(block)
self.assertEquals(block.statements, [self.foo,
S('command', 'lw', '$regB', '10($regA)'),
bar])
def test_optimize_global_add_lw_false(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
arguments = [foo, \
S('command', 'add', '$regA', '$regA', 10), \
self.bar])
def test_optimize_block_add_lw_false(self):
arguments = [self.foo, \
S('command', 'addu', '$regA', '$regA', 10), \
S('command', 'lw', '$regB', '0($regC)'), \
bar]
self.bar]
block = B(arguments)
optimize_global(block)
arguments2 = [foo, \
S('command', 'add', '$regA', '$regB', 10), \
optimize_block(block)
arguments2 = [self.foo, \
S('command', 'addu', '$regA', '$regB', 10), \
S('command', 'lw', '$regB', '0($regA)'), \
bar]
self.bar]
block2 = B(arguments2)
arguments3 = [foo, \
S('command', 'add', '$regA', '$regA', 10), \
arguments3 = [self.foo, \
S('command', 'addu', '$regA', '$regA', 10), \
S('command', 'lw', '$regB', '1($regA)'), \
bar]
self.bar]
block3 = B(arguments3)
optimize_global(block3)
optimize_block(block3)
self.assertEquals(block.statements, arguments)
self.assertEquals(block2.statements, arguments2)
self.assertEquals(block3.statements, arguments3)
# beq ..., $Lx -> bne ..., $Ly
# j $Ly $Lx:
# $Lx:
def test_optimize_global_beq_j_true(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
block = B([foo,
block = B([self.foo,
S('command', 'beq', '$regA', '$regB', '$Lx'),
S('command', 'j', '$Ly'),
S('label', '$Lx'),
bar])
self.bar])
optimize_global(block)
self.assertEquals(block.statements, [foo,
self.assertEquals(block.statements, [self.foo,
S('command', 'bne', '$regA', '$regB', '$Ly'),
S('label', '$Lx'),
bar])
self.bar])
def test_optimize_global_beq_j_false(self):
foo = S('command', 'foo')
bar = S('command', 'bar')
arguments = [foo, \
arguments = [self.foo, \
S('command', 'beq', '$regA', '$regB', '$Lz'), \
S('command', 'j', '$Ly'), \
S('label', '$Lx'), \
bar]
self.bar]
block = B(arguments)
optimize_global(block)
self.assertEquals(block.statements, arguments)
def test_optimize_global_bne_j_true(self):
block = B([self.foo,
S('command', 'bne', '$regA', '$regB', '$Lx'),
S('command', 'j', '$Ly'),
S('label', '$Lx'),
self.bar])
optimize_global(block)
self.assertEquals(block.statements, [self.foo,
S('command', 'beq', '$regA', '$regB', '$Ly'),
S('label', '$Lx'),
self.bar])
def test_optimize_global_bne_j_false(self):
arguments = [self.foo, \
S('command', 'bne', '$regA', '$regB', '$Lz'), \
S('command', 'j', '$Ly'), \
S('label', '$Lx'), \
self.bar]
block = B(arguments)
optimize_global(block)
self.assertEquals(block.statements, arguments)
def test_optimize_block_move_move_true(self):
block = B([self.foo,
S('command', 'move', '$regA', '$regB'),
S('command', 'move', '$regB', '$regA'),
self.bar])
optimize_block(block)
self.assertEquals(block.statements, [self.foo,
S('command', 'move', '$regA', '$regB'),
self.bar])
def test_optimize_block_mov_mov_false(self):
arguments = [self.foo, \
S('command', 'move', '$regA', '$regB'), \
S('command', 'move', '$regB', '$regC'), \
self.bar]
block = B(arguments)
optimize_block(block)
self.assertEquals(block.statements, arguments)
import unittest
from src.optimize.advanced import eliminate_common_subexpressions, \
fold_constants, copy_propagation
from src.statement import Statement as S, Block as B
class TestOptimizeAdvanced(unittest.TestCase):
def setUp(self):
self.foo = S('command', 'foo')
self.bar = S('command', 'bar')
def test_eliminate_common_subexpressions(self):
pass
def test_copy_propagation_true(self):
print "testing true"
block = B([self.foo,
S('command', 'move', '$1', '$2'),
self.foo,
S('command', 'addu', '$3', '$1', '$4'),
self.bar])
copy_propagation(block)
self.assertEqual(block.statements, [self.foo,
S('command', 'move', '$1', '$2'),
self.foo,
S('command', 'addu', '$3', '$2', '$4'),
self.bar])
print "Test true succesfull"
# def test_copy_propagation_false(self):
# print "Testing false"
# arguments = [self.foo,
# S('command', 'move', '$1', '$2'),
# S('command', 'move', '$10', '$20'),
# S('command', 'addu', '$1', '$5', 1),
# S('command', 'addu', '$3', '$1', '$4'),
# self.bar]
# block = B(arguments)
# copy_propagation(block)
# self.assertEqual(block.statements, arguments)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment