blob: f6115bbeec3193e560620591eb478322a2ec33c3 [file] [log] [blame]
# 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