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
- Lines: 109
- Date:
Mon Mar 4 08:50:04 1996
- Orig file:
v1.3.70/linux/include/asm-sparc/winmacro.h
- Orig date:
Sat Nov 25 19:04:56 1995
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 ([email protected])
@@ -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, [email protected]
TCL-scripts by Sam Shen, [email protected]
with Sam's (original) version of this