aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gcc-4.4.3/gcc/config/arm/lib1funcs.asm105
-rw-r--r--gcc-4.4.3/gcc/config/arm/t-arm3
-rw-r--r--gcc-4.4.3/gcc/config/arm/t-arm-coff3
-rw-r--r--gcc-4.4.3/gcc/config/arm/t-arm-elf3
-rw-r--r--gcc-4.4.3/gcc/config/arm/t-pe3
-rw-r--r--gcc-4.4.3/gcc/config/arm/t-strongarm-elf3
-rw-r--r--gcc-4.4.3/gcc/config/arm/t-symbian2
-rw-r--r--gcc-4.4.3/gcc/config/arm/t-vxworks3
-rw-r--r--gcc-4.4.3/gcc/config/arm/t-wince-pe3
9 files changed, 115 insertions, 13 deletions
diff --git a/gcc-4.4.3/gcc/config/arm/lib1funcs.asm b/gcc-4.4.3/gcc/config/arm/lib1funcs.asm
index e59af4d66..75d206067 100644
--- a/gcc-4.4.3/gcc/config/arm/lib1funcs.asm
+++ b/gcc-4.4.3/gcc/config/arm/lib1funcs.asm
@@ -1590,6 +1590,111 @@ LSYM(Lchange_\register):
#endif /* L_interwork_call_via_rX */
#endif /* !__thumb2__ */
+
+/* Functions to support compact pic switch tables in thumb1 state.
+ All these routines take an index into the table in r0. The
+ table is at LR & ~1 (but this must be rounded up in the case
+ of 32-bit entires). They are only permitted to clobber r12
+ and r14 and r0 must be preserved on exit. */
+#ifdef L_thumb1_case_sqi
+
+ .text
+ .align 0
+ .force_thumb
+ .syntax unified
+ THUMB_FUNC_START __gnu_thumb1_case_sqi
+ push {r1}
+ mov r1, lr
+ lsrs r1, r1, #1
+ lsls r1, r1, #1
+ ldrsb r1, [r1, r0]
+ lsls r1, r1, #1
+ add lr, lr, r1
+ pop {r1}
+ bx lr
+ SIZE (__gnu_thumb1_case_sqi)
+#endif
+
+#ifdef L_thumb1_case_uqi
+
+ .text
+ .align 0
+ .force_thumb
+ .syntax unified
+ THUMB_FUNC_START __gnu_thumb1_case_uqi
+ push {r1}
+ mov r1, lr
+ lsrs r1, r1, #1
+ lsls r1, r1, #1
+ ldrb r1, [r1, r0]
+ lsls r1, r1, #1
+ add lr, lr, r1
+ pop {r1}
+ bx lr
+ SIZE (__gnu_thumb1_case_uqi)
+#endif
+
+#ifdef L_thumb1_case_shi
+
+ .text
+ .align 0
+ .force_thumb
+ .syntax unified
+ THUMB_FUNC_START __gnu_thumb1_case_shi
+ push {r0, r1}
+ mov r1, lr
+ lsrs r1, r1, #1
+ lsls r0, r0, #1
+ lsls r1, r1, #1
+ ldrsh r1, [r1, r0]
+ lsls r1, r1, #1
+ add lr, lr, r1
+ pop {r0, r1}
+ bx lr
+ SIZE (__gnu_thumb1_case_shi)
+#endif
+
+#ifdef L_thumb1_case_uhi
+
+ .text
+ .align 0
+ .force_thumb
+ .syntax unified
+ THUMB_FUNC_START __gnu_thumb1_case_uhi
+ push {r0, r1}
+ mov r1, lr
+ lsrs r1, r1, #1
+ lsls r0, r0, #1
+ lsls r1, r1, #1
+ ldrh r1, [r1, r0]
+ lsls r1, r1, #1
+ add lr, lr, r1
+ pop {r0, r1}
+ bx lr
+ SIZE (__gnu_thumb1_case_uhi)
+#endif
+
+#ifdef L_thumb1_case_si
+
+ .text
+ .align 0
+ .force_thumb
+ .syntax unified
+ THUMB_FUNC_START __gnu_thumb1_case_si
+ push {r0, r1}
+ mov r1, lr
+ adds.n r1, r1, #2 /* Align to word. */
+ lsrs r1, r1, #2
+ lsls r0, r0, #2
+ lsls r1, r1, #2
+ ldr r0, [r1, r0]
+ adds r0, r0, r1
+ mov lr, r0
+ pop {r0, r1}
+ mov pc, lr /* We know we were called from thumb code. */
+ SIZE (__gnu_thumb1_case_si)
+#endif
+
#endif /* Arch supports thumb. */
#ifndef __symbian__
diff --git a/gcc-4.4.3/gcc/config/arm/t-arm b/gcc-4.4.3/gcc/config/arm/t-arm
index 96e4e49a7..82bd4459a 100644
--- a/gcc-4.4.3/gcc/config/arm/t-arm
+++ b/gcc-4.4.3/gcc/config/arm/t-arm
@@ -15,6 +15,9 @@ MD_INCLUDES= $(srcdir)/config/arm/arm-tune.md \
$(srcdir)/config/arm/neon.md \
$(srcdir)/config/arm/thumb2.md
+LIB1ASMSRC = arm/lib1funcs.asm
+LIB1ASMFUNCS = _thumb1_case_sqi _thumb1_case_uqi _thumb1_case_shi \
+ _thumb1_case_uhi _thumb1_case_si
s-config s-conditions s-flags s-codes s-constants s-emit s-recog s-preds \
s-opinit s-extract s-peep s-attr s-attrtab s-output: $(MD_INCLUDES)
diff --git a/gcc-4.4.3/gcc/config/arm/t-arm-coff b/gcc-4.4.3/gcc/config/arm/t-arm-coff
index 04880833e..156be670f 100644
--- a/gcc-4.4.3/gcc/config/arm/t-arm-coff
+++ b/gcc-4.4.3/gcc/config/arm/t-arm-coff
@@ -1,5 +1,4 @@
-LIB1ASMSRC = arm/lib1funcs.asm
-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func _call_via_rX _interwork_call_via_rX _clzsi2 _clzdi2
+LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func _call_via_rX _interwork_call_via_rX _clzsi2 _clzdi2
# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.
diff --git a/gcc-4.4.3/gcc/config/arm/t-arm-elf b/gcc-4.4.3/gcc/config/arm/t-arm-elf
index 5b812b750..3a0ebc3c5 100644
--- a/gcc-4.4.3/gcc/config/arm/t-arm-elf
+++ b/gcc-4.4.3/gcc/config/arm/t-arm-elf
@@ -1,9 +1,8 @@
-LIB1ASMSRC = arm/lib1funcs.asm
# For most CPUs we have an assembly soft-float implementations.
# However this is not true for ARMv6M. Here we want to use the soft-fp C
# implementation. The soft-fp code is only build for ARMv6M. This pulls
# in the asm implementation for other CPUs.
-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func \
+LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func \
_call_via_rX _interwork_call_via_rX \
_lshrdi3 _ashrdi3 _ashldi3 \
_arm_negdf2 _arm_addsubdf3 _arm_muldivdf3 _arm_cmpdf2 _arm_unorddf2 \
diff --git a/gcc-4.4.3/gcc/config/arm/t-pe b/gcc-4.4.3/gcc/config/arm/t-pe
index abd9b39a0..0ae1cdda3 100644
--- a/gcc-4.4.3/gcc/config/arm/t-pe
+++ b/gcc-4.4.3/gcc/config/arm/t-pe
@@ -1,5 +1,4 @@
-LIB1ASMSRC = arm/lib1funcs.asm
-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX \
+LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX \
_interwork_call_via_rX _clzsi2 _clzdi2 _muldi3
# We want fine grained libraries, so use the new code to build the
diff --git a/gcc-4.4.3/gcc/config/arm/t-strongarm-elf b/gcc-4.4.3/gcc/config/arm/t-strongarm-elf
index efd07dd77..8dc0014ba 100644
--- a/gcc-4.4.3/gcc/config/arm/t-strongarm-elf
+++ b/gcc-4.4.3/gcc/config/arm/t-strongarm-elf
@@ -1,5 +1,4 @@
-LIB1ASMSRC = arm/lib1funcs.asm
-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func _clzsi2 \
+LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func _clzsi2 \
_clzdi2 _muldi3
# We want fine grained libraries, so use the new code to build the
diff --git a/gcc-4.4.3/gcc/config/arm/t-symbian b/gcc-4.4.3/gcc/config/arm/t-symbian
index fdd2b7533..6a204642b 100644
--- a/gcc-4.4.3/gcc/config/arm/t-symbian
+++ b/gcc-4.4.3/gcc/config/arm/t-symbian
@@ -1,4 +1,4 @@
-LIB1ASMFUNCS = _bb_init_func _call_via_rX _interwork_call_via_rX _clzsi2 _clzdi2 \
+LIB1ASMFUNCS += _bb_init_func _call_via_rX _interwork_call_via_rX _clzsi2 _clzdi2 \
_muldi3
# These functions have __aeabi equivalents and will never be called by GCC.
diff --git a/gcc-4.4.3/gcc/config/arm/t-vxworks b/gcc-4.4.3/gcc/config/arm/t-vxworks
index b3e86572c..0310759a8 100644
--- a/gcc-4.4.3/gcc/config/arm/t-vxworks
+++ b/gcc-4.4.3/gcc/config/arm/t-vxworks
@@ -1,5 +1,4 @@
-LIB1ASMSRC = arm/lib1funcs.asm
-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func \
+LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _bb_init_func \
_call_via_rX _interwork_call_via_rX _clzsi2 _clzdi2 _muldi3
# We want fine grained libraries, so use the new code to build the
diff --git a/gcc-4.4.3/gcc/config/arm/t-wince-pe b/gcc-4.4.3/gcc/config/arm/t-wince-pe
index 9196e5e5d..31233337a 100644
--- a/gcc-4.4.3/gcc/config/arm/t-wince-pe
+++ b/gcc-4.4.3/gcc/config/arm/t-wince-pe
@@ -1,5 +1,4 @@
-LIB1ASMSRC = arm/lib1funcs.asm
-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX \
+LIB1ASMFUNCS += _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_tls _call_via_rX \
_interwork_call_via_rX _clzsi2 _clzdi2 _muldi3
# We want fine grained libraries, so use the new code to build the