https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81988
Bug ID: 81988 Summary: [7/8 Regression] sparc64: emits STD instruction with odd register Product: gcc Version: 7.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: jcowgill+gcc at jcowgill dot uk Target Milestone: --- Created attachment 42047 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=42047&action=edit testcase FFmpeg in Debian fails to build on sparc64 with GCC 7 and when I tried using the latest GCC 8. It fails with an assembler message: > /tmp/cc4Rj2im.s: Assembler messages: > /tmp/cc4Rj2im.s:38973: Error: Illegal operands > /tmp/cc4Rj2im.s:39002: Error: Illegal operands > /tmp/cc4Rj2im.s:39098: Error: Illegal operands > /tmp/cc4Rj2im.s:39120: Error: Illegal operands I've attached a reduced testcase which fails on GCC 7 and 8 with the same kind of error. This issue is an STD instruction which tries to store an odd numbered register which is not allowed: > !(insn 237 287 280 (set (mem/c:DI (reg:DI 28 %i4 [334]) [7 %sfp+-9016 S8 A64]) > ! (reg:DI 39 %f7 [+-4 ])) "reduce.c":13 125 {*movdi_insn_sp64} > ! (expr_list:REG_DEAD (reg:DI 28 %i4 [334]) > ! (expr_list:REG_DEAD (reg:SI 40 %f8) > ! (nil)))) > std %f7, [%i4] ! 237 *movdi_insn_sp64/9 [length = 1] The testcase should be compiled using: > gcc -fPIE -fstack-protector-all -O3 -c reduce.c James