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

📄 contextswitch_asm.s

📁 最新版的BCC, bcc-src-1.0.29c.rar,基于sparc平台处理器leon2,leon3,v7,v8等系列的linux环境下交叉编译工具
💻 S
字号:
#include <asm-leon/leon.h>#include <asm-leon/leonstack.h>#include <asm-leon/contextswitch.h>#include <asm-leon/winmacros.h>/* This asm code relies on the following offsets (setjmp.h): #define THREAD_JB_SP     0 #define THREAD_JB_PC     1#define THREAD_JB_PSR    8 #define THREAD_JB_WIM    9 */	/* Number of register windows */	.global _nwindows_min1, _nwindows	.text	.global _switch_to_switch_to:	  #ifndef _FLAT        !mov     %o0,%i0                   /* propagate env on restore */                                !mov     %o1,%i1                   /* propagate val on restore */                                !restore                                                                                mov     %o0,%g7                                                                      mov     %o1,%g3                   /* former %%i1 (val) */                           		sethi %hi(_nwindows_min1), %g4    /* flush registers */	ld [%g4+%lo(_nwindows_min1)], %g41:	save   %sp, -SF_REGS_SZ, %sp	 !NWINDOWS-1 times	sub    %g4,1,%g4	cmp    %g0,%g4	bne    1b	 nop#else        mov     %o0,%g7                                                                      mov     %o1,%g3                   /* former %%i1 (val) */	RW_STORE(sp)#endif	        ldd     [%g7+THREAD_JB_PSR*4], %g4 /* load psr,wim */                                        wr      %g4, 0x20, %psr                                                              nop                                                                                    nop                                                                                    nop                                                                                    ldd     [%g7 +THREAD_JB_SP*4], %sp /* load sp, pc to jump to */                              wr      %g5, 0x0, %wim                                                               	RW_LOAD(sp)                       /* restore window */         wr      %g4, 0x00, %psr                                                              nop                                                                                    nop                                                                                    nop                                                                                                                                                                           jmp     %o7 + 8                   /* success      */                                        mov     %g3, %o0                  /* return %%g3  */                                	         .text                                    	.global thread_setjmp, _do_thread_setjmp thread_setjmp:                                  #ifdef _FLAT	RW_STORE(sp)                      /* store window */#endif!	RW_STORE(sp)                      /* store window for _FLAT and normal, SWITCH_TO_STACK in pthread need this*/			mov %psr,%o2                            #ifndef _SOFT_FLOAT        set 0x1000,%o3                                  andn %o2,%o3,%o2      !disable fpu#endif	        std %sp,[%o0]         !THREAD_JB_SP             st  %o2,[%o0+(8*4)]   !THREAD_JB_PSR            ba _do_thread_setjmp                             nop                                    

⌨️ 快捷键说明

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