illegal.S revision 12771
16145Snate@binkert.org# See LICENSE for license details. 26145Snate@binkert.org 36145Snate@binkert.org#***************************************************************************** 46145Snate@binkert.org# illegal.S 56145Snate@binkert.org#----------------------------------------------------------------------------- 66145Snate@binkert.org# 76145Snate@binkert.org# Test illegal instruction trap. 86145Snate@binkert.org# 96145Snate@binkert.org 106145Snate@binkert.org#include "riscv_test.h" 116145Snate@binkert.org#include "test_macros.h" 126145Snate@binkert.org 136145Snate@binkert.orgRVTEST_RV64M 146145Snate@binkert.orgRVTEST_CODE_BEGIN 156145Snate@binkert.org 166145Snate@binkert.org .align 2 176145Snate@binkert.org .option norvc 186145Snate@binkert.org 196145Snate@binkert.org li TESTNUM, 2 206145Snate@binkert.orgbad2: 216145Snate@binkert.org .word 0 226145Snate@binkert.org j fail 236145Snate@binkert.org 246145Snate@binkert.org # Skip the rest of the test if S-mode is not present. 256145Snate@binkert.org li t0, MSTATUS_MPP 266145Snate@binkert.org csrc mstatus, t0 276145Snate@binkert.org li t1, (MSTATUS_MPP & -MSTATUS_MPP) * PRV_S 286145Snate@binkert.org csrs mstatus, t1 296145Snate@binkert.org csrr t2, mstatus 307054Snate@binkert.org and t2, t2, t0 317054Snate@binkert.org bne t1, t2, pass 327054Snate@binkert.org 337054Snate@binkert.org # Test vectored interrupts if they are supported. 347054Snate@binkert.orgtest_vectored_interrupts: 357054Snate@binkert.org csrwi mip, MIP_SSIP 367054Snate@binkert.org csrwi mie, MIP_SSIP 376145Snate@binkert.org la t0, mtvec_handler + 1 386145Snate@binkert.org csrrw s0, mtvec, t0 397054Snate@binkert.org csrr t0, mtvec 407054Snate@binkert.org andi t0, t0, 1 416145Snate@binkert.org beqz t0, msip 427002Snate@binkert.org csrsi mstatus, MSTATUS_MIE 437454Snate@binkert.org1: 447002Snate@binkert.org j 1b 459389Sandreas.hansson@arm.commsip: 469866Sjthestness@gmail.com csrw mtvec, s0 479389Sandreas.hansson@arm.com 489274Snilay@cs.wisc.edu # Delegate supervisor software interrupts so WFI won't stall. 499274Snilay@cs.wisc.edu csrwi mideleg, MIP_SSIP 509274Snilay@cs.wisc.edu # Enter supervisor mode. 516145Snate@binkert.org la t0, 1f 526145Snate@binkert.org csrw mepc, t0 536145Snate@binkert.org li t0, MSTATUS_MPP 546145Snate@binkert.org csrc mstatus, t0 556145Snate@binkert.org li t1, (MSTATUS_MPP & -MSTATUS_MPP) * PRV_S 566145Snate@binkert.org csrs mstatus, t1 579274Snilay@cs.wisc.edu mret 587054Snate@binkert.org 597054Snate@binkert.org1: 609274Snilay@cs.wisc.edu # Make sure WFI doesn't trap when TW=0. 619274Snilay@cs.wisc.edu wfi 627054Snate@binkert.orgbad3: 6310311Snilay@cs.wisc.edu .word 0 646145Snate@binkert.org j fail 6510311Snilay@cs.wisc.edu 6610311Snilay@cs.wisc.edubad4: 6710311Snilay@cs.wisc.edu # Make sure WFI does trap when TW=1. 6810311Snilay@cs.wisc.edu wfi 6910311Snilay@cs.wisc.edu j fail 707054Snate@binkert.org 716145Snate@binkert.org # Make sure SFENCE.VMA and sptbr don't trap when TVM=0. 729863Snilay@cs.wisc.edu sfence.vma 739863Snilay@cs.wisc.edu csrr t0, sptbr 749863Snilay@cs.wisc.edubad5: 759863Snilay@cs.wisc.edu .word 0 769863Snilay@cs.wisc.edu j fail 779863Snilay@cs.wisc.edu 787054Snate@binkert.orgbad6: 799274Snilay@cs.wisc.edu # Make sure SFENCE.VMA and sptbr do trap when TVM=1. 806145Snate@binkert.org sfence.vma 819302Snilay@cs.wisc.edu j fail 829302Snilay@cs.wisc.edubad7: 839302Snilay@cs.wisc.edu csrr t0, sptbr 847054Snate@binkert.org j fail 857054Snate@binkert.org 867054Snate@binkert.org # Make sure SRET doesn't trap when TSR=0. 877054Snate@binkert.org la t0, bad8 886145Snate@binkert.org csrw sepc, t0 899858Snilay@cs.wisc.edu li t0, SSTATUS_SPP 908259SBrad.Beckmann@amd.com csrs sstatus, t0 917454Snate@binkert.org li t0, SSTATUS_SPIE 927454Snate@binkert.org csrc sstatus, t0 939863Snilay@cs.wisc.edu sret 949863Snilay@cs.wisc.edubad8: 959863Snilay@cs.wisc.edu .word 0 969866Sjthestness@gmail.com j fail 979866Sjthestness@gmail.com 986145Snate@binkert.org # Make sure SRET does trap when TSR=1. 996145Snate@binkert.org la t0, 1f 1007054Snate@binkert.org csrw sepc, t0 1017054Snate@binkert.orgbad9: 1026145Snate@binkert.org sret 1037054Snate@binkert.org1: 1047054Snate@binkert.org j fail 1057054Snate@binkert.org 1066145Snate@binkert.org TEST_PASSFAIL 1076145Snate@binkert.org 1087054Snate@binkert.org .align 8 109 .global mtvec_handler 110mtvec_handler: 111 j synchronous_exception 112 j msip 113 j fail 114 j fail 115 j fail 116 j fail 117 j fail 118 j fail 119 j fail 120 j fail 121 j fail 122 j fail 123 j fail 124 j fail 125 j fail 126 j fail 127 128synchronous_exception: 129 li t1, CAUSE_ILLEGAL_INSTRUCTION 130 csrr t0, mcause 131 bne t0, t1, fail 132 csrr t0, mepc 133 134 # Make sure mtval contains either 0 or the instruction word. 135 csrr t2, mbadaddr 136 beqz t2, 1f 137 lhu t3, 0(t0) 138 lhu t4, 2(t0) 139 slli t4, t4, 16 140 or t3, t3, t4 141 bne t2, t3, fail 1421: 143 144 la t1, bad2 145 beq t0, t1, 2f 146 la t1, bad3 147 beq t0, t1, 3f 148 la t1, bad4 149 beq t0, t1, 4f 150 la t1, bad5 151 beq t0, t1, 5f 152 la t1, bad6 153 beq t0, t1, 6f 154 la t1, bad7 155 beq t0, t1, 7f 156 la t1, bad8 157 beq t0, t1, 8f 158 la t1, bad9 159 beq t0, t1, 9f 160 j fail 1612: 1624: 1636: 1647: 165 addi t0, t0, 8 166 csrw mepc, t0 167 mret 168 1693: 170 li t1, MSTATUS_TW 171 csrs mstatus, t1 172 j 2b 173 1745: 175 li t1, MSTATUS_TVM 176 csrs mstatus, t1 177 j 2b 178 1798: 180 li t1, MSTATUS_TSR 181 csrs mstatus, t1 182 j 2b 183 1849: 185 j 2b 186 187RVTEST_CODE_END 188 189 .data 190RVTEST_DATA_BEGIN 191 192 TEST_DATA 193 194RVTEST_DATA_END 195