Commit Graph

67 Commits

Author SHA1 Message Date
Adhemerval Zanella
bb04e529f6 PowerPC: multiarch wcsrchr for PowerPC32 2013-12-06 05:47:02 -06:00
Adhemerval Zanella
05b5cd1ce5 PowerPC: multiarch wcschr for PowerPC32 2013-12-06 05:47:02 -06:00
Adhemerval Zanella
ba9641477e PowerPC: multiarch strchr for PowerPC32 2013-12-06 05:47:01 -06:00
Adhemerval Zanella
31c81aaa01 PowerPC: multiarch strchrnul for PowerPC32 2013-12-06 05:47:01 -06:00
Adhemerval Zanella
0d0607d9ab PowerPC: multiarch strncasecmp for PowerPC32 2013-12-06 05:47:01 -06:00
Adhemerval Zanella
4dfd5c8647 PowerPC: multiarch strcasecmp for PowerPC32 2013-12-06 05:47:01 -06:00
Adhemerval Zanella
a19e01a355 PowerPC: multiarch strncmp for PowerPC32 2013-12-06 05:47:01 -06:00
Adhemerval Zanella
ae9cf7a2e8 PowerPC: multiarch strnlen for PowerPC32 2013-12-06 05:47:00 -06:00
Adhemerval Zanella
3148bb7d2c PowerPC: multiarch strlen for PowerPC32 2013-12-06 05:47:00 -06:00
Adhemerval Zanella
7af8b94625 PowerPC: multiarch rawmemchr for PowerPC32 2013-12-06 05:47:00 -06:00
Adhemerval Zanella
03a6aa6a63 PowerPC: multiarch memrchr for PowerPC32 2013-12-06 05:47:00 -06:00
Adhemerval Zanella
1c62e6d960 PowerPC: multiarch memchr for PowerPC32 2013-12-06 05:47:00 -06:00
Adhemerval Zanella
87da8bdbe1 PowerPC: multiarch mempcpy for PowerPC32 2013-12-06 05:46:59 -06:00
Adhemerval Zanella
20ed471427 PowerPC: multiarch memset/bzero for PowerPC32 2013-12-06 05:46:59 -06:00
Adhemerval Zanella
ab3e3a46d5 PowerPC: multiarch memcmp for PowerPC32 2013-12-06 05:46:59 -06:00
Adhemerval Zanella
930de6f09e PowerPC: multiarch memcpy for PowerPC32 2013-12-06 05:46:59 -06:00
Adhemerval Zanella
4c628e0026 PowerPC: initial support for multilib for PowerPC32
This patch add a empty Makefile, the C IFUNC helper macros, and a empty
available IFUNC implementation enumeration.
2013-12-06 05:46:59 -06:00
Alan Modra
3be87c77d2 PowerPC LE memset
http://sourceware.org/ml/libc-alpha/2013-08/msg00104.html

One of the things I noticed when looking at power7 timing is that rlwimi
is cracked and the two resulting insns have a register dependency.
That makes it a little slower than the equivalent rldimi.

	* sysdeps/powerpc/powerpc64/memset.S: Replace rlwimi with
        insrdi.  Formatting.
	* sysdeps/powerpc/powerpc64/power4/memset.S: Likewise.
	* sysdeps/powerpc/powerpc64/power6/memset.S: Likewise.
	* sysdeps/powerpc/powerpc64/power7/memset.S: Likewise.
	* sysdeps/powerpc/powerpc32/power4/memset.S: Likewise.
	* sysdeps/powerpc/powerpc32/power6/memset.S: Likewise.
	* sysdeps/powerpc/powerpc32/power7/memset.S: Likewise.
2013-10-04 10:41:35 +09:30
Alan Modra
759cfef3ac PowerPC LE memcpy
http://sourceware.org/ml/libc-alpha/2013-08/msg00103.html

LIttle-endian support for memcpy.  I spent some time cleaning up the
64-bit power7 memcpy, in order to avoid the extra alignment traps
power7 takes for little-endian.  It probably would have been better
to copy the linux kernel version of memcpy.

	* sysdeps/powerpc/powerpc32/power4/memcpy.S: Add little endian support.
	* sysdeps/powerpc/powerpc32/power6/memcpy.S: Likewise.
	* sysdeps/powerpc/powerpc32/power7/memcpy.S: Likewise.
	* sysdeps/powerpc/powerpc32/power7/mempcpy.S: Likewise.
	* sysdeps/powerpc/powerpc64/memcpy.S: Likewise.
	* sysdeps/powerpc/powerpc64/power4/memcpy.S: Likewise.
	* sysdeps/powerpc/powerpc64/power6/memcpy.S: Likewise.
	* sysdeps/powerpc/powerpc64/power7/memcpy.S: Likewise.
	* sysdeps/powerpc/powerpc64/power7/mempcpy.S: Likewise.  Make better
	use of regs.  Use power7 mtocrf.  Tidy function tails.
2013-10-04 10:41:24 +09:30
Alan Modra
fe6e95d717 PowerPC LE memcmp
http://sourceware.org/ml/libc-alpha/2013-08/msg00102.html

This is a rather large patch due to formatting and renaming.  The
formatting changes were to make it possible to compare power7 and
power4 versions of memcmp.  Using different register defines came
about while I was wrestling with the code, trying to find spare
registers at one stage.  I found it much simpler if we refer to a reg
by the same name throughout a function, so it's better if short-term
multiple use regs like rTMP are referred to using their register
number.  I made the cr field usage changes when attempting to reload
rWORDn regs in the exit path to byte swap before comparing when
little-endian.  That proved a bad idea due to the pipelining involved
in the main loop;  Offsets to reload the regs were different first
time around the loop..  Anyway, I left the cr field usage changes in
place for consistency.

Aside from these more-or-less cosmetic changes, I fixed a number of
places where an early exit path restores regs unnecessarily, removed
some dead code, and optimised one or two exits.

	* sysdeps/powerpc/powerpc64/power7/memcmp.S: Add little-endian support.
	Formatting.  Consistently use rXXX register defines or rN defines.
	Use early exit labels that avoid restoring unused non-volatile regs.
	Make cr field use more consistent with rWORDn compares.  Rename
	regs used as shift registers for unaligned loop, using rN defines
	for short lifetime/multiple use regs.
	* sysdeps/powerpc/powerpc64/power4/memcmp.S: Likewise.
	* sysdeps/powerpc/powerpc32/power7/memcmp.S: Likewise.  Exit with
	addi 1,1,64 to pop stack frame.  Simplify return value code.
	* sysdeps/powerpc/powerpc32/power4/memcmp.S: Likewise.
2013-10-04 10:40:56 +09:30
Alan Modra
8a7413f9b0 PowerPC LE strcmp and strncmp
http://sourceware.org/ml/libc-alpha/2013-08/msg00099.html

More little-endian support.  I leave the main strcmp loops unchanged,
(well, except for renumbering rTMP to something other than r0 since
it's needed in an addi insn) and modify the tail for little-endian.

I noticed some of the big-endian tail code was a little untidy so have
cleaned that up too.

	* sysdeps/powerpc/powerpc64/strcmp.S (rTMP2): Define as r0.
	(rTMP): Define as r11.
	(strcmp): Add little-endian support.  Optimise tail.
	* sysdeps/powerpc/powerpc32/strcmp.S: Similarly.
	* sysdeps/powerpc/powerpc64/strncmp.S: Likewise.
	* sysdeps/powerpc/powerpc32/strncmp.S: Likewise.
	* sysdeps/powerpc/powerpc64/power4/strncmp.S: Likewise.
	* sysdeps/powerpc/powerpc32/power4/strncmp.S: Likewise.
	* sysdeps/powerpc/powerpc64/power7/strncmp.S: Likewise.
	* sysdeps/powerpc/powerpc32/power7/strncmp.S: Likewise.
2013-10-04 10:39:52 +09:30
Alan Modra
fef13a78ea PowerPC floating point little-endian [15 of 15]
http://sourceware.org/ml/libc-alpha/2013-07/msg00206.html

The union loses when little-endian.

	* sysdeps/powerpc/powerpc32/power4/hp-timing.h (HP_TIMING_NOW):
	Don't use a union to pack hi/low value.
2013-10-04 10:37:27 +09:30
Alan Modra
6a31fe7f9c PowerPC floating point little-endian [13 of 15]
http://sourceware.org/ml/libc-alpha/2013-08/msg00088.html

	* sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Increase alignment of
	constants to usual value for .cst8 section, and remove redundant
	high address load.
	* sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S: Use float
	constant for 0x1p52.  Load little-endian words of double from
	correct stack offsets.
2013-10-04 10:35:54 +09:30
Alan Modra
7b88401f3b PowerPC floating point little-endian [12 of 15]
http://sourceware.org/ml/libc-alpha/2013-08/msg00087.html

Fixes for little-endian in 32-bit assembly.

	* sysdeps/powerpc/sysdep.h (LOWORD, HIWORD, HISHORT): Define.
	* sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Load little-endian
	words of double from correct stack offsets.
	* sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Likewise.
	* sysdeps/powerpc/powerpc32/fpu/s_lround.S: Likewise.
	* sysdeps/powerpc/powerpc32/power4/fpu/s_llrint.S: Likewise.
	* sysdeps/powerpc/powerpc32/power4/fpu/s_llrintf.S: Likewise.
	* sysdeps/powerpc/powerpc32/power5+/fpu/s_llround.S: Likewise.
	* sysdeps/powerpc/powerpc32/power5+/fpu/s_lround.S: Likewise.
	* sysdeps/powerpc/powerpc32/power5/fpu/s_isnan.S: Likewise.
	* sysdeps/powerpc/powerpc32/power6/fpu/s_isnan.S: Likewise.
	* sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S: Likewise.
	* sysdeps/powerpc/powerpc32/power6/fpu/s_llrintf.S: Likewise.
	* sysdeps/powerpc/powerpc32/power6/fpu/s_llround.S: Likewise.
	* sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S: Likewise.
	* sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S: Likewise.
	* sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S: Likewise.
	* sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S: Use HISHORT.
	* sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S: Likewise.
2013-10-04 10:35:43 +09:30
Ondřej Bílka
c0c3f78afb Fix typos. 2013-08-21 19:48:48 +02:00
Joseph Myers
9c84384cc1 Remove trailing whitespace. 2013-06-05 20:44:03 +00:00
Siddhesh Poyarekar
6d9145d817 Consolidate copies of mp code in powerpc
Retain a single copy of the mp code in power4 instead of the two
identical copies in powerpc32 and powerpc64.
2013-03-08 11:38:41 +05:30
Siddhesh Poyarekar
ce544b5bda Merge powerpc slowexp.c into generic code 2013-03-07 13:25:02 +05:30
Siddhesh Poyarekar
4cc149fd8e Merge powerpc slowpow.c into generic code 2013-03-07 13:23:07 +05:30
Siddhesh Poyarekar
e6ebd4a7d5 Use an intermediate variable to sum exponents in powerpc __mul and __sqr 2013-03-07 13:18:56 +05:30
Siddhesh Poyarekar
82a9811d29 Use generic mpa.c code for everything except __mul and __sqr 2013-03-07 12:23:29 +05:30
Joseph Myers
cfb6382a4f Remove powerpc32 strncmp comments about bounded pointers. 2013-03-04 23:53:05 +00:00
Joseph Myers
b551088322 Remove powerpc32 bounded-pointers code. 2013-02-28 21:23:47 +00:00
Siddhesh Poyarekar
8d19fe64ee Sync up ppc add_magnitudes and sub_magnitudes with default code 2013-02-28 11:13:05 +05:30
Siddhesh Poyarekar
60f5a8b534 Sync up powerpc __mp_dbl with default code 2013-02-25 12:01:45 +05:30
Siddhesh Poyarekar
8094523147 Mark __inv as static in powerpc 2013-02-21 15:05:28 +05:30
Siddhesh Poyarekar
bab8a695ee Fix whitespace differences between generic and powerpc mpa.c 2013-02-21 14:31:42 +05:30
Siddhesh Poyarekar
4c7a4263af Mark ZERO inputs to __mul as unlikely on powerpc
Syncs up with generic code.
2013-02-21 12:17:29 +05:30
Siddhesh Poyarekar
20cd7fb3ae Copy comment about inner loop from powerpc mpa.c to the default one 2013-02-20 18:56:20 +05:30
Siddhesh Poyarekar
cb57ce6031 Remove redundant return keyword 2013-02-14 15:43:25 +05:30
Siddhesh Poyarekar
d6752ccd69 New __sqr function as a faster special case of __mul 2013-02-14 10:31:09 +05:30
Andreas Schwab
ed689c2f74 Remove use of mpa2.h 2013-01-20 02:05:53 +01:00
Siddhesh Poyarekar
1066a53440 Fix code formatting in mpa.c
This includes the overridden mpa.c in power4.
2013-01-14 21:53:43 +05:30
Siddhesh Poyarekar
e34ab70550 Remove unnecessary local variable mptwo 2013-01-14 21:23:47 +05:30
Siddhesh Poyarekar
950c99ca90 Update comments in mpa.c
Fixed comment style and clearer wording in some cases.
2013-01-09 19:07:15 +05:30
Anton Blanchard
2ccdea26f2 Fix spelling errors in sysdeps/powerpc files. 2013-01-07 11:20:53 -06:00
Siddhesh Poyarekar
fffb407f46 Remove unused __cr and __cpymn 2013-01-04 22:52:12 +05:30
Siddhesh Poyarekar
b18decba11 Fix build failure on power4 processors
The power4-specific mpa.c depended on some global variables that were
removed by earlier patches.  Also, it did not define mpone and mptwo.
2013-01-04 22:05:49 +05:30
Joseph Myers
568035b787 Update copyright notices with scripts/update-copyrights. 2013-01-02 19:05:09 +00:00
Joseph Myers
f4cf5f2d8b Add script to update copyright notices and reformat some to facilitate its use. 2013-01-01 16:29:10 +00:00