[coreboot] Patch set updated for coreboot: efe3afe ARMv7: drop libgcc copy

Stefan Reinauer (stefan.reinauer@coreboot.org) gerrit at coreboot.org
Fri Jan 4 21:22:09 CET 2013


Stefan Reinauer (stefan.reinauer at coreboot.org) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/2102

-gerrit

commit efe3afe4539917fa5620d0694db9fa1377e35973
Author: Stefan Reinauer <stefan.reinauer at coreboot.org>
Date:   Fri Jan 4 12:10:28 2013 -0800

    ARMv7: drop libgcc copy
    
    We accidently checked in some files from libgcc as well as
    a Makefile from u-boot and a duplicate implementation of div0.
    
    Drop all those files to reduce the confusion.
    
    Change-Id: I8ff6eabbced6f663813f8cc55f19c81839d03477
    Signed-off-by: Stefan Reinauer <reinauer at google.com>
---
 src/arch/armv7/lib/Makefile.inc   |   1 -
 src/arch/armv7/lib/Makefile.uboot |  95 -----------------------
 src/arch/armv7/lib/_divsi3.S      | 142 ----------------------------------
 src/arch/armv7/lib/_udivsi3.S     |  93 ----------------------
 src/arch/armv7/lib/_uldivmod.S    | 157 --------------------------------------
 src/arch/armv7/lib/div.c          |   5 --
 6 files changed, 493 deletions(-)

diff --git a/src/arch/armv7/lib/Makefile.inc b/src/arch/armv7/lib/Makefile.inc
index bdf6a64..d911341 100644
--- a/src/arch/armv7/lib/Makefile.inc
+++ b/src/arch/armv7/lib/Makefile.inc
@@ -11,7 +11,6 @@ romstage-y += syslib.c
 
 ramstage-y += c_start.S
 
-#ramstage-y += div.c
 ramstage-y += div0.c
 ramstage-y += div64.S
 ramstage-y += hang_spl.c
diff --git a/src/arch/armv7/lib/Makefile.uboot b/src/arch/armv7/lib/Makefile.uboot
deleted file mode 100644
index d33d08b..0000000
--- a/src/arch/armv7/lib/Makefile.uboot
+++ /dev/null
@@ -1,95 +0,0 @@
-#
-# (C) Copyright 2002-2006
-# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
-#
-# See file CREDITS for list of people who contributed to this
-# project.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-# MA 02111-1307 USA
-#
-
-include $(TOPDIR)/config.mk
-
-LIB	= $(obj)lib$(ARCH).o
-LIBGCC	= $(obj)libgcc.o
-
-ifndef CONFIG_SPL_BUILD
-GLSOBJS	+= _ashldi3.o
-GLSOBJS	+= _ashrdi3.o
-GLSOBJS	+= _divsi3.o
-GLSOBJS	+= _lshrdi3.o
-GLSOBJS	+= _modsi3.o
-GLSOBJS	+= _udivsi3.o
-GLSOBJS	+= _umodsi3.o
-ifdef CONFIG_CHROMEOS
-GLSOBJS	+= _uldivmod.o
-endif
-
-GLCOBJS	+= div0.o
-
-ifeq ($(CONFIG_SYS_GENERIC_BOARD),)
-COBJS-y += board.o
-endif
-COBJS-y	+= bootm.o
-COBJS-y	+= cache.o
-COBJS-y	+= cache-cp15.o
-COBJS-$(CONFIG_SYS_L2_PL310) += cache-pl310.o
-SOBJS-$(CONFIG_USE_ARCH_MEMSET) += memset.o
-SOBJS-$(CONFIG_USE_ARCH_MEMCPY) += memcpy.o
-else	# CONFIG_SPL_BUILD
-ifeq ($(CONFIG_SYS_GENERIC_BOARD),)
-COBJS-y += hang_spl.o
-endif
-endif	# CONFIG_SPL_BUILD
-
-COBJS-y	+= interrupts.o
-COBJS-y	+= reset.o
-
-SRCS	:= $(GLSOBJS:.o=.S) $(GLCOBJS:.o=.c) \
-	   $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
-OBJS	:= $(addprefix $(obj),$(SOBJS-y) $(COBJS-y))
-LGOBJS	:= $(addprefix $(obj),$(GLSOBJS)) \
-	   $(addprefix $(obj),$(GLCOBJS))
-
-# Always build libarm.o
-TARGETS	:= $(LIB)
-
-# Build private libgcc only when asked for
-ifdef USE_PRIVATE_LIBGCC
-TARGETS	+= $(LIBGCC)
-endif
-
-# For EABI conformant tool chains, provide eabi_compat()
-ifneq (,$(findstring -mabi=aapcs-linux,$(PLATFORM_CPPFLAGS)))
-TARGETS	+= $(obj)eabi_compat.o
-endif
-
-all:	$(TARGETS)
-
-$(LIB):	$(obj).depend $(OBJS)
-	$(call cmd_link_o_target, $(OBJS))
-
-$(LIBGCC): $(obj).depend $(LGOBJS)
-	$(call cmd_link_o_target, $(LGOBJS))
-
-#########################################################################
-
-# defines $(obj).depend target
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
-
-#########################################################################
diff --git a/src/arch/armv7/lib/_divsi3.S b/src/arch/armv7/lib/_divsi3.S
deleted file mode 100644
index cfbadb2..0000000
--- a/src/arch/armv7/lib/_divsi3.S
+++ /dev/null
@@ -1,142 +0,0 @@
-
-.macro ARM_DIV_BODY dividend, divisor, result, curbit
-
-#if __LINUX_ARM_ARCH__ >= 5
-
-	clz	\curbit, \divisor
-	clz	\result, \dividend
-	sub	\result, \curbit, \result
-	mov	\curbit, #1
-	mov	\divisor, \divisor, lsl \result
-	mov	\curbit, \curbit, lsl \result
-	mov	\result, #0
-
-#else
-
-	@ Initially shift the divisor left 3 bits if possible,
-	@ set curbit accordingly.  This allows for curbit to be located
-	@ at the left end of each 4 bit nibbles in the division loop
-	@ to save one loop in most cases.
-	tst	\divisor, #0xe0000000
-	moveq	\divisor, \divisor, lsl #3
-	moveq	\curbit, #8
-	movne	\curbit, #1
-
-	@ Unless the divisor is very big, shift it up in multiples of
-	@ four bits, since this is the amount of unwinding in the main
-	@ division loop.  Continue shifting until the divisor is
-	@ larger than the dividend.
-1:	cmp	\divisor, #0x10000000
-	cmplo	\divisor, \dividend
-	movlo	\divisor, \divisor, lsl #4
-	movlo	\curbit, \curbit, lsl #4
-	blo	1b
-
-	@ For very big divisors, we must shift it a bit at a time, or
-	@ we will be in danger of overflowing.
-1:	cmp	\divisor, #0x80000000
-	cmplo	\divisor, \dividend
-	movlo	\divisor, \divisor, lsl #1
-	movlo	\curbit, \curbit, lsl #1
-	blo	1b
-
-	mov	\result, #0
-
-#endif
-
-	@ Division loop
-1:	cmp	\dividend, \divisor
-	subhs	\dividend, \dividend, \divisor
-	orrhs	\result,   \result,   \curbit
-	cmp	\dividend, \divisor,  lsr #1
-	subhs	\dividend, \dividend, \divisor, lsr #1
-	orrhs	\result,   \result,   \curbit,  lsr #1
-	cmp	\dividend, \divisor,  lsr #2
-	subhs	\dividend, \dividend, \divisor, lsr #2
-	orrhs	\result,   \result,   \curbit,  lsr #2
-	cmp	\dividend, \divisor,  lsr #3
-	subhs	\dividend, \dividend, \divisor, lsr #3
-	orrhs	\result,   \result,   \curbit,  lsr #3
-	cmp	\dividend, #0			@ Early termination?
-	movnes	\curbit,   \curbit,  lsr #4	@ No, any more bits to do?
-	movne	\divisor,  \divisor, lsr #4
-	bne	1b
-
-.endm
-
-.macro ARM_DIV2_ORDER divisor, order
-
-#if __LINUX_ARM_ARCH__ >= 5
-
-	clz	\order, \divisor
-	rsb	\order, \order, #31
-
-#else
-
-	cmp	\divisor, #(1 << 16)
-	movhs	\divisor, \divisor, lsr #16
-	movhs	\order, #16
-	movlo	\order, #0
-
-	cmp	\divisor, #(1 << 8)
-	movhs	\divisor, \divisor, lsr #8
-	addhs	\order, \order, #8
-
-	cmp	\divisor, #(1 << 4)
-	movhs	\divisor, \divisor, lsr #4
-	addhs	\order, \order, #4
-
-	cmp	\divisor, #(1 << 2)
-	addhi	\order, \order, #3
-	addls	\order, \order, \divisor, lsr #1
-
-#endif
-
-.endm
-
-	.align	5
-.globl __divsi3
-.globl __aeabi_idiv
-__divsi3:
-__aeabi_idiv:
-	cmp	r1, #0
-	eor	ip, r0, r1			@ save the sign of the result.
-	beq	Ldiv0
-	rsbmi	r1, r1, #0			@ loops below use unsigned.
-	subs	r2, r1, #1			@ division by 1 or -1 ?
-	beq	10f
-	movs	r3, r0
-	rsbmi	r3, r0, #0			@ positive dividend value
-	cmp	r3, r1
-	bls	11f
-	tst	r1, r2				@ divisor is power of 2 ?
-	beq	12f
-
-	ARM_DIV_BODY r3, r1, r0, r2
-
-	cmp	ip, #0
-	rsbmi	r0, r0, #0
-	mov	pc, lr
-
-10:	teq	ip, r0				@ same sign ?
-	rsbmi	r0, r0, #0
-	mov	pc, lr
-
-11:	movlo	r0, #0
-	moveq	r0, ip, asr #31
-	orreq	r0, r0, #1
-	mov	pc, lr
-
-12:	ARM_DIV2_ORDER r1, r2
-
-	cmp	ip, #0
-	mov	r0, r3, lsr r2
-	rsbmi	r0, r0, #0
-	mov	pc, lr
-
-Ldiv0:
-
-	str	lr, [sp, #-4]!
-	bl	__div0
-	mov	r0, #0			@ About as wrong as it could be.
-	ldr	pc, [sp], #4
diff --git a/src/arch/armv7/lib/_udivsi3.S b/src/arch/armv7/lib/_udivsi3.S
deleted file mode 100644
index 1309802..0000000
--- a/src/arch/armv7/lib/_udivsi3.S
+++ /dev/null
@@ -1,93 +0,0 @@
-/* # 1 "libgcc1.S" */
-@ libgcc1 routines for ARM cpu.
-@ Division routines, written by Richard Earnshaw, (rearnsha at armltd.co.uk)
-dividend	.req	r0
-divisor		.req	r1
-result		.req	r2
-curbit		.req	r3
-/* ip		.req	r12	*/
-/* sp		.req	r13	*/
-/* lr		.req	r14	*/
-/* pc		.req	r15	*/
-	.text
-	.globl	 __udivsi3
-	.type	__udivsi3 ,function
-	.globl	__aeabi_uidiv
-	.type	__aeabi_uidiv ,function
-	.align	0
- __udivsi3:
- __aeabi_uidiv:
-	cmp	divisor, #0
-	beq	Ldiv0
-	mov	curbit, #1
-	mov	result, #0
-	cmp	dividend, divisor
-	bcc	Lgot_result
-Loop1:
-	@ Unless the divisor is very big, shift it up in multiples of
-	@ four bits, since this is the amount of unwinding in the main
-	@ division loop.  Continue shifting until the divisor is
-	@ larger than the dividend.
-	cmp	divisor, #0x10000000
-	cmpcc	divisor, dividend
-	movcc	divisor, divisor, lsl #4
-	movcc	curbit, curbit, lsl #4
-	bcc	Loop1
-Lbignum:
-	@ For very big divisors, we must shift it a bit at a time, or
-	@ we will be in danger of overflowing.
-	cmp	divisor, #0x80000000
-	cmpcc	divisor, dividend
-	movcc	divisor, divisor, lsl #1
-	movcc	curbit, curbit, lsl #1
-	bcc	Lbignum
-Loop3:
-	@ Test for possible subtractions, and note which bits
-	@ are done in the result.  On the final pass, this may subtract
-	@ too much from the dividend, but the result will be ok, since the
-	@ "bit" will have been shifted out at the bottom.
-	cmp	dividend, divisor
-	subcs	dividend, dividend, divisor
-	orrcs	result, result, curbit
-	cmp	dividend, divisor, lsr #1
-	subcs	dividend, dividend, divisor, lsr #1
-	orrcs	result, result, curbit, lsr #1
-	cmp	dividend, divisor, lsr #2
-	subcs	dividend, dividend, divisor, lsr #2
-	orrcs	result, result, curbit, lsr #2
-	cmp	dividend, divisor, lsr #3
-	subcs	dividend, dividend, divisor, lsr #3
-	orrcs	result, result, curbit, lsr #3
-	cmp	dividend, #0			@ Early termination?
-	movnes	curbit, curbit, lsr #4		@ No, any more bits to do?
-	movne	divisor, divisor, lsr #4
-	bne	Loop3
-Lgot_result:
-	mov	r0, result
-	mov	pc, lr
-Ldiv0:
-	str	lr, [sp, #-4]!
-	bl	 __div0       (PLT)
-	mov	r0, #0			@ about as wrong as it could be
-	ldmia	sp!, {pc}
-	.size  __udivsi3       , . -  __udivsi3
-
-.globl __aeabi_uidivmod
-__aeabi_uidivmod:
-
-	stmfd	sp!, {r0, r1, ip, lr}
-	bl	__aeabi_uidiv
-	ldmfd	sp!, {r1, r2, ip, lr}
-	mul	r3, r0, r2
-	sub	r1, r1, r3
-	mov	pc, lr
-
-.globl __aeabi_idivmod
-__aeabi_idivmod:
-
-	stmfd	sp!, {r0, r1, ip, lr}
-	bl	__aeabi_idiv
-	ldmfd	sp!, {r1, r2, ip, lr}
-	mul	r3, r0, r2
-	sub	r1, r1, r3
-	mov	pc, lr
diff --git a/src/arch/armv7/lib/_uldivmod.S b/src/arch/armv7/lib/_uldivmod.S
deleted file mode 100644
index 65e4fa8..0000000
--- a/src/arch/armv7/lib/_uldivmod.S
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- * Alternatively, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") version 2 as published by the Free
- * Software Foundation.
- */
-
-/*
- * A, Q = r0 + (r1 << 32)
- * B, R = r2 + (r3 << 32)
- * A / B = Q ... R
- */
-
-	.text
-	.global	__aeabi_uldivmod
-	.type	__aeabi_uldivmod, function
-	.align	0
-
-A_0	.req	r0
-A_1	.req	r1
-B_0	.req	r2
-B_1	.req	r3
-C_0	.req	r4
-C_1	.req	r5
-D_0	.req	r6
-D_1	.req	r7
-
-Q_0	.req	r0
-Q_1	.req	r1
-R_0	.req	r2
-R_1	.req	r3
-
-__aeabi_uldivmod:
-	stmfd	sp!, {r4, r5, r6, r7, lr}
-	@ Test if B == 0
-	orrs	ip, B_0, B_1		@ Z set -> B == 0
-	beq	L_div_by_0
-	@ Test if B is power of 2: (B & (B - 1)) == 0
-	subs	C_0, B_0, #1
-	sbc	C_1, B_1, #0
-	tst	C_0, B_0
-	tsteq	B_1, C_1
-	beq	L_pow2
-	@ Test if A_1 == B_1 == 0
-	orrs	ip, A_1, B_1
-	beq	L_div_32_32
-
-L_div_64_64:
-	mov	C_0, #1
-	mov	C_1, #0
-	@ D_0 = clz A
-	teq	A_1, #0
-	clz	D_0, A_1
-	clzeq	ip, A_0
-	addeq	D_0, D_0, ip
-	@ D_1 = clz B
-	teq	B_1, #0
-	clz	D_1, B_1
-	clzeq	ip, B_0
-	addeq	D_1, D_1, ip
-	@ if clz B - clz A > 0
-	subs	D_0, D_1, D_0
-	bls	L_done_shift
-	@ B <<= (clz B - clz A)
-	subs	D_1, D_0, #32
-	rsb	ip, D_0, #32
-	movmi	B_1, B_1, lsl D_0
-	orrmi	B_1, B_1, B_0, lsr ip
-	movpl	B_1, B_0, lsl D_1
-	mov	B_0, B_0, lsl D_0
-	@ C = 1 << (clz B - clz A)
-	movmi	C_1, C_1, lsl D_0
-	orrmi	C_1, C_1, C_0, lsr ip
-	movpl	C_1, C_0, lsl D_1
-	mov	C_0, C_0, lsl D_0
-L_done_shift:
-	mov	D_0, #0
-	mov	D_1, #0
-	@ C: current bit; D: result
-L_subtract:
-	@ if A >= B
-	cmp	A_1, B_1
-	cmpeq	A_0, B_0
-	bcc	L_update
-	@ A -= B
-	subs	A_0, A_0, B_0
-	sbc	A_1, A_1, B_1
-	@ D |= C
-	orr	D_0, D_0, C_0
-	orr	D_1, D_1, C_1
-L_update:
-	@ if A == 0: break
-	orrs	ip, A_1, A_0
-	beq	L_exit
-	@ C >>= 1
-	movs	C_1, C_1, lsr #1
-	movs	C_0, C_0, rrx
-	@ if C == 0: break
-	orrs	ip, C_1, C_0
-	beq	L_exit
-	@ B >>= 1
-	movs	B_1, B_1, lsr #1
-	mov	B_0, B_0, rrx
-	b	L_subtract
-L_exit:
-	@ Note: A, B & Q, R are aliases
-	mov	R_0, A_0
-	mov	R_1, A_1
-	mov	Q_0, D_0
-	mov	Q_1, D_1
-	ldmfd	sp!, {r4, r5, r6, r7, pc}
-
-L_div_32_32:
-	@ Note:	A_0 &	r0 are aliases
-	@	Q_1	r1
-	mov	r1, B_0
-	bl	__aeabi_uidivmod
-	mov	R_0, r1
-	mov	R_1, #0
-	mov	Q_1, #0
-	ldmfd	sp!, {r4, r5, r6, r7, pc}
-
-L_pow2:
-	@ Note: A, B and Q, R are aliases
-	@ R = A & (B - 1)
-	and	C_0, A_0, C_0
-	and	C_1, A_1, C_1
-	@ Q = A >> log2(B)
-	@ Note: B must not be 0 here!
-	clz	D_0, B_0
-	add	D_1, D_0, #1
-	rsbs	D_0, D_0, #31
-	bpl	L_1
-	clz	D_0, B_1
-	rsb	D_0, D_0, #31
-	mov	A_0, A_1, lsr D_0
-	add	D_0, D_0, #32
-L_1:
-	movpl	A_0, A_0, lsr D_0
-	orrpl	A_0, A_0, A_1, lsl D_1
-	mov	A_1, A_1, lsr D_0
-	@ Mov back C to R
-	mov	R_0, C_0
-	mov	R_1, C_1
-	ldmfd	sp!, {r4, r5, r6, r7, pc}
-
-L_div_by_0:
-	bl	__div0
-	@ As wrong as it could be
-	mov	Q_0, #0
-	mov	Q_1, #0
-	mov	R_0, #0
-	mov	R_1, #0
-	ldmfd	sp!, {r4, r5, r6, r7, pc}
diff --git a/src/arch/armv7/lib/div.c b/src/arch/armv7/lib/div.c
deleted file mode 100644
index 03352dc..0000000
--- a/src/arch/armv7/lib/div.c
+++ /dev/null
@@ -1,5 +0,0 @@
-void __div0(void); // called from asm so no need for a prototype in a header
-void __div0(void)
-{
-	// div by zero
-}



More information about the coreboot mailing list