CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: dholland Date: Fri Dec 11 09:02:33 UTC 2020 Modified Files: src/common/lib/libc/arch/arm/gen: byte_swap_4.S Log Message: arm bswap32: fix fatal typo in thumb code (PR 55854) To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/common/lib/libc/arch/arm/gen/byte_swap_4.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/byte_swap_4.S diff -u src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.8 src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.9 --- src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.8 Wed Dec 9 02:46:57 2020 +++ src/common/lib/libc/arch/arm/gen/byte_swap_4.S Fri Dec 11 09:02:33 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: byte_swap_4.S,v 1.8 2020/12/09 02:46:57 dholland Exp $ */ +/* $NetBSD: byte_swap_4.S,v 1.9 2020/12/11 09:02:33 dholland Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -46,7 +46,7 @@ ENTRY(FUNC) eor r0, r0, r1, lsr #8 /* a.d.c.b ^ 0.db.0.db -> a.b.c.d */ #else movs r3, #16 - lsls r1, r0, #8 /* d.c.b.a -> c.b.a.0 /* + lsls r1, r0, #8 /* d.c.b.a -> c.b.a.0 */ lsrs r0, r0, #8 /* d.c.b.a -> 0.d.c.b */ rors r1, r3 /* c.b.a.0 -> a.0.c.b */ rors r0, r3 /* 0.d.c.b -> c.b.0.d */
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: dholland Date: Wed Dec 9 02:46:57 UTC 2020 Modified Files: src/common/lib/libc/arch/arm/gen: byte_swap_4.S Log Message: arm bswap32: Improve the comments showing the byte flow. It's confusing to use 1-4 for bytes 1-4 and then 0 for literal zero, so use a-d for bytes 1-4. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/common/lib/libc/arch/arm/gen/byte_swap_4.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/byte_swap_4.S diff -u src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.7 src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.8 --- src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.7 Mon Aug 19 03:44:47 2013 +++ src/common/lib/libc/arch/arm/gen/byte_swap_4.S Wed Dec 9 02:46:57 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: byte_swap_4.S,v 1.7 2013/08/19 03:44:47 matt Exp $ */ +/* $NetBSD: byte_swap_4.S,v 1.8 2020/12/09 02:46:57 dholland Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -40,21 +40,21 @@ ENTRY(FUNC) #ifdef _ARM_ARCH_6 rev r0, r0 #elif !defined(__thumb__) - eor r1, r0, r0, ror #16 /* 4.3.2.1 -> 42.31.42.31 */ - bic r1, r1, #0x00FF /* 42.31.42.31 -> 42.0.42.31 */ - mov r0, r0, ror #8 /* 4.3.2.1 -> 1.4.3.2 */ - eor r0, r0, r1, lsr #8 /* 1.4.3.2 ^ 0.42.0.42 -> 1.2.3.4 */ + eor r1, r0, r0, ror #16 /* d.c.b.a -> db.ca.db.ca */ + bic r1, r1, #0x00FF /* db.ca.db.ca -> db.0.db.ca */ + mov r0, r0, ror #8 /* d.c.b.a -> a.d.c.b */ + eor r0, r0, r1, lsr #8 /* a.d.c.b ^ 0.db.0.db -> a.b.c.d */ #else movs r3, #16 - lsls r1, r0, #8 /* 4.3.2.1 -> 3.2.1.0 /* - lsrs r0, r0, #8 /* 4.3.2.1 -> 0.4.3.2 */ - rors r1, r3 /* 3.2.1.0 -> 1.0.3.2 */ - rors r0, r3 /* 0.4.3.2 -> 3.2.0.4 */ - lsrs r1, r1, #8 /* 1.0.3.2 -> 0.1.0.3 */ - lsls r1, r1, #8 /* 0.1.0.3 -> 1.0.3.0 */ - lsls r0, r0, #8 /* 3.2.0.4 -> 2.0.4.0 */ - lsrs r0, r0, #8 /* 2.0.4.0 -> 0.2.0.4 */ - orrs r0, r0, r1 /* 1.0.3.0 | 0.2.0.4 -> 1.2.3.4 */ + lsls r1, r0, #8 /* d.c.b.a -> c.b.a.0 /* + lsrs r0, r0, #8 /* d.c.b.a -> 0.d.c.b */ + rors r1, r3 /* c.b.a.0 -> a.0.c.b */ + rors r0, r3 /* 0.d.c.b -> c.b.0.d */ + lsrs r1, r1, #8 /* a.0.c.b -> 0.a.0.c */ + lsls r1, r1, #8 /* 0.a.0.c -> a.0.c.0 */ + lsls r0, r0, #8 /* c.b.0.d -> b.0.d.0 */ + lsrs r0, r0, #8 /* b.0.d.0 -> 0.b.0.d */ + orrs r0, r0, r1 /* a.0.c.0 | 0.b.0.d -> a.b.c.d */ #endif RET END(FUNC)
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: joerg Date: Wed Jan 29 22:29:43 UTC 2014 Modified Files: src/common/lib/libc/arch/arm/gen: __aeabi_idiv0.c __aeabi_ldiv0.c Log Message: Kernel and standalone code uses panic() for broken code. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/common/lib/libc/arch/arm/gen/__aeabi_idiv0.c \ src/common/lib/libc/arch/arm/gen/__aeabi_ldiv0.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/__aeabi_idiv0.c diff -u src/common/lib/libc/arch/arm/gen/__aeabi_idiv0.c:1.2 src/common/lib/libc/arch/arm/gen/__aeabi_idiv0.c:1.3 --- src/common/lib/libc/arch/arm/gen/__aeabi_idiv0.c:1.2 Wed May 8 05:13:56 2013 +++ src/common/lib/libc/arch/arm/gen/__aeabi_idiv0.c Wed Jan 29 22:29:43 2014 @@ -29,9 +29,11 @@ #include sys/cdefs.h -__RCSID($NetBSD: __aeabi_idiv0.c,v 1.2 2013/05/08 05:13:56 matt Exp $); +__RCSID($NetBSD: __aeabi_idiv0.c,v 1.3 2014/01/29 22:29:43 joerg Exp $); -#if !defined(_KERNEL) !defined(_STANDALONE) +#if defined(_KERNEL) || defined(_STANDALONE) +#include sys/systm.h +#else #include string.h #include unistd.h #include sys/types.h @@ -44,7 +46,9 @@ __RCSID($NetBSD: __aeabi_idiv0.c,v 1.2 int __aeabi_idiv0(int result) { -#if !defined(_KERNEL) || !defined(_STANDALONE) +#if defined(_KERNEL) || defined(_STANDALONE) + panic(divide by 0); +#else siginfo_t info; memset(info, 0, sizeof info); Index: src/common/lib/libc/arch/arm/gen/__aeabi_ldiv0.c diff -u src/common/lib/libc/arch/arm/gen/__aeabi_ldiv0.c:1.2 src/common/lib/libc/arch/arm/gen/__aeabi_ldiv0.c:1.3 --- src/common/lib/libc/arch/arm/gen/__aeabi_ldiv0.c:1.2 Wed May 8 05:13:56 2013 +++ src/common/lib/libc/arch/arm/gen/__aeabi_ldiv0.c Wed Jan 29 22:29:43 2014 @@ -29,9 +29,11 @@ #include sys/cdefs.h -__RCSID($NetBSD: __aeabi_ldiv0.c,v 1.2 2013/05/08 05:13:56 matt Exp $); +__RCSID($NetBSD: __aeabi_ldiv0.c,v 1.3 2014/01/29 22:29:43 joerg Exp $); -#if !defined(_KERNEL) !defined(_STANDALONE) +#if defined(_KERNEL) || defined(_STANDALONE) +#include sys/systm.h +#else #include string.h #include unistd.h #include sys/types.h @@ -44,7 +46,9 @@ __RCSID($NetBSD: __aeabi_ldiv0.c,v 1.2 long long __aeabi_ldiv0(long long result) { -#if !defined(_KERNEL) !defined(_STANDALONE) +#if defined(_KERNEL) || defined(_STANDALONE) + panic(divide by 0); +#else siginfo_t info; memset(info, 0, sizeof info);
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Mon Sep 9 07:33:54 UTC 2013 Modified Files: src/common/lib/libc/arch/arm/gen: divsi3.S udivsi3.S Log Message: Remove movw/movt due to linker problems. Check for 0 divisor and __aeabi_idiv0 if needed (EABI _LIBC only). To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/common/lib/libc/arch/arm/gen/divsi3.S cvs rdiff -u -r1.7 -r1.8 src/common/lib/libc/arch/arm/gen/udivsi3.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/divsi3.S diff -u src/common/lib/libc/arch/arm/gen/divsi3.S:1.11 src/common/lib/libc/arch/arm/gen/divsi3.S:1.12 --- src/common/lib/libc/arch/arm/gen/divsi3.S:1.11 Mon Sep 9 00:34:10 2013 +++ src/common/lib/libc/arch/arm/gen/divsi3.S Mon Sep 9 07:33:54 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: divsi3.S,v 1.11 2013/09/09 00:34:10 matt Exp $ */ +/* $NetBSD: divsi3.S,v 1.12 2013/09/09 07:33:54 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -31,35 +31,39 @@ ENTRY(__divsi3) # endif RET #elif defined(__ARM_EABI__) defined(_LIBC) -#ifdef _ARM_ARCH_7 - movw r2, #:lower16:REL_SYM(_libc_arm_hwdiv_present, .LPIC0) - movt r2, #:upper16:REL_SYM(_libc_arm_hwdiv_present, .LPIC0) -#else + cmp r1, #0 @ dividing by 0? + beq .Ldiv0 @ call __aeabi_idiv0 ldr r2, .Lhwdiv_present -#endif # ifdef PIC - add r2, r2, pc + add r2, r2, pc @ pc = .LPIC0 # endif ldr r2, [r2] .LPIC0: cmp r2, #0 beq __divide mov r3, r0 -#if defined(__ARM_ARCH_EXT_IDIV__) +# if defined(__ARM_ARCH_EXT_IDIV__) sdiv r0, r0, r1 - mls r1, r0, r1, r3 /* return modulus in r1 */ -#elif defined(__thumb__) defined(_ARM_ARCH_T2) + mls r1, r0, r1, r3 @ return modulus in r1 +# elif defined(__thumb__) defined(_ARM_ARCH_T2) .inst.w 0xfb90f0f1 .inst.w 0xfb003111 -#else +# else .inst 0xe710f110 .inst 0xe0613190 -#endif +# endif RET -#ifndef _ARM_ARCH_7 + .align 0 .Lhwdiv_present: .word REL_SYM(_libc_arm_hwdiv_present, .LPIC0) -#endif + + .align 0 +.Ldiv0: push {r0, lr} /* save r0 */ + cmp r0, #0 + mvnge r0, #0x8000 /* INT_MAX = 0x7fff */ + movlt r0, #0x8000 /* INT_MIN = 0x8000 */ + bl _C_LABEL(__aeabi_idiv0) + pop {r1, pc} /* restore r0 as r1 */ #else /* !__ARM_EABI__ */ b __divide #endif Index: src/common/lib/libc/arch/arm/gen/udivsi3.S diff -u src/common/lib/libc/arch/arm/gen/udivsi3.S:1.7 src/common/lib/libc/arch/arm/gen/udivsi3.S:1.8 --- src/common/lib/libc/arch/arm/gen/udivsi3.S:1.7 Mon Sep 9 00:34:10 2013 +++ src/common/lib/libc/arch/arm/gen/udivsi3.S Mon Sep 9 07:33:54 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: udivsi3.S,v 1.7 2013/09/09 00:34:10 matt Exp $ */ +/* $NetBSD: udivsi3.S,v 1.8 2013/09/09 07:33:54 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -31,35 +31,38 @@ ENTRY(__udivsi3) # endif RET #elif defined(__ARM_EABI__) defined(_LIBC) -#ifdef _ARM_ARCH_7 - movw r2, #:lower16:REL_SYM(_libc_arm_hwdiv_present, .LPIC0) - movt r2, #:upper16:REL_SYM(_libc_arm_hwdiv_present, .LPIC0) -#else + cmp r1, #0 + beq .Ldiv0 ldr r2, .Lhwdiv_present -#endif -#ifdef PIC - add r2, r2, pc -#endif +# ifdef PIC + add r2, r2, pc /* pc = .LPIC0 */ +# endif ldr r2, [r2] .LPIC0: cmp r2, #0 beq __udivide mov r3, r0 -#if defined(__ARM_ARCH_EXT_IDIV__) +# if defined(__ARM_ARCH_EXT_IDIV__) udiv r0, r0, r1 mls r1, r0, r1, r3 /* return modulus in r1 */ -#elif defined(__thumb__) defined(_ARM_ARCH_T2) +# elif defined(__thumb__) defined(_ARM_ARCH_T2) .inst.w 0xfbb0f0f1 .inst.w 0xfb003111 -#else +# else .inst 0xe730f110 .inst 0xe0613190 -#endif +# endif RET -#ifndef _ARM_ARCH_7 + .align 0 .Lhwdiv_present: .word REL_SYM(_libc_arm_hwdiv_present, .LPIC0) -#endif + + /* Handle divide by zero */ + .align 0 +.Ldiv0: push {r0, lr} /* save r0 */ + mvns r0, #0 /* thumb2 */ + bl _C_LABEL(__aeabi_idiv0) + pop {r1, pc} /* restore r0 as r1 */ #else b __udivide #endif
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Sun Sep 8 13:24:16 UTC 2013 Modified Files: src/common/lib/libc/arch/arm/gen: divsi3.S udivsi3.S Log Message: Support using hwdiv instructions if those are available. But only for EABI. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/common/lib/libc/arch/arm/gen/divsi3.S cvs rdiff -u -r1.5 -r1.6 src/common/lib/libc/arch/arm/gen/udivsi3.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/divsi3.S diff -u src/common/lib/libc/arch/arm/gen/divsi3.S:1.9 src/common/lib/libc/arch/arm/gen/divsi3.S:1.10 --- src/common/lib/libc/arch/arm/gen/divsi3.S:1.9 Thu Sep 5 05:16:08 2013 +++ src/common/lib/libc/arch/arm/gen/divsi3.S Sun Sep 8 13:24:16 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: divsi3.S,v 1.9 2013/09/05 05:16:08 matt Exp $ */ +/* $NetBSD: divsi3.S,v 1.10 2013/09/08 13:24:16 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -16,7 +16,11 @@ #include machine/asm.h +#if defined(__thumb__) !defined(_ARM_ARCH_T2) +ARM_ENTRY(__divsi3) +#else ENTRY(__divsi3) +#endif #if defined(__ARM_ARCH_EXT_IDIV__) # if defined(__ARM_EABI__) mov r3, r0 @ save for mls @@ -26,25 +30,38 @@ ENTRY(__divsi3) mls r1, r0, r1, r3 @ return modulus in r1 # endif RET -#elif !defined(__thumb__) || defined(_ARM_ARCH_T2) - b __divide +#elif defined(__ARM_EABI__) defined(_LIBC) +#ifdef _ARM_ARCH_7 + movw r2, #:lower16:REL_SYM(__libc_arm_hwdiv_present, .LPIC0) + movt r2, #:upper16:REL_SYM(__libc_arm_hwdiv_present, .LPIC0) #else -#if defined(__ARM_EABI__) defined(__UNWIND_TABLES__) - .fnstart - .cfi_startproc -#endif - push {r4, lr} -#if defined(__ARM_EABI__) defined(__UNWIND_TABLES__) - .cfi_def_cfa_offset 8 - .cfi_offset 14, -4 - .cfi_offset 4, -8 -#endif - bl __divide - pop {r4, pc} -#if defined(__ARM_EABI__) defined(__UNWIND_TABLES__) - .cfi_endproc - .fnend + ldr r2, .Lhwdiv_present #endif +# ifdef PIC + add r2, r2, pc +# endif + ldr r2, [r2] +.LPIC0: cmp r2, #0 + beq __divide + mov r3, r0 +#if defined(__ARM_ARCH_EXT_IDIV__) + sdiv r0, r0, r1 + mls r1, r0, r1, r3 /* return modulus in r1 */ +#elif defined(__thumb__) defined(_ARM_ARCH_T2) + .inst.w 0xfb90f0f1 + .inst.w 0xfb003111 +#else + .inst 0xe710f110 + .inst 0xe0613190 +#endif + RET +#ifndef _ARM_ARCH_7 + .align 0 +.Lhwdiv_present: + .word REL_SYM(__libc_arm_hwdiv_present, .LPIC0) +#endif +#else /* !__ARM_EABI__ */ + b __divide #endif END(__divsi3) Index: src/common/lib/libc/arch/arm/gen/udivsi3.S diff -u src/common/lib/libc/arch/arm/gen/udivsi3.S:1.5 src/common/lib/libc/arch/arm/gen/udivsi3.S:1.6 --- src/common/lib/libc/arch/arm/gen/udivsi3.S:1.5 Thu Sep 5 05:16:08 2013 +++ src/common/lib/libc/arch/arm/gen/udivsi3.S Sun Sep 8 13:24:16 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: udivsi3.S,v 1.5 2013/09/05 05:16:08 matt Exp $ */ +/* $NetBSD: udivsi3.S,v 1.6 2013/09/08 13:24:16 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -16,7 +16,11 @@ #include machine/asm.h +#if defined(__ARM_EABI__) defined(__thumb__) !defined(_ARM_ARCH_T2) +ARM_ENTRY(__udivsi3) +#else ENTRY(__udivsi3) +#endif #if defined(__ARM_ARCH_EXT_IDIV__) # if defined(__ARM_EABI__) mov r3, r0 @ save for mls @@ -26,26 +30,38 @@ ENTRY(__udivsi3) mls r1, r0, r1, r3 @ return modulus in r1 # endif RET -#elif !defined(__thumb__) || defined(_ARM_ARCH_T2) - b __udivide +#elif defined(__ARM_EABI__) defined(_LIBC) +#ifdef _ARM_ARCH_7 + movw r2, #:lower16:REL_SYM(__libc_arm_hwdiv_present, .LPIC0) + movt r2, #:upper16:REL_SYM(__libc_arm_hwdiv_present, .LPIC0) +#else + ldr r2, .Lhwdiv_present +#endif +#ifdef PIC + add r2, r2, pc +#endif + ldr r2, [r2] +.LPIC0: cmp r2, #0 + beq __udivide + mov r3, r0 +#if defined(__ARM_ARCH_EXT_IDIV__) + udiv r0, r0, r1 + mls r1, r0, r1, r3 /* return modulus in r1 */ +#elif defined(__thumb__) defined(_ARM_ARCH_T2) + .inst.w 0xfbb0f0f1 + .inst.w 0xfb003111 #else -#if defined(__ARM_EABI__) defined(__UNWIND_TABLES__) - .fnstart - .cfi_startproc -#endif - push {r4, lr} -#if defined(__ARM_EABI__) defined(__UNWIND_TABLES__) - .save {r4, lr} - .cfi_def_cfa_offset 8 - .cfi_offset 14, -4 - .cfi_offset 4, -8 -#endif - bl __udivide - pop {r4, pc} -#if defined(__ARM_EABI__) defined(__UNWIND_TABLES__) - .cfi_endproc - .fnend + .inst 0xe730f110 + .inst 0xe0613190 +#endif + RET +#ifndef _ARM_ARCH_7 + .align 0 +.Lhwdiv_present: + .word REL_SYM(__libc_arm_hwdiv_present, .LPIC0) #endif +#else + b __udivide #endif END(__udivsi3)
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Mon Sep 9 00:34:10 UTC 2013 Modified Files: src/common/lib/libc/arch/arm/gen: divsi3.S udivsi3.S Log Message: s/__libc/_libc/ To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/common/lib/libc/arch/arm/gen/divsi3.S cvs rdiff -u -r1.6 -r1.7 src/common/lib/libc/arch/arm/gen/udivsi3.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/divsi3.S diff -u src/common/lib/libc/arch/arm/gen/divsi3.S:1.10 src/common/lib/libc/arch/arm/gen/divsi3.S:1.11 --- src/common/lib/libc/arch/arm/gen/divsi3.S:1.10 Sun Sep 8 13:24:16 2013 +++ src/common/lib/libc/arch/arm/gen/divsi3.S Mon Sep 9 00:34:10 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: divsi3.S,v 1.10 2013/09/08 13:24:16 matt Exp $ */ +/* $NetBSD: divsi3.S,v 1.11 2013/09/09 00:34:10 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -32,8 +32,8 @@ ENTRY(__divsi3) RET #elif defined(__ARM_EABI__) defined(_LIBC) #ifdef _ARM_ARCH_7 - movw r2, #:lower16:REL_SYM(__libc_arm_hwdiv_present, .LPIC0) - movt r2, #:upper16:REL_SYM(__libc_arm_hwdiv_present, .LPIC0) + movw r2, #:lower16:REL_SYM(_libc_arm_hwdiv_present, .LPIC0) + movt r2, #:upper16:REL_SYM(_libc_arm_hwdiv_present, .LPIC0) #else ldr r2, .Lhwdiv_present #endif @@ -58,7 +58,7 @@ ENTRY(__divsi3) #ifndef _ARM_ARCH_7 .align 0 .Lhwdiv_present: - .word REL_SYM(__libc_arm_hwdiv_present, .LPIC0) + .word REL_SYM(_libc_arm_hwdiv_present, .LPIC0) #endif #else /* !__ARM_EABI__ */ b __divide Index: src/common/lib/libc/arch/arm/gen/udivsi3.S diff -u src/common/lib/libc/arch/arm/gen/udivsi3.S:1.6 src/common/lib/libc/arch/arm/gen/udivsi3.S:1.7 --- src/common/lib/libc/arch/arm/gen/udivsi3.S:1.6 Sun Sep 8 13:24:16 2013 +++ src/common/lib/libc/arch/arm/gen/udivsi3.S Mon Sep 9 00:34:10 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: udivsi3.S,v 1.6 2013/09/08 13:24:16 matt Exp $ */ +/* $NetBSD: udivsi3.S,v 1.7 2013/09/09 00:34:10 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -32,8 +32,8 @@ ENTRY(__udivsi3) RET #elif defined(__ARM_EABI__) defined(_LIBC) #ifdef _ARM_ARCH_7 - movw r2, #:lower16:REL_SYM(__libc_arm_hwdiv_present, .LPIC0) - movt r2, #:upper16:REL_SYM(__libc_arm_hwdiv_present, .LPIC0) + movw r2, #:lower16:REL_SYM(_libc_arm_hwdiv_present, .LPIC0) + movt r2, #:upper16:REL_SYM(_libc_arm_hwdiv_present, .LPIC0) #else ldr r2, .Lhwdiv_present #endif @@ -58,7 +58,7 @@ ENTRY(__udivsi3) #ifndef _ARM_ARCH_7 .align 0 .Lhwdiv_present: - .word REL_SYM(__libc_arm_hwdiv_present, .LPIC0) + .word REL_SYM(_libc_arm_hwdiv_present, .LPIC0) #endif #else b __udivide
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Thu Sep 5 05:16:08 UTC 2013 Modified Files: src/common/lib/libc/arch/arm/gen: divsi3.S udivsi3.S Log Message: Use __ARM_EABI__ and new __UNWIND_TABLES__ to decide when to use .cfi ops To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/common/lib/libc/arch/arm/gen/divsi3.S cvs rdiff -u -r1.4 -r1.5 src/common/lib/libc/arch/arm/gen/udivsi3.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/divsi3.S diff -u src/common/lib/libc/arch/arm/gen/divsi3.S:1.8 src/common/lib/libc/arch/arm/gen/divsi3.S:1.9 --- src/common/lib/libc/arch/arm/gen/divsi3.S:1.8 Thu Aug 22 19:25:00 2013 +++ src/common/lib/libc/arch/arm/gen/divsi3.S Thu Sep 5 05:16:08 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: divsi3.S,v 1.8 2013/08/22 19:25:00 matt Exp $ */ +/* $NetBSD: divsi3.S,v 1.9 2013/09/05 05:16:08 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -29,19 +29,19 @@ ENTRY(__divsi3) #elif !defined(__thumb__) || defined(_ARM_ARCH_T2) b __divide #else -#if defined(__ARM_EABI__) (!defined(_KERNEL) !defined(_STANDALONE)) +#if defined(__ARM_EABI__) defined(__UNWIND_TABLES__) .fnstart .cfi_startproc #endif push {r4, lr} -#if defined(__ARM_EABI__) (!defined(_KERNEL) !defined(_STANDALONE)) +#if defined(__ARM_EABI__) defined(__UNWIND_TABLES__) .cfi_def_cfa_offset 8 .cfi_offset 14, -4 .cfi_offset 4, -8 #endif bl __divide pop {r4, pc} -#ifdef __ARM_EABI__ +#if defined(__ARM_EABI__) defined(__UNWIND_TABLES__) .cfi_endproc .fnend #endif Index: src/common/lib/libc/arch/arm/gen/udivsi3.S diff -u src/common/lib/libc/arch/arm/gen/udivsi3.S:1.4 src/common/lib/libc/arch/arm/gen/udivsi3.S:1.5 --- src/common/lib/libc/arch/arm/gen/udivsi3.S:1.4 Thu Aug 22 19:25:00 2013 +++ src/common/lib/libc/arch/arm/gen/udivsi3.S Thu Sep 5 05:16:08 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: udivsi3.S,v 1.4 2013/08/22 19:25:00 matt Exp $ */ +/* $NetBSD: udivsi3.S,v 1.5 2013/09/05 05:16:08 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -29,12 +29,12 @@ ENTRY(__udivsi3) #elif !defined(__thumb__) || defined(_ARM_ARCH_T2) b __udivide #else -#if defined(__ARM_EABI__) (!defined(_KERNEL) !defined(_STANDALONE)) +#if defined(__ARM_EABI__) defined(__UNWIND_TABLES__) .fnstart .cfi_startproc #endif push {r4, lr} -#if defined(__ARM_EABI__) (!defined(_KERNEL) !defined(_STANDALONE)) +#if defined(__ARM_EABI__) defined(__UNWIND_TABLES__) .save {r4, lr} .cfi_def_cfa_offset 8 .cfi_offset 14, -4 @@ -42,7 +42,7 @@ ENTRY(__udivsi3) #endif bl __udivide pop {r4, pc} -#ifdef __ARM_EABI__ +#if defined(__ARM_EABI__) defined(__UNWIND_TABLES__) .cfi_endproc .fnend #endif
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Mon Aug 19 03:44:47 UTC 2013 Modified Files: src/common/lib/libc/arch/arm/gen: byte_swap_4.S Log Message: Add thumb version Use STRONG_ALIAS To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/common/lib/libc/arch/arm/gen/byte_swap_4.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/byte_swap_4.S diff -u src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.6 src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.7 --- src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.6 Wed Jan 16 21:48:56 2013 +++ src/common/lib/libc/arch/arm/gen/byte_swap_4.S Mon Aug 19 03:44:47 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: byte_swap_4.S,v 1.6 2013/01/16 21:48:56 matt Exp $ */ +/* $NetBSD: byte_swap_4.S,v 1.7 2013/08/19 03:44:47 matt Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -32,21 +32,34 @@ #include machine/asm.h #if defined(_KERNEL) || defined(_STANDALONE) -_ENTRY(_C_LABEL(bswap32)) +#define FUNC _C_LABEL(bswap32) #else -_ENTRY(_C_LABEL(__bswap32)) +#define FUNC _C_LABEL(__bswap32) #endif -#if BYTE_ORDER == LITTLE_ENDIAN -_ENTRY(_C_LABEL(ntohl)) -_ENTRY(_C_LABEL(htonl)) -#endif -_PROF_PROLOGUE +ENTRY(FUNC) #ifdef _ARM_ARCH_6 rev r0, r0 -#else +#elif !defined(__thumb__) eor r1, r0, r0, ror #16 /* 4.3.2.1 - 42.31.42.31 */ bic r1, r1, #0x00FF /* 42.31.42.31 - 42.0.42.31 */ mov r0, r0, ror #8 /* 4.3.2.1 - 1.4.3.2 */ eor r0, r0, r1, lsr #8 /* 1.4.3.2 ^ 0.42.0.42 - 1.2.3.4 */ +#else + movs r3, #16 + lsls r1, r0, #8 /* 4.3.2.1 - 3.2.1.0 /* + lsrs r0, r0, #8 /* 4.3.2.1 - 0.4.3.2 */ + rors r1, r3 /* 3.2.1.0 - 1.0.3.2 */ + rors r0, r3 /* 0.4.3.2 - 3.2.0.4 */ + lsrs r1, r1, #8 /* 1.0.3.2 - 0.1.0.3 */ + lsls r1, r1, #8 /* 0.1.0.3 - 1.0.3.0 */ + lsls r0, r0, #8 /* 3.2.0.4 - 2.0.4.0 */ + lsrs r0, r0, #8 /* 2.0.4.0 - 0.2.0.4 */ + orrs r0, r0, r1 /* 1.0.3.0 | 0.2.0.4 - 1.2.3.4 */ #endif RET +END(FUNC) + +#if BYTE_ORDER == LITTLE_ENDIAN +STRONG_ALIAS(_C_LABEL(ntohl), FUNC) +STRONG_ALIAS(_C_LABEL(htonl), FUNC) +#endif
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Mon Aug 19 03:44:18 UTC 2013 Modified Files: src/common/lib/libc/arch/arm/gen: byte_swap_2.S Log Message: Use STRONG_ALIAS Add thumb variation To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/common/lib/libc/arch/arm/gen/byte_swap_2.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/byte_swap_2.S diff -u src/common/lib/libc/arch/arm/gen/byte_swap_2.S:1.5 src/common/lib/libc/arch/arm/gen/byte_swap_2.S:1.6 --- src/common/lib/libc/arch/arm/gen/byte_swap_2.S:1.5 Tue Nov 27 23:57:07 2012 +++ src/common/lib/libc/arch/arm/gen/byte_swap_2.S Mon Aug 19 03:44:18 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: byte_swap_2.S,v 1.5 2012/11/27 23:57:07 matt Exp $ */ +/* $NetBSD: byte_swap_2.S,v 1.6 2013/08/19 03:44:18 matt Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -32,20 +32,30 @@ #include machine/asm.h #if defined(_KERNEL) || defined(_STANDALONE) -_ENTRY(_C_LABEL(bswap16)) +#define FUNC _C_LABEL(bswap16) #else -_ENTRY(_C_LABEL(__bswap16)) +#define FUNC _C_LABEL(__bswap16) #endif -#if BYTE_ORDER == LITTLE_ENDIAN -_ENTRY(_C_LABEL(ntohs)) -_ENTRY(_C_LABEL(htons)) -#endif -_PROF_PROLOGUE + +ENTRY(FUNC) #ifdef _ARM_ARCH_6 rev16 r0, r0 -#else +#elif !defined(__thumb__) and r1, r0, #0xff mov r0, r0, lsr #8 orr r0, r0, r1, lsl #8 +#else + movs r2, #0xff + movs r1, r0 + ands r1, r1, r2 + lsls r1, r1, #8 + lsrs r0, r0, #8 + ands r0, r0, r2 + orrs r0, r0, r1 #endif RET +END(FUNC) +#if BYTE_ORDER == LITTLE_ENDIAN +STRONG_ALIAS(_C_LABEL(ntohs), FUNC) +STRONG_ALIAS(_C_LABEL(htons), FUNC) +#endif
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Mon Aug 19 03:47:06 UTC 2013 Modified Files: src/common/lib/libc/arch/arm/gen: divide.S Log Message: This is ARM only To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/common/lib/libc/arch/arm/gen/divide.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/divide.S diff -u src/common/lib/libc/arch/arm/gen/divide.S:1.3 src/common/lib/libc/arch/arm/gen/divide.S:1.4 --- src/common/lib/libc/arch/arm/gen/divide.S:1.3 Thu Jun 20 07:16:23 2013 +++ src/common/lib/libc/arch/arm/gen/divide.S Mon Aug 19 03:47:06 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: divide.S,v 1.3 2013/06/20 07:16:23 matt Exp $ */ +/* $NetBSD: divide.S,v 1.4 2013/08/19 03:47:06 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -23,25 +23,7 @@ * which makes a C call */ -.L_overflow: -#if !defined(_KERNEL) !defined(_STANDALONE) -#ifdef __ARM_EABI__ - mov r0, r1/* return quotient */ - b PLT_SYM(__aeabi_idiv0) -#else - mov r0, #8 /* SIGFPE */ - bl PLT_SYM(_C_LABEL(raise)) /* raise it */ - mov r0, #0 - RET -#endif -#else - /* XXX should cause a fatal error */ - mvn r0, #0 - RET -#endif - - .globl __udivide -__udivide:/* r0 = r0 / r1; r1 = r0 % r1 */ +_ARM_ENTRY(__udivide) /* r0 = r0 / r1; r1 = r0 % r1 */ eor r0, r1, r0 eor r1, r0, r1 eor r0, r1, r0 @@ -61,9 +43,9 @@ __udivide:/* r0 = r0 / r1; r1 = r0 % mov r0, r1 mov r1, #0 RET +END(__udivide) - .globl __divide -__divide:/* r0 = r0 / r1; r1 = r0 % r1 */ +_ARM_ENTRY(__divide) /* r0 = r0 / r1; r1 = r0 % r1 */ eor r0, r1, r0 eor r1, r0, r1 eor r0, r1, r0 @@ -377,4 +359,23 @@ __divide:/* r0 = r0 / r1; r1 = r0 % mov r0, r3 RET +.L_overflow: +#if !defined(_KERNEL) !defined(_STANDALONE) +#ifdef __ARM_EABI__ + mov r0, r1/* return quotient */ + b PLT_SYM(__aeabi_idiv0) +#else + mov r0, #8 /* SIGFPE */ + bl PLT_SYM(_C_LABEL(raise)) /* raise it */ + mov r0, #0 + RET +#endif +#else + /* XXX should cause a fatal error */ + mvn r0, #0 + RET +#endif + +END(__divide) + #endif /* __ARM_ARCH_EXT_IDIV__ */
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Mon Aug 19 03:51:04 UTC 2013 Modified Files: src/common/lib/libc/arch/arm/gen: udivsi3.S Log Message: thumbify add .cfi ops (for thumb) To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/common/lib/libc/arch/arm/gen/udivsi3.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/udivsi3.S diff -u src/common/lib/libc/arch/arm/gen/udivsi3.S:1.2 src/common/lib/libc/arch/arm/gen/udivsi3.S:1.3 --- src/common/lib/libc/arch/arm/gen/udivsi3.S:1.2 Thu Jun 20 07:16:23 2013 +++ src/common/lib/libc/arch/arm/gen/udivsi3.S Mon Aug 19 03:51:04 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: udivsi3.S,v 1.2 2013/06/20 07:16:23 matt Exp $ */ +/* $NetBSD: udivsi3.S,v 1.3 2013/08/19 03:51:04 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -16,9 +16,6 @@ #include machine/asm.h - -ENTRY_NP(__aeabi_uidivmod) -ENTRY_NP(__aeabi_uidiv) ENTRY(__udivsi3) #if defined(__ARM_ARCH_EXT_IDIV__) # if defined(__ARM_EABI__) @@ -29,6 +26,30 @@ ENTRY(__udivsi3) mls r1, r0, r1, r3 @ return modulus in r1 # endif RET -#else +#elif !defined(__thumb__) || defined(_ARM_ARCH_T2) b __udivide +#else +#ifdef __ARM_EABI__ + .fnstart + .cfi_startproc +#endif + push {r4, lr} +#ifdef __ARM_EABI__ + .save {r4, lr} + .cfi_def_cfa_offset 8 + .cfi_offset 14, -4 + .cfi_offset 4, -8 +#endif + bl __udivide + pop {r4, pc} +#ifdef __ARM_EABI__ + .cfi_endproc + .fnend +#endif +#endif +END(__udivsi3) + +#ifdef __ARM_EABI__ +STRONG_ALIAS(__aeabi_uidivmod, __udivsi3) +STRONG_ALIAS(__aeabi_uidiv, __udivsi3) #endif
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Mon Aug 19 03:54:15 UTC 2013 Modified Files: src/common/lib/libc/arch/arm/gen: divsi3.S Log Message: Thumbify (and use .cfi ops) To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/common/lib/libc/arch/arm/gen/divsi3.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/divsi3.S diff -u src/common/lib/libc/arch/arm/gen/divsi3.S:1.6 src/common/lib/libc/arch/arm/gen/divsi3.S:1.7 --- src/common/lib/libc/arch/arm/gen/divsi3.S:1.6 Thu Jun 20 07:16:23 2013 +++ src/common/lib/libc/arch/arm/gen/divsi3.S Mon Aug 19 03:54:15 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: divsi3.S,v 1.6 2013/06/20 07:16:23 matt Exp $ */ +/* $NetBSD: divsi3.S,v 1.7 2013/08/19 03:54:15 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -16,12 +16,6 @@ #include machine/asm.h -ENTRY_NP(__aeabi_idivmod) -ENTRY_NP(__aeabi_idiv) -#if defined(__ARM_EABI__) defined(PIC_SYMVER) - .symver __aeabi_idiv,__aeabi_idiv@@GCC_3.5 - .symver __aeabi_idivmod,__aeabi_idivmod@@GCC_3.5 -#endif ENTRY(__divsi3) #if defined(__ARM_ARCH_EXT_IDIV__) # if defined(__ARM_EABI__) @@ -32,6 +26,33 @@ ENTRY(__divsi3) mls r1, r0, r1, r3 @ return modulus in r1 # endif RET -#else +#elif !defined(__thumb__) || defined(_ARM_ARCH_T2) b __divide +#else +#ifdef __ARM_EABI__ + .fnstart + .cfi_startproc +#endif + push {r4, lr} +#ifdef __ARM_EABI__ + .cfi_def_cfa_offset 8 + .cfi_offset 14, -4 + .cfi_offset 4, -8 +#endif + bl __divide + pop {r4, pc} +#ifdef __ARM_EABI__ + .cfi_endproc + .fnend +#endif +#endif +END(__divsi3) + +#if defined(__ARM_EABI__) +STRONG_ALIAS(__aeabi_idivmod, __divsi3) +STRONG_ALIAS(__aeabi_idiv, __divsi3) +#if defined(PIC_SYMVER) + .symver __aeabi_idiv,__aeabi_idiv@@GCC_3.5 + .symver __aeabi_idivmod,__aeabi_idivmod@@GCC_3.5 +#endif #endif
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Thu Aug 15 21:40:11 UTC 2013 Modified Files: src/common/lib/libc/arch/arm/gen: modsi3.S umodsi3.S Log Message: Only assemble if !__ARM_EABI__ To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/common/lib/libc/arch/arm/gen/modsi3.S \ src/common/lib/libc/arch/arm/gen/umodsi3.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/modsi3.S diff -u src/common/lib/libc/arch/arm/gen/modsi3.S:1.3 src/common/lib/libc/arch/arm/gen/modsi3.S:1.4 --- src/common/lib/libc/arch/arm/gen/modsi3.S:1.3 Thu Jun 20 07:16:23 2013 +++ src/common/lib/libc/arch/arm/gen/modsi3.S Thu Aug 15 21:40:11 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: modsi3.S,v 1.3 2013/06/20 07:16:23 matt Exp $ */ +/* $NetBSD: modsi3.S,v 1.4 2013/08/15 21:40:11 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -16,6 +16,7 @@ #include machine/asm.h +#ifndef __ARM_EABI__ /* * stack is aligned as there's a possibility of branching to .L_overflow * which makes a C call @@ -33,3 +34,5 @@ ENTRY(__modsi3) #endif RET END(__modsi3) + +#endif Index: src/common/lib/libc/arch/arm/gen/umodsi3.S diff -u src/common/lib/libc/arch/arm/gen/umodsi3.S:1.3 src/common/lib/libc/arch/arm/gen/umodsi3.S:1.4 --- src/common/lib/libc/arch/arm/gen/umodsi3.S:1.3 Thu Jun 20 07:16:23 2013 +++ src/common/lib/libc/arch/arm/gen/umodsi3.S Thu Aug 15 21:40:11 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: umodsi3.S,v 1.3 2013/06/20 07:16:23 matt Exp $ */ +/* $NetBSD: umodsi3.S,v 1.4 2013/08/15 21:40:11 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -16,6 +16,7 @@ #include machine/asm.h +#ifndef __ARM_EABI__ /* * stack is aligned as there's a possibility of branching to .L_overflow * which makes a C call @@ -32,3 +33,5 @@ ENTRY(__umodsi3) ldr lr, [sp], #8 /* pop lr */ #endif RET +END(__umodsi3) +#endif
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Thu Jun 20 07:16:23 UTC 2013 Modified Files: src/common/lib/libc/arch/arm/gen: divide.S divsi3.S modsi3.S udivsi3.S umodsi3.S Log Message: Add support for __ARM_ARCH_EXT_IDIV__ which is set for those cores with hardware divide instructions. Note that gcc 4.5.x doesn't support this so this is just latent. gcc 4.7.x does. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/common/lib/libc/arch/arm/gen/divide.S \ src/common/lib/libc/arch/arm/gen/modsi3.S \ src/common/lib/libc/arch/arm/gen/umodsi3.S cvs rdiff -u -r1.5 -r1.6 src/common/lib/libc/arch/arm/gen/divsi3.S cvs rdiff -u -r1.1 -r1.2 src/common/lib/libc/arch/arm/gen/udivsi3.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/divide.S diff -u src/common/lib/libc/arch/arm/gen/divide.S:1.2 src/common/lib/libc/arch/arm/gen/divide.S:1.3 --- src/common/lib/libc/arch/arm/gen/divide.S:1.2 Wed May 8 05:13:56 2013 +++ src/common/lib/libc/arch/arm/gen/divide.S Thu Jun 20 07:16:23 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: divide.S,v 1.2 2013/05/08 05:13:56 matt Exp $ */ +/* $NetBSD: divide.S,v 1.3 2013/06/20 07:16:23 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -14,6 +14,8 @@ * SUCH DAMAGE. */ +#ifndef __ARM_ARCH_EXT_IDIV__ + #include machine/asm.h /* @@ -374,3 +376,5 @@ __divide:/* r0 = r0 / r1; r1 = r0 % addhs r3, r3, r2 mov r0, r3 RET + +#endif /* __ARM_ARCH_EXT_IDIV__ */ Index: src/common/lib/libc/arch/arm/gen/modsi3.S diff -u src/common/lib/libc/arch/arm/gen/modsi3.S:1.2 src/common/lib/libc/arch/arm/gen/modsi3.S:1.3 --- src/common/lib/libc/arch/arm/gen/modsi3.S:1.2 Wed Nov 28 01:35:05 2012 +++ src/common/lib/libc/arch/arm/gen/modsi3.S Thu Jun 20 07:16:23 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: modsi3.S,v 1.2 2012/11/28 01:35:05 matt Exp $ */ +/* $NetBSD: modsi3.S,v 1.3 2013/06/20 07:16:23 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -22,9 +22,14 @@ */ ENTRY(__modsi3) +#ifdef __ARM_ARCH_EXT_IDIV__ + sdiv r3, r0, r1 + mls r0, r3, r1, r0 +#else str lr, [sp, #-8]! /* push lr */ bl PIC_SYM(__divsi3, PLT) mov r0, r1 ldr lr, [sp], #8 /* pop lr */ +#endif RET END(__modsi3) Index: src/common/lib/libc/arch/arm/gen/umodsi3.S diff -u src/common/lib/libc/arch/arm/gen/umodsi3.S:1.2 src/common/lib/libc/arch/arm/gen/umodsi3.S:1.3 --- src/common/lib/libc/arch/arm/gen/umodsi3.S:1.2 Wed Nov 28 01:35:05 2012 +++ src/common/lib/libc/arch/arm/gen/umodsi3.S Thu Jun 20 07:16:23 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: umodsi3.S,v 1.2 2012/11/28 01:35:05 matt Exp $ */ +/* $NetBSD: umodsi3.S,v 1.3 2013/06/20 07:16:23 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -22,8 +22,13 @@ */ ENTRY(__umodsi3) +#ifdef __ARM_ARCH_EXT_IDIV__ + udiv r3, r0, r1 + mls r0, r3, r1, r0 +#else str lr, [sp, #-8]! /* push lr */ bl PIC_SYM(__udivsi3, PLT) mov r0, r1 ldr lr, [sp], #8 /* pop lr */ +#endif RET Index: src/common/lib/libc/arch/arm/gen/divsi3.S diff -u src/common/lib/libc/arch/arm/gen/divsi3.S:1.5 src/common/lib/libc/arch/arm/gen/divsi3.S:1.6 --- src/common/lib/libc/arch/arm/gen/divsi3.S:1.5 Wed May 8 05:13:56 2013 +++ src/common/lib/libc/arch/arm/gen/divsi3.S Thu Jun 20 07:16:23 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: divsi3.S,v 1.5 2013/05/08 05:13:56 matt Exp $ */ +/* $NetBSD: divsi3.S,v 1.6 2013/06/20 07:16:23 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -23,4 +23,15 @@ ENTRY_NP(__aeabi_idiv) .symver __aeabi_idivmod,__aeabi_idivmod@@GCC_3.5 #endif ENTRY(__divsi3) +#if defined(__ARM_ARCH_EXT_IDIV__) +# if defined(__ARM_EABI__) + mov r3, r0 @ save for mls +# endif + sdiv r0, r0, r1 +# if defined(__ARM_EABI__) + mls r1, r0, r1, r3 @ return modulus in r1 +# endif + RET +#else b __divide +#endif Index: src/common/lib/libc/arch/arm/gen/udivsi3.S diff -u src/common/lib/libc/arch/arm/gen/udivsi3.S:1.1 src/common/lib/libc/arch/arm/gen/udivsi3.S:1.2 --- src/common/lib/libc/arch/arm/gen/udivsi3.S:1.1 Tue Oct 30 12:42:13 2012 +++ src/common/lib/libc/arch/arm/gen/udivsi3.S Thu Jun 20 07:16:23 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: udivsi3.S,v 1.1 2012/10/30 12:42:13 christos Exp $ */ +/* $NetBSD: udivsi3.S,v 1.2 2013/06/20 07:16:23 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -20,4 +20,15 @@ ENTRY_NP(__aeabi_uidivmod) ENTRY_NP(__aeabi_uidiv) ENTRY(__udivsi3) +#if defined(__ARM_ARCH_EXT_IDIV__) +# if defined(__ARM_EABI__) + mov r3, r0 @ save for mls +# endif + udiv r0, r0, r1 +# if defined(__ARM_EABI__) + mls r1, r0, r1, r3 @ return modulus in r1 +# endif + RET +#else b __udivide +#endif
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Wed Jan 23 07:38:20 UTC 2013 Added Files: src/common/lib/libc/arch/arm/gen: __aeabi_idiv0.c __aeabi_ldiv0.c Log Message: Add EABI support routines to raise SIGFPE on integer divide by 0. To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/common/lib/libc/arch/arm/gen/__aeabi_idiv0.c \ src/common/lib/libc/arch/arm/gen/__aeabi_ldiv0.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Added files: Index: src/common/lib/libc/arch/arm/gen/__aeabi_idiv0.c diff -u /dev/null src/common/lib/libc/arch/arm/gen/__aeabi_idiv0.c:1.1 --- /dev/null Wed Jan 23 07:38:20 2013 +++ src/common/lib/libc/arch/arm/gen/__aeabi_idiv0.c Wed Jan 23 07:38:19 2013 @@ -0,0 +1,59 @@ +/*- + * Copyright (c) 2012 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Matt Thomas of 3am Software Foundry. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *notice, this list of conditions and the following disclaimer in the + *documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include sys/cdefs.h + +__RCSID($NetBSD: __aeabi_idiv0.c,v 1.1 2013/01/23 07:38:19 matt Exp $); + +#if !defined(_KERNEL) +#include string.h +#include unistd.h +#include sys/types.h +#include sys/signal.h +#include sys/siginfo.h +#endif + +#include arm/aeabi.h + +int +__aeabi_idiv0(int result) +{ +#ifdef _KERNEL +#else + siginfo_t info; + + memset(info, 0, sizeof info); + info.si_signo = SIGFPE; + info.si_pid = getpid(); + info.si_uid = geteuid(); + info.si_code = FPE_INTDIV; + sigqueueinfo(getpid(), info); +#endif + return result; +} Index: src/common/lib/libc/arch/arm/gen/__aeabi_ldiv0.c diff -u /dev/null src/common/lib/libc/arch/arm/gen/__aeabi_ldiv0.c:1.1 --- /dev/null Wed Jan 23 07:38:20 2013 +++ src/common/lib/libc/arch/arm/gen/__aeabi_ldiv0.c Wed Jan 23 07:38:19 2013 @@ -0,0 +1,59 @@ +/*- + * Copyright (c) 2012 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Matt Thomas of 3am Software Foundry. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *notice, this list of conditions and the following disclaimer in the + *documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include sys/cdefs.h + +__RCSID($NetBSD: __aeabi_ldiv0.c,v 1.1 2013/01/23 07:38:19 matt Exp $); + +#if !defined(_KERNEL) +#include string.h +#include unistd.h +#include sys/types.h +#include sys/signal.h +#include sys/siginfo.h +#endif + +#include arm/aeabi.h + +long long +__aeabi_ldiv0(long long result)
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Wed Jan 16 21:48:56 UTC 2013 Modified Files: src/common/lib/libc/arch/arm/gen: byte_swap_4.S Log Message: Add some comments to illustrate what is actually happening. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/common/lib/libc/arch/arm/gen/byte_swap_4.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/byte_swap_4.S diff -u src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.5 src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.6 --- src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.5 Tue Nov 27 23:57:07 2012 +++ src/common/lib/libc/arch/arm/gen/byte_swap_4.S Wed Jan 16 21:48:56 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: byte_swap_4.S,v 1.5 2012/11/27 23:57:07 matt Exp $ */ +/* $NetBSD: byte_swap_4.S,v 1.6 2013/01/16 21:48:56 matt Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -42,11 +42,11 @@ _ENTRY(_C_LABEL(htonl)) #endif _PROF_PROLOGUE #ifdef _ARM_ARCH_6 - rev r0, r0 + rev r0, r0 #else - eor r1, r0, r0, ror #16 - bic r1, r1, #0x00FF - mov r0, r0, ror #8 - eor r0, r0, r1, lsr #8 + eor r1, r0, r0, ror #16 /* 4.3.2.1 - 42.31.42.31 */ + bic r1, r1, #0x00FF /* 42.31.42.31 - 42.0.42.31 */ + mov r0, r0, ror #8 /* 4.3.2.1 - 1.4.3.2 */ + eor r0, r0, r1, lsr #8 /* 1.4.3.2 ^ 0.42.0.42 - 1.2.3.4 */ #endif RET
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Tue Dec 18 06:14:23 UTC 2012 Modified Files: src/common/lib/libc/arch/arm/gen: neon_mask.S Log Message: Don't need to include assym.h Add a missing comma. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/common/lib/libc/arch/arm/gen/neon_mask.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/neon_mask.S diff -u src/common/lib/libc/arch/arm/gen/neon_mask.S:1.1 src/common/lib/libc/arch/arm/gen/neon_mask.S:1.2 --- src/common/lib/libc/arch/arm/gen/neon_mask.S:1.1 Mon Dec 17 00:46:14 2012 +++ src/common/lib/libc/arch/arm/gen/neon_mask.S Tue Dec 18 06:14:23 2012 @@ -28,11 +28,10 @@ */ #include machine/asm.h -#include assym.h #ifdef _ARM_ARCH_7 -RCSID($NetBSD: neon_mask.S,v 1.1 2012/12/17 00:46:14 matt Exp $) +RCSID($NetBSD: neon_mask.S,v 1.2 2012/12/18 06:14:23 matt Exp $) /* * __neon_loading_qword_bitmask(size_t len); @@ -45,7 +44,7 @@ ENTRY(__neon_leading_qword_bitmask) sublt r0, r0, #64 /* 1st dword needs MSBs cleared */ subge r1, r0, #128 /* 2nd dword needs MSBs cleared */ #else - rsblt r0, r0 #64 /* 1st dword needs LSBs cleared */ + rsblt r0, r0, #64 /* 1st dword needs LSBs cleared */ rsbge r1, r0, #128 /* 2nd dword needs LSBs cleared */ #endif movge r0, #0 /* 1st dword needs to left alone */
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Mon Dec 17 00:46:14 UTC 2012 Added Files: src/common/lib/libc/arch/arm/gen: neon_mask.S Log Message: Add a routine to create an up to an 128 bitmask returned in VFP/NEON q0 starting at the rightmost bit (bit 0). To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/common/lib/libc/arch/arm/gen/neon_mask.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Added files: Index: src/common/lib/libc/arch/arm/gen/neon_mask.S diff -u /dev/null src/common/lib/libc/arch/arm/gen/neon_mask.S:1.1 --- /dev/null Mon Dec 17 00:46:14 2012 +++ src/common/lib/libc/arch/arm/gen/neon_mask.S Mon Dec 17 00:46:14 2012 @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2012 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Matt Thomas of 3am Software Foundry. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *notice, this list of conditions and the following disclaimer in the + *documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include machine/asm.h +#include assym.h + +#ifdef _ARM_ARCH_7 + +RCSID($NetBSD: neon_mask.S,v 1.1 2012/12/17 00:46:14 matt Exp $) + +/* + * __neon_loading_qword_bitmask(size_t len); + * IN r0 = length of mask in bits + * OUT q0 = mask + */ +ENTRY(__neon_leading_qword_bitmask) + cmp r0, #64 /* which dword is partial? */ +#ifdef __ARMEL__ + sublt r0, r0, #64 /* 1st dword needs MSBs cleared */ + subge r1, r0, #128 /* 2nd dword needs MSBs cleared */ +#else + rsblt r0, r0 #64 /* 1st dword needs LSBs cleared */ + rsbge r1, r0, #128 /* 2nd dword needs LSBs cleared */ +#endif + movge r0, #0 /* 1st dword needs to left alone */ + movlt r1, #64 /* 2st dword needs to be cleared */ + vmov d2, r0, r1 /* move dword shifts to SIMD */ + vmovl.u32 q1, d2 /* 2 U32 - 2 U64 */ + vmvn.u64 q0, #0 /* create a mask */ + vshl.u64 q0, q0, q1 /* shift out unneeded bytes */ + RET +END(__neon_leading_qword_bitmask) + +#endif /* _ARM_ARCH_7 */
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Tue Nov 27 23:57:07 UTC 2012 Modified Files: src/common/lib/libc/arch/arm/gen: byte_swap_2.S byte_swap_4.S Log Message: Use the armv6 rev/rev16 if armv6 or later To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/common/lib/libc/arch/arm/gen/byte_swap_2.S \ src/common/lib/libc/arch/arm/gen/byte_swap_4.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/byte_swap_2.S diff -u src/common/lib/libc/arch/arm/gen/byte_swap_2.S:1.4 src/common/lib/libc/arch/arm/gen/byte_swap_2.S:1.5 --- src/common/lib/libc/arch/arm/gen/byte_swap_2.S:1.4 Mon Apr 28 20:22:52 2008 +++ src/common/lib/libc/arch/arm/gen/byte_swap_2.S Tue Nov 27 23:57:07 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: byte_swap_2.S,v 1.4 2008/04/28 20:22:52 martin Exp $ */ +/* $NetBSD: byte_swap_2.S,v 1.5 2012/11/27 23:57:07 matt Exp $ */ /*- * Copyright (c) 1999 The NetBSD Foundation, Inc. @@ -41,7 +41,11 @@ _ENTRY(_C_LABEL(ntohs)) _ENTRY(_C_LABEL(htons)) #endif _PROF_PROLOGUE +#ifdef _ARM_ARCH_6 + rev16 r0, r0 +#else and r1, r0, #0xff mov r0, r0, lsr #8 orr r0, r0, r1, lsl #8 +#endif RET Index: src/common/lib/libc/arch/arm/gen/byte_swap_4.S diff -u src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.4 src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.5 --- src/common/lib/libc/arch/arm/gen/byte_swap_4.S:1.4 Mon Apr 28 20:22:52 2008 +++ src/common/lib/libc/arch/arm/gen/byte_swap_4.S Tue Nov 27 23:57:07 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: byte_swap_4.S,v 1.4 2008/04/28 20:22:52 martin Exp $ */ +/* $NetBSD: byte_swap_4.S,v 1.5 2012/11/27 23:57:07 matt Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -41,8 +41,12 @@ _ENTRY(_C_LABEL(ntohl)) _ENTRY(_C_LABEL(htonl)) #endif _PROF_PROLOGUE +#ifdef _ARM_ARCH_6 + rev r0, r0 +#else eor r1, r0, r0, ror #16 bic r1, r1, #0x00FF mov r0, r0, ror #8 eor r0, r0, r1, lsr #8 +#endif RET
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Wed Nov 28 01:35:06 UTC 2012 Modified Files: src/common/lib/libc/arch/arm/gen: modsi3.S umodsi3.S Log Message: Optimize. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/common/lib/libc/arch/arm/gen/modsi3.S \ src/common/lib/libc/arch/arm/gen/umodsi3.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/modsi3.S diff -u src/common/lib/libc/arch/arm/gen/modsi3.S:1.1 src/common/lib/libc/arch/arm/gen/modsi3.S:1.2 --- src/common/lib/libc/arch/arm/gen/modsi3.S:1.1 Wed Oct 10 02:16:54 2012 +++ src/common/lib/libc/arch/arm/gen/modsi3.S Wed Nov 28 01:35:05 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: modsi3.S,v 1.1 2012/10/10 02:16:54 christos Exp $ */ +/* $NetBSD: modsi3.S,v 1.2 2012/11/28 01:35:05 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -22,10 +22,9 @@ */ ENTRY(__modsi3) - stmfd sp!, {lr} - sub sp, sp, #4 /* align stack */ + str lr, [sp, #-8]! /* push lr */ bl PIC_SYM(__divsi3, PLT) - add sp, sp, #4 /* unalign stack */ mov r0, r1 - ldmfd sp!, {pc} - + ldr lr, [sp], #8 /* pop lr */ + RET +END(__modsi3) Index: src/common/lib/libc/arch/arm/gen/umodsi3.S diff -u src/common/lib/libc/arch/arm/gen/umodsi3.S:1.1 src/common/lib/libc/arch/arm/gen/umodsi3.S:1.2 --- src/common/lib/libc/arch/arm/gen/umodsi3.S:1.1 Wed Oct 10 02:16:54 2012 +++ src/common/lib/libc/arch/arm/gen/umodsi3.S Wed Nov 28 01:35:05 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: umodsi3.S,v 1.1 2012/10/10 02:16:54 christos Exp $ */ +/* $NetBSD: umodsi3.S,v 1.2 2012/11/28 01:35:05 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -22,9 +22,8 @@ */ ENTRY(__umodsi3) - stmfd sp!, {lr} - sub sp, sp, #4 /* align stack */ + str lr, [sp, #-8]! /* push lr */ bl PIC_SYM(__udivsi3, PLT) - add sp, sp, #4 /* unalign stack */ mov r0, r1 - ldmfd sp!, {pc} + ldr lr, [sp], #8 /* pop lr */ + RET
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: christos Date: Tue Oct 30 12:42:14 UTC 2012 Modified Files: src/common/lib/libc/arch/arm/gen: divsi3.S Added Files: src/common/lib/libc/arch/arm/gen: divide.S udivsi3.S Log Message: split udivsi3 and divsi3 to fix static linking. This could be done better. To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/common/lib/libc/arch/arm/gen/divide.S \ src/common/lib/libc/arch/arm/gen/udivsi3.S cvs rdiff -u -r1.3 -r1.4 src/common/lib/libc/arch/arm/gen/divsi3.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/divsi3.S diff -u src/common/lib/libc/arch/arm/gen/divsi3.S:1.3 src/common/lib/libc/arch/arm/gen/divsi3.S:1.4 --- src/common/lib/libc/arch/arm/gen/divsi3.S:1.3 Tue Oct 9 22:16:54 2012 +++ src/common/lib/libc/arch/arm/gen/divsi3.S Tue Oct 30 08:42:13 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: divsi3.S,v 1.3 2012/10/10 02:16:54 christos Exp $ */ +/* $NetBSD: divsi3.S,v 1.4 2012/10/30 12:42:13 christos Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -16,359 +16,7 @@ #include machine/asm.h -/* - * stack is aligned as there's a possibility of branching to .L_overflow - * which makes a C call - */ - -.L_overflow: -#if !defined(_KERNEL) !defined(_STANDALONE) - mov r0, #8 /* SIGFPE */ - bl PIC_SYM(_C_LABEL(raise), PLT) /* raise it */ - mov r0, #0 -#else - /* XXX should cause a fatal error */ - mvn r0, #0 -#endif - RET - -ENTRY_NP(__aeabi_uidivmod) -ENTRY_NP(__aeabi_uidiv) -ENTRY(__udivsi3) -.L_udivide:/* r0 = r0 / r1; r1 = r0 % r1 */ - eor r0, r1, r0 - eor r1, r0, r1 - eor r0, r1, r0 - /* r0 = r1 / r0; r1 = r1 % r0 */ - cmp r0, #1 - bcc .L_overflow - beq .L_divide_l0 - mov ip, #0 - movs r1, r1 - bpl .L_divide_l1 - orr ip, ip, #0x2000 /* ip bit 0x2000 = -ve r1 */ - movs r1, r1, lsr #1 - orrcs ip, ip, #0x1000 /* ip bit 0x1000 = bit 0 of r1 */ - b .L_divide_l1 - -.L_divide_l0:/* r0 == 1 */ - mov r0, r1 - mov r1, #0 - RET - ENTRY_NP(__aeabi_idivmod) ENTRY_NP(__aeabi_idiv) ENTRY(__divsi3) -.L_divide:/* r0 = r0 / r1; r1 = r0 % r1 */ - eor r0, r1, r0 - eor r1, r0, r1 - eor r0, r1, r0 - /* r0 = r1 / r0; r1 = r1 % r0 */ - cmp r0, #1 - bcc .L_overflow - beq .L_divide_l0 - ands ip, r0, #0x8000 - rsbmi r0, r0, #0 - ands r2, r1, #0x8000 - eor ip, ip, r2 - rsbmi r1, r1, #0 - orr ip, r2, ip, lsr #1 /* ip bit 0x4000 = -ve division */ - /* ip bit 0x8000 = -ve remainder */ - -.L_divide_l1: - mov r2, #1 - mov r3, #0 - - /* - * If the highest bit of the dividend is set, we have to be - * careful when shifting the divisor. Test this. - */ - movs r1,r1 - bpl .L_old_code - - /* - * At this point, the highest bit of r1 is known to be set. - * We abuse this below in the tst instructions. - */ - tst r1, r0 /*, lsl #0 */ - bmi .L_divide_b1 - tst r1, r0, lsl #1 - bmi .L_divide_b2 - tst r1, r0, lsl #2 - bmi .L_divide_b3 - tst r1, r0, lsl #3 - bmi .L_divide_b4 - tst r1, r0, lsl #4 - bmi .L_divide_b5 - tst r1, r0, lsl #5 - bmi .L_divide_b6 - tst r1, r0, lsl #6 - bmi .L_divide_b7 - tst r1, r0, lsl #7 - bmi .L_divide_b8 - tst r1, r0, lsl #8 - bmi .L_divide_b9 - tst r1, r0, lsl #9 - bmi .L_divide_b10 - tst r1, r0, lsl #10 - bmi .L_divide_b11 - tst r1, r0, lsl #11 - bmi .L_divide_b12 - tst r1, r0, lsl #12 - bmi .L_divide_b13 - tst r1, r0, lsl #13 - bmi .L_divide_b14 - tst r1, r0, lsl #14 - bmi .L_divide_b15 - tst r1, r0, lsl #15 - bmi .L_divide_b16 - tst r1, r0, lsl #16 - bmi .L_divide_b17 - tst r1, r0, lsl #17 - bmi .L_divide_b18 - tst r1, r0, lsl #18 - bmi .L_divide_b19 - tst r1, r0, lsl #19 - bmi .L_divide_b20 - tst r1, r0, lsl #20 - bmi .L_divide_b21 - tst r1, r0, lsl #21 - bmi .L_divide_b22 - tst r1, r0, lsl #22 - bmi .L_divide_b23 - tst r1, r0, lsl #23 - bmi .L_divide_b24 - tst r1, r0, lsl #24 - bmi .L_divide_b25 - tst r1, r0, lsl #25 - bmi .L_divide_b26 - tst r1, r0, lsl #26 - bmi .L_divide_b27 - tst r1, r0, lsl #27 - bmi .L_divide_b28 - tst r1, r0, lsl #28 - bmi .L_divide_b29 - tst r1, r0, lsl #29 - bmi .L_divide_b30 - tst r1, r0, lsl #30 - bmi .L_divide_b31 -/* - * instead of: - * tst r1, r0, lsl #31 - * bmi .L_divide_b32 - */ - b .L_divide_b32 - -.L_old_code: - cmp r1, r0 - bcc .L_divide_b0 - cmp r1, r0, lsl #1 - bcc .L_divide_b1 - cmp r1, r0, lsl #2 - bcc .L_divide_b2 - cmp r1, r0, lsl #3 - bcc .L_divide_b3 - cmp r1, r0, lsl #4 - bcc .L_divide_b4 - cmp r1, r0, lsl #5 - bcc .L_divide_b5 - cmp r1, r0, lsl #6 - bcc .L_divide_b6 - cmp r1, r0, lsl #7 - bcc .L_divide_b7 - cmp r1, r0, lsl #8 - bcc .L_divide_b8 - cmp r1, r0, lsl #9 - bcc .L_divide_b9 - cmp r1, r0, lsl #10 - bcc .L_divide_b10 - cmp r1, r0, lsl #11 - bcc .L_divide_b11 - cmp r1, r0, lsl #12 - bcc .L_divide_b12 - cmp r1, r0, lsl #13 - bcc .L_divide_b13 - cmp r1, r0, lsl #14 - bcc .L_divide_b14 - cmp r1, r0, lsl #15 - bcc .L_divide_b15 - cmp r1, r0,
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: christos Date: Wed Oct 10 02:16:54 UTC 2012 Modified Files: src/common/lib/libc/arch/arm/gen: divsi3.S Added Files: src/common/lib/libc/arch/arm/gen: modsi3.S umodsi3.S Log Message: Split out modsi3 and umodsi3 from the divsi3 file. This is so that we don't get re-defined symbols in libc from libgcc in static linking. Example: cc -pthread -static main-calls-pthread-create.c To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/common/lib/libc/arch/arm/gen/divsi3.S cvs rdiff -u -r0 -r1.1 src/common/lib/libc/arch/arm/gen/modsi3.S \ src/common/lib/libc/arch/arm/gen/umodsi3.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/divsi3.S diff -u src/common/lib/libc/arch/arm/gen/divsi3.S:1.2 src/common/lib/libc/arch/arm/gen/divsi3.S:1.3 --- src/common/lib/libc/arch/arm/gen/divsi3.S:1.2 Sun Aug 5 00:22:01 2012 +++ src/common/lib/libc/arch/arm/gen/divsi3.S Tue Oct 9 22:16:54 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: divsi3.S,v 1.2 2012/08/05 04:22:01 matt Exp $ */ +/* $NetBSD: divsi3.S,v 1.3 2012/10/10 02:16:54 christos Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -21,22 +21,6 @@ * which makes a C call */ -ENTRY(__umodsi3) - stmfd sp!, {lr} - sub sp, sp, #4 /* align stack */ - bl .L_udivide - add sp, sp, #4 /* unalign stack */ - mov r0, r1 - ldmfd sp!, {pc} - -ENTRY(__modsi3) - stmfd sp!, {lr} - sub sp, sp, #4 /* align stack */ - bl .L_divide - add sp, sp, #4 /* unalign stack */ - mov r0, r1 - ldmfd sp!, {pc} - .L_overflow: #if !defined(_KERNEL) !defined(_STANDALONE) mov r0, #8 /* SIGFPE */ Added files: Index: src/common/lib/libc/arch/arm/gen/modsi3.S diff -u /dev/null src/common/lib/libc/arch/arm/gen/modsi3.S:1.1 --- /dev/null Tue Oct 9 22:16:54 2012 +++ src/common/lib/libc/arch/arm/gen/modsi3.S Tue Oct 9 22:16:54 2012 @@ -0,0 +1,31 @@ +/* $NetBSD: modsi3.S,v 1.1 2012/10/10 02:16:54 christos Exp $ */ + +/* + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include machine/asm.h + +/* + * stack is aligned as there's a possibility of branching to .L_overflow + * which makes a C call + */ + +ENTRY(__modsi3) + stmfd sp!, {lr} + sub sp, sp, #4 /* align stack */ + bl PIC_SYM(__divsi3, PLT) + add sp, sp, #4 /* unalign stack */ + mov r0, r1 + ldmfd sp!, {pc} + Index: src/common/lib/libc/arch/arm/gen/umodsi3.S diff -u /dev/null src/common/lib/libc/arch/arm/gen/umodsi3.S:1.1 --- /dev/null Tue Oct 9 22:16:54 2012 +++ src/common/lib/libc/arch/arm/gen/umodsi3.S Tue Oct 9 22:16:54 2012 @@ -0,0 +1,30 @@ +/* $NetBSD: umodsi3.S,v 1.1 2012/10/10 02:16:54 christos Exp $ */ + +/* + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include machine/asm.h + +/* + * stack is aligned as there's a possibility of branching to .L_overflow + * which makes a C call + */ + +ENTRY(__umodsi3) + stmfd sp!, {lr} + sub sp, sp, #4 /* align stack */ + bl PIC_SYM(__udivsi3, PLT) + add sp, sp, #4 /* unalign stack */ + mov r0, r1 + ldmfd sp!, {pc}
CVS commit: src/common/lib/libc/arch/arm/gen
Module Name:src Committed By: matt Date: Sun Aug 5 04:22:01 UTC 2012 Modified Files: src/common/lib/libc/arch/arm/gen: divsi3.S Log Message: For __udivsi3 and __divsi3, add their EABI aliases as alternate entry points. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/common/lib/libc/arch/arm/gen/divsi3.S Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/common/lib/libc/arch/arm/gen/divsi3.S diff -u src/common/lib/libc/arch/arm/gen/divsi3.S:1.1 src/common/lib/libc/arch/arm/gen/divsi3.S:1.2 --- src/common/lib/libc/arch/arm/gen/divsi3.S:1.1 Tue Dec 20 19:28:49 2005 +++ src/common/lib/libc/arch/arm/gen/divsi3.S Sun Aug 5 04:22:01 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: divsi3.S,v 1.1 2005/12/20 19:28:49 christos Exp $ */ +/* $NetBSD: divsi3.S,v 1.2 2012/08/05 04:22:01 matt Exp $ */ /* * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND @@ -48,6 +48,8 @@ ENTRY(__modsi3) #endif RET +ENTRY_NP(__aeabi_uidivmod) +ENTRY_NP(__aeabi_uidiv) ENTRY(__udivsi3) .L_udivide:/* r0 = r0 / r1; r1 = r0 % r1 */ eor r0, r1, r0 @@ -70,6 +72,8 @@ ENTRY(__udivsi3) mov r1, #0 RET +ENTRY_NP(__aeabi_idivmod) +ENTRY_NP(__aeabi_idiv) ENTRY(__divsi3) .L_divide:/* r0 = r0 / r1; r1 = r0 % r1 */ eor r0, r1, r0