This commit is contained in:
matt 2013-08-21 08:30:18 +00:00
parent e76ea19a00
commit b3356a40df
1 changed files with 18 additions and 9 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: clzsi2.S,v 1.5 2013/08/11 04:58:01 matt Exp $ */
/* $NetBSD: clzsi2.S,v 1.6 2013/08/21 08:30:18 matt Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
* All rights reserved.
@ -30,7 +30,6 @@
#include <machine/asm.h>
.text
ENTRY(__clzdi2)
#ifdef __ARMEB__
#define HI r0
#define LO r1
@ -39,22 +38,26 @@ ENTRY(__clzdi2)
#define LO r0
#endif
#if defined(_ARM_ARCH_5)
#ifdef __thumb__
cmp HI, #0
beq 1f
#if defined(__thumb__) && defined(_ARM_ARCH_T2)
ENTRY(__clzdi2)
cbz HI, 1f
clz r0, HI /* count leading zeros in high word */
RET
1: clz r0, LO /* yes, count in low word */
add r0, r0, #32 /* and add the bits in the high word */
adds r0, r0, #32 /* and add the bits in the high word */
RET
END(__clzdi2)
#else
ARM_ENTRY(__clzdi2)
teq HI, #0 /* high word all zero? */
clzne r0, HI /* count leading zeros in high word */
clzeq r0, LO /* yes, count in low word */
addeq r0, r0, #32 /* and add the bits in the high word */
RET
END(__clzdi2)
#endif
#else
ARM_ENTRY(__clzdi2)
movs r3, HI
movne r0, #31
bne .L_clz
@ -63,14 +66,20 @@ ENTRY(__clzdi2)
bne .L_clz
mov r0, #64
RET
#endif
END(__clzdi2)
#endif
ENTRY(__clzsi2)
#if defined(_ARM_ARCH_5)
#if defined(_ARM_ARCH_7)
ENTRY(__clzsi2)
#else
ARM_ENTRY(__clzsi2)
#endif
clz r0, r0
RET
END(__clzsi2)
#else
ARM_ENTRY(__clzsi2)
movs r3, r0
moveq r0, #32
RETc(eq)
@ -115,5 +124,5 @@ ENTRY(__clzsi2)
#endif
#endif /* __OPTIMIZE_SIZE__ */
RET
#endif /* _ARM_ARCH_5 */
END(__clzsi2)
#endif /* _ARM_ARCH_5 */