^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0+ WITH GCC-exception-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) 2004, 2005, 2006
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) Free Software Foundation, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) !! libgcc routines for the Renesas / SuperH SH CPUs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) !! Contributed by Steve Chamberlain.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) !! sac@cygnus.com
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) !! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) !! recoded in assembly by Toshiyasu Morita
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) !! tm@netcom.com
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) /* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) ELF local label prefixes by J"orn Rennecke
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) amylaar@cygnus.com */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) /* This code used shld, thus is not suitable for SH1 / SH2. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) /* Signed / unsigned division without use of FPU, optimized for SH4.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) Uses a lookup table for divisors in the range -128 .. +128, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) div1 with case distinction for larger divisors in three more ranges.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) The code is lumped together with the table to allow the use of mova. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #ifdef CONFIG_CPU_LITTLE_ENDIAN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define L_LSB 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define L_LSWMSB 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define L_MSWLSB 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define L_LSB 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define L_LSWMSB 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define L_MSWLSB 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) .balign 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) .global __udivsi3_i4i
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) .global __udivsi3_i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) .set __udivsi3_i4, __udivsi3_i4i
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) .type __udivsi3_i4i, @function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) __udivsi3_i4i:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) mov.w c128_w, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) div0u
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) mov r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) shlr8 r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) cmp/hi r1,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) extu.w r5,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) bf udiv_le128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) cmp/eq r5,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) bf udiv_ge64k
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) shlr r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) mov r5,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) shll16 r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) mov.l r4,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) mov.l r1,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) bra udiv_25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) div_le128:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) mova div_table_ix,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) bra div_le128_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) mov.b @(r0,r5),r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) udiv_le128:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) mov.l r4,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) mova div_table_ix,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) mov.b @(r0,r5),r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) mov.l r5,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) div_le128_2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) mova div_table_inv,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) mov.l @(r0,r1),r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) mov r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) tst #0xfe,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) mova div_table_clz,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) dmulu.l r1,r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) mov.b @(r0,r5),r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) bt/s div_by_1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) mov r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) mov.l @r15+,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) sts mach,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) /* clrt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) addc r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) mov.l @r15+,r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) rotcr r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) shld r1,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) div_by_1_neg:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) neg r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) div_by_1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) mov.l @r15+,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) mov.l @r15+,r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) div_ge64k:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) bt/s div_r8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) div0u
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) shll8 r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) bra div_ge64k_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) udiv_ge64k:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) cmp/hi r0,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) mov r5,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) bt udiv_r8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) shll8 r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) mov.l r4,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) mov.l r1,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) div_ge64k_2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) mov.l zero_l,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) .rept 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) .endr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) mov.l r1,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) mov.w m256_w,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) mov.b r0,@(L_LSWMSB,r15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) xor r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) and r1,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) bra div_ge64k_end
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) xor r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) div_r8:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) shll16 r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) bra div_r8_2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) shll8 r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) udiv_r8:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) mov.l r4,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) shll16 r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) clrt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) shll8 r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) mov.l r5,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) div_r8_2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) rotcl r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) mov r0,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) div1 r5,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) mov r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) rotcl r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) mov r5,r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) div1 r5,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) .rept 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) rotcl r0; div1 r5,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) .endr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) rotcl r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) mov.l @r15+,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) div1 r4,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) mov.l @r15+,r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) rotcl r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) .global __sdivsi3_i4i
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) .global __sdivsi3_i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) .global __sdivsi3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) .set __sdivsi3_i4, __sdivsi3_i4i
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) .set __sdivsi3, __sdivsi3_i4i
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) .type __sdivsi3_i4i, @function
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) /* This is link-compatible with a __sdivsi3 call,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) but we effectively clobber only r1. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) __sdivsi3_i4i:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) mov.l r4,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) cmp/pz r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) mov.w c128_w, r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) bt/s pos_divisor
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) cmp/pz r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) mov.l r5,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) neg r5,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) bt/s neg_result
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) cmp/hi r1,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) neg r4,r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) pos_result:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) extu.w r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) bf div_le128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) cmp/eq r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) mov r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) shlr8 r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) bf/s div_ge64k
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) cmp/hi r0,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) div0u
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) shll16 r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) udiv_25:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) mov.l zero_l,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) mov.l r1,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) .rept 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) .endr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) mov.b r0,@(L_MSWLSB,r15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) xtrct r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) swap.w r0,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) .rept 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) .endr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) mov.b r0,@(L_LSWMSB,r15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) div_ge64k_end:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) .rept 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) .endr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) mov.l @r15+,r4 ! zero-extension and swap using LS unit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) extu.b r0,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) mov.l @r15+,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) or r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) mov.l @r15+,r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) rotcl r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) div_le128_neg:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) tst #0xfe,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) mova div_table_ix,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) mov.b @(r0,r5),r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) mova div_table_inv,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) bt/s div_by_1_neg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) mov.l @(r0,r1),r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) mova div_table_clz,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) dmulu.l r1,r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) mov.b @(r0,r5),r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) mov.l @r15+,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) sts mach,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) /* clrt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) addc r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) mov.l @r15+,r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) rotcr r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) shld r1,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) neg r0,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) pos_divisor:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) mov.l r5,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) bt/s pos_result
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) cmp/hi r1,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) neg r4,r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) neg_result:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) extu.w r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) bf div_le128_neg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) cmp/eq r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) mov r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) shlr8 r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) bf/s div_ge64k_neg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) cmp/hi r0,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) div0u
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) mov.l zero_l,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) shll16 r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) mov.l r1,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) .rept 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) .endr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) mov.b r0,@(L_MSWLSB,r15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) xtrct r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) swap.w r0,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) .rept 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) .endr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) mov.b r0,@(L_LSWMSB,r15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) div_ge64k_neg_end:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) .rept 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) .endr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) mov.l @r15+,r4 ! zero-extension and swap using LS unit.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) extu.b r0,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) mov.l @r15+,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) or r4,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) div_r8_neg_end:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) mov.l @r15+,r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) rotcl r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) rts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) neg r1,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) div_ge64k_neg:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) bt/s div_r8_neg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) div0u
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) shll8 r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) mov.l zero_l,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) .rept 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) .endr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) mov.l r1,@-r15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) mov.w m256_w,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) mov.b r0,@(L_LSWMSB,r15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) xor r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) and r1,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) bra div_ge64k_neg_end
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) xor r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) c128_w:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) .word 128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) div_r8_neg:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) clrt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) shll16 r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) mov r4,r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) shll8 r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) mov r5,r4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) .rept 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) rotcl r1; div1 r5,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) .endr
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) mov.l @r15+,r5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) rotcl r1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) bra div_r8_neg_end
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) div1 r4,r0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) m256_w:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) .word 0xff00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) /* This table has been generated by divtab-sh4.c. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) .balign 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) div_table_clz:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) .byte 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) .byte 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) .byte 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) .byte -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) .byte -1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) .byte -2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) .byte -2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) .byte -2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) .byte -2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) .byte -3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) .byte -3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) .byte -3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) .byte -3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) .byte -3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) .byte -3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) .byte -3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) .byte -3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) .byte -5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) /* Lookup table translating positive divisor to index into table of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) normalized inverse. N.B. the '0' entry is also the last entry of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) previous table, and causes an unaligned access for division by zero. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) div_table_ix:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) .byte -6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) .byte -128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) .byte -128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) .byte 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) .byte -128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) .byte -64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) .byte 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) .byte 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) .byte -128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) .byte -96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) .byte -64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) .byte -32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) .byte 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) .byte 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) .byte 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) .byte 96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) .byte -128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) .byte -112
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) .byte -96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) .byte -80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) .byte -64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) .byte -48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) .byte -32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) .byte -16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) .byte 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) .byte 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) .byte 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) .byte 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) .byte 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) .byte 80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) .byte 96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) .byte 112
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) .byte -128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) .byte -120
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) .byte -112
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) .byte -104
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) .byte -96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) .byte -88
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) .byte -80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) .byte -72
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) .byte -64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) .byte -56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) .byte -48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) .byte -40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) .byte -32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) .byte -24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) .byte -16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) .byte -8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) .byte 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) .byte 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) .byte 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) .byte 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) .byte 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) .byte 40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) .byte 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) .byte 56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) .byte 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) .byte 72
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) .byte 80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) .byte 88
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) .byte 96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) .byte 104
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) .byte 112
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) .byte 120
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) .byte -128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) .byte -124
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) .byte -120
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) .byte -116
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) .byte -112
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) .byte -108
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) .byte -104
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) .byte -100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) .byte -96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) .byte -92
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) .byte -88
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) .byte -84
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) .byte -80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) .byte -76
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) .byte -72
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) .byte -68
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) .byte -64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) .byte -60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) .byte -56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) .byte -52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) .byte -48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) .byte -44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) .byte -40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) .byte -36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) .byte -32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) .byte -28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) .byte -24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) .byte -20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) .byte -16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) .byte -12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) .byte -8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) .byte -4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) .byte 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) .byte 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) .byte 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) .byte 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) .byte 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) .byte 20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) .byte 24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) .byte 28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) .byte 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) .byte 36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) .byte 40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) .byte 44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) .byte 48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) .byte 52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) .byte 56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) .byte 60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) .byte 64
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) .byte 68
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) .byte 72
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) .byte 76
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) .byte 80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) .byte 84
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) .byte 88
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) .byte 92
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) .byte 96
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) .byte 100
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) .byte 104
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) .byte 108
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) .byte 112
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) .byte 116
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) .byte 120
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) .byte 124
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) .byte -128
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) /* 1/64 .. 1/127, normalized. There is an implicit leading 1 in bit 32. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) .balign 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) zero_l:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) .long 0x0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) .long 0xF81F81F9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) .long 0xF07C1F08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) .long 0xE9131AC0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) .long 0xE1E1E1E2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) .long 0xDAE6076C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) .long 0xD41D41D5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) .long 0xCD856891
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) .long 0xC71C71C8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) .long 0xC0E07039
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) .long 0xBACF914D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) .long 0xB4E81B4F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) .long 0xAF286BCB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) .long 0xA98EF607
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) .long 0xA41A41A5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) .long 0x9EC8E952
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) .long 0x9999999A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) .long 0x948B0FCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) .long 0x8F9C18FA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) .long 0x8ACB90F7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) .long 0x86186187
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) .long 0x81818182
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) .long 0x7D05F418
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) .long 0x78A4C818
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) .long 0x745D1746
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) .long 0x702E05C1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) .long 0x6C16C16D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) .long 0x68168169
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) .long 0x642C8591
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) .long 0x60581606
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) .long 0x5C9882BA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) .long 0x58ED2309
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) div_table_inv:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) .long 0x55555556
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) .long 0x51D07EAF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) .long 0x4E5E0A73
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) .long 0x4AFD6A06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) .long 0x47AE147B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) .long 0x446F8657
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) .long 0x41414142
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) .long 0x3E22CBCF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) .long 0x3B13B13C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) .long 0x38138139
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) .long 0x3521CFB3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) .long 0x323E34A3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) .long 0x2F684BDB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) .long 0x2C9FB4D9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) .long 0x29E4129F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) .long 0x27350B89
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) .long 0x24924925
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) .long 0x21FB7813
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) .long 0x1F7047DD
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) .long 0x1CF06ADB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) .long 0x1A7B9612
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) .long 0x18118119
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) .long 0x15B1E5F8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) .long 0x135C8114
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) .long 0x11111112
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) .long 0xECF56BF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) .long 0xC9714FC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) .long 0xA6810A7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) .long 0x8421085
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) .long 0x624DD30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) .long 0x4104105
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) .long 0x2040811
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) /* maximum error: 0.987342 scaled: 0.921875*/