2019-06-02 15:48:37 +00:00
|
|
|
/* Copyright (C) 2004-2019 Free Software Foundation, Inc.
|
2012-03-27 23:13:14 +00:00
|
|
|
|
|
|
|
This file 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 3, or (at your option) any
|
|
|
|
later version.
|
|
|
|
|
|
|
|
This file 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.
|
|
|
|
|
|
|
|
Under Section 7 of GPL version 3, you are granted additional
|
|
|
|
permissions described in the GCC Runtime Library Exception, version
|
|
|
|
3.1, as published by the Free Software Foundation.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License and
|
|
|
|
a copy of the GCC Runtime Library Exception along with this program;
|
|
|
|
see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
|
|
|
|
|
|
|
|
/* libgcc routines for the STMicroelectronics ST40-300 CPU.
|
|
|
|
Contributed by J"orn Rennecke joern.rennecke@st.com. */
|
|
|
|
|
|
|
|
#include "lib1funcs.h"
|
|
|
|
|
|
|
|
#ifdef L_div_table
|
|
|
|
#if defined (__SH3__) || defined (__SH3E__) || defined (__SH4__) || defined (__SH4_SINGLE__) || defined (__SH4_SINGLE_ONLY__) || defined (__SH4_NOFPU__)
|
|
|
|
/* This code used shld, thus is not suitable for SH1 / SH2. */
|
|
|
|
|
|
|
|
/* Signed / unsigned division without use of FPU, optimized for SH4-300.
|
|
|
|
Uses a lookup table for divisors in the range -128 .. +127, and
|
|
|
|
div1 with case distinction for larger divisors in three more ranges.
|
|
|
|
The code is lumped together with the table to allow the use of mova. */
|
|
|
|
#ifdef __LITTLE_ENDIAN__
|
|
|
|
#define L_LSB 0
|
|
|
|
#define L_LSWMSB 1
|
|
|
|
#define L_MSWLSB 2
|
|
|
|
#else
|
|
|
|
#define L_LSB 3
|
|
|
|
#define L_LSWMSB 2
|
|
|
|
#define L_MSWLSB 1
|
|
|
|
#endif
|
|
|
|
|
|
|
|
.global GLOBAL(udivsi3_i4i)
|
|
|
|
.global GLOBAL(sdivsi3_i4i)
|
|
|
|
FUNC(GLOBAL(udivsi3_i4i))
|
|
|
|
FUNC(GLOBAL(sdivsi3_i4i))
|
|
|
|
|
|
|
|
.balign 4
|
|
|
|
LOCAL(div_ge8m): ! 10 cycles up to here
|
|
|
|
rotcr r1 ! signed shift must use original sign from r4
|
|
|
|
div0s r5,r4
|
|
|
|
mov #24,r7
|
|
|
|
shld r7,r6
|
|
|
|
shad r0,r1
|
|
|
|
rotcl r6
|
|
|
|
div1 r5,r1
|
|
|
|
swap.w r5,r0 ! detect -0x80000000 : 0x800000
|
|
|
|
rotcl r6
|
|
|
|
swap.w r4,r7
|
|
|
|
div1 r5,r1
|
|
|
|
swap.b r7,r7
|
|
|
|
rotcl r6
|
|
|
|
or r7,r0
|
|
|
|
div1 r5,r1
|
|
|
|
swap.w r0,r7
|
|
|
|
rotcl r6
|
|
|
|
or r7,r0
|
|
|
|
div1 r5,r1
|
|
|
|
add #-0x80,r0
|
|
|
|
rotcl r6
|
|
|
|
extu.w r0,r0
|
|
|
|
div1 r5,r1
|
|
|
|
neg r0,r0
|
|
|
|
rotcl r6
|
|
|
|
swap.w r0,r0
|
|
|
|
div1 r5,r1
|
|
|
|
mov.l @r15+,r7
|
|
|
|
and r6,r0
|
|
|
|
rotcl r6
|
|
|
|
div1 r5,r1
|
|
|
|
shll2 r0
|
|
|
|
rotcl r6
|
|
|
|
exts.b r0,r0
|
|
|
|
div1 r5,r1
|
|
|
|
swap.w r0,r0
|
|
|
|
exts.w r0,r1
|
|
|
|
exts.b r6,r0
|
|
|
|
mov.l @r15+,r6
|
|
|
|
rotcl r0
|
|
|
|
rts
|
|
|
|
sub r1,r0
|
|
|
|
! 31 cycles up to here
|
|
|
|
|
|
|
|
.balign 4
|
|
|
|
LOCAL(udiv_ge64k): ! 3 cycles up to here
|
|
|
|
mov r4,r0
|
|
|
|
shlr8 r0
|
|
|
|
div0u
|
|
|
|
cmp/hi r0,r5
|
|
|
|
bt LOCAL(udiv_r8)
|
|
|
|
mov.l r5,@-r15
|
|
|
|
shll8 r5
|
|
|
|
! 7 cycles up to here
|
|
|
|
.rept 8
|
|
|
|
div1 r5,r0
|
|
|
|
.endr
|
|
|
|
extu.b r4,r1 ! 15 cycles up to here
|
|
|
|
extu.b r0,r6
|
|
|
|
xor r1,r0
|
|
|
|
xor r6,r0
|
|
|
|
swap.b r6,r6
|
|
|
|
.rept 8
|
|
|
|
div1 r5,r0
|
|
|
|
.endr ! 25 cycles up to here
|
|
|
|
extu.b r0,r0
|
|
|
|
mov.l @r15+,r5
|
|
|
|
or r6,r0
|
|
|
|
mov.l @r15+,r6
|
|
|
|
rts
|
|
|
|
rotcl r0 ! 28 cycles up to here
|
|
|
|
|
|
|
|
.balign 4
|
|
|
|
LOCAL(udiv_r8): ! 6 cycles up to here
|
|
|
|
mov.l r4,@-r15
|
|
|
|
shll16 r4
|
|
|
|
shll8 r4
|
|
|
|
!
|
|
|
|
shll r4
|
|
|
|
mov r0,r1
|
|
|
|
div1 r5,r1
|
|
|
|
mov r4,r0
|
|
|
|
rotcl r0
|
|
|
|
mov.l @r15+,r4
|
|
|
|
div1 r5,r1
|
|
|
|
! 12 cycles up to here
|
|
|
|
.rept 6
|
|
|
|
rotcl r0; div1 r5,r1
|
|
|
|
.endr
|
|
|
|
mov.l @r15+,r6 ! 24 cycles up to here
|
|
|
|
rts
|
|
|
|
rotcl r0
|
|
|
|
|
|
|
|
.balign 4
|
|
|
|
LOCAL(div_ge32k): ! 6 cycles up to here
|
|
|
|
mov.l r7,@-r15
|
|
|
|
swap.w r5,r6
|
|
|
|
exts.b r6,r7
|
|
|
|
exts.w r6,r6
|
|
|
|
cmp/eq r6,r7
|
|
|
|
extu.b r1,r6
|
|
|
|
bf/s LOCAL(div_ge8m)
|
|
|
|
cmp/hi r1,r4 ! copy sign bit of r4 into T
|
|
|
|
rotcr r1 ! signed shift must use original sign from r4
|
|
|
|
div0s r5,r4
|
|
|
|
shad r0,r1
|
|
|
|
shll8 r5
|
|
|
|
div1 r5,r1
|
|
|
|
mov r5,r7 ! detect r4 == 0x80000000 && r5 == 0x8000(00)
|
|
|
|
div1 r5,r1
|
|
|
|
shlr8 r7
|
|
|
|
div1 r5,r1
|
|
|
|
swap.w r4,r0
|
|
|
|
div1 r5,r1
|
|
|
|
swap.b r0,r0
|
|
|
|
div1 r5,r1
|
|
|
|
or r0,r7
|
|
|
|
div1 r5,r1
|
|
|
|
add #-80,r7
|
|
|
|
div1 r5,r1
|
|
|
|
swap.w r7,r0
|
|
|
|
div1 r5,r1
|
|
|
|
or r0,r7
|
|
|
|
extu.b r1,r0
|
|
|
|
xor r6,r1
|
|
|
|
xor r0,r1
|
|
|
|
exts.b r0,r0
|
|
|
|
div1 r5,r1
|
|
|
|
extu.w r7,r7
|
|
|
|
div1 r5,r1
|
|
|
|
neg r7,r7 ! upper 16 bit of r7 == 0 if r4 == 0x80000000 && r5 == 0x8000
|
|
|
|
div1 r5,r1
|
|
|
|
and r0,r7
|
|
|
|
div1 r5,r1
|
|
|
|
swap.w r7,r7 ! 26 cycles up to here.
|
|
|
|
div1 r5,r1
|
|
|
|
shll8 r0
|
|
|
|
div1 r5,r1
|
|
|
|
exts.w r7,r7
|
|
|
|
div1 r5,r1
|
|
|
|
add r0,r0
|
|
|
|
div1 r5,r1
|
|
|
|
sub r7,r0
|
|
|
|
extu.b r1,r1
|
|
|
|
mov.l @r15+,r7
|
|
|
|
rotcl r1
|
|
|
|
mov.l @r15+,r6
|
|
|
|
add r1,r0
|
|
|
|
mov #-8,r1
|
|
|
|
rts
|
|
|
|
shad r1,r5 ! 34 cycles up to here
|
|
|
|
|
|
|
|
.balign 4
|
|
|
|
GLOBAL(udivsi3_i4i):
|
|
|
|
mov.l r6,@-r15
|
|
|
|
extu.w r5,r6
|
|
|
|
cmp/eq r5,r6
|
|
|
|
mov #0x7f,r0
|
|
|
|
bf LOCAL(udiv_ge64k)
|
|
|
|
cmp/hi r0,r5
|
|
|
|
bf LOCAL(udiv_le128)
|
|
|
|
mov r4,r1
|
|
|
|
shlr8 r1
|
|
|
|
div0u
|
|
|
|
shlr r1
|
|
|
|
shll16 r6
|
|
|
|
div1 r6,r1
|
|
|
|
extu.b r4,r0 ! 7 cycles up to here
|
|
|
|
.rept 8
|
|
|
|
div1 r6,r1
|
|
|
|
.endr ! 15 cycles up to here
|
|
|
|
xor r1,r0 ! xor dividend with result lsb
|
|
|
|
.rept 6
|
|
|
|
div1 r6,r1
|
|
|
|
.endr
|
|
|
|
mov.l r7,@-r15 ! 21 cycles up to here
|
|
|
|
div1 r6,r1
|
|
|
|
extu.b r0,r7
|
|
|
|
div1 r6,r1
|
|
|
|
shll8 r7
|
|
|
|
extu.w r1,r0
|
|
|
|
xor r7,r1 ! replace lsb of result with lsb of dividend
|
|
|
|
div1 r6,r1
|
|
|
|
mov #0,r7
|
|
|
|
div1 r6,r1
|
|
|
|
!
|
|
|
|
div1 r6,r1
|
|
|
|
bra LOCAL(div_end)
|
|
|
|
div1 r6,r1 ! 28 cycles up to here
|
|
|
|
|
|
|
|
/* This is link-compatible with a GLOBAL(sdivsi3) call,
|
|
|
|
but we effectively clobber only r1, macl and mach */
|
|
|
|
/* Because negative quotients are calculated as one's complements,
|
|
|
|
-0x80000000 divided by the smallest positive number of a number
|
|
|
|
range (0x80, 0x8000, 0x800000) causes saturation in the one's
|
|
|
|
complement representation, and we have to suppress the
|
|
|
|
one's -> two's complement adjustment. Since positive numbers
|
|
|
|
don't get such an adjustment, it's OK to also compute one's -> two's
|
|
|
|
complement adjustment suppression for a dividend of 0. */
|
|
|
|
.balign 4
|
|
|
|
GLOBAL(sdivsi3_i4i):
|
|
|
|
mov.l r6,@-r15
|
|
|
|
exts.b r5,r6
|
|
|
|
cmp/eq r5,r6
|
|
|
|
mov #-1,r1
|
|
|
|
bt/s LOCAL(div_le128)
|
|
|
|
cmp/pz r4
|
|
|
|
addc r4,r1
|
|
|
|
exts.w r5,r6
|
|
|
|
cmp/eq r5,r6
|
|
|
|
mov #-7,r0
|
|
|
|
bf/s LOCAL(div_ge32k)
|
|
|
|
cmp/hi r1,r4 ! copy sign bit of r4 into T
|
|
|
|
rotcr r1
|
|
|
|
shll16 r6 ! 7 cycles up to here
|
|
|
|
shad r0,r1
|
|
|
|
div0s r5,r4
|
|
|
|
div1 r6,r1
|
|
|
|
mov.l r7,@-r15
|
|
|
|
div1 r6,r1
|
|
|
|
mov r4,r0 ! re-compute adjusted dividend
|
|
|
|
div1 r6,r1
|
|
|
|
mov #-31,r7
|
|
|
|
div1 r6,r1
|
|
|
|
shad r7,r0
|
|
|
|
div1 r6,r1
|
|
|
|
add r4,r0 ! adjusted dividend
|
|
|
|
div1 r6,r1
|
|
|
|
mov.l r8,@-r15
|
|
|
|
div1 r6,r1
|
|
|
|
swap.w r4,r8 ! detect special case r4 = 0x80000000, r5 = 0x80
|
|
|
|
div1 r6,r1
|
|
|
|
swap.b r8,r8
|
|
|
|
xor r1,r0 ! xor dividend with result lsb
|
|
|
|
div1 r6,r1
|
|
|
|
div1 r6,r1
|
|
|
|
or r5,r8
|
|
|
|
div1 r6,r1
|
|
|
|
add #-0x80,r8 ! r8 is 0 iff there is a match
|
|
|
|
div1 r6,r1
|
|
|
|
swap.w r8,r7 ! or upper 16 bits...
|
|
|
|
div1 r6,r1
|
|
|
|
or r7,r8 !...into lower 16 bits
|
|
|
|
div1 r6,r1
|
|
|
|
extu.w r8,r8
|
|
|
|
div1 r6,r1
|
|
|
|
extu.b r0,r7
|
|
|
|
div1 r6,r1
|
|
|
|
shll8 r7
|
|
|
|
exts.w r1,r0
|
|
|
|
xor r7,r1 ! replace lsb of result with lsb of dividend
|
|
|
|
div1 r6,r1
|
|
|
|
neg r8,r8 ! upper 16 bits of r8 are now 0xffff iff we want end adjm.
|
|
|
|
div1 r6,r1
|
|
|
|
and r0,r8
|
|
|
|
div1 r6,r1
|
|
|
|
swap.w r8,r7
|
|
|
|
div1 r6,r1
|
|
|
|
mov.l @r15+,r8 ! 58 insns, 29 cycles up to here
|
|
|
|
LOCAL(div_end):
|
|
|
|
div1 r6,r1
|
|
|
|
shll8 r0
|
|
|
|
div1 r6,r1
|
|
|
|
exts.w r7,r7
|
|
|
|
div1 r6,r1
|
|
|
|
add r0,r0
|
|
|
|
div1 r6,r1
|
|
|
|
sub r7,r0
|
|
|
|
extu.b r1,r1
|
|
|
|
mov.l @r15+,r7
|
|
|
|
rotcl r1
|
|
|
|
mov.l @r15+,r6
|
|
|
|
rts
|
|
|
|
add r1,r0
|
|
|
|
|
|
|
|
.balign 4
|
|
|
|
LOCAL(udiv_le128): ! 4 cycles up to here (or 7 for mispredict)
|
|
|
|
mova LOCAL(div_table_inv),r0
|
|
|
|
shll2 r6
|
|
|
|
mov.l @(r0,r6),r1
|
|
|
|
mova LOCAL(div_table_clz),r0
|
|
|
|
lds r4,mach
|
|
|
|
!
|
|
|
|
!
|
|
|
|
!
|
|
|
|
tst r1,r1
|
|
|
|
!
|
|
|
|
bt 0f
|
|
|
|
dmulu.l r1,r4
|
|
|
|
0: mov.b @(r0,r5),r1
|
|
|
|
clrt
|
|
|
|
!
|
|
|
|
!
|
|
|
|
sts mach,r0
|
|
|
|
addc r4,r0
|
|
|
|
rotcr r0
|
|
|
|
mov.l @r15+,r6
|
|
|
|
rts
|
|
|
|
shld r1,r0
|
|
|
|
|
|
|
|
.balign 4
|
|
|
|
LOCAL(div_le128): ! 3 cycles up to here (or 6 for mispredict)
|
|
|
|
mova LOCAL(div_table_inv),r0
|
|
|
|
shll2 r6
|
|
|
|
mov.l @(r0,r6),r1
|
|
|
|
mova LOCAL(div_table_clz),r0
|
|
|
|
neg r4,r6
|
|
|
|
bf 0f
|
|
|
|
mov r4,r6
|
|
|
|
0: lds r6,mach
|
|
|
|
tst r1,r1
|
|
|
|
bt 0f
|
|
|
|
dmulu.l r1,r6
|
|
|
|
0: div0s r4,r5
|
|
|
|
mov.b @(r0,r5),r1
|
|
|
|
bt/s LOCAL(le128_neg)
|
|
|
|
clrt
|
|
|
|
!
|
|
|
|
sts mach,r0
|
|
|
|
addc r6,r0
|
|
|
|
rotcr r0
|
|
|
|
mov.l @r15+,r6
|
|
|
|
rts
|
|
|
|
shld r1,r0
|
|
|
|
|
|
|
|
/* Could trap divide by zero for the cost of one cycle more mispredict penalty:
|
|
|
|
...
|
|
|
|
dmulu.l r1,r6
|
|
|
|
0: div0s r4,r5
|
|
|
|
bt/s LOCAL(le128_neg)
|
|
|
|
tst r5,r5
|
|
|
|
bt LOCAL(div_by_zero)
|
|
|
|
mov.b @(r0,r5),r1
|
|
|
|
sts mach,r0
|
|
|
|
addc r6,r0
|
|
|
|
...
|
|
|
|
LOCAL(div_by_zero):
|
|
|
|
trapa #
|
|
|
|
.balign 4
|
|
|
|
LOCAL(le128_neg):
|
|
|
|
bt LOCAL(div_by_zero)
|
|
|
|
mov.b @(r0,r5),r1
|
|
|
|
sts mach,r0
|
|
|
|
addc r6,r0
|
|
|
|
... */
|
|
|
|
|
|
|
|
.balign 4
|
|
|
|
LOCAL(le128_neg):
|
|
|
|
sts mach,r0
|
|
|
|
addc r6,r0
|
|
|
|
rotcr r0
|
|
|
|
mov.l @r15+,r6
|
|
|
|
shad r1,r0
|
|
|
|
rts
|
|
|
|
neg r0,r0
|
|
|
|
ENDFUNC(GLOBAL(udivsi3_i4i))
|
|
|
|
ENDFUNC(GLOBAL(sdivsi3_i4i))
|
|
|
|
|
|
|
|
/* This table has been generated by divtab-sh4.c. */
|
|
|
|
.balign 4
|
|
|
|
.byte -7
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -2
|
|
|
|
.byte -2
|
|
|
|
.byte -2
|
|
|
|
.byte -2
|
|
|
|
.byte -1
|
|
|
|
.byte -1
|
|
|
|
.byte 0
|
|
|
|
LOCAL(div_table_clz):
|
|
|
|
.byte 0
|
|
|
|
.byte 0
|
|
|
|
.byte -1
|
|
|
|
.byte -1
|
|
|
|
.byte -2
|
|
|
|
.byte -2
|
|
|
|
.byte -2
|
|
|
|
.byte -2
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -3
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -4
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -5
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
.byte -6
|
|
|
|
/* 1/-128 .. 1/127, normalized. There is an implicit leading 1 in bit 32,
|
|
|
|
or in bit 33 for powers of two. */
|
|
|
|
.balign 4
|
|
|
|
.long 0x0
|
|
|
|
.long 0x2040811
|
|
|
|
.long 0x4104105
|
|
|
|
.long 0x624DD30
|
|
|
|
.long 0x8421085
|
|
|
|
.long 0xA6810A7
|
|
|
|
.long 0xC9714FC
|
|
|
|
.long 0xECF56BF
|
|
|
|
.long 0x11111112
|
|
|
|
.long 0x135C8114
|
|
|
|
.long 0x15B1E5F8
|
|
|
|
.long 0x18118119
|
|
|
|
.long 0x1A7B9612
|
|
|
|
.long 0x1CF06ADB
|
|
|
|
.long 0x1F7047DD
|
|
|
|
.long 0x21FB7813
|
|
|
|
.long 0x24924925
|
|
|
|
.long 0x27350B89
|
|
|
|
.long 0x29E4129F
|
|
|
|
.long 0x2C9FB4D9
|
|
|
|
.long 0x2F684BDB
|
|
|
|
.long 0x323E34A3
|
|
|
|
.long 0x3521CFB3
|
|
|
|
.long 0x38138139
|
|
|
|
.long 0x3B13B13C
|
|
|
|
.long 0x3E22CBCF
|
|
|
|
.long 0x41414142
|
|
|
|
.long 0x446F8657
|
|
|
|
.long 0x47AE147B
|
|
|
|
.long 0x4AFD6A06
|
|
|
|
.long 0x4E5E0A73
|
|
|
|
.long 0x51D07EAF
|
|
|
|
.long 0x55555556
|
|
|
|
.long 0x58ED2309
|
|
|
|
.long 0x5C9882BA
|
|
|
|
.long 0x60581606
|
|
|
|
.long 0x642C8591
|
|
|
|
.long 0x68168169
|
|
|
|
.long 0x6C16C16D
|
|
|
|
.long 0x702E05C1
|
|
|
|
.long 0x745D1746
|
|
|
|
.long 0x78A4C818
|
|
|
|
.long 0x7D05F418
|
|
|
|
.long 0x81818182
|
|
|
|
.long 0x86186187
|
|
|
|
.long 0x8ACB90F7
|
|
|
|
.long 0x8F9C18FA
|
|
|
|
.long 0x948B0FCE
|
|
|
|
.long 0x9999999A
|
|
|
|
.long 0x9EC8E952
|
|
|
|
.long 0xA41A41A5
|
|
|
|
.long 0xA98EF607
|
|
|
|
.long 0xAF286BCB
|
|
|
|
.long 0xB4E81B4F
|
|
|
|
.long 0xBACF914D
|
|
|
|
.long 0xC0E07039
|
|
|
|
.long 0xC71C71C8
|
|
|
|
.long 0xCD856891
|
|
|
|
.long 0xD41D41D5
|
|
|
|
.long 0xDAE6076C
|
|
|
|
.long 0xE1E1E1E2
|
|
|
|
.long 0xE9131AC0
|
|
|
|
.long 0xF07C1F08
|
|
|
|
.long 0xF81F81F9
|
|
|
|
.long 0x0
|
|
|
|
.long 0x4104105
|
|
|
|
.long 0x8421085
|
|
|
|
.long 0xC9714FC
|
|
|
|
.long 0x11111112
|
|
|
|
.long 0x15B1E5F8
|
|
|
|
.long 0x1A7B9612
|
|
|
|
.long 0x1F7047DD
|
|
|
|
.long 0x24924925
|
|
|
|
.long 0x29E4129F
|
|
|
|
.long 0x2F684BDB
|
|
|
|
.long 0x3521CFB3
|
|
|
|
.long 0x3B13B13C
|
|
|
|
.long 0x41414142
|
|
|
|
.long 0x47AE147B
|
|
|
|
.long 0x4E5E0A73
|
|
|
|
.long 0x55555556
|
|
|
|
.long 0x5C9882BA
|
|
|
|
.long 0x642C8591
|
|
|
|
.long 0x6C16C16D
|
|
|
|
.long 0x745D1746
|
|
|
|
.long 0x7D05F418
|
|
|
|
.long 0x86186187
|
|
|
|
.long 0x8F9C18FA
|
|
|
|
.long 0x9999999A
|
|
|
|
.long 0xA41A41A5
|
|
|
|
.long 0xAF286BCB
|
|
|
|
.long 0xBACF914D
|
|
|
|
.long 0xC71C71C8
|
|
|
|
.long 0xD41D41D5
|
|
|
|
.long 0xE1E1E1E2
|
|
|
|
.long 0xF07C1F08
|
|
|
|
.long 0x0
|
|
|
|
.long 0x8421085
|
|
|
|
.long 0x11111112
|
|
|
|
.long 0x1A7B9612
|
|
|
|
.long 0x24924925
|
|
|
|
.long 0x2F684BDB
|
|
|
|
.long 0x3B13B13C
|
|
|
|
.long 0x47AE147B
|
|
|
|
.long 0x55555556
|
|
|
|
.long 0x642C8591
|
|
|
|
.long 0x745D1746
|
|
|
|
.long 0x86186187
|
|
|
|
.long 0x9999999A
|
|
|
|
.long 0xAF286BCB
|
|
|
|
.long 0xC71C71C8
|
|
|
|
.long 0xE1E1E1E2
|
|
|
|
.long 0x0
|
|
|
|
.long 0x11111112
|
|
|
|
.long 0x24924925
|
|
|
|
.long 0x3B13B13C
|
|
|
|
.long 0x55555556
|
|
|
|
.long 0x745D1746
|
|
|
|
.long 0x9999999A
|
|
|
|
.long 0xC71C71C8
|
|
|
|
.long 0x0
|
|
|
|
.long 0x24924925
|
|
|
|
.long 0x55555556
|
|
|
|
.long 0x9999999A
|
|
|
|
.long 0x0
|
|
|
|
.long 0x55555556
|
|
|
|
.long 0x0
|
|
|
|
.long 0x0
|
|
|
|
LOCAL(div_table_inv):
|
|
|
|
.long 0x0
|
|
|
|
.long 0x0
|
|
|
|
.long 0x0
|
|
|
|
.long 0x55555556
|
|
|
|
.long 0x0
|
|
|
|
.long 0x9999999A
|
|
|
|
.long 0x55555556
|
|
|
|
.long 0x24924925
|
|
|
|
.long 0x0
|
|
|
|
.long 0xC71C71C8
|
|
|
|
.long 0x9999999A
|
|
|
|
.long 0x745D1746
|
|
|
|
.long 0x55555556
|
|
|
|
.long 0x3B13B13C
|
|
|
|
.long 0x24924925
|
|
|
|
.long 0x11111112
|
|
|
|
.long 0x0
|
|
|
|
.long 0xE1E1E1E2
|
|
|
|
.long 0xC71C71C8
|
|
|
|
.long 0xAF286BCB
|
|
|
|
.long 0x9999999A
|
|
|
|
.long 0x86186187
|
|
|
|
.long 0x745D1746
|
|
|
|
.long 0x642C8591
|
|
|
|
.long 0x55555556
|
|
|
|
.long 0x47AE147B
|
|
|
|
.long 0x3B13B13C
|
|
|
|
.long 0x2F684BDB
|
|
|
|
.long 0x24924925
|
|
|
|
.long 0x1A7B9612
|
|
|
|
.long 0x11111112
|
|
|
|
.long 0x8421085
|
|
|
|
.long 0x0
|
|
|
|
.long 0xF07C1F08
|
|
|
|
.long 0xE1E1E1E2
|
|
|
|
.long 0xD41D41D5
|
|
|
|
.long 0xC71C71C8
|
|
|
|
.long 0xBACF914D
|
|
|
|
.long 0xAF286BCB
|
|
|
|
.long 0xA41A41A5
|
|
|
|
.long 0x9999999A
|
|
|
|
.long 0x8F9C18FA
|
|
|
|
.long 0x86186187
|
|
|
|
.long 0x7D05F418
|
|
|
|
.long 0x745D1746
|
|
|
|
.long 0x6C16C16D
|
|
|
|
.long 0x642C8591
|
|
|
|
.long 0x5C9882BA
|
|
|
|
.long 0x55555556
|
|
|
|
.long 0x4E5E0A73
|
|
|
|
.long 0x47AE147B
|
|
|
|
.long 0x41414142
|
|
|
|
.long 0x3B13B13C
|
|
|
|
.long 0x3521CFB3
|
|
|
|
.long 0x2F684BDB
|
|
|
|
.long 0x29E4129F
|
|
|
|
.long 0x24924925
|
|
|
|
.long 0x1F7047DD
|
|
|
|
.long 0x1A7B9612
|
|
|
|
.long 0x15B1E5F8
|
|
|
|
.long 0x11111112
|
|
|
|
.long 0xC9714FC
|
|
|
|
.long 0x8421085
|
|
|
|
.long 0x4104105
|
|
|
|
.long 0x0
|
|
|
|
.long 0xF81F81F9
|
|
|
|
.long 0xF07C1F08
|
|
|
|
.long 0xE9131AC0
|
|
|
|
.long 0xE1E1E1E2
|
|
|
|
.long 0xDAE6076C
|
|
|
|
.long 0xD41D41D5
|
|
|
|
.long 0xCD856891
|
|
|
|
.long 0xC71C71C8
|
|
|
|
.long 0xC0E07039
|
|
|
|
.long 0xBACF914D
|
|
|
|
.long 0xB4E81B4F
|
|
|
|
.long 0xAF286BCB
|
|
|
|
.long 0xA98EF607
|
|
|
|
.long 0xA41A41A5
|
|
|
|
.long 0x9EC8E952
|
|
|
|
.long 0x9999999A
|
|
|
|
.long 0x948B0FCE
|
|
|
|
.long 0x8F9C18FA
|
|
|
|
.long 0x8ACB90F7
|
|
|
|
.long 0x86186187
|
|
|
|
.long 0x81818182
|
|
|
|
.long 0x7D05F418
|
|
|
|
.long 0x78A4C818
|
|
|
|
.long 0x745D1746
|
|
|
|
.long 0x702E05C1
|
|
|
|
.long 0x6C16C16D
|
|
|
|
.long 0x68168169
|
|
|
|
.long 0x642C8591
|
|
|
|
.long 0x60581606
|
|
|
|
.long 0x5C9882BA
|
|
|
|
.long 0x58ED2309
|
|
|
|
.long 0x55555556
|
|
|
|
.long 0x51D07EAF
|
|
|
|
.long 0x4E5E0A73
|
|
|
|
.long 0x4AFD6A06
|
|
|
|
.long 0x47AE147B
|
|
|
|
.long 0x446F8657
|
|
|
|
.long 0x41414142
|
|
|
|
.long 0x3E22CBCF
|
|
|
|
.long 0x3B13B13C
|
|
|
|
.long 0x38138139
|
|
|
|
.long 0x3521CFB3
|
|
|
|
.long 0x323E34A3
|
|
|
|
.long 0x2F684BDB
|
|
|
|
.long 0x2C9FB4D9
|
|
|
|
.long 0x29E4129F
|
|
|
|
.long 0x27350B89
|
|
|
|
.long 0x24924925
|
|
|
|
.long 0x21FB7813
|
|
|
|
.long 0x1F7047DD
|
|
|
|
.long 0x1CF06ADB
|
|
|
|
.long 0x1A7B9612
|
|
|
|
.long 0x18118119
|
|
|
|
.long 0x15B1E5F8
|
|
|
|
.long 0x135C8114
|
|
|
|
.long 0x11111112
|
|
|
|
.long 0xECF56BF
|
|
|
|
.long 0xC9714FC
|
|
|
|
.long 0xA6810A7
|
|
|
|
.long 0x8421085
|
|
|
|
.long 0x624DD30
|
|
|
|
.long 0x4104105
|
|
|
|
.long 0x2040811
|
|
|
|
/* maximum error: 0.987342 scaled: 0.921875*/
|
|
|
|
|
|
|
|
#endif /* SH3 / SH4 */
|
|
|
|
|
|
|
|
#endif /* L_div_table */
|