diff options
| -rw-r--r-- | lib/libc/arm/string/ffs.S | 4 | ||||
| -rw-r--r-- | lib/libc/arm/string/memcmp.S | 4 | ||||
| -rw-r--r-- | lib/libc/arm/string/memcpy_arm.S | 37 | ||||
| -rw-r--r-- | lib/libc/arm/string/memcpy_xscale.S | 38 | ||||
| -rw-r--r-- | lib/libc/arm/string/memmove.S | 62 | ||||
| -rw-r--r-- | lib/libc/arm/string/memset.S | 102 | ||||
| -rw-r--r-- | lib/libc/arm/string/strlen.S | 14 | ||||
| -rw-r--r-- | sys/arm/arm/bcopyinout_xscale.S | 53 | ||||
| -rw-r--r-- | sys/arm/arm/blockio.S | 38 | ||||
| -rw-r--r-- | sys/arm/arm/cpufunc_asm_arm11x6.S | 2 | ||||
| -rw-r--r-- | sys/arm/arm/cpufunc_asm_armv5.S | 1 | ||||
| -rw-r--r-- | sys/arm/arm/cpufunc_asm_xscale_c3.S | 1 | ||||
| -rw-r--r-- | sys/arm/arm/fusu.S | 10 | ||||
| -rw-r--r-- | sys/arm/arm/in_cksum_arm.S | 13 | ||||
| -rw-r--r-- | sys/arm/arm/locore.S | 4 | ||||
| -rw-r--r-- | sys/arm/arm/support.S | 257 | ||||
| -rw-r--r-- | sys/arm/include/asm.h | 28 | ||||
| -rw-r--r-- | sys/arm/ti/ti_smc.S | 2 | ||||
| -rw-r--r-- | sys/arm/xscale/ixp425/ixp425_a4x_io.S | 10 | ||||
| -rw-r--r-- | sys/arm/xscale/ixp425/ixp425_pci_asm.S | 6 | ||||
| -rw-r--r-- | sys/libkern/arm/ffs.S | 3 | 
21 files changed, 365 insertions, 324 deletions
| diff --git a/lib/libc/arm/string/ffs.S b/lib/libc/arm/string/ffs.S index d3684ed417bcc..4567f6c9ca3dc 100644 --- a/lib/libc/arm/string/ffs.S +++ b/lib/libc/arm/string/ffs.S @@ -32,6 +32,8 @@  __FBSDID("$FreeBSD$"); +.syntax unified +  /*   * ffs - find first set bit, this algorithm isolates the first set   * bit, then multiplies the number by 0x0450fbaf which leaves the top @@ -60,7 +62,7 @@ ENTRY(ffs)  	rsbne   r0, r0, r0, lsl #16 /* r0 = X * 0x0450fbaf */  	/* now lookup in table indexed on top 6 bits of r0 */ -	ldrneb  r0, [ r2, r0, lsr #26 ] +	ldrbne  r0, [ r2, r0, lsr #26 ]          RET  .text; diff --git a/lib/libc/arm/string/memcmp.S b/lib/libc/arm/string/memcmp.S index 63a00ef1bfc47..6fd8130f79b08 100644 --- a/lib/libc/arm/string/memcmp.S +++ b/lib/libc/arm/string/memcmp.S @@ -66,6 +66,8 @@  __FBSDID("$FreeBSD$"); +.syntax	unified +  ENTRY(memcmp)  	mov	ip, r0  #if defined(_KERNEL) && !defined(_STANDALONE) @@ -76,7 +78,7 @@ ENTRY(memcmp)  	/* Are both addresses aligned the same way? */  	cmp	r2, #0x00 -	eornes	r3, ip, r1 +	eorsne	r3, ip, r1  	RETeq			/* len == 0, or same addresses! */  	tst	r3, #0x03  	subne	r2, r2, #0x01 diff --git a/lib/libc/arm/string/memcpy_arm.S b/lib/libc/arm/string/memcpy_arm.S index eff1eb0765491..56fb70314d116 100644 --- a/lib/libc/arm/string/memcpy_arm.S +++ b/lib/libc/arm/string/memcpy_arm.S @@ -31,6 +31,9 @@  #include <machine/asm.h>  __FBSDID("$FreeBSD$"); + +.syntax	unified +  /*   * This is one fun bit of code ...   * Some easy listening music is suggested while trying to understand this @@ -91,8 +94,8 @@ ENTRY(memcpy)  	bge	.Lmemcpy_loop32  	cmn	r2, #0x10 -	ldmgeia	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */ -	stmgeia	r0!, {r3, r4, r12, lr} +	ldmiage	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */ +	stmiage	r0!, {r3, r4, r12, lr}  	subge	r2, r2, #0x10           	ldmia	sp!, {r4}		/* return r4 */ @@ -101,9 +104,9 @@ ENTRY(memcpy)  	/* blat 12 bytes at a time */  .Lmemcpy_loop12: -	ldmgeia	r1!, {r3, r12, lr} -	stmgeia	r0!, {r3, r12, lr} -	subges	r2, r2, #0x0c          +	ldmiage	r1!, {r3, r12, lr} +	stmiage	r0!, {r3, r12, lr} +	subsge	r2, r2, #0x0c           	bge	.Lmemcpy_loop12  .Lmemcpy_l12: @@ -113,26 +116,26 @@ ENTRY(memcpy)  	subs	r2, r2, #4  	ldrlt	r3, [r1], #4  	strlt	r3, [r0], #4 -	ldmgeia	r1!, {r3, r12} -	stmgeia	r0!, {r3, r12} +	ldmiage	r1!, {r3, r12} +	stmiage	r0!, {r3, r12}  	subge	r2, r2, #4  .Lmemcpy_l4:  	/* less than 4 bytes to go */  	adds	r2, r2, #4  #ifdef __APCS_26_ -	ldmeqia sp!, {r0, pc}^		/* done */ +	ldmiaeq sp!, {r0, pc}^		/* done */  #else -	ldmeqia	sp!, {r0, pc}		/* done */ +	ldmiaeq	sp!, {r0, pc}		/* done */  #endif  	/* copy the crud byte at a time */  	cmp	r2, #2  	ldrb	r3, [r1], #1  	strb	r3, [r0], #1 -	ldrgeb	r3, [r1], #1 -	strgeb	r3, [r0], #1 -	ldrgtb	r3, [r1], #1 -	strgtb	r3, [r0], #1 +	ldrbge	r3, [r1], #1 +	strbge	r3, [r0], #1 +	ldrbgt	r3, [r1], #1 +	strbgt	r3, [r0], #1  	ldmia	sp!, {r0, pc}  	/* erg - unaligned destination */ @@ -143,10 +146,10 @@ ENTRY(memcpy)  	/* align destination with byte copies */  	ldrb	r3, [r1], #1  	strb	r3, [r0], #1 -	ldrgeb	r3, [r1], #1 -	strgeb	r3, [r0], #1 -	ldrgtb	r3, [r1], #1 -	strgtb	r3, [r0], #1 +	ldrbge	r3, [r1], #1 +	strbge	r3, [r0], #1 +	ldrbgt	r3, [r1], #1 +	strbgt	r3, [r0], #1  	subs	r2, r2, r12  	blt	.Lmemcpy_l4		/* less the 4 bytes */ diff --git a/lib/libc/arm/string/memcpy_xscale.S b/lib/libc/arm/string/memcpy_xscale.S index 1f48cd962d692..a451de46bc443 100644 --- a/lib/libc/arm/string/memcpy_xscale.S +++ b/lib/libc/arm/string/memcpy_xscale.S @@ -38,6 +38,8 @@  #include <machine/asm.h>  __FBSDID("$FreeBSD$"); +.syntax	unified +  /* LINTSTUB: Func: void *memcpy(void *dst, const void *src, size_t len) */  ENTRY(memcpy)  	pld	[r1] @@ -52,12 +54,12 @@ ENTRY(memcpy)  	ldrb	ip, [r1], #0x01  	sub	r2, r2, #0x01  	strb	ip, [r3], #0x01 -	ldrleb	ip, [r1], #0x01 +	ldrble	ip, [r1], #0x01  	suble	r2, r2, #0x01 -	strleb	ip, [r3], #0x01 -	ldrltb	ip, [r1], #0x01 +	strble	ip, [r3], #0x01 +	ldrblt	ip, [r1], #0x01  	sublt	r2, r2, #0x01 -	strltb	ip, [r3], #0x01 +	strblt	ip, [r3], #0x01  	/* Destination buffer is now word aligned */  .Lmemcpy_wordaligned: @@ -134,7 +136,7 @@ ENTRY(memcpy)  .Lmemcpy_w_lessthan128:  	adds	r2, r2, #0x80		/* Adjust for extra sub */ -	ldmeqfd	sp!, {r4-r9} +	ldmfdeq	sp!, {r4-r9}  	bxeq	lr			/* Return now if done */  	subs	r2, r2, #0x20  	blt	.Lmemcpy_w_lessthan32 @@ -159,7 +161,7 @@ ENTRY(memcpy)  .Lmemcpy_w_lessthan32:  	adds	r2, r2, #0x20		/* Adjust for extra sub */ -	ldmeqfd	sp!, {r4-r9} +	ldmfdeq	sp!, {r4-r9}  	bxeq	lr			/* Return now if done */  	and	r4, r2, #0x18 @@ -195,11 +197,11 @@ ENTRY(memcpy)  	addlt	r2, r2, #0x04  	ldrb	ip, [r1], #0x01  	cmp	r2, #0x02 -	ldrgeb	r2, [r1], #0x01 +	ldrbge	r2, [r1], #0x01  	strb	ip, [r3], #0x01 -	ldrgtb	ip, [r1] -	strgeb	r2, [r3], #0x01 -	strgtb	ip, [r3] +	ldrbgt	ip, [r1] +	strbge	r2, [r3], #0x01 +	strbgt	ip, [r3]  	bx	lr @@ -253,7 +255,7 @@ ENTRY(memcpy)  	bge	.Lmemcpy_bad1_loop16  	adds	r2, r2, #0x10          -	ldmeqfd	sp!, {r4-r7} +	ldmfdeq	sp!, {r4-r7}  	bxeq	lr			/* Return now if done */  	subs	r2, r2, #0x04  	sublt	r1, r1, #0x03 @@ -314,7 +316,7 @@ ENTRY(memcpy)  	bge	.Lmemcpy_bad2_loop16  	adds	r2, r2, #0x10          -	ldmeqfd	sp!, {r4-r7} +	ldmfdeq	sp!, {r4-r7}  	bxeq	lr			/* Return now if done */  	subs	r2, r2, #0x04  	sublt	r1, r1, #0x02 @@ -375,7 +377,7 @@ ENTRY(memcpy)  	bge	.Lmemcpy_bad3_loop16  	adds	r2, r2, #0x10          -	ldmeqfd	sp!, {r4-r7} +	ldmfdeq	sp!, {r4-r7}  	bxeq	lr			/* Return now if done */  	subs	r2, r2, #0x04  	sublt	r1, r1, #0x01 @@ -404,11 +406,11 @@ ENTRY(memcpy)  	bxeq	lr  	ldrb	ip, [r1], #0x01  	cmp	r2, #0x02 -	ldrgeb	r2, [r1], #0x01 +	ldrbge	r2, [r1], #0x01  	strb	ip, [r3], #0x01 -	ldrgtb	ip, [r1] -	strgeb	r2, [r3], #0x01 -	strgtb	ip, [r3] +	ldrbgt	ip, [r1] +	strbge	r2, [r3], #0x01 +	strbgt	ip, [r3]  	bx	lr @@ -440,7 +442,7 @@ ENTRY(memcpy)  	ldrb	ip, [r1], #0x01  1:	subs	r2, r2, #0x01  	strb	ip, [r3], #0x01 -	ldrneb	ip, [r1], #0x01 +	ldrbne	ip, [r1], #0x01  	bne	1b  	bx	lr diff --git a/lib/libc/arm/string/memmove.S b/lib/libc/arm/string/memmove.S index 75a2744924370..94e5474000b0b 100644 --- a/lib/libc/arm/string/memmove.S +++ b/lib/libc/arm/string/memmove.S @@ -32,6 +32,8 @@  #include <machine/asm.h>  __FBSDID("$FreeBSD$"); +.syntax	unified +  #ifndef _BCOPY  /* LINTSTUB: Func: void *memmove(void *, const void *, size_t) */  ENTRY(memmove) @@ -86,8 +88,8 @@ ENTRY(bcopy)  	bge	.Lmemmove_floop32  	cmn	r2, #0x10 -	ldmgeia	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */ -	stmgeia	r0!, {r3, r4, r12, lr} +	ldmiage	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */ +	stmiage	r0!, {r3, r4, r12, lr}  	subge	r2, r2, #0x10           	ldmia	sp!, {r4}		/* return r4 */ @@ -96,9 +98,9 @@ ENTRY(bcopy)  	/* blat 12 bytes at a time */  .Lmemmove_floop12: -	ldmgeia	r1!, {r3, r12, lr} -	stmgeia	r0!, {r3, r12, lr} -	subges	r2, r2, #0x0c          +	ldmiage	r1!, {r3, r12, lr} +	stmiage	r0!, {r3, r12, lr} +	subsge	r2, r2, #0x0c           	bge	.Lmemmove_floop12  .Lmemmove_fl12: @@ -108,23 +110,23 @@ ENTRY(bcopy)  	subs	r2, r2, #4  	ldrlt	r3, [r1], #4  	strlt	r3, [r0], #4 -	ldmgeia	r1!, {r3, r12} -	stmgeia	r0!, {r3, r12} +	ldmiage	r1!, {r3, r12} +	stmiage	r0!, {r3, r12}  	subge	r2, r2, #4  .Lmemmove_fl4:  	/* less than 4 bytes to go */  	adds	r2, r2, #4 -	ldmeqia	sp!, {r0, pc}		/* done */ +	ldmiaeq	sp!, {r0, pc}		/* done */  	/* copy the crud byte at a time */  	cmp	r2, #2  	ldrb	r3, [r1], #1  	strb	r3, [r0], #1 -	ldrgeb	r3, [r1], #1 -	strgeb	r3, [r0], #1 -	ldrgtb	r3, [r1], #1 -	strgtb	r3, [r0], #1 +	ldrbge	r3, [r1], #1 +	strbge	r3, [r0], #1 +	ldrbgt	r3, [r1], #1 +	strbgt	r3, [r0], #1  	ldmia	sp!, {r0, pc}  	/* erg - unaligned destination */ @@ -135,10 +137,10 @@ ENTRY(bcopy)  	/* align destination with byte copies */  	ldrb	r3, [r1], #1  	strb	r3, [r0], #1 -	ldrgeb	r3, [r1], #1 -	strgeb	r3, [r0], #1 -	ldrgtb	r3, [r1], #1 -	strgtb	r3, [r0], #1 +	ldrbge	r3, [r1], #1 +	strbge	r3, [r0], #1 +	ldrbgt	r3, [r1], #1 +	strbgt	r3, [r0], #1  	subs	r2, r2, r12  	blt	.Lmemmove_fl4		/* less the 4 bytes */ @@ -353,12 +355,12 @@ ENTRY(bcopy)  .Lmemmove_bl32:  	cmn	r2, #0x10             -	ldmgedb	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */ -	stmgedb	r0!, {r3, r4, r12, lr} +	ldmdbge	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */ +	stmdbge	r0!, {r3, r4, r12, lr}  	subge	r2, r2, #0x10           	adds	r2, r2, #0x14          -	ldmgedb	r1!, {r3, r12, lr}	/* blat a remaining 12 bytes */ -	stmgedb	r0!, {r3, r12, lr} +	ldmdbge	r1!, {r3, r12, lr}	/* blat a remaining 12 bytes */ +	stmdbge	r0!, {r3, r12, lr}  	subge	r2, r2, #0x0c           	ldmia	sp!, {r4, lr} @@ -368,8 +370,8 @@ ENTRY(bcopy)  	subs	r2, r2, #4  	ldrlt	r3, [r1, #-4]!  	strlt	r3, [r0, #-4]! -	ldmgedb	r1!, {r3, r12} -	stmgedb	r0!, {r3, r12} +	ldmdbge	r1!, {r3, r12} +	stmdbge	r0!, {r3, r12}  	subge	r2, r2, #4  .Lmemmove_bl4: @@ -381,10 +383,10 @@ ENTRY(bcopy)  	cmp	r2, #2  	ldrb	r3, [r1, #-1]!  	strb	r3, [r0, #-1]! -	ldrgeb	r3, [r1, #-1]! -	strgeb	r3, [r0, #-1]! -	ldrgtb	r3, [r1, #-1]! -	strgtb	r3, [r0, #-1]! +	ldrbge	r3, [r1, #-1]! +	strbge	r3, [r0, #-1]! +	ldrbgt	r3, [r1, #-1]! +	strbgt	r3, [r0, #-1]!  	RET  	/* erg - unaligned destination */ @@ -394,10 +396,10 @@ ENTRY(bcopy)  	/* align destination with byte copies */  	ldrb	r3, [r1, #-1]!  	strb	r3, [r0, #-1]! -	ldrgeb	r3, [r1, #-1]! -	strgeb	r3, [r0, #-1]! -	ldrgtb	r3, [r1, #-1]! -	strgtb	r3, [r0, #-1]! +	ldrbge	r3, [r1, #-1]! +	strbge	r3, [r0, #-1]! +	ldrbgt	r3, [r1, #-1]! +	strbgt	r3, [r0, #-1]!  	subs	r2, r2, r12  	blt	.Lmemmove_bl4		/* less than 4 bytes to go */  	ands	r12, r1, #3 diff --git a/lib/libc/arm/string/memset.S b/lib/libc/arm/string/memset.S index 458f8f7d73ffd..66af33ec07dde 100644 --- a/lib/libc/arm/string/memset.S +++ b/lib/libc/arm/string/memset.S @@ -69,6 +69,8 @@  #include <machine/asm.h>  __FBSDID("$FreeBSD$"); +.syntax	unified +  /*   * memset: Sets a block of memory to the specified value   * @@ -125,39 +127,39 @@ ENTRY(memset)  .Lmemset_loop128:  	subs	r1, r1, #0x80  #ifdef _ARM_ARCH_5E -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08  #else -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3}  #endif  	bgt	.Lmemset_loop128  	RETeq			/* Zero length so just exit */ @@ -168,15 +170,15 @@ ENTRY(memset)  .Lmemset_loop32:  	subs	r1, r1, #0x20  #ifdef _ARM_ARCH_5E -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08  #else -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3}  #endif  	bgt	.Lmemset_loop32  	RETeq			/* Zero length so just exit */ @@ -185,11 +187,11 @@ ENTRY(memset)  	/* Deal with 16 bytes or more */  #ifdef _ARM_ARCH_5E -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08  #else -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3}  #endif  	RETeq			/* Zero length so just exit */ @@ -212,17 +214,17 @@ ENTRY(memset)  #endif  	strb	r3, [ip], #0x01		/* Set 1 byte */ -	strgeb	r3, [ip], #0x01		/* Set another byte */ -	strgtb	r3, [ip]		/* and a third */ +	strbge	r3, [ip], #0x01		/* Set another byte */ +	strbgt	r3, [ip]		/* and a third */  	RET			/* Exit */  .Lmemset_wordunaligned:  	rsb	r2, r2, #0x004  	strb	r3, [ip], #0x01		/* Set 1 byte */  	cmp	r2, #0x02 -	strgeb	r3, [ip], #0x01		/* Set another byte */ +	strbge	r3, [ip], #0x01		/* Set another byte */  	sub	r1, r1, r2 -	strgtb	r3, [ip], #0x01		/* and a third */ +	strbgt	r3, [ip], #0x01		/* and a third */  	cmp	r1, #0x04		/* More than 4 bytes left? */  	bge	.Lmemset_wordaligned	/* Yup */ @@ -231,8 +233,8 @@ ENTRY(memset)  	RETeq			/* Zero length so exit */  	strb	r3, [ip], #0x01		/* Set 1 byte */  	cmp	r1, #0x02 -	strgeb	r3, [ip], #0x01		/* Set another byte */ -	strgtb	r3, [ip]		/* and a third */ +	strbge	r3, [ip], #0x01		/* Set another byte */ +	strbgt	r3, [ip]		/* and a third */  	RET			/* Exit */  #ifdef _BZERO  END(bzero) diff --git a/lib/libc/arm/string/strlen.S b/lib/libc/arm/string/strlen.S index 3d7726fb52ef6..7447710d16b1d 100644 --- a/lib/libc/arm/string/strlen.S +++ b/lib/libc/arm/string/strlen.S @@ -27,6 +27,8 @@  #include <machine/asm.h>  __FBSDID("$FreeBSD$"); +.syntax	unified +  ENTRY(strlen)  	mov	r1, #0  	/* Check that the pointer is aligned on 32 bits. */ @@ -53,23 +55,23 @@ ENTRY(strlen)  	addne	r1, r1, #1  .Ldo_3:  #ifndef __ARMEB__ -	andnes    r3, r2, #0x0000ff00 +	andsne    r3, r2, #0x0000ff00  #else -  	andnes    r3, r2, #0x00ff0000 +  	andsne    r3, r2, #0x00ff0000  #endif    	addne     r1, r1, #1  .Ldo_2:  #ifndef __ARMEB__ -	andnes    r3, r2, #0x00ff0000 +	andsne    r3, r2, #0x00ff0000  #else -	andnes    r3, r2, #0x0000ff00 +	andsne    r3, r2, #0x0000ff00  #endif    	addne	r1, r1, #1  .Ldo_1:  #ifndef __ARMEB__ -	andnes	r3, r2, #0xff000000 +	andsne	r3, r2, #0xff000000  #else -	andnes	r3, r2, #0x000000ff +	andsne	r3, r2, #0x000000ff  #endif    	addne	r1, r1, #1  	bne	.Loop				 diff --git a/sys/arm/arm/bcopyinout_xscale.S b/sys/arm/arm/bcopyinout_xscale.S index 45cfe70295c18..5c1026f6afccb 100644 --- a/sys/arm/arm/bcopyinout_xscale.S +++ b/sys/arm/arm/bcopyinout_xscale.S @@ -38,6 +38,7 @@  #include <machine/asm.h>  __FBSDID("$FreeBSD$"); +	.syntax	unified  	.text  	.align	0 @@ -104,8 +105,8 @@ ENTRY(copyin)  	ldr	r0, =EFAULT  	str	r11, [r10, #PCB_ONFAULT]  	cmp	r3, #0x00 -	ldmgtfd	sp!, {r4-r7}		/* r3 > 0 Restore r4-r7 */ -	ldmltfd	sp!, {r4-r9}		/* r3 < 0 Restore r4-r9 */ +	ldmfdgt	sp!, {r4-r7}		/* r3 > 0 Restore r4-r7 */ +	ldmfdlt	sp!, {r4-r9}		/* r3 < 0 Restore r4-r9 */  	ldmfd	sp!, {r10-r11, pc}  .Lcopyin_guts: @@ -138,7 +139,7 @@ ENTRY(copyin)  	/* Quad-align the destination buffer */  	tst	r1, #0x07		/* Already quad aligned? */ -	ldrnet	ip, [r0], #0x04 +	ldrtne	ip, [r0], #0x04  	strne	ip, [r1], #0x04  	subne	r2, r2, #0x04  	stmfd	sp!, {r4-r9}		/* Free up some registers */ @@ -207,7 +208,7 @@ ENTRY(copyin)  .Lcopyin_w_lessthan128:  	adds	r2, r2, #0x80		/* Adjust for extra sub */ -	ldmeqfd	sp!, {r4-r9} +	ldmfdeq	sp!, {r4-r9}  	RETeq  	subs	r2, r2, #0x20  	blt	.Lcopyin_w_lessthan32 @@ -232,7 +233,7 @@ ENTRY(copyin)  .Lcopyin_w_lessthan32:  	adds	r2, r2, #0x20		/* Adjust for extra sub */ -	ldmeqfd	sp!, {r4-r9} +	ldmfdeq	sp!, {r4-r9}  	RETeq				/* Return now if done */  	and	r4, r2, #0x18 @@ -266,17 +267,17 @@ ENTRY(copyin)  .Lcopyin_w_less_than8:  	subs	r2, r2, #0x04 -	ldrget	ip, [r0], #0x04 +	ldrtge	ip, [r0], #0x04  	strge	ip, [r1], #0x04  	RETeq				/* Return now if done */  	addlt	r2, r2, #0x04  	ldrbt	ip, [r0], #0x01  	cmp	r2, #0x02 -	ldrgebt	r2, [r0], #0x01 +	ldrbtge	r2, [r0], #0x01  	strb	ip, [r1], #0x01 -	ldrgtbt	ip, [r0] -	strgeb	r2, [r1], #0x01 -	strgtb	ip, [r1] +	ldrbtgt	ip, [r0] +	strbge	r2, [r1], #0x01 +	strbgt	ip, [r1]  	RET  /* @@ -331,7 +332,7 @@ ENTRY(copyin)  	bge	.Lcopyin_bad1_loop16  	adds	r2, r2, #0x10 -	ldmeqfd	sp!, {r4-r7} +	ldmfdeq	sp!, {r4-r7}  	RETeq				/* Return now if done */  	subs	r2, r2, #0x04  	sublt	r0, r0, #0x03 @@ -392,7 +393,7 @@ ENTRY(copyin)  	bge	.Lcopyin_bad2_loop16  	adds	r2, r2, #0x10 -	ldmeqfd	sp!, {r4-r7} +	ldmfdeq	sp!, {r4-r7}  	RETeq				/* Return now if done */  	subs	r2, r2, #0x04  	sublt	r0, r0, #0x02 @@ -453,7 +454,7 @@ ENTRY(copyin)  	bge	.Lcopyin_bad3_loop16  	adds	r2, r2, #0x10 -	ldmeqfd	sp!, {r4-r7} +	ldmfdeq	sp!, {r4-r7}  	RETeq				/* Return now if done */  	subs	r2, r2, #0x04  	sublt	r0, r0, #0x01 @@ -546,8 +547,8 @@ ENTRY(copyout)  	ldr	r0, =EFAULT  	str	r11, [r10, #PCB_ONFAULT]  	cmp	r3, #0x00 -	ldmgtfd	sp!, {r4-r7}		/* r3 > 0 Restore r4-r7 */ -	ldmltfd	sp!, {r4-r9}		/* r3 < 0 Restore r4-r9 */ +	ldmfdgt	sp!, {r4-r7}		/* r3 > 0 Restore r4-r7 */ +	ldmfdlt	sp!, {r4-r9}		/* r3 < 0 Restore r4-r9 */  	ldmfd	sp!, {r10-r11, pc}  .Lcopyout_guts: @@ -582,7 +583,7 @@ ENTRY(copyout)  	tst	r0, #0x07		/* Already quad aligned? */  	ldrne	ip, [r0], #0x04  	subne	r2, r2, #0x04 -	strnet	ip, [r1], #0x04 +	strtne	ip, [r1], #0x04  	stmfd	sp!, {r4-r9}		/* Free up some registers */  	mov	r3, #-1			/* Signal restore r4-r9 */ @@ -650,7 +651,7 @@ ENTRY(copyout)  .Lcopyout_w_lessthan128:  	adds	r2, r2, #0x80		/* Adjust for extra sub */ -	ldmeqfd	sp!, {r4-r9} +	ldmfdeq	sp!, {r4-r9}  	RETeq				/* Return now if done */  	subs	r2, r2, #0x20  	blt	.Lcopyout_w_lessthan32 @@ -675,7 +676,7 @@ ENTRY(copyout)  .Lcopyout_w_lessthan32:  	adds	r2, r2, #0x20		/* Adjust for extra sub */ -	ldmeqfd	sp!, {r4-r9} +	ldmfdeq	sp!, {r4-r9}  	RETeq				/* Return now if done */  	and	r4, r2, #0x18 @@ -710,16 +711,16 @@ ENTRY(copyout)  .Lcopyout_w_less_than8:  	subs	r2, r2, #0x04  	ldrge	ip, [r0], #0x04 -	strget	ip, [r1], #0x04 +	strtge	ip, [r1], #0x04  	RETeq				/* Return now if done */  	addlt	r2, r2, #0x04  	ldrb	ip, [r0], #0x01  	cmp	r2, #0x02 -	ldrgeb	r2, [r0], #0x01 +	ldrbge	r2, [r0], #0x01  	strbt	ip, [r1], #0x01 -	ldrgtb	ip, [r0] -	strgebt	r2, [r1], #0x01 -	strgtbt	ip, [r1] +	ldrbgt	ip, [r0] +	strbtge	r2, [r1], #0x01 +	strbtgt	ip, [r1]  	RET  /* @@ -774,7 +775,7 @@ ENTRY(copyout)  	bge	.Lcopyout_bad1_loop16  	adds	r2, r2, #0x10 -	ldmeqfd	sp!, {r4-r7} +	ldmfdeq	sp!, {r4-r7}  	RETeq				/* Return now if done */  	subs	r2, r2, #0x04  	sublt	r0, r0, #0x03 @@ -835,7 +836,7 @@ ENTRY(copyout)  	bge	.Lcopyout_bad2_loop16  	adds	r2, r2, #0x10 -	ldmeqfd	sp!, {r4-r7} +	ldmfdeq	sp!, {r4-r7}  	RETeq				/* Return now if done */  	subs	r2, r2, #0x04  	sublt	r0, r0, #0x02 @@ -896,7 +897,7 @@ ENTRY(copyout)  	bge	.Lcopyout_bad3_loop16  	adds	r2, r2, #0x10 -	ldmeqfd	sp!, {r4-r7} +	ldmfdeq	sp!, {r4-r7}  	RETeq				/* Return now if done */  	subs	r2, r2, #0x04  	sublt	r0, r0, #0x01 diff --git a/sys/arm/arm/blockio.S b/sys/arm/arm/blockio.S index d121f2c02c4ed..28f502b6d6784 100644 --- a/sys/arm/arm/blockio.S +++ b/sys/arm/arm/blockio.S @@ -50,6 +50,8 @@  __FBSDID("$FreeBSD$"); +	.syntax	unified +  /*   * Read bytes from an I/O address into a block of memory   * @@ -71,10 +73,10 @@ ENTRY(read_multi_1)  	cmp	r12, #2  	ldrb	r3, [r0]  	strb	r3, [r1], #1 -	ldrgeb	r3, [r0] -	strgeb	r3, [r1], #1 -	ldrgtb	r3, [r0] -	strgtb	r3, [r1], #1 +	ldrbge	r3, [r0] +	strbge	r3, [r1], #1 +	ldrbgt	r3, [r0] +	strbgt	r3, [r1], #1  	subs	r2, r2, r12  	blt	.Lrm1_l4  .Lrm1_main: @@ -91,15 +93,15 @@ ENTRY(read_multi_1)  	bge	.Lrm1loop  .Lrm1_l4:  	adds	r2, r2, #4			/* r2 = length again */ -	ldmeqdb	fp, {fp, sp, pc} +	ldmdbeq	fp, {fp, sp, pc}  	RETeq  	cmp	r2, #2  	ldrb	r3, [r0]  	strb	r3, [r1], #1 -	ldrgeb	r3, [r0] -	strgeb	r3, [r1], #1 -	ldrgtb	r3, [r0] -	strgtb	r3, [r1], #1 +	ldrbge	r3, [r0] +	strbge	r3, [r1], #1 +	ldrbgt	r3, [r0] +	strbgt	r3, [r1], #1  	ldmdb	fp, {fp, sp, pc}  END(read_multi_1) @@ -124,10 +126,10 @@ ENTRY(write_multi_1)  	cmp	r12, #2  	ldrb	r3, [r1], #1  	strb	r3, [r0] -	ldrgeb	r3, [r1], #1 -	strgeb	r3, [r0] -	ldrgtb	r3, [r1], #1 -	strgtb	r3, [r0] +	ldrbge	r3, [r1], #1 +	strbge	r3, [r0] +	ldrbgt	r3, [r1], #1 +	strbgt	r3, [r0]  	subs	r2, r2, r12  	blt	.Lwm1_l4  .Lwm1_main: @@ -144,14 +146,14 @@ ENTRY(write_multi_1)  	bge	.Lwm1loop  .Lwm1_l4:  	adds	r2, r2, #4			/* r2 = length again */ -	ldmeqdb	fp, {fp, sp, pc} +	ldmdbeq	fp, {fp, sp, pc}  	cmp	r2, #2  	ldrb	r3, [r1], #1  	strb	r3, [r0] -	ldrgeb	r3, [r1], #1 -	strgeb	r3, [r0] -	ldrgtb	r3, [r1], #1 -	strgtb	r3, [r0] +	ldrbge	r3, [r1], #1 +	strbge	r3, [r0] +	ldrbgt	r3, [r1], #1 +	strbgt	r3, [r0]  	ldmdb	fp, {fp, sp, pc}  END(write_multi_1) diff --git a/sys/arm/arm/cpufunc_asm_arm11x6.S b/sys/arm/arm/cpufunc_asm_arm11x6.S index 63fda9ec156b9..4d2697a687e57 100644 --- a/sys/arm/arm/cpufunc_asm_arm11x6.S +++ b/sys/arm/arm/cpufunc_asm_arm11x6.S @@ -62,7 +62,7 @@  #include <machine/asm.h>  __FBSDID("$FreeBSD$"); -	.cpu arm1136js +	.cpu arm1176jz-s  #if 0  #define Invalidate_I_cache(Rtmp1, Rtmp2) \ diff --git a/sys/arm/arm/cpufunc_asm_armv5.S b/sys/arm/arm/cpufunc_asm_armv5.S index 7435b462e51bd..582ea504c14f5 100644 --- a/sys/arm/arm/cpufunc_asm_armv5.S +++ b/sys/arm/arm/cpufunc_asm_armv5.S @@ -194,7 +194,6 @@ ENTRY(armv5_idcache_wbinv_range)  END(armv5_idcache_wbinv_range)  ENTRY_NP(armv5_idcache_wbinv_all) -armv5_idcache_wbinv_all:  .Larmv5_idcache_wbinv_all:  	/*  	 * We assume that the code here can never be out of sync with the diff --git a/sys/arm/arm/cpufunc_asm_xscale_c3.S b/sys/arm/arm/cpufunc_asm_xscale_c3.S index 0fdb39c2cd64c..bc4a8d5c12be7 100644 --- a/sys/arm/arm/cpufunc_asm_xscale_c3.S +++ b/sys/arm/arm/cpufunc_asm_xscale_c3.S @@ -143,7 +143,6 @@ __FBSDID("$FreeBSD$");  ENTRY_NP(xscalec3_cache_syncI) -xscalec3_cache_purgeID:  EENTRY_NP(xscalec3_cache_purgeID)  	mcr	p15, 0, r0, c7, c5, 0	/* flush I cache (D cleaned below) */  EENTRY_NP(xscalec3_cache_cleanID) diff --git a/sys/arm/arm/fusu.S b/sys/arm/arm/fusu.S index c70215c297dbe..3d2716a0056c7 100644 --- a/sys/arm/arm/fusu.S +++ b/sys/arm/arm/fusu.S @@ -38,6 +38,8 @@  #include "assym.s"  __FBSDID("$FreeBSD$"); +	.syntax	unified +  #ifdef _ARM_ARCH_6  #define GET_PCB(tmp) \  	mrc p15, 0, tmp, c13, c0, 4; \ @@ -83,7 +85,7 @@ EENTRY_NP(casuword32)  	ldrt	r5, [r0]  	cmp	r5, r1  	movne	r0, r5 -	streqt	r2, [r0] +	strteq	r2, [r0]  #endif  	moveq	r0, r1  2: @@ -129,7 +131,7 @@ EENTRY_NP(fuword32)  	str	r1, [r2, #PCB_ONFAULT]  	mov	r0, r3  	RET -END(fuword32) +EEND(fuword32)  END(fuword)  /* @@ -269,7 +271,7 @@ _C_LABEL(fusubailout):  fusupcbfaulttext:  	.asciz	"Yikes - no valid PCB during fusuxxx() addr=%08x\n" -	.align	0 +	.align	2  #endif  /* @@ -295,7 +297,7 @@ EENTRY_NP(suword32)  	mov	r0, #0x00000000  	str	r0, [r2, #PCB_ONFAULT]  	RET -END(suword32) +EEND(suword32)  END(suword)  /* diff --git a/sys/arm/arm/in_cksum_arm.S b/sys/arm/arm/in_cksum_arm.S index 6305caf4f9156..5f121d5614b91 100644 --- a/sys/arm/arm/in_cksum_arm.S +++ b/sys/arm/arm/in_cksum_arm.S @@ -46,6 +46,7 @@  #include "assym.s"  __FBSDID("$FreeBSD$"); +	.syntax	unified  /*   * int in_cksum(struct mbuf *m, int len)   * @@ -128,9 +129,9 @@ ASENTRY_NP(L_cksumdata)  	blt	.Lcksumdata_endgame  	cmp	r7, #0x02  	ldrb	r4, [r0], #0x01		/* Fetch 1st byte */ -	ldrgeb	r5, [r0], #0x01		/* Fetch 2nd byte */ +	ldrbge	r5, [r0], #0x01		/* Fetch 2nd byte */  	movlt	r5, #0x00 -	ldrgtb	r6, [r0], #0x01		/* Fetch 3rd byte */ +	ldrbgt	r6, [r0], #0x01		/* Fetch 3rd byte */  	movle	r6, #0x00  	/* Combine the three bytes depending on endianness and alignment */  #ifdef __ARMEB__ @@ -196,7 +197,7 @@ ASENTRY_NP(L_cksumdata)  	adcs	r2, r2, r5  	adc	r2, r2, #0x00  	subs	r1, r1, #0x40 -	ldrged	r4, [r0], #0x08 +	ldrdge	r4, [r0], #0x08  	bge	.Lcksumdata_bigloop  	adds	r2, r2, r6		/* r6/r7 still need summing */ @@ -241,7 +242,7 @@ ASENTRY_NP(L_cksumdata)  	cmp	r1, #0x20  #ifdef _ARM_ARCH_5E -	ldrged	r4, [r0], #0x08		/* Avoid stalling pld and result */ +	ldrdge	r4, [r0], #0x08		/* Avoid stalling pld and result */  	blt	.Lcksumdata_less_than_32  	pld	[r0, #0x18]  	ldrd	r6, [r0], #0x08 @@ -319,9 +320,9 @@ ASENTRY_NP(L_cksumdata)  .Lcksumdata_endgame:  	ldrb	r3, [r0]		/* Fetch first byte */  	cmp	r1, #0x02 -	ldrgeb	r4, [r0, #0x01]		/* Fetch 2nd and 3rd as necessary */ +	ldrbge	r4, [r0, #0x01]		/* Fetch 2nd and 3rd as necessary */  	movlt	r4, #0x00 -	ldrgtb	r5, [r0, #0x02] +	ldrbgt	r5, [r0, #0x02]  	movle	r5, #0x00  	/* Combine the three bytes depending on endianness and alignment */  	tst	r0, #0x01 diff --git a/sys/arm/arm/locore.S b/sys/arm/arm/locore.S index ce56efd949d7d..2835e172ef2e2 100644 --- a/sys/arm/arm/locore.S +++ b/sys/arm/arm/locore.S @@ -474,8 +474,8 @@ ENTRY_NP(cpu_halt)  	 * Hurl ourselves into the ROM  	 */  	mov	r0, #(CPU_CONTROL_32BP_ENABLE | CPU_CONTROL_32BD_ENABLE) -	mcr     15, 0, r0, c1, c0, 0 -	mcrne   15, 0, r2, c8, c7, 0 	/* nail I+D TLB on ARMv4 and greater */ +	mcr     p15, 0, r0, c1, c0, 0 +	mcrne   p15, 0, r2, c8, c7, 0 	/* nail I+D TLB on ARMv4 and greater */  	mov     pc, r4  	/* diff --git a/sys/arm/arm/support.S b/sys/arm/arm/support.S index 2a6eec9828e07..b095aed33a4f0 100644 --- a/sys/arm/arm/support.S +++ b/sys/arm/arm/support.S @@ -91,6 +91,8 @@ __FBSDID("$FreeBSD$");  #include "assym.s" +	.syntax	unified +  .L_arm_memcpy:  	.word	_C_LABEL(_arm_memcpy)  .L_arm_bzero: @@ -130,7 +132,7 @@ ENTRY(bzero)  .Lnormal0:  	mov	r3, #0x00  	b	do_memset -EEND(bzero) +END(bzero)  /* LINTSTUB: Func: void *memset(void *, int, size_t) */  ENTRY(memset)  	and	r3, r1, #0xff		/* We deal with bytes */ @@ -167,39 +169,39 @@ do_memset:  .Lmemset_loop128:  	subs	r1, r1, #0x80  #ifdef _ARM_ARCH_5E -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -#else -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +#else +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3}  #endif  	bgt	.Lmemset_loop128  	RETeq			/* Zero length so just exit */ @@ -210,15 +212,15 @@ do_memset:  .Lmemset_loop32:  	subs	r1, r1, #0x20  #ifdef _ARM_ARCH_5E -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08  #else -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3}  #endif  	bgt	.Lmemset_loop32  	RETeq			/* Zero length so just exit */ @@ -227,11 +229,11 @@ do_memset:  	/* Deal with 16 bytes or more */  #ifdef _ARM_ARCH_5E -	strged	r2, [ip], #0x08 -	strged	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08 +	strdge	r2, [ip], #0x08  #else -	stmgeia	ip!, {r2-r3} -	stmgeia	ip!, {r2-r3} +	stmiage	ip!, {r2-r3} +	stmiage	ip!, {r2-r3}  #endif  	RETeq			/* Zero length so just exit */ @@ -254,17 +256,17 @@ do_memset:  #endif  	strb	r3, [ip], #0x01		/* Set 1 byte */ -	strgeb	r3, [ip], #0x01		/* Set another byte */ -	strgtb	r3, [ip]		/* and a third */ +	strbge	r3, [ip], #0x01		/* Set another byte */ +	strbgt	r3, [ip]		/* and a third */  	RET			/* Exit */  .Lmemset_wordunaligned:  	rsb	r2, r2, #0x004  	strb	r3, [ip], #0x01		/* Set 1 byte */  	cmp	r2, #0x02 -	strgeb	r3, [ip], #0x01		/* Set another byte */ +	strbge	r3, [ip], #0x01		/* Set another byte */  	sub	r1, r1, r2 -	strgtb	r3, [ip], #0x01		/* and a third */ +	strbgt	r3, [ip], #0x01		/* and a third */  	cmp	r1, #0x04		/* More than 4 bytes left? */  	bge	.Lmemset_wordaligned	/* Yup */ @@ -273,10 +275,11 @@ do_memset:  	RETeq			/* Zero length so exit */  	strb	r3, [ip], #0x01		/* Set 1 byte */  	cmp	r1, #0x02 -	strgeb	r3, [ip], #0x01		/* Set another byte */ -	strgtb	r3, [ip]		/* and a third */ +	strbge	r3, [ip], #0x01		/* Set another byte */ +	strbgt	r3, [ip]		/* and a third */  	RET			/* Exit */ -END(memset) +EEND(memset) +END(bzero)  ENTRY(bcmp)  	mov	ip, r0 @@ -286,7 +289,7 @@ ENTRY(bcmp)  	/* Are both addresses aligned the same way? */  	cmp	r2, #0x00 -	eornes	r3, ip, r1 +	eorsne	r3, ip, r1  	RETeq			/* len == 0, or same addresses! */  	tst	r3, #0x03  	subne	r2, r2, #0x01 @@ -366,23 +369,23 @@ ENTRY(bcmp)  	ldrb	r0, [ip, #0x00]		/* r0 = b1#0 */  	ldrb	r2, [r1, #0x01]		/* r2 = b2#1 */  	subs	r0, r0, r3		/* r0 = b1#0 - b2#0 */ -	ldreqb	r3, [ip, #0x01]		/* r3 = b1#1 */ +	ldrbeq	r3, [ip, #0x01]		/* r3 = b1#1 */  	RETne			/* Return if mismatch on #0 */  	subs	r0, r3, r2		/* r0 = b1#1 - b2#1 */ -	ldreqb	r3, [r1, #0x02]		/* r3 = b2#2 */ -	ldreqb	r0, [ip, #0x02]		/* r0 = b1#2 */ +	ldrbeq	r3, [r1, #0x02]		/* r3 = b2#2 */ +	ldrbeq	r0, [ip, #0x02]		/* r0 = b1#2 */  	RETne			/* Return if mismatch on #1 */  	ldrb	r2, [r1, #0x03]		/* r2 = b2#3 */  	subs	r0, r0, r3		/* r0 = b1#2 - b2#2 */ -	ldreqb	r3, [ip, #0x03]		/* r3 = b1#3 */ +	ldrbeq	r3, [ip, #0x03]		/* r3 = b1#3 */  	RETne			/* Return if mismatch on #2 */  	subs	r0, r3, r2		/* r0 = b1#3 - b2#3 */ -	ldreqb	r3, [r1, #0x04]		/* r3 = b2#4 */ -	ldreqb	r0, [ip, #0x04]		/* r0 = b1#4 */ +	ldrbeq	r3, [r1, #0x04]		/* r3 = b2#4 */ +	ldrbeq	r0, [ip, #0x04]		/* r0 = b1#4 */  	RETne			/* Return if mismatch on #3 */  	ldrb	r2, [r1, #0x05]		/* r2 = b2#5 */  	subs	r0, r0, r3		/* r0 = b1#4 - b2#4 */ -	ldreqb	r3, [ip, #0x05]		/* r3 = b1#5 */ +	ldrbeq	r3, [ip, #0x05]		/* r3 = b1#5 */  	RETne			/* Return if mismatch on #4 */  	sub	r0, r3, r2		/* r0 = b1#5 - b2#5 */  	RET @@ -436,8 +439,8 @@ EENTRY(memmove)  	bge	.Lmemmove_floop32  	cmn	r2, #0x10 -	ldmgeia	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */ -	stmgeia	r0!, {r3, r4, r12, lr} +	ldmiage	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */ +	stmiage	r0!, {r3, r4, r12, lr}  	subge	r2, r2, #0x10  	ldmia	sp!, {r4}		/* return r4 */ @@ -446,9 +449,9 @@ EENTRY(memmove)  	/* blat 12 bytes at a time */  .Lmemmove_floop12: -	ldmgeia	r1!, {r3, r12, lr} -	stmgeia	r0!, {r3, r12, lr} -	subges	r2, r2, #0x0c +	ldmiage	r1!, {r3, r12, lr} +	stmiage	r0!, {r3, r12, lr} +	subsge	r2, r2, #0x0c  	bge	.Lmemmove_floop12  .Lmemmove_fl12: @@ -458,23 +461,23 @@ EENTRY(memmove)  	subs	r2, r2, #4  	ldrlt	r3, [r1], #4  	strlt	r3, [r0], #4 -	ldmgeia	r1!, {r3, r12} -	stmgeia	r0!, {r3, r12} +	ldmiage	r1!, {r3, r12} +	stmiage	r0!, {r3, r12}  	subge	r2, r2, #4  .Lmemmove_fl4:  	/* less than 4 bytes to go */  	adds	r2, r2, #4 -	ldmeqia	sp!, {r0, pc}		/* done */ +	ldmiaeq	sp!, {r0, pc}		/* done */  	/* copy the crud byte at a time */  	cmp	r2, #2  	ldrb	r3, [r1], #1  	strb	r3, [r0], #1 -	ldrgeb	r3, [r1], #1 -	strgeb	r3, [r0], #1 -	ldrgtb	r3, [r1], #1 -	strgtb	r3, [r0], #1 +	ldrbge	r3, [r1], #1 +	strbge	r3, [r0], #1 +	ldrbgt	r3, [r1], #1 +	strbgt	r3, [r0], #1  	ldmia	sp!, {r0, pc}  	/* erg - unaligned destination */ @@ -485,10 +488,10 @@ EENTRY(memmove)  	/* align destination with byte copies */  	ldrb	r3, [r1], #1  	strb	r3, [r0], #1 -	ldrgeb	r3, [r1], #1 -	strgeb	r3, [r0], #1 -	ldrgtb	r3, [r1], #1 -	strgtb	r3, [r0], #1 +	ldrbge	r3, [r1], #1 +	strbge	r3, [r0], #1 +	ldrbgt	r3, [r1], #1 +	strbgt	r3, [r0], #1  	subs	r2, r2, r12  	blt	.Lmemmove_fl4		/* less the 4 bytes */ @@ -703,12 +706,12 @@ EENTRY(memmove)  .Lmemmove_bl32:  	cmn	r2, #0x10 -	ldmgedb	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */ -	stmgedb	r0!, {r3, r4, r12, lr} +	ldmdbge	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */ +	stmdbge	r0!, {r3, r4, r12, lr}  	subge	r2, r2, #0x10  	adds	r2, r2, #0x14 -	ldmgedb	r1!, {r3, r12, lr}	/* blat a remaining 12 bytes */ -	stmgedb	r0!, {r3, r12, lr} +	ldmdbge	r1!, {r3, r12, lr}	/* blat a remaining 12 bytes */ +	stmdbge	r0!, {r3, r12, lr}  	subge	r2, r2, #0x0c  	ldmia	sp!, {r4, lr} @@ -718,8 +721,8 @@ EENTRY(memmove)  	subs	r2, r2, #4  	ldrlt	r3, [r1, #-4]!  	strlt	r3, [r0, #-4]! -	ldmgedb	r1!, {r3, r12} -	stmgedb	r0!, {r3, r12} +	ldmdbge	r1!, {r3, r12} +	stmdbge	r0!, {r3, r12}  	subge	r2, r2, #4  .Lmemmove_bl4: @@ -731,10 +734,10 @@ EENTRY(memmove)  	cmp	r2, #2  	ldrb	r3, [r1, #-1]!  	strb	r3, [r0, #-1]! -	ldrgeb	r3, [r1, #-1]! -	strgeb	r3, [r0, #-1]! -	ldrgtb	r3, [r1, #-1]! -	strgtb	r3, [r0, #-1]! +	ldrbge	r3, [r1, #-1]! +	strbge	r3, [r0, #-1]! +	ldrbgt	r3, [r1, #-1]! +	strbgt	r3, [r0, #-1]!  	RET  	/* erg - unaligned destination */ @@ -744,10 +747,10 @@ EENTRY(memmove)  	/* align destination with byte copies */  	ldrb	r3, [r1, #-1]!  	strb	r3, [r0, #-1]! -	ldrgeb	r3, [r1, #-1]! -	strgeb	r3, [r0, #-1]! -	ldrgtb	r3, [r1, #-1]! -	strgtb	r3, [r0, #-1]! +	ldrbge	r3, [r1, #-1]! +	strbge	r3, [r0, #-1]! +	ldrbgt	r3, [r1, #-1]! +	strbgt	r3, [r0, #-1]!  	subs	r2, r2, r12  	blt	.Lmemmove_bl4		/* less than 4 bytes to go */  	ands	r12, r1, #3 @@ -994,8 +997,8 @@ ENTRY(memcpy)  	bge	.Lmemcpy_loop32  	cmn	r2, #0x10 -	ldmgeia	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */ -	stmgeia	r0!, {r3, r4, r12, lr} +	ldmiage	r1!, {r3, r4, r12, lr}	/* blat a remaining 16 bytes */ +	stmiage	r0!, {r3, r4, r12, lr}  	subge	r2, r2, #0x10  	ldmia	sp!, {r4}		/* return r4 */ @@ -1004,9 +1007,9 @@ ENTRY(memcpy)  	/* blat 12 bytes at a time */  .Lmemcpy_loop12: -	ldmgeia	r1!, {r3, r12, lr} -	stmgeia	r0!, {r3, r12, lr} -	subges	r2, r2, #0x0c +	ldmiage	r1!, {r3, r12, lr} +	stmiage	r0!, {r3, r12, lr} +	subsge	r2, r2, #0x0c  	bge	.Lmemcpy_loop12  .Lmemcpy_l12: @@ -1016,26 +1019,26 @@ ENTRY(memcpy)  	subs	r2, r2, #4  	ldrlt	r3, [r1], #4  	strlt	r3, [r0], #4 -	ldmgeia	r1!, {r3, r12} -	stmgeia	r0!, {r3, r12} +	ldmiage	r1!, {r3, r12} +	stmiage	r0!, {r3, r12}  	subge	r2, r2, #4  .Lmemcpy_l4:  	/* less than 4 bytes to go */  	adds	r2, r2, #4  #ifdef __APCS_26_ -	ldmeqia sp!, {r0, pc}^		/* done */ +	ldmiaeq sp!, {r0, pc}^		/* done */  #else -	ldmeqia	sp!, {r0, pc}		/* done */ +	ldmiaeq	sp!, {r0, pc}		/* done */  #endif  	/* copy the crud byte at a time */  	cmp	r2, #2  	ldrb	r3, [r1], #1  	strb	r3, [r0], #1 -	ldrgeb	r3, [r1], #1 -	strgeb	r3, [r0], #1 -	ldrgtb	r3, [r1], #1 -	strgtb	r3, [r0], #1 +	ldrbge	r3, [r1], #1 +	strbge	r3, [r0], #1 +	ldrbgt	r3, [r1], #1 +	strbgt	r3, [r0], #1  	ldmia	sp!, {r0, pc}  	/* erg - unaligned destination */ @@ -1046,10 +1049,10 @@ ENTRY(memcpy)  	/* align destination with byte copies */  	ldrb	r3, [r1], #1  	strb	r3, [r0], #1 -	ldrgeb	r3, [r1], #1 -	strgeb	r3, [r0], #1 -	ldrgtb	r3, [r1], #1 -	strgtb	r3, [r0], #1 +	ldrbge	r3, [r1], #1 +	strbge	r3, [r0], #1 +	ldrbgt	r3, [r1], #1 +	strbgt	r3, [r0], #1  	subs	r2, r2, r12  	blt	.Lmemcpy_l4		/* less the 4 bytes */ @@ -1212,12 +1215,12 @@ ENTRY(memcpy)  	ldrb	ip, [r1], #0x01  	sub	r2, r2, #0x01  	strb	ip, [r3], #0x01 -	ldrleb	ip, [r1], #0x01 +	ldrble	ip, [r1], #0x01  	suble	r2, r2, #0x01 -	strleb	ip, [r3], #0x01 -	ldrltb	ip, [r1], #0x01 +	strble	ip, [r3], #0x01 +	ldrblt	ip, [r1], #0x01  	sublt	r2, r2, #0x01 -	strltb	ip, [r3], #0x01 +	strblt	ip, [r3], #0x01  	/* Destination buffer is now word aligned */  .Lmemcpy_wordaligned: @@ -1294,7 +1297,7 @@ ENTRY(memcpy)  .Lmemcpy_w_lessthan128:  	adds	r2, r2, #0x80		/* Adjust for extra sub */ -	ldmeqfd	sp!, {r4-r9} +	ldmfdeq	sp!, {r4-r9}  	RETeq			/* Return now if done */  	subs	r2, r2, #0x20  	blt	.Lmemcpy_w_lessthan32 @@ -1319,7 +1322,7 @@ ENTRY(memcpy)  .Lmemcpy_w_lessthan32:  	adds	r2, r2, #0x20		/* Adjust for extra sub */ -	ldmeqfd	sp!, {r4-r9} +	ldmfdeq	sp!, {r4-r9}  	RETeq			/* Return now if done */  	and	r4, r2, #0x18 @@ -1355,12 +1358,14 @@ ENTRY(memcpy)  	addlt	r2, r2, #0x04  	ldrb	ip, [r1], #0x01  	cmp	r2, #0x02 -	ldrgeb	r2, [r1], #0x01 +	ldrbge	r2, [r1], #0x01  	strb	ip, [r3], #0x01 -	ldrgtb	ip, [r1] -	strgeb	r2, [r3], #0x01 -	strgtb	ip, [r3] +	ldrbgt	ip, [r1] +	strbge	r2, [r3], #0x01 +	strbgt	ip, [r3]  	RET +/* Place a literal pool here for the above ldr instructions to use */ +.ltorg  /* @@ -1413,7 +1418,7 @@ ENTRY(memcpy)  	bge	.Lmemcpy_bad1_loop16  	adds	r2, r2, #0x10 -	ldmeqfd	sp!, {r4-r7} +	ldmfdeq	sp!, {r4-r7}  	RETeq			/* Return now if done */  	subs	r2, r2, #0x04  	sublt	r1, r1, #0x03 @@ -1474,7 +1479,7 @@ ENTRY(memcpy)  	bge	.Lmemcpy_bad2_loop16  	adds	r2, r2, #0x10 -	ldmeqfd	sp!, {r4-r7} +	ldmfdeq	sp!, {r4-r7}  	RETeq			/* Return now if done */  	subs	r2, r2, #0x04  	sublt	r1, r1, #0x02 @@ -1535,7 +1540,7 @@ ENTRY(memcpy)  	bge	.Lmemcpy_bad3_loop16  	adds	r2, r2, #0x10 -	ldmeqfd	sp!, {r4-r7} +	ldmfdeq	sp!, {r4-r7}  	RETeq			/* Return now if done */  	subs	r2, r2, #0x04  	sublt	r1, r1, #0x01 @@ -1564,11 +1569,11 @@ ENTRY(memcpy)  	RETeq  	ldrb	ip, [r1], #0x01  	cmp	r2, #0x02 -	ldrgeb	r2, [r1], #0x01 +	ldrbge	r2, [r1], #0x01  	strb	ip, [r3], #0x01 -	ldrgtb	ip, [r1] -	strgeb	r2, [r3], #0x01 -	strgtb	ip, [r3] +	ldrbgt	ip, [r1] +	strbge	r2, [r3], #0x01 +	strbgt	ip, [r3]  	RET @@ -1598,7 +1603,7 @@ ENTRY(memcpy)  	ldrb	ip, [r1], #0x01  1:	subs	r2, r2, #0x01  	strb	ip, [r3], #0x01 -	ldrneb	ip, [r1], #0x01 +	ldrbne	ip, [r1], #0x01  	bne	1b  	RET diff --git a/sys/arm/include/asm.h b/sys/arm/include/asm.h index 231d5598047b4..e5f06e7e5f6ac 100644 --- a/sys/arm/include/asm.h +++ b/sys/arm/include/asm.h @@ -64,6 +64,18 @@  #endif  /* + * EENTRY()/EEND() mark "extra" entry/exit points from a function. + * The unwind info cannot handle the concept of a nested function, or a function + * with multiple .fnstart directives, but some of our assembler code is written + * with multiple labels to allow entry at several points.  The EENTRY() macro + * defines such an extra entry point without a new .fnstart, so that it's + * basically just a label that you can jump to.  The EEND() macro does nothing + * at all, except document the exit point associated with the same-named entry. + */ +#define	_EENTRY(x) 	.globl x; .type x,_ASM_TYPE_FUNCTION; x: +#define	_EEND(x)	/* nothing */ + +/*   * gas/arm uses @ as a single comment character and thus cannot be used here   * Instead it recognised the # instead of an @ symbols in .type directives   * We define a couple of macros so that assembly code will not be dependent @@ -72,22 +84,10 @@  #define _ASM_TYPE_FUNCTION	#function  #define _ASM_TYPE_OBJECT	#object  #define GLOBAL(X) .globl x -#define _ENTRY(x) \ -	.text; _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; x: _FNSTART +#define	_ENTRY(x) \ +	.text; _ALIGN_TEXT; _EENTRY(x) _FNSTART  #define	_END(x)	.size x, . - x; _FNEND -/* - * EENTRY()/EEND() mark "extra" entry/exit points from a function. - * The unwind info cannot handle the concept of a nested function, or a function - * with multiple .fnstart directives, but some of our assembler code is written - * with multiple labels to allow entry at several points.  The EENTRY() macro - * defines such an extra entry point without a new .fnstart, so that it's - * basically just a label that you can jump to.  The EEND() macro does nothing - * at all, except document the exit point associated with the same-named entry. - */ -#define _EENTRY(x) 	.globl x; .type x,_ASM_TYPE_FUNCTION; x: -#define _EEND(x)	/* nothing */ -  #ifdef GPROF  #  define _PROF_PROLOGUE	\  	mov ip, lr; bl __mcount diff --git a/sys/arm/ti/ti_smc.S b/sys/arm/ti/ti_smc.S index 208e3a04c7dc6..931ad52d003d7 100644 --- a/sys/arm/ti/ti_smc.S +++ b/sys/arm/ti/ti_smc.S @@ -26,7 +26,7 @@  #include <machine/asm.h>  __FBSDID("$FreeBSD$"); -	.arch armv7a +	.cpu cortex-a8  	.arch_extension sec  /* Issue a smc #0 call */ diff --git a/sys/arm/xscale/ixp425/ixp425_a4x_io.S b/sys/arm/xscale/ixp425/ixp425_a4x_io.S index 22ab1b3479b42..bccd19bc2e91e 100644 --- a/sys/arm/xscale/ixp425/ixp425_a4x_io.S +++ b/sys/arm/xscale/ixp425/ixp425_a4x_io.S @@ -56,6 +56,7 @@ ENTRY(a4x_bs_r_1)  	ldr	r0, [r1, r2, LSL #2]  	and	r0, r0, #0xff  	mov	pc, lr +END(a4x_bs_r_1)  ENTRY(a4x_bs_r_2)  	ldr	r0, [r1, r2, LSL #2] @@ -63,10 +64,12 @@ ENTRY(a4x_bs_r_2)  	orr	r1, r1, r1, lsl #8  	and	r0, r0, r1  	mov	pc, lr +END(a4x_bs_r_2)  ENTRY(a4x_bs_r_4)  	ldr	r0, [r1, r2, LSL #2]  	mov	pc, lr +END(a4x_bs_r_4)  /*   * Write single @@ -75,6 +78,7 @@ ENTRY(a4x_bs_w_1)  	and	r3, r3, #0xff  	str	r3, [r1, r2, LSL #2]  	mov	pc, lr +END(a4x_bs_w_1)  ENTRY(a4x_bs_w_2)  	mov	r0, #0xff @@ -82,10 +86,12 @@ ENTRY(a4x_bs_w_2)  	and	r3, r3, r0  	str	r3, [r1, r2, LSL #2]  	mov	pc, lr +END(a4x_bs_w_2)  ENTRY(a4x_bs_w_4)  	str	r3, [r1, r2, LSL #2]  	mov	pc, lr +END(a4x_bs_w_4)  /*   * Read multiple @@ -101,6 +107,7 @@ ENTRY(a4x_bs_rm_1)  	strb	r3, [r1], #1  	bne	1b  	mov	pc, lr +END(a4x_bs_rm_1)  ENTRY(a4x_bs_rm_2)  	add	r0, r1, r2, lsl #2 @@ -113,6 +120,7 @@ ENTRY(a4x_bs_rm_2)  	strh	r3, [r1], #2  	bne	1b  	mov	pc, lr +END(a4x_bs_rm_2)  /*   * Write multiple @@ -128,6 +136,7 @@ ENTRY(a4x_bs_wm_1)  	str	r3, [r0]  	bne	1b  	mov	pc, lr +END(a4x_bs_wm_1)  ENTRY(a4x_bs_wm_2)  	add	r0, r1, r2, lsl #2 @@ -140,3 +149,4 @@ ENTRY(a4x_bs_wm_2)  	str	r3, [r0]  	bne	1b  	mov	pc, lr +END(a4x_bs_wm_2) diff --git a/sys/arm/xscale/ixp425/ixp425_pci_asm.S b/sys/arm/xscale/ixp425/ixp425_pci_asm.S index f686d6577f09b..ce668a3e3c845 100644 --- a/sys/arm/xscale/ixp425/ixp425_pci_asm.S +++ b/sys/arm/xscale/ixp425/ixp425_pci_asm.S @@ -58,6 +58,7 @@ ENTRY(ixp425_pci_mem_bs_r_1)  	ldrb	r0, [r1, r2]  #endif /* __ARMEB__ */  	mov	pc, lr +END(ixp425_pci_mem_bs_r_1)  ENTRY(ixp425_pci_mem_bs_r_2)  #ifdef __ARMEB__ @@ -68,10 +69,12 @@ ENTRY(ixp425_pci_mem_bs_r_2)  	ldrh	r0, [r1, r2]  #endif /* __ARMEB__ */  	mov	pc, lr +END(ixp425_pci_mem_bs_r_2)  ENTRY(ixp425_pci_mem_bs_r_4)  	ldr	r0, [r1, r2]  	mov	pc, lr +END(ixp425_pci_mem_bs_r_4)  /*   * write single @@ -86,6 +89,7 @@ ENTRY(ixp425_pci_mem_bs_w_1)  	strb	r3, [r1, r2]  #endif /* __ARMEB__ */  	mov	pc, lr +END(ixp425_pci_mem_bs_w_1)  ENTRY(ixp425_pci_mem_bs_w_2)  #ifdef __ARMEB__ @@ -96,7 +100,9 @@ ENTRY(ixp425_pci_mem_bs_w_2)  	strh	r3, [r1, r2]  #endif /* __ARMEB__ */  	mov	pc, lr +END(ixp425_pci_mem_bs_w_2)  ENTRY(ixp425_pci_mem_bs_w_4)  	str	r3, [r1, r2]  	mov	pc, lr +END(ixp425_pci_mem_bs_w_4) diff --git a/sys/libkern/arm/ffs.S b/sys/libkern/arm/ffs.S index a43f2b6712b1b..1ddec95de0b18 100644 --- a/sys/libkern/arm/ffs.S +++ b/sys/libkern/arm/ffs.S @@ -31,6 +31,7 @@  #include <machine/asm.h>  __FBSDID("$FreeBSD$"); +	.syntax	unified  /*   * ffs - find first set bit, this algorithm isolates the first set @@ -62,7 +63,7 @@ ENTRY(ffs)  	rsbne   r0, r0, r0, lsl #16 /* r0 = X * 0x0450fbaf */  	/* now lookup in table indexed on top 6 bits of r0 */ -	ldrneb  r0, [ r2, r0, lsr #26 ] +	ldrbne  r0, [ r2, r0, lsr #26 ]  	RET  .text; | 
