| # 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 |