⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wof.s

📁 open source bios with linux platform, very good and can be reused.
💻 S
字号:
/* * Proll takes this from Sparclinux kernel, ruthlessly truncated * because we have no user windows. * *   Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) *    *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License *   version 2 as published by the Free Software Foundation. * *   This program is distributed in the hope that it will be useful, *   but WITHOUT ANY WARRANTY; without even the implied warranty of *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *   GNU General Public License for more details. *  *   You should have received a copy of the GNU General Public License *   along with this program; if not, write to the Free Software *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *   MA  02110-1301, USA. *   This program is free software; you can redistribute it and/or *   modify it under the terms of the GNU General Public License V2 *   as published by the Free Software Foundation */// #include <asm/winmacro.h>// #include <asm/asmmacro.h>/* Reg_window offsets */#define RW_L0     0x00#define RW_L1     0x04#define RW_L2     0x08#define RW_L3     0x0c#define RW_L4     0x10#define RW_L5     0x14#define RW_L6     0x18#define RW_L7     0x1c#define RW_I0     0x20#define RW_I1     0x24#define RW_I2     0x28#define RW_I3     0x2c#define RW_I4     0x30#define RW_I5     0x34#define RW_I6     0x38#define RW_I7     0x3c/* Store the register window onto the 8-byte aligned area starting * at %reg.  It might be %sp, it might not, we don't care. */#define STORE_WINDOW(reg) \	std	%l0, [%reg + RW_L0]; \	std	%l2, [%reg + RW_L2]; \	std	%l4, [%reg + RW_L4]; \	std	%l6, [%reg + RW_L6]; \	std	%i0, [%reg + RW_I0]; \	std	%i2, [%reg + RW_I2]; \	std	%i4, [%reg + RW_I4]; \	std	%i6, [%reg + RW_I6];/* We define macro's for registers which have a fixed * meaning throughout this entire routine.  The 'T' in * the comments mean that the register can only be * accessed when in the 'trap' window, 'G' means * accessible in any window.  Do not change these registers * after they have been set, until you are ready to return * from the trap. */#define t_psr       l0 /* %psr at trap time                     T */#define t_pc        l1 /* PC for trap return                    T */#define t_npc       l2 /* NPC for trap return                   T */#define t_wim       l3 /* %wim at trap time                     T */#define saved_g5    l5 /* Global save register                  T */#define saved_g6    l6 /* Global save register                  T *//* Now registers whose values can change within the handler.      */#define twin_tmp    l4 /* Temp reg, only usable in trap window  T */#define glob_tmp    g5 /* Global temporary reg, usable anywhere G */	.text	.align	4#if 0	/* BEGINNING OF PATCH INSTRUCTIONS */	/* On a 7-window Sparc the boot code patches spnwin_*	 * instructions with the following ones.	 */	.globl	spnwin_patch1_7win, spnwin_patch2_7win, spnwin_patch3_7winspnwin_patch1_7win:	sll	%t_wim, 6, %glob_tmpspnwin_patch2_7win:	and	%glob_tmp, 0x7f, %glob_tmpspnwin_patch3_7win:	and	%twin_tmp, 0x7f, %twin_tmp	/* END OF PATCH INSTRUCTIONS */#endif	/* The trap entry point has done the following:	 *	 * rd    %psr, %l0	 * rd    %wim, %l3	 * b     spill_window_entry	 * nop	 */	.globl	spill_window_entry 	.globl	spnwin_patch1, spnwin_patch2spill_window_entry:	/* LOCATION: Trap Window */	mov	%g5, %saved_g5		! save away global temp register	mov	%g6, %saved_g6		! save away 'current' ptr register	/* Compute what the new %wim will be if we save the	 * window properly in this trap handler.	 *	 * newwim = ((%wim>>1) | (%wim<<(nwindows - 1)));	 */		srl	%t_wim, 0x1, %twin_tmpspnwin_patch1:	sll	%t_wim, 7, %glob_tmp		or	%glob_tmp, %twin_tmp, %glob_tmpspnwin_patch2:	and	%glob_tmp, 0xff, %glob_tmp	/* Save into the window which must be saved and do it.	 */	save	%g0, %g0, %g0		! save into the window to stash away	wr	%glob_tmp, 0x0, %wim	! set new %wim, this is safe now	/* LOCATION: Window to be saved */	STORE_WINDOW(sp)		! stash the window	restore	%g0, %g0, %g0		! go back into trap window	/* LOCATION: Trap window */	mov	%saved_g5, %g5		! restore %glob_tmp	mov	%saved_g6, %g6		! restore %curptr	wr	%t_psr, 0x0, %psr	! restore condition codes in %psr	nop; nop; nop			! waste some time	jmp	%t_pc			! Return from trap	rett	%t_npc			! we are done

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -