summaryrefslogtreecommitdiff
path: root/sim/testsuite/cris/asm/ccs-v32.ms
diff options
context:
space:
mode:
Diffstat (limited to 'sim/testsuite/cris/asm/ccs-v32.ms')
-rw-r--r--sim/testsuite/cris/asm/ccs-v32.ms73
1 files changed, 73 insertions, 0 deletions
diff --git a/sim/testsuite/cris/asm/ccs-v32.ms b/sim/testsuite/cris/asm/ccs-v32.ms
new file mode 100644
index 00000000000..8dc60262fc2
--- /dev/null
+++ b/sim/testsuite/cris/asm/ccs-v32.ms
@@ -0,0 +1,73 @@
+# 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