diff options
author | Palmer Dabbelt <palmer@dabbelt.com> | 2016-07-12 09:19:08 -0700 |
---|---|---|
committer | Palmer Dabbelt <palmer@dabbelt.com> | 2016-07-12 09:19:08 -0700 |
commit | 00df2be7a414d34c7633142c73ac6130f6cbbd4b (patch) | |
tree | 49ade5408f077f851fd90280fc300709148883f9 /isa/rv64mi/breakpoint.S | |
parent | d82a880f81cb5d197f712bbd17e821e0d70d7b75 (diff) | |
parent | 3dc00e7b04834f862a074ac8822892e1ecfc009c (diff) | |
download | riscv-tests-smi-demo.zip riscv-tests-smi-demo.tar.gz riscv-tests-smi-demo.tar.bz2 |
Merge commit '3dc00e7' into smi-demosmi-demo
Diffstat (limited to 'isa/rv64mi/breakpoint.S')
-rw-r--r-- | isa/rv64mi/breakpoint.S | 121 |
1 files changed, 76 insertions, 45 deletions
diff --git a/isa/rv64mi/breakpoint.S b/isa/rv64mi/breakpoint.S index 5e4dfbb..77c9509 100644 --- a/isa/rv64mi/breakpoint.S +++ b/isa/rv64mi/breakpoint.S @@ -16,87 +16,117 @@ RVTEST_CODE_BEGIN # Set up breakpoint to trap on M-mode fetches. li TESTNUM, 2 - # Skip tdrselect is hard-wired. - li t0, 1<<(_RISCV_SZLONG-1) - csrw tdrselect, t0 - csrr t1, tdrselect - bne t0, t1, pass + # Skip tdrselect if hard-wired. + li a0, 1<<(_RISCV_SZLONG-1) + csrw tdrselect, a0 + csrr a1, tdrselect + bne a0, a1, pass # Make sure there's a breakpoint there. - csrr t0, tdrdata1 - srli t0, t0, _RISCV_SZLONG-4 - li t1, 1 - bne t0, t1, pass - - la t2, 1f - csrw tdrdata2, t2 - li t0, BPCONTROL_M | BPCONTROL_X - csrw tdrdata1, t0 + csrr a0, tdrdata1 + srli a0, a0, _RISCV_SZLONG-4 + li a1, 1 + bne a0, a1, pass + + la a2, 1f + csrw tdrdata2, a2 + li a0, BPCONTROL_M | BPCONTROL_X + csrw tdrdata1, a0 # Skip if breakpoint type is unsupported. - csrr t1, tdrdata1 - andi t1, t1, 0x7ff - bne t0, t1, 2f + csrr a1, tdrdata1 + andi a1, a1, 0x7ff + bne a0, a1, 2f 1: # Trap handler should skip this instruction. j fail # Make sure reads don't trap. li TESTNUM, 3 - lw t0, (t2) + lw a0, (a2) 2: # Set up breakpoint to trap on M-mode reads. li TESTNUM, 4 - li t0, BPCONTROL_M | BPCONTROL_R - csrw tdrdata1, t0 + li a0, BPCONTROL_M | BPCONTROL_R + csrw tdrdata1, a0 # Skip if breakpoint type is unsupported. - csrr t1, tdrdata1 - andi t1, t1, 0x7ff - bne t0, t1, 2f - la t2, write_data - csrw tdrdata2, t2 + csrr a1, tdrdata1 + andi a1, a1, 0x7ff + bne a0, a1, 2f + la a2, data1 + csrw tdrdata2, a2 # Trap handler should skip this instruction. - lw t2, (t2) - beqz t2, fail + lw a2, (a2) + beqz a2, fail # Make sure writes don't trap. li TESTNUM, 5 - sw x0, (t2) + sw x0, (a2) 2: # Set up breakpoint to trap on M-mode stores. li TESTNUM, 6 - li t0, BPCONTROL_M | BPCONTROL_W - csrw tdrdata1, t0 + li a0, BPCONTROL_M | BPCONTROL_W + csrw tdrdata1, a0 # Skip if breakpoint type is unsupported. - csrr t1, tdrdata1 - andi t1, t1, 0x7ff - bne t0, t1, 2f + csrr a1, tdrdata1 + andi a1, a1, 0x7ff + bne a0, a1, 2f # Trap handler should skip this instruction. - sw t2, (t2) + sw a2, (a2) # Make sure store didn't succeed. li TESTNUM, 7 - lw t2, (t2) - bnez t2, fail + lw a2, (a2) + bnez a2, fail + + # Try to set up a second breakpoint. + li a0, (1<<(_RISCV_SZLONG-1)) + 1 + csrw tdrselect, a0 + csrr a1, tdrselect + bne a0, a1, pass + + # Make sure there's a breakpoint there. + csrr a0, tdrdata1 + srli a0, a0, _RISCV_SZLONG-4 + li a1, 1 + bne a0, a1, pass + + li a0, BPCONTROL_M | BPCONTROL_R + csrw tdrdata1, a0 + la a3, data2 + csrw tdrdata2, a3 + + # Make sure the second breakpoint triggers. + li TESTNUM, 8 + lw a3, (a3) + beqz a3, fail + + # Make sure the first breakpoint still triggers. + li TESTNUM, 10 + la a2, data1 + sw a2, (a2) + li TESTNUM, 11 + lw a2, (a2) + bnez a2, fail 2: TEST_PASSFAIL mtvec_handler: # Only even-numbered tests should trap. - andi a0, TESTNUM, 1 - bnez a0, fail + andi t0, TESTNUM, 1 + bnez t0, fail - li a0, CAUSE_BREAKPOINT - csrr a1, mcause - bne a0, a1, fail + li t0, CAUSE_BREAKPOINT + csrr t1, mcause + bne t0, t1, fail - csrr a0, mepc - addi a0, a0, 4 - csrw mepc, a0 + csrr t0, mepc + addi t0, t0, 4 + csrw mepc, t0 mret RVTEST_CODE_END @@ -106,6 +136,7 @@ RVTEST_DATA_BEGIN TEST_DATA -write_data: .word 0 +data1: .word 0 +data2: .word 0 RVTEST_DATA_END |