root/arch/sh/lib64/sdivsi3.S

/* [<][>][^][v][top][bottom][index][help] */
   1 /* SPDX-License-Identifier: GPL-2.0 */
   2         .global __sdivsi3
   3         .global __sdivsi3_1
   4         .global __sdivsi3_2
   5         .section        .text..SHmedia32,"ax"
   6         .align  2
   7 
   8         /* inputs: r4,r5 */
   9         /* clobbered: r1,r18,r19,r20,r21,r25,tr0 */
  10         /* result in r0 */
  11 __sdivsi3:
  12 __sdivsi3_1:
  13         ptb __div_table,tr0
  14         gettr tr0,r20
  15 
  16 __sdivsi3_2:
  17         nsb r5, r1
  18         shlld r5, r1, r25    /* normalize; [-2 ..1, 1..2) in s2.62 */
  19         shari r25, 58, r21   /* extract 5(6) bit index (s2.4 with hole -1..1) */
  20         /* bubble */
  21         ldx.ub r20, r21, r19 /* u0.8 */
  22         shari r25, 32, r25   /* normalize to s2.30 */
  23         shlli r21, 1, r21
  24         muls.l r25, r19, r19 /* s2.38 */
  25         ldx.w r20, r21, r21  /* s2.14 */
  26         ptabs r18, tr0
  27         shari r19, 24, r19   /* truncate to s2.14 */
  28         sub r21, r19, r19    /* some 11 bit inverse in s1.14 */
  29         muls.l r19, r19, r21 /* u0.28 */
  30         sub r63, r1, r1
  31         addi r1, 92, r1
  32         muls.l r25, r21, r18 /* s2.58 */
  33         shlli r19, 45, r19   /* multiply by two and convert to s2.58 */
  34         /* bubble */
  35         sub r19, r18, r18
  36         shari r18, 28, r18   /* some 22 bit inverse in s1.30 */
  37         muls.l r18, r25, r0  /* s2.60 */
  38         muls.l r18, r4, r25 /* s32.30 */
  39         /* bubble */
  40         shari r0, 16, r19   /* s-16.44 */
  41         muls.l r19, r18, r19 /* s-16.74 */
  42         shari r25, 63, r0
  43         shari r4, 14, r18   /* s19.-14 */
  44         shari r19, 30, r19   /* s-16.44 */
  45         muls.l r19, r18, r19 /* s15.30 */
  46         xor r21, r0, r21    /* You could also use the constant 1 << 27. */
  47         add r21, r25, r21
  48         sub r21, r19, r21
  49         shard r21, r1, r21
  50         sub r21, r0, r0
  51         blink tr0, r63
  52         
  53 /* This table has been generated by divtab.c .
  54 Defects for bias -330:
  55    Max defect: 6.081536e-07 at -1.000000e+00
  56    Min defect: 2.849516e-08 at 1.030651e+00
  57    Max 2nd step defect: 9.606539e-12 at -1.000000e+00
  58    Min 2nd step defect: 0.000000e+00 at 0.000000e+00
  59    Defect at 1: 1.238659e-07
  60    Defect at -2: 1.061708e-07 */
  61 
  62         .balign 2
  63         .type   __div_table,@object
  64         .size   __div_table,128
  65 /* negative division constants */
  66         .word   -16638
  67         .word   -17135
  68         .word   -17737
  69         .word   -18433
  70         .word   -19103
  71         .word   -19751
  72         .word   -20583
  73         .word   -21383
  74         .word   -22343
  75         .word   -23353
  76         .word   -24407
  77         .word   -25582
  78         .word   -26863
  79         .word   -28382
  80         .word   -29965
  81         .word   -31800
  82 /* negative division factors */
  83         .byte   66
  84         .byte   70
  85         .byte   75
  86         .byte   81
  87         .byte   87
  88         .byte   93
  89         .byte   101
  90         .byte   109
  91         .byte   119
  92         .byte   130
  93         .byte   142
  94         .byte   156
  95         .byte   172
  96         .byte   192
  97         .byte   214
  98         .byte   241
  99         .skip 16
 100         .global __div_table
 101 __div_table:
 102         .skip 16
 103 /* positive division factors */
 104         .byte   241
 105         .byte   214
 106         .byte   192
 107         .byte   172
 108         .byte   156
 109         .byte   142
 110         .byte   130
 111         .byte   119
 112         .byte   109
 113         .byte   101
 114         .byte   93
 115         .byte   87
 116         .byte   81
 117         .byte   75
 118         .byte   70
 119         .byte   66
 120 /* positive division constants */
 121         .word   31801
 122         .word   29966
 123         .word   28383
 124         .word   26864
 125         .word   25583
 126         .word   24408
 127         .word   23354
 128         .word   22344
 129         .word   21384
 130         .word   20584
 131         .word   19752
 132         .word   19104
 133         .word   18434
 134         .word   17738
 135         .word   17136
 136         .word   16639

/* [<][>][^][v][top][bottom][index][help] */