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