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.

Reply via email to