This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug optimization/11936] [3.4 Regresion] cannot find a register while reloading `asm'
- From: "pinskia at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 24 Aug 2003 16:50:05 -0000
- Subject: [Bug optimization/11936] [3.4 Regresion] cannot find a register while reloading `asm'
- References: <20030815231217.11936.poschmid@lbl.gov>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11936
pinskia at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords|rejects-valid |ice-on-valid-code
Last reconfirmed|2003-08-15 23:25:46 |2003-08-24 16:50:04
date| |
------- Additional Comments From pinskia at gcc dot gnu dot org 2003-08-24 16:50 -------
Likely related to bug 11203 and bug 9929 and bug 11001.
Here is a simplier case from bug 11960, this works at -O3, the reason why it works at -O0
is that fmod does not get inlined at all:
extern double fmod (double __x, double __y);
extern __inline double fmod (double __x, double __y)
{
register long double __value;
__asm __volatile__
("1: fprem\n\t" "fnstsw %%ax\n\t" "sahf\n\t" "jp 1b"
: "=t" (__value)
: "0" (__x), "u" (__y)
: "ax", "cc");
return __value; }
double quux(void);
int main(int argc,char **argv)
{
double d=fmod(quux(),quux());
return 0;
}
double quux(void)
{
return 1.2;
}