Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 24 Jun 2002 17:56:12 -0400
From:      Alexander Kabaev <ak03@gte.com>
To:        obrien@FreeBSD.ORG
Cc:        jdp@polstra.com, current@FreeBSD.ORG, rwatson@FreeBSD.ORG
Subject:   Re: Bootstrap problems for asm
Message-ID:  <20020624175612.7abe6e52.ak03@gte.com>
In-Reply-To: <20020624112151.A55057@dragon.nuxi.com>
References:  <Pine.NEB.3.96L.1020624111138.32271E-100000@fledge.watson.org> <200206241524.g5OFO6p30824@vashon.polstra.com> <20020624112151.A55057@dragon.nuxi.com>

next in thread | previous in thread | raw e-mail | index | archive | help
I am not an inline assembler guru, but here is the patch I think get the
job done. If I understannd things correcly, GCC accepts matching
constraints only for parameters for which registers are allowed.  

Any constructive critique is appreciated.

> Don't supose you are bored enough to tweak the asm statements to make
> things happy? :-)

-- 
Alexander Kabaev

Index: i386/lockdflt.c
===================================================================
RCS file: /usr/ncvs/src/libexec/rtld-elf/i386/lockdflt.c,v
retrieving revision 1.6
diff -u -r1.6 lockdflt.c
--- i386/lockdflt.c	17 Jul 2000 17:18:13 -0000	1.6
+++ i386/lockdflt.c	24 Jun 2002 21:35:35 -0000
@@ -81,7 +81,7 @@
 
 	__asm __volatile ("lock; cmpxchgl %2, %0"
 	    : "=m"(*m), "=a"(result)
-	    : "r"(new), "0"(*m), "1"(old)
+	    : "r"(new), "m"(*m), "1"(old)
 	    : "cc");
 
 	return result;
@@ -94,7 +94,7 @@
 
 	__asm __volatile ("xchgl %0, %1"
 	    : "=r"(result), "=m"(*m)
-	    : "0"(v), "1"(*m));
+	    : "0"(v), "m"(*m));
 
 	return result;
 }
Index: i386/rtld_machdep.h
===================================================================
RCS file: /usr/ncvs/src/libexec/rtld-elf/i386/rtld_machdep.h,v
retrieving revision 1.6
diff -u -r1.6 rtld_machdep.h
--- i386/rtld_machdep.h	29 Oct 2001 10:10:10 -0000	1.6
+++ i386/rtld_machdep.h	24 Jun 2002 19:24:04 -0000
@@ -55,13 +55,13 @@
 static inline void
 atomic_decr_int(volatile int *p)
 {
-    __asm __volatile ("lock; decl %0" : "=m"(*p) : "0"(*p) : "cc");
+    __asm __volatile ("lock; decl %0" : "=m"(*p) : "m"(*p) : "cc");
 }
 
 static inline void
 atomic_incr_int(volatile int *p)
 {
-    __asm __volatile ("lock; incl %0" : "=m"(*p) : "0"(*p) : "cc");
+    __asm __volatile ("lock; incl %0" : "=m"(*p) : "m"(*p) : "cc");
 }
 
 static inline void
@@ -69,7 +69,7 @@
 {
     __asm __volatile ("lock; addl %1, %0"
 	: "=m"(*p)
-	: "ri"(val), "0"(*p)
+	: "ri"(val), "m"(*p)
 	: "cc");
 }
 

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020624175612.7abe6e52.ak03>