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

📄 misc.s

📁 Linux内核源代码 为压缩文件 是<<Linux内核>>一书中的源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	bdnz	11b#else /* MAX_COPY_PREFETCH == 1 */	dcbt	r5,r4	li	r11,CACHE_LINE_SIZE+4#endif /* MAX_COPY_PREFETCH */#endif /* CONFIG_8xx */	li	r0,4096/CACHE_LINE_SIZE	mtctr	r01:#ifndef CONFIG_8xx	dcbt	r11,r4	dcbz	r5,r3#endif	COPY_16_BYTES#if CACHE_LINE_SIZE >= 32	COPY_16_BYTES#if CACHE_LINE_SIZE >= 64	COPY_16_BYTES	COPY_16_BYTES#if CACHE_LINE_SIZE >= 128	COPY_16_BYTES	COPY_16_BYTES	COPY_16_BYTES	COPY_16_BYTES#endif#endif#endif	bdnz	1b	blr/* * Atomic [test&set] exchange * *	unsigned long xchg_u32(void *ptr, unsigned long val) * Changes the memory location '*ptr' to be val and returns * the previous value stored there. */_GLOBAL(xchg_u32)	mr	r5,r3		/* Save pointer */10:	lwarx	r3,0,r5		/* Fetch old value & reserve */	stwcx.	r4,0,r5		/* Update with new value */	bne-	10b		/* Retry if "reservation" (i.e. lock) lost */	blr/* * Try to acquire a spinlock. * Only does the stwcx. if the load returned 0 - the Programming * Environments Manual suggests not doing unnecessary stcwx.'s * since they may inhibit forward progress by other CPUs in getting * a lock. */_GLOBAL(__spin_trylock)	mr	r4,r3	eieio			/* prevent reordering of stores */	li	r5,-1	lwarx	r3,0,r4		/* fetch old value, establish reservation */	cmpwi	0,r3,0		/* is it 0? */	bnelr-			/* return failure if not */	stwcx.	r5,0,r4		/* try to update with new value */	bne-	1f		/* if we failed */	eieio			/* prevent reordering of stores */	blr1:	li	r3,1		/* return non-zero for failure */	blr/* * Atomic add/sub/inc/dec operations * * void atomic_add(int c, int *v) * void atomic_sub(int c, int *v) * void atomic_inc(int *v) * void atomic_dec(int *v) * int atomic_dec_and_test(int *v) * int atomic_inc_return(int *v) * int atomic_dec_return(int *v) * void atomic_clear_mask(atomic_t mask, atomic_t *addr) * void atomic_set_mask(atomic_t mask, atomic_t *addr); */#if 0 /* now inline - paulus */_GLOBAL(atomic_add)10:	lwarx	r5,0,r4		/* Fetch old value & reserve */	add	r5,r5,r3	/* Perform 'add' operation */	stwcx.	r5,0,r4		/* Update with new value */	bne-	10b		/* Retry if "reservation" (i.e. lock) lost */	blr_GLOBAL(atomic_add_return)10:	lwarx	r5,0,r4		/* Fetch old value & reserve */	add	r5,r5,r3	/* Perform 'add' operation */	stwcx.	r5,0,r4		/* Update with new value */	bne-	10b		/* Retry if "reservation" (i.e. lock) lost */	mr	r3,r5	blr_GLOBAL(atomic_sub)10:	lwarx	r5,0,r4		/* Fetch old value & reserve */	sub	r5,r5,r3	/* Perform 'add' operation */	stwcx.	r5,0,r4		/* Update with new value */	bne-	10b		/* Retry if "reservation" (i.e. lock) lost */	blr_GLOBAL(atomic_inc)10:	lwarx	r5,0,r3		/* Fetch old value & reserve */	addi	r5,r5,1		/* Perform 'add' operation */	stwcx.	r5,0,r3		/* Update with new value */	bne-	10b		/* Retry if "reservation" (i.e. lock) lost */	blr_GLOBAL(atomic_inc_return)10:	lwarx	r5,0,r3		/* Fetch old value & reserve */	addi	r5,r5,1		/* Perform 'add' operation */	stwcx.	r5,0,r3		/* Update with new value */	bne-	10b		/* Retry if "reservation" (i.e. lock) lost */	mr	r3,r5		/* Return new value */	blr_GLOBAL(atomic_dec)10:	lwarx	r5,0,r3		/* Fetch old value & reserve */	subi	r5,r5,1		/* Perform 'add' operation */	stwcx.	r5,0,r3		/* Update with new value */	bne-	10b		/* Retry if "reservation" (i.e. lock) lost */	blr_GLOBAL(atomic_dec_return)10:	lwarx	r5,0,r3		/* Fetch old value & reserve */	subi	r5,r5,1		/* Perform 'add' operation */	stwcx.	r5,0,r3		/* Update with new value */	bne-	10b		/* Retry if "reservation" (i.e. lock) lost */	mr	r3,r5		/* Return new value */	blr_GLOBAL(atomic_dec_and_test)10:	lwarx	r5,0,r3		/* Fetch old value & reserve */	subi	r5,r5,1		/* Perform 'add' operation */	stwcx.	r5,0,r3		/* Update with new value */	bne-	10b		/* Retry if "reservation" (i.e. lock) lost */	cntlzw	r3,r5	srwi	r3,r3,5	blr#endif /* 0 */_GLOBAL(atomic_clear_mask)10:	lwarx	r5,0,r4	andc	r5,r5,r3	stwcx.	r5,0,r4	bne-	10b	blr_GLOBAL(atomic_set_mask)10:	lwarx	r5,0,r4	or	r5,r5,r3	stwcx.	r5,0,r4	bne-	10b	blr/* * I/O string operations * * insb(port, buf, len) * outsb(port, buf, len) * insw(port, buf, len) * outsw(port, buf, len) * insl(port, buf, len) * outsl(port, buf, len) * insw_ns(port, buf, len) * outsw_ns(port, buf, len) * insl_ns(port, buf, len) * outsl_ns(port, buf, len) * * The *_ns versions don't do byte-swapping. */_GLOBAL(_insb)	cmpwi	0,r5,0	mtctr	r5	subi	r4,r4,1	blelr-00:	lbz	r5,0(r3)	eieio	stbu	r5,1(r4)	bdnz	00b	blr_GLOBAL(_outsb)	cmpwi	0,r5,0	mtctr	r5	subi	r4,r4,1	blelr-00:	lbzu	r5,1(r4)	stb	r5,0(r3)	eieio	bdnz	00b	blr	_GLOBAL(_insw)	cmpwi	0,r5,0	mtctr	r5	subi	r4,r4,2	blelr-00:	lhbrx	r5,0,r3	eieio	sthu	r5,2(r4)	bdnz	00b	blr_GLOBAL(_outsw)	cmpwi	0,r5,0	mtctr	r5	subi	r4,r4,2	blelr-00:	lhzu	r5,2(r4)	eieio	sthbrx	r5,0,r3		bdnz	00b	blr	_GLOBAL(_insl)	cmpwi	0,r5,0	mtctr	r5	subi	r4,r4,4	blelr-00:	lwbrx	r5,0,r3	eieio	stwu	r5,4(r4)	bdnz	00b	blr_GLOBAL(_outsl)	cmpwi	0,r5,0	mtctr	r5	subi	r4,r4,4	blelr-00:	lwzu	r5,4(r4)	stwbrx	r5,0,r3	eieio	bdnz	00b	blr	_GLOBAL(ide_insw)_GLOBAL(_insw_ns)	cmpwi	0,r5,0	mtctr	r5	subi	r4,r4,2	blelr-00:	lhz	r5,0(r3)	eieio	sthu	r5,2(r4)	bdnz	00b	blr_GLOBAL(ide_outsw)_GLOBAL(_outsw_ns)	cmpwi	0,r5,0	mtctr	r5	subi	r4,r4,2	blelr-00:	lhzu	r5,2(r4)	sth	r5,0(r3)	eieio	bdnz	00b	blr	_GLOBAL(_insl_ns)	cmpwi	0,r5,0	mtctr	r5	subi	r4,r4,4	blelr-00:	lwz	r5,0(r3)	eieio	stwu	r5,4(r4)	bdnz	00b	blr_GLOBAL(_outsl_ns)	cmpwi	0,r5,0	mtctr	r5	subi	r4,r4,4	blelr-00:	lwzu	r5,4(r4)	stw	r5,0(r3)	eieio	bdnz	00b	blr	/* * Extended precision shifts. *  * Updated to be valid for shift counts from 0 to 63 inclusive. * -- Gabriel * * R3/R4 has 64 bit value * R5    has shift count * result in R3/R4 * *  ashrdi3: arithmetic right shift (sign propagation)	     *  lshrdi3: logical right shift	 *  ashldi3: left shift */_GLOBAL(__ashrdi3)	subfic	r6,r5,32		srw	r4,r4,r5	# LSW = count > 31 ? 0 : LSW >> count	addi	r7,r5,32	# could be xori, or addi with -32	slw	r6,r3,r6	# t1 = count > 31 ? 0 : MSW << (32-count)	rlwinm	r8,r7,0,32	# t3 = (count < 32) ? 32 : 0	sraw	r7,r3,r7	# t2 = MSW >> (count-32)	or	r4,r4,r6	# LSW |= t1	slw	r7,r7,r8	# t2 = (count < 32) ? 0 : t2	sraw	r3,r3,r5	# MSW = MSW >> count	or	r4,r4,r7	# LSW |= t2	blr_GLOBAL(__ashldi3)	subfic	r6,r5,32		slw	r3,r3,r5	# MSW = count > 31 ? 0 : MSW << count	addi	r7,r5,32	# could be xori, or addi with -32	srw	r6,r4,r6	# t1 = count > 31 ? 0 : LSW >> (32-count)	slw	r7,r4,r7	# t2 = count < 32 ? 0 : LSW << (count-32)	or	r3,r3,r6	# MSW |= t1	slw	r4,r4,r5	# LSW = LSW << count	or	r3,r3,r7	# MSW |= t2	blr_GLOBAL(__lshrdi3)	subfic	r6,r5,32		srw	r4,r4,r5	# LSW = count > 31 ? 0 : LSW >> count	addi	r7,r5,32	# could be xori, or addi with -32	slw	r6,r3,r6	# t1 = count > 31 ? 0 : MSW << (32-count)	srw	r7,r3,r7	# t2 = count < 32 ? 0 : MSW >> (count-32)	or	r4,r4,r6	# LSW |= t1	srw	r3,r3,r5	# MSW = MSW >> count	or	r4,r4,r7	# LSW |= t2 	blr_GLOBAL(abs)	srawi	r4,r3,31	xor	r3,r3,r4	sub	r3,r3,r4	blr_GLOBAL(_get_SP)	mr	r3,r1		/* Close enough */	blr_GLOBAL(_get_THRM1)	mfspr	r3,THRM1	blr_GLOBAL(_get_THRM2)	mfspr	r3,THRM2	blr_GLOBAL(_get_THRM3)	mfspr	r3,THRM3	blr		_GLOBAL(_set_THRM1)	mtspr	THRM1,r3	blr_GLOBAL(_set_THRM2)	mtspr	THRM2,r3	blr_GLOBAL(_set_THRM3)	mtspr	THRM3,r3	blr	_GLOBAL(_get_PVR)	mfspr	r3,PVR	blr#ifdef CONFIG_8xx_GLOBAL(_get_IMMR)	mfspr	r3, 638	blr#endif	_GLOBAL(_get_HID0)	mfspr	r3,HID0	blr_GLOBAL(_get_ICTC)	mfspr	r3,ICTC	blr_GLOBAL(_set_ICTC)	mtspr	ICTC,r3	blr	/*	L2CR functions	Copyright 

⌨️ 快捷键说明

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