egcs-20000207 Bug: Misuse of $gp when using -mips16 and -O3.

Franklin Hooker Franklin.Hooker@mail.com
Tue Feb 8 14:54:00 GMT 2000


egcs-20000207 Bug: Misuse of $gp when using -mips16 and -O3.

This is one of the functions in dhrystone 2.1.  The generated code
doesn't properly access the global variables.  It appears that the
first two uses of $a3 should have been $gp instead.  Also note that I
included code generated by a gnupro release.  This version works
properly.

Thanks,
Franklin
------------------------------------------------------
gcc version 2.96 20000207 (experimental)

$ uname -a
SunOS light 5.6 Generic_105181-17 sun4u sparc SUNW,Ultra-2

------------------------------------------------------------
Code from dhrystone 2.1.

Proc_2 (Int_Par_Ref)
/******************/
    /* executed once */
    /* *Int_Par_Ref == 1, becomes 4 */

One_Fifty   *Int_Par_Ref;
{
  One_Fifty  Int_Loc;
  Enumeration   Enum_Loc;

  Int_Loc = *Int_Par_Ref + 10;
  do /* executed once */
    if (Ch_1_Glob == 'A')
      /* then, executed */
    {
      Int_Loc -= 1;
      *Int_Par_Ref = Int_Loc - Int_Glob;
      Enum_Loc = Ident_1;
    } /* if */
  while (Enum_Loc != Ident_1); /* true */
} /* Proc_2 */

--------------------------------------------------------------------------
mips-lexra-elf-gcc -v
Reading specs from /opt/lsdk/bin/../lib/gcc-lib/mips-lexra-elf/2.96/specs
gcc version 2.96 20000207 (experimental)


mips-lexra-elf-gcc -mips16 -c -msoft-float -mno-unaligned-insn -O3 -I../incl
ude -o dhry21a.o ../dhrystone/dhry21a.c


000000000040052c <Proc_2>:
  40052c: 9c40       lw $v0,0($a0)
Proc_2():
  40052e: 67c7       move $a2,$a3
  400530: 4267       addiu $v1,$v0,7
  400532: 67a7       move $a1,$a3
  400534: 4b03       addiu $v1,3
  400536: f030 4e0c  addiu $a2,-32724
  40053a: f030 4d08  addiu $a1,-32728
  40053e: 8640       lb $v0,0($a2)
  400540: 7241       cmpi $v0,65
  400542: 6105       btnez 40054e <Proc_2+0x22>
  400544: 9d40       lw $v0,0($a1)
  400546: 4bff       addiu $v1,-1
  400548: e34b       subu $v0,$v1,$v0
  40054a: dc40       sw $v0,0($a0)
  40054c: 6f00       li $a3,0
  40054e: 2ff7       bnez $a3,40053e <Proc_2+0x12>
  400550: e820       jr $ra
  400552: 6500       nop


--------------------------------------------------------------------------

$ mips-lsi-elf-gcc -v
Reading specs from
/usr/cygnus/gnupro-98r2/H-sparc-sun-solaris2.5/lib/gcc-lib/mips-lsi-elf/2.9-
gnupro-98r2/specs
gcc version 2.9-gnupro-98r2

mips-lsi-elf-gcc -mips16 -c -msoft-float -O3 -I../include -o dhry21a.o
../dhrystone/dhry21a.c

000000000040054c <Proc_2>:
  40054c: 677c       move $v1,$gp
Proc_2():
  40054e: 9c40       lw $v0,0($a0)
  400550: 67c3       move $a2,$v1
  400552: f030 4e0c  addiu $a2,-32724
  400556: f030 4b08  addiu $v1,-32728
  40055a: 42a7       addiu $a1,$v0,7
  40055c: 4d03       addiu $a1,3
  40055e: 8640       lb $v0,0($a2)
  400560: 7241       cmpi $v0,65
  400562: 6105       btnez 40056e <Proc_2+0x22>
  400564: 4dff       addiu $a1,-1
  400566: 9b40       lw $v0,0($v1)
  400568: 6f00       li $a3,0
  40056a: e54b       subu $v0,$a1,$v0
  40056c: dc40       sw $v0,0($a0)
  40056e: 2ff7       bnez $a3,40055e <Proc_2+0x12>
  400570: e820       jr $ra
  400572: 6500       nop





More information about the Gcc-bugs mailing list