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.