forked from Github_Repos/cvw
		
	tentatively add WALLY-AMO test to arch test infrastructure
This commit is contained in:
		
							parent
							
								
									d8ddda760b
								
							
						
					
					
						commit
						f63c3264c2
					
				@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					fffffffe
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					00000001
 | 
				
			||||||
 | 
					00000000
 | 
				
			||||||
 | 
					fffffffb
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					fffffffd
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffef
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					000007ef
 | 
				
			||||||
 | 
					00000000
 | 
				
			||||||
 | 
					ffffffbf
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					fffffeff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					fffffd7e
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					fffffeff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					000007ff
 | 
				
			||||||
 | 
					00000000
 | 
				
			||||||
 | 
					ffffefff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffefff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffefff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					ffffefff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					fffeffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					000007fa
 | 
				
			||||||
 | 
					00000000
 | 
				
			||||||
 | 
					fffbffff
 | 
				
			||||||
 | 
					fff7ffff
 | 
				
			||||||
 | 
					00000001
 | 
				
			||||||
 | 
					00000000
 | 
				
			||||||
 | 
					ffefffff
 | 
				
			||||||
 | 
					ffdfffff
 | 
				
			||||||
 | 
					fff00001
 | 
				
			||||||
 | 
					ffdfffff
 | 
				
			||||||
 | 
					ffbfffff
 | 
				
			||||||
 | 
					ff7fffff
 | 
				
			||||||
 | 
					000007cf
 | 
				
			||||||
 | 
					00000000
 | 
				
			||||||
 | 
					feffffff
 | 
				
			||||||
 | 
					fdffffff
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					fdffffff
 | 
				
			||||||
 | 
					feffffff
 | 
				
			||||||
 | 
					f7ffffff
 | 
				
			||||||
 | 
					fefffc7e
 | 
				
			||||||
 | 
					f7ffffff
 | 
				
			||||||
 | 
					efffffff
 | 
				
			||||||
 | 
					dfffffff
 | 
				
			||||||
 | 
					000007ff
 | 
				
			||||||
 | 
					00000000
 | 
				
			||||||
 | 
					efffffff
 | 
				
			||||||
 | 
					7fffffff
 | 
				
			||||||
 | 
					000007fd
 | 
				
			||||||
 | 
					00000000
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					00000001
 | 
				
			||||||
 | 
					ffffffff
 | 
				
			||||||
 | 
					00000001
 | 
				
			||||||
 | 
					00000002
 | 
				
			||||||
 | 
					00000004
 | 
				
			||||||
 | 
					000007fa
 | 
				
			||||||
 | 
					00000000
 | 
				
			||||||
@ -0,0 +1,257 @@
 | 
				
			|||||||
 | 
					///////////////////////////////////////////
 | 
				
			||||||
 | 
					// WALLY-AMO.S
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Tests Atomic AMO instructions
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// David_Harris@hmc.edu 10 March 2021
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Copyright (C) 2021 Harvey Mudd College & Oklahoma State University
 | 
				
			||||||
 | 
					// Adapted from Imperas RISCV-TEST_SUITE
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
 | 
				
			||||||
 | 
					// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 
 | 
				
			||||||
 | 
					// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software 
 | 
				
			||||||
 | 
					// is furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
 | 
				
			||||||
 | 
					// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 
 | 
				
			||||||
 | 
					// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT 
 | 
				
			||||||
 | 
					// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
 | 
					///////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "model_test.h"
 | 
				
			||||||
 | 
					#include "arch_test.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RVTEST_ISA("RV64I")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.section .text.init
 | 
				
			||||||
 | 
					.globl rvtest_entry_point
 | 
				
			||||||
 | 
					rvtest_entry_point:
 | 
				
			||||||
 | 
					RVMODEL_BOOT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # ---------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					    # Addresses for test data and results
 | 
				
			||||||
 | 
					    la x6, wally_signature
 | 
				
			||||||
 | 
					    la x31, test_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 0:  amoswap.w
 | 
				
			||||||
 | 
					    li x7, 1
 | 
				
			||||||
 | 
					    amoswap.w x8, x7, (x31)
 | 
				
			||||||
 | 
					    lw x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be fffffffffffffffe (sign extended from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 0000000000000001 (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 1:  amoadd.w
 | 
				
			||||||
 | 
					    li x7, 2
 | 
				
			||||||
 | 
					    amoadd.w x8, x7, (x31)
 | 
				
			||||||
 | 
					    lw x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be fffffffffffffffb (sign extended from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be fffffffffffffffd (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 2:  amoand.w
 | 
				
			||||||
 | 
					    li x7, 0x7ff
 | 
				
			||||||
 | 
					    amoand.w x8, x7, (x31)
 | 
				
			||||||
 | 
					    lw x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be ffffffffffffffef (sign extended from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 00000000000007ef (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 3:  amoor.w
 | 
				
			||||||
 | 
					    li x7, 0x44
 | 
				
			||||||
 | 
					    amoor.w x8, x7, (x31)
 | 
				
			||||||
 | 
					    lw x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be ffffffffffffffbf (sign extended from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be ffffffffffffffff (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 4:  amoxor.w
 | 
				
			||||||
 | 
					    li x7, 0x381
 | 
				
			||||||
 | 
					    amoxor.w x8, x7, (x31)
 | 
				
			||||||
 | 
					    lw x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be fffffffffffffeff (sign extended from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be fffffffffffffd7e (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 5:  amomax.w
 | 
				
			||||||
 | 
					    li x7, 0x7ff
 | 
				
			||||||
 | 
					    amomax.w x8, x7, (x31)
 | 
				
			||||||
 | 
					    lw x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be fffffffffffffeff (sign extended from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 00000000000007ff (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 6:  amomin.w
 | 
				
			||||||
 | 
					    li x7, 0x7fd
 | 
				
			||||||
 | 
					    amomin.w x8, x7, (x31)
 | 
				
			||||||
 | 
					    lw x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be ffffffffffffefff (sign extended from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be ffffffffffffefff (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 7:  amomaxu.w
 | 
				
			||||||
 | 
					    li x7, 0x7fb
 | 
				
			||||||
 | 
					    amomaxu.w x8, x7, (x31)
 | 
				
			||||||
 | 
					    lw x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be ffffffffffffefff (sign extended from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be ffffffffffffefff (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 8:  amominu.w
 | 
				
			||||||
 | 
					    li x7, 0x7fa
 | 
				
			||||||
 | 
					    amominu.w x8, x7, (x31)
 | 
				
			||||||
 | 
					    lw x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be fffffffffffeffff (sign extended from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 00000000000007fa (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 9:  amoswap.d
 | 
				
			||||||
 | 
					    li x7, 1
 | 
				
			||||||
 | 
					    amoswap.d x8, x7, (x31)
 | 
				
			||||||
 | 
					    ld x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be 0xfff7fffffffbffff (directly read from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 0000000000000001 (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 10:  amoadd.d
 | 
				
			||||||
 | 
					    li x7, 2
 | 
				
			||||||
 | 
					    amoadd.d x8, x7, (x31)
 | 
				
			||||||
 | 
					    ld x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be 0xffdfffffffefffff (directly read from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 0xffdffffffff00001 (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 11:  amoand.d
 | 
				
			||||||
 | 
					    li x7, 0x7cf
 | 
				
			||||||
 | 
					    amoand.d x8, x7, (x31)
 | 
				
			||||||
 | 
					    ld x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be 0xff7fffffffbfffff (directly read from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 00000000000007cf (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 12:  amoor.d
 | 
				
			||||||
 | 
					    li x7, 0x0d000011
 | 
				
			||||||
 | 
					    amoor.d x8, x7, (x31)
 | 
				
			||||||
 | 
					    ld x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be 0xfdfffffffeffffff (directly read from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 0xfdffffffffffffff (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 13:  amoxor.d
 | 
				
			||||||
 | 
					    li x7, 0x381
 | 
				
			||||||
 | 
					    amoxor.d x8, x7, (x31)
 | 
				
			||||||
 | 
					    ld x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be 0xf7fffffffeffffff (directly read from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 0xf7fffffffefffc7e (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 14:  amomax.d
 | 
				
			||||||
 | 
					    li x7, 0x7ff
 | 
				
			||||||
 | 
					    amomax.d x8, x7, (x31)
 | 
				
			||||||
 | 
					    ld x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be 0xdfffffffefffffff (directly read from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 00000000000007ff (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 15:  amomin.d
 | 
				
			||||||
 | 
					    li x7, 0x7fd
 | 
				
			||||||
 | 
					    amomin.d x8, x7, (x31)
 | 
				
			||||||
 | 
					    ld x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be 0x7fffffffefffffff (directly read from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 00000000000007fd (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 16:  amomaxu.d
 | 
				
			||||||
 | 
					    li x7, 0x7fb
 | 
				
			||||||
 | 
					    amomaxu.d x8, x7, (x31)
 | 
				
			||||||
 | 
					    ld x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be 0x00000001ffffffff (directly read from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 0x00000001ffffffff (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Testcase 17:  amominu.d
 | 
				
			||||||
 | 
					    li x7, 0x7fa
 | 
				
			||||||
 | 
					    amominu.d x8, x7, (x31)
 | 
				
			||||||
 | 
					    ld x9, 0(x31)
 | 
				
			||||||
 | 
					    sd x8, 0(x6)        # should be 0x0000000400000002 (directly read from test data)
 | 
				
			||||||
 | 
					    sd x9, 8(x6)        # should be 00000000000007fa (stored by amo)
 | 
				
			||||||
 | 
					    addi x31, x31, 8
 | 
				
			||||||
 | 
					    addi x6, x6, 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # ---------------------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					RVMODEL_HALT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RVTEST_DATA_BEGIN
 | 
				
			||||||
 | 
					    .align 8
 | 
				
			||||||
 | 
					test_data:
 | 
				
			||||||
 | 
					    .dword 0xfffffffdfffffffe
 | 
				
			||||||
 | 
					    .dword 0xfffffff7fffffffb
 | 
				
			||||||
 | 
					    .dword 0xffffffdfffffffef
 | 
				
			||||||
 | 
					    .dword 0xffffff7fffffffbf
 | 
				
			||||||
 | 
					    .dword 0xfffffdfffffffeff
 | 
				
			||||||
 | 
					    .dword 0xfffff7fffffffeff
 | 
				
			||||||
 | 
					    .dword 0x0fffdfffffffefff
 | 
				
			||||||
 | 
					    .dword 0xffff7fffffffefff
 | 
				
			||||||
 | 
					    .dword 0x3ffdfffffffeffff
 | 
				
			||||||
 | 
					    .dword 0xfff7fffffffbffff
 | 
				
			||||||
 | 
					    .dword 0xffdfffffffefffff
 | 
				
			||||||
 | 
					    .dword 0xff7fffffffbfffff
 | 
				
			||||||
 | 
					    .dword 0xfdfffffffeffffff
 | 
				
			||||||
 | 
					    .dword 0xf7fffffffeffffff
 | 
				
			||||||
 | 
					    .dword 0xdfffffffefffffff
 | 
				
			||||||
 | 
					    .dword 0x7fffffffefffffff
 | 
				
			||||||
 | 
					    .dword 0x00000001ffffffff
 | 
				
			||||||
 | 
					    .dword 0x0000000400000002
 | 
				
			||||||
 | 
					    .dword 0x0000001000000008
 | 
				
			||||||
 | 
					    .dword 0x0000004000000020
 | 
				
			||||||
 | 
					    .dword 0x0000010000000080
 | 
				
			||||||
 | 
					    .dword 0x0000040000000200
 | 
				
			||||||
 | 
					    .dword 0x0000100000000800
 | 
				
			||||||
 | 
					    .dword 0x0000400000002000
 | 
				
			||||||
 | 
					    .dword 0x0000000100008000
 | 
				
			||||||
 | 
					    .dword 0x0004000000000002
 | 
				
			||||||
 | 
					    .dword 0x0000001000080000
 | 
				
			||||||
 | 
					    .dword 0x0040000000000020
 | 
				
			||||||
 | 
					    .dword 0x0000010000800000
 | 
				
			||||||
 | 
					    .dword 0x0400000000000200
 | 
				
			||||||
 | 
					    .dword 0x0000100008000000
 | 
				
			||||||
 | 
					    .dword 0x4000000000002000
 | 
				
			||||||
 | 
					    .dword 0x0000000080000000
 | 
				
			||||||
 | 
					RVTEST_DATA_END
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RVMODEL_DATA_BEGIN
 | 
				
			||||||
 | 
					# signature output
 | 
				
			||||||
 | 
					wally_signature:
 | 
				
			||||||
 | 
					.fill 6, 8, -1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef rvtest_mtrap_routine
 | 
				
			||||||
 | 
					mtrap_sigptr:
 | 
				
			||||||
 | 
					    .fill 64*(XLEN/32),4,0xdeadbeef
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef rvtest_gpr_save
 | 
				
			||||||
 | 
					gpr_save:
 | 
				
			||||||
 | 
					    .fill 32*(XLEN/32),4,0xdeadbeef
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					RVMODEL_DATA_END
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user