blob: 8dc60262fc25b1b5c98bf7f9ec40a68ad51a858f [file] [log] [blame]
# mach: crisv32
# output: bf\n0\n80\n20\n10\n8\n4\n2\n1\n40\nfade040\n3ade0040\nfade040\n42\n
; Check flag settings.
.include "testutils.inc"
start
clear.d r3
setf pixnzvc ; Setting U(ser mode) would restrict tests of other flags.
move ccs,r3
dumpr3
clear.d r3
clearf puixnzvc
move ccs,r3
dumpr3
.macro testf BIT
clear.d r3
clearf puixnzvc
setf \BIT
move ccs,r3
dumpr3
.endm
testf p
testf i
testf x
testf n
testf z
testf v
testf c
testf u ; Can't test i-flag or clear u after this point.
.macro test_get_cc N Z V C
clearf znvc
move ((\N << 3)|(\Z << 2)|(\V << 1)|\C),ccs
test_cc \N \Z \V \C
setf znvc
move ((\N << 3)|(\Z << 2)|(\V << 1)|\C),ccs
test_cc \N \Z \V \C
move.d ((\N << 3)|(\Z << 2)|(\V << 1)|\C),r4
setf znvc
move r4,ccs
test_cc \N \Z \V \C
clearf znvc
move r4,ccs
test_cc \N \Z \V \C
.endm
test_get_cc 1 0 0 0
test_get_cc 0 1 0 0
test_get_cc 0 0 1 0
test_get_cc 0 0 0 1
; Test that the U bit sticks.
move 0x0fade000,ccs
move ccs,r3
dumpr3
; Check that the M and Q bits can't be set in user mode.
move 0xfade0000,ccs
move ccs,r3
dumpr3
move 0x0fade000,ccs
move ccs,r3
dumpr3
move.d 0x42,r3
dumpr3
quit