egcs 1.0 mips64orion bug

Joel Sherrill joel@OARcorp.com
Mon Dec 22 12:09:00 GMT 1997


In testing the mips64orion-rtems configuration of egcs 1.0, I ran across
this error message while compiling paranoia -- a public doman FP torture
test.

p3.s: Assembler messages:
p3.s:71: Internal error!
Assertion failure in macro_build at ../../src/gas/config/tc-mips.c line
2365.
Please report this bug.

I reported this error message along with a test case to the binutils
developers and was told that this error message was incorrect in the sense
that it was not a gas internal error but an improper instruction for the
4650.  Here are Ian Taylor's commen (form multiple emails)s:

  Interesting.  Reporting the error in this manner is clearly a bug in
  gas.

  However, as far as I can tell, the input is not valid for the 4650.
  The 4650 has only single precision floating point, which means that it
  can not support the s.d instruction for a floating point register.  It
  doesn't make any sense.

  So I think there must be a compiler bug here as well.

   I'll fix the bug in the assembler to report the error in a more
  coherent fashion.

And later:

  It's probably pretty easy to fix.  There's probably just a missing
  TARGET_DOUBLE_FLOAT somewhere in mips.md or mips.c.

I managed to cut the code down to this:

  double One;
  int f()
  {
      One = 1;
  }

which (to my surprise) actually trips the bug. :)

Here are the commands I have been using to generate this error:

  mips64orion-rtems-gcc -v -mcpu=4650 -S -g p3.c
  mips64orion-rtems-as -v -mcpu=4650 p3.s

and get this error:

p3.s:51: Internal error!

Line 51 corresponds to the assignment of "1 to One".  

--joel









More information about the Gcc mailing list