This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] i386: Fix PR target/29493 and PR target/29473 -masm=intel problems


On Mon, Oct 22, 2007 at 07:42:20AM +0200, Uros Bizjak wrote:
> Hello!
> 
> >   I also tested bootstrap with BOOT_CFLAGS='-O2 -g -fomit-frame-pointer
> > -masm=intel'. To to that, I used an additional patch to longlong.h to
> >  disable the inline asm:
> 
> I think that in the short term, longlong.h issue should be fixed by
> introducing asm dialects into the asm template.

   Here's the patch to do so. Apologies for the delay. Bootstrapped and
tested on x86_64-unknown-linux-gnu with no regressions. Also bootstrapped on
x86_64-unknown-linux-gnu with BOOT_CFLAGS='-O2 -g -masm=intel' and tested
with no regressions.

2007-10-29  Rask Ingemann Lambertsen  <rask@sygehus.dk>

	* longlong.h (add_ssaaaa): Support Intel asm syntax in i386 and
	x86_64 versions.
	(sub_ddmmss): Likewise.
	(umul_ppmm): Likewise.
	(udiv_qrnnd): Likewise.

Index: gcc/longlong.h
===================================================================
--- gcc/longlong.h	(revision 129548)
+++ gcc/longlong.h	(working copy)
@@ -319,7 +319,7 @@ UDItype __umulsidi3 (USItype, USItype);
 
 #if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("addl %5,%1\n\tadcl %3,%0"					\
+  __asm__ ("add{l} {%5,%1|%1,%5}\n\tadc{l} {%3,%0|%0,%3}"		\
 	   : "=r" ((USItype) (sh)),					\
 	     "=&r" ((USItype) (sl))					\
 	   : "%0" ((USItype) (ah)),					\
@@ -327,7 +327,7 @@ UDItype __umulsidi3 (USItype, USItype);
 	     "%1" ((USItype) (al)),					\
 	     "g" ((USItype) (bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subl %5,%1\n\tsbbl %3,%0"					\
+  __asm__ ("sub{l} {%5,%1|%1,%5}\n\tsbb{l} {%3,%0|%0,%3}"		\
 	   : "=r" ((USItype) (sh)),					\
 	     "=&r" ((USItype) (sl))					\
 	   : "0" ((USItype) (ah)),					\
@@ -335,13 +335,13 @@ UDItype __umulsidi3 (USItype, USItype);
 	     "1" ((USItype) (al)),					\
 	     "g" ((USItype) (bl)))
 #define umul_ppmm(w1, w0, u, v) \
-  __asm__ ("mull %3"							\
+  __asm__ ("mul{l} %3"							\
 	   : "=a" ((USItype) (w0)),					\
 	     "=d" ((USItype) (w1))					\
 	   : "%0" ((USItype) (u)),					\
 	     "rm" ((USItype) (v)))
 #define udiv_qrnnd(q, r, n1, n0, dv) \
-  __asm__ ("divl %4"							\
+  __asm__ ("div{l} %4"							\
 	   : "=a" ((USItype) (q)),					\
 	     "=d" ((USItype) (r))					\
 	   : "0" ((USItype) (n0)),					\
@@ -355,7 +355,7 @@ UDItype __umulsidi3 (USItype, USItype);
 
 #if (defined (__x86_64__) || defined (__i386__)) && W_TYPE_SIZE == 64
 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("addq %5,%1\n\tadcq %3,%0"					\
+  __asm__ ("add{q} {%5,%1|%1,%5}\n\tadc{q} {%3,%0|%0,%3}"		\
 	   : "=r" ((UDItype) (sh)),					\
 	     "=&r" ((UDItype) (sl))					\
 	   : "%0" ((UDItype) (ah)),					\
@@ -363,7 +363,7 @@ UDItype __umulsidi3 (USItype, USItype);
 	     "%1" ((UDItype) (al)),					\
 	     "rme" ((UDItype) (bl)))
 #define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subq %5,%1\n\tsbbq %3,%0"					\
+  __asm__ ("sub{q} {%5,%1|%1,%5}\n\tsbb{q} {%3,%0|%0,%3}"		\
 	   : "=r" ((UDItype) (sh)),					\
 	     "=&r" ((UDItype) (sl))					\
 	   : "0" ((UDItype) (ah)),					\
@@ -371,13 +371,13 @@ UDItype __umulsidi3 (USItype, USItype);
 	     "1" ((UDItype) (al)),					\
 	     "rme" ((UDItype) (bl)))
 #define umul_ppmm(w1, w0, u, v) \
-  __asm__ ("mulq %3"							\
+  __asm__ ("mul{q} %3"							\
 	   : "=a" ((UDItype) (w0)),					\
 	     "=d" ((UDItype) (w1))					\
 	   : "%0" ((UDItype) (u)),					\
 	     "rm" ((UDItype) (v)))
 #define udiv_qrnnd(q, r, n1, n0, dv) \
-  __asm__ ("divq %4"							\
+  __asm__ ("div{q} %4"							\
 	   : "=a" ((UDItype) (q)),					\
 	     "=d" ((UDItype) (r))					\
 	   : "0" ((UDItype) (n0)),					\


-- 
Rask Ingemann Lambertsen
Danish law requires addresses in e-mail to be logged and stored for a year


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]