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

📄 head.s

📁 上传linux-jx2410的源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	ldf.fill.nta f34=[in0],32	ldf.fill.nta f35=[ r3],32	;;	ldf.fill.nta f36=[in0],32	ldf.fill.nta f37=[ r3],32	;;	ldf.fill.nta f38=[in0],32	ldf.fill.nta f39=[ r3],32	;;	ldf.fill.nta f40=[in0],32	ldf.fill.nta f41=[ r3],32	;;	ldf.fill.nta f42=[in0],32	ldf.fill.nta f43=[ r3],32	;;	ldf.fill.nta f44=[in0],32	ldf.fill.nta f45=[ r3],32	;;	ldf.fill.nta f46=[in0],32	ldf.fill.nta f47=[ r3],32	;;	ldf.fill.nta f48=[in0],32	ldf.fill.nta f49=[ r3],32	;;	ldf.fill.nta f50=[in0],32	ldf.fill.nta f51=[ r3],32	;;	ldf.fill.nta f52=[in0],32	ldf.fill.nta f53=[ r3],32	;;	ldf.fill.nta f54=[in0],32	ldf.fill.nta f55=[ r3],32	;;	ldf.fill.nta f56=[in0],32	ldf.fill.nta f57=[ r3],32	;;	ldf.fill.nta f58=[in0],32	ldf.fill.nta f59=[ r3],32	;;	ldf.fill.nta f60=[in0],32	ldf.fill.nta f61=[ r3],32	;;	ldf.fill.nta f62=[in0],32	ldf.fill.nta f63=[ r3],32	;;	ldf.fill.nta f64=[in0],32	ldf.fill.nta f65=[ r3],32	;;	ldf.fill.nta f66=[in0],32	ldf.fill.nta f67=[ r3],32	;;	ldf.fill.nta f68=[in0],32	ldf.fill.nta f69=[ r3],32	;;	ldf.fill.nta f70=[in0],32	ldf.fill.nta f71=[ r3],32	;;	ldf.fill.nta f72=[in0],32	ldf.fill.nta f73=[ r3],32	;;	ldf.fill.nta f74=[in0],32	ldf.fill.nta f75=[ r3],32	;;	ldf.fill.nta f76=[in0],32	ldf.fill.nta f77=[ r3],32	;;	ldf.fill.nta f78=[in0],32	ldf.fill.nta f79=[ r3],32	;;	ldf.fill.nta f80=[in0],32	ldf.fill.nta f81=[ r3],32	;;	ldf.fill.nta f82=[in0],32	ldf.fill.nta f83=[ r3],32	;;	ldf.fill.nta f84=[in0],32	ldf.fill.nta f85=[ r3],32	;;	ldf.fill.nta f86=[in0],32	ldf.fill.nta f87=[ r3],32	;;	ldf.fill.nta f88=[in0],32	ldf.fill.nta f89=[ r3],32	;;	ldf.fill.nta f90=[in0],32	ldf.fill.nta f91=[ r3],32	;;	ldf.fill.nta f92=[in0],32	ldf.fill.nta f93=[ r3],32	;;	ldf.fill.nta f94=[in0],32	ldf.fill.nta f95=[ r3],32	;;	ldf.fill.nta f96=[in0],32	ldf.fill.nta f97=[ r3],32	;;	ldf.fill.nta f98=[in0],32	ldf.fill.nta f99=[ r3],32	;;	ldf.fill.nta f100=[in0],32	ldf.fill.nta f101=[ r3],32	;;	ldf.fill.nta f102=[in0],32	ldf.fill.nta f103=[ r3],32	;;	ldf.fill.nta f104=[in0],32	ldf.fill.nta f105=[ r3],32	;;	ldf.fill.nta f106=[in0],32	ldf.fill.nta f107=[ r3],32	;;	ldf.fill.nta f108=[in0],32	ldf.fill.nta f109=[ r3],32	;;	ldf.fill.nta f110=[in0],32	ldf.fill.nta f111=[ r3],32	;;	ldf.fill.nta f112=[in0],32	ldf.fill.nta f113=[ r3],32	;;	ldf.fill.nta f114=[in0],32	ldf.fill.nta f115=[ r3],32	;;	ldf.fill.nta f116=[in0],32	ldf.fill.nta f117=[ r3],32	;;	ldf.fill.nta f118=[in0],32	ldf.fill.nta f119=[ r3],32	;;	ldf.fill.nta f120=[in0],32	ldf.fill.nta f121=[ r3],32	;;	ldf.fill.nta f122=[in0],32	ldf.fill.nta f123=[ r3],32	;;	ldf.fill.nta f124=[in0],32	ldf.fill.nta f125=[ r3],32	;;	ldf.fill.nta f126=[in0],32	ldf.fill.nta f127=[ r3],32	br.ret.sptk.many rpEND(__ia64_load_fpu)GLOBAL_ENTRY(__ia64_init_fpu)	alloc r2=ar.pfs,0,0,0,0	stf.spill [sp]=f0	mov      f32=f0	;;	ldf.fill f33=[sp]	ldf.fill f34=[sp]	mov      f35=f0	;;	ldf.fill f36=[sp]	ldf.fill f37=[sp]	mov      f38=f0	;;	ldf.fill f39=[sp]	ldf.fill f40=[sp]	mov      f41=f0	;;	ldf.fill f42=[sp]	ldf.fill f43=[sp]	mov      f44=f0	;;	ldf.fill f45=[sp]	ldf.fill f46=[sp]	mov      f47=f0	;;	ldf.fill f48=[sp]	ldf.fill f49=[sp]	mov      f50=f0	;;	ldf.fill f51=[sp]	ldf.fill f52=[sp]	mov      f53=f0	;;	ldf.fill f54=[sp]	ldf.fill f55=[sp]	mov      f56=f0	;;	ldf.fill f57=[sp]	ldf.fill f58=[sp]	mov      f59=f0	;;	ldf.fill f60=[sp]	ldf.fill f61=[sp]	mov      f62=f0	;;	ldf.fill f63=[sp]	ldf.fill f64=[sp]	mov      f65=f0	;;	ldf.fill f66=[sp]	ldf.fill f67=[sp]	mov      f68=f0	;;	ldf.fill f69=[sp]	ldf.fill f70=[sp]	mov      f71=f0	;;	ldf.fill f72=[sp]	ldf.fill f73=[sp]	mov      f74=f0	;;	ldf.fill f75=[sp]	ldf.fill f76=[sp]	mov      f77=f0	;;	ldf.fill f78=[sp]	ldf.fill f79=[sp]	mov      f80=f0	;;	ldf.fill f81=[sp]	ldf.fill f82=[sp]	mov      f83=f0	;;	ldf.fill f84=[sp]	ldf.fill f85=[sp]	mov      f86=f0	;;	ldf.fill f87=[sp]	ldf.fill f88=[sp]	mov      f89=f0	;;	ldf.fill f90=[sp]	ldf.fill f91=[sp]	mov      f92=f0	;;	ldf.fill f93=[sp]	ldf.fill f94=[sp]	mov      f95=f0	;;	ldf.fill f96=[sp]	ldf.fill f97=[sp]	mov      f98=f0	;;	ldf.fill f99=[sp]	ldf.fill f100=[sp]	mov      f101=f0	;;	ldf.fill f102=[sp]	ldf.fill f103=[sp]	mov      f104=f0	;;	ldf.fill f105=[sp]	ldf.fill f106=[sp]	mov      f107=f0	;;	ldf.fill f108=[sp]	ldf.fill f109=[sp]	mov      f110=f0	;;	ldf.fill f111=[sp]	ldf.fill f112=[sp]	mov      f113=f0	;;	ldf.fill f114=[sp]	ldf.fill f115=[sp]	mov      f116=f0	;;	ldf.fill f117=[sp]	ldf.fill f118=[sp]	mov      f119=f0	;;	ldf.fill f120=[sp]	ldf.fill f121=[sp]	mov      f122=f0	;;	ldf.fill f123=[sp]	ldf.fill f124=[sp]	mov      f125=f0	;;	ldf.fill f126=[sp]	mov      f127=f0	br.ret.sptk.many rpEND(__ia64_init_fpu)/* * Switch execution mode from virtual to physical or vice versa. * * Inputs: *	r16 = new psr to establish * * Note: RSE must already be in enforced lazy mode */GLOBAL_ENTRY(ia64_switch_mode) {	alloc r2=ar.pfs,0,0,0,0	rsm psr.i | psr.ic		// disable interrupts and interrupt collection	mov r15=ip }	;; {	flushrs				// must be first insn in group	srlz.i	shr.u r19=r15,61		// r19 <- top 3 bits of current IP }	;;	mov cr.ipsr=r16			// set new PSR	add r3=1f-ia64_switch_mode,r15	xor r15=0x7,r19			// flip the region bits	mov r17=ar.bsp	mov r14=rp			// get return address into a general register	// switch RSE backing store:	;;	dep r17=r15,r17,61,3		// make ar.bsp physical or virtual	mov r18=ar.rnat			// save ar.rnat	;;	mov ar.bspstore=r17		// this steps on ar.rnat	dep r3=r15,r3,61,3		// make rfi return address physical or virtual	;;	mov cr.iip=r3	mov cr.ifs=r0	dep sp=r15,sp,61,3		// make stack pointer physical or virtual	;;	mov ar.rnat=r18			// restore ar.rnat	dep r14=r15,r14,61,3		// make function return address physical or virtual	rfi				// must be last insn in group	;;1:	mov rp=r14	br.ret.sptk.many rpEND(ia64_switch_mode)#ifdef CONFIG_IA64_BRL_EMU/* *  Assembly routines used by brl_emu.c to set preserved register state. */#define SET_REG(reg)				\ GLOBAL_ENTRY(ia64_set_##reg);			\	alloc r16=ar.pfs,1,0,0,0;		\	mov reg=r32;				\	;;					\	br.ret.sptk.many rp;			\ END(ia64_set_##reg)SET_REG(b1);SET_REG(b2);SET_REG(b3);SET_REG(b4);SET_REG(b5);#endif /* CONFIG_IA64_BRL_EMU */#ifdef CONFIG_SMP	/*	 * This routine handles spinlock contention.  It uses a simple exponential backoff	 * algorithm to reduce unnecessary bus traffic.  The initial delay is selected from	 * the low-order bits of the cycle counter (a cheap "randomizer").  I'm sure this	 * could use additional tuning, especially on systems with a large number of CPUs.	 * Also, I think the maximum delay should be made a function of the number of CPUs in	 * the system. --davidm 00/08/05	 *	 * WARNING: This is not a normal procedure.  It gets called from C code without	 * the compiler knowing about it.  Thus, we must not use any scratch registers	 * beyond those that were declared "clobbered" at the call-site (see spin_lock()	 * macro).  We may not even use the stacked registers, because that could overwrite	 * output registers.  Similarly, we can't use the scratch stack area as it may be	 * in use, too.	 *	 * Inputs:	 *	ar.ccv = 0 (and available for use)	 *	r28 = available for use	 *	r29 = available for use	 *	r30 = non-zero (and available for use)	 *	r31 = address of lock we're trying to acquire	 *	p15 = available for use	 */#	define delay	r28#	define timeout	r29#	define tmp	r30GLOBAL_ENTRY(ia64_spinlock_contention)	mov tmp=ar.itc	;;	and delay=0x3f,tmp	;;.retry:	add timeout=tmp,delay	shl delay=delay,1	;;	dep delay=delay,r0,0,13	// limit delay to 8192 cycles	;;	// delay a little....wait:	sub tmp=tmp,timeout	or delay=0xf,delay	// make sure delay is non-zero (otherwise we get stuck with 0)	;;	cmp.lt p15,p0=tmp,r0	mov tmp=ar.itc(p15)	br.cond.sptk .wait	;;	ld4 tmp=[r31]	;;	cmp.ne p15,p0=tmp,r0	mov tmp=ar.itc(p15)	br.cond.sptk .retry	// lock is still busy	;;	// try acquiring lock (we know ar.ccv is still zero!):	mov tmp=1	;;	cmpxchg4.acq tmp=[r31],tmp,ar.ccv	;;	cmp.eq p15,p0=tmp,r0	mov tmp=ar.itc(p15)	br.ret.sptk.many b7	// got lock -> return	br .retry		// still no luck, retryEND(ia64_spinlock_contention)#endif

⌨️ 快捷键说明

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