Subject: re: NetBSD Sparc64/gcc 2.95.3 compiler error
To: Ethan Blanton <eblanton@cs.ohiou.edu>
From: matthew green <mrg@eterna.com.au>
List: tech-toolchain
Date: 05/31/2002 02:42:07
   
   When building TightVNC from pkgsrc, I get the following error from
   vnc_unixsrc/Xvnc/lib/font/Type1/type1.c:
   
   type1.c: In function CallOtherSubr':
   type1.c:1698: fixed or forbidden register 32 (%f0) was spilled for class FP_REGS.
   type1.c:1698: This may be due to a compiler bug or to impossible asm
   type1.c:1698: statements or clauses.
   type1.c:1698: This is the instruction:
   (insn 190 223 229 (set (reg:SI 2 %g2)
           (fix:SI (fix:DF (reg:DF 64 %f32)))) 257 {fix_truncdfsi2} (insn_list:REG_DEP_AN_TI 40 (insn_list 189 (nil)))
       (expr_list:REG_DEAD (reg:DF 64 %f32)
           (nil)))


this looks awfully like the compiler bug we have a hack in our
tree for... the entry from doc/HACKS in question is:


hack    gcc-sparc64-double-arguments
mdate   18 Sep 2000
who     mrg
port    sparc64
file    xsrc/xc/lib/fonts/Type1/type1.c         : 1.2 : 1461 : 1507 : 1702 : 1709
descr
        in passing 17 "double" arguments to a function, gcc incorrectly tries
        to use a register that doesn't exist, causing an internal error.  this
        hack changes the way arguments are passed to the function, such that
        a pointer to a "double" (really an array) is passed, and the old
        arguments are assigned within the function.