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