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

📄 findbit.s

📁 linux 内核源代码
💻 S
字号:
/* * Copyright (C) 2006 Atmel Corporation * * 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. */#include <linux/linkage.h>	.text	/*	 * unsigned long find_first_zero_bit(const unsigned long *addr,	 *				     unsigned long size)	 */ENTRY(find_first_zero_bit)	cp.w	r11, 0	reteq	r11	mov	r9, r111:	ld.w	r8, r12[0]	com	r8	brne	.L_found	sub	r12, -4	sub	r9, 32	brgt	1b	retal	r11	/*	 * unsigned long find_next_zero_bit(const unsigned long *addr,	 *				    unsigned long size,	 *				    unsigned long offset)	 */ENTRY(find_next_zero_bit)	lsr	r8, r10, 5	sub	r9, r11, r10	retle	r11	lsl	r8, 2	add	r12, r8	andl	r10, 31, COH	breq	1f	/* offset is not word-aligned. Handle the first (32 - r10) bits */	ld.w	r8, r12[0]	com	r8	sub	r12, -4	lsr	r8, r8, r10	brne	.L_found	/* r9 = r9 - (32 - r10) = r9 + r10 - 32 */	add	r9, r10	sub	r9, 32	retle	r11	/* Main loop. offset must be word-aligned */1:	ld.w	r8, r12[0]	com	r8	brne	.L_found	sub	r12, -4	sub	r9, 32	brgt	1b	retal	r11	/* Common return path for when a bit is actually found. */.L_found:	brev	r8	clz	r10, r8	rsub	r9, r11	add	r10, r9	/* XXX: If we don't have to return exactly "size" when the bit	   is not found, we may drop this "min" thing */	min	r12, r11, r10	retal	r12	/*	 * unsigned long find_first_bit(const unsigned long *addr,	 *				unsigned long size)	 */ENTRY(find_first_bit)	cp.w	r11, 0	reteq	r11	mov	r9, r111:	ld.w	r8, r12[0]	cp.w	r8, 0	brne	.L_found	sub	r12, -4	sub	r9, 32	brgt	1b	retal	r11	/*	 * unsigned long find_next_bit(const unsigned long *addr,	 *			       unsigned long size,	 *			       unsigned long offset)	 */ENTRY(find_next_bit)	lsr	r8, r10, 5	sub	r9, r11, r10	retle	r11	lsl	r8, 2	add	r12, r8	andl	r10, 31, COH	breq	1f	/* offset is not word-aligned. Handle the first (32 - r10) bits */	ld.w	r8, r12[0]	sub	r12, -4	lsr	r8, r8, r10	brne	.L_found	/* r9 = r9 - (32 - r10) = r9 + r10 - 32 */	add	r9, r10	sub	r9, 32	retle	r11	/* Main loop. offset must be word-aligned */1:	ld.w	r8, r12[0]	cp.w	r8, 0	brne	.L_found	sub	r12, -4	sub	r9, 32	brgt	1b	retal	r11ENTRY(generic_find_next_zero_le_bit)	lsr	r8, r10, 5	sub	r9, r11, r10	retle	r11	lsl	r8, 2	add	r12, r8	andl	r10, 31, COH	breq	1f	/* offset is not word-aligned. Handle the first (32 - r10) bits */	ldswp.w	r8, r12[0]	sub	r12, -4	com	r8	lsr	r8, r8, r10	brne	.L_found	/* r9 = r9 - (32 - r10) = r9 + r10 - 32 */	add	r9, r10	sub	r9, 32	retle	r11	/* Main loop. offset must be word-aligned */1:	ldswp.w	r8, r12[0]	com	r8	brne	.L_found	sub	r12, -4	sub	r9, 32	brgt	1b	retal	r11

⌨️ 快捷键说明

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