This commit is contained in:
Rose Thompson 2023-10-31 14:50:33 -05:00
parent 5ca428d6a8
commit 4984b3935f
2 changed files with 135 additions and 119 deletions

View File

@ -478,60 +478,60 @@ deadbeef
7e7d7c7b 7e7d7c7b
deadbe7f deadbe7f
deadbeef deadbeef
00000000 #signature 0fffffff #signature
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00000000 ffffffff
00 ff

View File

@ -40,6 +40,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
la a3, signature # does not get overwritten by any functions la a3, signature # does not get overwritten by any functions
TEST_BYTE:
# byte copy region. always naturally aligned # byte copy region. always naturally aligned
la a0, SourceData la a0, SourceData
la a1, ByteDstData la a1, ByteDstData
@ -52,6 +53,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_HALF0:
la a0, SourceData la a0, SourceData
la a1, Half0DstData la a1, Half0DstData
li a2, 16 li a2, 16
@ -63,6 +65,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_HALF1:
la a0, SourceData+1 la a0, SourceData+1
la a1, Half1DstData la a1, Half1DstData
li a2, 16 li a2, 16
@ -74,6 +77,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_WORD0:
la a0, SourceData la a0, SourceData
la a1, Word0DstData la a1, Word0DstData
li a2, 16 li a2, 16
@ -85,6 +89,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_WORD1:
la a0, SourceData+1 la a0, SourceData+1
la a1, Word1DstData la a1, Word1DstData
li a2, 16 li a2, 16
@ -96,6 +101,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_WORD2:
la a0, SourceData+2 la a0, SourceData+2
la a1, Word2DstData la a1, Word2DstData
li a2, 16 li a2, 16
@ -107,6 +113,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_WORD3:
la a0, SourceData+3 la a0, SourceData+3
la a1, Word3DstData la a1, Word3DstData
li a2, 16 li a2, 16
@ -118,6 +125,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_DOUBLE0:
la a0, SourceData la a0, SourceData
la a1, Double0DstData la a1, Double0DstData
li a2, 16 li a2, 16
@ -129,6 +137,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_DOUBLE1:
la a0, SourceData+1 la a0, SourceData+1
la a1, Double1DstData la a1, Double1DstData
li a2, 16 li a2, 16
@ -140,6 +149,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_DOUBLE2:
la a0, SourceData+2 la a0, SourceData+2
la a1, Double2DstData la a1, Double2DstData
li a2, 16 li a2, 16
@ -151,6 +161,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_DOUBLE3:
la a0, SourceData+3 la a0, SourceData+3
la a1, Double3DstData la a1, Double3DstData
li a2, 16 li a2, 16
@ -162,6 +173,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_DOUBLE4:
la a0, SourceData+4 la a0, SourceData+4
la a1, Double4DstData la a1, Double4DstData
li a2, 16 li a2, 16
@ -173,6 +185,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_DOUBLE5:
la a0, SourceData+5 la a0, SourceData+5
la a1, Double5DstData la a1, Double5DstData
li a2, 16 li a2, 16
@ -184,6 +197,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_DOUBLE6:
la a0, SourceData+6 la a0, SourceData+6
la a1, Double6DstData la a1, Double6DstData
li a2, 16 li a2, 16
@ -195,6 +209,7 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
TEST_DOUBLE7:
la a0, SourceData+7 la a0, SourceData+7
la a1, Double7DstData la a1, Double7DstData
li a2, 16 li a2, 16
@ -206,6 +221,8 @@ RVTEST_CASE(0,"//check ISA:=regex(.*64.*);check ISA:=regex(.*I.*);def TEST_CASE_
li a2, 16 li a2, 16
jal ra, CheckAllWriteSignature jal ra, CheckAllWriteSignature
RVMODEL_HALT
.type CheckAll, @function .type CheckAll, @function
# a0 is the SourceData, (golden), a1 is the data to be checked. # a0 is the SourceData, (golden), a1 is the data to be checked.
# a2 is the number of doubles # a2 is the number of doubles
@ -217,13 +234,13 @@ CheckAllWriteSignature:
mv s1, a1 mv s1, a1
mv s2, a2 mv s2, a2
mv s3, a3 mv s3, a3
# there is no stack so I'm saving ra into s4 # there is no stack so I'm saving ra into s5
mv s4, ra mv s5, ra
# check values byte by byte # check values byte by byte
mv a0, s0 # SourceData mv a0, s0 # SourceData
mv a1, s1 # ie: ByteDstData mv a1, s1 # ie: ByteDstData
srli a2, s2, 3 # * 8 slli a2, s2, 3 # * 8
jal ra, memcmp1 jal ra, memcmp1
sb a0, 0(s3) sb a0, 0(s3)
mv s4, a0 mv s4, a0
@ -231,50 +248,50 @@ CheckAllWriteSignature:
# check values half by half # check values half by half
mv a0, s0 # SourceData mv a0, s0 # SourceData
mv a1, s1 # ie: ByteDstData mv a1, s1 # ie: ByteDstData
srli a2, s2, 2 # * 4 slli a2, s2, 2 # * 4
jal ra, memcmp2 jal ra, memcmp2
sb a0, 1(s3) sb a0, 1(s3)
or s4, s4, a0 or s4, s4, a0
# check values half by half # check values half by half
mv a0, s0 # SourceData addi a0, s0, 1 # SourceData+1
addi a1, s1, 1 # ie: ByteDstData+1 addi a1, s1, 0 # ie: ByteDstData
srli a2, s2, 2 # * 4 -1 slli a2, s2, 2 # * 4 -1
addi a2, a2, -1 addi a2, a2, -1
jal ra, memcmp2 jal ra, memcmp2
sb a0, 2(s3) sb a0, 2(s3)
or s4, s4, a0 or s4, s4, a0
# check values word by word # check values word by word
mv a0, s0 # SourceData addi a0, s0, 0 # SourceData
mv a1, s1 # ie: ByteDstData mv a1, s1 # ie: ByteDstData
srli a2, s2, 1 # * 2 slli a2, s2, 1 # * 2
jal ra, memcmp4 jal ra, memcmp4
sb a0, 3(s3) sb a0, 3(s3)
or s4, s4, a0 or s4, s4, a0
# check values word by word # check values word by word
mv a0, s0 # SourceData addi a0, s0, 1 # SourceData+1
addi a1, s1, 1 # ie: ByteDstData+1 addi a1, s1, 0 # ie: ByteDstData
srli a2, s2, 1 # * 2 -1 slli a2, s2, 1 # * 2 -1
addi a2, a2, -1 addi a2, a2, -1
jal ra, memcmp4 jal ra, memcmp4
sb a0, 4(s3) sb a0, 4(s3)
or s4, s4, a0 or s4, s4, a0
# check values word by word # check values word by word
mv a0, s0 # SourceData addi a0, s0, 2 # SourceData+2
addi a1, s1, 2 # ie: ByteDstData+2 addi a1, s1, 0 # ie: ByteDstData
srli a2, s2, 1 # * 2 -1 slli a2, s2, 1 # * 2 -1
addi a2, a2, -1 addi a2, a2, -1
jal ra, memcmp4 jal ra, memcmp4
sb a0, 5(s3) sb a0, 5(s3)
or s4, s4, a0 or s4, s4, a0
# check values word by word # check values word by word
mv a0, s0 # SourceData addi a0, s0, 3 # SourceData+3
addi a1, s1, 3 # ie: ByteDstData+3 addi a1, s1, 0 # ie: ByteDstData
srli a2, s2, 1 # * 2 -1 slli a2, s2, 1 # * 2 -1
addi a2, a2, -1 addi a2, a2, -1
jal ra, memcmp4 jal ra, memcmp4
sb a0, 6(s3) sb a0, 6(s3)
@ -283,62 +300,62 @@ CheckAllWriteSignature:
# check values double by double # check values double by double
mv a0, s0 # SourceData mv a0, s0 # SourceData
mv a1, s1 # ie: ByteDstData mv a1, s1 # ie: ByteDstData
srli a2, s2, 0 # * 1 slli a2, s2, 0 # * 1
jal ra, memcmp8 jal ra, memcmp8
sb a0, 7(s3) sb a0, 7(s3)
# check values double by double # check values double by double
mv a0, s0 # SourceData addi a0, s0, 1 # SourceData+1
addi a1, s1, 1 # ie: ByteDstData+1 addi a1, s1, 0 # ie: ByteDstData
srli a2, s2, 0 # * 1 -1 slli a2, s2, 0 # * 1 -1
addi a2, a2, -1 addi a2, a2, -1
jal ra, memcmp8 jal ra, memcmp8
sb a0, 8(s3) sb a0, 8(s3)
# check values double by double # check values double by double
mv a0, s0 # SourceData addi a0, s0, 2 # SourceData+2
addi a1, s1, 2 # ie: ByteDstData+2 addi a1, s1, 0 # ie: ByteDstData
srli a2, s2, 0 # * 1 -1 slli a2, s2, 0 # * 1 -1
addi a2, a2, -1 addi a2, a2, -1
jal ra, memcmp8 jal ra, memcmp8
sb a0, 9(s3) sb a0, 9(s3)
# check values double by double # check values double by double
mv a0, s0 # SourceData addi a0, s0, 3 # SourceData+3
addi a1, s1, 3 # ie: ByteDstData+3 addi a1, s1, 2 # ie: ByteDstData
srli a2, s2, 0 # * 1 -1 slli a2, s2, 0 # * 1 -1
addi a2, a2, -1 addi a2, a2, -1
jal ra, memcmp8 jal ra, memcmp8
sb a0, 10(s3) sb a0, 10(s3)
# check values double by double # check values double by double
mv a0, s0 # SourceData addi a0, s0, 4 # SourceData+4
addi a1, s1, 4 # ie: ByteDstData+4 addi a1, s1, 0 # ie: ByteDstData
srli a2, s2, 0 # * 1 -1 slli a2, s2, 0 # * 1 -1
addi a2, a2, -1 addi a2, a2, -1
jal ra, memcmp8 jal ra, memcmp8
sb a0, 11(s3) sb a0, 11(s3)
# check values double by double # check values double by double
mv a0, s0 # SourceData addi a0, s0, 5 # SourceData+5
addi a1, s1, 5 # ie: ByteDstData+5 addi a1, s1, 0 # ie: ByteDstData
srli a2, s2, 0 # * 1 -1 slli a2, s2, 0 # * 1 -1
addi a2, a2, -1 addi a2, a2, -1
jal ra, memcmp8 jal ra, memcmp8
sb a0, 12(s3) sb a0, 12(s3)
# check values double by double # check values double by double
mv a0, s0 # SourceData addi a0, s0, 6 # SourceData+6
addi a1, s1, 6 # ie: ByteDstData+6 addi a1, s1, 0 # ie: ByteDstData
srli a2, s2, 0 # * 1 -1 slli a2, s2, 0 # * 1 -1
addi a2, a2, -1 addi a2, a2, -1
jal ra, memcmp8 jal ra, memcmp8
sb a0, 13(s3) sb a0, 13(s3)
# check values double by double # check values double by double
mv a0, s0 # SourceData addi a0, s0, 7 # SourceData+7
addi a1, s1, 7 # ie: ByteDstData+7 addi a1, s1, 0 # ie: ByteDstData
srli a2, s2, 0 # * 1 slli a2, s2, 0 # * 1
addi a2, a2, -1 addi a2, a2, -1
jal ra, memcmp8 jal ra, memcmp8
sb a0, 14(s3) sb a0, 14(s3)
@ -346,7 +363,7 @@ CheckAllWriteSignature:
addi s3, s3, 15 addi s3, s3, 15
mv a3, s3 mv a3, s3
or a0, s4, a0 or a0, s4, a0
mv ra, s4 mv ra, s5
ret ret
@ -444,7 +461,6 @@ memcmp8_ne:
RVTEST_CODE_END RVTEST_CODE_END
RVMODEL_HALT
.type memcpy8_1, @function .type memcpy8_1, @function
# load 8 bytes using load double then store using 8 sb # load 8 bytes using load double then store using 8 sb
@ -459,31 +475,31 @@ memcpy8_1_loop:
ld t3, 0(t0) ld t3, 0(t0)
andi t4, t3, 0xff andi t4, t3, 0xff
sb t4, 0(t1) sb t4, 0(t1)
slli t4, t3, 8 srli t4, t3, 8
andi t4, t4, 0xff andi t4, t4, 0xff
sb t4, 1(t1) sb t4, 1(t1)
slli t4, t3, 16 srli t4, t3, 16
andi t4, t4, 0xff andi t4, t4, 0xff
sb t4, 2(t1) sb t4, 2(t1)
slli t4, t3, 24 srli t4, t3, 24
andi t4, t4, 0xff andi t4, t4, 0xff
sb t4, 3(t1) sb t4, 3(t1)
slli t4, t3, 32 srli t4, t3, 32
andi t4, t4, 0xff andi t4, t4, 0xff
sb t4, 4(t1) sb t4, 4(t1)
slli t4, t3, 40 srli t4, t3, 40
andi t4, t4, 0xff andi t4, t4, 0xff
sb t4, 5(t1) sb t4, 5(t1)
slli t4, t3, 48 srli t4, t3, 48
andi t4, t4, 0xff andi t4, t4, 0xff
sb t4, 6(t1) sb t4, 6(t1)
slli t4, t3, 56 srli t4, t3, 56
andi t4, t4, 0xff andi t4, t4, 0xff
sb t4, 7(t1) sb t4, 7(t1)
@ -506,23 +522,23 @@ memcpy8_2:
# 16 bit mask # 16 bit mask
lui t4, 0xf lui t4, 0xf
li t3, 0xfff li t3, 0xfff
or t4, t4, t3 or t5, t4, t3
memcpy8_2_loop: memcpy8_2_loop:
ld t3, 0(t0) ld t3, 0(t0)
and t4, t4, t3 and t4, t3, t5
sh t4, 0(t1) sh t4, 0(t1)
slli t4, t3, 16 srli t4, t3, 16
and t4, t4, t3 and t4, t4, t5
sh t4, 2(t1) sh t4, 2(t1)
slli t4, t3, 32 srli t4, t3, 32
and t4, t4, t3 and t4, t4, t5
sh t4, 4(t1) sh t4, 4(t1)
slli t4, t3, 48 srli t4, t3, 48
and t4, t4, t3 and t4, t4, t5
sh t4, 6(t1) sh t4, 6(t1)
@ -545,15 +561,15 @@ memcpy8_4:
# 32 bit mask # 32 bit mask
lui t4, 0xffff lui t4, 0xffff
li t3, 0xfff li t3, 0xfff
or t4, t4, t3 or t5, t4, t3
memcpy8_4_loop: memcpy8_4_loop:
ld t3, 0(t0) ld t3, 0(t0)
and t4, t4, t3 and t4, t3, t5
sw t4, 0(t1) sw t4, 0(t1)
slli t4, t3, 32 srli t4, t3, 32
and t4, t4, t3 and t4, t4, t5
sw t4, 4(t1) sw t4, 4(t1)
addi t0, t0, 8 addi t0, t0, 8
@ -730,7 +746,7 @@ Double7DstData:
.8byte 0xdeadbeefdeadbeef, 0xdeadbeefdeadbeef, 0xdeadbeefdeadbeef, 0xdeadbeefdeadbeef .8byte 0xdeadbeefdeadbeef, 0xdeadbeefdeadbeef, 0xdeadbeefdeadbeef, 0xdeadbeefdeadbeef
signature: signature:
.fill 225, 1, 0xff .fill 225, 1, 0x00
RVMODEL_DATA_END RVMODEL_DATA_END
// ../wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLT.S // ../wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLT.S