Support for VFP instructions
* tc-arm.c (CP_WB_OK, CP_NO_WB): New defines. (cp_address_required_here): New argument wb_ok. When false, do not accept write-back forms of addressing. Change all callers. (FPU_VFP_EXT_NONE, FPU_VFP_EXT_V1xD, FPU_VFP_VFP_V1) (FPU_VFP_EXT_V2): Define. (FPU_ARCH_VFP, FPU_ARCH_VFP_V1xD, FPU_ARCH_VFP_V1, FPU_ARCH_VFP_V2): Define in terms of above. (vfp_dp_reg_pos, vfp_sp_reg_pos, vfp_ldstm_type): New enums. (vfp_reg): New struct. (vfp_regs): New array of registers. (insns): Add VFP instructions. (sn_table): New array of VFP single-precision register names. (dn_table): New array of VFP double-precision register names. (all_reg_maps): Add the new register tables. (arm_reg_type): Add new values for above. Increase RET_TYPE_MAX. (vfp_sp_reg_required_here, vfp_dp_reg_required_here, do_vfp_sp_monadic) (do_vfp_dp_monadic, do_vfp_sp_dyadic, do_vfp_dp_dyadic) (do_vfp_reg_from_sp, do_vfp_sp_reg2, do_vfp_sp_from_reg) (do_vfp_reg_from_dp, do_vfp_reg2_from_dp, do_vfp_dp_from_reg) (do_vfp_dp_from_reg2, vfp_psr_parse, vfp_psr_required_here) (do_vfp_reg_from_ctrl, do_vfp_ctrl_from_reg, do_vfp_sp_ldst) (do_vfp_dp_ldst, vfp_sp_reg_list, vfp_dp_reg_list, vfp_sp_ldstm) (vfp_dp_ldstm, do_vfp_sp_ldstmia, do_vfp_sp_ldstmdb, do_vfp_ldstmia) (do_vfp_dp_ldstmdb, do_vfp_xp_ldstmia, do_vfp_xp_ldstmdb) (do_vfp_sp_compare_z, do_vfp_dp_compare_z, do_vfp_dp_sp_cvt) (do_vfp_sp_dp_cvt): New functions. (md_begin): Set soft-float flag for appropriate VFP work. (md_atof): Handle VFP-format doubles. (md_parse_option): Handle VFP command-line options. (md_show_usage): Display VFP command-line options. * testsuite/gas/arm/vfp1.s gas/arm/vf1.d: New files. * testsuite/gas/arm/vfp1xD.s gas/arm/vf1xD.d: New files. * testsuite/gas/arm/vfp-bad.s gas/arm/vfp-bad.l: New files. * testsuite/gas/arm/arm.exp: Run new VFP tests.
This commit is contained in:
parent
a660f11eb1
commit
bfae80f222
10 changed files with 2288 additions and 27 deletions
|
@ -1,3 +1,37 @@
|
|||
2002-01-15 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
Support for VFP instructions
|
||||
* tc-arm.c (CP_WB_OK, CP_NO_WB): New defines.
|
||||
(cp_address_required_here): New argument wb_ok. When false, do not
|
||||
accept write-back forms of addressing. Change all callers.
|
||||
(FPU_VFP_EXT_NONE, FPU_VFP_EXT_V1xD, FPU_VFP_VFP_V1)
|
||||
(FPU_VFP_EXT_V2): Define.
|
||||
(FPU_ARCH_VFP, FPU_ARCH_VFP_V1xD, FPU_ARCH_VFP_V1, FPU_ARCH_VFP_V2):
|
||||
Define in terms of above.
|
||||
(vfp_dp_reg_pos, vfp_sp_reg_pos, vfp_ldstm_type): New enums.
|
||||
(vfp_reg): New struct.
|
||||
(vfp_regs): New array of registers.
|
||||
(insns): Add VFP instructions.
|
||||
(sn_table): New array of VFP single-precision register names.
|
||||
(dn_table): New array of VFP double-precision register names.
|
||||
(all_reg_maps): Add the new register tables.
|
||||
(arm_reg_type): Add new values for above. Increase RET_TYPE_MAX.
|
||||
(vfp_sp_reg_required_here, vfp_dp_reg_required_here, do_vfp_sp_monadic)
|
||||
(do_vfp_dp_monadic, do_vfp_sp_dyadic, do_vfp_dp_dyadic)
|
||||
(do_vfp_reg_from_sp, do_vfp_sp_reg2, do_vfp_sp_from_reg)
|
||||
(do_vfp_reg_from_dp, do_vfp_reg2_from_dp, do_vfp_dp_from_reg)
|
||||
(do_vfp_dp_from_reg2, vfp_psr_parse, vfp_psr_required_here)
|
||||
(do_vfp_reg_from_ctrl, do_vfp_ctrl_from_reg, do_vfp_sp_ldst)
|
||||
(do_vfp_dp_ldst, vfp_sp_reg_list, vfp_dp_reg_list, vfp_sp_ldstm)
|
||||
(vfp_dp_ldstm, do_vfp_sp_ldstmia, do_vfp_sp_ldstmdb, do_vfp_ldstmia)
|
||||
(do_vfp_dp_ldstmdb, do_vfp_xp_ldstmia, do_vfp_xp_ldstmdb)
|
||||
(do_vfp_sp_compare_z, do_vfp_dp_compare_z, do_vfp_dp_sp_cvt)
|
||||
(do_vfp_sp_dp_cvt): New functions.
|
||||
(md_begin): Set soft-float flag for appropriate VFP work.
|
||||
(md_atof): Handle VFP-format doubles.
|
||||
(md_parse_option): Handle VFP command-line options.
|
||||
(md_show_usage): Display VFP command-line options.
|
||||
|
||||
2002-01-15 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
* tc-arm.c (md_parse_option): Tidy up setting of cpu_variant for
|
||||
|
|
1200
gas/config/tc-arm.c
1200
gas/config/tc-arm.c
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,10 @@
|
|||
2002-01-15 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
* gas/arm/vfp1.s gas/arm/vf1.d: New files.
|
||||
* gas/arm/vfp1xD.s gas/arm/vf1xD.d: New files.
|
||||
* gas/arm/vfp-bad.s gas/arm/vfp-bad.l: New files.
|
||||
* gas/arm/arm.exp: Run new VFP tests.
|
||||
|
||||
2002-01-15 Nick Clifton <nickc@cambridge.redhat.com>
|
||||
|
||||
* gas/elf/section2.e-m32r: New file.
|
||||
|
|
|
@ -47,6 +47,12 @@ if {[istarget *arm*-*-*] || [istarget "xscale-*-*"]} then {
|
|||
|
||||
run_dump_test "fpa-mem"
|
||||
|
||||
run_dump_test "vfp1xD"
|
||||
|
||||
run_dump_test "vfp1"
|
||||
|
||||
run_errors_test "vfp-bad" "-mvfp" "VFP errors"
|
||||
|
||||
run_dump_test "xscale"
|
||||
|
||||
run_dump_test "adrl"
|
||||
|
|
9
gas/testsuite/gas/arm/vfp-bad.l
Normal file
9
gas/testsuite/gas/arm/vfp-bad.l
Normal file
|
@ -0,0 +1,9 @@
|
|||
[^:]*: Assembler messages:
|
||||
[^:]*:4: Error: garbage following instruction -- `fstd d0,\[r0\],#8'
|
||||
[^:]*:5: Error: garbage following instruction -- `fstd d0,\[r0,#-8\]!'
|
||||
[^:]*:6: Error: garbage following instruction -- `fsts s0,\[r0\],#8'
|
||||
[^:]*:7: Error: garbage following instruction -- `fsts s0,\[r0,#-8\]!'
|
||||
[^:]*:8: Error: garbage following instruction -- `fldd d0,\[r0\],#8'
|
||||
[^:]*:9: Error: garbage following instruction -- `fldd d0,\[r0,#-8\]!'
|
||||
[^:]*:10: Error: garbage following instruction -- `flds s0,\[r0\],#8'
|
||||
[^:]*:11: Error: garbage following instruction -- `flds s0,\[r0,#-8\]!'
|
11
gas/testsuite/gas/arm/vfp-bad.s
Normal file
11
gas/testsuite/gas/arm/vfp-bad.s
Normal file
|
@ -0,0 +1,11 @@
|
|||
.global entry
|
||||
.text
|
||||
entry:
|
||||
fstd d0, [r0], #8
|
||||
fstd d0, [r0, #-8]!
|
||||
fsts s0, [r0], #8
|
||||
fsts s0, [r0, #-8]!
|
||||
fldd d0, [r0], #8
|
||||
fldd d0, [r0, #-8]!
|
||||
flds s0, [r0], #8
|
||||
flds s0, [r0, #-8]!
|
190
gas/testsuite/gas/arm/vfp1.d
Normal file
190
gas/testsuite/gas/arm/vfp1.d
Normal file
|
@ -0,0 +1,190 @@
|
|||
#objdump: -dr --prefix-addresses --show-raw-insn
|
||||
#name: VFP Double-precision instructions
|
||||
#as: -mvfp
|
||||
|
||||
# Test the ARM VFP Double Precision instructions
|
||||
|
||||
.*: +file format .*arm.*
|
||||
|
||||
Disassembly of section .text:
|
||||
0+000 <[^>]*> eeb40bc0 fcmped d0, d0
|
||||
0+004 <[^>]*> eeb50bc0 fcmpezd d0
|
||||
0+008 <[^>]*> eeb40b40 fcmpd d0, d0
|
||||
0+00c <[^>]*> eeb50b40 fcmpzd d0
|
||||
0+010 <[^>]*> eeb00bc0 fabsd d0, d0
|
||||
0+014 <[^>]*> eeb00b40 fcpyd d0, d0
|
||||
0+018 <[^>]*> eeb10b40 fnegd d0, d0
|
||||
0+01c <[^>]*> eeb10bc0 fsqrtd d0, d0
|
||||
0+020 <[^>]*> ee300b00 faddd d0, d0, d0
|
||||
0+024 <[^>]*> ee800b00 fdivd d0, d0, d0
|
||||
0+028 <[^>]*> ee000b00 fmacd d0, d0, d0
|
||||
0+02c <[^>]*> ee100b00 fmscd d0, d0, d0
|
||||
0+030 <[^>]*> ee200b00 fmuld d0, d0, d0
|
||||
0+034 <[^>]*> ee000b40 fnmacd d0, d0, d0
|
||||
0+038 <[^>]*> ee100b40 fnmscd d0, d0, d0
|
||||
0+03c <[^>]*> ee200b40 fnmuld d0, d0, d0
|
||||
0+040 <[^>]*> ee300b40 fsubd d0, d0, d0
|
||||
0+044 <[^>]*> ed900b00 fldd d0, \[r0\]
|
||||
0+048 <[^>]*> ed800b00 fstd d0, \[r0\]
|
||||
0+04c <[^>]*> ec900b02 fldmiad r0, {d0}
|
||||
0+050 <[^>]*> ec900b02 fldmiad r0, {d0}
|
||||
0+054 <[^>]*> ecb00b02 fldmiad r0!, {d0}
|
||||
0+058 <[^>]*> ecb00b02 fldmiad r0!, {d0}
|
||||
0+05c <[^>]*> ed300b02 fldmdbd r0!, {d0}
|
||||
0+060 <[^>]*> ed300b02 fldmdbd r0!, {d0}
|
||||
0+064 <[^>]*> ec800b02 fstmiad r0, {d0}
|
||||
0+068 <[^>]*> ec800b02 fstmiad r0, {d0}
|
||||
0+06c <[^>]*> eca00b02 fstmiad r0!, {d0}
|
||||
0+070 <[^>]*> eca00b02 fstmiad r0!, {d0}
|
||||
0+074 <[^>]*> ed200b02 fstmdbd r0!, {d0}
|
||||
0+078 <[^>]*> ed200b02 fstmdbd r0!, {d0}
|
||||
0+07c <[^>]*> eeb80bc0 fsitod d0, s0
|
||||
0+080 <[^>]*> eeb80b40 fuitod d0, s0
|
||||
0+084 <[^>]*> eebd0b40 ftosid s0, d0
|
||||
0+088 <[^>]*> eebd0bc0 ftosizd s0, d0
|
||||
0+08c <[^>]*> eebc0b40 ftouid s0, d0
|
||||
0+090 <[^>]*> eebc0bc0 ftouizd s0, d0
|
||||
0+094 <[^>]*> eeb70ac0 fcvtds d0, s0
|
||||
0+098 <[^>]*> eeb70bc0 fcvtsd s0, d0
|
||||
0+09c <[^>]*> ee300b10 fmrdh r0, d0
|
||||
0+0a0 <[^>]*> ee100b10 fmrdl r0, d0
|
||||
0+0a4 <[^>]*> ee200b10 fmdhr d0, r0
|
||||
0+0a8 <[^>]*> ee000b10 fmdlr d0, r0
|
||||
0+0ac <[^>]*> eeb51b40 fcmpzd d1
|
||||
0+0b0 <[^>]*> eeb52b40 fcmpzd d2
|
||||
0+0b4 <[^>]*> eeb5fb40 fcmpzd d15
|
||||
0+0b8 <[^>]*> eeb40b41 fcmpd d0, d1
|
||||
0+0bc <[^>]*> eeb40b42 fcmpd d0, d2
|
||||
0+0c0 <[^>]*> eeb40b4f fcmpd d0, d15
|
||||
0+0c4 <[^>]*> eeb41b40 fcmpd d1, d0
|
||||
0+0c8 <[^>]*> eeb42b40 fcmpd d2, d0
|
||||
0+0cc <[^>]*> eeb4fb40 fcmpd d15, d0
|
||||
0+0d0 <[^>]*> eeb45b4c fcmpd d5, d12
|
||||
0+0d4 <[^>]*> eeb10b41 fnegd d0, d1
|
||||
0+0d8 <[^>]*> eeb10b42 fnegd d0, d2
|
||||
0+0dc <[^>]*> eeb10b4f fnegd d0, d15
|
||||
0+0e0 <[^>]*> eeb11b40 fnegd d1, d0
|
||||
0+0e4 <[^>]*> eeb12b40 fnegd d2, d0
|
||||
0+0e8 <[^>]*> eeb1fb40 fnegd d15, d0
|
||||
0+0ec <[^>]*> eeb1cb45 fnegd d12, d5
|
||||
0+0f0 <[^>]*> ee300b01 faddd d0, d0, d1
|
||||
0+0f4 <[^>]*> ee300b02 faddd d0, d0, d2
|
||||
0+0f8 <[^>]*> ee300b0f faddd d0, d0, d15
|
||||
0+0fc <[^>]*> ee310b00 faddd d0, d1, d0
|
||||
0+100 <[^>]*> ee320b00 faddd d0, d2, d0
|
||||
0+104 <[^>]*> ee3f0b00 faddd d0, d15, d0
|
||||
0+108 <[^>]*> ee301b00 faddd d1, d0, d0
|
||||
0+10c <[^>]*> ee302b00 faddd d2, d0, d0
|
||||
0+110 <[^>]*> ee30fb00 faddd d15, d0, d0
|
||||
0+114 <[^>]*> ee39cb05 faddd d12, d9, d5
|
||||
0+118 <[^>]*> eeb70ae0 fcvtds d0, s1
|
||||
0+11c <[^>]*> eeb70ac1 fcvtds d0, s2
|
||||
0+120 <[^>]*> eeb70aef fcvtds d0, s31
|
||||
0+124 <[^>]*> eeb71ac0 fcvtds d1, s0
|
||||
0+128 <[^>]*> eeb72ac0 fcvtds d2, s0
|
||||
0+12c <[^>]*> eeb7fac0 fcvtds d15, s0
|
||||
0+130 <[^>]*> eef70bc0 fcvtsd s1, d0
|
||||
0+134 <[^>]*> eeb71bc0 fcvtsd s2, d0
|
||||
0+138 <[^>]*> eef7fbc0 fcvtsd s31, d0
|
||||
0+13c <[^>]*> eeb70bc1 fcvtsd s0, d1
|
||||
0+140 <[^>]*> eeb70bc2 fcvtsd s0, d2
|
||||
0+144 <[^>]*> eeb70bcf fcvtsd s0, d15
|
||||
0+148 <[^>]*> ee301b10 fmrdh r1, d0
|
||||
0+14c <[^>]*> ee30eb10 fmrdh lr, d0
|
||||
0+150 <[^>]*> ee310b10 fmrdh r0, d1
|
||||
0+154 <[^>]*> ee320b10 fmrdh r0, d2
|
||||
0+158 <[^>]*> ee3f0b10 fmrdh r0, d15
|
||||
0+15c <[^>]*> ee101b10 fmrdl r1, d0
|
||||
0+160 <[^>]*> ee10eb10 fmrdl lr, d0
|
||||
0+164 <[^>]*> ee110b10 fmrdl r0, d1
|
||||
0+168 <[^>]*> ee120b10 fmrdl r0, d2
|
||||
0+16c <[^>]*> ee1f0b10 fmrdl r0, d15
|
||||
0+170 <[^>]*> ee201b10 fmdhr d0, r1
|
||||
0+174 <[^>]*> ee20eb10 fmdhr d0, lr
|
||||
0+178 <[^>]*> ee210b10 fmdhr d1, r0
|
||||
0+17c <[^>]*> ee220b10 fmdhr d2, r0
|
||||
0+180 <[^>]*> ee2f0b10 fmdhr d15, r0
|
||||
0+184 <[^>]*> ee001b10 fmdlr d0, r1
|
||||
0+188 <[^>]*> ee00eb10 fmdlr d0, lr
|
||||
0+18c <[^>]*> ee010b10 fmdlr d1, r0
|
||||
0+190 <[^>]*> ee020b10 fmdlr d2, r0
|
||||
0+194 <[^>]*> ee0f0b10 fmdlr d15, r0
|
||||
0+198 <[^>]*> ed910b00 fldd d0, \[r1\]
|
||||
0+19c <[^>]*> ed9e0b00 fldd d0, \[lr\]
|
||||
0+1a0 <[^>]*> ed900b00 fldd d0, \[r0\]
|
||||
0+1a4 <[^>]*> ed900bff fldd d0, \[r0, #1020\]
|
||||
0+1a8 <[^>]*> ed100bff fldd d0, \[r0, -#1020\]
|
||||
0+1ac <[^>]*> ed901b00 fldd d1, \[r0\]
|
||||
0+1b0 <[^>]*> ed902b00 fldd d2, \[r0\]
|
||||
0+1b4 <[^>]*> ed90fb00 fldd d15, \[r0\]
|
||||
0+1b8 <[^>]*> ed8ccbc9 fstd d12, \[ip, #804\]
|
||||
0+1bc <[^>]*> ec901b02 fldmiad r0, {d1}
|
||||
0+1c0 <[^>]*> ec902b02 fldmiad r0, {d2}
|
||||
0+1c4 <[^>]*> ec90fb02 fldmiad r0, {d15}
|
||||
0+1c8 <[^>]*> ec900b04 fldmiad r0, {d0-d1}
|
||||
0+1cc <[^>]*> ec900b06 fldmiad r0, {d0-d2}
|
||||
0+1d0 <[^>]*> ec900b20 fldmiad r0, {d0-d15}
|
||||
0+1d4 <[^>]*> ec901b1e fldmiad r0, {d1-d15}
|
||||
0+1d8 <[^>]*> ec902b1c fldmiad r0, {d2-d15}
|
||||
0+1dc <[^>]*> ec90eb04 fldmiad r0, {d14-d15}
|
||||
0+1e0 <[^>]*> ec910b02 fldmiad r1, {d0}
|
||||
0+1e4 <[^>]*> ec9e0b02 fldmiad lr, {d0}
|
||||
0+1e8 <[^>]*> eeb50b40 fcmpzd d0
|
||||
0+1ec <[^>]*> eeb51b40 fcmpzd d1
|
||||
0+1f0 <[^>]*> eeb52b40 fcmpzd d2
|
||||
0+1f4 <[^>]*> eeb53b40 fcmpzd d3
|
||||
0+1f8 <[^>]*> eeb54b40 fcmpzd d4
|
||||
0+1fc <[^>]*> eeb55b40 fcmpzd d5
|
||||
0+200 <[^>]*> eeb56b40 fcmpzd d6
|
||||
0+204 <[^>]*> eeb57b40 fcmpzd d7
|
||||
0+208 <[^>]*> eeb58b40 fcmpzd d8
|
||||
0+20c <[^>]*> eeb59b40 fcmpzd d9
|
||||
0+210 <[^>]*> eeb5ab40 fcmpzd d10
|
||||
0+214 <[^>]*> eeb5bb40 fcmpzd d11
|
||||
0+218 <[^>]*> eeb5cb40 fcmpzd d12
|
||||
0+21c <[^>]*> eeb5db40 fcmpzd d13
|
||||
0+220 <[^>]*> eeb5eb40 fcmpzd d14
|
||||
0+224 <[^>]*> eeb5fb40 fcmpzd d15
|
||||
0+228 <[^>]*> 0eb41bcf fcmpedeq d1, d15
|
||||
0+22c <[^>]*> 0eb52bc0 fcmpezdeq d2
|
||||
0+230 <[^>]*> 0eb43b4e fcmpdeq d3, d14
|
||||
0+234 <[^>]*> 0eb54b40 fcmpzdeq d4
|
||||
0+238 <[^>]*> 0eb05bcd fabsdeq d5, d13
|
||||
0+23c <[^>]*> 0eb06b4c fcpydeq d6, d12
|
||||
0+240 <[^>]*> 0eb17b4b fnegdeq d7, d11
|
||||
0+244 <[^>]*> 0eb18bca fsqrtdeq d8, d10
|
||||
0+248 <[^>]*> 0e319b0f fadddeq d9, d1, d15
|
||||
0+24c <[^>]*> 0e832b0e fdivdeq d2, d3, d14
|
||||
0+250 <[^>]*> 0e0d4b0c fmacdeq d4, d13, d12
|
||||
0+254 <[^>]*> 0e165b0b fmscdeq d5, d6, d11
|
||||
0+258 <[^>]*> 0e2a7b09 fmuldeq d7, d10, d9
|
||||
0+25c <[^>]*> 0e098b4a fnmacdeq d8, d9, d10
|
||||
0+260 <[^>]*> 0e167b4b fnmscdeq d7, d6, d11
|
||||
0+264 <[^>]*> 0e245b4c fnmuldeq d5, d4, d12
|
||||
0+268 <[^>]*> 0e3d3b4e fsubdeq d3, d13, d14
|
||||
0+26c <[^>]*> 0d952b00 flddeq d2, \[r5\]
|
||||
0+270 <[^>]*> 0d8c1b00 fstdeq d1, \[ip\]
|
||||
0+274 <[^>]*> 0c911b02 fldmiadeq r1, {d1}
|
||||
0+278 <[^>]*> 0c922b02 fldmiadeq r2, {d2}
|
||||
0+27c <[^>]*> 0cb33b02 fldmiadeq r3!, {d3}
|
||||
0+280 <[^>]*> 0cb44b02 fldmiadeq r4!, {d4}
|
||||
0+284 <[^>]*> 0d355b02 fldmdbdeq r5!, {d5}
|
||||
0+288 <[^>]*> 0d366b02 fldmdbdeq r6!, {d6}
|
||||
0+28c <[^>]*> 0c87fb02 fstmiadeq r7, {d15}
|
||||
0+290 <[^>]*> 0c88eb02 fstmiadeq r8, {d14}
|
||||
0+294 <[^>]*> 0ca9db02 fstmiadeq r9!, {d13}
|
||||
0+298 <[^>]*> 0caacb02 fstmiadeq sl!, {d12}
|
||||
0+29c <[^>]*> 0d2bbb02 fstmdbdeq fp!, {d11}
|
||||
0+2a0 <[^>]*> 0d2cab02 fstmdbdeq ip!, {d10}
|
||||
0+2a4 <[^>]*> 0eb8fbe0 fsitodeq d15, s1
|
||||
0+2a8 <[^>]*> 0eb81b6f fuitodeq d1, s31
|
||||
0+2ac <[^>]*> 0efd0b4f ftosideq s1, d15
|
||||
0+2b0 <[^>]*> 0efdfbc2 ftosizdeq s31, d2
|
||||
0+2b4 <[^>]*> 0efc7b42 ftouideq s15, d2
|
||||
0+2b8 <[^>]*> 0efc5bc3 ftouizdeq s11, d3
|
||||
0+2bc <[^>]*> 0eb71ac5 fcvtdseq d1, s10
|
||||
0+2c0 <[^>]*> 0ef75bc1 fcvtsdeq s11, d1
|
||||
0+2c4 <[^>]*> 0e318b10 fmrdheq r8, d1
|
||||
0+2c8 <[^>]*> 0e1f7b10 fmrdleq r7, d15
|
||||
0+2cc <[^>]*> 0e21fb10 fmdhreq d1, pc
|
||||
0+2d0 <[^>]*> 0e0f1b10 fmdlreq d15, r1
|
278
gas/testsuite/gas/arm/vfp1.s
Normal file
278
gas/testsuite/gas/arm/vfp1.s
Normal file
|
@ -0,0 +1,278 @@
|
|||
@ VFP Instructions for D variants (Double precision)
|
||||
.text
|
||||
.global F
|
||||
F:
|
||||
@ First we test the basic syntax and bit patterns of the opcodes.
|
||||
@ Most of these tests deliberatly use d0/r0 to avoid setting
|
||||
@ any more bits than necessary.
|
||||
|
||||
@ Comparison operations
|
||||
|
||||
fcmped d0, d0
|
||||
fcmpezd d0
|
||||
fcmpd d0, d0
|
||||
fcmpzd d0
|
||||
|
||||
@ Monadic data operations
|
||||
|
||||
fabsd d0, d0
|
||||
fcpyd d0, d0
|
||||
fnegd d0, d0
|
||||
fsqrtd d0, d0
|
||||
|
||||
@ Dyadic data operations
|
||||
|
||||
faddd d0, d0, d0
|
||||
fdivd d0, d0, d0
|
||||
fmacd d0, d0, d0
|
||||
fmscd d0, d0, d0
|
||||
fmuld d0, d0, d0
|
||||
fnmacd d0, d0, d0
|
||||
fnmscd d0, d0, d0
|
||||
fnmuld d0, d0, d0
|
||||
fsubd d0, d0, d0
|
||||
|
||||
@ Load/store operations
|
||||
|
||||
fldd d0, [r0]
|
||||
fstd d0, [r0]
|
||||
|
||||
@ Load/store multiple operations
|
||||
|
||||
fldmiad r0, {d0}
|
||||
fldmfdd r0, {d0}
|
||||
fldmiad r0!, {d0}
|
||||
fldmfdd r0!, {d0}
|
||||
fldmdbd r0!, {d0}
|
||||
fldmead r0!, {d0}
|
||||
|
||||
fstmiad r0, {d0}
|
||||
fstmead r0, {d0}
|
||||
fstmiad r0!, {d0}
|
||||
fstmead r0!, {d0}
|
||||
fstmdbd r0!, {d0}
|
||||
fstmfdd r0!, {d0}
|
||||
|
||||
@ Conversion operations
|
||||
|
||||
fsitod d0, s0
|
||||
fuitod d0, s0
|
||||
|
||||
ftosid s0, d0
|
||||
ftosizd s0, d0
|
||||
ftouid s0, d0
|
||||
ftouizd s0, d0
|
||||
|
||||
fcvtds d0, s0
|
||||
fcvtsd s0, d0
|
||||
|
||||
@ ARM from VFP operations
|
||||
|
||||
fmrdh r0, d0
|
||||
fmrdl r0, d0
|
||||
|
||||
@ VFP From ARM operations
|
||||
|
||||
fmdhr d0, r0
|
||||
fmdlr d0, r0
|
||||
|
||||
@ Now we test that the register fields are updated correctly for
|
||||
@ each class of instruction.
|
||||
|
||||
@ Single register operations (compare-zero):
|
||||
|
||||
fcmpzd d1
|
||||
fcmpzd d2
|
||||
fcmpzd d15
|
||||
|
||||
@ Two register comparison operations:
|
||||
|
||||
fcmpd d0, d1
|
||||
fcmpd d0, d2
|
||||
fcmpd d0, d15
|
||||
fcmpd d1, d0
|
||||
fcmpd d2, d0
|
||||
fcmpd d15, d0
|
||||
fcmpd d5, d12
|
||||
|
||||
@ Two register data operations (monadic)
|
||||
|
||||
fnegd d0, d1
|
||||
fnegd d0, d2
|
||||
fnegd d0, d15
|
||||
fnegd d1, d0
|
||||
fnegd d2, d0
|
||||
fnegd d15, d0
|
||||
fnegd d12, d5
|
||||
|
||||
@ Three register data operations (dyadic)
|
||||
|
||||
faddd d0, d0, d1
|
||||
faddd d0, d0, d2
|
||||
faddd d0, d0, d15
|
||||
faddd d0, d1, d0
|
||||
faddd d0, d2, d0
|
||||
faddd d0, d15, d0
|
||||
faddd d1, d0, d0
|
||||
faddd d2, d0, d0
|
||||
faddd d15, d0, d0
|
||||
faddd d12, d9, d5
|
||||
|
||||
@ Conversion operations
|
||||
|
||||
fcvtds d0, s1
|
||||
fcvtds d0, s2
|
||||
fcvtds d0, s31
|
||||
fcvtds d1, s0
|
||||
fcvtds d2, s0
|
||||
fcvtds d15, s0
|
||||
fcvtsd s1, d0
|
||||
fcvtsd s2, d0
|
||||
fcvtsd s31, d0
|
||||
fcvtsd s0, d1
|
||||
fcvtsd s0, d2
|
||||
fcvtsd s0, d15
|
||||
|
||||
@ Move to VFP from ARM
|
||||
|
||||
fmrdh r1, d0
|
||||
fmrdh r14, d0
|
||||
fmrdh r0, d1
|
||||
fmrdh r0, d2
|
||||
fmrdh r0, d15
|
||||
fmrdl r1, d0
|
||||
fmrdl r14, d0
|
||||
fmrdl r0, d1
|
||||
fmrdl r0, d2
|
||||
fmrdl r0, d15
|
||||
|
||||
@ Move to ARM from VFP
|
||||
|
||||
fmdhr d0, r1
|
||||
fmdhr d0, r14
|
||||
fmdhr d1, r0
|
||||
fmdhr d2, r0
|
||||
fmdhr d15, r0
|
||||
fmdlr d0, r1
|
||||
fmdlr d0, r14
|
||||
fmdlr d1, r0
|
||||
fmdlr d2, r0
|
||||
fmdlr d15, r0
|
||||
|
||||
@ Load/store operations
|
||||
|
||||
fldd d0, [r1]
|
||||
fldd d0, [r14]
|
||||
fldd d0, [r0, #0]
|
||||
fldd d0, [r0, #1020]
|
||||
fldd d0, [r0, #-1020]
|
||||
fldd d1, [r0]
|
||||
fldd d2, [r0]
|
||||
fldd d15, [r0]
|
||||
fstd d12, [r12, #804]
|
||||
|
||||
@ Load/store multiple operations
|
||||
|
||||
fldmiad r0, {d1}
|
||||
fldmiad r0, {d2}
|
||||
fldmiad r0, {d15}
|
||||
fldmiad r0, {d0-d1}
|
||||
fldmiad r0, {d0-d2}
|
||||
fldmiad r0, {d0-d15}
|
||||
fldmiad r0, {d1-d15}
|
||||
fldmiad r0, {d2-d15}
|
||||
fldmiad r0, {d14-d15}
|
||||
fldmiad r1, {d0}
|
||||
fldmiad r14, {d0}
|
||||
|
||||
@ Check that we assemble all the register names correctly
|
||||
|
||||
fcmpzd d0
|
||||
fcmpzd d1
|
||||
fcmpzd d2
|
||||
fcmpzd d3
|
||||
fcmpzd d4
|
||||
fcmpzd d5
|
||||
fcmpzd d6
|
||||
fcmpzd d7
|
||||
fcmpzd d8
|
||||
fcmpzd d9
|
||||
fcmpzd d10
|
||||
fcmpzd d11
|
||||
fcmpzd d12
|
||||
fcmpzd d13
|
||||
fcmpzd d14
|
||||
fcmpzd d15
|
||||
|
||||
@ Now we check the placement of the conditional execution substring.
|
||||
@ On VFP this is always at the end of the instruction.
|
||||
|
||||
@ Comparison operations
|
||||
|
||||
fcmpedeq d1, d15
|
||||
fcmpezdeq d2
|
||||
fcmpdeq d3, d14
|
||||
fcmpzdeq d4
|
||||
|
||||
@ Monadic data operations
|
||||
|
||||
fabsdeq d5, d13
|
||||
fcpydeq d6, d12
|
||||
fnegdeq d7, d11
|
||||
fsqrtdeq d8, d10
|
||||
|
||||
@ Dyadic data operations
|
||||
|
||||
fadddeq d9, d1, d15
|
||||
fdivdeq d2, d3, d14
|
||||
fmacdeq d4, d13, d12
|
||||
fmscdeq d5, d6, d11
|
||||
fmuldeq d7, d10, d9
|
||||
fnmacdeq d8, d9, d10
|
||||
fnmscdeq d7, d6, d11
|
||||
fnmuldeq d5, d4, d12
|
||||
fsubdeq d3, d13, d14
|
||||
|
||||
@ Load/store operations
|
||||
|
||||
flddeq d2, [r5]
|
||||
fstdeq d1, [r12]
|
||||
|
||||
@ Load/store multiple operations
|
||||
|
||||
fldmiadeq r1, {d1}
|
||||
fldmfddeq r2, {d2}
|
||||
fldmiadeq r3!, {d3}
|
||||
fldmfddeq r4!, {d4}
|
||||
fldmdbdeq r5!, {d5}
|
||||
fldmeadeq r6!, {d6}
|
||||
|
||||
fstmiadeq r7, {d15}
|
||||
fstmeadeq r8, {d14}
|
||||
fstmiadeq r9!, {d13}
|
||||
fstmeadeq r10!, {d12}
|
||||
fstmdbdeq r11!, {d11}
|
||||
fstmfddeq r12!, {d10}
|
||||
|
||||
@ Conversion operations
|
||||
|
||||
fsitodeq d15, s1
|
||||
fuitodeq d1, s31
|
||||
|
||||
ftosideq s1, d15
|
||||
ftosizdeq s31, d2
|
||||
ftouideq s15, d2
|
||||
ftouizdeq s11, d3
|
||||
|
||||
fcvtdseq d1, s10
|
||||
fcvtsdeq s11, d1
|
||||
|
||||
@ ARM from VFP operations
|
||||
|
||||
fmrdheq r8, d1
|
||||
fmrdleq r7, d15
|
||||
|
||||
@ VFP From ARM operations
|
||||
|
||||
fmdhreq d1, r15
|
||||
fmdlreq d15, r1
|
241
gas/testsuite/gas/arm/vfp1xD.d
Normal file
241
gas/testsuite/gas/arm/vfp1xD.d
Normal file
|
@ -0,0 +1,241 @@
|
|||
#objdump: -dr --prefix-addresses --show-raw-insn
|
||||
#name: VFP Single-precision instructions
|
||||
#as: -mvfpxd
|
||||
|
||||
# Test the ARM VFP Single Precision instructions
|
||||
|
||||
.*: +file format .*arm.*
|
||||
|
||||
Disassembly of section .text:
|
||||
0+000 <[^>]*> eef1fa10 fmstat
|
||||
0+004 <[^>]*> eeb40ac0 fcmpes s0, s0
|
||||
0+008 <[^>]*> eeb50ac0 fcmpezs s0
|
||||
0+00c <[^>]*> eeb40a40 fcmps s0, s0
|
||||
0+010 <[^>]*> eeb50a40 fcmpzs s0
|
||||
0+014 <[^>]*> eeb00ac0 fabss s0, s0
|
||||
0+018 <[^>]*> eeb00a40 fcpys s0, s0
|
||||
0+01c <[^>]*> eeb10a40 fnegs s0, s0
|
||||
0+020 <[^>]*> eeb10ac0 fsqrts s0, s0
|
||||
0+024 <[^>]*> ee300a00 fadds s0, s0, s0
|
||||
0+028 <[^>]*> ee800a00 fdivs s0, s0, s0
|
||||
0+02c <[^>]*> ee000a00 fmacs s0, s0, s0
|
||||
0+030 <[^>]*> ee100a00 fmscs s0, s0, s0
|
||||
0+034 <[^>]*> ee200a00 fmuls s0, s0, s0
|
||||
0+038 <[^>]*> ee000a40 fnmacs s0, s0, s0
|
||||
0+03c <[^>]*> ee100a40 fnmscs s0, s0, s0
|
||||
0+040 <[^>]*> ee200a40 fnmuls s0, s0, s0
|
||||
0+044 <[^>]*> ee300a40 fsubs s0, s0, s0
|
||||
0+048 <[^>]*> ed900a00 flds s0, \[r0\]
|
||||
0+04c <[^>]*> ed800a00 fsts s0, \[r0\]
|
||||
0+050 <[^>]*> ec900a01 fldmias r0, {s0}
|
||||
0+054 <[^>]*> ec900a01 fldmias r0, {s0}
|
||||
0+058 <[^>]*> ecb00a01 fldmias r0!, {s0}
|
||||
0+05c <[^>]*> ecb00a01 fldmias r0!, {s0}
|
||||
0+060 <[^>]*> ed300a01 fldmdbs r0!, {s0}
|
||||
0+064 <[^>]*> ed300a01 fldmdbs r0!, {s0}
|
||||
0+068 <[^>]*> ec900b03 fldmiax r0, {d0}
|
||||
0+06c <[^>]*> ec900b03 fldmiax r0, {d0}
|
||||
0+070 <[^>]*> ecb00b03 fldmiax r0!, {d0}
|
||||
0+074 <[^>]*> ecb00b03 fldmiax r0!, {d0}
|
||||
0+078 <[^>]*> ed300b03 fldmdbx r0!, {d0}
|
||||
0+07c <[^>]*> ed300b03 fldmdbx r0!, {d0}
|
||||
0+080 <[^>]*> ec800a01 fstmias r0, {s0}
|
||||
0+084 <[^>]*> ec800a01 fstmias r0, {s0}
|
||||
0+088 <[^>]*> eca00a01 fstmias r0!, {s0}
|
||||
0+08c <[^>]*> eca00a01 fstmias r0!, {s0}
|
||||
0+090 <[^>]*> ed200a01 fstmdbs r0!, {s0}
|
||||
0+094 <[^>]*> ed200a01 fstmdbs r0!, {s0}
|
||||
0+098 <[^>]*> ec800b03 fstmiax r0, {d0}
|
||||
0+09c <[^>]*> ec800b03 fstmiax r0, {d0}
|
||||
0+0a0 <[^>]*> eca00b03 fstmiax r0!, {d0}
|
||||
0+0a4 <[^>]*> eca00b03 fstmiax r0!, {d0}
|
||||
0+0a8 <[^>]*> ed200b03 fstmdbx r0!, {d0}
|
||||
0+0ac <[^>]*> ed200b03 fstmdbx r0!, {d0}
|
||||
0+0b0 <[^>]*> eeb80ac0 fsitos s0, s0
|
||||
0+0b4 <[^>]*> eeb80a40 fuitos s0, s0
|
||||
0+0b8 <[^>]*> eebd0a40 ftosis s0, s0
|
||||
0+0bc <[^>]*> eebd0ac0 ftosizs s0, s0
|
||||
0+0c0 <[^>]*> eebc0a40 ftouis s0, s0
|
||||
0+0c4 <[^>]*> eebc0ac0 ftouizs s0, s0
|
||||
0+0c8 <[^>]*> ee100a10 fmrs r0, s0
|
||||
0+0cc <[^>]*> eef00a10 fmrx r0, fpsid
|
||||
0+0d0 <[^>]*> eef10a10 fmrx r0, fpscr
|
||||
0+0d4 <[^>]*> eef80a10 fmrx r0, fpexc
|
||||
0+0d8 <[^>]*> ee000a10 fmsr s0, r0
|
||||
0+0dc <[^>]*> eee00a10 fmxr fpsid, r0
|
||||
0+0e0 <[^>]*> eee10a10 fmxr fpscr, r0
|
||||
0+0e4 <[^>]*> eee80a10 fmxr fpexc, r0
|
||||
0+0e8 <[^>]*> eef50a40 fcmpzs s1
|
||||
0+0ec <[^>]*> eeb51a40 fcmpzs s2
|
||||
0+0f0 <[^>]*> eef5fa40 fcmpzs s31
|
||||
0+0f4 <[^>]*> eeb40a60 fcmps s0, s1
|
||||
0+0f8 <[^>]*> eeb40a41 fcmps s0, s2
|
||||
0+0fc <[^>]*> eeb40a6f fcmps s0, s31
|
||||
0+100 <[^>]*> eef40a40 fcmps s1, s0
|
||||
0+104 <[^>]*> eeb41a40 fcmps s2, s0
|
||||
0+108 <[^>]*> eef4fa40 fcmps s31, s0
|
||||
0+10c <[^>]*> eef4aa46 fcmps s21, s12
|
||||
0+110 <[^>]*> eeb10a60 fnegs s0, s1
|
||||
0+114 <[^>]*> eeb10a41 fnegs s0, s2
|
||||
0+118 <[^>]*> eeb10a6f fnegs s0, s31
|
||||
0+11c <[^>]*> eef10a40 fnegs s1, s0
|
||||
0+120 <[^>]*> eeb11a40 fnegs s2, s0
|
||||
0+124 <[^>]*> eef1fa40 fnegs s31, s0
|
||||
0+128 <[^>]*> eeb16a6a fnegs s12, s21
|
||||
0+12c <[^>]*> ee300a20 fadds s0, s0, s0
|
||||
0+130 <[^>]*> ee300a01 fadds s0, s0, s0
|
||||
0+134 <[^>]*> ee300a2f fadds s0, s0, s0
|
||||
0+138 <[^>]*> ee300a80 fadds s0, s1, s0
|
||||
0+13c <[^>]*> ee310a00 fadds s0, s2, s0
|
||||
0+140 <[^>]*> ee3f0a80 fadds s0, s31, s0
|
||||
0+144 <[^>]*> ee700a00 fadds s1, s0, s1
|
||||
0+148 <[^>]*> ee301a00 fadds s2, s0, s2
|
||||
0+14c <[^>]*> ee70fa00 fadds s31, s0, s31
|
||||
0+150 <[^>]*> ee3a6aa2 fadds s12, s21, s12
|
||||
0+154 <[^>]*> eeb80ae0 fsitos s0, s1
|
||||
0+158 <[^>]*> eeb80ac1 fsitos s0, s2
|
||||
0+15c <[^>]*> eeb80aef fsitos s0, s31
|
||||
0+160 <[^>]*> eef80ac0 fsitos s1, s0
|
||||
0+164 <[^>]*> eeb81ac0 fsitos s2, s0
|
||||
0+168 <[^>]*> eef8fac0 fsitos s31, s0
|
||||
0+16c <[^>]*> eebd0a60 ftosis s0, s1
|
||||
0+170 <[^>]*> eebd0a41 ftosis s0, s2
|
||||
0+174 <[^>]*> eebd0a6f ftosis s0, s31
|
||||
0+178 <[^>]*> eefd0a40 ftosis s1, s0
|
||||
0+17c <[^>]*> eebd1a40 ftosis s2, s0
|
||||
0+180 <[^>]*> eefdfa40 ftosis s31, s0
|
||||
0+184 <[^>]*> ee001a10 fmsr s0, r1
|
||||
0+188 <[^>]*> ee007a10 fmsr s0, r7
|
||||
0+18c <[^>]*> ee00ea10 fmsr s0, lr
|
||||
0+190 <[^>]*> ee000a90 fmsr s1, r0
|
||||
0+194 <[^>]*> ee010a10 fmsr s2, r0
|
||||
0+198 <[^>]*> ee0f0a90 fmsr s31, r0
|
||||
0+19c <[^>]*> ee0a7a90 fmsr s21, r7
|
||||
0+1a0 <[^>]*> eee01a10 fmxr fpsid, r1
|
||||
0+1a4 <[^>]*> eee0ea10 fmxr fpsid, lr
|
||||
0+1a8 <[^>]*> ee100a90 fmrs r0, s1
|
||||
0+1ac <[^>]*> ee110a10 fmrs r0, s2
|
||||
0+1b0 <[^>]*> ee1f0a90 fmrs r0, s31
|
||||
0+1b4 <[^>]*> ee101a10 fmrs r1, s0
|
||||
0+1b8 <[^>]*> ee107a10 fmrs r7, s0
|
||||
0+1bc <[^>]*> ee10ea10 fmrs lr, s0
|
||||
0+1c0 <[^>]*> ee159a90 fmrs r9, s11
|
||||
0+1c4 <[^>]*> eef01a10 fmrx r1, fpsid
|
||||
0+1c8 <[^>]*> eef0ea10 fmrx lr, fpsid
|
||||
0+1cc <[^>]*> ed910a00 flds s0, \[r1\]
|
||||
0+1d0 <[^>]*> ed9e0a00 flds s0, \[lr\]
|
||||
0+1d4 <[^>]*> ed900a00 flds s0, \[r0\]
|
||||
0+1d8 <[^>]*> ed900aff flds s0, \[r0, #1020\]
|
||||
0+1dc <[^>]*> ed100aff flds s0, \[r0, -#1020\]
|
||||
0+1e0 <[^>]*> edd00a00 flds s1, \[r0\]
|
||||
0+1e4 <[^>]*> ed901a00 flds s2, \[r0\]
|
||||
0+1e8 <[^>]*> edd0fa00 flds s31, \[r0\]
|
||||
0+1ec <[^>]*> edccaac9 fsts s21, \[ip, #804\]
|
||||
0+1f0 <[^>]*> ecd00a01 fldmias r0, {s1}
|
||||
0+1f4 <[^>]*> ec901a01 fldmias r0, {s2}
|
||||
0+1f8 <[^>]*> ecd0fa01 fldmias r0, {s31}
|
||||
0+1fc <[^>]*> ec900a02 fldmias r0, {s0-s1}
|
||||
0+200 <[^>]*> ec900a03 fldmias r0, {s0-s2}
|
||||
0+204 <[^>]*> ec900a20 fldmias r0, {s0-s31}
|
||||
0+208 <[^>]*> ecd00a1f fldmias r0, {s1-s31}
|
||||
0+20c <[^>]*> ec901a1e fldmias r0, {s2-s31}
|
||||
0+210 <[^>]*> ec90fa02 fldmias r0, {s30-s31}
|
||||
0+214 <[^>]*> ec910a01 fldmias r1, {s0}
|
||||
0+218 <[^>]*> ec9e0a01 fldmias lr, {s0}
|
||||
0+21c <[^>]*> ec801b03 fstmiax r0, {d1}
|
||||
0+220 <[^>]*> ec802b03 fstmiax r0, {d2}
|
||||
0+224 <[^>]*> ec80fb03 fstmiax r0, {d15}
|
||||
0+228 <[^>]*> ec800b05 fstmiax r0, {d0-d1}
|
||||
0+22c <[^>]*> ec800b07 fstmiax r0, {d0-d2}
|
||||
0+230 <[^>]*> ec800b21 fstmiax r0, {d0-d15}
|
||||
0+234 <[^>]*> ec801b1f fstmiax r0, {d1-d15}
|
||||
0+238 <[^>]*> ec802b1d fstmiax r0, {d2-d15}
|
||||
0+23c <[^>]*> ec80eb05 fstmiax r0, {d14-d15}
|
||||
0+240 <[^>]*> ec810b03 fstmiax r1, {d0}
|
||||
0+244 <[^>]*> ec8e0b03 fstmiax lr, {d0}
|
||||
0+248 <[^>]*> eeb50a40 fcmpzs s0
|
||||
0+24c <[^>]*> eef50a40 fcmpzs s1
|
||||
0+250 <[^>]*> eeb51a40 fcmpzs s2
|
||||
0+254 <[^>]*> eef51a40 fcmpzs s3
|
||||
0+258 <[^>]*> eeb52a40 fcmpzs s4
|
||||
0+25c <[^>]*> eef52a40 fcmpzs s5
|
||||
0+260 <[^>]*> eeb53a40 fcmpzs s6
|
||||
0+264 <[^>]*> eef53a40 fcmpzs s7
|
||||
0+268 <[^>]*> eeb54a40 fcmpzs s8
|
||||
0+26c <[^>]*> eef54a40 fcmpzs s9
|
||||
0+270 <[^>]*> eeb55a40 fcmpzs s10
|
||||
0+274 <[^>]*> eef55a40 fcmpzs s11
|
||||
0+278 <[^>]*> eeb56a40 fcmpzs s12
|
||||
0+27c <[^>]*> eef56a40 fcmpzs s13
|
||||
0+280 <[^>]*> eeb57a40 fcmpzs s14
|
||||
0+284 <[^>]*> eef57a40 fcmpzs s15
|
||||
0+288 <[^>]*> eeb58a40 fcmpzs s16
|
||||
0+28c <[^>]*> eef58a40 fcmpzs s17
|
||||
0+290 <[^>]*> eeb59a40 fcmpzs s18
|
||||
0+294 <[^>]*> eef59a40 fcmpzs s19
|
||||
0+298 <[^>]*> eeb5aa40 fcmpzs s20
|
||||
0+29c <[^>]*> eef5aa40 fcmpzs s21
|
||||
0+2a0 <[^>]*> eeb5ba40 fcmpzs s22
|
||||
0+2a4 <[^>]*> eef5ba40 fcmpzs s23
|
||||
0+2a8 <[^>]*> eeb5ca40 fcmpzs s24
|
||||
0+2ac <[^>]*> eef5ca40 fcmpzs s25
|
||||
0+2b0 <[^>]*> eeb5da40 fcmpzs s26
|
||||
0+2b4 <[^>]*> eef5da40 fcmpzs s27
|
||||
0+2b8 <[^>]*> eeb5ea40 fcmpzs s28
|
||||
0+2bc <[^>]*> eef5ea40 fcmpzs s29
|
||||
0+2c0 <[^>]*> eeb5fa40 fcmpzs s30
|
||||
0+2c4 <[^>]*> eef5fa40 fcmpzs s31
|
||||
0+2c8 <[^>]*> 0ef1fa10 fmstateq
|
||||
0+2cc <[^>]*> 0ef41ae3 fcmpeseq s3, s7
|
||||
0+2d0 <[^>]*> 0ef52ac0 fcmpezseq s5
|
||||
0+2d4 <[^>]*> 0ef40a41 fcmpseq s1, s2
|
||||
0+2d8 <[^>]*> 0ef50a40 fcmpzseq s1
|
||||
0+2dc <[^>]*> 0ef00ae1 fabsseq s1, s3
|
||||
0+2e0 <[^>]*> 0ef0fa69 fcpyseq s31, s19
|
||||
0+2e4 <[^>]*> 0eb1aa44 fnegseq s20, s8
|
||||
0+2e8 <[^>]*> 0ef12ae3 fsqrtseq s5, s7
|
||||
0+2ec <[^>]*> 0e323a82 faddseq s6, s5, s6
|
||||
0+2f0 <[^>]*> 0ec11a20 fdivseq s3, s2, s1
|
||||
0+2f4 <[^>]*> 0e4ffa2e fmacseq s31, s30, s29
|
||||
0+2f8 <[^>]*> 0e1dea8d fmscseq s28, s27, s26
|
||||
0+2fc <[^>]*> 0e6cca2b fmulseq s25, s24, s23
|
||||
0+300 <[^>]*> 0e0abaca fnmacseq s22, s21, s20
|
||||
0+304 <[^>]*> 0e599a68 fnmscseq s19, s18, s17
|
||||
0+308 <[^>]*> 0e278ac7 fnmulseq s16, s15, s14
|
||||
0+30c <[^>]*> 0e766a65 fsubseq s13, s12, s11
|
||||
0+310 <[^>]*> 0d985a00 fldseq s10, \[r8\]
|
||||
0+314 <[^>]*> 0dc74a00 fstseq s9, \[r7\]
|
||||
0+318 <[^>]*> 0c914a01 fldmiaseq r1, {s8}
|
||||
0+31c <[^>]*> 0cd23a01 fldmiaseq r2, {s7}
|
||||
0+320 <[^>]*> 0cb33a01 fldmiaseq r3!, {s6}
|
||||
0+324 <[^>]*> 0cf42a01 fldmiaseq r4!, {s5}
|
||||
0+328 <[^>]*> 0d352a01 fldmdbseq r5!, {s4}
|
||||
0+32c <[^>]*> 0d761a01 fldmdbseq r6!, {s3}
|
||||
0+330 <[^>]*> 0c971b03 fldmiaxeq r7, {d1}
|
||||
0+334 <[^>]*> 0c982b03 fldmiaxeq r8, {d2}
|
||||
0+338 <[^>]*> 0cb93b03 fldmiaxeq r9!, {d3}
|
||||
0+33c <[^>]*> 0cba4b03 fldmiaxeq sl!, {d4}
|
||||
0+340 <[^>]*> 0d3b5b03 fldmdbxeq fp!, {d5}
|
||||
0+344 <[^>]*> 0d3c6b03 fldmdbxeq ip!, {d6}
|
||||
0+348 <[^>]*> 0c8d1a01 fstmiaseq sp, {s2}
|
||||
0+34c <[^>]*> 0cce0a01 fstmiaseq lr, {s1}
|
||||
0+350 <[^>]*> 0ce1fa01 fstmiaseq r1!, {s31}
|
||||
0+354 <[^>]*> 0ca2fa01 fstmiaseq r2!, {s30}
|
||||
0+358 <[^>]*> 0d63ea01 fstmdbseq r3!, {s29}
|
||||
0+35c <[^>]*> 0d24ea01 fstmdbseq r4!, {s28}
|
||||
0+360 <[^>]*> 0c857b03 fstmiaxeq r5, {d7}
|
||||
0+364 <[^>]*> 0c868b03 fstmiaxeq r6, {d8}
|
||||
0+368 <[^>]*> 0ca79b03 fstmiaxeq r7!, {d9}
|
||||
0+36c <[^>]*> 0ca8ab03 fstmiaxeq r8!, {d10}
|
||||
0+370 <[^>]*> 0d29bb03 fstmdbxeq r9!, {d11}
|
||||
0+374 <[^>]*> 0d2acb03 fstmdbxeq sl!, {d12}
|
||||
0+378 <[^>]*> 0ef8dac3 fsitoseq s27, s6
|
||||
0+37c <[^>]*> 0efdca62 ftosiseq s25, s5
|
||||
0+380 <[^>]*> 0efdbac2 ftosizseq s23, s4
|
||||
0+384 <[^>]*> 0efcaa61 ftouiseq s21, s3
|
||||
0+388 <[^>]*> 0efc9ac1 ftouizseq s19, s2
|
||||
0+38c <[^>]*> 0ef88a60 fuitoseq s17, s1
|
||||
0+390 <[^>]*> 0e11ba90 fmrseq fp, s3
|
||||
0+394 <[^>]*> 0ef09a10 fmrxeq r9, fpsid
|
||||
0+398 <[^>]*> 0e019a90 fmsreq s3, r9
|
||||
0+39c <[^>]*> 0ee08a10 fmxreq fpsid, r8
|
339
gas/testsuite/gas/arm/vfp1xD.s
Normal file
339
gas/testsuite/gas/arm/vfp1xD.s
Normal file
|
@ -0,0 +1,339 @@
|
|||
@ VFP Instructions for v1xD variants (Single precision only)
|
||||
.text
|
||||
.global F
|
||||
F:
|
||||
@ First we test the basic syntax and bit patterns of the opcodes.
|
||||
@ Most of these tests deliberatly use s0/r0 to avoid setting
|
||||
@ any more bits than necessary.
|
||||
|
||||
@ Comparison operations
|
||||
|
||||
fmstat
|
||||
|
||||
fcmpes s0, s0
|
||||
fcmpezs s0
|
||||
fcmps s0, s0
|
||||
fcmpzs s0
|
||||
|
||||
@ Monadic data operations
|
||||
|
||||
fabss s0, s0
|
||||
fcpys s0, s0
|
||||
fnegs s0, s0
|
||||
fsqrts s0, s0
|
||||
|
||||
@ Dyadic data operations
|
||||
|
||||
fadds s0, s0, s0
|
||||
fdivs s0, s0, s0
|
||||
fmacs s0, s0, s0
|
||||
fmscs s0, s0, s0
|
||||
fmuls s0, s0, s0
|
||||
fnmacs s0, s0, s0
|
||||
fnmscs s0, s0, s0
|
||||
fnmuls s0, s0, s0
|
||||
fsubs s0, s0, s0
|
||||
|
||||
@ Load/store operations
|
||||
|
||||
flds s0, [r0]
|
||||
fsts s0, [r0]
|
||||
|
||||
@ Load/store multiple operations
|
||||
|
||||
fldmias r0, {s0}
|
||||
fldmfds r0, {s0}
|
||||
fldmias r0!, {s0}
|
||||
fldmfds r0!, {s0}
|
||||
fldmdbs r0!, {s0}
|
||||
fldmeas r0!, {s0}
|
||||
|
||||
fldmiax r0, {d0}
|
||||
fldmfdx r0, {d0}
|
||||
fldmiax r0!, {d0}
|
||||
fldmfdx r0!, {d0}
|
||||
fldmdbx r0!, {d0}
|
||||
fldmeax r0!, {d0}
|
||||
|
||||
fstmias r0, {s0}
|
||||
fstmeas r0, {s0}
|
||||
fstmias r0!, {s0}
|
||||
fstmeas r0!, {s0}
|
||||
fstmdbs r0!, {s0}
|
||||
fstmfds r0!, {s0}
|
||||
|
||||
fstmiax r0, {d0}
|
||||
fstmeax r0, {d0}
|
||||
fstmiax r0!, {d0}
|
||||
fstmeax r0!, {d0}
|
||||
fstmdbx r0!, {d0}
|
||||
fstmfdx r0!, {d0}
|
||||
|
||||
@ Conversion operations
|
||||
|
||||
fsitos s0, s0
|
||||
fuitos s0, s0
|
||||
|
||||
ftosis s0, s0
|
||||
ftosizs s0, s0
|
||||
ftouis s0, s0
|
||||
ftouizs s0, s0
|
||||
|
||||
@ ARM from VFP operations
|
||||
|
||||
fmrs r0, s0
|
||||
fmrx r0, fpsid
|
||||
fmrx r0, fpscr
|
||||
fmrx r0, fpexc
|
||||
|
||||
@ VFP From ARM operations
|
||||
|
||||
fmsr s0, r0
|
||||
fmxr fpsid, r0
|
||||
fmxr fpscr, r0
|
||||
fmxr fpexc, r0
|
||||
|
||||
@ Now we test that the register fields are updated correctly for
|
||||
@ each class of instruction.
|
||||
|
||||
@ Single register operations (compare-zero):
|
||||
|
||||
fcmpzs s1
|
||||
fcmpzs s2
|
||||
fcmpzs s31
|
||||
|
||||
@ Two register comparison operations:
|
||||
|
||||
fcmps s0, s1
|
||||
fcmps s0, s2
|
||||
fcmps s0, s31
|
||||
fcmps s1, s0
|
||||
fcmps s2, s0
|
||||
fcmps s31, s0
|
||||
fcmps s21, s12
|
||||
|
||||
@ Two register data operations (monadic)
|
||||
|
||||
fnegs s0, s1
|
||||
fnegs s0, s2
|
||||
fnegs s0, s31
|
||||
fnegs s1, s0
|
||||
fnegs s2, s0
|
||||
fnegs s31, s0
|
||||
fnegs s12, s21
|
||||
|
||||
@ Three register data operations (dyadic)
|
||||
|
||||
fadds s0, s0, s1
|
||||
fadds s0, s0, s2
|
||||
fadds s0, s0, s31
|
||||
fadds s0, s1, s0
|
||||
fadds s0, s2, s0
|
||||
fadds s0, s31, s0
|
||||
fadds s1, s0, s0
|
||||
fadds s2, s0, s0
|
||||
fadds s31, s0, s0
|
||||
fadds s12, s21, s5
|
||||
|
||||
@ Conversion operations
|
||||
|
||||
fsitos s0, s1
|
||||
fsitos s0, s2
|
||||
fsitos s0, s31
|
||||
fsitos s1, s0
|
||||
fsitos s2, s0
|
||||
fsitos s31, s0
|
||||
|
||||
ftosis s0, s1
|
||||
ftosis s0, s2
|
||||
ftosis s0, s31
|
||||
ftosis s1, s0
|
||||
ftosis s2, s0
|
||||
ftosis s31, s0
|
||||
|
||||
@ Move to VFP from ARM
|
||||
|
||||
fmsr s0, r1
|
||||
fmsr s0, r7
|
||||
fmsr s0, r14
|
||||
fmsr s1, r0
|
||||
fmsr s2, r0
|
||||
fmsr s31, r0
|
||||
fmsr s21, r7
|
||||
|
||||
fmxr fpsid, r1
|
||||
fmxr fpsid, r14
|
||||
|
||||
@ Move to ARM from VFP
|
||||
|
||||
fmrs r0, s1
|
||||
fmrs r0, s2
|
||||
fmrs r0, s31
|
||||
fmrs r1, s0
|
||||
fmrs r7, s0
|
||||
fmrs r14, s0
|
||||
fmrs r9, s11
|
||||
|
||||
fmrx r1, fpsid
|
||||
fmrx r14, fpsid
|
||||
|
||||
@ Load/store operations
|
||||
|
||||
flds s0, [r1]
|
||||
flds s0, [r14]
|
||||
flds s0, [r0, #0]
|
||||
flds s0, [r0, #1020]
|
||||
flds s0, [r0, #-1020]
|
||||
flds s1, [r0]
|
||||
flds s2, [r0]
|
||||
flds s31, [r0]
|
||||
fsts s21, [r12, #804]
|
||||
|
||||
@ Load/store multiple operations
|
||||
|
||||
fldmias r0, {s1}
|
||||
fldmias r0, {s2}
|
||||
fldmias r0, {s31}
|
||||
fldmias r0, {s0-s1}
|
||||
fldmias r0, {s0-s2}
|
||||
fldmias r0, {s0-s31}
|
||||
fldmias r0, {s1-s31}
|
||||
fldmias r0, {s2-s31}
|
||||
fldmias r0, {s30-s31}
|
||||
fldmias r1, {s0}
|
||||
fldmias r14, {s0}
|
||||
|
||||
fstmiax r0, {d1}
|
||||
fstmiax r0, {d2}
|
||||
fstmiax r0, {d15}
|
||||
fstmiax r0, {d0-d1}
|
||||
fstmiax r0, {d0-d2}
|
||||
fstmiax r0, {d0-d15}
|
||||
fstmiax r0, {d1-d15}
|
||||
fstmiax r0, {d2-d15}
|
||||
fstmiax r0, {d14-d15}
|
||||
fstmiax r1, {d0}
|
||||
fstmiax r14, {d0}
|
||||
|
||||
@ Check that we assemble all the register names correctly
|
||||
|
||||
fcmpzs s0
|
||||
fcmpzs s1
|
||||
fcmpzs s2
|
||||
fcmpzs s3
|
||||
fcmpzs s4
|
||||
fcmpzs s5
|
||||
fcmpzs s6
|
||||
fcmpzs s7
|
||||
fcmpzs s8
|
||||
fcmpzs s9
|
||||
fcmpzs s10
|
||||
fcmpzs s11
|
||||
fcmpzs s12
|
||||
fcmpzs s13
|
||||
fcmpzs s14
|
||||
fcmpzs s15
|
||||
fcmpzs s16
|
||||
fcmpzs s17
|
||||
fcmpzs s18
|
||||
fcmpzs s19
|
||||
fcmpzs s20
|
||||
fcmpzs s21
|
||||
fcmpzs s22
|
||||
fcmpzs s23
|
||||
fcmpzs s24
|
||||
fcmpzs s25
|
||||
fcmpzs s26
|
||||
fcmpzs s27
|
||||
fcmpzs s28
|
||||
fcmpzs s29
|
||||
fcmpzs s30
|
||||
fcmpzs s31
|
||||
|
||||
@ Now we check the placement of the conditional execution substring.
|
||||
@ On VFP this is always at the end of the instruction.
|
||||
@ We use different register numbers here to check for correct
|
||||
@ disassembly
|
||||
|
||||
@ Comparison operations
|
||||
|
||||
fmstateq
|
||||
|
||||
fcmpeseq s3, s7
|
||||
fcmpezseq s5
|
||||
fcmpseq s1, s2
|
||||
fcmpzseq s1
|
||||
|
||||
@ Monadic data operations
|
||||
|
||||
fabsseq s1, s3
|
||||
fcpyseq s31, s19
|
||||
fnegseq s20, s8
|
||||
fsqrtseq s5, s7
|
||||
|
||||
@ Dyadic data operations
|
||||
|
||||
faddseq s6, s5, s4
|
||||
fdivseq s3, s2, s1
|
||||
fmacseq s31, s30, s29
|
||||
fmscseq s28, s27, s26
|
||||
fmulseq s25, s24, s23
|
||||
fnmacseq s22, s21, s20
|
||||
fnmscseq s19, s18, s17
|
||||
fnmulseq s16, s15, s14
|
||||
fsubseq s13, s12, s11
|
||||
|
||||
@ Load/store operations
|
||||
|
||||
fldseq s10, [r8]
|
||||
fstseq s9, [r7]
|
||||
|
||||
@ Load/store multiple operations
|
||||
|
||||
fldmiaseq r1, {s8}
|
||||
fldmfdseq r2, {s7}
|
||||
fldmiaseq r3!, {s6}
|
||||
fldmfdseq r4!, {s5}
|
||||
fldmdbseq r5!, {s4}
|
||||
fldmeaseq r6!, {s3}
|
||||
|
||||
fldmiaxeq r7, {d1}
|
||||
fldmfdxeq r8, {d2}
|
||||
fldmiaxeq r9!, {d3}
|
||||
fldmfdxeq r10!, {d4}
|
||||
fldmdbxeq r11!, {d5}
|
||||
fldmeaxeq r12!, {d6}
|
||||
|
||||
fstmiaseq r13, {s2}
|
||||
fstmeaseq r14, {s1}
|
||||
fstmiaseq r1!, {s31}
|
||||
fstmeaseq r2!, {s30}
|
||||
fstmdbseq r3!, {s29}
|
||||
fstmfdseq r4!, {s28}
|
||||
|
||||
fstmiaxeq r5, {d7}
|
||||
fstmeaxeq r6, {d8}
|
||||
fstmiaxeq r7!, {d9}
|
||||
fstmeaxeq r8!, {d10}
|
||||
fstmdbxeq r9!, {d11}
|
||||
fstmfdxeq r10!, {d12}
|
||||
|
||||
@ Conversion operations
|
||||
|
||||
fsitoseq s27, s6
|
||||
ftosiseq s25, s5
|
||||
ftosizseq s23, s4
|
||||
ftouiseq s21, s3
|
||||
ftouizseq s19, s2
|
||||
fuitoseq s17, s1
|
||||
|
||||
@ ARM from VFP operations
|
||||
|
||||
fmrseq r11, s3
|
||||
fmrxeq r9, fpsid
|
||||
|
||||
@ VFP From ARM operations
|
||||
|
||||
fmsreq s3, r9
|
||||
fmxreq fpsid, r8
|
||||
|
Loading…
Reference in a new issue