diff options
Diffstat (limited to 'sim/testsuite/sim/fr30/ld.cgs')
-rw-r--r-- | sim/testsuite/sim/fr30/ld.cgs | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/sim/testsuite/sim/fr30/ld.cgs b/sim/testsuite/sim/fr30/ld.cgs new file mode 100644 index 00000000000..3f2d30bb023 --- /dev/null +++ b/sim/testsuite/sim/fr30/ld.cgs @@ -0,0 +1,219 @@ +# fr30 testcase for +# mach(): fr30 +# ld $Rj,$Ri +# ld @($R13,$Rj),$Ri +# ld @($R14,$disp10),$Ri +# ld @($R15,$udisp6),$Ri +# ld @$R15+,$Ri +# ld @$R15+,$Rs + + .include "testutils.inc" + + START + + .text + .global ld +ld: + ; Test ld $Rj,$Ri + mvi_h_mem #0x00000000,sp + set_cc 0x0f ; condition codes should not change + ld @sp,r7 + test_cc 1 1 1 1 + test_h_gr 0,r7 + + mvi_h_mem #0x00000001,sp + set_cc 0x07 ; condition codes should not change + ld @sp,r7 + test_cc 0 1 1 1 + test_h_gr 1,r7 + + mvi_h_mem #0x7fffffff,sp + set_cc 0x0b ; condition codes should not change + ld @sp,r7 + test_cc 1 0 1 1 + test_h_gr 0x7fffffff,r7 + + mvi_h_mem #0x80000000,sp + set_cc 0x0d ; condition codes should not change + ld @sp,r7 + test_cc 1 1 0 1 + test_h_gr 0x80000000,r7 + + mvi_h_mem #0xffffffff,sp + set_cc 0x0e ; condition codes should not change + ld @sp,r7 + test_cc 1 1 1 0 + test_h_gr -1,r7 + + ; Test ld @($R13,$Rj),$Ri + mvr_h_gr sp,r13 + inci_h_gr -8,r13 + mvi_h_gr 8,r8 + + mvi_h_mem #0x00000000,sp + set_cc 0x0f ; condition codes should not change + ld @(r13,r8),r7 + test_cc 1 1 1 1 + test_h_gr 0,r7 + + mvi_h_mem #0x00000001,sp + set_cc 0x07 ; condition codes should not change + ld @(r13,r8),r7 + test_cc 0 1 1 1 + test_h_gr 1,r7 + + mvi_h_mem #0x7fffffff,sp + set_cc 0x0b ; condition codes should not change + ld @(r13,r8),r7 + test_cc 1 0 1 1 + test_h_gr 0x7fffffff,r7 + + mvi_h_mem #0x80000000,sp + set_cc 0x0d ; condition codes should not change + ld @(r13,r8),r7 + test_cc 1 1 0 1 + test_h_gr 0x80000000,r7 + + mvi_h_mem #0xffffffff,sp + set_cc 0x0e ; condition codes should not change + ld @(r13,r8),r7 + test_cc 1 1 1 0 + test_h_gr -1,r7 + + ; Test ld @($R14,$disp10),$Ri + mvi_h_mem #0xdeadbeef,sp + mvr_h_gr sp,r14 + mvi_h_gr -0x1fc,r8 + add_h_gr r8,r14 + + set_cc 0x0f ; condition codes should not change + ld @(r14,0x1fc),r7 + test_cc 1 1 1 1 + test_h_gr 0xdeadbeef,r7 + + inci_h_gr 0xfc,r14 + set_cc 0x07 ; condition codes should not change + ld @(r14,0x100),r7 + test_cc 0 1 1 1 + test_h_gr 0xdeadbeef,r7 + + inci_h_gr 0x100,r14 + set_cc 0x0b ; condition codes should not change + ld @(r14,0x0),r7 + test_cc 1 0 1 1 + test_h_gr 0xdeadbeef,r7 + + inci_h_gr 0x100,r14 + set_cc 0x0d ; condition codes should not change + ld @(r14,-0x100),r7 + test_cc 1 1 0 1 + test_h_gr 0xdeadbeef,r7 + + inci_h_gr 0x100,r14 + set_cc 0x0e ; condition codes should not change + ld @(r14,-0x200),r7 + test_cc 1 1 1 0 + test_h_gr 0xdeadbeef,r7 + + ; Test ld @($R15,$udisp6),$Ri + mvi_h_mem #0xdeadbeef,sp + mvr_h_gr sp,r14 + mvi_h_gr -0x3c,r8 + add_h_gr r8,r14 + + set_cc 0x0f ; condition codes should not change + ld @(r14,0x3c),r7 + test_cc 1 1 1 1 + test_h_gr 0xdeadbeef,r7 + + inci_h_gr 0x1c,r14 + set_cc 0x07 ; condition codes should not change + ld @(r14,0x20),r7 + test_cc 0 1 1 1 + test_h_gr 0xdeadbeef,r7 + + inci_h_gr 0x20,r14 + set_cc 0x0b ; condition codes should not change + ld @(r14,0x0),r7 + test_cc 1 0 1 1 + test_h_gr 0xdeadbeef,r7 + + ; Test ld @$R15+,$Ri + mvr_h_gr sp,r8 ; save original stack pointer + mvr_h_gr r8,r9 + inci_h_gr 4,r9 ; original stack pointer + 4 + mvi_h_mem #0xdeadbeef,sp ; prime memory + + mvr_h_gr r8,sp ; restore original stack pointer + set_cc 0x0f ; condition codes should not change + ld @r15+,r7 + test_cc 1 1 1 1 + test_h_gr 0xdeadbeef,r7 + testr_h_gr sp,r9 ; should have been incremented + + mvr_h_gr r8,sp ; restore original stack pointer + set_cc 0x0f ; condition codes should not change + ld @r15+,sp + test_cc 1 1 1 1 + test_h_gr 0xdeadbeef,sp ; should not have been incremented + + ; Test ld @$R15+,$Rs + mvr_h_gr r8,sp ; restore original stack pointer + set_cc 0x0f ; condition codes should not change + ld @r15+,tbr + test_cc 1 1 1 1 + test_h_dr 0xdeadbeef,tbr + testr_h_gr sp,r9 ; should have been incremented + + mvr_h_gr r8,sp ; restore original stack pointer + set_cc 0x0f ; condition codes should not change + ld @r15+,rp + test_cc 1 1 1 1 + test_h_dr 0xdeadbeef,rp + testr_h_gr sp,r9 ; should have been incremented + + mvr_h_gr r8,sp ; restore original stack pointer + set_cc 0x0f ; condition codes should not change + ld @r15+,mdh + test_cc 1 1 1 1 + test_h_dr 0xdeadbeef,mdh + testr_h_gr sp,r9 ; should have been incremented + + mvr_h_gr r8,sp ; restore original stack pointer + set_cc 0x0f ; condition codes should not change + ld @r15+,mdl + test_cc 1 1 1 1 + test_h_dr 0xdeadbeef,mdl + testr_h_gr sp,r9 ; should have been incremented + + set_s_user + mvr_h_gr r8,sp ; restore original stack pointer + set_cc 0x0f ; condition codes should not change + ld @r15+,ssp + test_cc 1 1 1 1 + test_h_dr 0xdeadbeef,ssp + testr_h_gr sp,r9 ; should have been incremented + + mvr_h_gr r8,sp ; restore original stack pointer + set_cc 0x0f ; condition codes should not change + ld @r15+,usp + test_cc 1 1 1 1 + test_h_dr 0xdeadbeef,usp + test_h_gr 0xdeadbeef,sp ; should not have been incremented + + set_s_system + mvr_h_gr r8,sp ; restore original stack pointer + set_cc 0x0f ; condition codes should not change + ld @r15+,usp + test_cc 1 1 1 1 + test_h_dr 0xdeadbeef,usp + testr_h_gr sp,r9 ; should have been incremented + + mvr_h_gr r8,sp ; restore original stack pointer + set_cc 0x0f ; condition codes should not change + ld @r15+,ssp + test_cc 1 1 1 1 + test_h_dr 0xdeadbeef,ssp + test_h_gr 0xdeadbeef,sp ; should not have been incremented + + pass |