# 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