// sumtest.S // David_Harris@hmc.edu 24 December 2021 .global rvtest_entry_point rvtest_entry_point: la sp, topofstack # Initialize stack pointer la t0, N # get address of N in data ld a0, 0(t0) # load N csrr s8, instret # count instructions before call jal sum # call sum(N) csrr s9, instret # count instructions after call sub s9, s9, s8 # length of call la t0, begin_signature # address of signature sd a0, 0(t0) # store sum(N) in signature sd s9, 8(t0) # record performance write_tohost: la t1, tohost li t0, 1 # 1 for success, 3 for failure sd t0, 0(t1) # send success code self_loop: j self_loop # wait .section .tohost tohost: # write to HTIF .dword 0 fromhost: .dword 0 .data N: .dword 4 .EQU XLEN,64 begin_signature: .fill 2*(XLEN/32),4,0xdeadbeef # end_signature: # Initialize stack with room for 512 bytes .bss .space 512 topofstack: