patch-1.3.71 linux/include/asm-sparc/winmacro.h

Next file: linux/include/linux/binfmts.h
Previous file: linux/include/asm-sparc/vuid_event.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v1.3.70/linux/include/asm-sparc/winmacro.h linux/include/asm-sparc/winmacro.h
@@ -1,4 +1,4 @@
-/* $Id: winmacro.h,v 1.11 1995/11/25 02:33:23 davem Exp $
+/* $Id: winmacro.h,v 1.13 1995/12/29 21:48:04 davem Exp $
  * winmacro.h: Window loading-unloading macros.
  *
  * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
@@ -44,25 +44,25 @@
 
 /* Loading and storing struct pt_reg trap frames. */
 #define LOAD_PT_INS(base_reg) \
-        ldd     [%base_reg + STACKFRAME_SZ + PT_I0], %i0; \
-        ldd     [%base_reg + STACKFRAME_SZ + PT_I2], %i2; \
-        ldd     [%base_reg + STACKFRAME_SZ + PT_I4], %i4; \
-        ldd     [%base_reg + STACKFRAME_SZ + PT_I6], %i6;
+        ldd     [%base_reg + REGWIN_SZ + PT_I0], %i0; \
+        ldd     [%base_reg + REGWIN_SZ + PT_I2], %i2; \
+        ldd     [%base_reg + REGWIN_SZ + PT_I4], %i4; \
+        ldd     [%base_reg + REGWIN_SZ + PT_I6], %i6;
 
 #define LOAD_PT_GLOBALS(base_reg) \
-        ld      [%base_reg + STACKFRAME_SZ + PT_G1], %g1; \
-        ldd     [%base_reg + STACKFRAME_SZ + PT_G2], %g2; \
-        ldd     [%base_reg + STACKFRAME_SZ + PT_G4], %g4; \
-        ldd     [%base_reg + STACKFRAME_SZ + PT_G6], %g6;
+        ld      [%base_reg + REGWIN_SZ + PT_G1], %g1; \
+        ldd     [%base_reg + REGWIN_SZ + PT_G2], %g2; \
+        ldd     [%base_reg + REGWIN_SZ + PT_G4], %g4; \
+        ldd     [%base_reg + REGWIN_SZ + PT_G6], %g6;
 
 #define LOAD_PT_YREG(base_reg, scratch) \
-        ld      [%base_reg + STACKFRAME_SZ + PT_Y], %scratch; \
+        ld      [%base_reg + REGWIN_SZ + PT_Y], %scratch; \
         wr      %scratch, 0x0, %y;
 
 #define LOAD_PT_PRIV(base_reg, pt_psr, pt_pc, pt_npc) \
-        ld      [%base_reg + STACKFRAME_SZ + PT_PSR], %pt_psr; \
-        ld      [%base_reg + STACKFRAME_SZ + PT_PC], %pt_pc; \
-        ld      [%base_reg + STACKFRAME_SZ + PT_NPC], %pt_npc;
+        ld      [%base_reg + REGWIN_SZ + PT_PSR], %pt_psr; \
+        ld      [%base_reg + REGWIN_SZ + PT_PC], %pt_pc; \
+        ld      [%base_reg + REGWIN_SZ + PT_NPC], %pt_npc;
 
 #define LOAD_PT_ALL(base_reg, pt_psr, pt_pc, pt_npc, scratch) \
         LOAD_PT_YREG(base_reg, scratch) \
@@ -71,29 +71,28 @@
         LOAD_PT_PRIV(base_reg, pt_psr, pt_pc, pt_npc)
 
 #define STORE_PT_INS(base_reg) \
-        std     %i0, [%base_reg + STACKFRAME_SZ + PT_I0]; \
-        std     %i2, [%base_reg + STACKFRAME_SZ + PT_I2]; \
-        std     %i4, [%base_reg + STACKFRAME_SZ + PT_I4]; \
-        std     %i6, [%base_reg + STACKFRAME_SZ + PT_I6];
+        std     %i0, [%base_reg + REGWIN_SZ + PT_I0]; \
+        std     %i2, [%base_reg + REGWIN_SZ + PT_I2]; \
+        std     %i4, [%base_reg + REGWIN_SZ + PT_I4]; \
+        std     %i6, [%base_reg + REGWIN_SZ + PT_I6];
 
 #define STORE_PT_GLOBALS(base_reg) \
-        st      %g1, [%base_reg + STACKFRAME_SZ + PT_G1]; \
-        std     %g2, [%base_reg + STACKFRAME_SZ + PT_G2]; \
-        std     %g4, [%base_reg + STACKFRAME_SZ + PT_G4]; \
-        std     %g6, [%base_reg + STACKFRAME_SZ + PT_G6];
+        st      %g1, [%base_reg + REGWIN_SZ + PT_G1]; \
+        std     %g2, [%base_reg + REGWIN_SZ + PT_G2]; \
+        std     %g4, [%base_reg + REGWIN_SZ + PT_G4]; \
+        std     %g6, [%base_reg + REGWIN_SZ + PT_G6];
 
 #define STORE_PT_YREG(base_reg, scratch) \
         rd      %y, %scratch; \
-        st      %scratch, [%base_reg + STACKFRAME_SZ + PT_Y];
+        st      %scratch, [%base_reg + REGWIN_SZ + PT_Y];
 
-#define STORE_PT_PRIV(base_reg, pt_psr, pt_pc, pt_npc, pt_wim) \
-        st      %pt_psr, [%base_reg + STACKFRAME_SZ + PT_PSR]; \
-        st      %pt_pc, [%base_reg + STACKFRAME_SZ + PT_PC]; \
-        st      %pt_npc, [%base_reg + STACKFRAME_SZ + PT_NPC]; \
-        st      %pt_wim, [%base_reg + STACKFRAME_SZ + PT_WIM];
+#define STORE_PT_PRIV(base_reg, pt_psr, pt_pc, pt_npc) \
+        st      %pt_psr, [%base_reg + REGWIN_SZ + PT_PSR]; \
+        st      %pt_pc,  [%base_reg + REGWIN_SZ + PT_PC]; \
+        st      %pt_npc, [%base_reg + REGWIN_SZ + PT_NPC];
 
-#define STORE_PT_ALL(base_reg, reg_psr, reg_pc, reg_npc, reg_wim, g_scratch) \
-        STORE_PT_PRIV(base_reg, reg_psr, reg_pc, reg_npc, reg_wim) \
+#define STORE_PT_ALL(base_reg, reg_psr, reg_pc, reg_npc, g_scratch) \
+        STORE_PT_PRIV(base_reg, reg_psr, reg_pc, reg_npc) \
         STORE_PT_GLOBALS(base_reg) \
         STORE_PT_YREG(base_reg, g_scratch) \
         STORE_PT_INS(base_reg)
@@ -113,8 +112,18 @@
         st       %scratch, [%cur_reg + THREAD_W_SAVED];
 
 /* For now on a uniprocessor this is ok. */
-#define LOAD_CURRENT(dest_reg) \
+#ifdef __SMP__
+#error SMP not yet
+#define LOAD_CURRENT(dest_reg, idreg) \
+        rd       %tbr, %idreg; \
+        srl      %idreg, 24, %idreg; \
+	sethi    %hi(C_LABEL(current_set)), %dest_reg; \
+	or       %dest_reg, %lo(C_LABEL(current_set)), %dest_reg; \
+	add      %dest_reg, %idreg, %dest_reg;
+#else
+#define LOAD_CURRENT(dest_reg, idreg) \
         sethi    %hi(C_LABEL(current_set)), %dest_reg; \
         ld       [%dest_reg + %lo(C_LABEL(current_set))], %dest_reg;
+#endif
 
 #endif /* !(_SPARC_WINMACRO_H) */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov with Sam's (original) version
of this