https://sourceware.org/bugzilla/show_bug.cgi?id=20429
Bug ID: 20429 Summary: ARM: too many registers allowed for vpush/vpop Product: binutils Version: unspecified Status: UNCONFIRMED Severity: normal Priority: P2 Component: gas Assignee: unassigned at sourceware dot org Reporter: pexu at sourceware dot mail.kapsi.fi Target Milestone: --- Created attachment 9418 --> https://sourceware.org/bugzilla/attachment.cgi?id=9418&action=edit vpush and vpop with too many D and Q registers as doesn't currently check that no more than 16 D or 8 Q registers are given for vpush and vpop instructions. This limit is mandated by ARMv7 and ARMv8 architecture specifications. as does, though, properly check the above limit for vldm and vstm instructions (do_neon_ldm_stm). However, do_vfp_nsyn_push or do_vfp_nsyn_pop do not check that the number of D or Q registers do not exceed the limit. Moreover, vpush and vpop mnemonics are currently considered "unique to VFP" in the source code. This is likely wrong, as e.g. ARM compiler toolchain assembler reference at least since 2010 (v4.1) categorises these instructions as shared between NEON and VFP (and mentions the D/Q register limitation). Attached test file. as -march=armv7-a -mfpu=neon vpushpop.S && objdump a.out Should catch and reject all vpush/vpop instructions in the file. Currently assembles as: 00000000 <.text>: 0: ed2d0b40 vpush {d0-d31} 4: ed2d1b22 vpush {d1-d17} 8: ecbd1b22 vpop {d1-d17} c: ecbd0b40 vpop {d0-d31} 10: ed2d0b40 vpush {d0-d31} 14: ed2d2b24 vpush {d2-d19} 18: ecbd2b24 vpop {d2-d19} 1c: ecbd0b40 vpop {d0-d31} in which all the instructions will raise undefined instruction exception, as imm8 (i.e. the number of push/pop'd registers [times two]) is out of range. -- You are receiving this mail because: You are on the CC list for the bug. _______________________________________________ bug-binutils mailing list bug-binutils@gnu.org https://lists.gnu.org/mailman/listinfo/bug-binutils