summaryrefslogtreecommitdiff
path: root/sim/testsuite/sim/fr30/st.cgs
diff options
context:
space:
mode:
Diffstat (limited to 'sim/testsuite/sim/fr30/st.cgs')
-rw-r--r--sim/testsuite/sim/fr30/st.cgs194
1 files changed, 194 insertions, 0 deletions
diff --git a/sim/testsuite/sim/fr30/st.cgs b/sim/testsuite/sim/fr30/st.cgs
new file mode 100644
index 00000000000..e458d14001b
--- /dev/null
+++ b/sim/testsuite/sim/fr30/st.cgs
@@ -0,0 +1,194 @@
+# fr30 testcase for
+# mach(): fr30
+# st $Ri,@$Rj
+
+ .include "testutils.inc"
+
+ START
+
+ .text
+ .global st
+st:
+ mvr_h_gr sp,r9 ; Save stack pointer
+ ; Test st $Ri,@Rj
+ mvi_h_gr 0xdeadbeef,r8
+ set_cc 0x0f ; Condition codes should not change
+ st r8,@sp
+ test_cc 1 1 1 1
+ test_h_mem 0xdeadbeef,sp
+ test_h_gr 0xdeadbeef,r8
+
+ ; Test st $Ri,@(R13,Rj)
+ mvi_h_gr 0xbeefdead,r8
+ mvr_h_gr sp,r1
+ inci_h_gr -8,sp
+ mvr_h_gr sp,r2
+ inci_h_gr 4,sp
+
+ mvi_h_gr 4,r13
+ set_cc 0x0e ; Condition codes should not change
+ st r8,@(r13,sp)
+ test_cc 1 1 1 0
+ test_h_mem 0xbeefdead,r1
+ test_h_gr 0xbeefdead,r8
+
+ mvi_h_gr 0,r13
+ set_cc 0x0d ; Condition codes should not change
+ st r8,@(r13,sp)
+ test_cc 1 1 0 1
+ test_h_mem 0xbeefdead,sp
+ test_h_gr 0xbeefdead,r8
+
+ mvi_h_gr -4,r13
+ set_cc 0x0c ; Condition codes should not change
+ st r8,@(r13,sp)
+ test_cc 1 1 0 0
+ test_h_mem 0xbeefdead,r2
+ test_h_gr 0xbeefdead,r8
+
+ ; Test st $Ri,@(R14,$disp10)
+ mvi_h_gr 0xdeadbeef,r8
+ mvr_h_gr r9,sp ; Restore stack pointer
+ mvr_h_gr sp,r14
+ inci_h_gr -508,r14
+ mvr_h_gr r14,r2
+ inci_h_gr -512,r14
+ mvr_h_gr r14,r3
+ inci_h_gr 512,r14
+
+ set_cc 0x0b ; Condition codes should not change
+ st r8,@(r14,508)
+ test_cc 1 0 1 1
+ test_h_mem 0xdeadbeef,r1
+ test_h_gr 0xdeadbeef,r8
+
+ set_cc 0x0a ; Condition codes should not change
+ st r8,@(r14,0)
+ test_cc 1 0 1 0
+ test_h_mem 0xdeadbeef,r2
+ test_h_gr 0xdeadbeef,r8
+
+ set_cc 0x09 ; Condition codes should not change
+ st r8,@(r14,-512)
+ test_cc 1 0 0 1
+ test_h_mem 0xdeadbeef,r3
+ test_h_gr 0xdeadbeef,r8
+
+ ; Test st $Ri,@(R15,$udisp6)
+ mvi_h_gr 0xbeefdead,r8
+ mvr_h_gr r9,sp ; Restore stack pointer
+ inci_h_gr -60,sp
+
+ set_cc 0x08 ; Condition codes should not change
+ st r8,@(r15,60)
+ test_cc 1 0 0 0
+ test_h_mem 0xbeefdead,r9
+ test_h_gr 0xbeefdead,r8
+
+ set_cc 0x07 ; Condition codes should not change
+ st r8,@(r15,0)
+ test_cc 0 1 1 1
+ test_h_mem 0xbeefdead,r9
+ test_h_gr 0xbeefdead,r8
+
+ ; Test st $Ri,@-R15
+ mvr_h_gr r9,sp ; Restore stack pointer
+ mvr_h_gr r9,r10
+
+ set_cc 0x06 ; Condition codes should not change
+ st r15,@-r15
+ test_cc 0 1 1 0
+ testr_h_mem r9,sp ; original value stored
+ inci_h_gr -4,r10
+ testr_h_gr r10,sp ; was decremented
+
+ mvi_h_gr 0xdeadbeef,r8
+ set_cc 0x05 ; Condition codes should not change
+ st r8,@-r15
+ test_cc 0 1 0 1
+ test_h_mem 0xdeadbeef,sp
+ test_h_gr 0xdeadbeef,r8
+ inci_h_gr -4,r10
+ testr_h_gr r10,sp ; was decremented
+
+ ; Test st $Rs,@-R15
+ mvr_h_gr r9,sp ; Restore stack pointer
+ mvr_h_gr r9,r10
+ mvi_h_dr 0xbeefdead,tbr
+ mvi_h_dr 0xdeadbeef,rp
+ mvi_h_dr 0x0000dead,mdh
+ mvi_h_dr 0xbeef0000,mdl
+
+ set_cc 0x04 ; Condition codes should not change
+ st tbr,@-r15
+ test_cc 0 1 0 0
+ test_h_mem 0xbeefdead,sp
+ inci_h_gr -4,r10
+ testr_h_gr r10,sp ; was decremented
+
+ set_cc 0x03 ; Condition codes should not change
+ st rp,@-r15
+ test_cc 0 0 1 1
+ test_h_mem 0xdeadbeef,sp
+ inci_h_gr -4,r10
+ testr_h_gr r10,sp ; was decremented
+
+ set_cc 0x02 ; Condition codes should not change
+ st mdh,@-r15
+ test_cc 0 0 1 0
+ test_h_mem 0x0000dead,sp
+ inci_h_gr -4,r10
+ testr_h_gr r10,sp ; was decremented
+
+ set_cc 0x01 ; Condition codes should not change
+ st mdl,@-r15
+ test_cc 0 0 0 1
+ test_h_mem 0xbeef0000,sp
+ inci_h_gr -4,r10
+ testr_h_gr r10,sp ; was decremented
+
+ mvr_h_gr sp,usp
+ set_s_user
+ set_cc 0x00 ; Condition codes should not change
+ st ssp,@-r15
+ test_cc 0 0 0 0
+ testr_h_mem r10,sp
+ inci_h_gr -4,r10
+ testr_h_gr r10,sp ; was decremented
+
+ set_cc 0x00 ; Condition codes should not change
+ st usp,@-r15
+ test_cc 0 0 0 0
+ testr_h_mem r10,sp ; original value stored
+ inci_h_gr -4,r10
+ testr_h_gr r10,sp ; was decremented
+
+ mvr_h_gr sp,ssp
+ set_s_system
+ set_cc 0x00 ; Condition codes should not change
+ st usp,@-r15
+ test_cc 0 0 0 0
+ testr_h_mem r10,sp
+ inci_h_gr -4,r10
+ testr_h_gr r10,sp ; was decremented
+
+ set_cc 0x00 ; Condition codes should not change
+ st ssp,@-r15
+ test_cc 0 0 0 0
+ testr_h_mem r10,sp ; original value stored
+ inci_h_gr -4,r10
+ testr_h_gr r10,sp ; was decremented
+
+ ; Test st $PS,@-R15
+ mvr_h_gr r9,sp ; Restore stack pointer
+ mvr_h_gr r9,r10
+
+ set_cc 0x0f ; Condition codes affect result
+ set_dbits 3 ; Division bits affect result
+ st ps,@-r15
+ test_cc 1 1 1 1
+ test_h_mem 0x0000060f,sp
+ inci_h_gr -4,r10
+ testr_h_gr r10,sp ; was decremented
+
+ pass