summaryrefslogtreecommitdiff
path: root/src/arch/armv7
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/armv7')
-rw-r--r--src/arch/armv7/lib/Makefile.inc1
-rw-r--r--src/arch/armv7/lib/Makefile.uboot95
-rw-r--r--src/arch/armv7/lib/_divsi3.S142
-rw-r--r--src/arch/armv7/lib/_udivsi3.S93
-rw-r--r--src/arch/armv7/lib/_uldivmod.S157
-rw-r--r--src/arch/armv7/lib/div.c5
6 files changed, 0 insertions, 493 deletions
diff --git a/src/arch/armv7/lib/Makefile.inc b/src/arch/armv7/lib/Makefile.inc
index bdf6a64ffb..d9113419f5 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 d33d08b14d..0000000000
--- a/src/arch/armv7/lib/Makefile.uboot
+++ /dev/null
@@ -1,95 +0,0 @@
-#
-# (C) Copyright 2002-2006
-# Wolfgang Denk, DENX Software Engineering, wd@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 cfbadb2ab9..0000000000
--- 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 1309802610..0000000000
--- 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@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 65e4fa8441..0000000000
--- 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 03352dc7a5..0000000000
--- 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
-}