From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5729 invoked by alias); 24 Aug 2005 14:34:06 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 5333 invoked by uid 48); 24 Aug 2005 14:33:26 -0000 Date: Wed, 24 Aug 2005 14:46:00 -0000 Message-ID: <20050824143326.5332.qmail@sourceware.org> From: "uros at kss-loka dot si" To: gcc-bugs@gcc.gnu.org In-Reply-To: <20041226201629.19161.rth@gcc.gnu.org> References: <20041226201629.19161.rth@gcc.gnu.org> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug target/19161] No emms or femms emitted between MMX and FP instructions X-Bugzilla-Reason: CC X-SW-Source: 2005-08/txt/msg02800.txt.bz2 List-Id: ------- Additional Comments From uros at kss-loka dot si 2005-08-24 14:33 ------- There is another bug in ix86_mode_needed() that causes timeouts for pr20314-1.c. The problem is in asm operands parsing code that gets into infinite loop. The correct code should increase variable c instead of cc when comma is found: config/i386/i386.c (ix86_mode_needed): ... for (i = 0; i < noperands; i++) { const char *c = constraints[i]; enum reg_class class; if (c[0] == '%') c++; if (ISDIGIT ((unsigned char) c[0]) && c[1] == '\0') c = constraints[c[0] - '0']; while (*c) { char cc = *c; int len; switch (cc) { case ',': c++; <<<<< here!! continue; case '=': case '+': case '*': case '%': case '!': case '#': case '&': case '?': break; ... Regarding emms/efpu instructions in loop: I have made some experiments by inserting mode switching insn before NOTE_INSN_LOOP_BEGIN. The failure in 20050604-1.c is fixed if this mode is set to FPU_MODE_MMX. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19161