1*83d290c5STom Rini/* SPDX-License-Identifier: GPL-2.0+ */ 25f91a3adSMasahiro Yamada/* Copyright (C) 1994, 1995, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 35f91a3adSMasahiro Yamada 2004, 2005, 2006 45f91a3adSMasahiro Yamada Free Software Foundation, Inc. 55f91a3adSMasahiro Yamada */ 65f91a3adSMasahiro Yamada 75f91a3adSMasahiro Yamada!! libgcc routines for the Renesas / SuperH SH CPUs. 85f91a3adSMasahiro Yamada!! Contributed by Steve Chamberlain. 95f91a3adSMasahiro Yamada!! sac@cygnus.com 105f91a3adSMasahiro Yamada 115f91a3adSMasahiro Yamada!! ashiftrt_r4_x, ___ashrsi3, ___ashlsi3, ___lshrsi3 routines 125f91a3adSMasahiro Yamada!! recoded in assembly by Toshiyasu Morita 135f91a3adSMasahiro Yamada!! tm@netcom.com 145f91a3adSMasahiro Yamada 155f91a3adSMasahiro Yamada/* SH2 optimizations for ___ashrsi3, ___ashlsi3, ___lshrsi3 and 165f91a3adSMasahiro Yamada ELF local label prefixes by J"orn Rennecke 175f91a3adSMasahiro Yamada amylaar@cygnus.com */ 185f91a3adSMasahiro Yamada 195f91a3adSMasahiro Yamada/* This code used shld, thus is not suitable for SH1 / SH2. */ 205f91a3adSMasahiro Yamada 215f91a3adSMasahiro Yamada/* Signed / unsigned division without use of FPU, optimized for SH4. 225f91a3adSMasahiro Yamada Uses a lookup table for divisors in the range -128 .. +128, and 235f91a3adSMasahiro Yamada div1 with case distinction for larger divisors in three more ranges. 245f91a3adSMasahiro Yamada The code is lumped together with the table to allow the use of mova. */ 255f91a3adSMasahiro Yamada#ifdef CONFIG_CPU_LITTLE_ENDIAN 265f91a3adSMasahiro Yamada#define L_LSB 0 275f91a3adSMasahiro Yamada#define L_LSWMSB 1 285f91a3adSMasahiro Yamada#define L_MSWLSB 2 295f91a3adSMasahiro Yamada#else 305f91a3adSMasahiro Yamada#define L_LSB 3 315f91a3adSMasahiro Yamada#define L_LSWMSB 2 325f91a3adSMasahiro Yamada#define L_MSWLSB 1 335f91a3adSMasahiro Yamada#endif 345f91a3adSMasahiro Yamada 355f91a3adSMasahiro Yamada .balign 4 365f91a3adSMasahiro Yamada .global __udivsi3_i4i 375f91a3adSMasahiro Yamada .global __udivsi3_i4 385f91a3adSMasahiro Yamada .set __udivsi3_i4, __udivsi3_i4i 395f91a3adSMasahiro Yamada .type __udivsi3_i4i, @function 405f91a3adSMasahiro Yamada__udivsi3_i4i: 415f91a3adSMasahiro Yamada mov.w c128_w, r1 425f91a3adSMasahiro Yamada div0u 435f91a3adSMasahiro Yamada mov r4,r0 445f91a3adSMasahiro Yamada shlr8 r0 455f91a3adSMasahiro Yamada cmp/hi r1,r5 465f91a3adSMasahiro Yamada extu.w r5,r1 475f91a3adSMasahiro Yamada bf udiv_le128 485f91a3adSMasahiro Yamada cmp/eq r5,r1 495f91a3adSMasahiro Yamada bf udiv_ge64k 505f91a3adSMasahiro Yamada shlr r0 515f91a3adSMasahiro Yamada mov r5,r1 525f91a3adSMasahiro Yamada shll16 r5 535f91a3adSMasahiro Yamada mov.l r4,@-r15 545f91a3adSMasahiro Yamada div1 r5,r0 555f91a3adSMasahiro Yamada mov.l r1,@-r15 565f91a3adSMasahiro Yamada div1 r5,r0 575f91a3adSMasahiro Yamada div1 r5,r0 585f91a3adSMasahiro Yamada bra udiv_25 595f91a3adSMasahiro Yamada div1 r5,r0 605f91a3adSMasahiro Yamada 615f91a3adSMasahiro Yamadadiv_le128: 625f91a3adSMasahiro Yamada mova div_table_ix,r0 635f91a3adSMasahiro Yamada bra div_le128_2 645f91a3adSMasahiro Yamada mov.b @(r0,r5),r1 655f91a3adSMasahiro Yamadaudiv_le128: 665f91a3adSMasahiro Yamada mov.l r4,@-r15 675f91a3adSMasahiro Yamada mova div_table_ix,r0 685f91a3adSMasahiro Yamada mov.b @(r0,r5),r1 695f91a3adSMasahiro Yamada mov.l r5,@-r15 705f91a3adSMasahiro Yamadadiv_le128_2: 715f91a3adSMasahiro Yamada mova div_table_inv,r0 725f91a3adSMasahiro Yamada mov.l @(r0,r1),r1 735f91a3adSMasahiro Yamada mov r5,r0 745f91a3adSMasahiro Yamada tst #0xfe,r0 755f91a3adSMasahiro Yamada mova div_table_clz,r0 765f91a3adSMasahiro Yamada dmulu.l r1,r4 775f91a3adSMasahiro Yamada mov.b @(r0,r5),r1 785f91a3adSMasahiro Yamada bt/s div_by_1 795f91a3adSMasahiro Yamada mov r4,r0 805f91a3adSMasahiro Yamada mov.l @r15+,r5 815f91a3adSMasahiro Yamada sts mach,r0 825f91a3adSMasahiro Yamada /* clrt */ 835f91a3adSMasahiro Yamada addc r4,r0 845f91a3adSMasahiro Yamada mov.l @r15+,r4 855f91a3adSMasahiro Yamada rotcr r0 865f91a3adSMasahiro Yamada rts 875f91a3adSMasahiro Yamada shld r1,r0 885f91a3adSMasahiro Yamada 895f91a3adSMasahiro Yamadadiv_by_1_neg: 905f91a3adSMasahiro Yamada neg r4,r0 915f91a3adSMasahiro Yamadadiv_by_1: 925f91a3adSMasahiro Yamada mov.l @r15+,r5 935f91a3adSMasahiro Yamada rts 945f91a3adSMasahiro Yamada mov.l @r15+,r4 955f91a3adSMasahiro Yamada 965f91a3adSMasahiro Yamadadiv_ge64k: 975f91a3adSMasahiro Yamada bt/s div_r8 985f91a3adSMasahiro Yamada div0u 995f91a3adSMasahiro Yamada shll8 r5 1005f91a3adSMasahiro Yamada bra div_ge64k_2 1015f91a3adSMasahiro Yamada div1 r5,r0 1025f91a3adSMasahiro Yamadaudiv_ge64k: 1035f91a3adSMasahiro Yamada cmp/hi r0,r5 1045f91a3adSMasahiro Yamada mov r5,r1 1055f91a3adSMasahiro Yamada bt udiv_r8 1065f91a3adSMasahiro Yamada shll8 r5 1075f91a3adSMasahiro Yamada mov.l r4,@-r15 1085f91a3adSMasahiro Yamada div1 r5,r0 1095f91a3adSMasahiro Yamada mov.l r1,@-r15 1105f91a3adSMasahiro Yamadadiv_ge64k_2: 1115f91a3adSMasahiro Yamada div1 r5,r0 1125f91a3adSMasahiro Yamada mov.l zero_l,r1 1135f91a3adSMasahiro Yamada .rept 4 1145f91a3adSMasahiro Yamada div1 r5,r0 1155f91a3adSMasahiro Yamada .endr 1165f91a3adSMasahiro Yamada mov.l r1,@-r15 1175f91a3adSMasahiro Yamada div1 r5,r0 1185f91a3adSMasahiro Yamada mov.w m256_w,r1 1195f91a3adSMasahiro Yamada div1 r5,r0 1205f91a3adSMasahiro Yamada mov.b r0,@(L_LSWMSB,r15) 1215f91a3adSMasahiro Yamada xor r4,r0 1225f91a3adSMasahiro Yamada and r1,r0 1235f91a3adSMasahiro Yamada bra div_ge64k_end 1245f91a3adSMasahiro Yamada xor r4,r0 1255f91a3adSMasahiro Yamadadiv_r8: 1265f91a3adSMasahiro Yamada shll16 r4 1275f91a3adSMasahiro Yamada bra div_r8_2 1285f91a3adSMasahiro Yamada shll8 r4 1295f91a3adSMasahiro Yamadaudiv_r8: 1305f91a3adSMasahiro Yamada mov.l r4,@-r15 1315f91a3adSMasahiro Yamada shll16 r4 1325f91a3adSMasahiro Yamada clrt 1335f91a3adSMasahiro Yamada shll8 r4 1345f91a3adSMasahiro Yamada mov.l r5,@-r15 1355f91a3adSMasahiro Yamadadiv_r8_2: 1365f91a3adSMasahiro Yamada rotcl r4 1375f91a3adSMasahiro Yamada mov r0,r1 1385f91a3adSMasahiro Yamada div1 r5,r1 1395f91a3adSMasahiro Yamada mov r4,r0 1405f91a3adSMasahiro Yamada rotcl r0 1415f91a3adSMasahiro Yamada mov r5,r4 1425f91a3adSMasahiro Yamada div1 r5,r1 1435f91a3adSMasahiro Yamada .rept 5 1445f91a3adSMasahiro Yamada rotcl r0; div1 r5,r1 1455f91a3adSMasahiro Yamada .endr 1465f91a3adSMasahiro Yamada rotcl r0 1475f91a3adSMasahiro Yamada mov.l @r15+,r5 1485f91a3adSMasahiro Yamada div1 r4,r1 1495f91a3adSMasahiro Yamada mov.l @r15+,r4 1505f91a3adSMasahiro Yamada rts 1515f91a3adSMasahiro Yamada rotcl r0 1525f91a3adSMasahiro Yamada 1535f91a3adSMasahiro Yamada .global __sdivsi3_i4i 1545f91a3adSMasahiro Yamada .global __sdivsi3_i4 1555f91a3adSMasahiro Yamada .global __sdivsi3 1565f91a3adSMasahiro Yamada .set __sdivsi3_i4, __sdivsi3_i4i 1575f91a3adSMasahiro Yamada .set __sdivsi3, __sdivsi3_i4i 1585f91a3adSMasahiro Yamada .type __sdivsi3_i4i, @function 1595f91a3adSMasahiro Yamada /* This is link-compatible with a __sdivsi3 call, 1605f91a3adSMasahiro Yamada but we effectively clobber only r1. */ 1615f91a3adSMasahiro Yamada__sdivsi3_i4i: 1625f91a3adSMasahiro Yamada mov.l r4,@-r15 1635f91a3adSMasahiro Yamada cmp/pz r5 1645f91a3adSMasahiro Yamada mov.w c128_w, r1 1655f91a3adSMasahiro Yamada bt/s pos_divisor 1665f91a3adSMasahiro Yamada cmp/pz r4 1675f91a3adSMasahiro Yamada mov.l r5,@-r15 1685f91a3adSMasahiro Yamada neg r5,r5 1695f91a3adSMasahiro Yamada bt/s neg_result 1705f91a3adSMasahiro Yamada cmp/hi r1,r5 1715f91a3adSMasahiro Yamada neg r4,r4 1725f91a3adSMasahiro Yamadapos_result: 1735f91a3adSMasahiro Yamada extu.w r5,r0 1745f91a3adSMasahiro Yamada bf div_le128 1755f91a3adSMasahiro Yamada cmp/eq r5,r0 1765f91a3adSMasahiro Yamada mov r4,r0 1775f91a3adSMasahiro Yamada shlr8 r0 1785f91a3adSMasahiro Yamada bf/s div_ge64k 1795f91a3adSMasahiro Yamada cmp/hi r0,r5 1805f91a3adSMasahiro Yamada div0u 1815f91a3adSMasahiro Yamada shll16 r5 1825f91a3adSMasahiro Yamada div1 r5,r0 1835f91a3adSMasahiro Yamada div1 r5,r0 1845f91a3adSMasahiro Yamada div1 r5,r0 1855f91a3adSMasahiro Yamadaudiv_25: 1865f91a3adSMasahiro Yamada mov.l zero_l,r1 1875f91a3adSMasahiro Yamada div1 r5,r0 1885f91a3adSMasahiro Yamada div1 r5,r0 1895f91a3adSMasahiro Yamada mov.l r1,@-r15 1905f91a3adSMasahiro Yamada .rept 3 1915f91a3adSMasahiro Yamada div1 r5,r0 1925f91a3adSMasahiro Yamada .endr 1935f91a3adSMasahiro Yamada mov.b r0,@(L_MSWLSB,r15) 1945f91a3adSMasahiro Yamada xtrct r4,r0 1955f91a3adSMasahiro Yamada swap.w r0,r0 1965f91a3adSMasahiro Yamada .rept 8 1975f91a3adSMasahiro Yamada div1 r5,r0 1985f91a3adSMasahiro Yamada .endr 1995f91a3adSMasahiro Yamada mov.b r0,@(L_LSWMSB,r15) 2005f91a3adSMasahiro Yamadadiv_ge64k_end: 2015f91a3adSMasahiro Yamada .rept 8 2025f91a3adSMasahiro Yamada div1 r5,r0 2035f91a3adSMasahiro Yamada .endr 2045f91a3adSMasahiro Yamada mov.l @r15+,r4 ! zero-extension and swap using LS unit. 2055f91a3adSMasahiro Yamada extu.b r0,r0 2065f91a3adSMasahiro Yamada mov.l @r15+,r5 2075f91a3adSMasahiro Yamada or r4,r0 2085f91a3adSMasahiro Yamada mov.l @r15+,r4 2095f91a3adSMasahiro Yamada rts 2105f91a3adSMasahiro Yamada rotcl r0 2115f91a3adSMasahiro Yamada 2125f91a3adSMasahiro Yamadadiv_le128_neg: 2135f91a3adSMasahiro Yamada tst #0xfe,r0 2145f91a3adSMasahiro Yamada mova div_table_ix,r0 2155f91a3adSMasahiro Yamada mov.b @(r0,r5),r1 2165f91a3adSMasahiro Yamada mova div_table_inv,r0 2175f91a3adSMasahiro Yamada bt/s div_by_1_neg 2185f91a3adSMasahiro Yamada mov.l @(r0,r1),r1 2195f91a3adSMasahiro Yamada mova div_table_clz,r0 2205f91a3adSMasahiro Yamada dmulu.l r1,r4 2215f91a3adSMasahiro Yamada mov.b @(r0,r5),r1 2225f91a3adSMasahiro Yamada mov.l @r15+,r5 2235f91a3adSMasahiro Yamada sts mach,r0 2245f91a3adSMasahiro Yamada /* clrt */ 2255f91a3adSMasahiro Yamada addc r4,r0 2265f91a3adSMasahiro Yamada mov.l @r15+,r4 2275f91a3adSMasahiro Yamada rotcr r0 2285f91a3adSMasahiro Yamada shld r1,r0 2295f91a3adSMasahiro Yamada rts 2305f91a3adSMasahiro Yamada neg r0,r0 2315f91a3adSMasahiro Yamada 2325f91a3adSMasahiro Yamadapos_divisor: 2335f91a3adSMasahiro Yamada mov.l r5,@-r15 2345f91a3adSMasahiro Yamada bt/s pos_result 2355f91a3adSMasahiro Yamada cmp/hi r1,r5 2365f91a3adSMasahiro Yamada neg r4,r4 2375f91a3adSMasahiro Yamadaneg_result: 2385f91a3adSMasahiro Yamada extu.w r5,r0 2395f91a3adSMasahiro Yamada bf div_le128_neg 2405f91a3adSMasahiro Yamada cmp/eq r5,r0 2415f91a3adSMasahiro Yamada mov r4,r0 2425f91a3adSMasahiro Yamada shlr8 r0 2435f91a3adSMasahiro Yamada bf/s div_ge64k_neg 2445f91a3adSMasahiro Yamada cmp/hi r0,r5 2455f91a3adSMasahiro Yamada div0u 2465f91a3adSMasahiro Yamada mov.l zero_l,r1 2475f91a3adSMasahiro Yamada shll16 r5 2485f91a3adSMasahiro Yamada div1 r5,r0 2495f91a3adSMasahiro Yamada mov.l r1,@-r15 2505f91a3adSMasahiro Yamada .rept 7 2515f91a3adSMasahiro Yamada div1 r5,r0 2525f91a3adSMasahiro Yamada .endr 2535f91a3adSMasahiro Yamada mov.b r0,@(L_MSWLSB,r15) 2545f91a3adSMasahiro Yamada xtrct r4,r0 2555f91a3adSMasahiro Yamada swap.w r0,r0 2565f91a3adSMasahiro Yamada .rept 8 2575f91a3adSMasahiro Yamada div1 r5,r0 2585f91a3adSMasahiro Yamada .endr 2595f91a3adSMasahiro Yamada mov.b r0,@(L_LSWMSB,r15) 2605f91a3adSMasahiro Yamadadiv_ge64k_neg_end: 2615f91a3adSMasahiro Yamada .rept 8 2625f91a3adSMasahiro Yamada div1 r5,r0 2635f91a3adSMasahiro Yamada .endr 2645f91a3adSMasahiro Yamada mov.l @r15+,r4 ! zero-extension and swap using LS unit. 2655f91a3adSMasahiro Yamada extu.b r0,r1 2665f91a3adSMasahiro Yamada mov.l @r15+,r5 2675f91a3adSMasahiro Yamada or r4,r1 2685f91a3adSMasahiro Yamadadiv_r8_neg_end: 2695f91a3adSMasahiro Yamada mov.l @r15+,r4 2705f91a3adSMasahiro Yamada rotcl r1 2715f91a3adSMasahiro Yamada rts 2725f91a3adSMasahiro Yamada neg r1,r0 2735f91a3adSMasahiro Yamada 2745f91a3adSMasahiro Yamadadiv_ge64k_neg: 2755f91a3adSMasahiro Yamada bt/s div_r8_neg 2765f91a3adSMasahiro Yamada div0u 2775f91a3adSMasahiro Yamada shll8 r5 2785f91a3adSMasahiro Yamada mov.l zero_l,r1 2795f91a3adSMasahiro Yamada .rept 6 2805f91a3adSMasahiro Yamada div1 r5,r0 2815f91a3adSMasahiro Yamada .endr 2825f91a3adSMasahiro Yamada mov.l r1,@-r15 2835f91a3adSMasahiro Yamada div1 r5,r0 2845f91a3adSMasahiro Yamada mov.w m256_w,r1 2855f91a3adSMasahiro Yamada div1 r5,r0 2865f91a3adSMasahiro Yamada mov.b r0,@(L_LSWMSB,r15) 2875f91a3adSMasahiro Yamada xor r4,r0 2885f91a3adSMasahiro Yamada and r1,r0 2895f91a3adSMasahiro Yamada bra div_ge64k_neg_end 2905f91a3adSMasahiro Yamada xor r4,r0 2915f91a3adSMasahiro Yamada 2925f91a3adSMasahiro Yamadac128_w: 2935f91a3adSMasahiro Yamada .word 128 2945f91a3adSMasahiro Yamada 2955f91a3adSMasahiro Yamadadiv_r8_neg: 2965f91a3adSMasahiro Yamada clrt 2975f91a3adSMasahiro Yamada shll16 r4 2985f91a3adSMasahiro Yamada mov r4,r1 2995f91a3adSMasahiro Yamada shll8 r1 3005f91a3adSMasahiro Yamada mov r5,r4 3015f91a3adSMasahiro Yamada .rept 7 3025f91a3adSMasahiro Yamada rotcl r1; div1 r5,r0 3035f91a3adSMasahiro Yamada .endr 3045f91a3adSMasahiro Yamada mov.l @r15+,r5 3055f91a3adSMasahiro Yamada rotcl r1 3065f91a3adSMasahiro Yamada bra div_r8_neg_end 3075f91a3adSMasahiro Yamada div1 r4,r0 3085f91a3adSMasahiro Yamada 3095f91a3adSMasahiro Yamadam256_w: 3105f91a3adSMasahiro Yamada .word 0xff00 3115f91a3adSMasahiro Yamada/* This table has been generated by divtab-sh4.c. */ 3125f91a3adSMasahiro Yamada .balign 4 3135f91a3adSMasahiro Yamadadiv_table_clz: 3145f91a3adSMasahiro Yamada .byte 0 3155f91a3adSMasahiro Yamada .byte 1 3165f91a3adSMasahiro Yamada .byte 0 3175f91a3adSMasahiro Yamada .byte -1 3185f91a3adSMasahiro Yamada .byte -1 3195f91a3adSMasahiro Yamada .byte -2 3205f91a3adSMasahiro Yamada .byte -2 3215f91a3adSMasahiro Yamada .byte -2 3225f91a3adSMasahiro Yamada .byte -2 3235f91a3adSMasahiro Yamada .byte -3 3245f91a3adSMasahiro Yamada .byte -3 3255f91a3adSMasahiro Yamada .byte -3 3265f91a3adSMasahiro Yamada .byte -3 3275f91a3adSMasahiro Yamada .byte -3 3285f91a3adSMasahiro Yamada .byte -3 3295f91a3adSMasahiro Yamada .byte -3 3305f91a3adSMasahiro Yamada .byte -3 3315f91a3adSMasahiro Yamada .byte -4 3325f91a3adSMasahiro Yamada .byte -4 3335f91a3adSMasahiro Yamada .byte -4 3345f91a3adSMasahiro Yamada .byte -4 3355f91a3adSMasahiro Yamada .byte -4 3365f91a3adSMasahiro Yamada .byte -4 3375f91a3adSMasahiro Yamada .byte -4 3385f91a3adSMasahiro Yamada .byte -4 3395f91a3adSMasahiro Yamada .byte -4 3405f91a3adSMasahiro Yamada .byte -4 3415f91a3adSMasahiro Yamada .byte -4 3425f91a3adSMasahiro Yamada .byte -4 3435f91a3adSMasahiro Yamada .byte -4 3445f91a3adSMasahiro Yamada .byte -4 3455f91a3adSMasahiro Yamada .byte -4 3465f91a3adSMasahiro Yamada .byte -4 3475f91a3adSMasahiro Yamada .byte -5 3485f91a3adSMasahiro Yamada .byte -5 3495f91a3adSMasahiro Yamada .byte -5 3505f91a3adSMasahiro Yamada .byte -5 3515f91a3adSMasahiro Yamada .byte -5 3525f91a3adSMasahiro Yamada .byte -5 3535f91a3adSMasahiro Yamada .byte -5 3545f91a3adSMasahiro Yamada .byte -5 3555f91a3adSMasahiro Yamada .byte -5 3565f91a3adSMasahiro Yamada .byte -5 3575f91a3adSMasahiro Yamada .byte -5 3585f91a3adSMasahiro Yamada .byte -5 3595f91a3adSMasahiro Yamada .byte -5 3605f91a3adSMasahiro Yamada .byte -5 3615f91a3adSMasahiro Yamada .byte -5 3625f91a3adSMasahiro Yamada .byte -5 3635f91a3adSMasahiro Yamada .byte -5 3645f91a3adSMasahiro Yamada .byte -5 3655f91a3adSMasahiro Yamada .byte -5 3665f91a3adSMasahiro Yamada .byte -5 3675f91a3adSMasahiro Yamada .byte -5 3685f91a3adSMasahiro Yamada .byte -5 3695f91a3adSMasahiro Yamada .byte -5 3705f91a3adSMasahiro Yamada .byte -5 3715f91a3adSMasahiro Yamada .byte -5 3725f91a3adSMasahiro Yamada .byte -5 3735f91a3adSMasahiro Yamada .byte -5 3745f91a3adSMasahiro Yamada .byte -5 3755f91a3adSMasahiro Yamada .byte -5 3765f91a3adSMasahiro Yamada .byte -5 3775f91a3adSMasahiro Yamada .byte -5 3785f91a3adSMasahiro Yamada .byte -5 3795f91a3adSMasahiro Yamada .byte -6 3805f91a3adSMasahiro Yamada .byte -6 3815f91a3adSMasahiro Yamada .byte -6 3825f91a3adSMasahiro Yamada .byte -6 3835f91a3adSMasahiro Yamada .byte -6 3845f91a3adSMasahiro Yamada .byte -6 3855f91a3adSMasahiro Yamada .byte -6 3865f91a3adSMasahiro Yamada .byte -6 3875f91a3adSMasahiro Yamada .byte -6 3885f91a3adSMasahiro Yamada .byte -6 3895f91a3adSMasahiro Yamada .byte -6 3905f91a3adSMasahiro Yamada .byte -6 3915f91a3adSMasahiro Yamada .byte -6 3925f91a3adSMasahiro Yamada .byte -6 3935f91a3adSMasahiro Yamada .byte -6 3945f91a3adSMasahiro Yamada .byte -6 3955f91a3adSMasahiro Yamada .byte -6 3965f91a3adSMasahiro Yamada .byte -6 3975f91a3adSMasahiro Yamada .byte -6 3985f91a3adSMasahiro Yamada .byte -6 3995f91a3adSMasahiro Yamada .byte -6 4005f91a3adSMasahiro Yamada .byte -6 4015f91a3adSMasahiro Yamada .byte -6 4025f91a3adSMasahiro Yamada .byte -6 4035f91a3adSMasahiro Yamada .byte -6 4045f91a3adSMasahiro Yamada .byte -6 4055f91a3adSMasahiro Yamada .byte -6 4065f91a3adSMasahiro Yamada .byte -6 4075f91a3adSMasahiro Yamada .byte -6 4085f91a3adSMasahiro Yamada .byte -6 4095f91a3adSMasahiro Yamada .byte -6 4105f91a3adSMasahiro Yamada .byte -6 4115f91a3adSMasahiro Yamada .byte -6 4125f91a3adSMasahiro Yamada .byte -6 4135f91a3adSMasahiro Yamada .byte -6 4145f91a3adSMasahiro Yamada .byte -6 4155f91a3adSMasahiro Yamada .byte -6 4165f91a3adSMasahiro Yamada .byte -6 4175f91a3adSMasahiro Yamada .byte -6 4185f91a3adSMasahiro Yamada .byte -6 4195f91a3adSMasahiro Yamada .byte -6 4205f91a3adSMasahiro Yamada .byte -6 4215f91a3adSMasahiro Yamada .byte -6 4225f91a3adSMasahiro Yamada .byte -6 4235f91a3adSMasahiro Yamada .byte -6 4245f91a3adSMasahiro Yamada .byte -6 4255f91a3adSMasahiro Yamada .byte -6 4265f91a3adSMasahiro Yamada .byte -6 4275f91a3adSMasahiro Yamada .byte -6 4285f91a3adSMasahiro Yamada .byte -6 4295f91a3adSMasahiro Yamada .byte -6 4305f91a3adSMasahiro Yamada .byte -6 4315f91a3adSMasahiro Yamada .byte -6 4325f91a3adSMasahiro Yamada .byte -6 4335f91a3adSMasahiro Yamada .byte -6 4345f91a3adSMasahiro Yamada .byte -6 4355f91a3adSMasahiro Yamada .byte -6 4365f91a3adSMasahiro Yamada .byte -6 4375f91a3adSMasahiro Yamada .byte -6 4385f91a3adSMasahiro Yamada .byte -6 4395f91a3adSMasahiro Yamada .byte -6 4405f91a3adSMasahiro Yamada .byte -6 4415f91a3adSMasahiro Yamada .byte -6 4425f91a3adSMasahiro Yamada/* Lookup table translating positive divisor to index into table of 4435f91a3adSMasahiro Yamada normalized inverse. N.B. the '0' entry is also the last entry of the 4445f91a3adSMasahiro Yamada previous table, and causes an unaligned access for division by zero. */ 4455f91a3adSMasahiro Yamadadiv_table_ix: 4465f91a3adSMasahiro Yamada .byte -6 4475f91a3adSMasahiro Yamada .byte -128 4485f91a3adSMasahiro Yamada .byte -128 4495f91a3adSMasahiro Yamada .byte 0 4505f91a3adSMasahiro Yamada .byte -128 4515f91a3adSMasahiro Yamada .byte -64 4525f91a3adSMasahiro Yamada .byte 0 4535f91a3adSMasahiro Yamada .byte 64 4545f91a3adSMasahiro Yamada .byte -128 4555f91a3adSMasahiro Yamada .byte -96 4565f91a3adSMasahiro Yamada .byte -64 4575f91a3adSMasahiro Yamada .byte -32 4585f91a3adSMasahiro Yamada .byte 0 4595f91a3adSMasahiro Yamada .byte 32 4605f91a3adSMasahiro Yamada .byte 64 4615f91a3adSMasahiro Yamada .byte 96 4625f91a3adSMasahiro Yamada .byte -128 4635f91a3adSMasahiro Yamada .byte -112 4645f91a3adSMasahiro Yamada .byte -96 4655f91a3adSMasahiro Yamada .byte -80 4665f91a3adSMasahiro Yamada .byte -64 4675f91a3adSMasahiro Yamada .byte -48 4685f91a3adSMasahiro Yamada .byte -32 4695f91a3adSMasahiro Yamada .byte -16 4705f91a3adSMasahiro Yamada .byte 0 4715f91a3adSMasahiro Yamada .byte 16 4725f91a3adSMasahiro Yamada .byte 32 4735f91a3adSMasahiro Yamada .byte 48 4745f91a3adSMasahiro Yamada .byte 64 4755f91a3adSMasahiro Yamada .byte 80 4765f91a3adSMasahiro Yamada .byte 96 4775f91a3adSMasahiro Yamada .byte 112 4785f91a3adSMasahiro Yamada .byte -128 4795f91a3adSMasahiro Yamada .byte -120 4805f91a3adSMasahiro Yamada .byte -112 4815f91a3adSMasahiro Yamada .byte -104 4825f91a3adSMasahiro Yamada .byte -96 4835f91a3adSMasahiro Yamada .byte -88 4845f91a3adSMasahiro Yamada .byte -80 4855f91a3adSMasahiro Yamada .byte -72 4865f91a3adSMasahiro Yamada .byte -64 4875f91a3adSMasahiro Yamada .byte -56 4885f91a3adSMasahiro Yamada .byte -48 4895f91a3adSMasahiro Yamada .byte -40 4905f91a3adSMasahiro Yamada .byte -32 4915f91a3adSMasahiro Yamada .byte -24 4925f91a3adSMasahiro Yamada .byte -16 4935f91a3adSMasahiro Yamada .byte -8 4945f91a3adSMasahiro Yamada .byte 0 4955f91a3adSMasahiro Yamada .byte 8 4965f91a3adSMasahiro Yamada .byte 16 4975f91a3adSMasahiro Yamada .byte 24 4985f91a3adSMasahiro Yamada .byte 32 4995f91a3adSMasahiro Yamada .byte 40 5005f91a3adSMasahiro Yamada .byte 48 5015f91a3adSMasahiro Yamada .byte 56 5025f91a3adSMasahiro Yamada .byte 64 5035f91a3adSMasahiro Yamada .byte 72 5045f91a3adSMasahiro Yamada .byte 80 5055f91a3adSMasahiro Yamada .byte 88 5065f91a3adSMasahiro Yamada .byte 96 5075f91a3adSMasahiro Yamada .byte 104 5085f91a3adSMasahiro Yamada .byte 112 5095f91a3adSMasahiro Yamada .byte 120 5105f91a3adSMasahiro Yamada .byte -128 5115f91a3adSMasahiro Yamada .byte -124 5125f91a3adSMasahiro Yamada .byte -120 5135f91a3adSMasahiro Yamada .byte -116 5145f91a3adSMasahiro Yamada .byte -112 5155f91a3adSMasahiro Yamada .byte -108 5165f91a3adSMasahiro Yamada .byte -104 5175f91a3adSMasahiro Yamada .byte -100 5185f91a3adSMasahiro Yamada .byte -96 5195f91a3adSMasahiro Yamada .byte -92 5205f91a3adSMasahiro Yamada .byte -88 5215f91a3adSMasahiro Yamada .byte -84 5225f91a3adSMasahiro Yamada .byte -80 5235f91a3adSMasahiro Yamada .byte -76 5245f91a3adSMasahiro Yamada .byte -72 5255f91a3adSMasahiro Yamada .byte -68 5265f91a3adSMasahiro Yamada .byte -64 5275f91a3adSMasahiro Yamada .byte -60 5285f91a3adSMasahiro Yamada .byte -56 5295f91a3adSMasahiro Yamada .byte -52 5305f91a3adSMasahiro Yamada .byte -48 5315f91a3adSMasahiro Yamada .byte -44 5325f91a3adSMasahiro Yamada .byte -40 5335f91a3adSMasahiro Yamada .byte -36 5345f91a3adSMasahiro Yamada .byte -32 5355f91a3adSMasahiro Yamada .byte -28 5365f91a3adSMasahiro Yamada .byte -24 5375f91a3adSMasahiro Yamada .byte -20 5385f91a3adSMasahiro Yamada .byte -16 5395f91a3adSMasahiro Yamada .byte -12 5405f91a3adSMasahiro Yamada .byte -8 5415f91a3adSMasahiro Yamada .byte -4 5425f91a3adSMasahiro Yamada .byte 0 5435f91a3adSMasahiro Yamada .byte 4 5445f91a3adSMasahiro Yamada .byte 8 5455f91a3adSMasahiro Yamada .byte 12 5465f91a3adSMasahiro Yamada .byte 16 5475f91a3adSMasahiro Yamada .byte 20 5485f91a3adSMasahiro Yamada .byte 24 5495f91a3adSMasahiro Yamada .byte 28 5505f91a3adSMasahiro Yamada .byte 32 5515f91a3adSMasahiro Yamada .byte 36 5525f91a3adSMasahiro Yamada .byte 40 5535f91a3adSMasahiro Yamada .byte 44 5545f91a3adSMasahiro Yamada .byte 48 5555f91a3adSMasahiro Yamada .byte 52 5565f91a3adSMasahiro Yamada .byte 56 5575f91a3adSMasahiro Yamada .byte 60 5585f91a3adSMasahiro Yamada .byte 64 5595f91a3adSMasahiro Yamada .byte 68 5605f91a3adSMasahiro Yamada .byte 72 5615f91a3adSMasahiro Yamada .byte 76 5625f91a3adSMasahiro Yamada .byte 80 5635f91a3adSMasahiro Yamada .byte 84 5645f91a3adSMasahiro Yamada .byte 88 5655f91a3adSMasahiro Yamada .byte 92 5665f91a3adSMasahiro Yamada .byte 96 5675f91a3adSMasahiro Yamada .byte 100 5685f91a3adSMasahiro Yamada .byte 104 5695f91a3adSMasahiro Yamada .byte 108 5705f91a3adSMasahiro Yamada .byte 112 5715f91a3adSMasahiro Yamada .byte 116 5725f91a3adSMasahiro Yamada .byte 120 5735f91a3adSMasahiro Yamada .byte 124 5745f91a3adSMasahiro Yamada .byte -128 5755f91a3adSMasahiro Yamada/* 1/64 .. 1/127, normalized. There is an implicit leading 1 in bit 32. */ 5765f91a3adSMasahiro Yamada .balign 4 5775f91a3adSMasahiro Yamadazero_l: 5785f91a3adSMasahiro Yamada .long 0x0 5795f91a3adSMasahiro Yamada .long 0xF81F81F9 5805f91a3adSMasahiro Yamada .long 0xF07C1F08 5815f91a3adSMasahiro Yamada .long 0xE9131AC0 5825f91a3adSMasahiro Yamada .long 0xE1E1E1E2 5835f91a3adSMasahiro Yamada .long 0xDAE6076C 5845f91a3adSMasahiro Yamada .long 0xD41D41D5 5855f91a3adSMasahiro Yamada .long 0xCD856891 5865f91a3adSMasahiro Yamada .long 0xC71C71C8 5875f91a3adSMasahiro Yamada .long 0xC0E07039 5885f91a3adSMasahiro Yamada .long 0xBACF914D 5895f91a3adSMasahiro Yamada .long 0xB4E81B4F 5905f91a3adSMasahiro Yamada .long 0xAF286BCB 5915f91a3adSMasahiro Yamada .long 0xA98EF607 5925f91a3adSMasahiro Yamada .long 0xA41A41A5 5935f91a3adSMasahiro Yamada .long 0x9EC8E952 5945f91a3adSMasahiro Yamada .long 0x9999999A 5955f91a3adSMasahiro Yamada .long 0x948B0FCE 5965f91a3adSMasahiro Yamada .long 0x8F9C18FA 5975f91a3adSMasahiro Yamada .long 0x8ACB90F7 5985f91a3adSMasahiro Yamada .long 0x86186187 5995f91a3adSMasahiro Yamada .long 0x81818182 6005f91a3adSMasahiro Yamada .long 0x7D05F418 6015f91a3adSMasahiro Yamada .long 0x78A4C818 6025f91a3adSMasahiro Yamada .long 0x745D1746 6035f91a3adSMasahiro Yamada .long 0x702E05C1 6045f91a3adSMasahiro Yamada .long 0x6C16C16D 6055f91a3adSMasahiro Yamada .long 0x68168169 6065f91a3adSMasahiro Yamada .long 0x642C8591 6075f91a3adSMasahiro Yamada .long 0x60581606 6085f91a3adSMasahiro Yamada .long 0x5C9882BA 6095f91a3adSMasahiro Yamada .long 0x58ED2309 6105f91a3adSMasahiro Yamadadiv_table_inv: 6115f91a3adSMasahiro Yamada .long 0x55555556 6125f91a3adSMasahiro Yamada .long 0x51D07EAF 6135f91a3adSMasahiro Yamada .long 0x4E5E0A73 6145f91a3adSMasahiro Yamada .long 0x4AFD6A06 6155f91a3adSMasahiro Yamada .long 0x47AE147B 6165f91a3adSMasahiro Yamada .long 0x446F8657 6175f91a3adSMasahiro Yamada .long 0x41414142 6185f91a3adSMasahiro Yamada .long 0x3E22CBCF 6195f91a3adSMasahiro Yamada .long 0x3B13B13C 6205f91a3adSMasahiro Yamada .long 0x38138139 6215f91a3adSMasahiro Yamada .long 0x3521CFB3 6225f91a3adSMasahiro Yamada .long 0x323E34A3 6235f91a3adSMasahiro Yamada .long 0x2F684BDB 6245f91a3adSMasahiro Yamada .long 0x2C9FB4D9 6255f91a3adSMasahiro Yamada .long 0x29E4129F 6265f91a3adSMasahiro Yamada .long 0x27350B89 6275f91a3adSMasahiro Yamada .long 0x24924925 6285f91a3adSMasahiro Yamada .long 0x21FB7813 6295f91a3adSMasahiro Yamada .long 0x1F7047DD 6305f91a3adSMasahiro Yamada .long 0x1CF06ADB 6315f91a3adSMasahiro Yamada .long 0x1A7B9612 6325f91a3adSMasahiro Yamada .long 0x18118119 6335f91a3adSMasahiro Yamada .long 0x15B1E5F8 6345f91a3adSMasahiro Yamada .long 0x135C8114 6355f91a3adSMasahiro Yamada .long 0x11111112 6365f91a3adSMasahiro Yamada .long 0xECF56BF 6375f91a3adSMasahiro Yamada .long 0xC9714FC 6385f91a3adSMasahiro Yamada .long 0xA6810A7 6395f91a3adSMasahiro Yamada .long 0x8421085 6405f91a3adSMasahiro Yamada .long 0x624DD30 6415f91a3adSMasahiro Yamada .long 0x4104105 6425f91a3adSMasahiro Yamada .long 0x2040811 6435f91a3adSMasahiro Yamada /* maximum error: 0.987342 scaled: 0.921875*/ 644