mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Merge pull request #389 from ross144/main
Added missing cbom 32 bit tests.
This commit is contained in:
		
						commit
						2e7385245c
					
				@ -0,0 +1,428 @@
 | 
				
			|||||||
 | 
					deadbeef # begin_signature
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef  # destination 1
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					deadbeef
 | 
				
			||||||
 | 
					00000000  # destination 2
 | 
				
			||||||
 | 
					00000001
 | 
				
			||||||
 | 
					00000002
 | 
				
			||||||
 | 
					00000003
 | 
				
			||||||
 | 
					00000004
 | 
				
			||||||
 | 
					00000005
 | 
				
			||||||
 | 
					00000006
 | 
				
			||||||
 | 
					00000007
 | 
				
			||||||
 | 
					00000008
 | 
				
			||||||
 | 
					00000009
 | 
				
			||||||
 | 
					0000000a
 | 
				
			||||||
 | 
					0000000b
 | 
				
			||||||
 | 
					0000000c
 | 
				
			||||||
 | 
					0000000d
 | 
				
			||||||
 | 
					0000000e
 | 
				
			||||||
 | 
					0000000f
 | 
				
			||||||
 | 
					00000010
 | 
				
			||||||
 | 
					00000011
 | 
				
			||||||
 | 
					00000012
 | 
				
			||||||
 | 
					00000013
 | 
				
			||||||
 | 
					00000014
 | 
				
			||||||
 | 
					00000015
 | 
				
			||||||
 | 
					00000016
 | 
				
			||||||
 | 
					00000017
 | 
				
			||||||
 | 
					00000018
 | 
				
			||||||
 | 
					00000019
 | 
				
			||||||
 | 
					0000001a
 | 
				
			||||||
 | 
					0000001b
 | 
				
			||||||
 | 
					0000001c
 | 
				
			||||||
 | 
					0000001d
 | 
				
			||||||
 | 
					0000001e
 | 
				
			||||||
 | 
					0000001f
 | 
				
			||||||
 | 
					00000020
 | 
				
			||||||
 | 
					00000021
 | 
				
			||||||
 | 
					00000022
 | 
				
			||||||
 | 
					00000023
 | 
				
			||||||
 | 
					00000024
 | 
				
			||||||
 | 
					00000025
 | 
				
			||||||
 | 
					00000026
 | 
				
			||||||
 | 
					00000027
 | 
				
			||||||
 | 
					00000028
 | 
				
			||||||
 | 
					00000029
 | 
				
			||||||
 | 
					0000002a
 | 
				
			||||||
 | 
					0000002b
 | 
				
			||||||
 | 
					0000002c
 | 
				
			||||||
 | 
					0000002d
 | 
				
			||||||
 | 
					0000002e
 | 
				
			||||||
 | 
					0000002f
 | 
				
			||||||
 | 
					00000030
 | 
				
			||||||
 | 
					00000031
 | 
				
			||||||
 | 
					00000032
 | 
				
			||||||
 | 
					00000033
 | 
				
			||||||
 | 
					00000034
 | 
				
			||||||
 | 
					00000035
 | 
				
			||||||
 | 
					00000036
 | 
				
			||||||
 | 
					00000037
 | 
				
			||||||
 | 
					00000038
 | 
				
			||||||
 | 
					00000039
 | 
				
			||||||
 | 
					0000003a
 | 
				
			||||||
 | 
					0000003b
 | 
				
			||||||
 | 
					0000003c
 | 
				
			||||||
 | 
					0000003d
 | 
				
			||||||
 | 
					0000003e
 | 
				
			||||||
 | 
					0000003f
 | 
				
			||||||
 | 
					00000040
 | 
				
			||||||
 | 
					00000041
 | 
				
			||||||
 | 
					00000042
 | 
				
			||||||
 | 
					00000043
 | 
				
			||||||
 | 
					00000044
 | 
				
			||||||
 | 
					00000045
 | 
				
			||||||
 | 
					00000046
 | 
				
			||||||
 | 
					00000047
 | 
				
			||||||
 | 
					00000048
 | 
				
			||||||
 | 
					00000049
 | 
				
			||||||
 | 
					0000004a
 | 
				
			||||||
 | 
					0000004b
 | 
				
			||||||
 | 
					0000004c
 | 
				
			||||||
 | 
					0000004d
 | 
				
			||||||
 | 
					0000004e
 | 
				
			||||||
 | 
					0000004f
 | 
				
			||||||
 | 
					00000050
 | 
				
			||||||
 | 
					00000051
 | 
				
			||||||
 | 
					00000052
 | 
				
			||||||
 | 
					00000053
 | 
				
			||||||
 | 
					00000054
 | 
				
			||||||
 | 
					00000055
 | 
				
			||||||
 | 
					00000056
 | 
				
			||||||
 | 
					00000057
 | 
				
			||||||
 | 
					00000058
 | 
				
			||||||
 | 
					00000059
 | 
				
			||||||
 | 
					0000005a
 | 
				
			||||||
 | 
					0000005b
 | 
				
			||||||
 | 
					0000005c
 | 
				
			||||||
 | 
					0000005d
 | 
				
			||||||
 | 
					0000005e
 | 
				
			||||||
 | 
					0000005f
 | 
				
			||||||
 | 
					00000060
 | 
				
			||||||
 | 
					00000061
 | 
				
			||||||
 | 
					00000062
 | 
				
			||||||
 | 
					00000063
 | 
				
			||||||
 | 
					00000064
 | 
				
			||||||
 | 
					00000065
 | 
				
			||||||
 | 
					00000066
 | 
				
			||||||
 | 
					00000067
 | 
				
			||||||
 | 
					00000068
 | 
				
			||||||
 | 
					00000069
 | 
				
			||||||
 | 
					0000006a
 | 
				
			||||||
 | 
					0000006b
 | 
				
			||||||
 | 
					0000006c
 | 
				
			||||||
 | 
					0000006d
 | 
				
			||||||
 | 
					0000006e
 | 
				
			||||||
 | 
					0000006f
 | 
				
			||||||
 | 
					00000070
 | 
				
			||||||
 | 
					00000071
 | 
				
			||||||
 | 
					00000072
 | 
				
			||||||
 | 
					00000073
 | 
				
			||||||
 | 
					00000074
 | 
				
			||||||
 | 
					00000075
 | 
				
			||||||
 | 
					00000076
 | 
				
			||||||
 | 
					00000077
 | 
				
			||||||
 | 
					00000078
 | 
				
			||||||
 | 
					00000079
 | 
				
			||||||
 | 
					0000007a
 | 
				
			||||||
 | 
					0000007b
 | 
				
			||||||
 | 
					0000007c
 | 
				
			||||||
 | 
					0000007d
 | 
				
			||||||
 | 
					0000007e
 | 
				
			||||||
 | 
					0000007f
 | 
				
			||||||
 | 
					00000000  # destination 3
 | 
				
			||||||
 | 
					00000001
 | 
				
			||||||
 | 
					00000002
 | 
				
			||||||
 | 
					00000003
 | 
				
			||||||
 | 
					00000004
 | 
				
			||||||
 | 
					00000005
 | 
				
			||||||
 | 
					00000006
 | 
				
			||||||
 | 
					00000007
 | 
				
			||||||
 | 
					00000008
 | 
				
			||||||
 | 
					00000009
 | 
				
			||||||
 | 
					0000000a
 | 
				
			||||||
 | 
					0000000b
 | 
				
			||||||
 | 
					0000000c
 | 
				
			||||||
 | 
					0000000d
 | 
				
			||||||
 | 
					0000000e
 | 
				
			||||||
 | 
					0000000f
 | 
				
			||||||
 | 
					00000010
 | 
				
			||||||
 | 
					00000011
 | 
				
			||||||
 | 
					00000012
 | 
				
			||||||
 | 
					00000013
 | 
				
			||||||
 | 
					00000014
 | 
				
			||||||
 | 
					00000015
 | 
				
			||||||
 | 
					00000016
 | 
				
			||||||
 | 
					00000017
 | 
				
			||||||
 | 
					00000018
 | 
				
			||||||
 | 
					00000019
 | 
				
			||||||
 | 
					0000001a
 | 
				
			||||||
 | 
					0000001b
 | 
				
			||||||
 | 
					0000001c
 | 
				
			||||||
 | 
					0000001d
 | 
				
			||||||
 | 
					0000001e
 | 
				
			||||||
 | 
					0000001f
 | 
				
			||||||
 | 
					00000020
 | 
				
			||||||
 | 
					00000021
 | 
				
			||||||
 | 
					00000022
 | 
				
			||||||
 | 
					00000023
 | 
				
			||||||
 | 
					00000024
 | 
				
			||||||
 | 
					00000025
 | 
				
			||||||
 | 
					00000026
 | 
				
			||||||
 | 
					00000027
 | 
				
			||||||
 | 
					00000028
 | 
				
			||||||
 | 
					00000029
 | 
				
			||||||
 | 
					0000002a
 | 
				
			||||||
 | 
					0000002b
 | 
				
			||||||
 | 
					0000002c
 | 
				
			||||||
 | 
					0000002d
 | 
				
			||||||
 | 
					0000002e
 | 
				
			||||||
 | 
					0000002f
 | 
				
			||||||
 | 
					00000030
 | 
				
			||||||
 | 
					00000031
 | 
				
			||||||
 | 
					00000032
 | 
				
			||||||
 | 
					00000033
 | 
				
			||||||
 | 
					00000034
 | 
				
			||||||
 | 
					00000035
 | 
				
			||||||
 | 
					00000036
 | 
				
			||||||
 | 
					00000037
 | 
				
			||||||
 | 
					00000038
 | 
				
			||||||
 | 
					00000039
 | 
				
			||||||
 | 
					0000003a
 | 
				
			||||||
 | 
					0000003b
 | 
				
			||||||
 | 
					0000003c
 | 
				
			||||||
 | 
					0000003d
 | 
				
			||||||
 | 
					0000003e
 | 
				
			||||||
 | 
					0000003f
 | 
				
			||||||
 | 
					00000040
 | 
				
			||||||
 | 
					00000041
 | 
				
			||||||
 | 
					00000042
 | 
				
			||||||
 | 
					00000043
 | 
				
			||||||
 | 
					00000044
 | 
				
			||||||
 | 
					00000045
 | 
				
			||||||
 | 
					00000046
 | 
				
			||||||
 | 
					00000047
 | 
				
			||||||
 | 
					00000048
 | 
				
			||||||
 | 
					00000049
 | 
				
			||||||
 | 
					0000004a
 | 
				
			||||||
 | 
					0000004b
 | 
				
			||||||
 | 
					0000004c
 | 
				
			||||||
 | 
					0000004d
 | 
				
			||||||
 | 
					0000004e
 | 
				
			||||||
 | 
					0000004f
 | 
				
			||||||
 | 
					00000050
 | 
				
			||||||
 | 
					00000051
 | 
				
			||||||
 | 
					00000052
 | 
				
			||||||
 | 
					00000053
 | 
				
			||||||
 | 
					00000054
 | 
				
			||||||
 | 
					00000055
 | 
				
			||||||
 | 
					00000056
 | 
				
			||||||
 | 
					00000057
 | 
				
			||||||
 | 
					00000058
 | 
				
			||||||
 | 
					00000059
 | 
				
			||||||
 | 
					0000005a
 | 
				
			||||||
 | 
					0000005b
 | 
				
			||||||
 | 
					0000005c
 | 
				
			||||||
 | 
					0000005d
 | 
				
			||||||
 | 
					0000005e
 | 
				
			||||||
 | 
					0000005f
 | 
				
			||||||
 | 
					00000060
 | 
				
			||||||
 | 
					00000061
 | 
				
			||||||
 | 
					00000062
 | 
				
			||||||
 | 
					00000063
 | 
				
			||||||
 | 
					00000064
 | 
				
			||||||
 | 
					00000065
 | 
				
			||||||
 | 
					00000066
 | 
				
			||||||
 | 
					00000067
 | 
				
			||||||
 | 
					00000068
 | 
				
			||||||
 | 
					00000069
 | 
				
			||||||
 | 
					0000006a
 | 
				
			||||||
 | 
					0000006b
 | 
				
			||||||
 | 
					0000006c
 | 
				
			||||||
 | 
					0000006d
 | 
				
			||||||
 | 
					0000006e
 | 
				
			||||||
 | 
					0000006f
 | 
				
			||||||
 | 
					00000070
 | 
				
			||||||
 | 
					00000071
 | 
				
			||||||
 | 
					00000072
 | 
				
			||||||
 | 
					00000073
 | 
				
			||||||
 | 
					00000074
 | 
				
			||||||
 | 
					00000075
 | 
				
			||||||
 | 
					00000076
 | 
				
			||||||
 | 
					00000077
 | 
				
			||||||
 | 
					00000078
 | 
				
			||||||
 | 
					00000079
 | 
				
			||||||
 | 
					0000007a
 | 
				
			||||||
 | 
					0000007b
 | 
				
			||||||
 | 
					0000007c
 | 
				
			||||||
 | 
					0000007d
 | 
				
			||||||
 | 
					0000007e
 | 
				
			||||||
 | 
					0000007f
 | 
				
			||||||
 | 
					ffffffff  # signature  The test writes -1 for correct answers and the a positive integer for incorrect copies.
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					0bad0bad # controls
 | 
				
			||||||
 | 
					0bad0bad  
 | 
				
			||||||
 | 
					0bad0bad
 | 
				
			||||||
@ -0,0 +1,472 @@
 | 
				
			|||||||
 | 
					///////////////////////////////////////////
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// WALLY-cache-management-tests 
 | 
				
			||||||
 | 
					// invalidate, clean, and flush
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Author: Rose Thompson <ross1728@gmail.com>
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Created 18 August 2023
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Copyright (C) 2021 Harvey Mudd College & Oklahoma State University
 | 
				
			||||||
 | 
					# Purpose: Tests the 3 Zicbom cache instructions which all operate on cacheline
 | 
				
			||||||
 | 
					#          granularity blocks of memory.  Invalidate: Clears valid and dirty bits
 | 
				
			||||||
 | 
					#          and does not write back.  Clean: Writes back dirty cacheline if needed
 | 
				
			||||||
 | 
					#          and clears dirty bit.  Does NOT clear valid bit.  Flush:  Cleans and then
 | 
				
			||||||
 | 
					#          Invalidates.  These operations apply to all caches in the memory system.
 | 
				
			||||||
 | 
					#          The tests are divided into three parts one for the data cache, instruction cache
 | 
				
			||||||
 | 
					#          and checks to verify the uncached regions of memory cause exceptions.
 | 
				
			||||||
 | 
					# -----------
 | 
				
			||||||
 | 
					# Copyright (c) 2020. RISC-V International. All rights reserved.
 | 
				
			||||||
 | 
					# SPDX-License-Identifier: BSD-3-Clause
 | 
				
			||||||
 | 
					# -----------
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This assembly file tests the cbo.inval, cbo.clean, and cbo.flush instructions of the RISC-V Zicbom extension.
 | 
				
			||||||
 | 
					# 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "model_test.h"
 | 
				
			||||||
 | 
					#include "arch_test.h"
 | 
				
			||||||
 | 
					RVTEST_ISA("RV32I_Zicbom")
 | 
				
			||||||
 | 
					# Test code region
 | 
				
			||||||
 | 
					.section .text.init
 | 
				
			||||||
 | 
					.globl rvtest_entry_point
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					rvtest_entry_point:
 | 
				
			||||||
 | 
					RVMODEL_BOOT
 | 
				
			||||||
 | 
					RVTEST_CODE_BEGIN
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RVTEST_CASE(0,"//check ISA:=regex(.*32.*);check ISA:=regex(.*I.*);def TEST_CASE_1=True;def NO_SAIL=True;",cbo.inval)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RVMODEL_IO_WRITE_STR(x31, "# Test Begin\n")
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					CBOMTest:
 | 
				
			||||||
 | 
					        # *** TODO
 | 
				
			||||||
 | 
					        # first need to discover the length of the cacheline.
 | 
				
			||||||
 | 
					        # for now assume it is 64 bytes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #addi sp, sp, -16
 | 
				
			||||||
 | 
					        #sd s0, 0(sp)
 | 
				
			||||||
 | 
					        #sd ra, 8(sp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						la s0, signature
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ################################################################################
 | 
				
			||||||
 | 
					        # INVALIDATE  D$
 | 
				
			||||||
 | 
					        ################################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # theory of operation
 | 
				
			||||||
 | 
					        # 1. Read several cachelines of data from memory into the d cache and copy to a second region of memory
 | 
				
			||||||
 | 
					        # 2. Then verify the second region has the same data
 | 
				
			||||||
 | 
					        # 3. Invalidate the second region
 | 
				
			||||||
 | 
					        # 4. Verify the second region has the original invalid data
 | 
				
			||||||
 | 
					        # DON'T batch each step.  We want to see the transition between cachelines. The current should be invalidated
 | 
				
			||||||
 | 
					        # but the next should have the copied data.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 1
 | 
				
			||||||
 | 
					CBOMTest_inval_step1: 
 | 
				
			||||||
 | 
					        la a0, SourceData
 | 
				
			||||||
 | 
					        la a1, Destination1
 | 
				
			||||||
 | 
					        li a2, 128
 | 
				
			||||||
 | 
					        jal ra, memcpy4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 2
 | 
				
			||||||
 | 
					CBOMTest_inval_step2: 
 | 
				
			||||||
 | 
					        la a0, SourceData
 | 
				
			||||||
 | 
					        la a1, Destination1
 | 
				
			||||||
 | 
					        li a2, 128
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)     # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 3
 | 
				
			||||||
 | 
					CBOMTest_inval_step3: 
 | 
				
			||||||
 | 
					        la a1, Destination1
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        # step 4  (should be Invalid)
 | 
				
			||||||
 | 
					        la a0, DeadBeafData1
 | 
				
			||||||
 | 
					        la a1, Destination1
 | 
				
			||||||
 | 
					        li a2, 16
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)    # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 4 next line (should still be valid)
 | 
				
			||||||
 | 
					CBOMTest_inval_step4: 
 | 
				
			||||||
 | 
					        la a0, SourceData+64
 | 
				
			||||||
 | 
					        la a1, Destination1+64
 | 
				
			||||||
 | 
					        li a2, 16
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)    # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 3 (Invalidate all remaining lines)
 | 
				
			||||||
 | 
					CBOMTest_inval_step3_all: 
 | 
				
			||||||
 | 
					        la a1, Destination1+64
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        cbo.inval (a1)          # verify invalidating an already non present line does not cause an issue.
 | 
				
			||||||
 | 
					        la a1, Destination1+128
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination1+192
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination1+256
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination1+320
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination1+384
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination1+448
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					        # step 4 All should be invalid
 | 
				
			||||||
 | 
					CBOMTest_inval_step4_all: 
 | 
				
			||||||
 | 
					        la a0, DeadBeafData1
 | 
				
			||||||
 | 
					        la a1, Destination1
 | 
				
			||||||
 | 
					        li a2, 128
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)    # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ################################################################################
 | 
				
			||||||
 | 
					        # Clean D$
 | 
				
			||||||
 | 
					        ################################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # theory of operation
 | 
				
			||||||
 | 
					        # 1. Read several cachelines of data from memory into the d cache and copy to a second region of memory
 | 
				
			||||||
 | 
					        # 2. Then verify the second region has the same data
 | 
				
			||||||
 | 
					        # 3. Invalidate the second region
 | 
				
			||||||
 | 
					        # 4. Verify the second region has the original invalid data
 | 
				
			||||||
 | 
					        # 5. Repeat step 1
 | 
				
			||||||
 | 
					        # 6. Clean cachelines
 | 
				
			||||||
 | 
					        # 7. Verify the second region has the same data
 | 
				
			||||||
 | 
					        # 8. Invalidate the second region
 | 
				
			||||||
 | 
					        # 9. Verify again but this time it should contain the same data
 | 
				
			||||||
 | 
					        # DON'T batch each step.  We want to see the transition between cachelines. The current should be invalidated
 | 
				
			||||||
 | 
					        # but the next should have the copied data.
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        # step 1
 | 
				
			||||||
 | 
					CBOMTest_clean_step1: 
 | 
				
			||||||
 | 
					        la a0, SourceData
 | 
				
			||||||
 | 
					        la a1, Destination2
 | 
				
			||||||
 | 
					        li a2, 128
 | 
				
			||||||
 | 
					        jal ra, memcpy4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 2
 | 
				
			||||||
 | 
					CBOMTest_clean_step2:
 | 
				
			||||||
 | 
					        la a0, SourceData
 | 
				
			||||||
 | 
					        la a1, Destination2
 | 
				
			||||||
 | 
					        li a2, 128
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)     # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 3
 | 
				
			||||||
 | 
					CBOMTest_clean_step3:
 | 
				
			||||||
 | 
					        la a1, Destination2
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+64
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+128
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+192
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+256
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+320
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+384
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+448
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 4 All should be invalid
 | 
				
			||||||
 | 
					CBOMTest_clean_step4:
 | 
				
			||||||
 | 
					        la a0, DeadBeafData1
 | 
				
			||||||
 | 
					        la a1, Destination2
 | 
				
			||||||
 | 
					        li a2, 128
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)    # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        # step 5
 | 
				
			||||||
 | 
					CBOMTest_clean_step5:
 | 
				
			||||||
 | 
					        la a0, SourceData
 | 
				
			||||||
 | 
					        la a1, Destination2
 | 
				
			||||||
 | 
					        li a2, 128
 | 
				
			||||||
 | 
					        jal ra, memcpy4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 6  only clean 1 line
 | 
				
			||||||
 | 
					CBOMTest_clean_step6:
 | 
				
			||||||
 | 
					        la a1, Destination2
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					        # step 7  only check that 1 line
 | 
				
			||||||
 | 
					CBOMTest_clean_step7:
 | 
				
			||||||
 | 
					        la a0, SourceData
 | 
				
			||||||
 | 
					        la a1, Destination2
 | 
				
			||||||
 | 
					        li a2, 16
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)     # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 8  invalidate that 1 line and the next
 | 
				
			||||||
 | 
					CBOMTest_clean_step8:
 | 
				
			||||||
 | 
					        la a1, Destination2
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+64
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					        # step 9  that 1 line should contain the valid data
 | 
				
			||||||
 | 
					CBOMTest_clean_step9_line1:
 | 
				
			||||||
 | 
					        la a0, SourceData
 | 
				
			||||||
 | 
					        la a1, Destination2
 | 
				
			||||||
 | 
					        li a2, 16
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)     # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 9 the next should contain the invalid data
 | 
				
			||||||
 | 
					CBOMTest_clean_step9_line2:
 | 
				
			||||||
 | 
					        la a0, DeadBeafData1
 | 
				
			||||||
 | 
					        la a1, Destination2+64
 | 
				
			||||||
 | 
					        li a2, 16
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)     # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 5 # now recopy the one we just corrupted
 | 
				
			||||||
 | 
					CBOMTest_clean_step5_recopy_line2:
 | 
				
			||||||
 | 
					        la a0, SourceData+64
 | 
				
			||||||
 | 
					        la a1, Destination2+64
 | 
				
			||||||
 | 
					        li a2, 16
 | 
				
			||||||
 | 
					        jal ra, memcpy4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 6 # clean the remaining
 | 
				
			||||||
 | 
					CBOMTest_clean_step6_clean_all:
 | 
				
			||||||
 | 
					        la a1, Destination2+64
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+128
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+192
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+256
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+320
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+384
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+448
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
					        cbo.clean (a1)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					        # step 8 # invalidate all remaining
 | 
				
			||||||
 | 
					CBOMTest_clean_step7_invalidate_all:
 | 
				
			||||||
 | 
					        la a1, Destination2
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+64
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+128
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+192
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+256
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+320
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+384
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
					        la a1, Destination2+448
 | 
				
			||||||
 | 
					        cbo.inval (a1)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					        # step 9 # check all
 | 
				
			||||||
 | 
					CBOMTest_clean_step9_check_all:
 | 
				
			||||||
 | 
					        la a0, SourceData
 | 
				
			||||||
 | 
					        la a1, Destination2
 | 
				
			||||||
 | 
					        li a2, 128
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)     # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ################################################################################
 | 
				
			||||||
 | 
					        # Flush D$ line
 | 
				
			||||||
 | 
					        ################################################################################
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # theory of operation
 | 
				
			||||||
 | 
					        # 1. Read several cachelines of data from memory into the d cache and copy to a second region of memory
 | 
				
			||||||
 | 
					        # 2. Then verify the second region has the same data
 | 
				
			||||||
 | 
					        # 3. For flush there is no way to create a negative control. We will flush 1 cache line
 | 
				
			||||||
 | 
					        # 4. Verify whole region
 | 
				
			||||||
 | 
					        # 5. Flush the remaining lines
 | 
				
			||||||
 | 
					        # 6. Verify whole region
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 1
 | 
				
			||||||
 | 
					CBOMTest_flush_step1: 
 | 
				
			||||||
 | 
					        la a0, SourceData
 | 
				
			||||||
 | 
					        la a1, Destination3
 | 
				
			||||||
 | 
					        li a2, 128
 | 
				
			||||||
 | 
					        jal ra, memcpy4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 2 All should be valid
 | 
				
			||||||
 | 
					CBOMTest_flush_step2_verify:
 | 
				
			||||||
 | 
					        la a0, SourceData
 | 
				
			||||||
 | 
					        la a1, Destination3
 | 
				
			||||||
 | 
					        li a2, 128
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)     # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 3 # flush 1 line
 | 
				
			||||||
 | 
					CBOMTest_flush_step3:
 | 
				
			||||||
 | 
					        la a1, Destination3
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 4 
 | 
				
			||||||
 | 
					CBOMTest_flush_step4_verify:
 | 
				
			||||||
 | 
					        la a0, SourceData
 | 
				
			||||||
 | 
					        la a1, Destination3
 | 
				
			||||||
 | 
					        li a2, 128
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)     # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # step 5
 | 
				
			||||||
 | 
					CBOMTest_flush_step5_flush_all:
 | 
				
			||||||
 | 
					        la a1, Destination3
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					        la a1, Destination3+64
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					        la a1, Destination3+128
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					        la a1, Destination3+192
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					        la a1, Destination3+256
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					        la a1, Destination3+320
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					        la a1, Destination3+384
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					        la a1, Destination3+448
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
					        cbo.flush (a1)
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					        # step 6
 | 
				
			||||||
 | 
					CBOMTest_flush_step6_verify:
 | 
				
			||||||
 | 
					        la a0, SourceData
 | 
				
			||||||
 | 
					        la a1, Destination3
 | 
				
			||||||
 | 
					        li a2, 128
 | 
				
			||||||
 | 
					        jal ra, memcmp4
 | 
				
			||||||
 | 
					        sw a0, 0(s0)     # should be -1
 | 
				
			||||||
 | 
					        addi s0, s0, 4
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        #lw s0, 0(sp)
 | 
				
			||||||
 | 
					        #lw ra, 8(sp)
 | 
				
			||||||
 | 
					        #addi sp, sp, 16
 | 
				
			||||||
 | 
					        #ret
 | 
				
			||||||
 | 
					RVMODEL_HALT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					.type memcpy4, @function
 | 
				
			||||||
 | 
					memcpy4:        
 | 
				
			||||||
 | 
					        # a0 is the source
 | 
				
			||||||
 | 
					        # a1 is the dst
 | 
				
			||||||
 | 
					        # a2 is the number of 4 byte words
 | 
				
			||||||
 | 
					        mv t0, a0
 | 
				
			||||||
 | 
					        mv t1, a1
 | 
				
			||||||
 | 
					        li t2, 0
 | 
				
			||||||
 | 
					memcpy4_loop:   
 | 
				
			||||||
 | 
					        lw t3, 0(t0)
 | 
				
			||||||
 | 
					        sw t3, 0(t1)
 | 
				
			||||||
 | 
					        addi t0, t0, 4
 | 
				
			||||||
 | 
					        addi t1, t1, 4
 | 
				
			||||||
 | 
					        addi t2, t2, 1
 | 
				
			||||||
 | 
					        blt t2, a2, memcpy4_loop
 | 
				
			||||||
 | 
					        ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.type memcmp4, @function
 | 
				
			||||||
 | 
					# returns which index mismatch, -1 if none
 | 
				
			||||||
 | 
					memcmp4:
 | 
				
			||||||
 | 
					        # a0 is the source1
 | 
				
			||||||
 | 
					        # a1 is the source2
 | 
				
			||||||
 | 
					        # a2 is the number of 4 byte words
 | 
				
			||||||
 | 
					        mv t0, a0
 | 
				
			||||||
 | 
					        mv t1, a1
 | 
				
			||||||
 | 
					        li t2, 0
 | 
				
			||||||
 | 
					memcmp4_loop:
 | 
				
			||||||
 | 
					        lw t3, 0(t0)
 | 
				
			||||||
 | 
					        lw t4, 0(t1)
 | 
				
			||||||
 | 
					        bne t3, t4, memcmp4_ne
 | 
				
			||||||
 | 
					        addi t0, t0, 4
 | 
				
			||||||
 | 
					        addi t1, t1, 4
 | 
				
			||||||
 | 
					        addi t2, t2, 1
 | 
				
			||||||
 | 
					        blt t2, a2, memcmp4_loop
 | 
				
			||||||
 | 
					        li a0, -1
 | 
				
			||||||
 | 
					        ret
 | 
				
			||||||
 | 
					memcmp4_ne:
 | 
				
			||||||
 | 
					        mv a0, t2
 | 
				
			||||||
 | 
					        ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RVTEST_CODE_END
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RVTEST_DATA_BEGIN
 | 
				
			||||||
 | 
					# Input data section.
 | 
				
			||||||
 | 
					#.data
 | 
				
			||||||
 | 
					.align 7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DeadBeafData1:
 | 
				
			||||||
 | 
					        .fill 128, 4, 0xdeadbeef
 | 
				
			||||||
 | 
					SourceData:
 | 
				
			||||||
 | 
					        .int 0, 1, 2, 3, 4, 5, 6, 7
 | 
				
			||||||
 | 
					        .int 8, 9, 10, 11, 12, 13, 14, 15
 | 
				
			||||||
 | 
					        .int 16, 17, 18, 19, 20, 21, 22, 23
 | 
				
			||||||
 | 
					        .int 24, 25, 26, 27, 28, 29, 30, 31
 | 
				
			||||||
 | 
					        .int 32, 33, 34, 35, 36, 37, 38, 39
 | 
				
			||||||
 | 
					        .int 40, 41, 42, 43, 44, 45, 46, 47
 | 
				
			||||||
 | 
					        .int 48, 49, 50, 51, 52, 53, 54, 55
 | 
				
			||||||
 | 
					        .int 56, 57, 58, 59, 60, 61, 62, 63
 | 
				
			||||||
 | 
					        .int 64, 65, 66, 67, 68, 69, 70, 71
 | 
				
			||||||
 | 
					        .int 72, 73, 74, 75, 76, 77, 78, 79
 | 
				
			||||||
 | 
					        .int 80, 81, 82, 83, 84, 85, 86, 87
 | 
				
			||||||
 | 
					        .int 88, 89, 90, 91, 92, 93, 94, 95
 | 
				
			||||||
 | 
					        .int 96, 97, 98, 99, 100, 101, 102, 103
 | 
				
			||||||
 | 
					        .int 104, 105, 106, 107, 108, 109, 110, 111
 | 
				
			||||||
 | 
					        .int 112, 113, 114, 115, 116, 117, 118, 119
 | 
				
			||||||
 | 
					        .int 120, 121, 122, 123, 124, 125, 126, 127
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RVTEST_DATA_END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RVMODEL_DATA_BEGIN
 | 
				
			||||||
 | 
					        .fill 28, 4, 0xdeadbeef   # this is annoying, but RVMODEL_DATA_END and BEGIN insert
 | 
				
			||||||
 | 
					        # 4 bytes.  This needs to be aligned to a cacheline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        .align 6
 | 
				
			||||||
 | 
					Destination1:
 | 
				
			||||||
 | 
					        .fill 128, 4, 0xdeadbeef
 | 
				
			||||||
 | 
					Destination2:   
 | 
				
			||||||
 | 
					        .fill 128, 4, 0xdeadbeef
 | 
				
			||||||
 | 
					Destination3:
 | 
				
			||||||
 | 
					        .fill 128, 4, 0xdeadbeef
 | 
				
			||||||
 | 
					signature:
 | 
				
			||||||
 | 
					        .fill 16, 4, 0x0bad0bad
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					RVMODEL_DATA_END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user