1*4882a593Smuzhiyun/* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2*4882a593Smuzhiyun 2004, 2005, 2006 3*4882a593Smuzhiyun Free Software Foundation, Inc. 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 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*4882a593Smuzhiyundiv_r8: 127*4882a593Smuzhiyun shll16 r4 128*4882a593Smuzhiyun bra div_r8_2 129*4882a593Smuzhiyun shll8 r4 130*4882a593Smuzhiyunudiv_r8: 131*4882a593Smuzhiyun mov.l r4,@-r15 132*4882a593Smuzhiyun shll16 r4 133*4882a593Smuzhiyun clrt 134*4882a593Smuzhiyun shll8 r4 135*4882a593Smuzhiyun mov.l r5,@-r15 136*4882a593Smuzhiyundiv_r8_2: 137*4882a593Smuzhiyun rotcl r4 138*4882a593Smuzhiyun mov r0,r1 139*4882a593Smuzhiyun div1 r5,r1 140*4882a593Smuzhiyun mov r4,r0 141*4882a593Smuzhiyun rotcl r0 142*4882a593Smuzhiyun mov r5,r4 143*4882a593Smuzhiyun div1 r5,r1 144*4882a593Smuzhiyun .rept 5 145*4882a593Smuzhiyun rotcl r0; div1 r5,r1 146*4882a593Smuzhiyun .endr 147*4882a593Smuzhiyun rotcl r0 148*4882a593Smuzhiyun mov.l @r15+,r5 149*4882a593Smuzhiyun div1 r4,r1 150*4882a593Smuzhiyun mov.l @r15+,r4 151*4882a593Smuzhiyun rts 152*4882a593Smuzhiyun rotcl r0 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun .global __sdivsi3_i4i 155*4882a593Smuzhiyun .global __sdivsi3_i4 156*4882a593Smuzhiyun .global __sdivsi3 157*4882a593Smuzhiyun .set __sdivsi3_i4, __sdivsi3_i4i 158*4882a593Smuzhiyun .set __sdivsi3, __sdivsi3_i4i 159*4882a593Smuzhiyun .type __sdivsi3_i4i, @function 160*4882a593Smuzhiyun /* This is link-compatible with a __sdivsi3 call, 161*4882a593Smuzhiyun but we effectively clobber only r1. */ 162*4882a593Smuzhiyun__sdivsi3_i4i: 163*4882a593Smuzhiyun mov.l r4,@-r15 164*4882a593Smuzhiyun cmp/pz r5 165*4882a593Smuzhiyun mov.w c128_w, r1 166*4882a593Smuzhiyun bt/s pos_divisor 167*4882a593Smuzhiyun cmp/pz r4 168*4882a593Smuzhiyun mov.l r5,@-r15 169*4882a593Smuzhiyun neg r5,r5 170*4882a593Smuzhiyun bt/s neg_result 171*4882a593Smuzhiyun cmp/hi r1,r5 172*4882a593Smuzhiyun neg r4,r4 173*4882a593Smuzhiyunpos_result: 174*4882a593Smuzhiyun extu.w r5,r0 175*4882a593Smuzhiyun bf div_le128 176*4882a593Smuzhiyun cmp/eq r5,r0 177*4882a593Smuzhiyun mov r4,r0 178*4882a593Smuzhiyun shlr8 r0 179*4882a593Smuzhiyun bf/s div_ge64k 180*4882a593Smuzhiyun cmp/hi r0,r5 181*4882a593Smuzhiyun div0u 182*4882a593Smuzhiyun shll16 r5 183*4882a593Smuzhiyun div1 r5,r0 184*4882a593Smuzhiyun div1 r5,r0 185*4882a593Smuzhiyun div1 r5,r0 186*4882a593Smuzhiyunudiv_25: 187*4882a593Smuzhiyun mov.l zero_l,r1 188*4882a593Smuzhiyun div1 r5,r0 189*4882a593Smuzhiyun div1 r5,r0 190*4882a593Smuzhiyun mov.l r1,@-r15 191*4882a593Smuzhiyun .rept 3 192*4882a593Smuzhiyun div1 r5,r0 193*4882a593Smuzhiyun .endr 194*4882a593Smuzhiyun mov.b r0,@(L_MSWLSB,r15) 195*4882a593Smuzhiyun xtrct r4,r0 196*4882a593Smuzhiyun swap.w r0,r0 197*4882a593Smuzhiyun .rept 8 198*4882a593Smuzhiyun div1 r5,r0 199*4882a593Smuzhiyun .endr 200*4882a593Smuzhiyun mov.b r0,@(L_LSWMSB,r15) 201*4882a593Smuzhiyundiv_ge64k_end: 202*4882a593Smuzhiyun .rept 8 203*4882a593Smuzhiyun div1 r5,r0 204*4882a593Smuzhiyun .endr 205*4882a593Smuzhiyun mov.l @r15+,r4 ! zero-extension and swap using LS unit. 206*4882a593Smuzhiyun extu.b r0,r0 207*4882a593Smuzhiyun mov.l @r15+,r5 208*4882a593Smuzhiyun or r4,r0 209*4882a593Smuzhiyun mov.l @r15+,r4 210*4882a593Smuzhiyun rts 211*4882a593Smuzhiyun rotcl r0 212*4882a593Smuzhiyun 213*4882a593Smuzhiyundiv_le128_neg: 214*4882a593Smuzhiyun tst #0xfe,r0 215*4882a593Smuzhiyun mova div_table_ix,r0 216*4882a593Smuzhiyun mov.b @(r0,r5),r1 217*4882a593Smuzhiyun mova div_table_inv,r0 218*4882a593Smuzhiyun bt/s div_by_1_neg 219*4882a593Smuzhiyun mov.l @(r0,r1),r1 220*4882a593Smuzhiyun mova div_table_clz,r0 221*4882a593Smuzhiyun dmulu.l r1,r4 222*4882a593Smuzhiyun mov.b @(r0,r5),r1 223*4882a593Smuzhiyun mov.l @r15+,r5 224*4882a593Smuzhiyun sts mach,r0 225*4882a593Smuzhiyun /* clrt */ 226*4882a593Smuzhiyun addc r4,r0 227*4882a593Smuzhiyun mov.l @r15+,r4 228*4882a593Smuzhiyun rotcr r0 229*4882a593Smuzhiyun shld r1,r0 230*4882a593Smuzhiyun rts 231*4882a593Smuzhiyun neg r0,r0 232*4882a593Smuzhiyun 233*4882a593Smuzhiyunpos_divisor: 234*4882a593Smuzhiyun mov.l r5,@-r15 235*4882a593Smuzhiyun bt/s pos_result 236*4882a593Smuzhiyun cmp/hi r1,r5 237*4882a593Smuzhiyun neg r4,r4 238*4882a593Smuzhiyunneg_result: 239*4882a593Smuzhiyun extu.w r5,r0 240*4882a593Smuzhiyun bf div_le128_neg 241*4882a593Smuzhiyun cmp/eq r5,r0 242*4882a593Smuzhiyun mov r4,r0 243*4882a593Smuzhiyun shlr8 r0 244*4882a593Smuzhiyun bf/s div_ge64k_neg 245*4882a593Smuzhiyun cmp/hi r0,r5 246*4882a593Smuzhiyun div0u 247*4882a593Smuzhiyun mov.l zero_l,r1 248*4882a593Smuzhiyun shll16 r5 249*4882a593Smuzhiyun div1 r5,r0 250*4882a593Smuzhiyun mov.l r1,@-r15 251*4882a593Smuzhiyun .rept 7 252*4882a593Smuzhiyun div1 r5,r0 253*4882a593Smuzhiyun .endr 254*4882a593Smuzhiyun mov.b r0,@(L_MSWLSB,r15) 255*4882a593Smuzhiyun xtrct r4,r0 256*4882a593Smuzhiyun swap.w r0,r0 257*4882a593Smuzhiyun .rept 8 258*4882a593Smuzhiyun div1 r5,r0 259*4882a593Smuzhiyun .endr 260*4882a593Smuzhiyun mov.b r0,@(L_LSWMSB,r15) 261*4882a593Smuzhiyundiv_ge64k_neg_end: 262*4882a593Smuzhiyun .rept 8 263*4882a593Smuzhiyun div1 r5,r0 264*4882a593Smuzhiyun .endr 265*4882a593Smuzhiyun mov.l @r15+,r4 ! zero-extension and swap using LS unit. 266*4882a593Smuzhiyun extu.b r0,r1 267*4882a593Smuzhiyun mov.l @r15+,r5 268*4882a593Smuzhiyun or r4,r1 269*4882a593Smuzhiyundiv_r8_neg_end: 270*4882a593Smuzhiyun mov.l @r15+,r4 271*4882a593Smuzhiyun rotcl r1 272*4882a593Smuzhiyun rts 273*4882a593Smuzhiyun neg r1,r0 274*4882a593Smuzhiyun 275*4882a593Smuzhiyundiv_ge64k_neg: 276*4882a593Smuzhiyun bt/s div_r8_neg 277*4882a593Smuzhiyun div0u 278*4882a593Smuzhiyun shll8 r5 279*4882a593Smuzhiyun mov.l zero_l,r1 280*4882a593Smuzhiyun .rept 6 281*4882a593Smuzhiyun div1 r5,r0 282*4882a593Smuzhiyun .endr 283*4882a593Smuzhiyun mov.l r1,@-r15 284*4882a593Smuzhiyun div1 r5,r0 285*4882a593Smuzhiyun mov.w m256_w,r1 286*4882a593Smuzhiyun div1 r5,r0 287*4882a593Smuzhiyun mov.b r0,@(L_LSWMSB,r15) 288*4882a593Smuzhiyun xor r4,r0 289*4882a593Smuzhiyun and r1,r0 290*4882a593Smuzhiyun bra div_ge64k_neg_end 291*4882a593Smuzhiyun xor r4,r0 292*4882a593Smuzhiyun 293*4882a593Smuzhiyunc128_w: 294*4882a593Smuzhiyun .word 128 295*4882a593Smuzhiyun 296*4882a593Smuzhiyundiv_r8_neg: 297*4882a593Smuzhiyun clrt 298*4882a593Smuzhiyun shll16 r4 299*4882a593Smuzhiyun mov r4,r1 300*4882a593Smuzhiyun shll8 r1 301*4882a593Smuzhiyun mov r5,r4 302*4882a593Smuzhiyun .rept 7 303*4882a593Smuzhiyun rotcl r1; div1 r5,r0 304*4882a593Smuzhiyun .endr 305*4882a593Smuzhiyun mov.l @r15+,r5 306*4882a593Smuzhiyun rotcl r1 307*4882a593Smuzhiyun bra div_r8_neg_end 308*4882a593Smuzhiyun div1 r4,r0 309*4882a593Smuzhiyun 310*4882a593Smuzhiyunm256_w: 311*4882a593Smuzhiyun .word 0xff00 312*4882a593Smuzhiyun/* This table has been generated by divtab-sh4.c. */ 313*4882a593Smuzhiyun .balign 4 314*4882a593Smuzhiyundiv_table_clz: 315*4882a593Smuzhiyun .byte 0 316*4882a593Smuzhiyun .byte 1 317*4882a593Smuzhiyun .byte 0 318*4882a593Smuzhiyun .byte -1 319*4882a593Smuzhiyun .byte -1 320*4882a593Smuzhiyun .byte -2 321*4882a593Smuzhiyun .byte -2 322*4882a593Smuzhiyun .byte -2 323*4882a593Smuzhiyun .byte -2 324*4882a593Smuzhiyun .byte -3 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 -4 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 -5 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 -6 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/* Lookup table translating positive divisor to index into table of 444*4882a593Smuzhiyun normalized inverse. N.B. the '0' entry is also the last entry of the 445*4882a593Smuzhiyun previous table, and causes an unaligned access for division by zero. */ 446*4882a593Smuzhiyundiv_table_ix: 447*4882a593Smuzhiyun .byte -6 448*4882a593Smuzhiyun .byte -128 449*4882a593Smuzhiyun .byte -128 450*4882a593Smuzhiyun .byte 0 451*4882a593Smuzhiyun .byte -128 452*4882a593Smuzhiyun .byte -64 453*4882a593Smuzhiyun .byte 0 454*4882a593Smuzhiyun .byte 64 455*4882a593Smuzhiyun .byte -128 456*4882a593Smuzhiyun .byte -96 457*4882a593Smuzhiyun .byte -64 458*4882a593Smuzhiyun .byte -32 459*4882a593Smuzhiyun .byte 0 460*4882a593Smuzhiyun .byte 32 461*4882a593Smuzhiyun .byte 64 462*4882a593Smuzhiyun .byte 96 463*4882a593Smuzhiyun .byte -128 464*4882a593Smuzhiyun .byte -112 465*4882a593Smuzhiyun .byte -96 466*4882a593Smuzhiyun .byte -80 467*4882a593Smuzhiyun .byte -64 468*4882a593Smuzhiyun .byte -48 469*4882a593Smuzhiyun .byte -32 470*4882a593Smuzhiyun .byte -16 471*4882a593Smuzhiyun .byte 0 472*4882a593Smuzhiyun .byte 16 473*4882a593Smuzhiyun .byte 32 474*4882a593Smuzhiyun .byte 48 475*4882a593Smuzhiyun .byte 64 476*4882a593Smuzhiyun .byte 80 477*4882a593Smuzhiyun .byte 96 478*4882a593Smuzhiyun .byte 112 479*4882a593Smuzhiyun .byte -128 480*4882a593Smuzhiyun .byte -120 481*4882a593Smuzhiyun .byte -112 482*4882a593Smuzhiyun .byte -104 483*4882a593Smuzhiyun .byte -96 484*4882a593Smuzhiyun .byte -88 485*4882a593Smuzhiyun .byte -80 486*4882a593Smuzhiyun .byte -72 487*4882a593Smuzhiyun .byte -64 488*4882a593Smuzhiyun .byte -56 489*4882a593Smuzhiyun .byte -48 490*4882a593Smuzhiyun .byte -40 491*4882a593Smuzhiyun .byte -32 492*4882a593Smuzhiyun .byte -24 493*4882a593Smuzhiyun .byte -16 494*4882a593Smuzhiyun .byte -8 495*4882a593Smuzhiyun .byte 0 496*4882a593Smuzhiyun .byte 8 497*4882a593Smuzhiyun .byte 16 498*4882a593Smuzhiyun .byte 24 499*4882a593Smuzhiyun .byte 32 500*4882a593Smuzhiyun .byte 40 501*4882a593Smuzhiyun .byte 48 502*4882a593Smuzhiyun .byte 56 503*4882a593Smuzhiyun .byte 64 504*4882a593Smuzhiyun .byte 72 505*4882a593Smuzhiyun .byte 80 506*4882a593Smuzhiyun .byte 88 507*4882a593Smuzhiyun .byte 96 508*4882a593Smuzhiyun .byte 104 509*4882a593Smuzhiyun .byte 112 510*4882a593Smuzhiyun .byte 120 511*4882a593Smuzhiyun .byte -128 512*4882a593Smuzhiyun .byte -124 513*4882a593Smuzhiyun .byte -120 514*4882a593Smuzhiyun .byte -116 515*4882a593Smuzhiyun .byte -112 516*4882a593Smuzhiyun .byte -108 517*4882a593Smuzhiyun .byte -104 518*4882a593Smuzhiyun .byte -100 519*4882a593Smuzhiyun .byte -96 520*4882a593Smuzhiyun .byte -92 521*4882a593Smuzhiyun .byte -88 522*4882a593Smuzhiyun .byte -84 523*4882a593Smuzhiyun .byte -80 524*4882a593Smuzhiyun .byte -76 525*4882a593Smuzhiyun .byte -72 526*4882a593Smuzhiyun .byte -68 527*4882a593Smuzhiyun .byte -64 528*4882a593Smuzhiyun .byte -60 529*4882a593Smuzhiyun .byte -56 530*4882a593Smuzhiyun .byte -52 531*4882a593Smuzhiyun .byte -48 532*4882a593Smuzhiyun .byte -44 533*4882a593Smuzhiyun .byte -40 534*4882a593Smuzhiyun .byte -36 535*4882a593Smuzhiyun .byte -32 536*4882a593Smuzhiyun .byte -28 537*4882a593Smuzhiyun .byte -24 538*4882a593Smuzhiyun .byte -20 539*4882a593Smuzhiyun .byte -16 540*4882a593Smuzhiyun .byte -12 541*4882a593Smuzhiyun .byte -8 542*4882a593Smuzhiyun .byte -4 543*4882a593Smuzhiyun .byte 0 544*4882a593Smuzhiyun .byte 4 545*4882a593Smuzhiyun .byte 8 546*4882a593Smuzhiyun .byte 12 547*4882a593Smuzhiyun .byte 16 548*4882a593Smuzhiyun .byte 20 549*4882a593Smuzhiyun .byte 24 550*4882a593Smuzhiyun .byte 28 551*4882a593Smuzhiyun .byte 32 552*4882a593Smuzhiyun .byte 36 553*4882a593Smuzhiyun .byte 40 554*4882a593Smuzhiyun .byte 44 555*4882a593Smuzhiyun .byte 48 556*4882a593Smuzhiyun .byte 52 557*4882a593Smuzhiyun .byte 56 558*4882a593Smuzhiyun .byte 60 559*4882a593Smuzhiyun .byte 64 560*4882a593Smuzhiyun .byte 68 561*4882a593Smuzhiyun .byte 72 562*4882a593Smuzhiyun .byte 76 563*4882a593Smuzhiyun .byte 80 564*4882a593Smuzhiyun .byte 84 565*4882a593Smuzhiyun .byte 88 566*4882a593Smuzhiyun .byte 92 567*4882a593Smuzhiyun .byte 96 568*4882a593Smuzhiyun .byte 100 569*4882a593Smuzhiyun .byte 104 570*4882a593Smuzhiyun .byte 108 571*4882a593Smuzhiyun .byte 112 572*4882a593Smuzhiyun .byte 116 573*4882a593Smuzhiyun .byte 120 574*4882a593Smuzhiyun .byte 124 575*4882a593Smuzhiyun .byte -128 576*4882a593Smuzhiyun/* 1/64 .. 1/127, normalized. There is an implicit leading 1 in bit 32. */ 577*4882a593Smuzhiyun .balign 4 578*4882a593Smuzhiyunzero_l: 579*4882a593Smuzhiyun .long 0x0 580*4882a593Smuzhiyun .long 0xF81F81F9 581*4882a593Smuzhiyun .long 0xF07C1F08 582*4882a593Smuzhiyun .long 0xE9131AC0 583*4882a593Smuzhiyun .long 0xE1E1E1E2 584*4882a593Smuzhiyun .long 0xDAE6076C 585*4882a593Smuzhiyun .long 0xD41D41D5 586*4882a593Smuzhiyun .long 0xCD856891 587*4882a593Smuzhiyun .long 0xC71C71C8 588*4882a593Smuzhiyun .long 0xC0E07039 589*4882a593Smuzhiyun .long 0xBACF914D 590*4882a593Smuzhiyun .long 0xB4E81B4F 591*4882a593Smuzhiyun .long 0xAF286BCB 592*4882a593Smuzhiyun .long 0xA98EF607 593*4882a593Smuzhiyun .long 0xA41A41A5 594*4882a593Smuzhiyun .long 0x9EC8E952 595*4882a593Smuzhiyun .long 0x9999999A 596*4882a593Smuzhiyun .long 0x948B0FCE 597*4882a593Smuzhiyun .long 0x8F9C18FA 598*4882a593Smuzhiyun .long 0x8ACB90F7 599*4882a593Smuzhiyun .long 0x86186187 600*4882a593Smuzhiyun .long 0x81818182 601*4882a593Smuzhiyun .long 0x7D05F418 602*4882a593Smuzhiyun .long 0x78A4C818 603*4882a593Smuzhiyun .long 0x745D1746 604*4882a593Smuzhiyun .long 0x702E05C1 605*4882a593Smuzhiyun .long 0x6C16C16D 606*4882a593Smuzhiyun .long 0x68168169 607*4882a593Smuzhiyun .long 0x642C8591 608*4882a593Smuzhiyun .long 0x60581606 609*4882a593Smuzhiyun .long 0x5C9882BA 610*4882a593Smuzhiyun .long 0x58ED2309 611*4882a593Smuzhiyundiv_table_inv: 612*4882a593Smuzhiyun .long 0x55555556 613*4882a593Smuzhiyun .long 0x51D07EAF 614*4882a593Smuzhiyun .long 0x4E5E0A73 615*4882a593Smuzhiyun .long 0x4AFD6A06 616*4882a593Smuzhiyun .long 0x47AE147B 617*4882a593Smuzhiyun .long 0x446F8657 618*4882a593Smuzhiyun .long 0x41414142 619*4882a593Smuzhiyun .long 0x3E22CBCF 620*4882a593Smuzhiyun .long 0x3B13B13C 621*4882a593Smuzhiyun .long 0x38138139 622*4882a593Smuzhiyun .long 0x3521CFB3 623*4882a593Smuzhiyun .long 0x323E34A3 624*4882a593Smuzhiyun .long 0x2F684BDB 625*4882a593Smuzhiyun .long 0x2C9FB4D9 626*4882a593Smuzhiyun .long 0x29E4129F 627*4882a593Smuzhiyun .long 0x27350B89 628*4882a593Smuzhiyun .long 0x24924925 629*4882a593Smuzhiyun .long 0x21FB7813 630*4882a593Smuzhiyun .long 0x1F7047DD 631*4882a593Smuzhiyun .long 0x1CF06ADB 632*4882a593Smuzhiyun .long 0x1A7B9612 633*4882a593Smuzhiyun .long 0x18118119 634*4882a593Smuzhiyun .long 0x15B1E5F8 635*4882a593Smuzhiyun .long 0x135C8114 636*4882a593Smuzhiyun .long 0x11111112 637*4882a593Smuzhiyun .long 0xECF56BF 638*4882a593Smuzhiyun .long 0xC9714FC 639*4882a593Smuzhiyun .long 0xA6810A7 640*4882a593Smuzhiyun .long 0x8421085 641*4882a593Smuzhiyun .long 0x624DD30 642*4882a593Smuzhiyun .long 0x4104105 643*4882a593Smuzhiyun .long 0x2040811 644*4882a593Smuzhiyun /* maximum error: 0.987342 scaled: 0.921875*/ 645