# 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