https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68958
Bug ID: 68958 Summary: MIPS: cannot build glibc with mips32r2 at O1 or higher Product: gcc Version: 5.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: manuel.lauss at googlemail dot com Target Milestone: --- Created attachment 37063 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37063&action=edit fully preprocessed source of gconv_conf. Building glibc-2.22/iconv/gconv_conf.c for mips32r2 hardfloat little endian results in the following GAS error. Gcc is configured "--with-arch=mips32r2 --with-tune=mips32r2 --with-abi=32 --with-little-endian" mips32r2el-hardfloat-linux-gnu-gcc -mips32r2 -c -o gconv_conf.o gconv_conf.i -pipe -fgnu89-inline -O2 {standard input}: Assembler messages: {standard input}:794: Warning: macro instruction expanded into multiple instructions {standard input}:798: Error: macro used $at after ".set noat" {standard input}:798: Warning: macro instruction expanded into multiple instructions {standard input}:821: Warning: macro instruction expanded into multiple instructions {standard input}:823: Error: macro used $at after ".set noat" {standard input}:823: Warning: macro instruction expanded into multiple instructions -O0 is fine, every other optimization level produces this error. The errors point to ll/sc pairs: __gconv_get_path: .frame $fp,88,$31 # vars= 24, regs= 10/0, args= 16, gp= 8 .mask 0xc0ff0000,-4 .fmask 0x00000000,0 .set noreorder .cpload $25 .set reorder addiu $sp,$sp,-88 sw $fp,80($sp) move $fp,$sp sw $31,84($sp) sw $23,76($sp) sw $22,72($sp) sw $21,68($sp) sw $20,64($sp) sw $19,60($sp) sw $18,56($sp) sw $17,52($sp) sw $16,48($sp) .cprestore 16 sw $0,24($fp) .set noreorder .set nomacro .set noat 1: ll $3,lock.10985 <================ bne $3,$0,2f li $2,0 li $1,1 sc $1,lock.10985 <================ beq $1,$0,1b li $2,1 sync 2: .set at .set macro .set reorder I'm attaching preprocessed source.