1
linux/arch/sh/lib
Takashi YOSHII 3b041227f7 sh: Add plain udivsi3 (not _i4*) for gcc-4.1 and lower.
We chan't share code for udivsi3 and udivsi3_i4, because they
have a different clobber list. Copy udivsi3 from gcc-4.1.2.

As shown in arch/sh/lib/udivsi3.S (and -Os.S),

  .global __udivsi3_i4i
  .global __udivsi3_i4
  .global __udivsi3
__udivsi3_i4i:
  ...

Three symbols are sharing one code, which is actually udivsi3_i4i.
But, this results unwanted code with gcc 4.1.

In gcc, these three are treated as pseudo instructions that have
their own clobber list apart from the usual calling convention.

According to sh's machine description. The clobber list is as
follows:

 - udivsi3_i4i : t,r1,pr,mach,macl
 - udivsi3_i4  : t,r0,r1,r4,r5,pr,dr0,dr2,dr4
 - udivsi3     : t,r4,pr

The caller of udivsi3 will be left with a broken r1 and mac*.

gcc-4.1.x and older(at least to 3.4) generate udivsi3.
ST's gcc-4.1.1 seems to be OK because it has _i4i.

Signed-off-by: Takashi YOSHII <yoshii.takashi@renesas.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2008-12-22 18:43:53 +09:00
..
ashiftrt.S sh: Migrate necessary libgcc bits in to arch/sh/lib for SUPERH32. 2008-12-22 18:42:53 +09:00
ashldi3.c sh: Migrate necessary libgcc bits in to arch/sh/lib for SUPERH32. 2008-12-22 18:42:53 +09:00
ashlsi3.S sh: Migrate necessary libgcc bits in to arch/sh/lib for SUPERH32. 2008-12-22 18:42:53 +09:00
ashrdi3.c sh: Migrate necessary libgcc bits in to arch/sh/lib for SUPERH32. 2008-12-22 18:42:53 +09:00
ashrsi3.S sh: Migrate necessary libgcc bits in to arch/sh/lib for SUPERH32. 2008-12-22 18:42:53 +09:00
checksum.S
clear_page.S sh: Allow optimized clear/copy page routines to be used on SH-2. 2008-04-18 09:50:02 -07:00
copy_page.S sh: __copy_user function can corrupt the stack in case of exception 2008-11-13 17:40:30 +09:00
delay.c sh: Fixup ndelay() xloops calculation for alternate HZ. 2007-05-09 01:35:02 +00:00
div64-generic.c sh: fixup many sparse errors. 2008-09-08 10:35:04 +09:00
div64.S sh: Correct __xdiv64_32/div64_32 return value size. 2007-07-06 10:58:04 +09:00
io.c sh: Fix up the __raw_read/writeX() definitions. 2008-10-01 15:12:27 +09:00
libgcc.h sh: Migrate necessary libgcc bits in to arch/sh/lib for SUPERH32. 2008-12-22 18:42:53 +09:00
lshrdi3.c sh: Migrate necessary libgcc bits in to arch/sh/lib for SUPERH32. 2008-12-22 18:42:53 +09:00
lshrsi3.S sh: Migrate necessary libgcc bits in to arch/sh/lib for SUPERH32. 2008-12-22 18:42:53 +09:00
Makefile sh: Add plain udivsi3 (not _i4*) for gcc-4.1 and lower. 2008-12-22 18:43:53 +09:00
mcount.S sh: dynamic ftrace support. 2008-12-22 18:42:52 +09:00
memchr.S
memcpy-sh4.S sh: Fix up optimized SH-4 memcpy on big endian. 2008-05-16 14:55:07 +09:00
memcpy.S
memmove.S
memset.S
movmem.S sh: Migrate necessary libgcc bits in to arch/sh/lib for SUPERH32. 2008-12-22 18:42:53 +09:00
strlen.S
udiv_qrnnd.S sh: Migrate necessary libgcc bits in to arch/sh/lib for SUPERH32. 2008-12-22 18:42:53 +09:00
udivsi3_i4i-Os.S sh: Add plain udivsi3 (not _i4*) for gcc-4.1 and lower. 2008-12-22 18:43:53 +09:00
udivsi3_i4i.S sh: Add plain udivsi3 (not _i4*) for gcc-4.1 and lower. 2008-12-22 18:43:53 +09:00
udivsi3.S sh: Add plain udivsi3 (not _i4*) for gcc-4.1 and lower. 2008-12-22 18:43:53 +09:00