This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug inline-asm/77607] New: Aarch64 LDP operand rejected incorrectly
- From: "hyc at symas dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 15 Sep 2016 18:28:08 +0000
- Subject: [Bug inline-asm/77607] New: Aarch64 LDP operand rejected incorrectly
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77607
Bug ID: 77607
Summary: Aarch64 LDP operand rejected incorrectly
Product: gcc
Version: 4.9.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: inline-asm
Assignee: unassigned at gcc dot gnu.org
Reporter: hyc at symas dot com
Target Milestone: ---
This sequence:
{uint8x16_t _a, _b, _c, _d;
__asm__("ldp %0, %1, %4\n\t"
"ldp %2, %3, %4, #32\n\t" : "=w"(_a), "=w"(_b), "=w"(_c), "=w"(_d) :
"Ump"(state.k) :);
Generates this code:
ldp v1, v4, [x0]
ldp v0, v2, [x0], #32
And gets this error:
/tmp/ccQYB8nY.s:172: Error: operand 1 should be a floating-point register --
`ldp v1,v4,[x0]'
/tmp/ccQYB8nY.s:173: Error: operand 1 should be a floating-point register --
`ldp v0,v2,[x0],#32'
According to the docs, "w" is the correct constraint character to use for FP or
SIMD register. So either gas is rejecting this incorrectly, or gcc is
generating the wrong register name for this constraint.