From 252b5132c753830d5fd56823373aed85f2a0db63 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Mon, 3 May 1999 07:29:11 +0000 Subject: 19990502 sourceware import --- gas/testsuite/gas/arm/arch4t.s | 21 ++++ gas/testsuite/gas/arm/arm.exp | 34 +++++++ gas/testsuite/gas/arm/arm3.s | 6 ++ gas/testsuite/gas/arm/arm6.s | 12 +++ gas/testsuite/gas/arm/arm7dm.s | 12 +++ gas/testsuite/gas/arm/arm7t.d | 68 +++++++++++++ gas/testsuite/gas/arm/arm7t.s | 79 +++++++++++++++ gas/testsuite/gas/arm/copro.s | 24 +++++ gas/testsuite/gas/arm/float.s | 162 +++++++++++++++++++++++++++++++ gas/testsuite/gas/arm/immed.s | 11 +++ gas/testsuite/gas/arm/inst.d | 168 ++++++++++++++++++++++++++++++++ gas/testsuite/gas/arm/inst.s | 189 ++++++++++++++++++++++++++++++++++++ gas/testsuite/gas/arm/le-fpconst.d | 8 ++ gas/testsuite/gas/arm/le-fpconst.s | 8 ++ gas/testsuite/gas/arm/thumb.s | 193 +++++++++++++++++++++++++++++++++++++ 15 files changed, 995 insertions(+) create mode 100644 gas/testsuite/gas/arm/arch4t.s create mode 100644 gas/testsuite/gas/arm/arm.exp create mode 100644 gas/testsuite/gas/arm/arm3.s create mode 100644 gas/testsuite/gas/arm/arm6.s create mode 100644 gas/testsuite/gas/arm/arm7dm.s create mode 100644 gas/testsuite/gas/arm/arm7t.d create mode 100644 gas/testsuite/gas/arm/arm7t.s create mode 100644 gas/testsuite/gas/arm/copro.s create mode 100644 gas/testsuite/gas/arm/float.s create mode 100644 gas/testsuite/gas/arm/immed.s create mode 100644 gas/testsuite/gas/arm/inst.d create mode 100644 gas/testsuite/gas/arm/inst.s create mode 100644 gas/testsuite/gas/arm/le-fpconst.d create mode 100644 gas/testsuite/gas/arm/le-fpconst.s create mode 100644 gas/testsuite/gas/arm/thumb.s (limited to 'gas/testsuite/gas/arm') diff --git a/gas/testsuite/gas/arm/arch4t.s b/gas/testsuite/gas/arm/arch4t.s new file mode 100644 index 00000000000..8d28f7f3ec1 --- /dev/null +++ b/gas/testsuite/gas/arm/arch4t.s @@ -0,0 +1,21 @@ +.text +.align 0 + + bx r0 + bxeq r1 + +foo: + ldrh r3, foo + ldrsh r4, [r5] + ldrsb r4, [r1, r3] + ldrsh r1, [r4, r4]! + ldreqsb r1, [r5, -r3] + ldrneh r2, [r6], r7 + ldrccsh r2, [r7], +r8 + ldrsb r2, [r3, #255] + ldrsh r1, [r4, #-250] + ldrsb r1, [r5, #+240] + + strh r2, bar + strneh r3, [r3] +bar: diff --git a/gas/testsuite/gas/arm/arm.exp b/gas/testsuite/gas/arm/arm.exp new file mode 100644 index 00000000000..f21c54df310 --- /dev/null +++ b/gas/testsuite/gas/arm/arm.exp @@ -0,0 +1,34 @@ +# +# Some ARM tests +# +if [istarget arm-*-*] then { + run_dump_test "inst" + + gas_test "arm3.s" "" $stdoptlist "Arm 3 instructions" + + gas_test "arm6.s" "" $stdoptlist "Arm 6 instructions" + + gas_test "arm7dm.s" "" $stdoptlist "Arm 7DM instructions" + + run_dump_test "arm7t" + + gas_test "thumb.s" "" $stdoptlist "Thumb instructions" + + gas_test "arch4t.s" "" $stdoptlist "Arm architecture 4t instructions" + + gas_test "copro.s" "" $stdoptlist "Co processor instructions" + + gas_test "immed.s" "" $stdoptlist "immediate expressions" + + gas_test "float.s" "" $stdoptlist "Core floating point instructions" +} + +# Not all arm targets are bi-endian, so only run this test on ones +# we know that are. FIXME: We should probably also key off armeb/armel. + +if [istarget arm-*-pe] { + run_dump_test "le-fpconst" + + # Since big-endian numbers have the normal format, this doesn't exist. + #run_dump_test "be-fpconst" +} diff --git a/gas/testsuite/gas/arm/arm3.s b/gas/testsuite/gas/arm/arm3.s new file mode 100644 index 00000000000..ebcf915ccb1 --- /dev/null +++ b/gas/testsuite/gas/arm/arm3.s @@ -0,0 +1,6 @@ +.text +.align 0 + swp r0, r1, [r8] + swpb r2, r3, [r3] + swpgeb r4, r1, [r4] + diff --git a/gas/testsuite/gas/arm/arm6.s b/gas/testsuite/gas/arm/arm6.s new file mode 100644 index 00000000000..4b517129c62 --- /dev/null +++ b/gas/testsuite/gas/arm/arm6.s @@ -0,0 +1,12 @@ +.text +.align 0 + + mrs r8, cpsr + mrseq r9, cpsr_all + mrs r2, spsr + + msr cpsr, r1 + msrne cpsr_flg, #0xf0000000 + msr spsr_flg, r8 + msr spsr_all, r9 + diff --git a/gas/testsuite/gas/arm/arm7dm.s b/gas/testsuite/gas/arm/arm7dm.s new file mode 100644 index 00000000000..7496c70e987 --- /dev/null +++ b/gas/testsuite/gas/arm/arm7dm.s @@ -0,0 +1,12 @@ +.text +.align 0 + + smull r0, r1, r2, r3 + umull r0, r1, r2, r3 + smlal r0, r1, r2, r3 + umlal r0, r1, r4, r3 + + smullne r0, r1, r3, r4 + smulls r1, r0, r9, r11 + umlaleqs r2, r9, r4, r9 + smlalge r14, r10, r8, r14 diff --git a/gas/testsuite/gas/arm/arm7t.d b/gas/testsuite/gas/arm/arm7t.d new file mode 100644 index 00000000000..143a161cd29 --- /dev/null +++ b/gas/testsuite/gas/arm/arm7t.d @@ -0,0 +1,68 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: ARM arm7t +#as: -marm7t -EL + +# Test the halfword and signextend memory transfers: + +.*: +file format .*arm.* + +Disassembly of section .text: +00000000 <[^>]*> e1d100b0 ? ldrh r0, \[r1\] +00000004 <[^>]*> e1f100b0 ? ldrh r0, \[r1\]! +00000008 <[^>]*> e19100b2 ? ldrh r0, \[r1, r2\] +0000000c <[^>]*> e1b100b2 ? ldrh r0, \[r1, r2\]! +00000010 <[^>]*> e1d100bc ? ldrh r0, \[r1, #12\] +00000014 <[^>]*> e1f100bc ? ldrh r0, \[r1, #12\]! +00000018 <[^>]*> e15100bc ? ldrh r0, \[r1, -#12\] +0000001c <[^>]*> e09100b2 ? ldrh r0, \[r1\], r2 +00000020 <[^>]*> e3a00cff ? mov r0, #65280 +00000024 <[^>]*> e1df0bb4 ? ldrh r0, 000000e0 <\$\$lit_1> +00000028 <[^>]*> e1df0abc ? ldrh r0, 000000dc <.L2> +0000002c <[^>]*> e1c100b0 ? strh r0, \[r1\] +00000030 <[^>]*> e1e100b0 ? strh r0, \[r1\]! +00000034 <[^>]*> e18100b2 ? strh r0, \[r1, r2\] +00000038 <[^>]*> e1a100b2 ? strh r0, \[r1, r2\]! +0000003c <[^>]*> e1c100bc ? strh r0, \[r1, #12\] +00000040 <[^>]*> e1e100bc ? strh r0, \[r1, #12\]! +00000044 <[^>]*> e14100bc ? strh r0, \[r1, -#12\] +00000048 <[^>]*> e08100b2 ? strh r0, \[r1\], r2 +0000004c <[^>]*> e1cf08b8 ? strh r0, 000000dc <.L2> +00000050 <[^>]*> e1d100d0 ? ldrsb r0, \[r1\] +00000054 <[^>]*> e1f100d0 ? ldrsb r0, \[r1\]! +00000058 <[^>]*> e19100d2 ? ldrsb r0, \[r1, r2\] +0000005c <[^>]*> e1b100d2 ? ldrsb r0, \[r1, r2\]! +00000060 <[^>]*> e1d100dc ? ldrsb r0, \[r1, #12\] +00000064 <[^>]*> e1f100dc ? ldrsb r0, \[r1, #12\]! +00000068 <[^>]*> e15100dc ? ldrsb r0, \[r1, -#12\] +0000006c <[^>]*> e09100d2 ? ldrsb r0, \[r1\], r2 +00000070 <[^>]*> e3a000de ? mov r0, #222 +00000074 <[^>]*> e1df06d0 ? ldrsb r0, 000000dc <.L2> +00000078 <[^>]*> e1d100f0 ? ldrsh r0, \[r1\] +0000007c <[^>]*> e1f100f0 ? ldrsh r0, \[r1\]! +00000080 <[^>]*> e19100f2 ? ldrsh r0, \[r1, r2\] +00000084 <[^>]*> e1b100f2 ? ldrsh r0, \[r1, r2\]! +00000088 <[^>]*> e1d100fc ? ldrsh r0, \[r1, #12\] +0000008c <[^>]*> e1f100fc ? ldrsh r0, \[r1, #12\]! +00000090 <[^>]*> e15100fc ? ldrsh r0, \[r1, -#12\] +00000094 <[^>]*> e09100f2 ? ldrsh r0, \[r1\], r2 +00000098 <[^>]*> e3a00cff ? mov r0, #65280 +0000009c <[^>]*> e1df03fc ? ldrsh r0, 000000e0 <\$\$lit_1> +000000a0 <[^>]*> e1df03f4 ? ldrsh r0, 000000dc <.L2> +000000a4 <[^>]*> e19100b2 ? ldrh r0, \[r1, r2\] +000000a8 <[^>]*> 119100b2 ? ldrneh r0, \[r1, r2\] +000000ac <[^>]*> 819100b2 ? ldrhih r0, \[r1, r2\] +000000b0 <[^>]*> b19100b2 ? ldrlth r0, \[r1, r2\] +000000b4 <[^>]*> e19100f2 ? ldrsh r0, \[r1, r2\] +000000b8 <[^>]*> 119100f2 ? ldrnesh r0, \[r1, r2\] +000000bc <[^>]*> 819100f2 ? ldrhish r0, \[r1, r2\] +000000c0 <[^>]*> b19100f2 ? ldrltsh r0, \[r1, r2\] +000000c4 <[^>]*> e19100d2 ? ldrsb r0, \[r1, r2\] +000000c8 <[^>]*> 119100d2 ? ldrnesb r0, \[r1, r2\] +000000cc <[^>]*> 819100d2 ? ldrhisb r0, \[r1, r2\] +000000d0 <[^>]*> b19100d2 ? ldrltsb r0, \[r1, r2\] +000000d4 <[^>]*> e1df00f4 ? ldrsh r0, 000000e0 <\$\$lit_1> +000000d8 <[^>]*> e1df00f4 ? ldrsh r0, 000000e4 <\$\$lit_1\+0x4> +000000dc <[^>]*> 00000000 ? andeq r0, r0, r0 +[ ]*dc:.*.LC0 +000000e0 <[^>]*> 0000c0de ? .* +000000e4 <[^>]*> 0000dead ? .* diff --git a/gas/testsuite/gas/arm/arm7t.s b/gas/testsuite/gas/arm/arm7t.s new file mode 100644 index 00000000000..656e90e0330 --- /dev/null +++ b/gas/testsuite/gas/arm/arm7t.s @@ -0,0 +1,79 @@ + .section .rdata + .align 0 +.LC0: + .ascii "some data\000" + + .text + .align 0 + +loadhalfwords: + ldrh r0, [r1] + ldrh r0, [r1]! + ldrh r0, [r1, r2] + ldrh r0, [r1, r2]! + ldrh r0, [r1,#0x0C] + ldrh r0, [r1,#0x0C]! + ldrh r0, [r1,#-0x0C] + ldrh r0, [r1], r2 + ldrh r0, =0xFF00 + ldrh r0, =0xC0DE + ldrh r0, .L2 + +storehalfwords: + strh r0, [r1] + strh r0, [r1]! + strh r0, [r1, r2] + strh r0, [r1, r2]! + strh r0, [r1,#0x0C] + strh r0, [r1,#0x0C]! + strh r0, [r1,#-0x0C] + strh r0, [r1], r2 + strh r0, .L2 + +loadsignedbytes: + ldrsb r0, [r1] + ldrsb r0, [r1]! + ldrsb r0, [r1, r2] + ldrsb r0, [r1, r2]! + ldrsb r0, [r1,#0x0C] + ldrsb r0, [r1,#0x0C]! + ldrsb r0, [r1,#-0x0C] + ldrsb r0, [r1], r2 + ldrsb r0, =0xDE + ldrsb r0, .L2 + +loadsignedhalfwords: + ldrsh r0, [r1] + ldrsh r0, [r1]! + ldrsh r0, [r1, r2] + ldrsh r0, [r1, r2]! + ldrsh r0, [r1, #0x0C] + ldrsh r0, [r1, #0x0C]! + ldrsh r0, [r1, #-0x0C] + ldrsh r0, [r1], r2 + ldrsh r0, =0xFF00 + ldrsh r0, =0xC0DE + ldrsh r0, .L2 + +misc: + ldralh r0, [r1, r2] + ldrneh r0, [r1, r2] + ldrhih r0, [r1, r2] + ldrlth r0, [r1, r2] + + ldralsh r0, [r1, r2] + ldrnesh r0, [r1, r2] + ldrhish r0, [r1, r2] + ldrltsh r0, [r1, r2] + + ldralsb r0, [r1, r2] + ldrnesb r0, [r1, r2] + ldrhisb r0, [r1, r2] + ldrltsb r0, [r1, r2] + + ldrsh r0, =0xC0DE + ldrsh r0, =0xDEAD + + .align +.L2: + .word .LC0 diff --git a/gas/testsuite/gas/arm/copro.s b/gas/testsuite/gas/arm/copro.s new file mode 100644 index 00000000000..46c9b920df0 --- /dev/null +++ b/gas/testsuite/gas/arm/copro.s @@ -0,0 +1,24 @@ +.text +.align 0 + cdp p1, 4, cr1, cr2, cr3 + cdpeq 4, 3, c1, c4, cr5, 5 + + ldc 5, cr9, [r3] + ldcl 1, cr14, [r1, #32] + ldcmi 0, cr0, [r2, #1020]! + ldcpll p7, c1, [r3], #64 + ldc p0, c8, foo +foo: + + stc 5, cr0, [r3] + stcl 3, cr15, [r0, #8] + stceq p4, cr12, [r2, #100]! + stccc p6, c8, [r4], #48 + stc p1, c7, bar +bar: + + mrc 2, 3, r5, c1, c2 + mrcge p4, 5, r15, cr1, cr2, 7 + + mcr p7, 1, r15, cr1, cr1 + mcrlt 5, 1, r8, cr2, cr9, 0 diff --git a/gas/testsuite/gas/arm/float.s b/gas/testsuite/gas/arm/float.s new file mode 100644 index 00000000000..48aee965cb2 --- /dev/null +++ b/gas/testsuite/gas/arm/float.s @@ -0,0 +1,162 @@ +.text +.align 0 + mvfe f0, f1 + mvfeqe f3, f5 + mvfeqd f4, #1.0 + mvfs f4, f7 + mvfsp f0, f1 + mvfdm f3, f4 + mvfez f7, f7 + + adfe f0, f1, #2.0 + adfeqe f1, f2, #0.5 + adfsm f3, f4, f5 + + sufd f0, f0, #2.0 + sufs f1, f2, #10.0 + sufneez f3, f4, f5 + + rsfs f1, f1, #0.0 + rsfdp f3, f0, #5.0 + rsfled f7, f6, f0 + + mufd f0, f0, f0 + mufez f1, f2, #3.0 + mufals f0, f0, #4.0 + + dvfd f0, f0, #1.0000 + dvfez f0, f1, #10e0 + dvfmism f3, f4, f5 + + rdfe f0, f1, #1.0e1 + rdfs f3, f7, #0f1 + rdfccdp f4, f4, f3 + + powd f0, f2, f3 + pows f1, f3, #0e1e1 + powcsez f4, f7, #1 + + rpws f7, f6, f7 + rpweqd f0, f1, f2 + rpwem f2, f2, f3 + + rmfd f1, f2, #3 + rmfvss f3, f4, f4 + rmfep f4, f7, f0 + + fmls f0, f1, f2 + fmleqs f1, f3, f5 + fmlplsz f4, f6, f0 + + fdvs f1, f3, #10 + fdvsp f0, f1, f2 + fdvhssm f4, f4, f4 + + frds f1, f1, #1.0 + frdgts f2, f1, f0 + frdgtsz f4, f4, f5 + + pold f0, f1, f2 + polsz f4, f6, #3.0 + poleqe f5, f6, f7 + + mnfs f0, f1 + mnfd f0, #3.0 + mnfez f0, #4.0 + mnfeqez f0, f5 + mnfsp f0, f4 + mnfdm f1, f7 + + absd f0, f1 + abssp f1, #3.0 + abseqe f4, f5 + + rnds f1, f2 + rndd f3, f4 + rndeqez f6, #4.0 + + sqts f5, f5 + sqtdp f6, f6 + sqtplez f7, f6 + + logs f0, #10 + loge f0, #0f10 + lognedz f0, f1 + + lgne f1, f2 + lgndz f1, f3 + lgnvcs f3, f4 + + exps f1, f3 + expem f3, #10.0 + exppld f6, f7 + + sind f0, f1 + sinsm f1, f2 + singte f4, #5 + + cosd f1, f3 + cosem f4, f5 + cosnedp f6, f1 + + tane f1, f5 + tansz f4, f7 + tangedz f1, #4.0 + + asne f4, f5 + asnsp f6, #5e-1 + asnmidz f5, f5 + + acss f5, f6 + acsd f6, f0 + acshsem f1, #0.05e1 + + atne f0, f5 + atnsz f1, #5 + atnltd f3, f2 + + urde f5, f4 + nrme f6, f5 + nrmpldz f7, f5 + + fltsp f0, r8 + flte f1, r0 + flteqdz f5, r7 + + fix r0, f1 + fixz r1, f7 + fixcsm r5, f5 + + wfc r0 + wfs r1 + rfseq r2 + rfc r4 + + cmf f0, #1 + cmf f1, f2 + cmfeq f0, f1 + + cnf f0, #3 + cnf f1, #0.5 + cnfvs f3, f4 + + cmfe f0, f1 + cmfeeq f1, f2 + cmfeqe f3, #5.0 + + cnfe f1, f3 + cnfeeq f3, f4 + cnfeqe f4, f7 + cnfale f4, #5.0 + + lfm f0, 4, [r0] + lfm f0, 4, [r0, #0] + lfm f1, 4, [r1, #64] + sfm f2, 4, [r14, #1020]! + sfmeq f7, 3, [r8], #-1020 + + lfmfd f6, 2, [r15] + sfmea f7, 1, [r8]! + lfmeqea f5, 4, [r6] + sfmnefd f4, 3, [r2] + sfmnefd f4, 3, [r2]! diff --git a/gas/testsuite/gas/arm/immed.s b/gas/testsuite/gas/arm/immed.s new file mode 100644 index 00000000000..5d2092be18b --- /dev/null +++ b/gas/testsuite/gas/arm/immed.s @@ -0,0 +1,11 @@ +@ Tests for complex immediate expressions - none of these need +@ relocations + .text +bar: + mov r0, #0 + mov r0, #(. - bar - 8) + ldr r0, bar + ldr r0, [pc, # (bar - . -8)] + .space 4096 + mov r0, #(. - bar - 8) & 0xff + ldr r0, [pc, # (bar - . -8) & 0xff] diff --git a/gas/testsuite/gas/arm/inst.d b/gas/testsuite/gas/arm/inst.d new file mode 100644 index 00000000000..decb8f01b76 --- /dev/null +++ b/gas/testsuite/gas/arm/inst.d @@ -0,0 +1,168 @@ +#objdump: -dr --prefix-addresses --show-raw-insn +#name: ARM basic instructions +#as: -marm2 -EL + +# Test the standard ARM instructions: + +.*: +file format .*arm.* + +Disassembly of section .text: +00000000 <[^>]*> e3a00000 ? mov r0, #0 +00000004 <[^>]*> e1a01002 ? mov r1, r2 +00000008 <[^>]*> e1a03184 ? mov r3, r4, lsl #3 +0000000c <[^>]*> e1a05736 ? mov r5, r6, lsr r7 +00000010 <[^>]*> e1a08a59 ? mov r8, r9, asr sl +00000014 <[^>]*> e1a0bd1c ? mov fp, ip, lsl sp +00000018 <[^>]*> e1a0e06f ? mov lr, pc, rrx +0000001c <[^>]*> e1a01002 ? mov r1, r2 +00000020 <[^>]*> 01a02003 ? moveq r2, r3 +00000024 <[^>]*> 11a04005 ? movne r4, r5 +00000028 <[^>]*> b1a06007 ? movlt r6, r7 +0000002c <[^>]*> a1a08009 ? movge r8, r9 +00000030 <[^>]*> d1a0a00b ? movle sl, fp +00000034 <[^>]*> c1a0c00d ? movgt ip, sp +00000038 <[^>]*> 31a01002 ? movcc r1, r2 +0000003c <[^>]*> 21a01003 ? movcs r1, r3 +00000040 <[^>]*> 41a03006 ? movmi r3, r6 +00000044 <[^>]*> 51a07009 ? movpl r7, r9 +00000048 <[^>]*> 61a01008 ? movvs r1, r8 +0000004c <[^>]*> 71a09fa1 ? movvc r9, r1, lsr #31 +00000050 <[^>]*> 81a0800f ? movhi r8, pc +00000054 <[^>]*> 91a0f00e ? movls pc, lr +00000058 <[^>]*> 21a09008 ? movcs r9, r8 +0000005c <[^>]*> 31a01003 ? movcc r1, r3 +00000060 <[^>]*> e1b00008 ? movs r0, r8 +00000064 <[^>]*> 31b00007 ? movccs r0, r7 +00000068 <[^>]*> e281000a ? add r0, r1, #10 +0000006c <[^>]*> e0832004 ? add r2, r3, r4 +00000070 <[^>]*> e0865287 ? add r5, r6, r7, lsl #5 +00000074 <[^>]*> e0821113 ? add r1, r2, r3, lsl r1 +00000078 <[^>]*> e201000a ? and r0, r1, #10 +0000007c <[^>]*> e0032004 ? and r2, r3, r4 +00000080 <[^>]*> e0065287 ? and r5, r6, r7, lsl #5 +00000084 <[^>]*> e0021113 ? and r1, r2, r3, lsl r1 +00000088 <[^>]*> e221000a ? eor r0, r1, #10 +0000008c <[^>]*> e0232004 ? eor r2, r3, r4 +00000090 <[^>]*> e0265287 ? eor r5, r6, r7, lsl #5 +00000094 <[^>]*> e0221113 ? eor r1, r2, r3, lsl r1 +00000098 <[^>]*> e241000a ? sub r0, r1, #10 +0000009c <[^>]*> e0432004 ? sub r2, r3, r4 +000000a0 <[^>]*> e0465287 ? sub r5, r6, r7, lsl #5 +000000a4 <[^>]*> e0421113 ? sub r1, r2, r3, lsl r1 +000000a8 <[^>]*> e2a1000a ? adc r0, r1, #10 +000000ac <[^>]*> e0a32004 ? adc r2, r3, r4 +000000b0 <[^>]*> e0a65287 ? adc r5, r6, r7, lsl #5 +000000b4 <[^>]*> e0a21113 ? adc r1, r2, r3, lsl r1 +000000b8 <[^>]*> e2c1000a ? sbc r0, r1, #10 +000000bc <[^>]*> e0c32004 ? sbc r2, r3, r4 +000000c0 <[^>]*> e0c65287 ? sbc r5, r6, r7, lsl #5 +000000c4 <[^>]*> e0c21113 ? sbc r1, r2, r3, lsl r1 +000000c8 <[^>]*> e261000a ? rsb r0, r1, #10 +000000cc <[^>]*> e0632004 ? rsb r2, r3, r4 +000000d0 <[^>]*> e0665287 ? rsb r5, r6, r7, lsl #5 +000000d4 <[^>]*> e0621113 ? rsb r1, r2, r3, lsl r1 +000000d8 <[^>]*> e2e1000a ? rsc r0, r1, #10 +000000dc <[^>]*> e0e32004 ? rsc r2, r3, r4 +000000e0 <[^>]*> e0e65287 ? rsc r5, r6, r7, lsl #5 +000000e4 <[^>]*> e0e21113 ? rsc r1, r2, r3, lsl r1 +000000e8 <[^>]*> e381000a ? orr r0, r1, #10 +000000ec <[^>]*> e1832004 ? orr r2, r3, r4 +000000f0 <[^>]*> e1865287 ? orr r5, r6, r7, lsl #5 +000000f4 <[^>]*> e1821113 ? orr r1, r2, r3, lsl r1 +000000f8 <[^>]*> e3c1000a ? bic r0, r1, #10 +000000fc <[^>]*> e1c32004 ? bic r2, r3, r4 +00000100 <[^>]*> e1c65287 ? bic r5, r6, r7, lsl #5 +00000104 <[^>]*> e1c21113 ? bic r1, r2, r3, lsl r1 +00000108 <[^>]*> e3e0000a ? mvn r0, #10 +0000010c <[^>]*> e1e02004 ? mvn r2, r4 +00000110 <[^>]*> e1e05287 ? mvn r5, r7, lsl #5 +00000114 <[^>]*> e1e01113 ? mvn r1, r3, lsl r1 +00000118 <[^>]*> e310000a ? tst r0, #10 +0000011c <[^>]*> e1120004 ? tst r2, r4 +00000120 <[^>]*> e1150287 ? tst r5, r7, lsl #5 +00000124 <[^>]*> e1110113 ? tst r1, r3, lsl r1 +00000128 <[^>]*> e330000a ? teq r0, #10 +0000012c <[^>]*> e1320004 ? teq r2, r4 +00000130 <[^>]*> e1350287 ? teq r5, r7, lsl #5 +00000134 <[^>]*> e1310113 ? teq r1, r3, lsl r1 +00000138 <[^>]*> e350000a ? cmp r0, #10 +0000013c <[^>]*> e1520004 ? cmp r2, r4 +00000140 <[^>]*> e1550287 ? cmp r5, r7, lsl #5 +00000144 <[^>]*> e1510113 ? cmp r1, r3, lsl r1 +00000148 <[^>]*> e370000a ? cmn r0, #10 +0000014c <[^>]*> e1720004 ? cmn r2, r4 +00000150 <[^>]*> e1750287 ? cmn r5, r7, lsl #5 +00000154 <[^>]*> e1710113 ? cmn r1, r3, lsl r1 +00000158 <[^>]*> e330f00a ? teqp r0, #10 +0000015c <[^>]*> e132f004 ? teqp r2, r4 +00000160 <[^>]*> e135f287 ? teqp r5, r7, lsl #5 +00000164 <[^>]*> e131f113 ? teqp r1, r3, lsl r1 +00000168 <[^>]*> e370f00a ? cmnp r0, #10 +0000016c <[^>]*> e172f004 ? cmnp r2, r4 +00000170 <[^>]*> e175f287 ? cmnp r5, r7, lsl #5 +00000174 <[^>]*> e171f113 ? cmnp r1, r3, lsl r1 +00000178 <[^>]*> e350f00a ? cmpp r0, #10 +0000017c <[^>]*> e152f004 ? cmpp r2, r4 +00000180 <[^>]*> e155f287 ? cmpp r5, r7, lsl #5 +00000184 <[^>]*> e151f113 ? cmpp r1, r3, lsl r1 +00000188 <[^>]*> e310f00a ? tstp r0, #10 +0000018c <[^>]*> e112f004 ? tstp r2, r4 +00000190 <[^>]*> e115f287 ? tstp r5, r7, lsl #5 +00000194 <[^>]*> e111f113 ? tstp r1, r3, lsl r1 +00000198 <[^>]*> e0000291 ? mul r0, r1, r2 +0000019c <[^>]*> e0110392 ? muls r1, r2, r3 +000001a0 <[^>]*> 10000091 ? mulne r0, r1, r0 +000001a4 <[^>]*> 90190798 ? mullss r9, r8, r7 +000001a8 <[^>]*> e021ba99 ? mla r1, r9, sl, fp +000001ac <[^>]*> e033c994 ? mlas r3, r4, r9, ip +000001b0 <[^>]*> b029d798 ? mlalt r9, r8, r7, sp +000001b4 <[^>]*> a034e391 ? mlages r4, r1, r3, lr +000001b8 <[^>]*> e5910000 ? ldr r0, \[r1\] +000001bc <[^>]*> e7911002 ? ldr r1, \[r1, r2\] +000001c0 <[^>]*> e7b32004 ? ldr r2, \[r3, r4\]! +000001c4 <[^>]*> e5922020 ? ldr r2, \[r2, #32\] +000001c8 <[^>]*> e7932424 ? ldr r2, \[r3, r4, lsr #8\] +000001cc <[^>]*> 07b54484 ? ldreq r4, \[r5, r4, lsl #9\]! +000001d0 <[^>]*> 14954006 ? ldrne r4, \[r5\], #6 +000001d4 <[^>]*> e6b21003 ? ldrt r1, \[r2\], r3 +000001d8 <[^>]*> e6942425 ? ldr r2, \[r4\], r5, lsr #8 +000001dc <[^>]*> e51f0008 ? ldr r0, 000001dc <[^>]*> +000001e0 <[^>]*> e5d43000 ? ldrb r3, \[r4\] +000001e4 <[^>]*> 14f85000 ? ldrnebt r5, \[r8\] +000001e8 <[^>]*> e5810000 ? str r0, \[r1\] +000001ec <[^>]*> e7811002 ? str r1, \[r1, r2\] +000001f0 <[^>]*> e7a33004 ? str r3, \[r3, r4\]! +000001f4 <[^>]*> e5822020 ? str r2, \[r2, #32\] +000001f8 <[^>]*> e7832424 ? str r2, \[r3, r4, lsr #8\] +000001fc <[^>]*> 07a54484 ? streq r4, \[r5, r4, lsl #9\]! +00000200 <[^>]*> 14854006 ? strne r4, \[r5\], #6 +00000204 <[^>]*> e6821003 ? str r1, \[r2\], r3 +00000208 <[^>]*> e6a42425 ? strt r2, \[r4\], r5, lsr #8 +0000020c <[^>]*> e50f1004 ? str r1, 00000210 <[^>]*> +00000210 <[^>]*> e5c71000 ? strb r1, \[r7\] +00000214 <[^>]*> e4e02000 ? strbt r2, \[r0\] +00000218 <[^>]*> e8900002 ? ldmia r0, {r1} +0000021c <[^>]*> 09920038 ? ldmeqib r2, {r3, r4, r5} +00000220 <[^>]*> e853ffff ? ldmda r3, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr, pc}\^ +00000224 <[^>]*> e93b05ff ? ldmdb fp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sl} +00000228 <[^>]*> e99100f7 ? ldmib r1, {r0, r1, r2, r4, r5, r6, r7} +0000022c <[^>]*> e89201f8 ? ldmia r2, {r3, r4, r5, r6, r7, r8} +00000230 <[^>]*> e9130003 ? ldmdb r3, {r0, r1} +00000234 <[^>]*> e8740300 ? ldmda r4!, {r8, r9}\^ +00000238 <[^>]*> e8800002 ? stmia r0, {r1} +0000023c <[^>]*> 09820038 ? stmeqib r2, {r3, r4, r5} +00000240 <[^>]*> e843ffff ? stmda r3, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, sl, fp, ip, sp, lr, pc}\^ +00000244 <[^>]*> e92a05ff ? stmdb sl!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, sl} +00000248 <[^>]*> e8010007 ? stmda r1, {r0, r1, r2} +0000024c <[^>]*> e9020018 ? stmdb r2, {r3, r4} +00000250 <[^>]*> e8830003 ? stmia r3, {r0, r1} +00000254 <[^>]*> e9e40300 ? stmib r4!, {r8, r9}\^ +00000258 <[^>]*> ef123456 ? swi 0x00123456 +0000025c <[^>]*> 2f000033 ? swics 0x00000033 +00000260 <[^>]*> ebfffffe ? bl 00000260 <[^>]*> +[ ]*260:.*_wombat.* +00000264 <[^>]*> 5bffffe9 ? blpl 00000210 +00000268 <[^>]*> eafffffe ? b 00000268 <[^>]*> +[ ]*268:.*_wibble.* +0000026c <[^>]*> dafffffe ? ble 0000026c <[^>]*> +[ ]*26c:.*testerfunc.* diff --git a/gas/testsuite/gas/arm/inst.s b/gas/testsuite/gas/arm/inst.s new file mode 100644 index 00000000000..ff092c9256b --- /dev/null +++ b/gas/testsuite/gas/arm/inst.s @@ -0,0 +1,189 @@ +@ Test file for ARM/GAS -- basic instructions + +.text +.align + mov r0, #0 + mov r1, r2 + mov r3, r4, lsl #3 + mov r5, r6, lsr r7 + mov r8, r9, asr r10 + mov r11, r12, asl r13 + mov r14, r15, rrx + moval r1, r2 + moveq r2, r3 + movne r4, r5 + movlt r6, r7 + movge r8, r9 + movle r10, r11 + movgt r12, r13 + movcc r1, r2 + movcs r1, r3 + movmi r3, r6 + movpl r7, r9 + movvs r1, r8 + movvc r9, r1, lsr #31 + movhi r8, r15 + movls r15, r14 + movhs r9, r8 + movul r1, r3 + movs r0, r8 + movuls r0, r7 + + add r0, r1, #10 + add r2, r3, r4 + add r5, r6, r7, asl #5 + add r1, r2, r3, lsl r1 + + and r0, r1, #10 + and r2, r3, r4 + and r5, r6, r7, asl #5 + and r1, r2, r3, lsl r1 + + eor r0, r1, #10 + eor r2, r3, r4 + eor r5, r6, r7, asl #5 + eor r1, r2, r3, lsl r1 + + sub r0, r1, #10 + sub r2, r3, r4 + sub r5, r6, r7, asl #5 + sub r1, r2, r3, lsl r1 + + adc r0, r1, #10 + adc r2, r3, r4 + adc r5, r6, r7, asl #5 + adc r1, r2, r3, lsl r1 + + sbc r0, r1, #10 + sbc r2, r3, r4 + sbc r5, r6, r7, asl #5 + sbc r1, r2, r3, lsl r1 + + rsb r0, r1, #10 + rsb r2, r3, r4 + rsb r5, r6, r7, asl #5 + rsb r1, r2, r3, lsl r1 + + rsc r0, r1, #10 + rsc r2, r3, r4 + rsc r5, r6, r7, asl #5 + rsc r1, r2, r3, lsl r1 + + orr r0, r1, #10 + orr r2, r3, r4 + orr r5, r6, r7, asl #5 + orr r1, r2, r3, lsl r1 + + bic r0, r1, #10 + bic r2, r3, r4 + bic r5, r6, r7, asl #5 + bic r1, r2, r3, lsl r1 + + mvn r0, #10 + mvn r2, r4 + mvn r5, r7, asl #5 + mvn r1, r3, lsl r1 + + tst r0, #10 + tst r2, r4 + tst r5, r7, asl #5 + tst r1, r3, lsl r1 + + teq r0, #10 + teq r2, r4 + teq r5, r7, asl #5 + teq r1, r3, lsl r1 + + cmp r0, #10 + cmp r2, r4 + cmp r5, r7, asl #5 + cmp r1, r3, lsl r1 + + cmn r0, #10 + cmn r2, r4 + cmn r5, r7, asl #5 + cmn r1, r3, lsl r1 + + teqp r0, #10 + teqp r2, r4 + teqp r5, r7, asl #5 + teqp r1, r3, lsl r1 + + cmnp r0, #10 + cmnp r2, r4 + cmnp r5, r7, asl #5 + cmnp r1, r3, lsl r1 + + cmpp r0, #10 + cmpp r2, r4 + cmpp r5, r7, asl #5 + cmpp r1, r3, lsl r1 + + tstp r0, #10 + tstp r2, r4 + tstp r5, r7, asl #5 + tstp r1, r3, lsl r1 + + mul r0, r1, r2 + muls r1, r2, r3 + mulne r0, r1, r0 + mullss r9, r8, r7 + + mla r1, r9, r10, r11 + mlas r3, r4, r9, r12 + mlalt r9, r8, r7, r13 + mlages r4, r1, r3, r14 + + ldr r0, [r1] + ldr r1, [r1, r2] + ldr r2, [r3, r4]! + ldr r2, [r2, #32] + ldr r2, [r3, r4, lsr #8] + ldreq r4, [r5, r4, asl #9]! + ldrne r4, [r5], #6 + ldrt r1, [r2], r3 + ldr r2, [r4], r5, lsr #8 +foo: + ldr r0, foo + ldrb r3, [r4] + ldrnebt r5, [r8] + + str r0, [r1] + str r1, [r1, r2] + str r3, [r3, r4]! + str r2, [r2, #32] + str r2, [r3, r4, lsr #8] + streq r4, [r5, r4, asl #9]! + strne r4, [r5], #6 + str r1, [r2], r3 + strt r2, [r4], r5, lsr #8 + str r1, bar +bar: + stralb r1, [r7] + strbt r2, [r0] + + ldmia r0, {r1} + ldmeqib r2, {r3, r4, r5} + ldmalda r3, {r0-r15}^ + ldmdb r11!, {r0-r8, r10} + ldmed r1, {r0, r1, r2}|0xf0 + ldmfd r2, {r3, r4}+{r5, r6, r7, r8} + ldmea r3, 3 + ldmfa r4!, {r8, r9}^ + + stmia r0, {r1} + stmeqib r2, {r3, r4, r5} + stmalda r3, {r0-r15}^ + stmdb r10!, {r0-r8, r10} + stmed r1, {r0, r1, r2} + stmfd r2, {r3, r4} + stmea r3, 3 + stmfa r4!, {r8, r9}^ + + swi 0x123456 + swihs 0x33 + + bl _wombat + blpl bar + b _wibble + ble testerfunc diff --git a/gas/testsuite/gas/arm/le-fpconst.d b/gas/testsuite/gas/arm/le-fpconst.d new file mode 100644 index 00000000000..354e0e0c9f3 --- /dev/null +++ b/gas/testsuite/gas/arm/le-fpconst.d @@ -0,0 +1,8 @@ +#objdump: -s +#as: -EL +#name: arm little-endian fpconst + +.*: +file format .*arm.* + +Contents of section .text: + 0000 cdcc8c3f 00000000 9999f13f 9a999999 .* diff --git a/gas/testsuite/gas/arm/le-fpconst.s b/gas/testsuite/gas/arm/le-fpconst.s new file mode 100644 index 00000000000..8a3c3d70145 --- /dev/null +++ b/gas/testsuite/gas/arm/le-fpconst.s @@ -0,0 +1,8 @@ +# Test fp constants. +# These need ARM specific support because 8 byte fp constants in little +# endian mode are represented abnormally. + + .text + .float 1.1 + .float 0 + .double 1.1 diff --git a/gas/testsuite/gas/arm/thumb.s b/gas/testsuite/gas/arm/thumb.s new file mode 100644 index 00000000000..ea4b82d1438 --- /dev/null +++ b/gas/testsuite/gas/arm/thumb.s @@ -0,0 +1,193 @@ + .text + .code 16 +.foo: + lsl r2, r1, #3 + lsr r3, r4, #31 +wibble/data: + asr r7, r0, #5 + + lsl r1, r2, #0 + lsr r3, r4, #0 + asr r4, r5, #0 + + lsr r6, r7, #32 + asr r0, r1, #32 + + add r1, r2, r3 + add r2, r4, #2 + sub r3, r5, r7 + sub r2, r4, #7 + + mov r4, #255 + cmp r3, #250 + add r6, #123 + sub r5, #128 + + and r3, r5 + eor r4, r6 + lsl r1, r0 + lsr r2, r3 + asr r4, r6 + adc r5, r7 + sbc r0, r4 + ror r1, r4 + tst r2, r5 + neg r1, r1 + cmp r2, r3 + cmn r1, r4 + orr r0, r3 + mul r4, r5 + bic r5, r7 + mvn r5, r5 + + add r1, r13 + add r12, r2 + add r9, r9 + cmp r1, r14 + cmp r8, r0 + cmp r12, r14 + mov r0, r9 + mov r9, r4 + mov r8, r8 + bx r7 + bx r8 + .align 0 + bx pc + + ldr r3, [pc, #128] + ldr r4, bar + + str r0, [r1, r2] + strb r1, [r2, r4] + ldr r5, [r6, r7] + ldrb r2, [r4, r5] + + .align 0 +bar: + strh r1, [r2, r3] + ldrh r3, [r4, r0] + ldsb r1, [r6, r7] + ldsh r2, [r0, r5] + + str r3, [r3, #124] + ldr r1, [r4, #124] + ldr r5, [r5] + strb r1, [r5, #31] + strb r1, [r4, #5] + strb r2, [r6] + + strh r4, [r5, #62] + ldrh r5, [r0, #4] + ldrh r3, [r2] + + str r3, [r13, #1020] + ldr r1, [r13, #44] + ldr r2, [r13] + + add r7, r15, #1020 + add r4, r13, #512 + + add r13, #268 + add r13, #-104 + sub r13, #268 + sub r13, #-108 + + push {r0, r1, r2, r4} + push {r0, r3-r7, lr} + pop {r3, r4, r7} + pop {r0-r7, r15} + + stmia r3!, {r0, r1, r4-r7} + ldmia r0!, {r1-r7} + + beq bar + bne bar + bcs bar + bcc bar + bmi bar + bpl bar + bvs bar + bvc bar + bhi bar + bls bar + bge bar + bgt bar + blt bar + bgt bar + ble bar + bhi bar + blo bar + bul bar + +close: + lsl r4, r5, #near - close +near: + add r2, r3, #near - close + + add sp, sp, #127 << 2 + sub sp, sp, #127 << 2 + add r0, sp, #255 << 2 + add r0, pc, #255 << 2 + + add sp, sp, #bar - .foo + sub sp, sp, #bar - .foo + add r0, sp, #bar - .foo + add r0, pc, #bar - .foo + + add r1, #bar - .foo + mov r6, #bar - .foo + cmp r7, #bar - .foo + + nop + nop + + .arm +.localbar: + b .localbar + b .wombat + bl .localbar + bl .wombat + + bx r0 + swi 0x123456 + + .thumb + @ The following will be disassembled incorrectly if we do not + @ have a Thumb symbol defined before the first Thumb instruction: +morethumb: + adr r0, forwardonly + + b .foo + b .wombat + bl .foo + bl .wombat + + bx r0 + + swi 0xff + .align 0 +forwardonly: + beq .wombat + bne .wombat + bcs .wombat + bcc .wombat + bmi .wombat + bpl .wombat + bvs .wombat + bvc .wombat + bhi .wombat + bls .wombat + bge .wombat + bgt .wombat + blt .wombat + bgt .wombat + ble .wombat + bhi .wombat + blo .wombat + bul .wombat + +.back: + bl .local + .space (1 << 11) @ leave space to force long offsets +.local: + bl .back -- cgit v1.2.1