123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- # mach: crisv32
- # output: 40\n40\n140\nabadefb0\n6543789c\n0\n0\n0\n0\n0\n0\n0\n0\n
- ; Check for protected operations being NOP in user mode, for the
- ; parts implemented in this simulator.
- .include "testutils.inc"
- start
- move 0,ccs
- move 0,usp
- move 0,pid
- move 0,srs
- move 0,ebp
- move 0,spc
- setf u
- ; Flag settings, besides what's tested in rfn.ms, rfe.ms and
- ; sfe.ms.
- setf i
- move ccs,r3
- dumpr3 ; 0x40
- clearf u
- move ccs,r3
- dumpr3 ; 0x40
- move 0xc0000300,ccs
- move ccs,r3
- dumpr3 ; 0x140
- ; R14==USP
- move.d 0xabadefb0,r14
- nop
- nop
- nop
- move usp,r3
- dumpr3 ; 0xabadefb0
- move 0x6543789c,usp
- nop
- nop
- nop
- move.d r14,r3
- dumpr3 ; 0x6543789c
- ; We can't go back to kernel mode, so we can't check that R14 in
- ; kernel mode wasn't affected.
- ; Moves to protected special registers.
- .macro testsr reg,val=-1
- move \val,\reg
- ; Registers shorter than dword will not affect the rest of the
- ; general register when copied using a move insn.
- clear.d r3
- ; Three cycles are needed between move to protected register and
- ; read from it, to avoid reading undefined contents due to
- ; incomplete forwarding.
- nop
- nop
- move \reg,r3
- dumpr3
- moveq \val,r3
- move r3,\reg
- clear.d r3
- nop
- nop
- move \reg,r3
- dumpr3
- .endm
- testsr pid ; 0 0
- testsr srs,3 ; 0 0
- testsr ebp ; 0 0
- testsr spc ; 0 0
- quit
|