Module Name:    src
Committed By:   matt
Date:           Mon Oct 28 22:50:25 UTC 2013

Modified Files:
        src/sys/arch/arm/arm: bus_space_a2x.S bus_space_a4x.S
            bus_space_asm_generic.S

Log Message:
Make these compatible with thumb/thumb2


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/arm/bus_space_a2x.S \
    src/sys/arch/arm/arm/bus_space_a4x.S
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/arm/bus_space_asm_generic.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/arm/arm/bus_space_a2x.S
diff -u src/sys/arch/arm/arm/bus_space_a2x.S:1.3 src/sys/arch/arm/arm/bus_space_a2x.S:1.4
--- src/sys/arch/arm/arm/bus_space_a2x.S:1.3	Sun Aug 18 06:28:18 2013
+++ src/sys/arch/arm/arm/bus_space_a2x.S	Mon Oct 28 22:50:25 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus_space_a2x.S,v 1.3 2013/08/18 06:28:18 matt Exp $	*/
+/*	$NetBSD: bus_space_a2x.S,v 1.4 2013/10/28 22:50:25 matt Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #include <arm/locore.h>
 #include <arm/byte_swap.h>
 
-RCSID("$NetBSD: bus_space_a2x.S,v 1.3 2013/08/18 06:28:18 matt Exp $")
+RCSID("$NetBSD: bus_space_a2x.S,v 1.4 2013/10/28 22:50:25 matt Exp $")
 
 /*
  * bus_space_read_[124](void *cookie, bus_space_handle_t handle,
@@ -47,13 +47,13 @@ END(a2x_bs_r_1)
 
 #if (ARM_ARCH_4 + ARM_ARCH_5 + ARM_ARCH_6 + ARM_ARCH_7) > 0
 ENTRY_NP(a2x_bs_r_2)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	ldrh	r0, [r1, r2]
 	RET
 END(a2x_bs_r_2)
 
 ENTRY_NP(a2x_bs_r_2_swap)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	ldrh	r0, [r1, r2]
 	BSWAP16(r0, r0, r1)
 	RET
@@ -77,29 +77,29 @@ END(a2x_bs_r_4_swap)
  */
 
 ENTRY_NP(a2x_bs_rm_1)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	b	generic_bs_rm_1
 END(a2x_bs_rm_1)
 
 #if (ARM_ARCH_4 + ARM_ARCH_5 + ARM_ARCH_6 + ARM_ARCH_7) > 0
 ENTRY_NP(a2x_bs_rm_2)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	b	generic_armv4_bs_rm_2
 END(a2x_bs_rm_2)
 
 ENTRY_NP(a2x_bs_rm_2_swap)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	b	generic_armv4_bs_rm_2_swap
 END(a2x_bs_rm_2_swap)
 #endif
 
 ENTRY_NP(a2x_bs_rm_4)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	b	generic_bs_rm_4
 END(a2x_bs_rm_4)
 
 ENTRY_NP(a2x_bs_rm_4_swap)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	b	generic_bs_rm_4_swap
 END(a2x_bs_rm_4_swap)
 
@@ -116,7 +116,7 @@ END(a2x_bs_w_1)
 ENTRY_NP(a2x_bs_w_2_swap)
 	BSWAP16(r3, r3, r0)
 ENTRY_NP(a2x_bs_w_2)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	strh	r3, [r1, r2]
 	RET
 END(a2x_bs_w_2)
@@ -137,28 +137,28 @@ END(a2x_bs_w_4_swap)
  */
 
 ENTRY_NP(a2x_bs_wm_1)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	b	generic_bs_wm_1
 END(a2x_bs_wm_1)
 
 #if (ARM_ARCH_4 + ARM_ARCH_5 + ARM_ARCH_6 + ARM_ARCH_7) > 0
 ENTRY_NP(a2x_bs_wm_2)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	b	generic_armv4_bs_wm_2
 END(a2x_bs_wm_2)
 
 ENTRY_NP(a2x_bs_wm_2_swap)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	b	generic_armv4_bs_wm_2_swap
 END(a2x_bs_wm_2_swap)
 #endif
 
 ENTRY_NP(a2x_bs_wm_4)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	b	generic_bs_wm_4
 END(a2x_bs_wm_4)
 
 ENTRY_NP(a2x_bs_wm_4_swap)
-	lsl	r2, r2, #1
+	lsls	r2, r2, #1
 	b	generic_bs_wm_4_swap
 END(a2x_bs_wm_4_swap)
Index: src/sys/arch/arm/arm/bus_space_a4x.S
diff -u src/sys/arch/arm/arm/bus_space_a4x.S:1.3 src/sys/arch/arm/arm/bus_space_a4x.S:1.4
--- src/sys/arch/arm/arm/bus_space_a4x.S:1.3	Sun Aug 18 06:28:18 2013
+++ src/sys/arch/arm/arm/bus_space_a4x.S	Mon Oct 28 22:50:25 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus_space_a4x.S,v 1.3 2013/08/18 06:28:18 matt Exp $	*/
+/*	$NetBSD: bus_space_a4x.S,v 1.4 2013/10/28 22:50:25 matt Exp $	*/
 
 /*-
  * Copyright (c) 2012 The NetBSD Foundation, Inc.
@@ -33,7 +33,7 @@
 #include <arm/locore.h>
 #include <arm/byte_swap.h>
 
-RCSID("$NetBSD: bus_space_a4x.S,v 1.3 2013/08/18 06:28:18 matt Exp $")
+RCSID("$NetBSD: bus_space_a4x.S,v 1.4 2013/10/28 22:50:25 matt Exp $")
 
 /*
  * bus_space_read_[124](void *cookie, bus_space_handle_t handle,
@@ -47,13 +47,13 @@ END(a4x_bs_r_1)
 
 #if (ARM_ARCH_4 + ARM_ARCH_5 + ARM_ARCH_6 + ARM_ARCH_7) > 0
 ENTRY_NP(a4x_bs_r_2)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	ldrh	r0, [r1, r2]
 	RET
 END(a4x_bs_r_2)
 
 ENTRY_NP(a4x_bs_r_2_swap)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	ldrh	r0, [r1, r2]
 	BSWAP16(r0, r0, r1)
 	RET
@@ -77,29 +77,29 @@ END(a4x_bs_r_4_swap)
  */
 
 ENTRY_NP(a4x_bs_rm_1)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	b	generic_bs_rm_1
 END(a4x_bs_rm_1)
 
 #if (ARM_ARCH_4 + ARM_ARCH_5 + ARM_ARCH_6 + ARM_ARCH_7) > 0
 ENTRY_NP(a4x_bs_rm_2)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	b	generic_armv4_bs_rm_2
 END(a4x_bs_rm_2)
 
 ENTRY_NP(a4x_bs_rm_2_swap)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	b	generic_armv4_bs_rm_2_swap
 END(a4x_bs_rm_2_swap)
 #endif
 
 ENTRY_NP(a4x_bs_rm_4)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	b	generic_bs_rm_4
 END(a4x_bs_rm_4)
 
 ENTRY_NP(a4x_bs_rm_4_swap)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	b	generic_bs_rm_4_swap
 END(a4x_bs_rm_4_swap)
 
@@ -116,7 +116,7 @@ END(a4x_bs_w_1)
 ENTRY_NP(a4x_bs_w_2_swap)
 	BSWAP16(r3, r3, r0)
 ENTRY_NP(a4x_bs_w_2)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	strh	r3, [r1, r2]
 	RET
 END(a4x_bs_w_2)
@@ -137,28 +137,28 @@ END(a4x_bs_w_4_swap)
  */
 
 ENTRY_NP(a4x_bs_wm_1)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	b	generic_bs_wm_1
 END(a4x_bs_wm_1)
 
 #if (ARM_ARCH_4 + ARM_ARCH_5 + ARM_ARCH_6 + ARM_ARCH_7) > 0
 ENTRY_NP(a4x_bs_wm_2)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	b	generic_armv4_bs_wm_2
 END(a4x_bs_wm_2)
 
 ENTRY_NP(a4x_bs_wm_2_swap)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	b	generic_armv4_bs_wm_2_swap
 END(a4x_bs_wm_2_swap)
 #endif
 
 ENTRY_NP(a4x_bs_wm_4)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	b	generic_bs_wm_4
 END(a4x_bs_wm_4)
 
 ENTRY_NP(a4x_bs_wm_4_swap)
-	lsl	r2, r2, #2
+	lsls	r2, r2, #2
 	b	generic_bs_wm_4_swap
 END(a4x_bs_wm_4_swap)

Index: src/sys/arch/arm/arm/bus_space_asm_generic.S
diff -u src/sys/arch/arm/arm/bus_space_asm_generic.S:1.10 src/sys/arch/arm/arm/bus_space_asm_generic.S:1.11
--- src/sys/arch/arm/arm/bus_space_asm_generic.S:1.10	Sun Aug 18 06:29:29 2013
+++ src/sys/arch/arm/arm/bus_space_asm_generic.S	Mon Oct 28 22:50:25 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: bus_space_asm_generic.S,v 1.10 2013/08/18 06:29:29 matt Exp $	*/
+/*	$NetBSD: bus_space_asm_generic.S,v 1.11 2013/10/28 22:50:25 matt Exp $	*/
 
 /*
  * Copyright (c) 1997 Causality Limited.
@@ -46,6 +46,13 @@
 #define	DSB
 #endif
 
+#if defined(__thumb__) && defined(_ARM_ARCH_T2)
+#define CHECK_LENGTH(r, l)	cbz r, l
+#elif defined(__thumb__)
+#define CHECK_LENGTH(r, l)	cmp r, #0; beq l
+#else
+#define CHECK_LENGTH(r, l)	cmp r, #0; RETc(eq)
+#endif
 /*
  * Generic bus_space functions.
  */
@@ -123,11 +130,10 @@ END(generic_bs_w_4_swap)
  */
 
 ENTRY_NP(generic_bs_rm_1)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 	DSB
 
 1:	ldrb	r3, [r0]
@@ -135,16 +141,15 @@ ENTRY_NP(generic_bs_rm_1)
 	subs	r2, r2, #1
 	bne	1b
 
-	RET
+99:	RET
 END(generic_bs_rm_1)
 
 #if (ARM_ARCH_4 + ARM_ARCH_5 + ARM_ARCH_6 + ARM_ARCH_7) > 0
 ENTRY_NP(generic_armv4_bs_rm_2)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 	DSB
 
 1:	ldrh	r3, [r0]
@@ -152,16 +157,15 @@ ENTRY_NP(generic_armv4_bs_rm_2)
 	subs	r2, r2, #1
 	bne	1b
 
-	RET
+99:	RET
 END(generic_armv4_bs_rm_2)
 
 ENTRY_NP(generic_armv4_bs_rm_2_swap)
 	DSB
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 	DSB
 
 1:	ldrh	r3, [r0]
@@ -170,16 +174,15 @@ ENTRY_NP(generic_armv4_bs_rm_2_swap)
 	subs	r2, r2, #1
 	bne	1b
 
-	RET
+99:	RET
 END(generic_armv4_bs_rm_2_swap)
 #endif
 
 ENTRY_NP(generic_bs_rm_4)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 	DSB
 
 1:	ldr	r3, [r0]
@@ -187,15 +190,14 @@ ENTRY_NP(generic_bs_rm_4)
 	subs	r2, r2, #1
 	bne	1b
 
-	RET
+99:	RET
 END(generic_bs_rm_4)
 
 ENTRY_NP(generic_bs_rm_4_swap)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 	DSB
 
 1:	ldr	r3, [r0]
@@ -204,7 +206,7 @@ ENTRY_NP(generic_bs_rm_4_swap)
 	subs	r2, r2, #1
 	bne	1b
 
-	RET
+99:	RET
 END(generic_bs_rm_4_swap)
 
 /*
@@ -212,11 +214,10 @@ END(generic_bs_rm_4_swap)
  */
 
 ENTRY_NP(generic_bs_wm_1)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	ldrb	r3, [r1], #1
 	strb	r3, [r0]
@@ -224,16 +225,15 @@ ENTRY_NP(generic_bs_wm_1)
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_bs_wm_1)
 
 #if (ARM_ARCH_4 + ARM_ARCH_5 + ARM_ARCH_6 + ARM_ARCH_7) > 0
 ENTRY_NP(generic_armv4_bs_wm_2)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	ldrh	r3, [r1], #2
 	strh	r3, [r0]
@@ -241,15 +241,13 @@ ENTRY_NP(generic_armv4_bs_wm_2)
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_armv4_bs_wm_2)
 
 ENTRY_NP(generic_armv4_bs_wm_2_swap)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
 
 1:	ldrh	r3, [r1], #2
 	BSWAP16(r3, r3, ip)
@@ -258,16 +256,15 @@ ENTRY_NP(generic_armv4_bs_wm_2_swap)
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_armv4_bs_wm_2_swap)
 #endif
 
 ENTRY_NP(generic_bs_wm_4)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	ldr	r3, [r1], #4
 	str	r3, [r0]
@@ -275,15 +272,14 @@ ENTRY_NP(generic_bs_wm_4)
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_bs_wm_4)
 
 ENTRY_NP(generic_bs_wm_4_swap)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	ldr	r3, [r1], #4
 	BSWAP32(r3, r3, ip)
@@ -292,7 +288,7 @@ ENTRY_NP(generic_bs_wm_4_swap)
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_bs_wm_4_swap)
 
 /*
@@ -300,11 +296,10 @@ END(generic_bs_wm_4_swap)
  */
 
 ENTRY_NP(generic_bs_rr_1)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 	DSB
 
 1:	ldrb	r3, [r0], #1
@@ -312,16 +307,15 @@ ENTRY_NP(generic_bs_rr_1)
 	subs	r2, r2, #1
 	bne	1b
 
-	RET
+99:	RET
 END(generic_bs_rr_1)
 
 #if (ARM_ARCH_4 + ARM_ARCH_5 + ARM_ARCH_6 + ARM_ARCH_7) > 0
 ENTRY_NP(generic_armv4_bs_rr_2)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 	DSB
 
 1:	ldrh	r3, [r0], #2
@@ -329,15 +323,14 @@ ENTRY_NP(generic_armv4_bs_rr_2)
 	subs	r2, r2, #1
 	bne	1b
 
-	RET
+99:	RET
 END(generic_armv4_bs_rr_2)
 
 ENTRY_NP(generic_armv4_bs_rr_2_swap)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 	DSB
 
 1:	ldrh	r3, [r0], #2
@@ -346,31 +339,29 @@ ENTRY_NP(generic_armv4_bs_rr_2_swap)
 	subs	r2, r2, #1
 	bne	1b
 
-	RET
+99:	RET
 END(generic_armv4_bs_rr_2_swap)
 #endif
 
 ENTRY_NP(generic_bs_rr_4)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	ldr	r3, [r0], #4
 	str	r3, [r1], #4
 	subs	r2, r2, #1
 	bne	1b
 
-	RET
+99:	RET
 END(generic_bs_rr_4)
 
 ENTRY_NP(generic_bs_rr_4_swap)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 	DSB
 
 1:	ldr	r3, [r0], #4
@@ -379,7 +370,7 @@ ENTRY_NP(generic_bs_rr_4_swap)
 	subs	r2, r2, #1
 	bne	1b
 
-	RET
+99:	RET
 END(generic_bs_rr_4_swap)
 
 /*
@@ -387,11 +378,10 @@ END(generic_bs_rr_4_swap)
  */
 
 ENTRY_NP(generic_bs_wr_1)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	ldrb	r3, [r1], #1
 	strb	r3, [r0], #1
@@ -399,16 +389,15 @@ ENTRY_NP(generic_bs_wr_1)
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_bs_wr_1)
 
 #if (ARM_ARCH_4 + ARM_ARCH_5 + ARM_ARCH_6 + ARM_ARCH_7) > 0
 ENTRY_NP(generic_armv4_bs_wr_2)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	ldrh	r3, [r1], #2
 	strh	r3, [r0], #2
@@ -416,15 +405,14 @@ ENTRY_NP(generic_armv4_bs_wr_2)
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_armv4_bs_wr_2)
 
 ENTRY_NP(generic_armv4_bs_wr_2_swap)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	ldrh	r3, [r1], #2
 	BSWAP16(r3, r3, ip)
@@ -433,16 +421,15 @@ ENTRY_NP(generic_armv4_bs_wr_2_swap)
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_armv4_bs_wr_2_swap)
 #endif
 
 ENTRY_NP(generic_bs_wr_4)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	ldr	r3, [r1], #4
 	str	r3, [r0], #4
@@ -450,15 +437,14 @@ ENTRY_NP(generic_bs_wr_4)
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_bs_wr_4)
 
 ENTRY_NP(generic_bs_wr_4_swap)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	ldr	r3, [r1], #4
 	BSWAP32(r3, r3, ip)
@@ -467,7 +453,7 @@ ENTRY_NP(generic_bs_wr_4_swap)
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_bs_wr_4_swap)
 
 /*
@@ -475,36 +461,34 @@ END(generic_bs_wr_4_swap)
  */
 
 ENTRY_NP(generic_bs_sr_1)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	strb	r1, [r0], #1
 	subs	r2, r2, #1
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_bs_sr_1)
 
 #if (ARM_ARCH_4 + ARM_ARCH_5 + ARM_ARCH_6 + ARM_ARCH_7) > 0
 ENTRY_NP(generic_armv4_bs_sr_2_swap)
 	BSWAP16(r3, r3, r0)	/* swap and fallthrough */
 ENTRY_NP(generic_armv4_bs_sr_2)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	strh	r1, [r0], #2
 	subs	r2, r2, #1
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_armv4_bs_sr_2)
 END(generic_armv4_bs_sr_2_swap)
 #endif
@@ -512,18 +496,17 @@ END(generic_armv4_bs_sr_2_swap)
 ENTRY_NP(generic_bs_sr_4_swap)
 	BSWAP32(r3, r3, r0)	/* swap and fallthrough */
 ENTRY_NP(generic_bs_sr_4)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	mov	r1, r3
 	ldr	r2, [sp, #0]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
 
 1:	str	r1, [r0], #4
 	subs	r2, r2, #1
 	bne	1b
 
 	DSB
-	RET
+99:	RET
 END(generic_bs_sr_4)
 END(generic_bs_sr_4_swap)
 
@@ -533,35 +516,35 @@ END(generic_bs_sr_4_swap)
 
 #if (ARM_ARCH_4 + ARM_ARCH_5 + ARM_ARCH_6 + ARM_ARCH_7) > 0
 ENTRY_NP(generic_armv4_bs_c_2)
-	add	r0, r1, r2
+	adds	r0, r1, r2
 	ldr	r2, [sp, #0]
-	add	r1, r2, r3
+	adds	r1, r2, r3
 	ldr	r2, [sp, #4]
-	teq	r2, #0
-	RETc(eq)
+	CHECK_LENGTH(r2, 99f)
+
+	lsls	r2, r2, #1
 
 	cmp	r0, r1
 	blt	2f
 
-1:	ldrh	r3, [r0], #2
-	strh	r3, [r1], #2
-	subs	r2, r2, #1
+	adds	r0, r0, r2
+	adds	r1, r1, r2
+	negs	r2, r2	
+
+1:	ldrh	r3, [r0, r2]
+	strh	r3, [r1, r2]
+	adds	r2, r2, #2
 	bne	1b
 
 	DSB
 	RET
 
-2:	add	r0, r0, r2, lsl #1
-	add	r1, r1, r2, lsl #1
-	sub	r0, r0, #2
-	sub	r1, r1, #2
-
-3:	ldrh	r3, [r0], #-2
-	strh	r3, [r1], #-2
-	subs	r2, r2, #1
-	bne	3b
+2:	subs	r2, r2, #2
+	ldrh	r3, [r0, r2]
+	strh	r3, [r1, r2]
+	bne	2b
 
 	DSB
-	RET
+99:	RET
 END(generic_armv4_bs_c_2)
 #endif

Reply via email to