76 lines
1.3 KiB
Plaintext
76 lines
1.3 KiB
Plaintext
# 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
|