summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/amd64/include/cpufunc.h24
-rw-r--r--sys/amd64/include/profile.h5
-rw-r--r--sys/i386/include/cpufunc.h24
-rw-r--r--sys/i386/include/profile.h5
4 files changed, 24 insertions, 34 deletions
diff --git a/sys/amd64/include/cpufunc.h b/sys/amd64/include/cpufunc.h
index 33a6186..455681b 100644
--- a/sys/amd64/include/cpufunc.h
+++ b/sys/amd64/include/cpufunc.h
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: cpufunc.h,v 1.19 1994/08/23 13:41:37 paul Exp $
+ * $Id: cpufunc.h,v 1.20 1994/09/02 04:12:16 davidg Exp $
*/
/*
@@ -70,26 +70,18 @@ enable_intr(void)
__asm __volatile("sti");
}
-static inline u_char
-inb(u_int port)
+static inline u_long
+read_eflags()
{
- u_char data;
- /*
- * We use %%dx and not %1 here because i/o is done at %dx and not at
- * %edx, while gcc-2.2.2 generates inferior code (movw instead of movl)
- * if we tell it to load (u_short) port.
- */
- __asm __volatile("inb %%dx,%0" : "=a" (data) : "d" (port));
- return data;
+ u_long ef;
+ __asm __volatile("pushf; popl %0" : "=a" (ef));
+ return(ef);
}
static inline void
-outb(u_int port, u_char data)
+write_eflags(u_long ef)
{
- u_char al;
-
- al = data; /* help gcc-1.40's register allocator */
- __asm __volatile("outb %0,%%dx" : : "a" (al), "d" (port));
+ __asm __volatile("pushl %0; popf" : : "a" ((u_long) ef));
}
static inline void
diff --git a/sys/amd64/include/profile.h b/sys/amd64/include/profile.h
index 03133aa..9fe27ec 100644
--- a/sys/amd64/include/profile.h
+++ b/sys/amd64/include/profile.h
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)profile.h 8.1 (Berkeley) 6/11/93
- * $Id: profile.h,v 1.2 1994/08/02 07:38:56 davidg Exp $
+ * $Id: profile.h,v 1.3 1994/08/21 04:55:29 paul Exp $
*/
#ifndef _I386_MACHINE_PROFILE_H_
@@ -59,4 +59,7 @@ extern void mcount() asm("mcount"); void mcount() { \
_mcount(frompcindex, selfpc); \
}
+#define MCOUNT_ENTER save_eflags = read_eflags(); disable_intr()
+#define MCOUNT_EXIT write_eflags(save_eflags)
+
#endif
diff --git a/sys/i386/include/cpufunc.h b/sys/i386/include/cpufunc.h
index 33a6186..455681b 100644
--- a/sys/i386/include/cpufunc.h
+++ b/sys/i386/include/cpufunc.h
@@ -30,7 +30,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: cpufunc.h,v 1.19 1994/08/23 13:41:37 paul Exp $
+ * $Id: cpufunc.h,v 1.20 1994/09/02 04:12:16 davidg Exp $
*/
/*
@@ -70,26 +70,18 @@ enable_intr(void)
__asm __volatile("sti");
}
-static inline u_char
-inb(u_int port)
+static inline u_long
+read_eflags()
{
- u_char data;
- /*
- * We use %%dx and not %1 here because i/o is done at %dx and not at
- * %edx, while gcc-2.2.2 generates inferior code (movw instead of movl)
- * if we tell it to load (u_short) port.
- */
- __asm __volatile("inb %%dx,%0" : "=a" (data) : "d" (port));
- return data;
+ u_long ef;
+ __asm __volatile("pushf; popl %0" : "=a" (ef));
+ return(ef);
}
static inline void
-outb(u_int port, u_char data)
+write_eflags(u_long ef)
{
- u_char al;
-
- al = data; /* help gcc-1.40's register allocator */
- __asm __volatile("outb %0,%%dx" : : "a" (al), "d" (port));
+ __asm __volatile("pushl %0; popf" : : "a" ((u_long) ef));
}
static inline void
diff --git a/sys/i386/include/profile.h b/sys/i386/include/profile.h
index 03133aa..9fe27ec 100644
--- a/sys/i386/include/profile.h
+++ b/sys/i386/include/profile.h
@@ -31,7 +31,7 @@
* SUCH DAMAGE.
*
* @(#)profile.h 8.1 (Berkeley) 6/11/93
- * $Id: profile.h,v 1.2 1994/08/02 07:38:56 davidg Exp $
+ * $Id: profile.h,v 1.3 1994/08/21 04:55:29 paul Exp $
*/
#ifndef _I386_MACHINE_PROFILE_H_
@@ -59,4 +59,7 @@ extern void mcount() asm("mcount"); void mcount() { \
_mcount(frompcindex, selfpc); \
}
+#define MCOUNT_ENTER save_eflags = read_eflags(); disable_intr()
+#define MCOUNT_EXIT write_eflags(save_eflags)
+
#endif
OpenPOWER on IntegriCloud