Module Name:    src
Committed By:   matt
Date:           Mon Aug 19 22:11:50 UTC 2013

Modified Files:
        src/lib/libc/compat/arch/arm/gen: compat_setjmp.S compat_sigsetjmp.S
        src/lib/libc/compat/arch/arm/sys: compat_Ovfork.S compat___sigtramp1.S
            compat_sigpending.S compat_sigprocmask.S compat_sigsuspend.S

Log Message:
Use _INVOKE_CERROR() and movs


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/lib/libc/compat/arch/arm/gen/compat_setjmp.S
cvs rdiff -u -r1.1 -r1.2 src/lib/libc/compat/arch/arm/gen/compat_sigsetjmp.S
cvs rdiff -u -r1.2 -r1.3 src/lib/libc/compat/arch/arm/sys/compat_Ovfork.S \
    src/lib/libc/compat/arch/arm/sys/compat___sigtramp1.S \
    src/lib/libc/compat/arch/arm/sys/compat_sigpending.S \
    src/lib/libc/compat/arch/arm/sys/compat_sigprocmask.S \
    src/lib/libc/compat/arch/arm/sys/compat_sigsuspend.S

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

Modified files:

Index: src/lib/libc/compat/arch/arm/gen/compat_setjmp.S
diff -u src/lib/libc/compat/arch/arm/gen/compat_setjmp.S:1.2 src/lib/libc/compat/arch/arm/gen/compat_setjmp.S:1.3
--- src/lib/libc/compat/arch/arm/gen/compat_setjmp.S:1.2	Fri Jan 11 13:55:26 2013
+++ src/lib/libc/compat/arch/arm/gen/compat_setjmp.S	Mon Aug 19 22:11:50 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_setjmp.S,v 1.2 2013/01/11 13:55:26 matt Exp $	*/
+/*	$NetBSD: compat_setjmp.S,v 1.3 2013/08/19 22:11:50 matt Exp $	*/
 
 /*
  * Copyright (c) 1997 Mark Brinicombe
@@ -47,14 +47,12 @@
 
 ENTRY(setjmp)
 	/* Block all signals and retrieve the old signal mask */
-	stmfd	sp!, {r0, r14}
-	mov	r0, #0x00000000
+	push	{r0, lr}
+	movs	r0, #0x00000000
 
 	bl	PIC_SYM(_C_LABEL(sigblock), PLT)
 	mov	r1, r0
 
-	ldmfd	sp!, {r0, r14}
-
 	/* Store signal mask */
 	str	r1, [r0, #(_JB_SIGMASK * 4)]
 
@@ -62,52 +60,96 @@ ENTRY(setjmp)
 	str	r1, [r0]
 
 	/* Store integer registers */
-	add	r0, r0, #(_JB_REG_R4 * 4)
-        stmia	r0, {r4-r14}
-        mov	r0, #0x00000000
-        RET
-
-.Lsetjmp_magic:
-	.word	_JB_MAGIC_SETJMP
-
+	adds	r0, r0, #(_JB_REG_R4 * 4)
+#ifdef __thumb__
+#ifdef _ARM_ARCH_7
+        stmia	r0!, {r4-r12}
+	str	sp, [r0, #0]
+	str	lr, [r0, #4]
+#else
+        stmia	r0!, {r4-r7}
+	mov	r2, r8
+	mov	r3, r9
+	stmia	r0!, {r2-r3}
+	mov	r1, r10
+	mov	r2, r11
+	mov	r3, r12
+	stmia	r0!, {r1-r3}
+	mov	r2, sp
+	mov	r3, lr
+	stmia	r0!, {r2-r3}
+#endif
+#else
+        stmia	r0, {r4-lr}
+#endif
+        movs	r0, #0
+	pop	{r3, pc}
+END(setjmp)
 
 ENTRY(longjmp)
 	ldr	r2, .Lsetjmp_magic
 	ldr	r3, [r0]
-	teq	r2, r3
+	cmp	r2, r3
 	bne	botch
 
 	/* Fetch signal mask */
 	ldr	r2, [r0, #(_JB_SIGMASK * 4)]
 
 	/* Set signal mask */
-	stmfd	sp!, {r0, r1, r14}
-	sub	sp, sp, #4	/* align the stack */
+	push	{r0, r1}	/* don't care about lr */
 
 	mov	r0, r2
 	bl	PIC_SYM(_C_LABEL(sigsetmask), PLT)
 
-	add	sp, sp, #4	/* unalign the stack */
-	ldmfd	sp!, {r0, r1, r14} 
+	pop	{r0, r1} 
 
 	/* Restore integer registers */
-	add	r0, r0, #(_JB_REG_R4 * 4)
-        ldmia	r0, {r4-r14}
+	adds	r0, r0, #(_JB_REG_R4 * 4)
+#if !defined(__thumb__) || defined(_ARM_ARCH_7)
+        ldmia	r0!, {r4-r12}
+#else
+        ldmia	r0!, {r4-r7}
+        ldmia	r0!, {r2-r3}
+	mov	r8, r2
+	mov	r9, r3
+        ldmia	r0!, {r1-r3}
+	mov	r10, r2
+	mov	r11, r3
+        ldmia	r0!, {r2}
+	mov	r12, r2
+#endif
+
+	ldmia	r0!, {r2-r3}	/* r2 = sp, r3 = lr */
 
-	/* Validate sp and r14 */
-	teq	sp, #0
-	teqne	r14, #0
+	/* Validate sp */
+	cmp	r2, #0
 	beq	botch
+	mov	sp, r2
 
-	/* Set return value */
+	/* Validate lr */
+	cmp	r3, #0
+	beq	botch
+	mov	lr, r3
 
+	/* Set return value */
 	mov	r0, r1
-	teq	r0, #0x00000000
-	moveq	r0, #0x00000001
+	cmp	r0, #0
+#ifdef __thumb__
+	bne	1f
+	movs	r0, #1
+1:
+#else
+	moveq	r0, #1
+#endif
 	RET
 
 	/* validation failed, die die die. */
 botch:
 	bl	PIC_SYM(_C_LABEL(longjmperror), PLT)
 	bl	PIC_SYM(_C_LABEL(abort), PLT)
-	b	. - 8		/* Cannot get here */
+2:	b	2b		/* Cannot get here */
+
+	.align	0
+.Lsetjmp_magic:
+	.word	_JB_MAGIC_SETJMP
+END(longjmp)

Index: src/lib/libc/compat/arch/arm/gen/compat_sigsetjmp.S
diff -u src/lib/libc/compat/arch/arm/gen/compat_sigsetjmp.S:1.1 src/lib/libc/compat/arch/arm/gen/compat_sigsetjmp.S:1.2
--- src/lib/libc/compat/arch/arm/gen/compat_sigsetjmp.S:1.1	Sun Oct 16 17:27:50 2005
+++ src/lib/libc/compat/arch/arm/gen/compat_sigsetjmp.S	Mon Aug 19 22:11:50 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_sigsetjmp.S,v 1.1 2005/10/16 17:27:50 christos Exp $	*/
+/*	$NetBSD: compat_sigsetjmp.S,v 1.2 2013/08/19 22:11:50 matt Exp $	*/
 
 /*
  * Copyright (c) 1997 Mark Brinicombe
@@ -46,16 +46,46 @@
  */
 
 ENTRY(sigsetjmp)
-	teq	r1, #0
-	beq	PIC_SYM(_C_LABEL(_setjmp), PLT)
-	b	PIC_SYM(_C_LABEL(setjmp), PLT)
-
-.L_setjmp_magic:
-	.word	_JB_MAGIC__SETJMP
+#if defined(__thumb__) && defined(_ARM_ARCH_T2)
+	cbnz	r1, 1f
+	b	PLT_SYM(_C_LABEL(_setjmp))
+1:	b	PLT_SYM(_C_LABEL(setjmp))
+#elif !defined(__thumb__)
+	cmp	r1, #0
+	beq	PLT_SYM(_C_LABEL(_setjmp))
+	b	PLT_SYM(_C_LABEL(setjmp))
+#else
+	push	{r3, lr}
+	beq	1f
+	bl	PLT_SYM(_C_LABEL(setjmp))
+	pop	{r3, pc}
+1:	bl	PLT_SYM(_C_LABEL(_setjmp))
+	pop	{r3, pc}
+#endif
+END(sigsetjmp)
 
 ENTRY(siglongjmp)
 	ldr	r2, .L_setjmp_magic
 	ldr	r3, [r0]
-	teq	r2, r3
+	cmp	r2, r3
+#if !defined(__thumb__) || defined(_ARM_ARCH_T2)
+#if defined(__thumb__)
+	it	eq
+#endif
 	beq	PIC_SYM(_C_LABEL(_longjmp), PLT)
 	b	PIC_SYM(_C_LABEL(longjmp), PLT)
+#else
+	push	{lr}
+	sub	sp, sp, #4
+	beq	1f
+	bl	PIC_SYM(_C_LABEL(longjmp), PLT)
+	b	2f
+1:	bl	PIC_SYM(_C_LABEL(_longjmp), PLT)
+2:	add	sp, sp, #4
+	pop	{pc}
+#endif
+
+	.align	0
+.L_setjmp_magic:
+	.word	_JB_MAGIC__SETJMP
+END(siglongjmp)

Index: src/lib/libc/compat/arch/arm/sys/compat_Ovfork.S
diff -u src/lib/libc/compat/arch/arm/sys/compat_Ovfork.S:1.2 src/lib/libc/compat/arch/arm/sys/compat_Ovfork.S:1.3
--- src/lib/libc/compat/arch/arm/sys/compat_Ovfork.S:1.2	Thu Aug  1 05:54:24 2013
+++ src/lib/libc/compat/arch/arm/sys/compat_Ovfork.S	Mon Aug 19 22:11:50 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_Ovfork.S,v 1.2 2013/08/01 05:54:24 matt Exp $	*/
+/*	$NetBSD: compat_Ovfork.S,v 1.3 2013/08/19 22:11:50 matt Exp $	*/
 
 /*-
  * Copyright (c) 1990 The Regents of the University of California.
@@ -43,14 +43,12 @@ WARN_REFERENCES(vfork, \
  * r1 == 0 in parent process, r1 == 1 in child process.
  * r0 == pid of child in parent, r0 == pid of parent in child.
  */
-	.text
-	.align	0
-
 ENTRY(vfork)
-	mov	r2, r14
+	mov	r2, lr
 	SYSTRAP(vfork)
-	bcs	CERROR
-	mov	r14, r2
-	sub	r1, r1, #1	/* r1 == 0xffffffff if parent, 0 if child */
-	and	r0, r0, r1	/* r0 == 0 if child, else unchanged */
+	_INVOKE_CERROR()
+	mov	lr, r2
+	subs	r1, r1, #1	/* r1 == 0xffffffff if parent, 0 if child */
+	ands	r0, r0, r1	/* r0 == 0 if child, else unchanged */
 	RET
+END(vfork)
Index: src/lib/libc/compat/arch/arm/sys/compat___sigtramp1.S
diff -u src/lib/libc/compat/arch/arm/sys/compat___sigtramp1.S:1.2 src/lib/libc/compat/arch/arm/sys/compat___sigtramp1.S:1.3
--- src/lib/libc/compat/arch/arm/sys/compat___sigtramp1.S:1.2	Mon Apr 28 20:22:58 2008
+++ src/lib/libc/compat/arch/arm/sys/compat___sigtramp1.S	Mon Aug 19 22:11:50 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat___sigtramp1.S,v 1.2 2008/04/28 20:22:58 martin Exp $	*/
+/*	$NetBSD: compat___sigtramp1.S,v 1.3 2013/08/19 22:11:50 matt Exp $	*/
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -39,9 +39,10 @@
  *
  *	sp->	sigcontext structure
  */
-ENTRY_NP(__sigtramp_sigcontext_1)
+ENTRY(__sigtramp_sigcontext_1)
 	mov	r0, sp			/* get pointer to sigcontext */
 	SYSTRAP(compat_16___sigreturn14) /* and call sigreturn */
 
 	/* If that failed, exit with the error code. */
 	SYSTRAP(exit)
+END(__sigtramp_sigcontext_1)
Index: src/lib/libc/compat/arch/arm/sys/compat_sigpending.S
diff -u src/lib/libc/compat/arch/arm/sys/compat_sigpending.S:1.2 src/lib/libc/compat/arch/arm/sys/compat_sigpending.S:1.3
--- src/lib/libc/compat/arch/arm/sys/compat_sigpending.S:1.2	Thu Aug  1 05:54:24 2013
+++ src/lib/libc/compat/arch/arm/sys/compat_sigpending.S	Mon Aug 19 22:11:50 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_sigpending.S,v 1.2 2013/08/01 05:54:24 matt Exp $	*/
+/*	$NetBSD: compat_sigpending.S,v 1.3 2013/08/19 22:11:50 matt Exp $	*/
 
 /*-
  * Copyright (c) 1990 The Regents of the University of California.
@@ -39,7 +39,8 @@ WARN_REFERENCES(sigpending, \
 ENTRY(sigpending)
 	mov	r2, r0
 	SYSTRAP(compat_13_sigpending13)
-	bcs	CERROR
+	_INVOKE_CERROR()
 	str	r0, [r2]
-	mov	r0, #0x00000000
+	movs	r0, #0
 	RET
+END(sigpending)
Index: src/lib/libc/compat/arch/arm/sys/compat_sigprocmask.S
diff -u src/lib/libc/compat/arch/arm/sys/compat_sigprocmask.S:1.2 src/lib/libc/compat/arch/arm/sys/compat_sigprocmask.S:1.3
--- src/lib/libc/compat/arch/arm/sys/compat_sigprocmask.S:1.2	Thu Aug  1 05:54:24 2013
+++ src/lib/libc/compat/arch/arm/sys/compat_sigprocmask.S	Mon Aug 19 22:11:50 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_sigprocmask.S,v 1.2 2013/08/01 05:54:24 matt Exp $	*/
+/*	$NetBSD: compat_sigprocmask.S,v 1.3 2013/08/19 22:11:50 matt Exp $	*/
 
 /*-
  * Copyright (c) 1990 The Regents of the University of California.
@@ -37,13 +37,35 @@ WARN_REFERENCES(sigprocmask, \
     "warning: reference to compatibility sigprocmask(); include <signal.h> for correct reference")
 
 ENTRY(sigprocmask)
-	teq	r1, #0x00000000
-	moveq	r0, #0x00000001
-	moveq	r1, #0x00000000
+	cmp	r1, #0
+#if defined(_ARM_ARCH_7) || !defined(__thumb__)
+#ifdef __thumb__
+	itte	eq
+#endif
+	moveq	r0, #1
+	moveq	r1, #0
 	ldrne	r1, [r1]
+#else
+	bne	1f
+	movs	r0, #1
+	movs	r1, #0
+	b	2f
+1:	ldr	r1, [r1]
+2:
+#endif
 	SYSTRAP(compat_13_sigprocmask13)
-	bcs	CERROR
-	teq	r2, #0x00000000
+	_INVOKE_CERROR()
+	cmp	r2, #0
+#if defined(_ARM_ARCH_7) || !defined(__thumb__)
+#ifdef __thumb__
+	it	ne
+#endif
 	strne	r0, [r2]
-	mov	r0, #0x00000000
+#else
+	beq	3f
+	str	r0, [r2]
+3:
+#endif
+	movs	r0, #0
 	RET
+END(sigprocmask)
Index: src/lib/libc/compat/arch/arm/sys/compat_sigsuspend.S
diff -u src/lib/libc/compat/arch/arm/sys/compat_sigsuspend.S:1.2 src/lib/libc/compat/arch/arm/sys/compat_sigsuspend.S:1.3
--- src/lib/libc/compat/arch/arm/sys/compat_sigsuspend.S:1.2	Thu Aug  1 05:54:24 2013
+++ src/lib/libc/compat/arch/arm/sys/compat_sigsuspend.S	Mon Aug 19 22:11:50 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat_sigsuspend.S,v 1.2 2013/08/01 05:54:24 matt Exp $	*/
+/*	$NetBSD: compat_sigsuspend.S,v 1.3 2013/08/19 22:11:50 matt Exp $	*/
 
 /*-
  * Copyright (c) 1990 The Regents of the University of California.
@@ -39,6 +39,7 @@ WARN_REFERENCES(sigsuspend, \
 ENTRY(sigsuspend)
 	ldr	r0, [r0]
 	SYSTRAP(compat_13_sigsuspend13)
-	bcs	CERROR
-	mov	r0, #0x00000000
+	_INVOKE_CERROR()
+	movs	r0, #0
 	RET
+END(sigsuspend)

Reply via email to