aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sim/testsuite/ChangeLog92
-rw-r--r--sim/testsuite/sim/arm/adc.cgs43
-rw-r--r--sim/testsuite/sim/arm/add.cgs43
-rw-r--r--sim/testsuite/sim/arm/allinsn.exp28
-rw-r--r--sim/testsuite/sim/arm/and.cgs43
-rw-r--r--sim/testsuite/sim/arm/b.cgs261
-rw-r--r--sim/testsuite/sim/arm/bic.cgs43
-rw-r--r--sim/testsuite/sim/arm/bl.cgs21
-rw-r--r--sim/testsuite/sim/arm/bx.cgs12
-rw-r--r--sim/testsuite/sim/arm/cmn.cgs36
-rw-r--r--sim/testsuite/sim/arm/cmp.cgs36
-rw-r--r--sim/testsuite/sim/arm/eor.cgs36
-rw-r--r--sim/testsuite/sim/arm/hello.ms91
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/iwmmxt.exp28
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/tbcst.cgs65
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/testutils.inc118
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/textrm.cgs113
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/tinsr.cgs65
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/tmia.cgs35
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/tmiaph.cgs35
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/tmiaxy.cgs89
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/tmovmsk.cgs65
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wacc.cgs77
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wadd.cgs251
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/waligni.cgs43
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/walignr.cgs137
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wand.cgs41
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wandn.cgs41
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wavg2.cgs121
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wcmpeq.cgs95
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wcmpgt.cgs173
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wmac.cgs121
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wmadd.cgs69
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wmax.cgs173
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wmin.cgs173
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wmov.cgs35
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wmul.cgs121
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wor.cgs41
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wpack.cgs173
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wror.cgs167
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wsad.cgs121
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wshufh.cgs35
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wsll.cgs167
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wsra.cgs167
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wsrl.cgs167
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wsub.cgs251
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wunpckeh.cgs137
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wunpckel.cgs137
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wunpckih.cgs95
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wunpckil.cgs95
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wxor.cgs41
-rw-r--r--sim/testsuite/sim/arm/iwmmxt/wzero.cgs29
-rw-r--r--sim/testsuite/sim/arm/ldm.cgs89
-rw-r--r--sim/testsuite/sim/arm/ldr.cgs192
-rw-r--r--sim/testsuite/sim/arm/ldrb.cgs192
-rw-r--r--sim/testsuite/sim/arm/ldrh.cgs132
-rw-r--r--sim/testsuite/sim/arm/ldrsb.cgs132
-rw-r--r--sim/testsuite/sim/arm/ldrsh.cgs132
-rw-r--r--sim/testsuite/sim/arm/misaligned1.ms61
-rw-r--r--sim/testsuite/sim/arm/misaligned2.ms60
-rw-r--r--sim/testsuite/sim/arm/misaligned3.ms62
-rw-r--r--sim/testsuite/sim/arm/misc.exp20
-rw-r--r--sim/testsuite/sim/arm/mla.cgs12
-rw-r--r--sim/testsuite/sim/arm/mov.cgs36
-rw-r--r--sim/testsuite/sim/arm/mrs.cgs24
-rw-r--r--sim/testsuite/sim/arm/msr.cgs24
-rw-r--r--sim/testsuite/sim/arm/mul.cgs12
-rw-r--r--sim/testsuite/sim/arm/mvn.cgs36
-rw-r--r--sim/testsuite/sim/arm/orr.cgs36
-rw-r--r--sim/testsuite/sim/arm/rsb.cgs36
-rw-r--r--sim/testsuite/sim/arm/rsc.cgs36
-rw-r--r--sim/testsuite/sim/arm/sbc.cgs36
-rw-r--r--sim/testsuite/sim/arm/smlal.cgs12
-rw-r--r--sim/testsuite/sim/arm/smull.cgs12
-rw-r--r--sim/testsuite/sim/arm/stm.cgs88
-rw-r--r--sim/testsuite/sim/arm/str.cgs192
-rw-r--r--sim/testsuite/sim/arm/strb.cgs192
-rw-r--r--sim/testsuite/sim/arm/strh.cgs132
-rw-r--r--sim/testsuite/sim/arm/sub.cgs36
-rw-r--r--sim/testsuite/sim/arm/swi.cgs12
-rw-r--r--sim/testsuite/sim/arm/swp.cgs12
-rw-r--r--sim/testsuite/sim/arm/swpb.cgs12
-rw-r--r--sim/testsuite/sim/arm/teq.cgs36
-rw-r--r--sim/testsuite/sim/arm/testutils.inc118
-rw-r--r--sim/testsuite/sim/arm/thumb/adc.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/add-hd-hs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/add-hd-rs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/add-rd-hs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/add-sp.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/add.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/addi.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/addi8.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/allthumb.exp21
-rw-r--r--sim/testsuite/sim/arm/thumb/and.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/asr.cgs14
-rw-r--r--sim/testsuite/sim/arm/thumb/b.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bcc.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bcs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/beq.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bge.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bgt.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bhi.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bic.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bl-hi.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bl-lo.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ble.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bls.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/blt.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bmi.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bne.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bpl.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bvc.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bvs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bx-hs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/bx-rs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/cmn.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/cmp-hd-hs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/cmp-hd-rs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/cmp-rd-hs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/cmp.cgs14
-rw-r--r--sim/testsuite/sim/arm/thumb/eor.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/lda-pc.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/lda-sp.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ldmia.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ldr-imm.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ldr-pc.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ldr-sprel.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ldr.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ldrb-imm.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ldrb.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ldrh-imm.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ldrh.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ldsb.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ldsh.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/lsl.cgs14
-rw-r--r--sim/testsuite/sim/arm/thumb/lsr.cgs14
-rw-r--r--sim/testsuite/sim/arm/thumb/mov-hd-hs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/mov-hd-rs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/mov-rd-hs.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/mov.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/mul.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/mvn.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/neg.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/orr.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/pop-pc.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/pop.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/push-lr.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/push.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/ror.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/sbc.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/stmia.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/str-imm.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/str-sprel.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/str.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/strb-imm.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/strb.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/strh-imm.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/strh.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/sub-sp.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/sub.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/subi.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/subi8.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/swi.cgs12
-rw-r--r--sim/testsuite/sim/arm/thumb/testutils.inc91
-rw-r--r--sim/testsuite/sim/arm/thumb/tst.cgs12
-rw-r--r--sim/testsuite/sim/arm/tst.cgs36
-rw-r--r--sim/testsuite/sim/arm/umlal.cgs12
-rw-r--r--sim/testsuite/sim/arm/umull.cgs12
-rw-r--r--sim/testsuite/sim/arm/xscale/blx.cgs31
-rw-r--r--sim/testsuite/sim/arm/xscale/mia.cgs35
-rw-r--r--sim/testsuite/sim/arm/xscale/miaph.cgs35
-rw-r--r--sim/testsuite/sim/arm/xscale/miaxy.cgs89
-rw-r--r--sim/testsuite/sim/arm/xscale/mra.cgs30
-rw-r--r--sim/testsuite/sim/arm/xscale/testutils.inc118
-rw-r--r--sim/testsuite/sim/arm/xscale/xscale.exp28
175 files changed, 8600 insertions, 0 deletions
diff --git a/sim/testsuite/ChangeLog b/sim/testsuite/ChangeLog
index 9699c98..4023d28 100644
--- a/sim/testsuite/ChangeLog
+++ b/sim/testsuite/ChangeLog
@@ -1,3 +1,95 @@
+2003-04-01 Nick Clifton <nickc@redhat.com>
+
+ * sim/arm: New directory: Tests for ARM simulator.
+ * sim/arm/allinsn.exp: New file: Test script.
+ * sim/arm/testutils.inc: New file: Test macros.
+ * sim/arm/adc.cgs, sim/arm/add.cgs, sim/arm/and.cgs,
+ sim/arm/b.cgs, sim/arm/bic.cgs, sim/arm/bl.cgs, sim/arm/bx.cgs,
+ sim/arm/cmn.cgs, sim/arm/cmp.cgs, sim/arm/eor.cgs,
+ sim/arm/hello.ms, sim/arm/ldm.cgs, sim/arm/ldr.cgs,
+ sim/arm/ldrb.cgs, sim/arm/ldrh.cgs, sim/arm/ldrsb.cgs,
+ sim/arm/ldrsh.cgs, sim/arm/misaligned1.ms, sim/arm/misaligned2.ms,
+ sim/arm/misaligned3.ms, sim/arm/misc.exp, sim/arm/mla.cgs,
+ sim/arm/mov.cgs, sim/arm/mrs.cgs, sim/arm/msr.cgs,
+ sim/arm/mul.cgs, sim/arm/mvn.cgs, sim/arm/orr.cgs,
+ sim/arm/rsb.cgs, sim/arm/rsc.cgs, sim/arm/sbc.cgs,
+ sim/arm/smlal.cgs, sim/arm/smull.cgs, sim/arm/stm.cgs,
+ sim/arm/str.cgs, sim/arm/strb.cgs, sim/arm/strh.cgs,
+ sim/arm/sub.cgs, sim/arm/swi.cgs, sim/arm/swp.cgs,
+ sim/arm/swpb.cgs, sim/arm/teq.cgs, sim/arm/tst.cgs,
+ sim/arm/umlal.cgs, sim/arm/umull.cgs: New files: ARM tests.
+ * sim/arm/iwmmxt: New Directory: Tests for iWMMXt.
+ * sim/arm/iwmmxt/iwmmxt.exp: New file: Test script.
+ * sim/arm/iwmmxt/testutils.inc: New file: Test macros.
+ * sim/arm/iwmmxt/tbcst.cgs, sim/arm/iwmmxt/textrm.cgs,
+ sim/arm/iwmmxt/tinsr.cgs, sim/arm/iwmmxt/tmia.cgs,
+ sim/arm/iwmmxt/tmiaph.cgs, sim/arm/iwmmxt/tmiaxy.cgs,
+ sim/arm/iwmmxt/tmovmsk.cgss, sim/arm/iwmmxt/wacc.cgs,
+ sim/arm/iwmmxt/wadd.cgs, sim/arm/iwmmxt/waligni.cgs,
+ sim/arm/iwmmxt/walignr.cgs, sim/arm/iwmmxt/wand.cgs,
+ sim/arm/iwmmxt/wandn.cgs, sim/arm/iwmmxt/wavg2.cgs,
+ sim/arm/iwmmxt/wcmpeq.cgs, sim/arm/iwmmxt/wcmpgt.cgs,
+ sim/arm/iwmmxt/wmac.cgs, sim/arm/iwmmxt/wmadd.cgs,
+ sim/arm/iwmmxt/wmax.cgs, sim/arm/iwmmxt/wmin.cgs,
+ sim/arm/iwmmxt/wmov.cgs, sim/arm/iwmmxt/wmul.cgs,
+ sim/arm/iwmmxt/wor.cgs, sim/arm/iwmmxt/wpack.cgs,
+ sim/arm/iwmmxt/wror.cgs, sim/arm/iwmmxt/wsad.cgs,
+ sim/arm/iwmmxt/wshufh.cgs, sim/arm/iwmmxt/wsll.cgs,
+ sim/arm/iwmmxt/wsra.cgs, sim/arm/iwmmxt/wsrl.cgs,
+ sim/arm/iwmmxt/wsub.cgs, sim/arm/iwmmxt/wunpckeh.cgs,
+ sim/arm/iwmmxt/wunpckel.cgs, sim/arm/iwmmxt/wunpckih.cgs,
+ sim/arm/iwmmxt/wunpckil.cgs, sim/arm/iwmmxt/wxor.cgs,
+ sim/arm/iwmmxt/wzero.cgs: New files: iWMMXt tests.
+ * sim/arm/thumb: New Directory: Thumb tests.
+ * sim/arm/thumb/allthumb.exp: New file: Test script.
+ * sim/arm/thumb/testutils.inc: New file: Test macros.
+ * sim/arm/thumb/adc.cgs, sim/arm/thumb/add-hd-hs.cgs,
+ sim/arm/thumb/add-hd-rs.cgs, sim/arm/thumb/add-rd-hs.cgs,
+ sim/arm/thumb/add-sp.cgs, sim/arm/thumb/add.cgs,
+ sim/arm/thumb/addi.cgs, sim/arm/thumb/addi8.cgs,
+ sim/arm/thumb/and.cgs, sim/arm/thumb/asr.cgs, sim/arm/thumb/b.cgs,
+ sim/arm/thumb/bcc.cgs, sim/arm/thumb/bcs.cgs,
+ sim/arm/thumb/beq.cgs, sim/arm/thumb/bge.cgs,
+ sim/arm/thumb/bgt.cgs, sim/arm/thumb/bhi.cgs,
+ sim/arm/thumb/bic.cgs, sim/arm/thumb/bl-hi.cgs,
+ sim/arm/thumb/bl-lo.cgs, sim/arm/thumb/ble.cgs,
+ sim/arm/thumb/bls.cgs, sim/arm/thumb/blt.cgs,
+ sim/arm/thumb/bmi.cgs, sim/arm/thumb/bne.cgs,
+ sim/arm/thumb/bpl.cgs, sim/arm/thumb/bvc.cgs,
+ sim/arm/thumb/bvs.cgs, sim/arm/thumb/bx-hs.cgs,
+ sim/arm/thumb/bx-rs.cgs, sim/arm/thumb/cmn.cgs,
+ sim/arm/thumb/cmp-hd-hs.cgs, sim/arm/thumb/cmp-hd-rs.cgs,
+ sim/arm/thumb/cmp-rd-hs.cgs, sim/arm/thumb/cmp.cgs,
+ sim/arm/thumb/eor.cgs, sim/arm/thumb/lda-pc.cgs,
+ sim/arm/thumb/lda-sp.cgs, sim/arm/thumb/ldmia.cgs,
+ sim/arm/thumb/ldr-imm.cgs, sim/arm/thumb/ldr-pc.cgs,
+ sim/arm/thumb/ldr-sprel.cgs, sim/arm/thumb/ldr.cgs,
+ sim/arm/thumb/ldrb-imm.cgs, sim/arm/thumb/ldrb.cgs,
+ sim/arm/thumb/ldrh-imm.cgs, sim/arm/thumb/ldrh.cgs,
+ sim/arm/thumb/ldsb.cgs, sim/arm/thumb/ldsh.cgs,
+ sim/arm/thumb/lsl.cgs, sim/arm/thumb/lsr.cgs,
+ sim/arm/thumb/mov-hd-hs.cgs, sim/arm/thumb/mov-hd-rs.cgs,
+ sim/arm/thumb/mov-rd-hs.cgs, sim/arm/thumb/mov.cgs,
+ sim/arm/thumb/mul.cgs, sim/arm/thumb/mvn.cgs,
+ sim/arm/thumb/neg.cgs, sim/arm/thumb/orr.cgs,
+ sim/arm/thumb/pop-pc.cgs, sim/arm/thumb/pop.cgs,
+ sim/arm/thumb/push-lr.cgs, sim/arm/thumb/push.cgs,
+ sim/arm/thumb/ror.cgs, sim/arm/thumb/sbc.cgs,
+ sim/arm/thumb/stmia.cgs, sim/arm/thumb/str-imm.cgs,
+ sim/arm/thumb/str-sprel.cgs, sim/arm/thumb/str.cgs,
+ sim/arm/thumb/strb-imm.cgs, sim/arm/thumb/strb.cgs,
+ sim/arm/thumb/strh-imm.cgs, sim/arm/thumb/strh.cgs,
+ sim/arm/thumb/sub-sp.cgs, sim/arm/thumb/sub.cgs,
+ sim/arm/thumb/subi.cgs, sim/arm/thumb/subi8.cgs,
+ sim/arm/thumb/swi.cgs, sim/arm/thumb/tst.cgs: New files: Thumb
+ tests.
+ * sim/arm/xscale: New directory.
+ * sim/arm/xscale/xscale.exp: New file: Test script.
+ * sim/arm/xscale/testutils.inc: New file: Test macros.
+ * sim/arm/xscale/blx.cgs, sim/arm/xscale/mia.cgs,
+ sim/arm/xscale/miaph.cgs, sim/arm/xscale/miaxy.cgs,
+ sim/arm/xscale/mra.cgs: New files: XScale tests.
+
2002-06-16 Andrew Cagney <ac131313@redhat.com>
* configure: Regenerated to track ../common/aclocal.m4 changes.
diff --git a/sim/testsuite/sim/arm/adc.cgs b/sim/testsuite/sim/arm/adc.cgs
new file mode 100644
index 0000000..b6659a1
--- /dev/null
+++ b/sim/testsuite/sim/arm/adc.cgs
@@ -0,0 +1,43 @@
+# arm testcase for adc
+# mach: all
+
+# ??? Unfinished, more tests needed.
+
+ .include "testutils.inc"
+
+ start
+
+# adc$cond${set-cc?} $rd,$rn,$imm12
+
+ .global adc_imm
+adc_imm:
+ mvi_h_gr r4,1
+ mvi_h_cnvz 0,0,0,0
+ adc r5,r4,#1
+ test_h_cnvz 0,0,0,0
+ test_h_gr r5,2
+
+# adc$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+
+ .global adc_reg_imm_shift
+adc_reg_imm_shift:
+ mvi_h_gr r4,1
+ mvi_h_gr r5,1
+ mvi_h_cnvz 0,0,0,0
+ adc r6,r4,r5,lsl #2
+ test_h_cnvz 0,0,0,0
+ test_h_gr r6,5
+
+# adc$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+
+ .global adc_reg_reg_shift
+adc_reg_reg_shift:
+ mvi_h_gr r4,1
+ mvi_h_gr r5,1
+ mvi_h_gr r6,2
+ mvi_h_cnvz 0,0,0,0
+ adc r7,r4,r5,lsl r6
+ test_h_cnvz 0,0,0,0
+ test_h_gr r7,5
+
+ pass
diff --git a/sim/testsuite/sim/arm/add.cgs b/sim/testsuite/sim/arm/add.cgs
new file mode 100644
index 0000000..eba32e0
--- /dev/null
+++ b/sim/testsuite/sim/arm/add.cgs
@@ -0,0 +1,43 @@
+# arm testcase for add
+# mach: all
+
+# ??? Unfinished, more tests needed.
+
+ .include "testutils.inc"
+
+ start
+
+# add$cond${set-cc?} $rd,$rn,$imm12
+
+ .global add_imm
+add_imm:
+ mvi_h_gr r4,1
+ mvi_h_cnvz 0,0,0,0
+ add r5,r4,#1
+ test_h_cnvz 0,0,0,0
+ test_h_gr r5,2
+
+# add$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+
+ .global add_reg_imm_shift
+add_reg_imm_shift:
+ mvi_h_gr r4,1
+ mvi_h_gr r5,1
+ mvi_h_cnvz 0,0,0,0
+ add r6,r4,r5,lsl #2
+ test_h_cnvz 0,0,0,0
+ test_h_gr r6,5
+
+# add$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+
+ .global add_reg_reg_shift
+add_reg_reg_shift:
+ mvi_h_gr r4,1
+ mvi_h_gr r5,1
+ mvi_h_gr r6,2
+ mvi_h_cnvz 0,0,0,0
+ add r7,r4,r5,lsl r6
+ test_h_cnvz 0,0,0,0
+ test_h_gr r7,5
+
+ pass
diff --git a/sim/testsuite/sim/arm/allinsn.exp b/sim/testsuite/sim/arm/allinsn.exp
new file mode 100644
index 0000000..ec8402f
--- /dev/null
+++ b/sim/testsuite/sim/arm/allinsn.exp
@@ -0,0 +1,28 @@
+# ARM simulator testsuite.
+
+if { [istarget arm*-*-*] || [istarget xscale*-*-*] } {
+ # load support procs (none yet)
+ # load_lib cgen.exp
+
+ # all machines
+ set all_machs "xscale"
+
+ if [is_remote host] {
+ remote_download host $srcdir/$subdir/testutils.inc
+ }
+
+ # The .cgs suffix is for "cgen .s".
+ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them,
+ # skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
+ }
+
+ run_sim_test $src $all_machs
+ }
+
+ if [is_remote host] {
+ remote_file host delete testutils.inc
+ }
+}
diff --git a/sim/testsuite/sim/arm/and.cgs b/sim/testsuite/sim/arm/and.cgs
new file mode 100644
index 0000000..cd8f003
--- /dev/null
+++ b/sim/testsuite/sim/arm/and.cgs
@@ -0,0 +1,43 @@
+# arm testcase for and
+# mach: all
+
+# ??? Unfinished, more tests needed.
+
+ .include "testutils.inc"
+
+ start
+
+# and$cond${set-cc?} $rd,$rn,$imm12
+
+ .global and_imm
+and_imm:
+ mvi_h_gr r4,1
+ mvi_h_cnvz 0,0,0,0
+ and r5,r4,#1
+ test_h_cnvz 0,0,0,0
+ test_h_gr r5,1
+
+# and$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+
+ .global and_reg_imm_shift
+and_reg_imm_shift:
+ mvi_h_gr r4,1
+ mvi_h_gr r5,1
+ mvi_h_cnvz 0,0,0,0
+ and r6,r4,r5,lsl #1
+ test_h_cnvz 0,0,0,0
+ test_h_gr r6,0
+
+# and$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+
+ .global and_reg_reg_shift
+and_reg_reg_shift:
+ mvi_h_gr r4,1
+ mvi_h_gr r5,1
+ mvi_h_gr r6,1
+ mvi_h_cnvz 0,0,0,0
+ and r7,r4,r5,lsl r6
+ test_h_cnvz 0,0,0,0
+ test_h_gr r7,0
+
+ pass
diff --git a/sim/testsuite/sim/arm/b.cgs b/sim/testsuite/sim/arm/b.cgs
new file mode 100644
index 0000000..414b963
--- /dev/null
+++ b/sim/testsuite/sim/arm/b.cgs
@@ -0,0 +1,261 @@
+# arm testcase for b$cond $offset24
+# mach: all
+
+# ??? Still need to test edge cases.
+
+ .include "testutils.inc"
+
+ start
+
+ .global b
+b:
+
+# b foo
+
+ b balways1
+ fail
+balways1:
+
+# beq foo
+
+ mvi_h_gr r4,4
+ mvi_h_gr r5,4
+ cmp r4,r5
+ beq beq1
+ fail
+beq1:
+ mvi_h_gr r5,5
+ cmp r4,r5
+ beq beq2
+ b beq3
+beq2:
+ fail
+beq3:
+
+# bne foo
+
+ mvi_h_gr r4,4
+ mvi_h_gr r5,5
+ cmp r4,r5
+ bne bne1
+ fail
+bne1:
+ mvi_h_gr r5,4
+ cmp r4,r5
+ bne bne2
+ b bne3
+bne2:
+ fail
+bne3:
+
+# bcs foo
+
+ mvi_h_cnvz 1,0,0,0
+ bcs bcs1
+ fail
+bcs1:
+ mvi_h_cnvz 0,0,0,0
+ bcs bcs2
+ b bcs3
+bcs2:
+ fail
+bcs3:
+
+# bcc foo
+
+ mvi_h_cnvz 0,0,0,0
+ bcc bcc1
+ fail
+bcc1:
+ mvi_h_cnvz 1,0,0,0
+ bcc bcc2
+ b bcc3
+bcc2:
+ fail
+bcc3:
+
+# bmi foo
+
+ mvi_h_cnvz 0,1,0,0
+ bmi bmi1
+ fail
+bmi1:
+ mvi_h_cnvz 0,0,0,0
+ bmi bmi2
+ b bmi3
+bmi2:
+ fail
+bmi3:
+
+# bpl foo
+
+ mvi_h_cnvz 0,0,0,0
+ bpl bpl1
+ fail
+bpl1:
+ mvi_h_cnvz 0,1,0,0
+ bpl bpl2
+ b bpl3
+bpl2:
+ fail
+bpl3:
+
+# bvs foo
+
+ mvi_h_cnvz 0,0,1,0
+ bvs bvs1
+ fail
+bvs1:
+ mvi_h_cnvz 0,0,0,0
+ bvs bvs2
+ b bvs3
+bvs2:
+ fail
+bvs3:
+
+# bvc foo
+
+ mvi_h_cnvz 0,0,0,0
+ bvc bvc1
+ fail
+bvc1:
+ mvi_h_cnvz 0,0,1,0
+ bvc bvc2
+ b bvc3
+bvc2:
+ fail
+bvc3:
+
+# bhi foo
+
+ mvi_h_gr r4,5
+ mvi_h_gr r5,4
+ cmp r4,r5
+ bhi bhi1
+ fail
+bhi1:
+ mvi_h_gr r5,5
+ cmp r4,r5
+ bhi bhi2
+ b bhi3
+bhi2:
+ fail
+bhi3:
+ mvi_h_gr r5,6
+ cmp r4,r5
+ bhi bhi4
+ b bhi5
+bhi4:
+ fail
+bhi5:
+
+# bls foo
+
+ mvi_h_gr r4,4
+ mvi_h_gr r5,5
+ cmp r4,r5
+ bls bls1
+ fail
+bls1:
+ mvi_h_gr r5,4
+ cmp r4,r5
+ bls bls2
+ fail
+bls2:
+ mvi_h_gr r5,3
+ cmp r4,r5
+ bls bls3
+ b bls4
+bls3:
+ fail
+bls4:
+
+# bge foo
+
+ mvi_h_gr r4,4
+ mvi_h_gr r5,4
+ cmp r4,r5
+ bge bge1
+ fail
+bge1:
+ mvi_h_gr r5,3
+ cmp r4,r5
+ bge bge2
+ fail
+bge2:
+ mvi_h_gr r5,5
+ cmp r4,r5
+ bge bge3
+ b bge4
+bge3:
+ fail
+bge4:
+
+# blt foo
+
+ mvi_h_gr r4,4
+ mvi_h_gr r5,5
+ cmp r4,r5
+ blt blt1
+ fail
+blt1:
+ mvi_h_gr r5,4
+ cmp r4,r5
+ blt blt2
+ b blt3
+blt2:
+ fail
+blt3:
+ mvi_h_gr r5,3
+ cmp r4,r5
+ blt blt4
+ b blt5
+blt4:
+ fail
+blt5:
+
+# bgt foo
+
+ mvi_h_gr r4,4
+ mvi_h_gr r5,3
+ cmp r4,r5
+ bgt bgt1
+ fail
+bgt1:
+ mvi_h_gr r5,4
+ cmp r4,r5
+ bgt bgt2
+ b bgt3
+bgt2:
+ fail
+bgt3:
+ mvi_h_gr r5,5
+ cmp r4,r5
+ bgt bgt4
+ b bgt5
+bgt4:
+ fail
+bgt5:
+
+# ble foo
+
+ mvi_h_gr r4,4
+ mvi_h_gr r5,4
+ cmp r4,r5
+ ble ble1
+ fail
+ble1:
+ mvi_h_gr r5,5
+ cmp r4,r5
+ ble ble2
+ fail
+ble2:
+ mvi_h_gr r5,3
+ cmp r4,r5
+ ble ble3
+ b ble4
+ble3:
+ fail
+ble4:
+
+ pass
diff --git a/sim/testsuite/sim/arm/bic.cgs b/sim/testsuite/sim/arm/bic.cgs
new file mode 100644
index 0000000..37a9b6c
--- /dev/null
+++ b/sim/testsuite/sim/arm/bic.cgs
@@ -0,0 +1,43 @@
+# arm testcase for bic
+# mach: all
+
+# ??? Unfinished, more tests needed.
+
+ .include "testutils.inc"
+
+ start
+
+# bic$cond${set-cc?} $rd,$rn,$imm12
+
+ .global bic_imm
+bic_imm:
+ mvi_h_gr r4,1
+ mvi_h_cnvz 0,0,0,0
+ bic r5,r4,#0
+ test_h_cnvz 0,0,0,0
+ test_h_gr r5,1
+
+# bic$cond${set-cc?} $rd,$rn,$rm,${operbic2-shifttype} ${operbic2-shiftimm}
+
+ .global bic_reg_imm_shift
+bic_reg_imm_shift:
+ mvi_h_gr r4,7
+ mvi_h_gr r5,1
+ mvi_h_cnvz 0,0,0,0
+ bic r6,r4,r5,lsl #1
+ test_h_cnvz 0,0,0,0
+ test_h_gr r6,5
+
+# bic$cond${set-cc?} $rd,$rn,$rm,${operbic2-shifttype} ${operbic2-shiftreg}
+
+ .global bic_reg_reg_shift
+bic_reg_reg_shift:
+ mvi_h_gr r4,7
+ mvi_h_gr r5,1
+ mvi_h_gr r6,1
+ mvi_h_cnvz 0,0,0,0
+ bic r7,r4,r5,lsl r6
+ test_h_cnvz 0,0,0,0
+ test_h_gr r7,5
+
+ pass
diff --git a/sim/testsuite/sim/arm/bl.cgs b/sim/testsuite/sim/arm/bl.cgs
new file mode 100644
index 0000000..fbc7ef5
--- /dev/null
+++ b/sim/testsuite/sim/arm/bl.cgs
@@ -0,0 +1,21 @@
+# arm testcase for bl$cond $offset24
+# mach: all
+
+ .include "testutils.inc"
+
+ start
+
+ .global bl
+bl:
+ mvi_h_gr r14,0
+ bl bl2
+bl1:
+ fail
+bl2:
+ mvaddr_h_gr r4,bl1
+ cmp r14,r4
+ beq bl3
+ fail
+bl3:
+
+ pass
diff --git a/sim/testsuite/sim/arm/bx.cgs b/sim/testsuite/sim/arm/bx.cgs
new file mode 100644
index 0000000..4c18af4
--- /dev/null
+++ b/sim/testsuite/sim/arm/bx.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bx$cond $rn
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bx
+bx:
+ bx0 pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/cmn.cgs b/sim/testsuite/sim/arm/cmn.cgs
new file mode 100644
index 0000000..1829fc7
--- /dev/null
+++ b/sim/testsuite/sim/arm/cmn.cgs
@@ -0,0 +1,36 @@
+# arm testcase for cmn${cond}${set-cc?} $rn,$imm12
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global cmn_imm
+cmn_imm:
+ cmn00 pc,0
+
+ pass
+# arm testcase for cmn$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global cmn_reg_imm_shift
+cmn_reg_imm_shift:
+ cmn00 pc,pc,pc,lsl 0
+
+ pass
+# arm testcase for cmn$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global cmn_reg_reg_shift
+cmn_reg_reg_shift:
+ cmn00 pc,pc,pc,lsl pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/cmp.cgs b/sim/testsuite/sim/arm/cmp.cgs
new file mode 100644
index 0000000..ab9dd59
--- /dev/null
+++ b/sim/testsuite/sim/arm/cmp.cgs
@@ -0,0 +1,36 @@
+# arm testcase for cmp${cond}${set-cc?} $rn,$imm12
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global cmp_imm
+cmp_imm:
+ cmp00 pc,0
+
+ pass
+# arm testcase for cmp$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global cmp_reg_imm_shift
+cmp_reg_imm_shift:
+ cmp00 pc,pc,pc,lsl 0
+
+ pass
+# arm testcase for cmp$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global cmp_reg_reg_shift
+cmp_reg_reg_shift:
+ cmp00 pc,pc,pc,lsl pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/eor.cgs b/sim/testsuite/sim/arm/eor.cgs
new file mode 100644
index 0000000..5bbb1c6
--- /dev/null
+++ b/sim/testsuite/sim/arm/eor.cgs
@@ -0,0 +1,36 @@
+# arm testcase for eor$cond${set-cc?} $rd,$rn,$imm12
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global eor_imm
+eor_imm:
+ eor00 pc,pc,0
+
+ pass
+# arm testcase for eor$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global eor_reg_imm_shift
+eor_reg_imm_shift:
+ eor00 pc,pc,pc,lsl 0
+
+ pass
+# arm testcase for eor$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global eor_reg_reg_shift
+eor_reg_reg_shift:
+ eor00 pc,pc,pc,lsl pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/hello.ms b/sim/testsuite/sim/arm/hello.ms
new file mode 100644
index 0000000..b063c29
--- /dev/null
+++ b/sim/testsuite/sim/arm/hello.ms
@@ -0,0 +1,91 @@
+# output(): Hello, world.\n
+# mach(): all
+
+# Emit hello world while switching back and forth between arm/thumb.
+# ??? Unfinished
+
+ .macro invalid
+# This is "undefined" but it's not properly decoded yet.
+ .word 0x07ffffff
+# This is stc which isn't recognized yet.
+ stc 0,cr0,[r0]
+ .endm
+
+ .global _start
+_start:
+# Run some simple insns to confirm the engine is at least working.
+ nop
+
+# Skip over output text.
+
+ bl skip_output
+
+hello_text:
+ .asciz "Hello, world.\n"
+
+ .p2align 2
+skip_output:
+
+# Prime loop.
+
+ mov r4, r14
+
+output_next:
+
+# Switch arm->thumb to output next chacter.
+# At this point r4 must point to the next character to output.
+
+ adr r0, into_thumb + 1
+ bx r0
+
+into_thumb:
+ .thumb
+
+# Output a character.
+
+ mov r0,#3 @ writec angel call
+ mov r1,r4
+ swi 0xab @ ??? Confirm number.
+
+# Switch thumb->arm.
+
+ adr r5, back_to_arm
+ bx r5
+
+ .p2align 2
+back_to_arm:
+ .arm
+
+# Load next character, see if done.
+
+ add r4,r4,#1
+ sub r3,r3,r3
+ ldrb r5,[r4,r3]
+ teq r5,#0
+ beq done
+
+# Output a character (in arm mode).
+
+ mov r0,#3
+ mov r1,r4
+ swi #0x123456
+
+# Load next character, see if done.
+
+ add r4,r4,#1
+ sub r3,r3,r3
+ ldrb r5,[r4,r3]
+ teq r5,#0
+ bne output_next
+
+done:
+ mov r0,#0x18
+ ldr r1,exit_code
+ swi #0x123456
+
+# If that fails, try to die with an invalid insn.
+
+ invalid
+
+exit_code:
+ .word 0x20026
diff --git a/sim/testsuite/sim/arm/iwmmxt/iwmmxt.exp b/sim/testsuite/sim/arm/iwmmxt/iwmmxt.exp
new file mode 100644
index 0000000..f3d0f0a
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/iwmmxt.exp
@@ -0,0 +1,28 @@
+# Intel(r) Wireless MMX(tm) technology simulator testsuite.
+
+if { [istarget xscale*-*-*] } {
+ # load support procs (none yet)
+ # load_lib cgen.exp
+
+ # all machines
+ set all_machs "xscale"
+
+ if [is_remote host] {
+ remote_download host $srcdir/$subdir/testutils.inc
+ }
+
+ # The .cgs suffix is for "cgen .s".
+ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them,
+ # skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
+ }
+
+ run_sim_test $src $all_machs
+ }
+
+ if [is_remote host] {
+ remote_file host delete testutils.inc
+ }
+}
diff --git a/sim/testsuite/sim/arm/iwmmxt/tbcst.cgs b/sim/testsuite/sim/arm/iwmmxt/tbcst.cgs
new file mode 100644
index 0000000..b7138df
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/tbcst.cgs
@@ -0,0 +1,65 @@
+# Intel(r) Wireless MMX(tm) technology testcase for TBCST
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global tbcst
+tbcst:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Byte Wide Broadcast
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x111111ff
+
+ tmcrr wr0, r0, r1
+
+ tbcstb wr0, r2
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0xffffffff
+ test_h_gr r1, 0xffffffff
+ test_h_gr r2, 0x111111ff
+
+ # Test Half Word Wide Broadcast
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x111111ff
+
+ tmcrr wr0, r0, r1
+
+ tbcsth wr0, r2
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x11ff11ff
+ test_h_gr r1, 0x11ff11ff
+ test_h_gr r2, 0x111111ff
+
+ # Test Word Wide Broadcast
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x111111ff
+
+ tmcrr wr0, r0, r1
+
+ tbcstw wr0, r2
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x111111ff
+ test_h_gr r1, 0x111111ff
+ test_h_gr r2, 0x111111ff
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/testutils.inc b/sim/testsuite/sim/arm/iwmmxt/testutils.inc
new file mode 100644
index 0000000..ae49db8
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/testutils.inc
@@ -0,0 +1,118 @@
+# r0-r3 are used as tmps, consider them call clobbered by these macros.
+# This uses the angel rom monitor calls.
+# ??? How do we use the \@ facility of .macros ???
+# @ is the comment char!
+
+ .macro mvi_h_gr reg, val
+ ldr \reg,[pc]
+ b . + 8
+ .word \val
+ .endm
+
+ .macro mvaddr_h_gr reg, addr
+ ldr \reg,[pc]
+ b . + 8
+ .word \addr
+ .endm
+
+ .macro start
+ .data
+failmsg:
+ .asciz "fail\n"
+passmsg:
+ .asciz "pass\n"
+ .text
+
+do_pass:
+ ldr r1, passmsg_addr
+ mov r0, #4
+ swi #0x123456
+ exit 0
+passmsg_addr:
+ .word passmsg
+
+do_fail:
+ ldr r1, failmsg_addr
+ mov r0, #4
+ swi #0x123456
+ exit 1
+failmsg_addr:
+ .word failmsg
+
+ .global _start
+_start:
+ .endm
+
+# *** Other macros know pass/fail are 4 bytes in size! Yuck.
+
+ .macro pass
+ b do_pass
+ .endm
+
+ .macro fail
+ b do_fail
+ .endm
+
+ .macro exit rc
+ # ??? This works with the ARMulator but maybe not others.
+ #mov r0, #\rc
+ #swi #1
+ # This seems to be portable (though it ignores rc).
+ mov r0,#0x18
+ mvi_h_gr r1, 0x20026
+ swi #0x123456
+ # If that returns, punt with a sigill.
+ stc 0,cr0,[r0]
+ .endm
+
+# Other macros know this only clobbers r0.
+# WARNING: It also clobbers the condition codes (FIXME).
+ .macro test_h_gr reg, val
+ mvaddr_h_gr r0, \val
+ cmp \reg, r0
+ beq . + 8
+ fail
+ .endm
+
+ .macro mvi_h_cnvz c, n, v, z
+ mov r0, #0
+ .if \c
+ orr r0, r0, #0x20000000
+ .endif
+ .if \n
+ orr r0, r0, #0x80000000
+ .endif
+ .if \v
+ orr r0, r0, #0x10000000
+ .endif
+ .if \z
+ orr r0, r0, #0x40000000
+ .endif
+ mrs r1, cpsr
+ bic r1, r1, #0xf0000000
+ orr r1, r1, r0
+ msr cpsr, r1
+ # ??? nops needed
+ .endm
+
+# ??? Preserve condition codes?
+ .macro test_h_cnvz c, n, v, z
+ mov r0, #0
+ .if \c
+ orr r0, r0, #0x20000000
+ .endif
+ .if \n
+ orr r0, r0, #0x80000000
+ .endif
+ .if \v
+ orr r0, r0, #0x10000000
+ .endif
+ .if \z
+ orr r0, r0, #0x40000000
+ .endif
+ mrs r1, cpsr
+ and r1, r1, #0xf0000000
+ cmp r0, r1
+ beq . + 8
+ fail
+ .endm
diff --git a/sim/testsuite/sim/arm/iwmmxt/textrm.cgs b/sim/testsuite/sim/arm/iwmmxt/textrm.cgs
new file mode 100644
index 0000000..fb3dc94
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/textrm.cgs
@@ -0,0 +1,113 @@
+# Intel(r) Wireless MMX(tm) technology testcase for TEXTRM
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global textrm
+textrm:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Unsigned Byte Wide Extraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x111111ff
+
+ tmcrr wr0, r0, r1
+
+ textrmub r2, wr0, #3
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x00000012
+
+ # Test Signed Byte Wide Extraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x111111ff
+
+ tmcrr wr0, r0, r1
+
+ textrmsb r2, wr0, #4
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0xfffffff0
+
+ # Test Unsigned Half Word Wide Extraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x111111ff
+
+ tmcrr wr0, r0, r1
+
+ textrmuh r2, wr0, #3
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x00009abc
+
+ # Test Signed Half Word Wide Extraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x111111ff
+
+ tmcrr wr0, r0, r1
+
+ textrmsh r2, wr0, #1
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x00001234
+
+ # Test Unsigned Word Wide Extraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x111111ff
+
+ tmcrr wr0, r0, r1
+
+ textrmuw r2, wr0, #0
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x12345678
+
+ # Test Signed Word Wide Extraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x111111ff
+
+ tmcrr wr0, r0, r1
+
+ textrmsw r2, wr0, #1
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x9abcdef0
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/tinsr.cgs b/sim/testsuite/sim/arm/iwmmxt/tinsr.cgs
new file mode 100644
index 0000000..f457b19
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/tinsr.cgs
@@ -0,0 +1,65 @@
+# Intel(r) Wireless MMX(tm) technology testcase for TINSR
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global tinsr
+tinsr:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Byte Wide Insertion
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x111111ff
+
+ tmcrr wr0, r0, r1
+
+ tinsrb wr0, r2, #3
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0xff345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x111111ff
+
+ # Test Half Word Wide Insertion
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x111111ff
+
+ tmcrr wr0, r0, r1
+
+ tinsrh wr0, r2, #2
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abc11ff
+ test_h_gr r2, 0x111111ff
+
+ # Test Word Wide Insertion
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x111111ff
+
+ tmcrr wr0, r0, r1
+
+ tinsrw wr0, r2, #1
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x111111ff
+ test_h_gr r2, 0x111111ff
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/tmia.cgs b/sim/testsuite/sim/arm/iwmmxt/tmia.cgs
new file mode 100644
index 0000000..0b0da66
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/tmia.cgs
@@ -0,0 +1,35 @@
+# Intel(r) Wireless MMX(tm) technology testcase for TMIA
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global tmia
+tmia:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Multilply Accumulate
+
+ mvi_h_gr r0, 0x11223344
+ mvi_h_gr r1, 0x55667788
+ mvi_h_gr r2, 0x12345678
+ mvi_h_gr r3, 0x9abcdef0
+
+ tmcrr wr0, r0, r1
+
+ tmia wr0, r2, r3
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x354f53c4
+ test_h_gr r1, 0x4e330b5e
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/tmiaph.cgs b/sim/testsuite/sim/arm/iwmmxt/tmiaph.cgs
new file mode 100644
index 0000000..3778b0a
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/tmiaph.cgs
@@ -0,0 +1,35 @@
+# Intel(r) Wireless MMX(tm) technology testcase for TMIAPH
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global tmiaph
+tmiaph:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Multilply Accumulate
+
+ mvi_h_gr r0, 0x11223344
+ mvi_h_gr r1, 0x55667788
+ mvi_h_gr r2, 0x12345678
+ mvi_h_gr r3, 0x9abcdef0
+
+ tmcrr wr0, r0, r1
+
+ tmiaph wr0, r2, r3
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0xfec3f9f4
+ test_h_gr r1, 0x55667787
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/tmiaxy.cgs b/sim/testsuite/sim/arm/iwmmxt/tmiaxy.cgs
new file mode 100644
index 0000000..e7a7b73
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/tmiaxy.cgs
@@ -0,0 +1,89 @@
+# Intel(r) Wireless MMX(tm) technology testcase for TMIAxy
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global tmiaXY
+tmiaXY:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Bottom Bottom Multilply Accumulate
+
+ mvi_h_gr r0, 0x11223344
+ mvi_h_gr r1, 0x55667788
+ mvi_h_gr r2, 0x12345678
+ mvi_h_gr r3, 0x9abcdef0
+
+ tmcrr wr0, r0, r1
+
+ tmiaBB wr0, r2, r3
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x05f753c4
+ test_h_gr r1, 0x55667788
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ # Test Bottom Top Multilply Accumulate
+
+ mvi_h_gr r0, 0x11223344
+ mvi_h_gr r1, 0x55667788
+ mvi_h_gr r2, 0x12345678
+ mvi_h_gr r3, 0x9abcdef0
+
+ tmcrr wr0, r0, r1
+
+ tmiaBT wr0, r2, r3
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0xeeede364
+ test_h_gr r1, 0x55667787
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ # Test Top Bottom Multilply Accumulate
+
+ mvi_h_gr r0, 0x11223344
+ mvi_h_gr r1, 0x55667788
+ mvi_h_gr r2, 0x12345678
+ mvi_h_gr r3, 0x9abcdef0
+
+ tmcrr wr0, r0, r1
+
+ tmiaTB wr0, r2, r3
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x0ec85c04
+ test_h_gr r1, 0x55667788
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ # Test Top Top Multilply Accumulate
+
+ mvi_h_gr r0, 0x11223344
+ mvi_h_gr r1, 0x55667788
+ mvi_h_gr r2, 0x12345678
+ mvi_h_gr r3, 0x9abcdef0
+
+ tmcrr wr0, r0, r1
+
+ tmiaTT wr0, r2, r3
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x09eed974
+ test_h_gr r1, 0x55667788
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/tmovmsk.cgs b/sim/testsuite/sim/arm/iwmmxt/tmovmsk.cgs
new file mode 100644
index 0000000..cfea5b7
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/tmovmsk.cgs
@@ -0,0 +1,65 @@
+# Intel(r) Wireless MMX(tm) technology testcase for TMOVMSK
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global tmovmsk
+tmovmsk:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Byte Wide Mask Transfer
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+
+ tmcrr wr0, r0, r1
+
+ tmovmskb r2, wr0
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x000000f0
+
+ # Test Half Word Wide Mask Transfer
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+
+ tmcrr wr0, r0, r1
+
+ tmovmskh r2, wr0
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x0000000c
+
+ # Test Word Wide Mask Transfer
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+
+ tmcrr wr0, r0, r1
+
+ tmovmskw r2, wr0
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x00000002
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wacc.cgs b/sim/testsuite/sim/arm/iwmmxt/wacc.cgs
new file mode 100644
index 0000000..b3ffea1
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wacc.cgs
@@ -0,0 +1,77 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WACC
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wacc
+wacc:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Unsigned Byte Wide Accumulation
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ waccb wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x00000438
+ test_h_gr r3, 0x00000000
+
+ # Test Unsigned Half Word Wide Accumulation
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wacch wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x0001e258
+ test_h_gr r3, 0x00000000
+
+ # Test Unsigned Word Wide Accumulation
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ waccw wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0xacf13568
+ test_h_gr r3, 0x00000000
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wadd.cgs b/sim/testsuite/sim/arm/iwmmxt/wadd.cgs
new file mode 100644
index 0000000..bb4d0ab
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wadd.cgs
@@ -0,0 +1,251 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WADD
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wadd
+wadd:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test UnSaturated Byte Addition
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ waddb wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x23456789
+ test_h_gr r5, 0xabcdef11
+
+ # Test Unsigned Saturated Byte Addition
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ waddbus wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x23456789
+ test_h_gr r5, 0xabcdef11
+
+ # Test Signed Saturated Byte Addition
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ waddbss wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x2345677f
+ test_h_gr r5, 0xabcdef11
+
+ # Test UnSaturated Halfword Addition
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ waddh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x23456789
+ test_h_gr r5, 0xabcdef11
+
+ # Test Unsigned Saturated Halfword Addition
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ waddhus wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x23456789
+ test_h_gr r5, 0xabcdef11
+
+ # Test Signed Saturated Halfword Addition
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ waddhss wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x23456789
+ test_h_gr r5, 0xabcdef11
+
+ # Test UnSaturated Word Addition
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ waddw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x23456789
+ test_h_gr r5, 0xabcdef11
+
+ # Test Unsigned Saturated Word Addition
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ waddwus wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x23456789
+ test_h_gr r5, 0xabcdef11
+
+ # Test Signed Saturated Word Addition
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ waddwss wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x23456789
+ test_h_gr r5, 0xabcdef11
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/waligni.cgs b/sim/testsuite/sim/arm/iwmmxt/waligni.cgs
new file mode 100644
index 0000000..dc99dae
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/waligni.cgs
@@ -0,0 +1,43 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WALIGNI
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global waligni
+waligni:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test 2 byte align
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ waligni wr2, wr0, wr1, #2
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0xdef01234
+ test_h_gr r5, 0x11119abc
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/walignr.cgs b/sim/testsuite/sim/arm/iwmmxt/walignr.cgs
new file mode 100644
index 0000000..85df51e
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/walignr.cgs
@@ -0,0 +1,137 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WALIGNR
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global walignr
+walignr:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test 0 byte align
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+ mvi_h_gr r6, 3
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+ tmcr wcgr0, r6
+
+ walignr0 wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+ tmrc r6, wcgr0
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0xbcdef012
+ test_h_gr r5, 0x1111119a
+ test_h_gr r6, 3
+
+ # Test 1 byte align
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+ mvi_h_gr r6, 4
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+ tmcr wcgr1, r6
+
+ walignr1 wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+ tmrc r6, wcgr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x9abcdef0
+ test_h_gr r5, 0x11111111
+ test_h_gr r6, 4
+
+ # Test 2 byte align
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+ mvi_h_gr r6, 2
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+ tmcr wcgr2, r6
+
+ walignr2 wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+ tmrc r6, wcgr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0xdef01234
+ test_h_gr r5, 0x11119abc
+ test_h_gr r6, 2
+
+ # Test 3 byte align
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+ mvi_h_gr r6, 5
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+ tmcr wcgr3, r6
+
+ walignr3 wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+ tmrc r6, wcgr3
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x119abcde
+ test_h_gr r5, 0x00111111
+ test_h_gr r6, 5
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wand.cgs b/sim/testsuite/sim/arm/iwmmxt/wand.cgs
new file mode 100644
index 0000000..018383f
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wand.cgs
@@ -0,0 +1,41 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WAND
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wand
+wand:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wand wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x10101010
+ test_h_gr r5, 0x00000000
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wandn.cgs b/sim/testsuite/sim/arm/iwmmxt/wandn.cgs
new file mode 100644
index 0000000..f2c2305
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wandn.cgs
@@ -0,0 +1,41 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WANDN
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wandn
+wandn:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wandn wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x02244668
+ test_h_gr r5, 0x9abcdef0
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wavg2.cgs b/sim/testsuite/sim/arm/iwmmxt/wavg2.cgs
new file mode 100644
index 0000000..cac2c1a
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wavg2.cgs
@@ -0,0 +1,121 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WAVG2
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wavg2
+wavg2:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Byte Wide Averaging
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wavg2b wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x11223344
+ test_h_gr r5, 0x5e6f8089
+
+ # Test Byte Wide Averaging with Rounding
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wavg2br wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x12233445
+ test_h_gr r5, 0x5e6f8089
+
+ # Test Half Word Wide Averaging
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wavg2h wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x11a233c4
+ test_h_gr r5, 0x5e6f8089
+
+ # Test Half Word Wide Averaging with Rounding
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wavg2hr wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x11a333c5
+ test_h_gr r5, 0x5e6f8089
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wcmpeq.cgs b/sim/testsuite/sim/arm/iwmmxt/wcmpeq.cgs
new file mode 100644
index 0000000..13ef3dc
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wcmpeq.cgs
@@ -0,0 +1,95 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WCMPEQ
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wcmpeq
+wcmpeq:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Byte Wide Compare Equal To
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x9abcde00
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wcmpeqb wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x9abcde00
+ test_h_gr r4, 0x00000000
+ test_h_gr r5, 0xffffffff
+
+ # Test Half Word Wide Compare Equal To
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x9abcde00
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wcmpeqh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x9abcde00
+ test_h_gr r4, 0x00000000
+ test_h_gr r5, 0xffffffff
+
+ # Test Word Wide Compare Equal To
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x9abcde00
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wcmpeqw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x9abcde00
+ test_h_gr r4, 0x00000000
+ test_h_gr r5, 0xffffffff
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wcmpgt.cgs b/sim/testsuite/sim/arm/iwmmxt/wcmpgt.cgs
new file mode 100644
index 0000000..33086c9
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wcmpgt.cgs
@@ -0,0 +1,173 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WCMPGT
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wcmpgt
+wcmpgt:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Unsigned Byte Wide Compare Greater Than
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wcmpgtub wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0xffffffff
+ test_h_gr r5, 0xffffff00
+
+ # Test Signed Byte Wide Compare Greater Than
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wcmpgtsb wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0xffffffff
+ test_h_gr r5, 0x00000000
+
+ # Test Unsigned Half Word Wide Compare Greater Than
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wcmpgtuh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0xffffffff
+ test_h_gr r5, 0xffffffff
+
+ # Test Signed Half Word Wide Compare Greater Than
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wcmpgtsh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0xffffffff
+ test_h_gr r5, 0x00000000
+
+ # Test Unsigned Word Wide Compare Greater Than
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wcmpgtuw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0xffffffff
+ test_h_gr r5, 0xffffffff
+
+ # Test Signed Word Wide Compare Greater Than
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wcmpgtsw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0xffffffff
+ test_h_gr r5, 0x00000000
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wmac.cgs b/sim/testsuite/sim/arm/iwmmxt/wmac.cgs
new file mode 100644
index 0000000..0857ef9
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wmac.cgs
@@ -0,0 +1,121 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WMAC
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wmac
+wmac:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Unsigned, Multiply Accumulate, Non-zeroing
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0x33333333
+ mvi_h_gr r5, 0x44444444
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmacu wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x6c889377
+ test_h_gr r5, 0x44444444
+
+ # Test Unsigned, Multiply Accumulate, Zeroing
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0x33333333
+ mvi_h_gr r5, 0x44444444
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmacuz wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x39556044
+ test_h_gr r5, 0x00000000
+
+ # Test Signed, Multiply Accumulate, Non-zeroing
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0x33333333
+ mvi_h_gr r5, 0x44444444
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmacs wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x28449377
+ test_h_gr r5, 0x44444444
+
+ # Test Signed, Multiply Accumulate, Zeroing
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0x33333333
+ mvi_h_gr r5, 0x44444444
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmacsz wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0xf5116044
+ test_h_gr r5, 0xffffffff
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wmadd.cgs b/sim/testsuite/sim/arm/iwmmxt/wmadd.cgs
new file mode 100644
index 0000000..564b3be
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wmadd.cgs
@@ -0,0 +1,69 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WMADD
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wmadd
+wmadd:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Unsigned, Multiply Addition
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmaddu wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x06fa5f6c
+ test_h_gr r5, 0x325b00d8
+
+ # Test Signed, Multiply Addition
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmadds wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x06fa5f6c
+ test_h_gr r5, 0xee1700d8
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wmax.cgs b/sim/testsuite/sim/arm/iwmmxt/wmax.cgs
new file mode 100644
index 0000000..3a684ce
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wmax.cgs
@@ -0,0 +1,173 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WMAX
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wmax
+wmax:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Unsigned Byte Maximum
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmaxub wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x12345678
+ test_h_gr r5, 0x9abcde11
+
+ # Test Signed Byte Maximum
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmaxsb wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x12345678
+ test_h_gr r5, 0x11111111
+
+ # Test Unsigned Halfword Maximum
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmaxuh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x12345678
+ test_h_gr r5, 0x9abcde00
+
+ # Test Signed Halfword Maximum
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmaxsh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x12345678
+ test_h_gr r5, 0x11111111
+
+ # Test Unsigned Word Maximum
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmaxuw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x12345678
+ test_h_gr r5, 0x9abcde00
+
+ # Test Signed Word Maximum
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmaxsw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x12345678
+ test_h_gr r5, 0x11111111
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wmin.cgs b/sim/testsuite/sim/arm/iwmmxt/wmin.cgs
new file mode 100644
index 0000000..3bc1c08
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wmin.cgs
@@ -0,0 +1,173 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WMIN
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wmin
+wmin:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Unsigned Byte Minimum
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wminub wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x11111111
+ test_h_gr r5, 0x11111100
+
+ # Test Signed Byte Minimum
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wminsb wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x11111111
+ test_h_gr r5, 0x9abcde00
+
+ # Test Unsigned Halfword Minimum
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wminuh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x11111111
+ test_h_gr r5, 0x11111111
+
+ # Test Signed Halfword Minimum
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wminsh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x11111111
+ test_h_gr r5, 0x9abcde00
+
+ # Test Unsigned Word Minimum
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wminuw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x11111111
+ test_h_gr r5, 0x11111111
+
+ # Test Signed Word Minimum
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wminsw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x11111111
+ test_h_gr r5, 0x9abcde00
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wmov.cgs b/sim/testsuite/sim/arm/iwmmxt/wmov.cgs
new file mode 100644
index 0000000..e86fed6
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wmov.cgs
@@ -0,0 +1,35 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WMOV
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wmov
+wmov:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wmov wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wmul.cgs b/sim/testsuite/sim/arm/iwmmxt/wmul.cgs
new file mode 100644
index 0000000..0978b63
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wmul.cgs
@@ -0,0 +1,121 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WMUL
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wmul
+wmul:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Unsigned, Most Significant Multiply
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmulum wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x013605c3
+ test_h_gr r5, 0x14a11db9
+
+ # Test Unsigned, Least Significant Multiply
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmulul wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0xa974b5f8
+ test_h_gr r5, 0x84f87be0
+
+ # Test Signed, Most Significant Multiply
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmulsm wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x013605c3
+ test_h_gr r5, 0xf27ffb97
+
+ # Test Signed, Least Significant Multiply
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wmulsl wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0xa974b5f8
+ test_h_gr r5, 0x84f87be0
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wor.cgs b/sim/testsuite/sim/arm/iwmmxt/wor.cgs
new file mode 100644
index 0000000..48d5f53
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wor.cgs
@@ -0,0 +1,41 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WOR
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wor
+wor:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wor wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x13355779
+ test_h_gr r5, 0x9abcdef0
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wpack.cgs b/sim/testsuite/sim/arm/iwmmxt/wpack.cgs
new file mode 100644
index 0000000..0546bd4
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wpack.cgs
@@ -0,0 +1,173 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WPACK
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wpack
+wpack:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Halfword, Unsigned Saturation, Packing
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wpackhus wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x0000ffff
+ test_h_gr r5, 0x0000ffff
+
+ # Test Halfword, Signed Saturation, Packing
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wpackhss wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x80807f7f
+ test_h_gr r5, 0x00007f7f
+
+ # Test Word, Unsigned Saturation, Packing
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wpackwus wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x0000ffff
+ test_h_gr r5, 0x0000ffff
+
+ # Test Word, Signed Saturation, Packing
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wpackwss wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x80007fff
+ test_h_gr r5, 0x00007fff
+
+ # Test Double Word, Unsigned Saturation, Packing
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wpackdus wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x00000000
+ test_h_gr r5, 0x11111111
+
+ # Test Double Word, Signed Saturation, Packing
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wpackdss wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x80000000
+ test_h_gr r5, 0x11111111
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wror.cgs b/sim/testsuite/sim/arm/iwmmxt/wror.cgs
new file mode 100644
index 0000000..e329916
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wror.cgs
@@ -0,0 +1,167 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WROR
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wror
+wror:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Halfword wide rotate right by register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wrorh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x091a2b3c
+ test_h_gr r5, 0x4d5e6f78
+
+ # Test Halfword wide rotate right by CG register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0
+ mvi_h_gr r4, 0
+
+ tmcrr wr0, r0, r1
+ tmcr wcgr0, r2
+ tmcrr wr1, r2, r3
+
+ wrorhg wr1, wr0, wcgr0
+
+ tmrrc r0, r1, wr0
+ tmrc r2, wcgr0
+ tmrrc r3, r4, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x091a2b3c
+ test_h_gr r4, 0x4d5e6f78
+
+ # Test Word wide rotate right by register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wrorw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x2b3c091a
+ test_h_gr r5, 0x6f784d5e
+
+ # Test Word wide rotate right by CG register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0
+ mvi_h_gr r4, 0
+
+ tmcrr wr0, r0, r1
+ tmcr wcgr0, r2
+ tmcrr wr1, r2, r3
+
+ wrorwg wr1, wr0, wcgr0
+
+ tmrrc r0, r1, wr0
+ tmrc r2, wcgr0
+ tmrrc r3, r4, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x2b3c091a
+ test_h_gr r4, 0x6f784d5e
+
+ # Test Double Word wide rotate right by register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wrord wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x6f78091a
+ test_h_gr r5, 0x2b3c4d5e
+
+ # Test Double Word wide rotate right by CG register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0
+ mvi_h_gr r4, 0
+
+ tmcrr wr0, r0, r1
+ tmcr wcgr0, r2
+ tmcrr wr1, r2, r3
+
+ wrordg wr1, wr0, wcgr0
+
+ tmrrc r0, r1, wr0
+ tmrc r2, wcgr0
+ tmrrc r3, r4, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x6f78091a
+ test_h_gr r4, 0x2b3c4d5e
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wsad.cgs b/sim/testsuite/sim/arm/iwmmxt/wsad.cgs
new file mode 100644
index 0000000..34a20cc
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wsad.cgs
@@ -0,0 +1,121 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WSAD
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wsad
+wsad:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Byte wide absolute accumulation
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0x22222222
+ mvi_h_gr r5, 0x22222222
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsadb wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x2222258e
+ test_h_gr r5, 0x00000000
+
+ # Test Byte wide absolute accumulation with zeroing
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0x22222222
+ mvi_h_gr r5, 0x22222222
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsadbz wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x0000036c
+ test_h_gr r5, 0x00000000
+
+ # Test Halfword wide absolute accumulation
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0x22222222
+ mvi_h_gr r5, 0x22222222
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsadh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x22239e14
+ test_h_gr r5, 0x00000000
+
+ # Test Halfword wide absolute accumulation with zeroing
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x22222222
+ mvi_h_gr r4, 0x22222222
+ mvi_h_gr r5, 0x22222222
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsadhz wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x22222222
+ test_h_gr r4, 0x00017bf2
+ test_h_gr r5, 0x00000000
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wshufh.cgs b/sim/testsuite/sim/arm/iwmmxt/wshufh.cgs
new file mode 100644
index 0000000..d5cff1e
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wshufh.cgs
@@ -0,0 +1,35 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WSHUFH
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wshufh
+wshufh:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wshufh wr1, wr0, #0x1b
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0xdef09abc
+ test_h_gr r3, 0x56781234
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wsll.cgs b/sim/testsuite/sim/arm/iwmmxt/wsll.cgs
new file mode 100644
index 0000000..17d7893
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wsll.cgs
@@ -0,0 +1,167 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WSLL
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wsll
+wsll:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Halfword Logical Shift Left
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsllh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x23406780
+ test_h_gr r5, 0xabc0ef00
+
+ # Test Halfword Aritc Shift Left by CG register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0
+ mvi_h_gr r4, 0
+
+ tmcrr wr0, r0, r1
+ tmcr wcgr1, r2
+ tmcrr wr1, r3, r4
+
+ wsllhg wr1, wr0, wcgr1
+
+ tmrrc r0, r1, wr0
+ tmrc r2, wcgr1
+ tmrrc r3, r4, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x23406780
+ test_h_gr r4, 0xabc0ef00
+
+ # Test Word Logical Shift Left
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsllw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x23456780
+ test_h_gr r5, 0xabcdef00
+
+ # Test Word Logical Shift Left by CG register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0
+ mvi_h_gr r4, 0
+
+ tmcrr wr0, r0, r1
+ tmcr wcgr2, r2
+ tmcrr wr1, r3, r4
+
+ wsllwg wr1, wr0, wcgr2
+
+ tmrrc r0, r1, wr0
+ tmrc r2, wcgr2
+ tmrrc r3, r4, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x23456780
+ test_h_gr r4, 0xabcdef00
+
+ # Test Double Word Logical Shift Left
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdefc
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wslld wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdefc
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x23456780
+ test_h_gr r5, 0xabcdefc1
+
+ # Test Double Word Logical Shift Left by CG register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdefc
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0
+ mvi_h_gr r4, 0
+
+ tmcrr wr0, r0, r1
+ tmcr wcgr3, r2
+ tmcrr wr1, r3, r4
+
+ wslldg wr1, wr0, wcgr3
+
+ tmrrc r0, r1, wr0
+ tmrc r2, wcgr3
+ tmrrc r3, r4, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdefc
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x23456780
+ test_h_gr r4, 0xabcdefc1
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wsra.cgs b/sim/testsuite/sim/arm/iwmmxt/wsra.cgs
new file mode 100644
index 0000000..db998bb
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wsra.cgs
@@ -0,0 +1,167 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WSRA
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wsra
+wsra:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Halfword Arithmetic Shift Right
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsrah wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01230567
+ test_h_gr r5, 0xf9abfdef
+
+ # Test Halfword Arithmetic Shift Right by CG register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0
+ mvi_h_gr r4, 0
+
+ tmcrr wr0, r0, r1
+ tmcr wcgr1, r2
+ tmcrr wr1, r3, r4
+
+ wsrahg wr1, wr0, wcgr1
+
+ tmrrc r0, r1, wr0
+ tmrc r2, wcgr1
+ tmrrc r3, r4, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x01230567
+ test_h_gr r4, 0xf9abfdef
+
+ # Test Word Arithmetic Shift Right
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsraw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01234567
+ test_h_gr r5, 0xf9abcdef
+
+ # Test Word Arithmetic Shift Right by CG register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0
+ mvi_h_gr r4, 0
+
+ tmcrr wr0, r0, r1
+ tmcr wcgr2, r2
+ tmcrr wr1, r3, r4
+
+ wsrawg wr1, wr0, wcgr2
+
+ tmrrc r0, r1, wr0
+ tmrc r2, wcgr2
+ tmrrc r3, r4, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x01234567
+ test_h_gr r4, 0xf9abcdef
+
+ # Test Double Word Arithmetic Shift Right
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdefc
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsrad wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdefc
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0xc1234567
+ test_h_gr r5, 0xf9abcdef
+
+ # Test Double Word Arithmetic Shift Right by CG register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdefc
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0
+ mvi_h_gr r4, 0
+
+ tmcrr wr0, r0, r1
+ tmcr wcgr3, r2
+ tmcrr wr1, r3, r4
+
+ wsradg wr1, wr0, wcgr3
+
+ tmrrc r0, r1, wr0
+ tmrc r2, wcgr3
+ tmrrc r3, r4, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdefc
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0xc1234567
+ test_h_gr r4, 0xf9abcdef
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wsrl.cgs b/sim/testsuite/sim/arm/iwmmxt/wsrl.cgs
new file mode 100644
index 0000000..416a464
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wsrl.cgs
@@ -0,0 +1,167 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WSRL
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wsrl
+wsrl:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Halfword Logical Shift Right
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsrlh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01230567
+ test_h_gr r5, 0x09ab0def
+
+ # Test Halfword Logical Shift Right by CG register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0
+ mvi_h_gr r4, 0
+
+ tmcrr wr0, r0, r1
+ tmcr wcgr1, r2
+ tmcrr wr1, r3, r4
+
+ wsrlhg wr1, wr0, wcgr1
+
+ tmrrc r0, r1, wr0
+ tmrc r2, wcgr1
+ tmrrc r3, r4, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x01230567
+ test_h_gr r4, 0x09ab0def
+
+ # Test Word Logical Shift Right
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsrlw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01234567
+ test_h_gr r5, 0x09abcdef
+
+ # Test Word Logical Shift Right by CG register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0
+ mvi_h_gr r4, 0
+
+ tmcrr wr0, r0, r1
+ tmcr wcgr2, r2
+ tmcrr wr1, r3, r4
+
+ wsrlwg wr1, wr0, wcgr2
+
+ tmrrc r0, r1, wr0
+ tmrc r2, wcgr2
+ tmrrc r3, r4, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x01234567
+ test_h_gr r4, 0x09abcdef
+
+ # Test Double Word Logical Shift Right
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdefc
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsrld wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdefc
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0xc1234567
+ test_h_gr r5, 0x09abcdef
+
+ # Test Double Word Logical Shift Right by CG register
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdefc
+ mvi_h_gr r2, 0x11111104
+ mvi_h_gr r3, 0
+ mvi_h_gr r4, 0
+
+ tmcrr wr0, r0, r1
+ tmcr wcgr3, r2
+ tmcrr wr1, r3, r4
+
+ wsrldg wr1, wr0, wcgr3
+
+ tmrrc r0, r1, wr0
+ tmrc r2, wcgr3
+ tmrrc r3, r4, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdefc
+ test_h_gr r2, 0x11111104
+ test_h_gr r3, 0xc1234567
+ test_h_gr r4, 0x09abcdef
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wsub.cgs b/sim/testsuite/sim/arm/iwmmxt/wsub.cgs
new file mode 100644
index 0000000..b0e77be
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wsub.cgs
@@ -0,0 +1,251 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WSUB
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wsub
+wsub:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Unsaturated Byte subtraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsubb wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01234567
+ test_h_gr r5, 0x89abcdef
+
+ # Test Unsigned saturated Byte subtraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsubbus wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01234567
+ test_h_gr r5, 0x89abcd00
+
+ # Test Signed saturated Byte subtraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsubbss wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01234567
+ test_h_gr r5, 0x89abcdef
+
+ # Test Unsaturated Halfword subtraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsubh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01234567
+ test_h_gr r5, 0x89abccef
+
+ # Test Unsigned saturated Halfword subtraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsubhus wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01234567
+ test_h_gr r5, 0x89abccef
+
+ # Test Signed saturated Halfword subtraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsubhss wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01234567
+ test_h_gr r5, 0x89abccef
+
+ # Test Unsaturated Word subtraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsubw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01234567
+ test_h_gr r5, 0x89abccef
+
+ # Test Unsigned saturated Word subtraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsubwus wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01234567
+ test_h_gr r5, 0x89abccef
+
+ # Test Signed saturated Word subtraction
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcde00
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x11111111
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wsubwss wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcde00
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x11111111
+ test_h_gr r4, 0x01234567
+ test_h_gr r5, 0x89abccef
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wunpckeh.cgs b/sim/testsuite/sim/arm/iwmmxt/wunpckeh.cgs
new file mode 100644
index 0000000..32a70f4
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wunpckeh.cgs
@@ -0,0 +1,137 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WUNPCKEH
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wunpckeh
+wunpckeh:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Unsigned Byte Unpacking
+
+ mvi_h_gr r0, 0x12345687
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wunpckehub wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345687
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x00de00f0
+ test_h_gr r3, 0x009a00bc
+
+ # Test Signed Byte Unpacking
+
+ mvi_h_gr r0, 0x12345687
+ mvi_h_gr r1, 0x7abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wunpckehsb wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345687
+ test_h_gr r1, 0x7abcdef0
+ test_h_gr r2, 0xffdefff0
+ test_h_gr r3, 0x007affbc
+
+ # Test Unsigned Halfword Unpacking
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wunpckehuh wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x0000def0
+ test_h_gr r3, 0x00009abc
+
+ # Test Signed Halfword Unpacking
+
+ mvi_h_gr r0, 0x12348678
+ mvi_h_gr r1, 0x7abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wunpckehsh wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12348678
+ test_h_gr r1, 0x7abcdef0
+ test_h_gr r2, 0xffffdef0
+ test_h_gr r3, 0x00007abc
+
+ # Test Unsigned Word Unpacking
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wunpckehuw wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x9abcdef0
+ test_h_gr r3, 0x00000000
+
+ # Test Signed Word Unpacking
+
+ mvi_h_gr r0, 0x82345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wunpckehsw wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x82345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x9abcdef0
+ test_h_gr r3, 0xffffffff
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wunpckel.cgs b/sim/testsuite/sim/arm/iwmmxt/wunpckel.cgs
new file mode 100644
index 0000000..a6ffb4f
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wunpckel.cgs
@@ -0,0 +1,137 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WUNPCKEL
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wunpckel
+wunpckel:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Unsigned Byte Unpacking
+
+ mvi_h_gr r0, 0x12345687
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wunpckelub wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345687
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x00560087
+ test_h_gr r3, 0x00120034
+
+ # Test Signed Byte Unpacking
+
+ mvi_h_gr r0, 0x12345687
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wunpckelsb wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345687
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x0056ff87
+ test_h_gr r3, 0x00120034
+
+ # Test Unsigned Halfword Unpacking
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wunpckeluh wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x00005678
+ test_h_gr r3, 0x00001234
+
+ # Test Signed Halfword Unpacking
+
+ mvi_h_gr r0, 0x12348678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wunpckelsh wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12348678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0xffff8678
+ test_h_gr r3, 0x00001234
+
+ # Test Unsigned Word Unpacking
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wunpckeluw wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x00000000
+
+ # Test Signed Word Unpacking
+
+ mvi_h_gr r0, 0x82345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0
+ mvi_h_gr r3, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+
+ wunpckelsw wr1, wr0
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+
+ test_h_gr r0, 0x82345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x82345678
+ test_h_gr r3, 0xffffffff
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wunpckih.cgs b/sim/testsuite/sim/arm/iwmmxt/wunpckih.cgs
new file mode 100644
index 0000000..41fed0e
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wunpckih.cgs
@@ -0,0 +1,95 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WUNPCKIH
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wunpckih
+wunpckih:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Byte unpacking
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wunpckihb wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x00de00f0
+ test_h_gr r5, 0x009a00bc
+
+ # Test Halfword unpacking
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wunpckihh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x0000def0
+ test_h_gr r5, 0x00009abc
+
+ # Test Word unpacking
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wunpckihw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x9abcdef0
+ test_h_gr r5, 0x00000000
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wunpckil.cgs b/sim/testsuite/sim/arm/iwmmxt/wunpckil.cgs
new file mode 100644
index 0000000..7bd7300
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wunpckil.cgs
@@ -0,0 +1,95 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WUNPCKIL
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wunpckil
+wunpckil:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Byte unpacking
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wunpckilb wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x11561178
+ test_h_gr r5, 0x11121134
+
+ # Test Halfword unpacking
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wunpckilh wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x11115678
+ test_h_gr r5, 0x11111234
+
+ # Test Word unpacking
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wunpckilw wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x12345678
+ test_h_gr r5, 0x11111111
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wxor.cgs b/sim/testsuite/sim/arm/iwmmxt/wxor.cgs
new file mode 100644
index 0000000..95e1fc8
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wxor.cgs
@@ -0,0 +1,41 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WXOR
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wxor
+wxor:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+ mvi_h_gr r2, 0x11111111
+ mvi_h_gr r3, 0x00000000
+ mvi_h_gr r4, 0
+ mvi_h_gr r5, 0
+
+ tmcrr wr0, r0, r1
+ tmcrr wr1, r2, r3
+ tmcrr wr2, r4, r5
+
+ wxor wr2, wr0, wr1
+
+ tmrrc r0, r1, wr0
+ tmrrc r2, r3, wr1
+ tmrrc r4, r5, wr2
+
+ test_h_gr r0, 0x12345678
+ test_h_gr r1, 0x9abcdef0
+ test_h_gr r2, 0x11111111
+ test_h_gr r3, 0x00000000
+ test_h_gr r4, 0x03254769
+ test_h_gr r5, 0x9abcdef0
+
+ pass
diff --git a/sim/testsuite/sim/arm/iwmmxt/wzero.cgs b/sim/testsuite/sim/arm/iwmmxt/wzero.cgs
new file mode 100644
index 0000000..78fa7c5
--- /dev/null
+++ b/sim/testsuite/sim/arm/iwmmxt/wzero.cgs
@@ -0,0 +1,29 @@
+# Intel(r) Wireless MMX(tm) technology testcase for WZERO
+# mach: xscale
+# as: -mcpu=xscale+iwmmxt
+
+ .include "testutils.inc"
+
+ start
+
+ .global wzero
+wzero:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ mvi_h_gr r0, 0x12345678
+ mvi_h_gr r1, 0x9abcdef0
+
+ tmcrr wr0, r0, r1
+
+ wzero wr0
+
+ tmrrc r0, r1, wr0
+
+ test_h_gr r0, 0x00000000
+ test_h_gr r1, 0x00000000
+
+ pass
diff --git a/sim/testsuite/sim/arm/ldm.cgs b/sim/testsuite/sim/arm/ldm.cgs
new file mode 100644
index 0000000..6831a83
--- /dev/null
+++ b/sim/testsuite/sim/arm/ldm.cgs
@@ -0,0 +1,89 @@
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldmda_wb
+ldmda_wb:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldmda
+ldmda:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldmdb_wb
+ldmdb_wb:
+
+ pass
+# arm testcase for ldm$cond ..
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldmdb
+ldmdb:
+ ldm0 ..
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldmia_wb
+ldmia_wb:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldmia
+ldmia:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldmib_wb
+ldmib_wb:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldmib
+ldmib:
+
+ pass
diff --git a/sim/testsuite/sim/arm/ldr.cgs b/sim/testsuite/sim/arm/ldr.cgs
new file mode 100644
index 0000000..437b68c
--- /dev/null
+++ b/sim/testsuite/sim/arm/ldr.cgs
@@ -0,0 +1,192 @@
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_post_dec_imm_offset
+ldr_post_dec_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond}t $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_post_dec_nonpriv_imm_offset
+ldr_post_dec_nonpriv_imm_offset:
+ ldr0t pc,???
+
+ pass
+# arm testcase for ldr${cond}t $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_post_dec_nonpriv_reg_offset
+ldr_post_dec_nonpriv_reg_offset:
+ ldr0t pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_post_dec_reg_offset
+ldr_post_dec_reg_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_post_inc_imm_offset
+ldr_post_inc_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond}t $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_post_inc_nonpriv_imm_offset
+ldr_post_inc_nonpriv_imm_offset:
+ ldr0t pc,???
+
+ pass
+# arm testcase for ldr${cond}t $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_post_inc_nonpriv_reg_offset
+ldr_post_inc_nonpriv_reg_offset:
+ ldr0t pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_post_inc_reg_offset
+ldr_post_inc_reg_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_pre_dec_imm_offset
+ldr_pre_dec_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_pre_dec_reg_offset
+ldr_pre_dec_reg_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_pre_dec_wb_imm_offset
+ldr_pre_dec_wb_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_pre_dec_wb_reg_offset
+ldr_pre_dec_wb_reg_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_pre_inc_imm_offset
+ldr_pre_inc_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_pre_inc_reg_offset
+ldr_pre_inc_reg_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_pre_inc_wb_imm_offset
+ldr_pre_inc_wb_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_pre_inc_wb_reg_offset
+ldr_pre_inc_wb_reg_offset:
+ ldr0 pc,???
+
+ pass
diff --git a/sim/testsuite/sim/arm/ldrb.cgs b/sim/testsuite/sim/arm/ldrb.cgs
new file mode 100644
index 0000000..b09880c
--- /dev/null
+++ b/sim/testsuite/sim/arm/ldrb.cgs
@@ -0,0 +1,192 @@
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_post_dec_imm_offset
+ldrb_post_dec_imm_offset:
+ ldr0b pc,???
+
+ pass
+# arm testcase for ldr${cond}bt $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_post_dec_nonpriv_imm_offset
+ldrb_post_dec_nonpriv_imm_offset:
+ ldr0bt pc,???
+
+ pass
+# arm testcase for ldr${cond}bt $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_post_dec_nonpriv_reg_offset
+ldrb_post_dec_nonpriv_reg_offset:
+ ldr0bt pc,???
+
+ pass
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_post_dec_reg_offset
+ldrb_post_dec_reg_offset:
+ ldr0b pc,???
+
+ pass
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_post_inc_imm_offset
+ldrb_post_inc_imm_offset:
+ ldr0b pc,???
+
+ pass
+# arm testcase for ldr${cond}bt $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_post_inc_nonpriv_imm_offset
+ldrb_post_inc_nonpriv_imm_offset:
+ ldr0bt pc,???
+
+ pass
+# arm testcase for ldr${cond}bt $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_post_inc_nonpriv_reg_offset
+ldrb_post_inc_nonpriv_reg_offset:
+ ldr0bt pc,???
+
+ pass
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_post_inc_reg_offset
+ldrb_post_inc_reg_offset:
+ ldr0b pc,???
+
+ pass
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_pre_dec_imm_offset
+ldrb_pre_dec_imm_offset:
+ ldr0b pc,???
+
+ pass
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_pre_dec_reg_offset
+ldrb_pre_dec_reg_offset:
+ ldr0b pc,???
+
+ pass
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_pre_dec_wb_imm_offset
+ldrb_pre_dec_wb_imm_offset:
+ ldr0b pc,???
+
+ pass
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_pre_dec_wb_reg_offset
+ldrb_pre_dec_wb_reg_offset:
+ ldr0b pc,???
+
+ pass
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_pre_inc_imm_offset
+ldrb_pre_inc_imm_offset:
+ ldr0b pc,???
+
+ pass
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_pre_inc_reg_offset
+ldrb_pre_inc_reg_offset:
+ ldr0b pc,???
+
+ pass
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_pre_inc_wb_imm_offset
+ldrb_pre_inc_wb_imm_offset:
+ ldr0b pc,???
+
+ pass
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_pre_inc_wb_reg_offset
+ldrb_pre_inc_wb_reg_offset:
+ ldr0b pc,???
+
+ pass
diff --git a/sim/testsuite/sim/arm/ldrh.cgs b/sim/testsuite/sim/arm/ldrh.cgs
new file mode 100644
index 0000000..16a4323
--- /dev/null
+++ b/sim/testsuite/sim/arm/ldrh.cgs
@@ -0,0 +1,132 @@
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_post_dec_imm_offset
+ldrh_post_dec_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_post_dec_reg_offset
+ldrh_post_dec_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_post_inc_imm_offset
+ldrh_post_inc_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_post_inc_reg_offset
+ldrh_post_inc_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_pre_dec_imm_offset
+ldrh_pre_dec_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_pre_dec_reg_offset
+ldrh_pre_dec_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_pre_dec_wb_imm_offset
+ldrh_pre_dec_wb_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_pre_dec_wb_reg_offset
+ldrh_pre_dec_wb_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_pre_inc_imm_offset
+ldrh_pre_inc_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_pre_inc_reg_offset
+ldrh_pre_inc_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_pre_inc_wb_imm_offset
+ldrh_pre_inc_wb_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_pre_inc_wb_reg_offset
+ldrh_pre_inc_wb_reg_offset:
+
+ pass
diff --git a/sim/testsuite/sim/arm/ldrsb.cgs b/sim/testsuite/sim/arm/ldrsb.cgs
new file mode 100644
index 0000000..4d08f4c
--- /dev/null
+++ b/sim/testsuite/sim/arm/ldrsb.cgs
@@ -0,0 +1,132 @@
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsb_post_dec_imm_offset
+ldrsb_post_dec_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsb_post_dec_reg_offset
+ldrsb_post_dec_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsb_post_inc_imm_offset
+ldrsb_post_inc_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsb_post_inc_reg_offset
+ldrsb_post_inc_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsb_pre_dec_imm_offset
+ldrsb_pre_dec_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsb_pre_dec_reg_offset
+ldrsb_pre_dec_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsb_pre_dec_wb_imm_offset
+ldrsb_pre_dec_wb_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsb_pre_dec_wb_reg_offset
+ldrsb_pre_dec_wb_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsb_pre_inc_imm_offset
+ldrsb_pre_inc_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsb_pre_inc_reg_offset
+ldrsb_pre_inc_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsb_pre_inc_wb_imm_offset
+ldrsb_pre_inc_wb_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsb_pre_inc_wb_reg_offset
+ldrsb_pre_inc_wb_reg_offset:
+
+ pass
diff --git a/sim/testsuite/sim/arm/ldrsh.cgs b/sim/testsuite/sim/arm/ldrsh.cgs
new file mode 100644
index 0000000..5a6e7c7
--- /dev/null
+++ b/sim/testsuite/sim/arm/ldrsh.cgs
@@ -0,0 +1,132 @@
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsh_post_dec_imm_offset
+ldrsh_post_dec_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsh_post_dec_reg_offset
+ldrsh_post_dec_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsh_post_inc_imm_offset
+ldrsh_post_inc_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsh_post_inc_reg_offset
+ldrsh_post_inc_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsh_pre_dec_imm_offset
+ldrsh_pre_dec_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsh_pre_dec_reg_offset
+ldrsh_pre_dec_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsh_pre_dec_wb_imm_offset
+ldrsh_pre_dec_wb_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsh_pre_dec_wb_reg_offset
+ldrsh_pre_dec_wb_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsh_pre_inc_imm_offset
+ldrsh_pre_inc_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsh_pre_inc_reg_offset
+ldrsh_pre_inc_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsh_pre_inc_wb_imm_offset
+ldrsh_pre_inc_wb_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrsh_pre_inc_wb_reg_offset
+ldrsh_pre_inc_wb_reg_offset:
+
+ pass
diff --git a/sim/testsuite/sim/arm/misaligned1.ms b/sim/testsuite/sim/arm/misaligned1.ms
new file mode 100644
index 0000000..69fda47
--- /dev/null
+++ b/sim/testsuite/sim/arm/misaligned1.ms
@@ -0,0 +1,61 @@
+# Test LDR instructions with offsets misaligned by 1 byte.
+# mach(): all
+
+ .macro invalid
+# This is "undefined" but it's not properly decoded yet.
+ .word 0x07ffffff
+# This is stc which isn't recognized yet.
+ stc 0,cr0,[r0]
+ .endm
+
+ .global _start
+_start:
+# Run some simple insns to confirm the engine is at least working.
+ nop
+
+# Skip over output text.
+ bl do_test
+
+pass:
+ .asciz "pass\n"
+ .p2align 2
+
+do_test:
+ mov r4, r14
+ bl continue
+word1:
+ .word 0x5555
+continue:
+ ldr r6, [r14, #1]
+ ldr r7, word2
+ cmp r6, r7
+ # Failed.
+ bne done
+
+output_next:
+# Output a character (in arm mode).
+ mov r0,#3
+ mov r1,r4
+ swi #0x123456
+
+# Load next character, see if done.
+ add r4,r4,#1
+ sub r3,r3,r3
+ ldrb r5,[r4,r3]
+ teq r5,#0
+ bne output_next
+
+done:
+ mov r0,#0x18
+ ldr r1,exit_code
+ swi #0x123456
+
+# If that fails, try to die with an invalid insn.
+ invalid
+
+exit_code:
+ .word 0x20026
+ .word 0xFFFFFFFF
+word2:
+ .word 0x55000055
+ .word 0xFFFFFFFF
diff --git a/sim/testsuite/sim/arm/misaligned2.ms b/sim/testsuite/sim/arm/misaligned2.ms
new file mode 100644
index 0000000..3a03326
--- /dev/null
+++ b/sim/testsuite/sim/arm/misaligned2.ms
@@ -0,0 +1,60 @@
+# Test LDR instructions with offsets misaligned by 2 bytes.
+# mach(): all
+
+ .macro invalid
+# This is "undefined" but it's not properly decoded yet.
+ .word 0x07ffffff
+# This is stc which isn't recognized yet.
+ stc 0,cr0,[r0]
+ .endm
+
+ .global _start
+_start:
+# Run some simple insns to confirm the engine is at least working.
+ nop
+
+# Skip over output text.
+ bl do_test
+
+pass:
+ .asciz "pass\n"
+ .p2align 2
+
+do_test:
+ mov r4, r14
+ bl continue
+word1:
+ .word 0x5555
+continue:
+ ldr r6, [r14, #2]
+ ldr r7, word2
+ cmp r6, r7
+ # Failed.
+ bne done
+
+output_next:
+# Output a character (in arm mode).
+ mov r0,#3
+ mov r1,r4
+ swi #0x123456
+
+# Load next character, see if done.
+ add r4,r4,#1
+ sub r3,r3,r3
+ ldrb r5,[r4,r3]
+ teq r5,#0
+ bne output_next
+
+done:
+ mov r0,#0x18
+ ldr r1,exit_code
+ swi #0x123456
+
+# If that fails, try to die with an invalid insn.
+ invalid
+
+exit_code:
+ .word 0x20026
+
+word2:
+ .word 0x55550000
diff --git a/sim/testsuite/sim/arm/misaligned3.ms b/sim/testsuite/sim/arm/misaligned3.ms
new file mode 100644
index 0000000..bf2d9f1
--- /dev/null
+++ b/sim/testsuite/sim/arm/misaligned3.ms
@@ -0,0 +1,62 @@
+# Test LDR instructions with offsets misaligned by 3 bytes.
+# mach(): all
+
+ .macro invalid
+# This is "undefined" but it's not properly decoded yet.
+ .word 0x07ffffff
+# This is stc which isn't recognized yet.
+ stc 0,cr0,[r0]
+ .endm
+
+ .global _start
+_start:
+# Run some simple insns to confirm the engine is at least working.
+ nop
+
+# Skip over output text.
+ bl do_test
+
+pass:
+ .asciz "pass\n"
+ .p2align 2
+
+do_test:
+ mov r4, r14
+ bl continue
+word1:
+ .word 0x5555
+continue:
+ ldr r6, [r14, #3]
+ ldr r7, word2
+ cmp r6, r7
+ # Failed.
+ bne done
+
+output_next:
+# Output a character (in arm mode).
+ mov r0,#3
+ mov r1,r4
+ swi #0x123456
+
+# Load next character, see if done.
+ add r4,r4,#1
+ sub r3,r3,r3
+ ldrb r5,[r4,r3]
+ teq r5,#0
+ bne output_next
+
+done:
+ mov r0,#0x18
+ ldr r1,exit_code
+ swi #0x123456
+
+# If that fails, try to die with an invalid insn.
+ invalid
+
+exit_code:
+ .word 0x20026
+
+ .word 0xFFFFFFFF
+word2:
+ .word 0x555500
+ .word 0xFFFFFFFF
diff --git a/sim/testsuite/sim/arm/misc.exp b/sim/testsuite/sim/arm/misc.exp
new file mode 100644
index 0000000..1e8006f
--- /dev/null
+++ b/sim/testsuite/sim/arm/misc.exp
@@ -0,0 +1,20 @@
+# Miscellaneous ARM simulator testcases
+
+if { [istarget arm*-*-*] || [istarget thumb*-*-*] || [istarget xscale*-*-*] } {
+ # load support procs
+ # load_lib cgen.exp
+
+ # all machines
+ set all_machs "arm7tdmi"
+
+ # The .ms suffix is for "miscellaneous .s".
+ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.ms]] {
+ # If we're only testing specific files and this isn't one of them,
+ # skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
+ }
+
+ run_sim_test $src $all_machs
+ }
+}
diff --git a/sim/testsuite/sim/arm/mla.cgs b/sim/testsuite/sim/arm/mla.cgs
new file mode 100644
index 0000000..c82dd0c
--- /dev/null
+++ b/sim/testsuite/sim/arm/mla.cgs
@@ -0,0 +1,12 @@
+# arm testcase for mla$cond${set-cc?} ${mul-rd},$rm,$rs,${mul-rn}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mla
+mla:
+ mla00 pc,pc,pc,pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/mov.cgs b/sim/testsuite/sim/arm/mov.cgs
new file mode 100644
index 0000000..d2a83d3
--- /dev/null
+++ b/sim/testsuite/sim/arm/mov.cgs
@@ -0,0 +1,36 @@
+# arm testcase for mov$cond${set-cc?} $rd,$imm12
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mov_imm
+mov_imm:
+ mov00 pc,0
+
+ pass
+# arm testcase for mov$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mov_reg_imm_shift
+mov_reg_imm_shift:
+ mov00 pc,pc,pc,lsl 0
+
+ pass
+# arm testcase for mov$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mov_reg_reg_shift
+mov_reg_reg_shift:
+ mov00 pc,pc,pc,lsl pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/mrs.cgs b/sim/testsuite/sim/arm/mrs.cgs
new file mode 100644
index 0000000..22c5e95
--- /dev/null
+++ b/sim/testsuite/sim/arm/mrs.cgs
@@ -0,0 +1,24 @@
+# arm testcase for mrs$cond $rd,cpsr
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mrs_c
+mrs_c:
+ mrs0 pc,cpsr
+
+ pass
+# arm testcase for mrs$cond $rd,spsr
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mrs_s
+mrs_s:
+ mrs0 pc,spsr
+
+ pass
diff --git a/sim/testsuite/sim/arm/msr.cgs b/sim/testsuite/sim/arm/msr.cgs
new file mode 100644
index 0000000..c79f0bd
--- /dev/null
+++ b/sim/testsuite/sim/arm/msr.cgs
@@ -0,0 +1,24 @@
+# arm testcase for msr$cond cpsr,$rm
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global msr_c
+msr_c:
+ msr0 cpsr,pc
+
+ pass
+# arm testcase for msr$cond spsr,$rm
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global msr_s
+msr_s:
+ msr0 spsr,pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/mul.cgs b/sim/testsuite/sim/arm/mul.cgs
new file mode 100644
index 0000000..4f0a926
--- /dev/null
+++ b/sim/testsuite/sim/arm/mul.cgs
@@ -0,0 +1,12 @@
+# arm testcase for mul$cond${set-cc?} ${mul-rd},$rm,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mul
+mul:
+ mul00 pc,pc,pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/mvn.cgs b/sim/testsuite/sim/arm/mvn.cgs
new file mode 100644
index 0000000..92fd3a4
--- /dev/null
+++ b/sim/testsuite/sim/arm/mvn.cgs
@@ -0,0 +1,36 @@
+# arm testcase for mvn$cond${set-cc?} $rd,$imm12
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mvn_imm
+mvn_imm:
+ mvn00 pc,0
+
+ pass
+# arm testcase for mvn$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mvn_reg_imm_shift
+mvn_reg_imm_shift:
+ mvn00 pc,pc,pc,lsl 0
+
+ pass
+# arm testcase for mvn$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mvn_reg_reg_shift
+mvn_reg_reg_shift:
+ mvn00 pc,pc,pc,lsl pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/orr.cgs b/sim/testsuite/sim/arm/orr.cgs
new file mode 100644
index 0000000..3fc67ad
--- /dev/null
+++ b/sim/testsuite/sim/arm/orr.cgs
@@ -0,0 +1,36 @@
+# arm testcase for orr$cond${set-cc?} $rd,$rn,$imm12
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global orr_imm
+orr_imm:
+ orr00 pc,pc,0
+
+ pass
+# arm testcase for orr$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global orr_reg_imm_shift
+orr_reg_imm_shift:
+ orr00 pc,pc,pc,lsl 0
+
+ pass
+# arm testcase for orr$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global orr_reg_reg_shift
+orr_reg_reg_shift:
+ orr00 pc,pc,pc,lsl pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/rsb.cgs b/sim/testsuite/sim/arm/rsb.cgs
new file mode 100644
index 0000000..14edc35
--- /dev/null
+++ b/sim/testsuite/sim/arm/rsb.cgs
@@ -0,0 +1,36 @@
+# arm testcase for rsb$cond${set-cc?} $rd,$rn,$imm12
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global rsb_imm
+rsb_imm:
+ rsb00 pc,pc,0
+
+ pass
+# arm testcase for rsb$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global rsb_reg_imm_shift
+rsb_reg_imm_shift:
+ rsb00 pc,pc,pc,lsl 0
+
+ pass
+# arm testcase for rsb$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global rsb_reg_reg_shift
+rsb_reg_reg_shift:
+ rsb00 pc,pc,pc,lsl pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/rsc.cgs b/sim/testsuite/sim/arm/rsc.cgs
new file mode 100644
index 0000000..078fbcc
--- /dev/null
+++ b/sim/testsuite/sim/arm/rsc.cgs
@@ -0,0 +1,36 @@
+# arm testcase for rsc$cond${set-cc?} $rd,$rn,$imm12
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global rsc_imm
+rsc_imm:
+ rsc00 pc,pc,0
+
+ pass
+# arm testcase for rsc$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global rsc_reg_imm_shift
+rsc_reg_imm_shift:
+ rsc00 pc,pc,pc,lsl 0
+
+ pass
+# arm testcase for rsc$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global rsc_reg_reg_shift
+rsc_reg_reg_shift:
+ rsc00 pc,pc,pc,lsl pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/sbc.cgs b/sim/testsuite/sim/arm/sbc.cgs
new file mode 100644
index 0000000..9462702
--- /dev/null
+++ b/sim/testsuite/sim/arm/sbc.cgs
@@ -0,0 +1,36 @@
+# arm testcase for sbc$cond${set-cc?} $rd,$rn,$imm12
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global sbc_imm
+sbc_imm:
+ sbc00 pc,pc,0
+
+ pass
+# arm testcase for sbc$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global sbc_reg_imm_shift
+sbc_reg_imm_shift:
+ sbc00 pc,pc,pc,lsl 0
+
+ pass
+# arm testcase for sbc$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global sbc_reg_reg_shift
+sbc_reg_reg_shift:
+ sbc00 pc,pc,pc,lsl pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/smlal.cgs b/sim/testsuite/sim/arm/smlal.cgs
new file mode 100644
index 0000000..4ad1373
--- /dev/null
+++ b/sim/testsuite/sim/arm/smlal.cgs
@@ -0,0 +1,12 @@
+# arm testcase for smlal$cond${set-cc?} $rdlo,$rdhi,$rm,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global smlal
+smlal:
+ smlal00 pc,pc,pc,pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/smull.cgs b/sim/testsuite/sim/arm/smull.cgs
new file mode 100644
index 0000000..22e3960
--- /dev/null
+++ b/sim/testsuite/sim/arm/smull.cgs
@@ -0,0 +1,12 @@
+# arm testcase for smull$cond${set-cc?} $rdlo,$rdhi,$rm,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global smull
+smull:
+ smull00 pc,pc,pc,pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/stm.cgs b/sim/testsuite/sim/arm/stm.cgs
new file mode 100644
index 0000000..c381216
--- /dev/null
+++ b/sim/testsuite/sim/arm/stm.cgs
@@ -0,0 +1,88 @@
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global stmda_wb
+stmda_wb:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global stmda
+stmda:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global stmdb_wb
+stmdb_wb:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global stmdb
+stmdb:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global stmia_wb
+stmia_wb:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global stmia
+stmia:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global stmib_wb
+stmib_wb:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global stmib
+stmib:
+
+ pass
diff --git a/sim/testsuite/sim/arm/str.cgs b/sim/testsuite/sim/arm/str.cgs
new file mode 100644
index 0000000..82c683b
--- /dev/null
+++ b/sim/testsuite/sim/arm/str.cgs
@@ -0,0 +1,192 @@
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_post_dec_imm_offset
+str_post_dec_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond}t $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_post_dec_nonpriv_imm_offset
+str_post_dec_nonpriv_imm_offset:
+ ldr0t pc,???
+
+ pass
+# arm testcase for str${cond}t $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_post_dec_nonpriv_reg_offset
+str_post_dec_nonpriv_reg_offset:
+ str0t pc,???
+
+ pass
+# arm testcase for str${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_post_dec_reg_offset
+str_post_dec_reg_offset:
+ str0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_post_inc_imm_offset
+str_post_inc_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond}t $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_post_inc_nonpriv_imm_offset
+str_post_inc_nonpriv_imm_offset:
+ ldr0t pc,???
+
+ pass
+# arm testcase for str${cond}t $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_post_inc_nonpriv_reg_offset
+str_post_inc_nonpriv_reg_offset:
+ str0t pc,???
+
+ pass
+# arm testcase for str${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_post_inc_reg_offset
+str_post_inc_reg_offset:
+ str0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_pre_dec_imm_offset
+str_pre_dec_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for str${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_pre_dec_reg_offset
+str_pre_dec_reg_offset:
+ str0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_pre_dec_wb_imm_offset
+str_pre_dec_wb_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for str${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_pre_dec_wb_reg_offset
+str_pre_dec_wb_reg_offset:
+ str0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_pre_inc_imm_offset
+str_pre_inc_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for str${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_pre_inc_reg_offset
+str_pre_inc_reg_offset:
+ str0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_pre_inc_wb_imm_offset
+str_pre_inc_wb_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for str${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_pre_inc_wb_reg_offset
+str_pre_inc_wb_reg_offset:
+ str0 pc,???
+
+ pass
diff --git a/sim/testsuite/sim/arm/strb.cgs b/sim/testsuite/sim/arm/strb.cgs
new file mode 100644
index 0000000..875a649
--- /dev/null
+++ b/sim/testsuite/sim/arm/strb.cgs
@@ -0,0 +1,192 @@
+# arm testcase for ldr${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_post_dec_imm_offset
+strb_post_dec_imm_offset:
+ ldr0b pc,???
+
+ pass
+# arm testcase for ldr${cond}t $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_post_dec_nonpriv_imm_offset
+strb_post_dec_nonpriv_imm_offset:
+ ldr0t pc,???
+
+ pass
+# arm testcase for str${cond}t $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_post_dec_nonpriv_reg_offset
+strb_post_dec_nonpriv_reg_offset:
+ str0t pc,???
+
+ pass
+# arm testcase for str${cond}b $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_post_dec_reg_offset
+strb_post_dec_reg_offset:
+ str0b pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_post_inc_imm_offset
+strb_post_inc_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for ldr${cond}t $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_post_inc_nonpriv_imm_offset
+strb_post_inc_nonpriv_imm_offset:
+ ldr0t pc,???
+
+ pass
+# arm testcase for str${cond}t $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_post_inc_nonpriv_reg_offset
+strb_post_inc_nonpriv_reg_offset:
+ str0t pc,???
+
+ pass
+# arm testcase for str${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_post_inc_reg_offset
+strb_post_inc_reg_offset:
+ str0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_pre_dec_imm_offset
+strb_pre_dec_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for str${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_pre_dec_reg_offset
+strb_pre_dec_reg_offset:
+ str0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_pre_dec_wb_imm_offset
+strb_pre_dec_wb_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for str${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_pre_dec_wb_reg_offset
+strb_pre_dec_wb_reg_offset:
+ str0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_pre_inc_imm_offset
+strb_pre_inc_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for str${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_pre_inc_reg_offset
+strb_pre_inc_reg_offset:
+ str0 pc,???
+
+ pass
+# arm testcase for ldr${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_pre_inc_wb_imm_offset
+strb_pre_inc_wb_imm_offset:
+ ldr0 pc,???
+
+ pass
+# arm testcase for str${cond} $rd,???
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_pre_inc_wb_reg_offset
+strb_pre_inc_wb_reg_offset:
+ str0 pc,???
+
+ pass
diff --git a/sim/testsuite/sim/arm/strh.cgs b/sim/testsuite/sim/arm/strh.cgs
new file mode 100644
index 0000000..e111d48
--- /dev/null
+++ b/sim/testsuite/sim/arm/strh.cgs
@@ -0,0 +1,132 @@
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_post_dec_imm_offset
+strh_post_dec_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_post_dec_reg_offset
+strh_post_dec_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_post_inc_imm_offset
+strh_post_inc_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_post_inc_reg_offset
+strh_post_inc_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_pre_dec_imm_offset
+strh_pre_dec_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_pre_dec_reg_offset
+strh_pre_dec_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_pre_dec_wb_imm_offset
+strh_pre_dec_wb_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_pre_dec_wb_reg_offset
+strh_pre_dec_wb_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_pre_inc_imm_offset
+strh_pre_inc_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_pre_inc_reg_offset
+strh_pre_inc_reg_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_pre_inc_wb_imm_offset
+strh_pre_inc_wb_imm_offset:
+
+ pass
+# arm testcase for FIXME
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_pre_inc_wb_reg_offset
+strh_pre_inc_wb_reg_offset:
+
+ pass
diff --git a/sim/testsuite/sim/arm/sub.cgs b/sim/testsuite/sim/arm/sub.cgs
new file mode 100644
index 0000000..50f222c
--- /dev/null
+++ b/sim/testsuite/sim/arm/sub.cgs
@@ -0,0 +1,36 @@
+# arm testcase for sub$cond${set-cc?} $rd,$rn,$imm12
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global sub_imm
+sub_imm:
+ sub00 pc,pc,0
+
+ pass
+# arm testcase for sub$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global sub_reg_imm_shift
+sub_reg_imm_shift:
+ sub00 pc,pc,pc,lsl 0
+
+ pass
+# arm testcase for sub$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global sub_reg_reg_shift
+sub_reg_reg_shift:
+ sub00 pc,pc,pc,lsl pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/swi.cgs b/sim/testsuite/sim/arm/swi.cgs
new file mode 100644
index 0000000..0c23d43
--- /dev/null
+++ b/sim/testsuite/sim/arm/swi.cgs
@@ -0,0 +1,12 @@
+# arm testcase for swi$cond ${swi-comment}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global swi
+swi:
+ swi0 0
+
+ pass
diff --git a/sim/testsuite/sim/arm/swp.cgs b/sim/testsuite/sim/arm/swp.cgs
new file mode 100644
index 0000000..f965ef2
--- /dev/null
+++ b/sim/testsuite/sim/arm/swp.cgs
@@ -0,0 +1,12 @@
+# arm testcase for swp$cond $rd,$rm,[$rn]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global swp
+swp:
+ swp0 pc,pc,[pc]
+
+ pass
diff --git a/sim/testsuite/sim/arm/swpb.cgs b/sim/testsuite/sim/arm/swpb.cgs
new file mode 100644
index 0000000..6f8a076
--- /dev/null
+++ b/sim/testsuite/sim/arm/swpb.cgs
@@ -0,0 +1,12 @@
+# arm testcase for swpb${cond}b $rd,$rm,[$rn]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global swpb
+swpb:
+ swpb0b pc,pc,[pc]
+
+ pass
diff --git a/sim/testsuite/sim/arm/teq.cgs b/sim/testsuite/sim/arm/teq.cgs
new file mode 100644
index 0000000..6c69347
--- /dev/null
+++ b/sim/testsuite/sim/arm/teq.cgs
@@ -0,0 +1,36 @@
+# arm testcase for teq${cond}${set-cc?} $rn,$imm12
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global teq_imm
+teq_imm:
+ teq00 pc,0
+
+ pass
+# arm testcase for teq$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global teq_reg_imm_shift
+teq_reg_imm_shift:
+ teq00 pc,pc,pc,lsl 0
+
+ pass
+# arm testcase for teq$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global teq_reg_reg_shift
+teq_reg_reg_shift:
+ teq00 pc,pc,pc,lsl pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/testutils.inc b/sim/testsuite/sim/arm/testutils.inc
new file mode 100644
index 0000000..ae49db8
--- /dev/null
+++ b/sim/testsuite/sim/arm/testutils.inc
@@ -0,0 +1,118 @@
+# r0-r3 are used as tmps, consider them call clobbered by these macros.
+# This uses the angel rom monitor calls.
+# ??? How do we use the \@ facility of .macros ???
+# @ is the comment char!
+
+ .macro mvi_h_gr reg, val
+ ldr \reg,[pc]
+ b . + 8
+ .word \val
+ .endm
+
+ .macro mvaddr_h_gr reg, addr
+ ldr \reg,[pc]
+ b . + 8
+ .word \addr
+ .endm
+
+ .macro start
+ .data
+failmsg:
+ .asciz "fail\n"
+passmsg:
+ .asciz "pass\n"
+ .text
+
+do_pass:
+ ldr r1, passmsg_addr
+ mov r0, #4
+ swi #0x123456
+ exit 0
+passmsg_addr:
+ .word passmsg
+
+do_fail:
+ ldr r1, failmsg_addr
+ mov r0, #4
+ swi #0x123456
+ exit 1
+failmsg_addr:
+ .word failmsg
+
+ .global _start
+_start:
+ .endm
+
+# *** Other macros know pass/fail are 4 bytes in size! Yuck.
+
+ .macro pass
+ b do_pass
+ .endm
+
+ .macro fail
+ b do_fail
+ .endm
+
+ .macro exit rc
+ # ??? This works with the ARMulator but maybe not others.
+ #mov r0, #\rc
+ #swi #1
+ # This seems to be portable (though it ignores rc).
+ mov r0,#0x18
+ mvi_h_gr r1, 0x20026
+ swi #0x123456
+ # If that returns, punt with a sigill.
+ stc 0,cr0,[r0]
+ .endm
+
+# Other macros know this only clobbers r0.
+# WARNING: It also clobbers the condition codes (FIXME).
+ .macro test_h_gr reg, val
+ mvaddr_h_gr r0, \val
+ cmp \reg, r0
+ beq . + 8
+ fail
+ .endm
+
+ .macro mvi_h_cnvz c, n, v, z
+ mov r0, #0
+ .if \c
+ orr r0, r0, #0x20000000
+ .endif
+ .if \n
+ orr r0, r0, #0x80000000
+ .endif
+ .if \v
+ orr r0, r0, #0x10000000
+ .endif
+ .if \z
+ orr r0, r0, #0x40000000
+ .endif
+ mrs r1, cpsr
+ bic r1, r1, #0xf0000000
+ orr r1, r1, r0
+ msr cpsr, r1
+ # ??? nops needed
+ .endm
+
+# ??? Preserve condition codes?
+ .macro test_h_cnvz c, n, v, z
+ mov r0, #0
+ .if \c
+ orr r0, r0, #0x20000000
+ .endif
+ .if \n
+ orr r0, r0, #0x80000000
+ .endif
+ .if \v
+ orr r0, r0, #0x10000000
+ .endif
+ .if \z
+ orr r0, r0, #0x40000000
+ .endif
+ mrs r1, cpsr
+ and r1, r1, #0xf0000000
+ cmp r0, r1
+ beq . + 8
+ fail
+ .endm
diff --git a/sim/testsuite/sim/arm/thumb/adc.cgs b/sim/testsuite/sim/arm/thumb/adc.cgs
new file mode 100644
index 0000000..58d74c1
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/adc.cgs
@@ -0,0 +1,12 @@
+# arm testcase for adc $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_adc
+alu_adc:
+ adc r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/add-hd-hs.cgs b/sim/testsuite/sim/arm/thumb/add-hd-hs.cgs
new file mode 100644
index 0000000..0307acc
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/add-hd-hs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for add $hd,$hs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global add_hd_hs
+add_hd_hs:
+ add r8,r8
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/add-hd-rs.cgs b/sim/testsuite/sim/arm/thumb/add-hd-rs.cgs
new file mode 100644
index 0000000..ca080f7
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/add-hd-rs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for add $hd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global add_hd_rs
+add_hd_rs:
+ add r8,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/add-rd-hs.cgs b/sim/testsuite/sim/arm/thumb/add-rd-hs.cgs
new file mode 100644
index 0000000..46373a0
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/add-rd-hs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for add $rd,$hs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global add_rd_hs
+add_rd_hs:
+ add r0,r8
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/add-sp.cgs b/sim/testsuite/sim/arm/thumb/add-sp.cgs
new file mode 100644
index 0000000..54efa2a
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/add-sp.cgs
@@ -0,0 +1,12 @@
+# arm testcase for add sp,#$sword7
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global add_sp
+add_sp:
+ add sp,#0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/add.cgs b/sim/testsuite/sim/arm/thumb/add.cgs
new file mode 100644
index 0000000..63cc20c
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/add.cgs
@@ -0,0 +1,12 @@
+# arm testcase for add $rd,$rs,$rn
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global add
+add:
+ add r0,r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/addi.cgs b/sim/testsuite/sim/arm/thumb/addi.cgs
new file mode 100644
index 0000000..00ec76d
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/addi.cgs
@@ -0,0 +1,12 @@
+# arm testcase for add $rd,$rs,#$offset3
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global addi
+addi:
+ add r0,r0,#0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/addi8.cgs b/sim/testsuite/sim/arm/thumb/addi8.cgs
new file mode 100644
index 0000000..d8e9f81
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/addi8.cgs
@@ -0,0 +1,12 @@
+# arm testcase for add ${bit10-rd},#$offset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global addi8
+addi8:
+ add r0,#0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/allthumb.exp b/sim/testsuite/sim/arm/thumb/allthumb.exp
new file mode 100644
index 0000000..9674bca
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/allthumb.exp
@@ -0,0 +1,21 @@
+# ARM simulator testsuite.
+
+if { [istarget arm*-*-*]
+ || [istarget thumb*-*-*] } {
+ # load support procs (none yet)
+ # load_lib cgen.exp
+
+ # all machines
+ set all_machs "arm7tdmi"
+
+ # The .cgs suffix is for "cgen .s".
+ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them,
+ # skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
+ }
+
+ run_sim_test $src $all_machs
+ }
+}
diff --git a/sim/testsuite/sim/arm/thumb/and.cgs b/sim/testsuite/sim/arm/thumb/and.cgs
new file mode 100644
index 0000000..d67adf4
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/and.cgs
@@ -0,0 +1,12 @@
+# arm testcase for and $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_and
+alu_and:
+ and r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/asr.cgs b/sim/testsuite/sim/arm/thumb/asr.cgs
new file mode 100644
index 0000000..4d21dae
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/asr.cgs
@@ -0,0 +1,14 @@
+# arm testcase for asr $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_asr
+alu_asr:
+ asr r0,r0
+
+# FIXME: Also asr $rd,$rs,#$offset5
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/b.cgs b/sim/testsuite/sim/arm/thumb/b.cgs
new file mode 100644
index 0000000..ecae537
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/b.cgs
@@ -0,0 +1,12 @@
+# arm testcase for b $offset11
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global b
+b:
+ b footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bcc.cgs b/sim/testsuite/sim/arm/thumb/bcc.cgs
new file mode 100644
index 0000000..6c84458
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bcc.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bcc $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bcc
+bcc:
+ bcc footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bcs.cgs b/sim/testsuite/sim/arm/thumb/bcs.cgs
new file mode 100644
index 0000000..a29a8fb
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bcs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bcs $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bcs
+bcs:
+ bcs footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/beq.cgs b/sim/testsuite/sim/arm/thumb/beq.cgs
new file mode 100644
index 0000000..33f3748
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/beq.cgs
@@ -0,0 +1,12 @@
+# arm testcase for beq $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global beq
+beq:
+ beq footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bge.cgs b/sim/testsuite/sim/arm/thumb/bge.cgs
new file mode 100644
index 0000000..4eb543d
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bge.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bge $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bge
+bge:
+ bge footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bgt.cgs b/sim/testsuite/sim/arm/thumb/bgt.cgs
new file mode 100644
index 0000000..1ffe092
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bgt.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bgt $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bgt
+bgt:
+ bgt footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bhi.cgs b/sim/testsuite/sim/arm/thumb/bhi.cgs
new file mode 100644
index 0000000..c9811c6
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bhi.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bhi $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bhi
+bhi:
+ bhi footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bic.cgs b/sim/testsuite/sim/arm/thumb/bic.cgs
new file mode 100644
index 0000000..6dca1ef
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bic.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bic $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_bic
+alu_bic:
+ bic r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bl-hi.cgs b/sim/testsuite/sim/arm/thumb/bl-hi.cgs
new file mode 100644
index 0000000..c7400c7
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bl-hi.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bl-hi ${lbwl-hi}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bl_hi
+bl_hi:
+ bl-hi 0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bl-lo.cgs b/sim/testsuite/sim/arm/thumb/bl-lo.cgs
new file mode 100644
index 0000000..ed76613
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bl-lo.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bl-lo ${lbwl-lo}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bl_lo
+bl_lo:
+ bl-lo 0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ble.cgs b/sim/testsuite/sim/arm/thumb/ble.cgs
new file mode 100644
index 0000000..e9c5a8f
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ble.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ble $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ble
+ble:
+ ble footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bls.cgs b/sim/testsuite/sim/arm/thumb/bls.cgs
new file mode 100644
index 0000000..483412b
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bls.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bls $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bls
+bls:
+ bls footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/blt.cgs b/sim/testsuite/sim/arm/thumb/blt.cgs
new file mode 100644
index 0000000..0fbcbe8
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/blt.cgs
@@ -0,0 +1,12 @@
+# arm testcase for blt $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global blt
+blt:
+ blt footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bmi.cgs b/sim/testsuite/sim/arm/thumb/bmi.cgs
new file mode 100644
index 0000000..8f7558a
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bmi.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bmi $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bmi
+bmi:
+ bmi footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bne.cgs b/sim/testsuite/sim/arm/thumb/bne.cgs
new file mode 100644
index 0000000..a5ac348
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bne.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bne $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bne
+bne:
+ bne footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bpl.cgs b/sim/testsuite/sim/arm/thumb/bpl.cgs
new file mode 100644
index 0000000..8f64259
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bpl.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bpl $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bpl
+bpl:
+ bpl footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bvc.cgs b/sim/testsuite/sim/arm/thumb/bvc.cgs
new file mode 100644
index 0000000..bbd3af5
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bvc.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bvc $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bvc
+bvc:
+ bvc footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bvs.cgs b/sim/testsuite/sim/arm/thumb/bvs.cgs
new file mode 100644
index 0000000..8c9a551
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bvs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bvs $soffset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bvs
+bvs:
+ bvs footext
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bx-hs.cgs b/sim/testsuite/sim/arm/thumb/bx-hs.cgs
new file mode 100644
index 0000000..d963387
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bx-hs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bx $hs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bx_hs
+bx_hs:
+ bx r8
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/bx-rs.cgs b/sim/testsuite/sim/arm/thumb/bx-rs.cgs
new file mode 100644
index 0000000..f6db8c8
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/bx-rs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for bx $rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global bx_rs
+bx_rs:
+ bx r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/cmn.cgs b/sim/testsuite/sim/arm/thumb/cmn.cgs
new file mode 100644
index 0000000..96d53a1
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/cmn.cgs
@@ -0,0 +1,12 @@
+# arm testcase for cmn $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_cmn
+alu_cmn:
+ cmn r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/cmp-hd-hs.cgs b/sim/testsuite/sim/arm/thumb/cmp-hd-hs.cgs
new file mode 100644
index 0000000..96a91a2
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/cmp-hd-hs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for cmp $hd,$hs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global cmp_hd_hs
+cmp_hd_hs:
+ cmp r8,r8
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/cmp-hd-rs.cgs b/sim/testsuite/sim/arm/thumb/cmp-hd-rs.cgs
new file mode 100644
index 0000000..9fc4875
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/cmp-hd-rs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for cmp $hd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global cmp_hd_rs
+cmp_hd_rs:
+ cmp r8,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/cmp-rd-hs.cgs b/sim/testsuite/sim/arm/thumb/cmp-rd-hs.cgs
new file mode 100644
index 0000000..e3f7a4a
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/cmp-rd-hs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for cmp $rd,$hs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global cmp_rd_hs
+cmp_rd_hs:
+ cmp r0,r8
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/cmp.cgs b/sim/testsuite/sim/arm/thumb/cmp.cgs
new file mode 100644
index 0000000..7564099
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/cmp.cgs
@@ -0,0 +1,14 @@
+# arm testcase for cmp ${bit10-rd},#$offset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global cmp
+cmp:
+ cmp r0,#0
+
+# FIXME: Also: cmp $rd,$rs
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/eor.cgs b/sim/testsuite/sim/arm/thumb/eor.cgs
new file mode 100644
index 0000000..cc6021c
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/eor.cgs
@@ -0,0 +1,12 @@
+# arm testcase for eor $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_eor
+alu_eor:
+ eor r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/lda-pc.cgs b/sim/testsuite/sim/arm/thumb/lda-pc.cgs
new file mode 100644
index 0000000..74407e2
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/lda-pc.cgs
@@ -0,0 +1,12 @@
+# arm testcase for add ${bit10-rd},pc,$word8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global lda_pc
+lda_pc:
+ add r0,pc,0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/lda-sp.cgs b/sim/testsuite/sim/arm/thumb/lda-sp.cgs
new file mode 100644
index 0000000..ce2b62e
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/lda-sp.cgs
@@ -0,0 +1,12 @@
+# arm testcase for add ${bit10-rd},sp,$word8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global lda_sp
+lda_sp:
+ add r0,sp,0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ldmia.cgs b/sim/testsuite/sim/arm/thumb/ldmia.cgs
new file mode 100644
index 0000000..550031e
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ldmia.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ldmia $rb!,{$rlist}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldmia
+ldmia:
+ ldmia r0!,{0}
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ldr-imm.cgs b/sim/testsuite/sim/arm/thumb/ldr-imm.cgs
new file mode 100644
index 0000000..a757f33
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ldr-imm.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ldr $rd,[$rb,#${offset5-7}]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_imm
+ldr_imm:
+ ldr r0,[r0,#0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ldr-pc.cgs b/sim/testsuite/sim/arm/thumb/ldr-pc.cgs
new file mode 100644
index 0000000..8227562
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ldr-pc.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ldr ${bit10-rd},[pc,#$word8]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_pc
+ldr_pc:
+ ldr r0,[pc,#0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ldr-sprel.cgs b/sim/testsuite/sim/arm/thumb/ldr-sprel.cgs
new file mode 100644
index 0000000..11eee26
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ldr-sprel.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ldr ${bit10-rd},[sp,#$word8]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr_sprel
+ldr_sprel:
+ ldr r0,[sp,#0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ldr.cgs b/sim/testsuite/sim/arm/thumb/ldr.cgs
new file mode 100644
index 0000000..03af925
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ldr.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ldr $rd,[$rb,$ro]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldr
+ldr:
+ ldr r0,[r0,r0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ldrb-imm.cgs b/sim/testsuite/sim/arm/thumb/ldrb-imm.cgs
new file mode 100644
index 0000000..c1eeafe
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ldrb-imm.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ldrb $rd,[$rb,#$offset5]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb_imm
+ldrb_imm:
+ ldrb r0,[r0,#0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ldrb.cgs b/sim/testsuite/sim/arm/thumb/ldrb.cgs
new file mode 100644
index 0000000..316a10f
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ldrb.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ldrb $rd,[$rb,$ro]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrb
+ldrb:
+ ldrb r0,[r0,r0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ldrh-imm.cgs b/sim/testsuite/sim/arm/thumb/ldrh-imm.cgs
new file mode 100644
index 0000000..81ea1e0
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ldrh-imm.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ldrh $rd,[$rb,#${offset5-6}]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh_imm
+ldrh_imm:
+ ldrh r0,[r0,#0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ldrh.cgs b/sim/testsuite/sim/arm/thumb/ldrh.cgs
new file mode 100644
index 0000000..3ff8f4e
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ldrh.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ldrh $rd,[$rb,$ro]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldrh
+ldrh:
+ ldrh r0,[r0,r0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ldsb.cgs b/sim/testsuite/sim/arm/thumb/ldsb.cgs
new file mode 100644
index 0000000..e1612c9
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ldsb.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ldsb $rd,[$rb,$ro]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldsb
+ldsb:
+ ldsb r0,[r0,r0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ldsh.cgs b/sim/testsuite/sim/arm/thumb/ldsh.cgs
new file mode 100644
index 0000000..46d49ac
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ldsh.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ldsh $rd,[$rb,$ro]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global ldsh
+ldsh:
+ ldsh r0,[r0,r0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/lsl.cgs b/sim/testsuite/sim/arm/thumb/lsl.cgs
new file mode 100644
index 0000000..05222e7
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/lsl.cgs
@@ -0,0 +1,14 @@
+# arm testcase for lsl $rd,$rs,#$offset5
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global lsl
+lsl:
+ lsl r0,r0,#0
+
+# FIXME: Also lsl $rd,$rs
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/lsr.cgs b/sim/testsuite/sim/arm/thumb/lsr.cgs
new file mode 100644
index 0000000..fe38fe0
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/lsr.cgs
@@ -0,0 +1,14 @@
+# arm testcase for lsr $rd,$rs,#$offset5
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global lsr
+lsr:
+ lsr r0,r0,#0
+
+# FIXME: Also lsr $rd,$rs
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/mov-hd-hs.cgs b/sim/testsuite/sim/arm/thumb/mov-hd-hs.cgs
new file mode 100644
index 0000000..2050908
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/mov-hd-hs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for mov $hd,$hs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mov_hd_hs
+mov_hd_hs:
+ mov r8,r8
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/mov-hd-rs.cgs b/sim/testsuite/sim/arm/thumb/mov-hd-rs.cgs
new file mode 100644
index 0000000..3d229c3
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/mov-hd-rs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for mov $hd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mov_hd_rs
+mov_hd_rs:
+ mov r8,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/mov-rd-hs.cgs b/sim/testsuite/sim/arm/thumb/mov-rd-hs.cgs
new file mode 100644
index 0000000..0661dfa
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/mov-rd-hs.cgs
@@ -0,0 +1,12 @@
+# arm testcase for mov $rd,$hs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mov_rd_hs
+mov_rd_hs:
+ mov r0,r8
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/mov.cgs b/sim/testsuite/sim/arm/thumb/mov.cgs
new file mode 100644
index 0000000..b497b0f
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/mov.cgs
@@ -0,0 +1,12 @@
+# arm testcase for mov ${bit10-rd},#$offset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global mov
+mov:
+ mov r0,#0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/mul.cgs b/sim/testsuite/sim/arm/thumb/mul.cgs
new file mode 100644
index 0000000..d160c56
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/mul.cgs
@@ -0,0 +1,12 @@
+# arm testcase for mul $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_mul
+alu_mul:
+ mul r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/mvn.cgs b/sim/testsuite/sim/arm/thumb/mvn.cgs
new file mode 100644
index 0000000..606ce85
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/mvn.cgs
@@ -0,0 +1,12 @@
+# arm testcase for mvn $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_mvn
+alu_mvn:
+ mvn r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/neg.cgs b/sim/testsuite/sim/arm/thumb/neg.cgs
new file mode 100644
index 0000000..09f0c81
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/neg.cgs
@@ -0,0 +1,12 @@
+# arm testcase for neg $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_neg
+alu_neg:
+ neg r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/orr.cgs b/sim/testsuite/sim/arm/thumb/orr.cgs
new file mode 100644
index 0000000..de6f688
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/orr.cgs
@@ -0,0 +1,12 @@
+# arm testcase for orr $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_orr
+alu_orr:
+ orr r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/pop-pc.cgs b/sim/testsuite/sim/arm/thumb/pop-pc.cgs
new file mode 100644
index 0000000..4579cad
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/pop-pc.cgs
@@ -0,0 +1,12 @@
+# arm testcase for pop {${rlist-pc}}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global pop_pc
+pop_pc:
+ pop {0}
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/pop.cgs b/sim/testsuite/sim/arm/thumb/pop.cgs
new file mode 100644
index 0000000..b156e1d
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/pop.cgs
@@ -0,0 +1,12 @@
+# arm testcase for pop {$rlist}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global pop
+pop:
+ pop {0}
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/push-lr.cgs b/sim/testsuite/sim/arm/thumb/push-lr.cgs
new file mode 100644
index 0000000..ee700a4
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/push-lr.cgs
@@ -0,0 +1,12 @@
+# arm testcase for push {${rlist-lr}}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global push_lr
+push_lr:
+ push {0}
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/push.cgs b/sim/testsuite/sim/arm/thumb/push.cgs
new file mode 100644
index 0000000..ff94ca5
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/push.cgs
@@ -0,0 +1,12 @@
+# arm testcase for push {$rlist}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global push
+push:
+ push {0}
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/ror.cgs b/sim/testsuite/sim/arm/thumb/ror.cgs
new file mode 100644
index 0000000..991fa66
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/ror.cgs
@@ -0,0 +1,12 @@
+# arm testcase for ror $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_ror
+alu_ror:
+ ror r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/sbc.cgs b/sim/testsuite/sim/arm/thumb/sbc.cgs
new file mode 100644
index 0000000..078b061
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/sbc.cgs
@@ -0,0 +1,12 @@
+# arm testcase for sbc $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_sbc
+alu_sbc:
+ sbc r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/stmia.cgs b/sim/testsuite/sim/arm/thumb/stmia.cgs
new file mode 100644
index 0000000..0e1c30c
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/stmia.cgs
@@ -0,0 +1,12 @@
+# arm testcase for stmia $rb!,{$rlist}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global stmia
+stmia:
+ stmia r0!,{0}
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/str-imm.cgs b/sim/testsuite/sim/arm/thumb/str-imm.cgs
new file mode 100644
index 0000000..ce75941
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/str-imm.cgs
@@ -0,0 +1,12 @@
+# arm testcase for str $rd,[$rb,#${offset5-7}]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_imm
+str_imm:
+ str r0,[r0,#0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/str-sprel.cgs b/sim/testsuite/sim/arm/thumb/str-sprel.cgs
new file mode 100644
index 0000000..132edfb
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/str-sprel.cgs
@@ -0,0 +1,12 @@
+# arm testcase for str ${bit10-rd},[sp,#$word8]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str_sprel
+str_sprel:
+ str r0,[sp,#0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/str.cgs b/sim/testsuite/sim/arm/thumb/str.cgs
new file mode 100644
index 0000000..073e20b
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/str.cgs
@@ -0,0 +1,12 @@
+# arm testcase for str $rd,[$rb,$ro]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global str
+str:
+ str r0,[r0,r0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/strb-imm.cgs b/sim/testsuite/sim/arm/thumb/strb-imm.cgs
new file mode 100644
index 0000000..2b5bcf7
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/strb-imm.cgs
@@ -0,0 +1,12 @@
+# arm testcase for strb $rd,[$rb,#$offset5]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb_imm
+strb_imm:
+ strb r0,[r0,#0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/strb.cgs b/sim/testsuite/sim/arm/thumb/strb.cgs
new file mode 100644
index 0000000..b7cb763
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/strb.cgs
@@ -0,0 +1,12 @@
+# arm testcase for strb $rd,[$rb,$ro]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strb
+strb:
+ strb r0,[r0,r0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/strh-imm.cgs b/sim/testsuite/sim/arm/thumb/strh-imm.cgs
new file mode 100644
index 0000000..9500288
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/strh-imm.cgs
@@ -0,0 +1,12 @@
+# arm testcase for strh $rd,[$rb,#${offset5-6}]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh_imm
+strh_imm:
+ strh r0,[r0,#0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/strh.cgs b/sim/testsuite/sim/arm/thumb/strh.cgs
new file mode 100644
index 0000000..13f3a0d
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/strh.cgs
@@ -0,0 +1,12 @@
+# arm testcase for strh $rd,[$rb,$ro]
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global strh
+strh:
+ strh r0,[r0,r0]
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/sub-sp.cgs b/sim/testsuite/sim/arm/thumb/sub-sp.cgs
new file mode 100644
index 0000000..e676f58
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/sub-sp.cgs
@@ -0,0 +1,12 @@
+# arm testcase for add sp,#-$sword7
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global sub_sp
+sub_sp:
+ add sp,#-0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/sub.cgs b/sim/testsuite/sim/arm/thumb/sub.cgs
new file mode 100644
index 0000000..91cd7ab
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/sub.cgs
@@ -0,0 +1,12 @@
+# arm testcase for sub $rd,$rs,$rn
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global sub
+sub:
+ sub r0,r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/subi.cgs b/sim/testsuite/sim/arm/thumb/subi.cgs
new file mode 100644
index 0000000..044efd0
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/subi.cgs
@@ -0,0 +1,12 @@
+# arm testcase for sub $rd,$rs,#$offset3
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global subi
+subi:
+ sub r0,r0,#0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/subi8.cgs b/sim/testsuite/sim/arm/thumb/subi8.cgs
new file mode 100644
index 0000000..0c4d717
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/subi8.cgs
@@ -0,0 +1,12 @@
+# arm testcase for sub ${bit10-rd},#$offset8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global subi8
+subi8:
+ sub r0,#0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/swi.cgs b/sim/testsuite/sim/arm/thumb/swi.cgs
new file mode 100644
index 0000000..1724c14
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/swi.cgs
@@ -0,0 +1,12 @@
+# arm testcase for swi $value8
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global swi
+swi:
+ swi 0
+
+ pass
diff --git a/sim/testsuite/sim/arm/thumb/testutils.inc b/sim/testsuite/sim/arm/thumb/testutils.inc
new file mode 100644
index 0000000..bdae29b
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/testutils.inc
@@ -0,0 +1,91 @@
+# FIXME: wip, copied from ../testutils.inc
+# r0-r3 are used as tmps, consider them call clobbered by these macros.
+# This uses the angel rom monitor calls.
+# ??? How do we use the \@ facility of .macros ???
+# @ is the comment char!
+
+ .macro a_mvi_h_gr reg, val
+ ldr \reg,[pc]
+ b . + 8
+ .word \val
+ .endm
+
+ .macro mvaddr_h_gr reg, addr
+ ldr \reg,[pc]
+ b . + 8
+ .word \val
+ .endm
+
+ .macro start
+ .data
+failmsg:
+ .asciz "fail\n"
+passmsg:
+ .asciz "pass\n"
+ .text
+
+do_pass:
+ ldr r1, passmsg_addr
+ mov r0, #4
+ swi #0x123456
+ exit 0
+passmsg_addr:
+ .word passmsg
+
+do_fail:
+ ldr r1, failmsg_addr
+ mov r0, #4
+ swi #0x123456
+ exit 1
+failmsg_addr:
+ .word failmsg
+
+ .global _start
+_start:
+ .endm
+
+# *** Other macros know pass/fail are 4 bytes in size! Yuck.
+
+ .macro pass
+ b do_pass
+ .endm
+
+ .macro fail
+ b do_fail
+ .endm
+
+ .macro exit rc
+ mov r1, #\rc
+ mov r0, #0x2a @ decimal 42
+ swi #1
+ # If that returns, punt with a sigill.
+ stc 0,cr0,[r0]
+ .endm
+
+# Other macros know this only clobbers r0.
+ .macro test_h_gr reg, val
+ mvaddr_h_gr r0, \val
+ cmp \reg, r0
+ beq . + 8
+ fail
+ .endm
+
+ .macro mvi_h_cc c, n, v, z
+ ldi8 r0, 0
+ ldi8 r1, 1
+ .if xxx
+ cmp r0, r1
+ .else
+ cmp r1, r0
+ .endif
+ .endm
+
+ .macro test_h_cc c, n, v, z
+ .if xxx
+ bc . + 8
+ fail
+ .else
+ bnc . + 8
+ fail
+ .endif
+ .endm
diff --git a/sim/testsuite/sim/arm/thumb/tst.cgs b/sim/testsuite/sim/arm/thumb/tst.cgs
new file mode 100644
index 0000000..068fccc
--- /dev/null
+++ b/sim/testsuite/sim/arm/thumb/tst.cgs
@@ -0,0 +1,12 @@
+# arm testcase for tst $rd,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global alu_tst
+alu_tst:
+ tst r0,r0
+
+ pass
diff --git a/sim/testsuite/sim/arm/tst.cgs b/sim/testsuite/sim/arm/tst.cgs
new file mode 100644
index 0000000..f071707
--- /dev/null
+++ b/sim/testsuite/sim/arm/tst.cgs
@@ -0,0 +1,36 @@
+# arm testcase for tst${cond}${set-cc?} $rn,$imm12
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global tst_imm
+tst_imm:
+ tst00 pc,0
+
+ pass
+# arm testcase for tst$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftimm}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global tst_reg_imm_shift
+tst_reg_imm_shift:
+ tst00 pc,pc,pc,lsl 0
+
+ pass
+# arm testcase for tst$cond${set-cc?} $rd,$rn,$rm,${operand2-shifttype} ${operand2-shiftreg}
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global tst_reg_reg_shift
+tst_reg_reg_shift:
+ tst00 pc,pc,pc,lsl pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/umlal.cgs b/sim/testsuite/sim/arm/umlal.cgs
new file mode 100644
index 0000000..1c17fb6
--- /dev/null
+++ b/sim/testsuite/sim/arm/umlal.cgs
@@ -0,0 +1,12 @@
+# arm testcase for umlal$cond${set-cc?} $rdlo,$rdhi,$rm,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global umlal
+umlal:
+ umlal00 pc,pc,pc,pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/umull.cgs b/sim/testsuite/sim/arm/umull.cgs
new file mode 100644
index 0000000..a58541c
--- /dev/null
+++ b/sim/testsuite/sim/arm/umull.cgs
@@ -0,0 +1,12 @@
+# arm testcase for umull$cond${set-cc?} $rdlo,$rdhi,$rm,$rs
+# mach: unfinished
+
+ .include "testutils.inc"
+
+ start
+
+ .global umull
+umull:
+ umull00 pc,pc,pc,pc
+
+ pass
diff --git a/sim/testsuite/sim/arm/xscale/blx.cgs b/sim/testsuite/sim/arm/xscale/blx.cgs
new file mode 100644
index 0000000..854647b
--- /dev/null
+++ b/sim/testsuite/sim/arm/xscale/blx.cgs
@@ -0,0 +1,31 @@
+# arm testcase for bl$cond $offset24
+# mach: all
+
+ .include "testutils.inc"
+
+ start
+
+ .arm
+ blx thumb
+
+ .thumb
+ .thumb_func
+thumb:
+ nop
+ blx next
+ blx PASS
+ nop
+ nop
+
+ .section text1, "ax"
+ .arm
+next:
+ add r0, r1, r0
+ bx lr
+
+FAIL:
+ fail
+PASS:
+ pass
+
+
diff --git a/sim/testsuite/sim/arm/xscale/mia.cgs b/sim/testsuite/sim/arm/xscale/mia.cgs
new file mode 100644
index 0000000..a3f729e
--- /dev/null
+++ b/sim/testsuite/sim/arm/xscale/mia.cgs
@@ -0,0 +1,35 @@
+# XSCALE testcase for MIA
+# mach: xscale
+# as: -mcpu=xscale
+
+ .include "testutils.inc"
+
+ start
+
+ .global mia
+mia:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Multilply Accumulate
+
+ mvi_h_gr r0, 0x11223344
+ mvi_h_gr r1, 0x55667788
+ mvi_h_gr r2, 0x12345678
+ mvi_h_gr r3, 0x9abcdef0
+
+ mar acc0, r0, r1
+
+ mia acc0, r2, r3
+
+ mra r0, r1, acc0
+
+ test_h_gr r0, 0x354f53c4
+ test_h_gr r1, 0x4e330b5e
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ pass
diff --git a/sim/testsuite/sim/arm/xscale/miaph.cgs b/sim/testsuite/sim/arm/xscale/miaph.cgs
new file mode 100644
index 0000000..53fb201
--- /dev/null
+++ b/sim/testsuite/sim/arm/xscale/miaph.cgs
@@ -0,0 +1,35 @@
+# XSCALE testcase for MIAPH
+# mach: xscale
+# as: -mcpu=xscale
+
+ .include "testutils.inc"
+
+ start
+
+ .global miaph
+miaph:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Multilply Accumulate
+
+ mvi_h_gr r0, 0x11223344
+ mvi_h_gr r1, 0x55667788
+ mvi_h_gr r2, 0x12345678
+ mvi_h_gr r3, 0x9abcdef0
+
+ mar acc0, r0, r1
+
+ miaph acc0, r2, r3
+
+ mra r0, r1, acc0
+
+ test_h_gr r0, 0xfec3f9f4
+ test_h_gr r1, 0x55667787
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ pass
diff --git a/sim/testsuite/sim/arm/xscale/miaxy.cgs b/sim/testsuite/sim/arm/xscale/miaxy.cgs
new file mode 100644
index 0000000..624564e
--- /dev/null
+++ b/sim/testsuite/sim/arm/xscale/miaxy.cgs
@@ -0,0 +1,89 @@
+# XSCALE testcase for MIAxy
+# mach: xscale
+# as: -mcpu=xscale
+
+ .include "testutils.inc"
+
+ start
+
+ .global miaXY
+miaXY:
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ # Test Bottom Bottom Multilply Accumulate
+
+ mvi_h_gr r0, 0x11223344
+ mvi_h_gr r1, 0x55667788
+ mvi_h_gr r2, 0x12345678
+ mvi_h_gr r3, 0x9abcdef0
+
+ mar acc0, r0, r1
+
+ miaBB acc0, r2, r3
+
+ mra r0, r1, acc0
+
+ test_h_gr r0, 0x05f753c4
+ test_h_gr r1, 0x55667788
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ # Test Bottom Top Multilply Accumulate
+
+ mvi_h_gr r0, 0x11223344
+ mvi_h_gr r1, 0x55667788
+ mvi_h_gr r2, 0x12345678
+ mvi_h_gr r3, 0x9abcdef0
+
+ mar acc0, r0, r1
+
+ miaBT acc0, r2, r3
+
+ mra r0, r1, acc0
+
+ test_h_gr r0, 0xeeede364
+ test_h_gr r1, 0x55667787
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ # Test Top Bottom Multilply Accumulate
+
+ mvi_h_gr r0, 0x11223344
+ mvi_h_gr r1, 0x55667788
+ mvi_h_gr r2, 0x12345678
+ mvi_h_gr r3, 0x9abcdef0
+
+ mar acc0, r0, r1
+
+ miaTB acc0, r2, r3
+
+ mra r0, r1, acc0
+
+ test_h_gr r0, 0x0ec85c04
+ test_h_gr r1, 0x55667788
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ # Test Top Top Multilply Accumulate
+
+ mvi_h_gr r0, 0x11223344
+ mvi_h_gr r1, 0x55667788
+ mvi_h_gr r2, 0x12345678
+ mvi_h_gr r3, 0x9abcdef0
+
+ mar acc0, r0, r1
+
+ miaTT acc0, r2, r3
+
+ mra r0, r1, acc0
+
+ test_h_gr r0, 0x09eed974
+ test_h_gr r1, 0x55667788
+ test_h_gr r2, 0x12345678
+ test_h_gr r3, 0x9abcdef0
+
+ pass
diff --git a/sim/testsuite/sim/arm/xscale/mra.cgs b/sim/testsuite/sim/arm/xscale/mra.cgs
new file mode 100644
index 0000000..be4d9df
--- /dev/null
+++ b/sim/testsuite/sim/arm/xscale/mra.cgs
@@ -0,0 +1,30 @@
+# XScale testcase for MAR and MRA
+# mach: xscale
+# as: -mcpu=xscale
+
+ .include "testutils.inc"
+
+ start
+
+ .global mar_mra
+mar_mra:
+ mvi_h_gr r2,0
+ mvi_h_gr r3,0
+ mvi_h_gr r4,0x0000EFA0
+ mvi_h_gr r5,0xA0A0A0A0
+
+ # Enable access to CoProcessors 0 & 1 before
+ # we attempt these instructions.
+
+ mvi_h_gr r1, 3
+ mcr p15, 0, r1, cr15, cr1, 0
+
+ mar acc0, r5, r4
+ mra r2, r3, acc0
+
+ test_h_gr r2,0xA0A0A0A0
+ test_h_gr r3,0x0000EFA0
+ test_h_gr r4,0x0000EFA0
+ test_h_gr r5,0xA0A0A0A0
+
+ pass
diff --git a/sim/testsuite/sim/arm/xscale/testutils.inc b/sim/testsuite/sim/arm/xscale/testutils.inc
new file mode 100644
index 0000000..ae49db8
--- /dev/null
+++ b/sim/testsuite/sim/arm/xscale/testutils.inc
@@ -0,0 +1,118 @@
+# r0-r3 are used as tmps, consider them call clobbered by these macros.
+# This uses the angel rom monitor calls.
+# ??? How do we use the \@ facility of .macros ???
+# @ is the comment char!
+
+ .macro mvi_h_gr reg, val
+ ldr \reg,[pc]
+ b . + 8
+ .word \val
+ .endm
+
+ .macro mvaddr_h_gr reg, addr
+ ldr \reg,[pc]
+ b . + 8
+ .word \addr
+ .endm
+
+ .macro start
+ .data
+failmsg:
+ .asciz "fail\n"
+passmsg:
+ .asciz "pass\n"
+ .text
+
+do_pass:
+ ldr r1, passmsg_addr
+ mov r0, #4
+ swi #0x123456
+ exit 0
+passmsg_addr:
+ .word passmsg
+
+do_fail:
+ ldr r1, failmsg_addr
+ mov r0, #4
+ swi #0x123456
+ exit 1
+failmsg_addr:
+ .word failmsg
+
+ .global _start
+_start:
+ .endm
+
+# *** Other macros know pass/fail are 4 bytes in size! Yuck.
+
+ .macro pass
+ b do_pass
+ .endm
+
+ .macro fail
+ b do_fail
+ .endm
+
+ .macro exit rc
+ # ??? This works with the ARMulator but maybe not others.
+ #mov r0, #\rc
+ #swi #1
+ # This seems to be portable (though it ignores rc).
+ mov r0,#0x18
+ mvi_h_gr r1, 0x20026
+ swi #0x123456
+ # If that returns, punt with a sigill.
+ stc 0,cr0,[r0]
+ .endm
+
+# Other macros know this only clobbers r0.
+# WARNING: It also clobbers the condition codes (FIXME).
+ .macro test_h_gr reg, val
+ mvaddr_h_gr r0, \val
+ cmp \reg, r0
+ beq . + 8
+ fail
+ .endm
+
+ .macro mvi_h_cnvz c, n, v, z
+ mov r0, #0
+ .if \c
+ orr r0, r0, #0x20000000
+ .endif
+ .if \n
+ orr r0, r0, #0x80000000
+ .endif
+ .if \v
+ orr r0, r0, #0x10000000
+ .endif
+ .if \z
+ orr r0, r0, #0x40000000
+ .endif
+ mrs r1, cpsr
+ bic r1, r1, #0xf0000000
+ orr r1, r1, r0
+ msr cpsr, r1
+ # ??? nops needed
+ .endm
+
+# ??? Preserve condition codes?
+ .macro test_h_cnvz c, n, v, z
+ mov r0, #0
+ .if \c
+ orr r0, r0, #0x20000000
+ .endif
+ .if \n
+ orr r0, r0, #0x80000000
+ .endif
+ .if \v
+ orr r0, r0, #0x10000000
+ .endif
+ .if \z
+ orr r0, r0, #0x40000000
+ .endif
+ mrs r1, cpsr
+ and r1, r1, #0xf0000000
+ cmp r0, r1
+ beq . + 8
+ fail
+ .endm
diff --git a/sim/testsuite/sim/arm/xscale/xscale.exp b/sim/testsuite/sim/arm/xscale/xscale.exp
new file mode 100644
index 0000000..3756929
--- /dev/null
+++ b/sim/testsuite/sim/arm/xscale/xscale.exp
@@ -0,0 +1,28 @@
+# XSCALE simulator testsuite.
+
+if { [istarget xscale*-*-*] } {
+ # load support procs (none yet)
+ # load_lib cgen.exp
+
+ # all machines
+ set all_machs "xscale"
+
+ if [is_remote host] {
+ remote_download host $srcdir/$subdir/testutils.inc
+ }
+
+ # The .cgs suffix is for "cgen .s".
+ foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.cgs]] {
+ # If we're only testing specific files and this isn't one of them,
+ # skip it.
+ if ![runtest_file_p $runtests $src] {
+ continue
+ }
+
+ run_sim_test $src $all_machs
+ }
+
+ if [is_remote host] {
+ remote_file host delete testutils.inc
+ }
+}