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

📄 arch.inc

📁 eCos1.31版
💻 INC
📖 第 1 页 / 共 2 页
字号:
	.macro lgpr reg,ptr	ld	$\reg,(mipsreg_regs+\reg*mips_regsize)(\ptr)	.endm	.macro slo reg,ptr	sd	\reg,(mipsreg_lo)(\ptr)	.endm	.macro shi reg,ptr	sd	\reg,(mipsreg_hi)(\ptr)	.endm	.macro llo reg,ptr	ld	\reg,(mipsreg_lo)(\ptr)	.endm	.macro lhi reg,ptr	ld	\reg,(mipsreg_hi)(\ptr)	.endm	.macro ssp reg,ptr	sd	\reg,(mipsreg_regs+29*mips_regsize)(\ptr)	.endm	.macro lsp reg,ptr	ld	\reg,(mipsreg_regs+29*mips_regsize)(\ptr)	.endm#else	.macro sgpr reg,ptr	sw	$\reg,(mipsreg_regs+\reg*mips_regsize)(\ptr)	.endm	.macro lgpr reg,ptr	lw	$\reg,(mipsreg_regs+\reg*mips_regsize)(\ptr)	.endm	.macro slo reg,ptr	sw	\reg,(mipsreg_lo)(\ptr)	.endm	.macro shi reg,ptr	sw	\reg,(mipsreg_hi)(\ptr)	.endm	.macro llo reg,ptr	lw	\reg,(mipsreg_lo)(\ptr)	.endm	.macro lhi reg,ptr	lw	\reg,(mipsreg_hi)(\ptr)	.endm	.macro ssp reg,ptr	sw	\reg,(mipsreg_regs+29*mips_regsize)(\ptr)	.endm	.macro lsp reg,ptr	lw	\reg,(mipsreg_regs+29*mips_regsize)(\ptr)	.endm#endif# PC is always 32-bit for us	.macro lpc reg,ptr	lw	\reg,(mipsreg_pc)(\ptr)	.endm	.macro spc reg,ptr	sw	\reg,(mipsreg_pc)(\ptr)	.endm#------------------------------------------------------------------------------# FPU macros.# The MIPS floating point unit essentially operates in two modes. In the first# it supplies 32 32bit FP registers that may be paired into 16 64 bit registers.# In the second it supplies 32 64bit registers. Which mode is to be used depends# not only on the specific implementation in use, but also on the setting of the# FR bit in the status register (if it is implemented) and on the expectations of# the toolchain.				#ifndef CYGPKG_HAL_MIPS_FPU_DEFINED#ifdef CYGHWR_HAL_MIPS_FPU#if defined(CYGHWR_HAL_MIPS_FPU_64BIT)#define sfpr	sdc1#define lfpr	ldc1#define CYG_HAL_MIPS_FPU_SR_INIT	0x24000000	#elif defined(CYGHWR_HAL_MIPS_FPU_32BIT)#define sfpr	swc1#define lfpr	lwc1#define CYG_HAL_MIPS_FPU_SR_INIT	0x20000000		#else#error MIPS FPU register size not defined#endif		#ifndef CYG_HAL_MIPS_FCSR_INIT#define CYG_HAL_MIPS_FCSR_INIT 0#endif	.macro	hal_fpu_init	mfc0	v0,status			# Get sr	la	v1,0xDBFFFFFF			# Clear bits to be changed	and	v0,v0,v1	la	v1,CYG_HAL_MIPS_FPU_SR_INIT	# Set the bits we want	or	v0,v0,v1			# Set sr to required value	mtc0	v0,status			# return to sr	nop	nop	nop        la	v0,CYG_HAL_MIPS_FCSR_INIT	# Get initial value for FCR31	ctc1	v0,$31				# set Fp control reg	nop	.endm	# Save the caller-saved registers as defined by the ABI.	# These only really need saving during interrupts.	.macro	hal_fpu_save_caller regs	cfc1	v0,$31	sw	v0,mipsreg_fcr31(\regs)	sfpr	f0,(mipsreg_fpureg+0*mips_fpuregsize)(\regs)	sfpr	f1,(mipsreg_fpureg+1*mips_fpuregsize)(\regs)	sfpr	f2,(mipsreg_fpureg+2*mips_fpuregsize)(\regs)	sfpr	f3,(mipsreg_fpureg+3*mips_fpuregsize)(\regs)	sfpr	f4,(mipsreg_fpureg+4*mips_fpuregsize)(\regs)	sfpr	f5,(mipsreg_fpureg+5*mips_fpuregsize)(\regs)	sfpr	f6,(mipsreg_fpureg+6*mips_fpuregsize)(\regs)	sfpr	f7,(mipsreg_fpureg+7*mips_fpuregsize)(\regs)	sfpr	f8,(mipsreg_fpureg+8*mips_fpuregsize)(\regs)	sfpr	f9,(mipsreg_fpureg+9*mips_fpuregsize)(\regs)	sfpr	f10,(mipsreg_fpureg+10*mips_fpuregsize)(\regs)	sfpr	f11,(mipsreg_fpureg+11*mips_fpuregsize)(\regs)	sfpr	f12,(mipsreg_fpureg+12*mips_fpuregsize)(\regs)	sfpr	f13,(mipsreg_fpureg+13*mips_fpuregsize)(\regs)	sfpr	f14,(mipsreg_fpureg+14*mips_fpuregsize)(\regs)	sfpr	f15,(mipsreg_fpureg+15*mips_fpuregsize)(\regs)	sfpr	f16,(mipsreg_fpureg+16*mips_fpuregsize)(\regs)	sfpr	f17,(mipsreg_fpureg+17*mips_fpuregsize)(\regs)	sfpr	f18,(mipsreg_fpureg+18*mips_fpuregsize)(\regs)	sfpr	f19,(mipsreg_fpureg+19*mips_fpuregsize)(\regs)	sfpr	f31,(mipsreg_fpureg+31*mips_fpuregsize)(\regs)	.endm	# Save the callee-saved registers as defined by the ABI.	# These are the only registers that need to be saved	# across thread switches.	.macro	hal_fpu_save_callee regs	sfpr	f20,(mipsreg_fpureg+20*mips_fpuregsize)(\regs)	sfpr	f21,(mipsreg_fpureg+21*mips_fpuregsize)(\regs)	sfpr	f22,(mipsreg_fpureg+22*mips_fpuregsize)(\regs)	sfpr	f23,(mipsreg_fpureg+23*mips_fpuregsize)(\regs)	sfpr	f24,(mipsreg_fpureg+24*mips_fpuregsize)(\regs)	sfpr	f25,(mipsreg_fpureg+25*mips_fpuregsize)(\regs)	sfpr	f26,(mipsreg_fpureg+26*mips_fpuregsize)(\regs)	sfpr	f27,(mipsreg_fpureg+27*mips_fpuregsize)(\regs)	sfpr	f28,(mipsreg_fpureg+28*mips_fpuregsize)(\regs)	sfpr	f29,(mipsreg_fpureg+29*mips_fpuregsize)(\regs)	sfpr	f30,(mipsreg_fpureg+30*mips_fpuregsize)(\regs)	.endm	# General macro to save everything	.macro	hal_fpu_save regs	hal_fpu_save_caller \regs	hal_fpu_save_callee \regs	.endm	# Reload the caller-saved registers.	.macro	hal_fpu_load_caller regs	lfpr	f0,(mipsreg_fpureg+0*mips_fpuregsize)(\regs)	lfpr	f1,(mipsreg_fpureg+1*mips_fpuregsize)(\regs)	lfpr	f2,(mipsreg_fpureg+2*mips_fpuregsize)(\regs)	lfpr	f3,(mipsreg_fpureg+3*mips_fpuregsize)(\regs)	lfpr	f4,(mipsreg_fpureg+4*mips_fpuregsize)(\regs)	lfpr	f5,(mipsreg_fpureg+5*mips_fpuregsize)(\regs)	lfpr	f6,(mipsreg_fpureg+6*mips_fpuregsize)(\regs)	lfpr	f7,(mipsreg_fpureg+7*mips_fpuregsize)(\regs)	lfpr	f8,(mipsreg_fpureg+8*mips_fpuregsize)(\regs)	lfpr	f9,(mipsreg_fpureg+9*mips_fpuregsize)(\regs)	lfpr	f10,(mipsreg_fpureg+10*mips_fpuregsize)(\regs)	lfpr	f11,(mipsreg_fpureg+11*mips_fpuregsize)(\regs)	lfpr	f12,(mipsreg_fpureg+12*mips_fpuregsize)(\regs)	lfpr	f13,(mipsreg_fpureg+13*mips_fpuregsize)(\regs)	lfpr	f14,(mipsreg_fpureg+14*mips_fpuregsize)(\regs)	lfpr	f15,(mipsreg_fpureg+15*mips_fpuregsize)(\regs)	lfpr	f16,(mipsreg_fpureg+16*mips_fpuregsize)(\regs)	lfpr	f17,(mipsreg_fpureg+17*mips_fpuregsize)(\regs)	lfpr	f18,(mipsreg_fpureg+18*mips_fpuregsize)(\regs)	lfpr	f19,(mipsreg_fpureg+19*mips_fpuregsize)(\regs)	lfpr	f31,(mipsreg_fpureg+31*mips_fpuregsize)(\regs)	lw	v0,mipsreg_fcr31(\regs)        ctc1	v0,$31	.endm	# Reload the callee-saved registers.	.macro	hal_fpu_load_callee regs	lfpr	f20,(mipsreg_fpureg+20*mips_fpuregsize)(\regs)	lfpr	f21,(mipsreg_fpureg+21*mips_fpuregsize)(\regs)	lfpr	f22,(mipsreg_fpureg+22*mips_fpuregsize)(\regs)	lfpr	f23,(mipsreg_fpureg+23*mips_fpuregsize)(\regs)	lfpr	f24,(mipsreg_fpureg+24*mips_fpuregsize)(\regs)	lfpr	f25,(mipsreg_fpureg+25*mips_fpuregsize)(\regs)	lfpr	f26,(mipsreg_fpureg+26*mips_fpuregsize)(\regs)	lfpr	f27,(mipsreg_fpureg+27*mips_fpuregsize)(\regs)	lfpr	f28,(mipsreg_fpureg+28*mips_fpuregsize)(\regs)	lfpr	f29,(mipsreg_fpureg+29*mips_fpuregsize)(\regs)	lfpr	f30,(mipsreg_fpureg+30*mips_fpuregsize)(\regs)	.endm	# Reload everything.	.macro	hal_fpu_load regs	hal_fpu_load_caller \regs	hal_fpu_load_callee \regs	.endm#else		# Default macros for non-fpu implementations		.macro	hal_fpu_init	.endm			.macro	hal_fpu_save regs	.endm	.macro	hal_fpu_save_caller regs	.endm	.macro	hal_fpu_save_callee regs	.endm	.macro	hal_fpu_load_caller regs	.endm		.macro	hal_fpu_load_callee regs	.endm		.macro	hal_fpu_load regs	.endm	#endif			#endif	#------------------------------------------------------------------------------# MMU macros.	#ifndef CYGPKG_HAL_MIPS_MMU_DEFINED	.macro	hal_mmu_init	.endm#endif	#------------------------------------------------------------------------------# MEMC macros.	#ifndef CYGPKG_HAL_MIPS_MEMC_DEFINED	.macro	hal_memc_init	.endm#endif		#------------------------------------------------------------------------------# Cache macros.	#ifndef CYGPKG_HAL_MIPS_CACHE_DEFINED#ifdef CYG_HAL_MIPS_R3900	.macro	hal_cache_init	mfc0	v0,config		# disable cache in config register	nop	nop	la	v1,0xffffffcf	and	v0,v0,v1	mtc0	v0,config	nop	nop	nop	.endm#else	.macro	hal_cache_init	mfc0	v0,config0		# disable Kseg0 caching in config0 register	nop	nop	la	v1,0xfffffff8	and	v0,v0,v1	ori	v0,v0,2	mtc0	v0,config0	nop	nop	nop	.endm#endif#endif	#------------------------------------------------------------------------------# Diagnostics macros.	#ifndef CYGPKG_HAL_MIPS_DIAG_DEFINED	.macro	hal_diag_init	.endm	.macro	hal_diag_excpt_start	.endm	.macro	hal_diag_intr_start	.endm	.macro	hal_diag_restore	.endm#endif	#------------------------------------------------------------------------------# Timer initialization.	#ifndef CYGPKG_HAL_MIPS_TIMER_DEFINED	.macro	hal_timer_init	.endm#endif	#------------------------------------------------------------------------------# Monitor initialization.	#ifndef CYGPKG_HAL_MIPS_MON_DEFINED	.macro	hal_mon_init	.endm#endif	#------------------------------------------------------------------------------#endif // ifndef CYGONCE_HAL_ARCH_INC# end of arch.inc

⌨️ 快捷键说明

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