Commit Graph

789 Commits

Author SHA1 Message Date
matt
1045cebc5a Rework to allow thumb armv7 compilation.
Add atomic_simplelock.c for thumb
2013-08-19 03:55:12 +00:00
matt
578c0a5078 Thumbify (and use .cfi ops) 2013-08-19 03:54:15 +00:00
matt
556b3d5814 thumbify
add .cfi ops (for thumb)
2013-08-19 03:51:04 +00:00
matt
3302b194a2 This is ARM only 2013-08-19 03:47:06 +00:00
matt
14ba29f9a7 Add thumb version
Use STRONG_ALIAS
2013-08-19 03:44:47 +00:00
matt
a546978def Use STRONG_ALIAS
Add thumb variation
2013-08-19 03:44:18 +00:00
matt
d2610c9da2 Add .cfi ops
Thumbify
2013-08-19 03:43:07 +00:00
matt
eeddcf15a5 Add cfi ops.
Thumbify
2013-08-19 03:27:34 +00:00
matt
4f50540e20 Add END() and clarify thumb/arm 2013-08-19 02:55:19 +00:00
matt
d0a4289725 Thumbify 2013-08-19 02:54:02 +00:00
matt
70e4c7e047 Add END() 2013-08-19 02:37:12 +00:00
matt
de1d51c4ce Thumbify 2013-08-19 02:36:27 +00:00
matt
f66bbc4e80 ip -> r2
teq -> cmp
2013-08-19 02:24:09 +00:00
matt
7ed75e50a6 Thumbify 2013-08-19 02:22:25 +00:00
matt
d3ce3f542d ip -> r2
teq -> cmp
2013-08-19 02:20:06 +00:00
matt
8ba242506b Thumbify 2013-08-19 02:13:13 +00:00
matt
414db3a8ba Use ip as a temporary 2013-08-19 02:11:03 +00:00
matt
0b070291c7 Change previous use of r2 to r3 2013-08-19 02:08:41 +00:00
matt
ad93040ca6 teq -> cmp
ip -> r2
add/sub -> adds/subs
(thumbify part 1)
2013-08-19 02:07:22 +00:00
matt
4373b1a3d8 For EABI, add .cfi ops 2013-08-19 01:17:32 +00:00
matt
9dae71ed91 Add .cfi for __ARM_EABI__
Thumbify
2013-08-19 01:12:08 +00:00
matt
b4e387d260 Add END(memcpy) 2013-08-19 01:08:53 +00:00
matt
c2438985ca For Thumb, use naive version 2013-08-19 01:08:29 +00:00
matt
f37c7d04a2 Thumbify 2013-08-19 00:56:12 +00:00
matt
4640cf4296 Add .cfi ops if EABI.
Thumbify.
2013-08-19 00:36:29 +00:00
matt
dcdd476662 Thumbify 2013-08-19 00:35:06 +00:00
matt
034de21d59 Add a hidden version for libpthread. 2013-08-16 01:47:41 +00:00
matt
48a3833972 When compiling for Thumb1, the swp instruction is not availble. So this
stub is added to provide __cpu_simple_lock and __cpu_simple_lock_try via
thumb interwork support.  It is compiled with -mno-thumb.
2013-08-15 22:42:50 +00:00
matt
f376e753f4 Only assemble if !__ARM_EABI__ 2013-08-15 21:40:11 +00:00
matt
c4948bca36 Use mvnge AHI, #0x80000000 instead of mvnge AHI, ALO, lsr #1 2013-08-13 15:52:00 +00:00
matt
1271d298bd 0x800000000 -> 0x80000000 (one too many zeroes) 2013-08-13 15:46:31 +00:00
matt
11f1fec6ba Fix movlt 2013-08-13 15:45:30 +00:00
matt
85779a4007 andlt -> movlt 2013-08-13 15:44:35 +00:00
matt
47ead0f271 Convert some more conditional instructions to unified syntax 2013-08-11 05:02:35 +00:00
matt
a1a64bab57 Switch to unified syntax
use RET/RETc
use push/pop
2013-08-11 04:56:32 +00:00
matt
c111670598 Use foo{s} since it reduces the ifdefs for thumb 2013-08-11 04:41:17 +00:00
matt
d650209479 Make these under Thumb2 2013-08-10 19:59:21 +00:00
matt
8f8ed13c79 Never modify NLO/NHI (r2,r3) only LO/HI (r0,r1) so subsequent loops will work. 2013-08-10 19:02:22 +00:00
matt
d86c65aadb Use r2 instead of ip 2013-08-10 18:45:12 +00:00
matt
b8284f6dcd Use subs/sbc
Use push/pop
Don't adjust return for atomic_dec_64 since it's void and returns nothing
2013-08-10 18:40:19 +00:00
matt
617628a5a2 use push/pop 2013-08-10 18:39:48 +00:00
matt
8aac5a9bd0 Use push/pop 2013-08-10 18:39:25 +00:00
matt
fc14a14e9e use push/pop 2013-08-10 18:39:07 +00:00
matt
edb257bd2d cmpne -> cmp
Use push/pop
2013-08-10 18:38:33 +00:00
matt
d6ef347e93 Don't adjust return of atomic_inc_64 since it's void and doesn't return
anything.
2013-08-10 18:32:06 +00:00
matt
be0a794afa Fix add -> adds 2013-08-10 18:28:15 +00:00
pgoyette
b18fe62e8a Now that all of the macros are enclosed in "do { ... } while 0" we can
remove unneded parenthesization of their invocations.

OK mrg@
2013-08-08 22:18:20 +00:00
agc
148723966e Get the correct inttypes.h header, so this can build on !NetBSD. 2013-08-08 16:43:13 +00:00
mrg
1b0c094837 apply some do { ... } while (0) so that macros aren't broken,
completing the previous change.
2013-08-08 04:32:43 +00:00
pgoyette
3386094b43 The PUT* things are macros. Use { ... } to make sure they expand correctly. 2013-08-07 23:48:13 +00:00
pgoyette
a4db567a02 Fix boundary condition in multi-line format. When the '=' following a
field name exactly filled a line, the back-up logic failed and really
messed up the formatting!
2013-08-07 22:37:28 +00:00
apb
3be9df0daa If HAVE_SNPRINTB_M is defined, then do not define the snprintb() and
snprintb_m() functions.  This should allow this file to be compiled
from a tools build regardless of whether or not the host defines these
functions.
2013-08-06 22:02:50 +00:00
matt
8b64a4fc92 Only use MACHINE_ARCH if !_STANDALONE and CPPFLAGS/CFLAGS/CPUFLAGS don't
contain -mcpu or -march
2013-08-06 20:49:15 +00:00
matt
1240752cc0 Select ldrex/strex if ${MACHINE_ARCH:Mearmv[67]*} 2013-08-06 20:37:22 +00:00
matt
cb2ad9b126 With these changes, they now produce identical binary as before the coldfire
changes.
2013-07-19 16:42:12 +00:00
matt
1d398a1789 Adjust for Coldfire 2013-07-18 22:42:50 +00:00
matt
f320c653c7 invert tests ${MACHINE} != "m68000" -> ${MACHINE} == "m68k" 2013-07-18 19:49:00 +00:00
matt
65726deb61 Add END(func)
Fix some straggling %r@<eol> to (%r)
2013-07-16 23:24:18 +00:00
matt
07a0a32561 Convert to normal Motorola syntax for addressing.
%r@ -> (%r)
%r@- -> -(%r)
%r@+ -> (%r)+
%r@(n) n(%r)
etc.
No object differences.
2013-07-16 20:49:41 +00:00
uwe
d399d324be Use "unsigned int" instead of "u_int" to make it easier to steal.
u_int is out of fashion anyway...
2013-07-09 16:10:17 +00:00
matt
9137531a8c remove branch prediction hint from bdnzt 2013-07-04 20:57:59 +00:00
joerg
e49f3fb2ce Don't pick up strcmp as macro from libkern.h. 2013-07-01 20:51:59 +00:00
rmind
4080fc40d9 RUMP fix: ifdef weak alias. Pointed out by martin@. 2013-06-30 12:20:32 +00:00
riastradh
82db4b9858 Replace consttime_bcmp/explicit_bzero by consttime_memequal/explicit_memset.
consttime_memequal is the same as the old consttime_bcmp.
explicit_memset is to memset as explicit_bzero was to bcmp.

Passes amd64 release and i386/ALL, but I'm sure I missed some spots,
so please let me know.
2013-06-24 04:21:19 +00:00
matt
d4c5b4f6c6 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.
2013-06-20 07:16:23 +00:00
christos
b9d62bd6aa no need for the local defs of he enc functions; compat_defs.h provides them. 2013-06-09 19:46:56 +00:00
christos
af7cd4f35f Use be{32,64}enc, suggested by joerg. 2013-06-09 02:58:58 +00:00
christos
ff7cb014e8 PR/47908: Gary Grebus: SHA256_Transform and SHA512_Transform are called
by openssl with unaligned buffers. All other Transforms can handle unaligned
buffers so make these handle them too.
XXX[1]: any better fixes are welcome
XXX[2]: pullup-5, pullup-6
2013-06-07 22:40:34 +00:00
joerg
e0ac190e1e Provide explicit LC_C_LOCALE accessor and drop the various NULL checks.
Provide LC_GLOBAL_LOCALE in a way that works with all locale functions.
Merge constant data used by the initial global locale and the C locale.
Drop function call layer for _current_locale() and directly return the
locale reference, not a pointer to it. Use protected access for global
variables, so that libc references can avoid the GOT overhead.
2013-05-17 12:55:56 +00:00
matt
d1e50f81fb Don't worry about divide by 0 for kernel or standalone 2013-05-09 15:03:40 +00:00
skrll
6fec03973c Don't use old syntax - it breaks the build. hi matt. 2013-05-09 07:12:59 +00:00
matt
8ef5fb1f7f When using EABI, call __aeabi_{i,l}div0 when diving by 0. 2013-05-08 05:13:56 +00:00
skrll
f9f1c0a469 Whitespace. 2013-05-05 19:02:22 +00:00
joerg
323be87542 Restore standalone strtol/strtoul for citrus for now. 2013-04-26 21:20:47 +00:00
skrll
2d688776a6 Fix logic inversion. 2013-04-19 05:36:16 +00:00
joerg
a67fde0356 Add strtol_l and friends. Switch _citrus_bcs_strtol to use plain
strtol_l unless in tools mode. Add note to retire the BCS code on the
next libc major bump.
2013-04-16 21:44:06 +00:00
joerg
c7dafd4acd Do not use isalpha here, since we explicitly only support the Portable
Character Set as base and in theory a locale could define a ASCII
control character as letter, resulting in negations. Also avoid isdigit
here to give the compiler a better chance of deciding whether an
unsigned compare or a jump table is a better option, both are very
likely better choices than the memory indirection.
2013-04-16 19:34:57 +00:00
skrll
92ee01a067 Pretty sure we don't want to change instruction set here. hi matt. 2013-04-14 17:05:11 +00:00
matt
0441393558 Fix calling of __qdivrem which the 3rd arg needs to passed on the stack. 2013-04-14 15:53:30 +00:00
christos
3e4fc0a448 Add RCSID
Fix out of date comment
2013-03-17 02:13:10 +00:00
christos
12ea7fb385 add RCSID; use clr for pattern 2013-03-17 02:12:41 +00:00
christos
ca8f29b6bf Use a single copy of the source. 2013-03-17 00:42:31 +00:00
matt
213f7e6d6b #include <arm/cdefs.h> to get _ARM_ARCH_DWORD_OK 2013-02-15 22:35:39 +00:00
matt
545df5cbb8 Fix corner cases when searching for NUL. 2013-02-08 02:19:35 +00:00
matt
a317dd6322 Fix typo. 2013-02-08 01:41:35 +00:00
matt
38a95c84fa orrne wants 3 registers 2013-02-07 01:20:29 +00:00
matt
59bc6bed3d Add aeabi strong aliases. 2013-01-28 06:23:44 +00:00
matt
afc5014a73 Deal with an end-of-string condition properly. 2013-01-28 06:23:14 +00:00
matt
b61c7ad71a Change movsne to movnes for clang. 2013-01-28 06:22:34 +00:00
matt
d3d0879f20 Fix bug in detecting EOS/match on armv6+. 2013-01-26 07:49:11 +00:00
matt
cd7877eb52 Add a (unused) variant of strlcat that uses strnlen and strlcpy to do the work. 2013-01-23 07:57:27 +00:00
matt
d3ab69dd3b Enable ARM assembly versions of strlcat and strnlen. 2013-01-23 07:56:09 +00:00
matt
e3cc29a381 Add index/rindex strong aiases. 2013-01-23 07:45:46 +00:00
matt
bb2928cbda Add EABI support routines to raise SIGFPE on integer divide by 0. 2013-01-23 07:38:19 +00:00
matt
632dd00817 Add ARM assembly of strlcat which is implemented using (the ARM optimized)
strnlen and strlcpy.
2013-01-23 07:02:45 +00:00
matt
6495fd5f51 Add support for strnlen. 2013-01-23 06:59:55 +00:00
matt
24a929b8a1 Switch to using ARM assembly versions of strcat, strchr, strrchr. 2013-01-23 05:46:17 +00:00
matt
caab799770 Simple version of strlcat for ARM. 2013-01-18 22:49:11 +00:00
matt
9c4e9e6f72 Add some comments to illustrate what is actually happening. 2013-01-16 21:48:56 +00:00
matt
97ca0f0675 Fix case when searching for NUL. 2013-01-15 16:52:35 +00:00
matt
7b77c34d39 Add ARM optimized version of strrchr. 2013-01-15 08:52:27 +00:00
matt
d8ec06e4ef Add missing ! on str 2013-01-15 04:48:14 +00:00
matt
daf6ab5d09 Add an ARM optimized version of strchr. 2013-01-15 02:04:04 +00:00
matt
1a27ca9824 Add simple/small versions of strchr/strrchr for ARM. 2013-01-15 02:03:30 +00:00
matt
cb5a58cf06 Fix two typos 2013-01-14 19:15:13 +00:00
matt
4362d68f7e Add a simple version of strcat. 2013-01-14 16:36:15 +00:00
matt
962e3d9743 Add a native version of strcat which uses the optimized strlen and strcpy
routines.
2013-01-14 00:07:29 +00:00
matt
052628e406 A version of memset that can do NEON, VFP as well as normal arm instructions 2013-01-12 20:27:13 +00:00
matt
f77b15e751 Back out workaround. 2013-01-10 06:52:35 +00:00
matt
14365a1730 Fix a typo in strlcpy which caused to not deal with NULs predecing the
string properly.
2013-01-10 04:51:49 +00:00
matt
eb9a5f19fe Use the naive version of strlcpy until the longer one is fixed (it's still
faster than the C version).
2013-01-10 02:14:42 +00:00
matt
ddfad239b3 use #if defined(xxx) instead of ifdef 2013-01-10 02:13:49 +00:00
matt
01beb558aa Add weak alias for strlcpy 2013-01-10 02:08:22 +00:00
matt
0e293547ab Use movw on armv7 to fill uppper halfword. 2013-01-09 00:01:07 +00:00
matt
d8854cd184 Add a simplier version of memset which is less than 1/2 the size of the
current one.  On a Cortex-A9, this is about 15%-30% faster than the current
libc version.  This is not a trivial implementation since that was an order
magnitude slower than the existing libc version.
2013-01-08 20:15:00 +00:00
pgoyette
640316503e Add missing quote - fix build 2013-01-08 16:58:59 +00:00
matt
8eef9c1e44 Depending on _STANDALONE include the "naive" version or the normal arm version. 2013-01-08 13:21:05 +00:00
matt
67fc12d2ba Rename strlen.S and strcpy.S to strlen_arm.S and strcpy_arm.S 2013-01-08 13:17:45 +00:00
matt
94d1844298 Add simple/small versions of the str* functions. Suitable for libsa, etc. 2013-01-08 13:14:54 +00:00
matt
3ddeb9ed7e This is a working version of memcpy implemented using NEON instructions.
Still needs tuning as it is still about 15% than the non-NEON version.
2013-01-03 09:34:44 +00:00
matt
013f63afab Deal with _LIBC (aliases, etc).
Add missing #endif.
2013-01-02 15:38:03 +00:00
matt
7910d3cfb5 Rename strlen_armv6.S to strlen.S since this is no longer armv6 dependent. 2013-01-02 15:24:21 +00:00
matt
daf4ca4713 Add an assembly version of strcpy/strncpy/strlcpy.
(they all use a common source with defines to determine which to build).
2013-01-02 05:54:58 +00:00
matt
44d1b59f26 Make this work on all ARMs but keep the armv6 optimizations. It as fast as
the existing strlen for small string and once strings are 8 bytes or more in
length it starts getting significantly faster.  For really long strings,
compared to the existing strlen, this uses about 1/2 of the cycles for the
non-armv6 version and about 1/3 of the cycles for the armv6 version.
2012-12-31 07:58:44 +00:00
christos
064bbf208f kill Id RCS keyword. 2012-12-29 20:08:23 +00:00
matt
1316220d88 A few slight speedups (remove one instruction from the main loop). 2012-12-29 05:36:57 +00:00
matt
51f99baf1e strlen implementation for armv6 and later. Uses clz and uqadd8 to really
speed the search for NUL.  as fast as normal strlen at about a length of
6 or 7 and 2-3 times faster starting around 10.
2012-12-28 07:10:41 +00:00
matt
780493cbdc Debug. This becomes faster than the normal strlen at about 80 characters. 2012-12-28 05:15:08 +00:00
matt
817045ffb8 Don't need to include assym.h
Add a missing comma.
2012-12-18 06:14:23 +00:00
matt
e0306b2b8a Add a routine to create an up to an 128 bitmask returned
in VFP/NEON q0 starting at the rightmost bit (bit 0).
2012-12-17 00:46:14 +00:00
matt
4118c7d32d Slighly improved (can deal with all 16 bytes being non-NUL and quickly
proceed to next qword).
2012-12-15 22:23:31 +00:00
matt
91e44c6aaa Add a NEON implementation of strlen. 2012-12-15 19:26:34 +00:00
matt
b54764018c Add a NEON(only) implementation of memset.
This is a work in progress.
2012-12-13 01:41:59 +00:00
matt
be5ab324d6 Change __XSCALE__ to _ARM_ARCH_DWORD_OK so that any cpu with dword load/store
can use it.
2012-12-12 15:51:09 +00:00
matt
e1f7fc6d5e Change __XSCALE__ to _ARM_ARCH_DWORD_OK so that any cpu with strd can use it. 2012-12-12 15:46:05 +00:00
christos
c98323355a use explicit cast to pacify lint. 2012-12-07 15:41:02 +00:00
martin
3e441138b1 Provide an assembler version of _atomic_cas_up for sparc - the C code
does not compile to something usable in a RAS. See PR 38482.
2012-11-28 21:39:59 +00:00
matt
d9e09e3051 Optimize. 2012-11-28 01:35:05 +00:00
matt
a96852fc0d Use the armv6 rev/rev16 if armv6 or later 2012-11-27 23:57:07 +00:00
christos
dae8727ffb split udivsi3 and divsi3 to fix static linking. This could be done better. 2012-10-30 12:42:13 +00:00
chs
1957a22d40 _ARCH_ARM_6 -> _ARM_ARCH_6 2012-10-29 14:09:38 +00:00
christos
91f0e20769 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
2012-10-10 02:16:54 +00:00
matt
b40d79bcfb Add a ptree_mask_node_p to determine if an item is a mask node, and what
its non-mask length is.
2012-10-06 22:15:09 +00:00
matt
6e8da97cc9 Correct copyright/fix comments. 2012-09-13 00:36:12 +00:00
matt
56a54cbe85 Fix bas code, use ldr 2012-09-12 18:23:33 +00:00
matt
b9b9bd8933 Add 64bit atomic ops for ARMv6+ (using ldrexd/strexd). 2012-09-11 20:51:25 +00:00
matt
36f83f6caf Add dmb/dsb instructions as required by the armv7 arch man. 2012-08-31 23:41:52 +00:00
drochner
8588929dc5 Add "consttime_bcmp" and "explicit_bzero" functions for both kernel
abd userland, as proposed on tech-security, with explicit_bzero using
a volatile function pointer as suggested by Alan Barrett.
Both do what the name says. For userland, both are prefixed by "__"
to keep them out of the user namespace.
Change some memset/memcmp uses to the new functions where it makes
sense -- these are just some examples, more to come.
2012-08-30 12:16:48 +00:00
matt
85e052c5bf Actually use the assembly version of the atomic function if compiling
for armv6 or armv7 cpus.  Use atomic_cas_ptr instead of _lock_cas so
we pick up the assembly version when it's used.
2012-08-16 16:49:10 +00:00
matt
e2b9512b7a Add ARM EABI aliases to a few functions. 2012-08-06 02:31:54 +00:00