Nuke
This commit is contained in:
commit
932413bb3d
61 changed files with 7249 additions and 0 deletions
180
src/test/resources/tests/programs/BTreeManyO3.s
Normal file
180
src/test/resources/tests/programs/BTreeManyO3.s
Normal file
|
@ -0,0 +1,180 @@
|
|||
main:
|
||||
addi sp,sp,-16
|
||||
sw ra,12(sp)
|
||||
sw s0,8(sp)
|
||||
sw s1,4(sp)
|
||||
sw s2,0(sp)
|
||||
lw s2,0(zero)
|
||||
lw a5,0(s2)
|
||||
blez a5,.L17
|
||||
addi s0,s2,4
|
||||
slli a5,a5,2
|
||||
add s2,a5,s0
|
||||
li s1,0
|
||||
.L16:
|
||||
addi s0,s0,4
|
||||
lw a0,0(s0)
|
||||
call find
|
||||
add s1,s1,a0
|
||||
bne s0,s2,.L16
|
||||
.L14:
|
||||
mv a0,s1
|
||||
lw ra,12(sp)
|
||||
lw s0,8(sp)
|
||||
lw s1,4(sp)
|
||||
lw s2,0(sp)
|
||||
addi sp,sp,16
|
||||
jr ra
|
||||
.L17:
|
||||
li s1,0
|
||||
j .L14
|
||||
find:
|
||||
li a5,4
|
||||
j .L2
|
||||
.L12:
|
||||
mv a0,a5
|
||||
ret
|
||||
.L13:
|
||||
lw a5,0(a5)
|
||||
slli a5,a5,1
|
||||
andi a5,a5,508
|
||||
addi a5,a5,4
|
||||
j .L2
|
||||
.L4:
|
||||
bge a4,a0,.L9
|
||||
lw a4,0(a5)
|
||||
andi a4,a4,256
|
||||
beqz a4,.L10
|
||||
lw a5,0(a5)
|
||||
srli a5,a5,7
|
||||
andi a5,a5,508
|
||||
addi a5,a5,4
|
||||
.L2:
|
||||
lh a4,2(a5)
|
||||
beq a4,a0,.L12
|
||||
ble a4,a0,.L4
|
||||
lw a4,0(a5)
|
||||
andi a4,a4,1
|
||||
bnez a4,.L13
|
||||
li a0,-1
|
||||
ret
|
||||
.L9:
|
||||
li a0,-1
|
||||
ret
|
||||
.L10:
|
||||
li a0,-1
|
||||
ret
|
||||
#memset 0x0, 0x019C
|
||||
#memset 0x0004, 0x02D49D03
|
||||
#memset 0x0008, 0x00912305
|
||||
#memset 0x000C, 0x00301307
|
||||
#memset 0x0010, 0x001B0D09
|
||||
#memset 0x0014, 0x00010B00
|
||||
#memset 0x0018, 0x00090000
|
||||
#memset 0x001C, 0x001E110F
|
||||
#memset 0x0020, 0x001D0000
|
||||
#memset 0x0024, 0x001E0000
|
||||
#memset 0x0028, 0x00782115
|
||||
#memset 0x002C, 0x00661D17
|
||||
#memset 0x0030, 0x003C1B19
|
||||
#memset 0x0034, 0x00300000
|
||||
#memset 0x0038, 0x00430000
|
||||
#memset 0x003C, 0x00701F00
|
||||
#memset 0x0040, 0x00700000
|
||||
#memset 0x0044, 0x007B0000
|
||||
#memset 0x0048, 0x018E5925
|
||||
#memset 0x004C, 0x00A12B27
|
||||
#memset 0x0050, 0x009F0029
|
||||
#memset 0x0054, 0x00910000
|
||||
#memset 0x0058, 0x011D392D
|
||||
#memset 0x005C, 0x00E22F00
|
||||
#memset 0x0060, 0x01190031
|
||||
#memset 0x0064, 0x01090033
|
||||
#memset 0x0068, 0x00E93500
|
||||
#memset 0x006C, 0x00FF3700
|
||||
#memset 0x0070, 0x00FF0000
|
||||
#memset 0x0074, 0x01213F3B
|
||||
#memset 0x0078, 0x0120003D
|
||||
#memset 0x007C, 0x011F0000
|
||||
#memset 0x0080, 0x01835741
|
||||
#memset 0x0084, 0x016A5543
|
||||
#memset 0x0088, 0x012F4745
|
||||
#memset 0x008C, 0x012E0000
|
||||
#memset 0x0090, 0x014B4F49
|
||||
#memset 0x0094, 0x013A4B00
|
||||
#memset 0x0098, 0x01424D00
|
||||
#memset 0x009C, 0x01460000
|
||||
#memset 0x00A0, 0x015C0051
|
||||
#memset 0x00A4, 0x014D5300
|
||||
#memset 0x00A8, 0x01510000
|
||||
#memset 0x00AC, 0x01730000
|
||||
#memset 0x00B0, 0x018B0000
|
||||
#memset 0x00B4, 0x01BF655B
|
||||
#memset 0x00B8, 0x01A2615D
|
||||
#memset 0x00BC, 0x01995F00
|
||||
#memset 0x00C0, 0x019F0000
|
||||
#memset 0x00C4, 0x01A46300
|
||||
#memset 0x00C8, 0x01BD0000
|
||||
#memset 0x00CC, 0x027C8967
|
||||
#memset 0x00D0, 0x026C8569
|
||||
#memset 0x00D4, 0x01CC6D6B
|
||||
#memset 0x00D8, 0x01C60000
|
||||
#memset 0x00DC, 0x021F7D6F
|
||||
#memset 0x00E0, 0x02070071
|
||||
#memset 0x00E4, 0x01D37300
|
||||
#memset 0x00E8, 0x01F67B75
|
||||
#memset 0x00EC, 0x01EF7977
|
||||
#memset 0x00F0, 0x01D70000
|
||||
#memset 0x00F4, 0x01F10000
|
||||
#memset 0x00F8, 0x02060000
|
||||
#memset 0x00FC, 0x0254837F
|
||||
#memset 0x0100, 0x023D0081
|
||||
#memset 0x0104, 0x02200000
|
||||
#memset 0x0108, 0x02640000
|
||||
#memset 0x010C, 0x026D8700
|
||||
#memset 0x0110, 0x026E0000
|
||||
#memset 0x0114, 0x02C0008B
|
||||
#memset 0x0118, 0x0297998D
|
||||
#memset 0x011C, 0x0289978F
|
||||
#memset 0x0120, 0x02839591
|
||||
#memset 0x0124, 0x027C9300
|
||||
#memset 0x0128, 0x027E0000
|
||||
#memset 0x012C, 0x02850000
|
||||
#memset 0x0130, 0x028D0000
|
||||
#memset 0x0134, 0x029E009B
|
||||
#memset 0x0138, 0x02990000
|
||||
#memset 0x013C, 0x03D4C99F
|
||||
#memset 0x0140, 0x0332ADA1
|
||||
#memset 0x0144, 0x02E9A300
|
||||
#memset 0x0148, 0x031AABA5
|
||||
#memset 0x014C, 0x0305A9A7
|
||||
#memset 0x0150, 0x02EC0000
|
||||
#memset 0x0154, 0x03090000
|
||||
#memset 0x0158, 0x032B0000
|
||||
#memset 0x015C, 0x03CC00AF
|
||||
#memset 0x0160, 0x0365B7B1
|
||||
#memset 0x0164, 0x0333B300
|
||||
#memset 0x0168, 0x036200B5
|
||||
#memset 0x016C, 0x033E0000
|
||||
#memset 0x0170, 0x03B6C3B9
|
||||
#memset 0x0174, 0x03AA00BB
|
||||
#memset 0x0178, 0x039700BD
|
||||
#memset 0x017C, 0x037DC1BF
|
||||
#memset 0x0180, 0x03750000
|
||||
#memset 0x0184, 0x03870000
|
||||
#memset 0x0188, 0x03C8C7C5
|
||||
#memset 0x018C, 0x03BB0000
|
||||
#memset 0x0190, 0x03C90000
|
||||
#memset 0x0194, 0x03E0CB00
|
||||
#memset 0x0198, 0x03E40000
|
||||
#memset 0x019C, 0x0010
|
||||
#memset 0x01A0, 0x0264
|
||||
#memset 0x01A4, 0x0C0D
|
||||
#memset 0x01A8, 0x0031
|
||||
#memset 0x01AC, 0x0206
|
||||
#memset 0x01B0, 0x0891
|
||||
#memset 0x01B4, 0x0043
|
||||
#memset 0x01B8, 0x029E
|
||||
#memset 0x01BC, 0x0264
|
||||
#memset 0x01C0, 0x0123
|
||||
#memset 0x01C4, 0x0264
|
142
src/test/resources/tests/programs/BTreeO3.s
Normal file
142
src/test/resources/tests/programs/BTreeO3.s
Normal file
|
@ -0,0 +1,142 @@
|
|||
main:
|
||||
addi sp,sp,-16
|
||||
sw ra,12(sp)
|
||||
lw a0,0(zero)
|
||||
call find
|
||||
lw ra,12(sp)
|
||||
addi sp,sp,16
|
||||
jr ra
|
||||
find:
|
||||
li a5,4
|
||||
.L2:
|
||||
lh a4,2(a5)
|
||||
beq a4,a0,.L13
|
||||
.L11:
|
||||
ble a4,a0,.L4
|
||||
lw a5,0(a5)
|
||||
andi a4,a5,1
|
||||
bnez a4,.L14
|
||||
.L10:
|
||||
li a0,-1
|
||||
ret
|
||||
.L4:
|
||||
bge a4,a0,.L10
|
||||
lw a4,0(a5)
|
||||
srli a5,a4,7
|
||||
andi a4,a4,256
|
||||
andi a5,a5,508
|
||||
beqz a4,.L10
|
||||
addi a5,a5,4
|
||||
lh a4,2(a5)
|
||||
bne a4,a0,.L11
|
||||
.L13:
|
||||
mv a0,a5
|
||||
ret
|
||||
.L14:
|
||||
slli a5,a5,1
|
||||
andi a5,a5,508
|
||||
addi a5,a5,4
|
||||
j .L2
|
||||
#memset 0x0, 0x013A
|
||||
#memset 0x0004, 0x02D49D03
|
||||
#memset 0x0008, 0x00912305
|
||||
#memset 0x000C, 0x00301307
|
||||
#memset 0x0010, 0x001B0D09
|
||||
#memset 0x0014, 0x00010B00
|
||||
#memset 0x0018, 0x00090000
|
||||
#memset 0x001C, 0x001E110F
|
||||
#memset 0x0020, 0x001D0000
|
||||
#memset 0x0024, 0x001E0000
|
||||
#memset 0x0028, 0x00782115
|
||||
#memset 0x002C, 0x00661D17
|
||||
#memset 0x0030, 0x003C1B19
|
||||
#memset 0x0034, 0x00300000
|
||||
#memset 0x0038, 0x00430000
|
||||
#memset 0x003C, 0x00701F00
|
||||
#memset 0x0040, 0x00700000
|
||||
#memset 0x0044, 0x007B0000
|
||||
#memset 0x0048, 0x018E5925
|
||||
#memset 0x004C, 0x00A12B27
|
||||
#memset 0x0050, 0x009F0029
|
||||
#memset 0x0054, 0x00910000
|
||||
#memset 0x0058, 0x011D392D
|
||||
#memset 0x005C, 0x00E22F00
|
||||
#memset 0x0060, 0x01190031
|
||||
#memset 0x0064, 0x01090033
|
||||
#memset 0x0068, 0x00E93500
|
||||
#memset 0x006C, 0x00FF3700
|
||||
#memset 0x0070, 0x00FF0000
|
||||
#memset 0x0074, 0x01213F3B
|
||||
#memset 0x0078, 0x0120003D
|
||||
#memset 0x007C, 0x011F0000
|
||||
#memset 0x0080, 0x01835741
|
||||
#memset 0x0084, 0x016A5543
|
||||
#memset 0x0088, 0x012F4745
|
||||
#memset 0x008C, 0x012E0000
|
||||
#memset 0x0090, 0x014B4F49
|
||||
#memset 0x0094, 0x013A4B00
|
||||
#memset 0x0098, 0x01424D00
|
||||
#memset 0x009C, 0x01460000
|
||||
#memset 0x00A0, 0x015C0051
|
||||
#memset 0x00A4, 0x014D5300
|
||||
#memset 0x00A8, 0x01510000
|
||||
#memset 0x00AC, 0x01730000
|
||||
#memset 0x00B0, 0x018B0000
|
||||
#memset 0x00B4, 0x01BF655B
|
||||
#memset 0x00B8, 0x01A2615D
|
||||
#memset 0x00BC, 0x01995F00
|
||||
#memset 0x00C0, 0x019F0000
|
||||
#memset 0x00C4, 0x01A46300
|
||||
#memset 0x00C8, 0x01BD0000
|
||||
#memset 0x00CC, 0x027C8967
|
||||
#memset 0x00D0, 0x026C8569
|
||||
#memset 0x00D4, 0x01CC6D6B
|
||||
#memset 0x00D8, 0x01C60000
|
||||
#memset 0x00DC, 0x021F7D6F
|
||||
#memset 0x00E0, 0x02070071
|
||||
#memset 0x00E4, 0x01D37300
|
||||
#memset 0x00E8, 0x01F67B75
|
||||
#memset 0x00EC, 0x01EF7977
|
||||
#memset 0x00F0, 0x01D70000
|
||||
#memset 0x00F4, 0x01F10000
|
||||
#memset 0x00F8, 0x02060000
|
||||
#memset 0x00FC, 0x0254837F
|
||||
#memset 0x0100, 0x023D0081
|
||||
#memset 0x0104, 0x02200000
|
||||
#memset 0x0108, 0x02640000
|
||||
#memset 0x010C, 0x026D8700
|
||||
#memset 0x0110, 0x026E0000
|
||||
#memset 0x0114, 0x02C0008B
|
||||
#memset 0x0118, 0x0297998D
|
||||
#memset 0x011C, 0x0289978F
|
||||
#memset 0x0120, 0x02839591
|
||||
#memset 0x0124, 0x027C9300
|
||||
#memset 0x0128, 0x027E0000
|
||||
#memset 0x012C, 0x02850000
|
||||
#memset 0x0130, 0x028D0000
|
||||
#memset 0x0134, 0x029E009B
|
||||
#memset 0x0138, 0x02990000
|
||||
#memset 0x013C, 0x03D4C99F
|
||||
#memset 0x0140, 0x0332ADA1
|
||||
#memset 0x0144, 0x02E9A300
|
||||
#memset 0x0148, 0x031AABA5
|
||||
#memset 0x014C, 0x0305A9A7
|
||||
#memset 0x0150, 0x02EC0000
|
||||
#memset 0x0154, 0x03090000
|
||||
#memset 0x0158, 0x032B0000
|
||||
#memset 0x015C, 0x03CC00AF
|
||||
#memset 0x0160, 0x0365B7B1
|
||||
#memset 0x0164, 0x0333B300
|
||||
#memset 0x0168, 0x036200B5
|
||||
#memset 0x016C, 0x033E0000
|
||||
#memset 0x0170, 0x03B6C3B9
|
||||
#memset 0x0174, 0x03AA00BB
|
||||
#memset 0x0178, 0x039700BD
|
||||
#memset 0x017C, 0x037DC1BF
|
||||
#memset 0x0180, 0x03750000
|
||||
#memset 0x0184, 0x03870000
|
||||
#memset 0x0188, 0x03C8C7C5
|
||||
#memset 0x018C, 0x03BB0000
|
||||
#memset 0x0190, 0x03C90000
|
||||
#memset 0x0194, 0x03E0CB00
|
||||
#memset 0x0198, 0x03E40000
|
14
src/test/resources/tests/programs/add.s
Normal file
14
src/test/resources/tests/programs/add.s
Normal file
|
@ -0,0 +1,14 @@
|
|||
main:
|
||||
add t0, t0, t1
|
||||
add t2, t0, t1
|
||||
add zero, t0, t1
|
||||
add t2, t2, t1
|
||||
add t3, t3, t3
|
||||
add t3, t3, t3
|
||||
add t3, t3, t3
|
||||
nop
|
||||
done
|
||||
#regset t0,10
|
||||
#regset t1,23
|
||||
#regset t2,43
|
||||
#regset t3,-11
|
118
src/test/resources/tests/programs/memoFib.s
Normal file
118
src/test/resources/tests/programs/memoFib.s
Normal file
|
@ -0,0 +1,118 @@
|
|||
main:
|
||||
addi sp,sp,-32
|
||||
sw ra,28(sp)
|
||||
sw s0,24(sp)
|
||||
addi s0,sp,32
|
||||
sw zero,-20(s0)
|
||||
li a5,100
|
||||
sw a5,-24(s0)
|
||||
lw a1,-20(s0)
|
||||
li a0,11
|
||||
call setupmem
|
||||
lw a1,-24(s0)
|
||||
li a0,11
|
||||
call setupmem
|
||||
lw a2,-24(s0)
|
||||
lw a1,-20(s0)
|
||||
li a0,10
|
||||
call f
|
||||
li a5,0
|
||||
mv a0,a5
|
||||
lw ra,28(sp)
|
||||
lw s0,24(sp)
|
||||
addi sp,sp,32
|
||||
jr ra
|
||||
f:
|
||||
addi sp,sp,-48
|
||||
sw ra,44(sp)
|
||||
sw s0,40(sp)
|
||||
sw s1,36(sp)
|
||||
addi s0,sp,48
|
||||
sw a0,-36(s0)
|
||||
sw a1,-40(s0)
|
||||
sw a2,-44(s0)
|
||||
lw a5,-36(s0)
|
||||
slli a5,a5,2
|
||||
lw a4,-40(s0)
|
||||
add a5,a4,a5
|
||||
lw a5,0(a5)
|
||||
beqz a5,.L2
|
||||
lw a5,-36(s0)
|
||||
slli a5,a5,2
|
||||
lw a4,-44(s0)
|
||||
add a5,a4,a5
|
||||
lw a5,0(a5)
|
||||
j .L3
|
||||
.L2:
|
||||
lw a5,-36(s0)
|
||||
bnez a5,.L4
|
||||
li a5,0
|
||||
j .L3
|
||||
.L4:
|
||||
lw a4,-36(s0)
|
||||
li a5,1
|
||||
bne a4,a5,.L5
|
||||
li a5,1
|
||||
j .L3
|
||||
.L5:
|
||||
lw a5,-36(s0)
|
||||
addi a5,a5,-1
|
||||
lw a2,-44(s0)
|
||||
lw a1,-40(s0)
|
||||
mv a0,a5
|
||||
call f
|
||||
mv s1,a0
|
||||
lw a5,-36(s0)
|
||||
addi a5,a5,-2
|
||||
lw a2,-44(s0)
|
||||
lw a1,-40(s0)
|
||||
mv a0,a5
|
||||
call f
|
||||
mv a5,a0
|
||||
add a5,s1,a5
|
||||
sw a5,-20(s0)
|
||||
lw a5,-36(s0)
|
||||
slli a5,a5,2
|
||||
lw a4,-40(s0)
|
||||
add a5,a4,a5
|
||||
li a4,1
|
||||
sw a4,0(a5)
|
||||
lw a5,-36(s0)
|
||||
slli a5,a5,2
|
||||
lw a4,-44(s0)
|
||||
add a5,a4,a5
|
||||
lw a4,-20(s0)
|
||||
sw a4,0(a5)
|
||||
lw a5,-20(s0)
|
||||
.L3:
|
||||
mv a0,a5
|
||||
lw ra,44(sp)
|
||||
lw s0,40(sp)
|
||||
lw s1,36(sp)
|
||||
addi sp,sp,48
|
||||
jr ra
|
||||
setupmem:
|
||||
addi sp,sp,-48
|
||||
sw s0,44(sp)
|
||||
addi s0,sp,48
|
||||
sw a0,-36(s0)
|
||||
sw a1,-40(s0)
|
||||
sw zero,-20(s0)
|
||||
j .L7
|
||||
.L8:
|
||||
lw a5,-20(s0)
|
||||
slli a5,a5,2
|
||||
lw a4,-40(s0)
|
||||
add a5,a4,a5
|
||||
sw zero,0(a5)
|
||||
lw a5,-20(s0)
|
||||
addi a5,a5,1
|
||||
sw a5,-20(s0)
|
||||
.L7:
|
||||
lw a4,-20(s0)
|
||||
lw a5,-36(s0)
|
||||
blt a4,a5,.L8
|
||||
nop
|
||||
lw s0,44(sp)
|
||||
addi sp,sp,48
|
||||
jr ra
|
49
src/test/resources/tests/programs/naiveFib.s
Normal file
49
src/test/resources/tests/programs/naiveFib.s
Normal file
|
@ -0,0 +1,49 @@
|
|||
main:
|
||||
addi sp,sp,-16
|
||||
sw ra,12(sp)
|
||||
sw s0,8(sp)
|
||||
addi s0,sp,16
|
||||
li a0,6
|
||||
call f
|
||||
mv a5,a0
|
||||
mv a0,a5
|
||||
lw ra,12(sp)
|
||||
lw s0,8(sp)
|
||||
addi sp,sp,16
|
||||
jr ra
|
||||
f:
|
||||
addi sp,sp,-32
|
||||
sw ra,28(sp)
|
||||
sw s0,24(sp)
|
||||
sw s1,20(sp)
|
||||
addi s0,sp,32
|
||||
sw a0,-20(s0)
|
||||
lw a5,-20(s0)
|
||||
bnez a5,.L2
|
||||
li a5,0
|
||||
j .L3
|
||||
.L2:
|
||||
lw a4,-20(s0)
|
||||
li a5,1
|
||||
bne a4,a5,.L4
|
||||
li a5,1
|
||||
j .L3
|
||||
.L4:
|
||||
lw a5,-20(s0)
|
||||
addi a5,a5,-1
|
||||
mv a0,a5
|
||||
call f
|
||||
mv s1,a0
|
||||
lw a5,-20(s0)
|
||||
addi a5,a5,-2
|
||||
mv a0,a5
|
||||
call f
|
||||
mv a5,a0
|
||||
add a5,s1,a5
|
||||
.L3:
|
||||
mv a0,a5
|
||||
lw ra,28(sp)
|
||||
lw s0,24(sp)
|
||||
lw s1,20(sp)
|
||||
addi sp,sp,32
|
||||
jr ra
|
112
src/test/resources/tests/programs/palindrome.s
Normal file
112
src/test/resources/tests/programs/palindrome.s
Normal file
|
@ -0,0 +1,112 @@
|
|||
main:
|
||||
addi sp,sp,-32
|
||||
sw ra,28(sp)
|
||||
sw s0,24(sp)
|
||||
addi s0,sp,32
|
||||
sw zero,-20(s0)
|
||||
li a5,32
|
||||
sw a5,-24(s0)
|
||||
li a2,7
|
||||
li a1,0
|
||||
lw a0,-20(s0)
|
||||
call isPalindrome
|
||||
.DEBUG_call1_return:
|
||||
mv a5,a0
|
||||
beqz a5,.L2
|
||||
li a2,15
|
||||
li a1,0
|
||||
lw a0,-24(s0)
|
||||
call isPalindrome
|
||||
.DEBUG_call2_return:
|
||||
mv a5,a0
|
||||
beqz a5,.L2
|
||||
li a5,1
|
||||
j .L4
|
||||
.L2:
|
||||
li a5,0
|
||||
.L4:
|
||||
mv a0,a5
|
||||
lw ra,28(sp)
|
||||
lw s0,24(sp)
|
||||
addi sp,sp,32
|
||||
jr ra
|
||||
isPalindrome:
|
||||
addi sp,sp,-48
|
||||
sw ra,44(sp)
|
||||
sw s0,40(sp)
|
||||
addi s0,sp,48
|
||||
sw a0,-36(s0)
|
||||
sw a1,-40(s0)
|
||||
sw a2,-44(s0)
|
||||
lw a4,-40(s0)
|
||||
lw a5,-44(s0)
|
||||
blt a4,a5,.L6
|
||||
li a5,1
|
||||
j .L7
|
||||
.L6:
|
||||
lw a5,-40(s0)
|
||||
slli a5,a5,2
|
||||
lw a4,-36(s0)
|
||||
add a5,a4,a5
|
||||
lw a4,0(a5)
|
||||
lw a5,-44(s0)
|
||||
slli a5,a5,2
|
||||
lw a3,-36(s0)
|
||||
add a5,a3,a5
|
||||
lw a5,0(a5)
|
||||
sub a5,a4,a5
|
||||
seqz a5,a5
|
||||
andi a5,a5,0xff
|
||||
sw a5,-20(s0)
|
||||
lw a5,-20(s0)
|
||||
beqz a5,.CompareFailed
|
||||
lw a5,-40(s0)
|
||||
addi a4,a5,1
|
||||
lw a5,-44(s0)
|
||||
addi a5,a5,-1
|
||||
mv a2,a5
|
||||
mv a1,a4
|
||||
lw a0,-36(s0)
|
||||
call isPalindrome
|
||||
mv a5,a0
|
||||
beqz a5,.CompareFailed
|
||||
li a5,1
|
||||
j .L7
|
||||
.CompareFailed:
|
||||
li a5,0
|
||||
.L7:
|
||||
mv a0,a5
|
||||
lw ra,44(sp)
|
||||
lw s0,40(sp)
|
||||
addi sp,sp,48
|
||||
jr ra
|
||||
|
||||
#memset 0, 10
|
||||
#memset 4, -3
|
||||
#memset 8, 8
|
||||
#memset 12, 0
|
||||
#memset 16, 0
|
||||
#memset 20, 8
|
||||
#memset 24, -3
|
||||
#memset 28, 10
|
||||
|
||||
|
||||
#memset 32, 10
|
||||
#memset 36, -3
|
||||
#memset 40, 8
|
||||
#memset 44, 0
|
||||
#memset 48, 0
|
||||
#memset 52, 10
|
||||
|
||||
#memset 56, -3
|
||||
#memset 60, 8
|
||||
|
||||
#memset 64, -3
|
||||
#memset 68, 8
|
||||
|
||||
#memset 72, 10
|
||||
#memset 76, 0
|
||||
#memset 80, 0
|
||||
#memset 84, 8
|
||||
#memset 88, -3
|
||||
#memset 92, 10
|
120
src/test/resources/tests/programs/palindromeO3.s
Normal file
120
src/test/resources/tests/programs/palindromeO3.s
Normal file
|
@ -0,0 +1,120 @@
|
|||
main:
|
||||
addi sp,sp,-16
|
||||
li a2,7
|
||||
li a1,0
|
||||
li a0,0
|
||||
sw ra,12(sp)
|
||||
call isPalindrome.part.0
|
||||
.DEBUG_call1_return:
|
||||
bnez a0,.L17
|
||||
isPalindrome.part.0:
|
||||
slli a4,a1,2
|
||||
slli a3,a2,2
|
||||
add a4,a0,a4
|
||||
add a5,a0,a3
|
||||
lw a4,0(a4)
|
||||
lw a5,0(a5)
|
||||
beq a4,a5,.L10
|
||||
li a5,0
|
||||
.L6:
|
||||
mv a0,a5
|
||||
ret
|
||||
.L10:
|
||||
addi a1,a1,1
|
||||
addi a2,a2,-1
|
||||
li a5,1
|
||||
bge a1,a2,.L6
|
||||
addi sp,sp,-16
|
||||
sw ra,12(sp)
|
||||
call isPalindrome.part.0
|
||||
.DEBUG_call2_return:
|
||||
lw ra,12(sp)
|
||||
snez a5,a0
|
||||
mv a0,a5
|
||||
addi sp,sp,16
|
||||
jr ra
|
||||
.L11:
|
||||
lw ra,12(sp)
|
||||
addi sp,sp,16
|
||||
jr ra
|
||||
.L17:
|
||||
li a2,15
|
||||
li a1,0
|
||||
li a0,32
|
||||
call isPalindrome.part.0
|
||||
snez a0,a0
|
||||
j .L11
|
||||
isPalindrome:
|
||||
bge a1,a2,.L20
|
||||
slli a3,a2,2
|
||||
slli a4,a1,2
|
||||
add a5,a0,a3
|
||||
add a4,a0,a4
|
||||
lw a7,0(a4)
|
||||
lw a6,0(a5)
|
||||
li a3,0
|
||||
bne a7,a6,.L28
|
||||
addi a7,a1,1
|
||||
addi a6,a2,-1
|
||||
li a3,1
|
||||
bge a7,a6,.L28
|
||||
lw a7,4(a4)
|
||||
lw a6,-4(a5)
|
||||
li a3,0
|
||||
bne a7,a6,.L28
|
||||
addi a7,a1,2
|
||||
addi a6,a2,-2
|
||||
li a3,1
|
||||
bge a7,a6,.L28
|
||||
lw a4,8(a4)
|
||||
lw a5,-8(a5)
|
||||
li a3,0
|
||||
bne a4,a5,.L28
|
||||
addi a1,a1,3
|
||||
addi a2,a2,-3
|
||||
li a3,1
|
||||
bge a1,a2,.L28
|
||||
addi sp,sp,-16
|
||||
sw ra,12(sp)
|
||||
call isPalindrome.part.0
|
||||
lw ra,12(sp)
|
||||
snez a3,a0
|
||||
mv a0,a3
|
||||
addi sp,sp,16
|
||||
jr ra
|
||||
.L20:
|
||||
li a3,1
|
||||
.L28:
|
||||
mv a0,a3
|
||||
ret
|
||||
|
||||
|
||||
#memset 0, 10
|
||||
#memset 4, -3
|
||||
#memset 8, 8
|
||||
#memset 12, 0
|
||||
#memset 16, 0
|
||||
#memset 20, 8
|
||||
#memset 24, -3
|
||||
#memset 28, 10
|
||||
|
||||
|
||||
#memset 32, 10
|
||||
#memset 36, -3
|
||||
#memset 40, 8
|
||||
#memset 44, 0
|
||||
#memset 48, 0
|
||||
#memset 52, 10
|
||||
|
||||
#memset 56, -3
|
||||
#memset 60, 8
|
||||
|
||||
#memset 64, -3
|
||||
#memset 68, 8
|
||||
|
||||
#memset 72, 10
|
||||
#memset 76, 0
|
||||
#memset 80, 0
|
||||
#memset 84, 8
|
||||
#memset 88, -3
|
||||
#memset 92, 10
|
187
src/test/resources/tests/programs/searchRegularO0.s
Normal file
187
src/test/resources/tests/programs/searchRegularO0.s
Normal file
|
@ -0,0 +1,187 @@
|
|||
main:
|
||||
addi sp,sp,-32
|
||||
sw ra,28(sp)
|
||||
sw s0,24(sp)
|
||||
addi s0,sp,32
|
||||
li a5,0
|
||||
lw a5,0(a5)
|
||||
sw a5,-20(s0)
|
||||
lw a0,-20(s0)
|
||||
call find
|
||||
mv a5,a0
|
||||
mv a0,a5
|
||||
lw ra,28(sp)
|
||||
lw s0,24(sp)
|
||||
addi sp,sp,32
|
||||
jr ra
|
||||
find:
|
||||
addi sp,sp,-64
|
||||
sw s0,60(sp)
|
||||
addi s0,sp,64
|
||||
sw a0,-52(s0)
|
||||
sw zero,-24(s0)
|
||||
li a5,4
|
||||
sw a5,-20(s0)
|
||||
sw zero,-28(s0)
|
||||
j .L2
|
||||
.WHILE:
|
||||
lw a5,-20(s0)
|
||||
lh a5,2(a5)
|
||||
sw a5,-28(s0)
|
||||
lw a4,-28(s0)
|
||||
lw a5,-52(s0)
|
||||
bne a4,a5,.CHECKLEFT
|
||||
lw a5,-20(s0)
|
||||
j .L1
|
||||
.CHECKLEFT:
|
||||
lw a4,-28(s0)
|
||||
lw a5,-52(s0)
|
||||
ble a4,a5,.CHECKRIGHT
|
||||
lw a5,-20(s0)
|
||||
lw a5,0(a5)
|
||||
andi a5,a5,1
|
||||
beqz a5,.CHECKRIGHT
|
||||
lw a5,-20(s0)
|
||||
lw a5,0(a5)
|
||||
srli a5,a5,1
|
||||
andi a5,a5,127
|
||||
andi a5,a5,0xff
|
||||
sw a5,-32(s0)
|
||||
lw a5,-32(s0)
|
||||
slli a5,a5,2
|
||||
addi a5,a5,4
|
||||
sw a5,-20(s0)
|
||||
j .L2
|
||||
.CHECKRIGHT:
|
||||
lw a4,-28(s0)
|
||||
lw a5,-52(s0)
|
||||
bge a4,a5,.L6
|
||||
lw a5,-20(s0)
|
||||
lw a5,0(a5)
|
||||
andi a5,a5,256
|
||||
beqz a5,.L6
|
||||
lw a5,-20(s0)
|
||||
lw a5,0(a5)
|
||||
srli a5,a5,9
|
||||
andi a5,a5,127
|
||||
andi a5,a5,0xff
|
||||
sw a5,-36(s0)
|
||||
lw a5,-36(s0)
|
||||
slli a5,a5,2
|
||||
addi a5,a5,4
|
||||
sw a5,-20(s0)
|
||||
j .L2
|
||||
.L6:
|
||||
li a5,-1
|
||||
j .L1
|
||||
.L2:
|
||||
lw a5,-24(s0)
|
||||
beqz a5,.WHILE
|
||||
.L1:
|
||||
mv a0,a5
|
||||
lw s0,60(sp)
|
||||
addi sp,sp,64
|
||||
jr ra
|
||||
#memset 0x0, 0x013A
|
||||
#memset 0x0004, 0x02D49D03
|
||||
#memset 0x0008, 0x00912305
|
||||
#memset 0x000C, 0x00301307
|
||||
#memset 0x0010, 0x001B0D09
|
||||
#memset 0x0014, 0x00010B00
|
||||
#memset 0x0018, 0x00090000
|
||||
#memset 0x001C, 0x001E110F
|
||||
#memset 0x0020, 0x001D0000
|
||||
#memset 0x0024, 0x001E0000
|
||||
#memset 0x0028, 0x00782115
|
||||
#memset 0x002C, 0x00661D17
|
||||
#memset 0x0030, 0x003C1B19
|
||||
#memset 0x0034, 0x00300000
|
||||
#memset 0x0038, 0x00430000
|
||||
#memset 0x003C, 0x00701F00
|
||||
#memset 0x0040, 0x00700000
|
||||
#memset 0x0044, 0x007B0000
|
||||
#memset 0x0048, 0x018E5925
|
||||
#memset 0x004C, 0x00A12B27
|
||||
#memset 0x0050, 0x009F0029
|
||||
#memset 0x0054, 0x00910000
|
||||
#memset 0x0058, 0x011D392D
|
||||
#memset 0x005C, 0x00E22F00
|
||||
#memset 0x0060, 0x01190031
|
||||
#memset 0x0064, 0x01090033
|
||||
#memset 0x0068, 0x00E93500
|
||||
#memset 0x006C, 0x00FF3700
|
||||
#memset 0x0070, 0x00FF0000
|
||||
#memset 0x0074, 0x01213F3B
|
||||
#memset 0x0078, 0x0120003D
|
||||
#memset 0x007C, 0x011F0000
|
||||
#memset 0x0080, 0x01835741
|
||||
#memset 0x0084, 0x016A5543
|
||||
#memset 0x0088, 0x012F4745
|
||||
#memset 0x008C, 0x012E0000
|
||||
#memset 0x0090, 0x014B4F49
|
||||
#memset 0x0094, 0x013A4B00
|
||||
#memset 0x0098, 0x01424D00
|
||||
#memset 0x009C, 0x01460000
|
||||
#memset 0x00A0, 0x015C0051
|
||||
#memset 0x00A4, 0x014D5300
|
||||
#memset 0x00A8, 0x01510000
|
||||
#memset 0x00AC, 0x01730000
|
||||
#memset 0x00B0, 0x018B0000
|
||||
#memset 0x00B4, 0x01BF655B
|
||||
#memset 0x00B8, 0x01A2615D
|
||||
#memset 0x00BC, 0x01995F00
|
||||
#memset 0x00C0, 0x019F0000
|
||||
#memset 0x00C4, 0x01A46300
|
||||
#memset 0x00C8, 0x01BD0000
|
||||
#memset 0x00CC, 0x027C8967
|
||||
#memset 0x00D0, 0x026C8569
|
||||
#memset 0x00D4, 0x01CC6D6B
|
||||
#memset 0x00D8, 0x01C60000
|
||||
#memset 0x00DC, 0x021F7D6F
|
||||
#memset 0x00E0, 0x02070071
|
||||
#memset 0x00E4, 0x01D37300
|
||||
#memset 0x00E8, 0x01F67B75
|
||||
#memset 0x00EC, 0x01EF7977
|
||||
#memset 0x00F0, 0x01D70000
|
||||
#memset 0x00F4, 0x01F10000
|
||||
#memset 0x00F8, 0x02060000
|
||||
#memset 0x00FC, 0x0254837F
|
||||
#memset 0x0100, 0x023D0081
|
||||
#memset 0x0104, 0x02200000
|
||||
#memset 0x0108, 0x02640000
|
||||
#memset 0x010C, 0x026D8700
|
||||
#memset 0x0110, 0x026E0000
|
||||
#memset 0x0114, 0x02C0008B
|
||||
#memset 0x0118, 0x0297998D
|
||||
#memset 0x011C, 0x0289978F
|
||||
#memset 0x0120, 0x02839591
|
||||
#memset 0x0124, 0x027C9300
|
||||
#memset 0x0128, 0x027E0000
|
||||
#memset 0x012C, 0x02850000
|
||||
#memset 0x0130, 0x028D0000
|
||||
#memset 0x0134, 0x029E009B
|
||||
#memset 0x0138, 0x02990000
|
||||
#memset 0x013C, 0x03D4C99F
|
||||
#memset 0x0140, 0x0332ADA1
|
||||
#memset 0x0144, 0x02E9A300
|
||||
#memset 0x0148, 0x031AABA5
|
||||
#memset 0x014C, 0x0305A9A7
|
||||
#memset 0x0150, 0x02EC0000
|
||||
#memset 0x0154, 0x03090000
|
||||
#memset 0x0158, 0x032B0000
|
||||
#memset 0x015C, 0x03CC00AF
|
||||
#memset 0x0160, 0x0365B7B1
|
||||
#memset 0x0164, 0x0333B300
|
||||
#memset 0x0168, 0x036200B5
|
||||
#memset 0x016C, 0x033E0000
|
||||
#memset 0x0170, 0x03B6C3B9
|
||||
#memset 0x0174, 0x03AA00BB
|
||||
#memset 0x0178, 0x039700BD
|
||||
#memset 0x017C, 0x037DC1BF
|
||||
#memset 0x0180, 0x03750000
|
||||
#memset 0x0184, 0x03870000
|
||||
#memset 0x0188, 0x03C8C7C5
|
||||
#memset 0x018C, 0x03BB0000
|
||||
#memset 0x0190, 0x03C90000
|
||||
#memset 0x0194, 0x03E0CB00
|
||||
#memset 0x0198, 0x03E40000
|
38
src/test/resources/tests/programs/source/memoFib.c
Normal file
38
src/test/resources/tests/programs/source/memoFib.c
Normal file
|
@ -0,0 +1,38 @@
|
|||
#include <stdio.h>
|
||||
|
||||
// C rmsbolt starter file
|
||||
|
||||
// Local Variables:
|
||||
// rmsbolt-command: "/opt/riscv/bin/riscv32-unknown-elf-gcc -O3"
|
||||
// rmsbolt-disassemble: nil
|
||||
// End:
|
||||
|
||||
|
||||
int f(int x, int* isMemoized, int* memoizedVal){
|
||||
if(isMemoized[x])
|
||||
return memoizedVal[x];
|
||||
|
||||
if (x == 0) return 0;
|
||||
if (x == 1) return 1;
|
||||
|
||||
int next = f(x-1, isMemoized, memoizedVal) + f(x-2, isMemoized, memoizedVal);
|
||||
isMemoized[x] = 1;
|
||||
memoizedVal[x] = next;
|
||||
|
||||
return next;
|
||||
}
|
||||
|
||||
void setupmem(int n, int* m) {
|
||||
for(int ii = 0; ii < n; ii++){
|
||||
m[ii] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
int* isMemoized = (int*)0;
|
||||
int* memoizedVal = (int*)100;
|
||||
setupmem(11, isMemoized);
|
||||
setupmem(11, memoizedVal);
|
||||
int r = f(10, isMemoized, memoizedVal);
|
||||
return r;
|
||||
}
|
20
src/test/resources/tests/programs/source/naiveFib.c
Normal file
20
src/test/resources/tests/programs/source/naiveFib.c
Normal file
|
@ -0,0 +1,20 @@
|
|||
|
||||
#include <stdio.h>
|
||||
|
||||
// C rmsbolt starter file
|
||||
|
||||
// Local Variables:
|
||||
// rmsbolt-command: "/opt/riscv/bin/riscv32-unknown-elf-gcc -O0"
|
||||
// rmsbolt-disassemble: nil
|
||||
// End:
|
||||
|
||||
int f(int x){
|
||||
if (x == 0) return 0;
|
||||
if (x == 1) return 1;
|
||||
return f(x-1) + f(x-2);
|
||||
}
|
||||
|
||||
|
||||
int main() {
|
||||
return f(4);
|
||||
}
|
28
src/test/resources/tests/programs/source/palindrome.c
Normal file
28
src/test/resources/tests/programs/source/palindrome.c
Normal file
|
@ -0,0 +1,28 @@
|
|||
// C rmsbolt starter file
|
||||
|
||||
// Local Variables:
|
||||
// rmsbolt-command: "/opt/riscv/bin/riscv32-unknown-elf-gcc -O3"
|
||||
// rmsbolt-disassemble: nil
|
||||
// End:
|
||||
|
||||
int main() {
|
||||
|
||||
/* int palindrome[8]; */
|
||||
/* int notAPalindrome[16]; */
|
||||
|
||||
// Set up "heap" addresses
|
||||
int palindrome = (int*)0;
|
||||
int notAPalindrome = (int*)32;
|
||||
|
||||
return isPalindrome(palindrome, 0, 7) && isPalindrome(notAPalindrome, 0, 15);
|
||||
}
|
||||
|
||||
int isPalindrome(int* word, int start, int stop){
|
||||
if(start >= stop){
|
||||
return 1;
|
||||
}
|
||||
else{
|
||||
int currentIsPalindrome = (word[start] == word[stop]);
|
||||
return currentIsPalindrome && isPalindrome(word, start + 1, stop - 1);
|
||||
}
|
||||
}
|
50
src/test/resources/tests/programs/source/search.c
Normal file
50
src/test/resources/tests/programs/source/search.c
Normal file
|
@ -0,0 +1,50 @@
|
|||
// C rmsbolt starter file
|
||||
|
||||
// Local Variables:
|
||||
// rmsbolt-command: "/opt/riscv/bin/riscv32-unknown-elf-gcc -O3"
|
||||
// rmsbolt-disassemble: nil
|
||||
// End:
|
||||
|
||||
/**
|
||||
* Represents a binary tree
|
||||
*/
|
||||
typedef struct {
|
||||
unsigned int hasLeft : 1;
|
||||
unsigned int leftIndex : 7;
|
||||
unsigned int hasRight : 1;
|
||||
unsigned int rightIndex : 7;
|
||||
int value : 16;
|
||||
} node;
|
||||
|
||||
|
||||
int find(int findMe){
|
||||
int found = 0;
|
||||
node* currentNodeIdx = (node*)4;
|
||||
int currentValue = 0;
|
||||
|
||||
while(!found){
|
||||
currentValue = currentNodeIdx->value;
|
||||
if(currentValue == findMe){
|
||||
return (int)currentNodeIdx;
|
||||
}
|
||||
|
||||
if((currentValue > findMe) && currentNodeIdx->hasLeft){
|
||||
int nextNodeIdx = currentNodeIdx->leftIndex;
|
||||
currentNodeIdx = (node*)(4 + (nextNodeIdx << 2));
|
||||
continue;
|
||||
}
|
||||
|
||||
if((currentValue < findMe) && currentNodeIdx->hasRight){
|
||||
int nextNodeIdx = currentNodeIdx->rightIndex;
|
||||
currentNodeIdx = (node*)(4 + (nextNodeIdx << 2));
|
||||
continue;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
int needle = *(int*)0;
|
||||
return find(needle);
|
||||
}
|
64
src/test/resources/tests/programs/source/searchMany.c
Normal file
64
src/test/resources/tests/programs/source/searchMany.c
Normal file
|
@ -0,0 +1,64 @@
|
|||
// C rmsbolt starter file
|
||||
|
||||
// Local Variables:
|
||||
// rmsbolt-command: "/opt/riscv/bin/riscv32-unknown-elf-gcc -O1"
|
||||
// rmsbolt-disassemble: nil
|
||||
// End:
|
||||
|
||||
/**
|
||||
* Represents a binary tree
|
||||
*/
|
||||
typedef struct {
|
||||
unsigned int hasLeft : 1;
|
||||
unsigned int leftIndex : 7;
|
||||
unsigned int hasRight : 1;
|
||||
unsigned int rightIndex : 7;
|
||||
int value : 16;
|
||||
} node;
|
||||
|
||||
|
||||
int find(int findMe){
|
||||
int found = 0;
|
||||
node* currentNodeIdx = (node*)4;
|
||||
int currentValue = 0;
|
||||
|
||||
while(!found){
|
||||
currentValue = currentNodeIdx->value;
|
||||
if(currentValue == findMe){
|
||||
return (int)currentNodeIdx;
|
||||
}
|
||||
|
||||
if((currentValue > findMe) && currentNodeIdx->hasLeft){
|
||||
int nextNodeIdx = currentNodeIdx->leftIndex;
|
||||
currentNodeIdx = (node*)(4 + (nextNodeIdx << 2));
|
||||
continue;
|
||||
}
|
||||
|
||||
if((currentValue < findMe) && currentNodeIdx->hasRight){
|
||||
int nextNodeIdx = currentNodeIdx->rightIndex;
|
||||
currentNodeIdx = (node*)(4 + (nextNodeIdx << 2));
|
||||
continue;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
// Where does the needle list start?
|
||||
int needles = *(int*)0;
|
||||
int sum = 0;
|
||||
|
||||
// How many needles are there?
|
||||
int numNeedles = *(int*)needles;
|
||||
int nextNeedle = (int)needles + 4;
|
||||
|
||||
// Some useless calculations to make gcc O3 happy
|
||||
for(int ii = 0; ii < numNeedles; ii++){
|
||||
nextNeedle += 4;
|
||||
int needle = *(int*)(nextNeedle);
|
||||
sum += find(needle);
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
35
src/test/resources/tests/programs/source/square.c
Normal file
35
src/test/resources/tests/programs/source/square.c
Normal file
|
@ -0,0 +1,35 @@
|
|||
|
||||
#include <stdio.h>
|
||||
|
||||
// C rmsbolt starter file
|
||||
|
||||
// Local Variables:
|
||||
// rmsbolt-command: "/opt/riscv/bin/riscv32-unknown-elf-gcc -O0"
|
||||
// rmsbolt-disassemble: nil
|
||||
// End:
|
||||
|
||||
|
||||
int mul(int a, int b) {
|
||||
int c = 0;
|
||||
int ii = 0;
|
||||
for(int ii = 0; ii < a; ii++){
|
||||
c += b;
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
int square(int a){
|
||||
return mul(a, a);
|
||||
}
|
||||
|
||||
int main() {
|
||||
int a = 6;
|
||||
int b = 0xFFFFFFFE; // MAXVAL - 2, (a + b) = -2
|
||||
int c = -1; //-1
|
||||
int d = 7; //0x4D2 (c + d) = 0x4D1
|
||||
|
||||
if(square(a+b) > square(c + d))
|
||||
return a;
|
||||
else
|
||||
return c;
|
||||
}
|
80
src/test/resources/tests/programs/square.s
Normal file
80
src/test/resources/tests/programs/square.s
Normal file
|
@ -0,0 +1,80 @@
|
|||
main:
|
||||
addi sp,sp,-32
|
||||
sw ra,28(sp)
|
||||
sw s0,24(sp)
|
||||
sw s1,20(sp)
|
||||
addi s0,sp,32
|
||||
li a5,6
|
||||
sw a5,-20(s0)
|
||||
li a5,-2
|
||||
sw a5,-24(s0)
|
||||
li a5,-1
|
||||
sw a5,-28(s0)
|
||||
li a5,7
|
||||
sw a5,-32(s0)
|
||||
lw a4,-20(s0)
|
||||
lw a5,-24(s0)
|
||||
add a5,a4,a5
|
||||
mv a0,a5
|
||||
call square
|
||||
mv s1,a0
|
||||
lw a4,-28(s0)
|
||||
lw a5,-32(s0)
|
||||
add a5,a4,a5
|
||||
mv a0,a5
|
||||
call square
|
||||
mv a5,a0
|
||||
ble s1,a5,.L8
|
||||
lw a5,-20(s0)
|
||||
j .L9
|
||||
.L8:
|
||||
lw a5,-28(s0)
|
||||
.L9:
|
||||
mv a0,a5
|
||||
lw ra,28(sp)
|
||||
lw s0,24(sp)
|
||||
lw s1,20(sp)
|
||||
addi sp,sp,32
|
||||
jr ra
|
||||
mul:
|
||||
addi sp,sp,-48
|
||||
sw s0,44(sp)
|
||||
addi s0,sp,48
|
||||
sw a0,-36(s0)
|
||||
sw a1,-40(s0)
|
||||
sw zero,-20(s0)
|
||||
sw zero,-28(s0)
|
||||
sw zero,-24(s0)
|
||||
j .L2
|
||||
.L3:
|
||||
lw a4,-20(s0)
|
||||
lw a5,-40(s0)
|
||||
add a5,a4,a5
|
||||
sw a5,-20(s0)
|
||||
lw a5,-24(s0)
|
||||
addi a5,a5,1
|
||||
sw a5,-24(s0)
|
||||
.L2:
|
||||
lw a4,-24(s0)
|
||||
lw a5,-36(s0)
|
||||
blt a4,a5,.L3
|
||||
lw a5,-20(s0)
|
||||
mv a0,a5
|
||||
lw s0,44(sp)
|
||||
addi sp,sp,48
|
||||
jr ra
|
||||
square:
|
||||
addi sp,sp,-32
|
||||
sw ra,28(sp)
|
||||
sw s0,24(sp)
|
||||
addi s0,sp,32
|
||||
sw a0,-20(s0)
|
||||
lw a1,-20(s0)
|
||||
lw a0,-20(s0)
|
||||
call mul
|
||||
mv a5,a0
|
||||
mv a0,a5
|
||||
lw ra,28(sp)
|
||||
lw s0,24(sp)
|
||||
addi sp,sp,32
|
||||
jr ra
|
Loading…
Add table
Add a link
Reference in a new issue