This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
BUG: gcc-2.9x with -O2 and non cdecl calling convention
- To: "gcc-bugs at gcc dot gnu dot org" <gcc-bugs at gcc dot gnu dot org>
- Subject: BUG: gcc-2.9x with -O2 and non cdecl calling convention
- From: "Nick Kurshev" <nick at voshod dot com>
- Date: Wed, 31 May 2000 21:14:18 +0000 (:)
- Reply-To: "Nick Kurshev" <nick at voshod dot com>
Hello!
I tried to compile following code in gcc version 2.95.2 with -O2 optimization:
#define __FASTCALL__ __attribute__ (( __regparm__(3) , __stdcall__ ))
unsigned long __FASTCALL__ my_func(unsigned long v,unsigned long a)
{
unsigned long i;
i = v / a;
if(v % a) v = ( v / i ) * i;
return v;
}
but compiler said:
bug.c: In function `my_func':
bug.c:10: fixed or forbidden register 1 (dx) was spilled for class DREG.
bug.c:10: This may be due to a compiler bug or to impossible asm
bug.c:10: statements or clauses.
bug.c:10: This is the instruction:
(insn 14 12 19 (parallel[
(set (reg:SI 1 %edx)
(udiv:SI (reg/v:SI 0 %eax)
(reg:SI 1 %edx)))
(set (reg:SI 2 %ecx)
(umod:SI (reg/v:SI 0 %eax)
(reg:SI 1 %edx)))
] ) 252 {udivmodsi4} (insn_list 5 (nil))
(expr_list:REG_DEAD (reg:SI 1 %edx)
(nil)))
Btw, with -O1 optimization everything o'k.
Best regards! Nick