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.