[BACK]Return to level0.s CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / pari / src / kernel / hppa

Annotation of OpenXM_contrib/pari/src/kernel/hppa/level0.s, Revision 1.1.1.1

1.1       maekawa     1: ; $id: level0.s,v 2.0.0.6 1998/02/21 17:30:11 karim exp karim $
                      2: ; This file modified by Nigel Smart from the original by Dominique Bernardi.
                      3: ; HP as is needed, with +DA1.1
                      4:        .shortdata
                      5:         .import $global$        ; The value in the %dp register
                      6:        .export hiremainder
                      7:        .export overflow
                      8:        .word
                      9:        .align  8
                     10: hiremainder    .word
                     11:        .align  8
                     12: overflow       .word
                     13:
                     14:         .code
                     15:        .export addll,entry
                     16:        .export addllx,entry
                     17:        .export subll,entry
                     18:        .export subllx,entry
                     19:        .export shiftl,entry
                     20:        .export shiftlr,entry
                     21:        .export bfffo,entry
                     22:        .export mulll,entry
                     23:        .export addmul,entry
                     24:        .export divll,entry
                     25:
                     26:        .proc
                     27:        .callinfo
                     28: addll  .enter
                     29:        add     %arg0,%arg1,%ret0
                     30:        addc    0,0,%t1
                     31:        stw     %t1,overflow-$global$(%dp)
                     32:        .leave
                     33:        .procend
                     34:
                     35:        .proc
                     36:        .callinfo
                     37: addllx .enter
                     38:        ldw     overflow-$global$(%dp),%t1
                     39:        addb,uv %t1,%arg0,addllx2
                     40:        add     %arg0,%arg1,%ret0
                     41:        addc    0,0,%t1
                     42:        stw     %t1,overflow-$global$(%dp)
                     43:        .leave
                     44: addllx2        ldi     1,%t1
                     45:        stw     %t1,overflow-$global$(%dp)
                     46:        .leave
                     47:        .procend
                     48:
                     49:        .proc
                     50:        .callinfo
                     51: subll  .enter
                     52:        sub     %arg0,%arg1,%ret0
                     53:        addc    0,0,%t1
                     54:        subi    1,%t1,%t1
                     55:        stw     %t1,overflow-$global$(%dp)
                     56:        .leave
                     57:        .procend
                     58:
                     59:        .proc
                     60:        .callinfo
                     61: subllx .enter
                     62:        ldw     overflow-$global$(%dp),%t1
                     63:        sub,>>= %arg0,%arg1,%ret0
                     64:        sub,tr  %ret0,%t1,%ret0
                     65:        sub,>>= %ret0,%t1,%ret0
                     66:        addi,tr 1,0,%t1
                     67:        ldi     0,%t1
                     68:        stw     %t1,overflow-$global$(%dp)
                     69:        .leave
                     70:        .procend
                     71:
                     72:        .proc
                     73:        .callinfo
                     74: shiftl .enter
                     75:        subi    32,%arg1,%arg1
                     76: l$30   mfctl   %cr11,%t1
                     77:        mtctl   %arg1,%cr11
                     78:        vshd    %arg0,0,%ret0;
                     79:        vshd    0,%arg0,%t2
                     80:        mtctl   %t1,%cr11
                     81: l$31   stw     %t2,hiremainder-$global$(%dp)
                     82:        .leave
                     83:        .procend
                     84:
                     85:        .proc
                     86:        .callinfo
                     87: shiftlr        .enter
                     88: l$40   mfctl   %cr11,%t1
                     89:        mtctl   %arg1,%cr11
                     90:        vshd    0,%arg0,%ret0;
                     91:        vshd    %arg0,0,%t2
                     92:        mtctl   %t1,%cr11
                     93: l$41   stw     %t2,hiremainder-$global$(%dp)
                     94:        .leave
                     95:        .procend
                     96:
                     97:        .proc
                     98:        .callinfo
                     99: bfffo  .enter
                    100:        comb,=,n        %r0,%arg0,l$0
                    101:        ldi     31,%ret0
                    102:        extru,<>        %arg0,15,16,%r0
                    103:        shd,tr  %arg0,%r0,16,%arg0
                    104:        addi    -16,%ret0,%ret0
                    105:        extru,<>        %arg0,7,8,%r0
                    106:        shd,tr  %arg0,%r0,24,%arg0
                    107:        addi    -8,%ret0,%ret0
                    108:        extru,<>        %arg0,3,4,%r0
                    109:        shd,tr  %arg0,%r0,28,%arg0
                    110:        addi    -4,%ret0,%ret0
                    111:        extru,<>        %arg0,1,2,%r0
                    112:        shd,tr  %arg0,%r0,30,%arg0
                    113:        addi    -2,%ret0,%ret0
                    114:        extru,= %arg0,0,1,%r0
                    115:        addi    -1,%ret0,%ret0
                    116:        b,n     l$1
                    117: l$0    ldi     32,%ret0
                    118: l$1    .leave
                    119:        .procend
                    120:
                    121:        .proc
                    122:        .callinfo
                    123: mulll  .enter
                    124:        ldo     hiremainder-$global$(%dp),%r1
                    125:        stw     %arg0,0(%r1)
                    126:        fldws   0(%r1),%fr4
                    127:        stw     %arg1,0(%r1)
                    128:        fldws   0(%r1),%fr5
                    129:        xmpyu   %fr4,%fr5,%fr6
                    130:        fstds   %fr6,0(%r1)
                    131:        ldws    4(%r1),%ret0
                    132:        .leave
                    133:        .procend
                    134:
                    135:        .proc
                    136:        .callinfo
                    137: addmul .enter
                    138:        ldo     hiremainder-$global$(%dp),%r1
                    139:        ldw     0(%r1),%t1
                    140:        stw     %arg0,0(%r1)
                    141:        fldws   0(%r1),%fr4
                    142:        stw     %arg1,0(%r1)
                    143:        fldws   0(%r1),%fr5
                    144:        xmpyu   %fr4,%fr5,%fr6
                    145:        fstds   %fr6,0(%r1)
                    146:        ldws    4(%r1),%ret0
                    147:        add,nuv %t1,%ret0,%ret0
                    148:        b,n     suite
                    149:        .leave
                    150: suite  ldw     0(%r1),%ret1
                    151:        addi    1,%ret1,%ret1
                    152:        stw     %ret1,0(%r1)
                    153:        .leave
                    154:        .procend
                    155:
                    156: hirem  .reg    %t1
                    157: loquo  .reg    %ret0
                    158: div    .reg    %arg1
                    159:
                    160: nibble .macro
                    161:        ds      hirem,div,hirem
                    162:        addc    loquo,loquo,loquo
                    163:        ds      hirem,div,hirem
                    164:        addc    loquo,loquo,loquo
                    165:        ds      hirem,div,hirem
                    166:        addc    loquo,loquo,loquo
                    167:        ds      hirem,div,hirem
                    168:        addc    loquo,loquo,loquo
                    169:        .endm
                    170:
                    171: divll  .proc
                    172:        .callinfo
                    173:        .enter
                    174:        ldw     hiremainder-$global$(%dp),hirem
                    175:
                    176:        comb,<  div,0,l$50
                    177:        copy    %arg0,loquo
                    178:        sub     0,div,%t2
                    179:        ds      0,%t2,0
                    180:        addc    loquo,loquo,loquo
                    181:        nibble
                    182:        nibble
                    183:        nibble
                    184:        nibble
                    185:        nibble
                    186:        nibble
                    187:        nibble
                    188:        nibble
                    189:        add,>=  0,hirem,0
                    190:        add     hirem,div,hirem
                    191:        stw     hirem,hiremainder-$global$(%dp)
                    192:        .leave
                    193:
                    194: l$50   copy    div,%arg0
                    195:        extru,<>        div,31,1,%t3
                    196:        b       l$51
                    197:        extru   div,30,31,div
                    198:        addb,nsv        %t3,div,l$51
                    199:        copy    hirem,%t4
                    200:        copy    loquo,hirem
                    201:        b       l$52
                    202:        copy    %t4,loquo
                    203:
                    204: l$51   extru   loquo,31,1,%t4
                    205:        shd     hirem,loquo,1,loquo
                    206:        extru   hirem,30,31,hirem
                    207:        sub     0,div,%t2
                    208:        ds      0,%t2,0
                    209:        addc    loquo,loquo,loquo
                    210:        nibble
                    211:        nibble
                    212:        nibble
                    213:        nibble
                    214:        nibble
                    215:        nibble
                    216:        nibble
                    217:        nibble
                    218:        add,>=  0,hirem,0
                    219:        add     hirem,div,hirem
                    220:        comb,=  0,%t3,l$53
                    221:        sh1add  hirem,%t4,hirem
                    222: l$52   copy    %arg0,div
                    223:        addb,nuv,n      loquo,hirem,l$54
                    224:        sub     hirem,div,hirem
                    225:        addi    1,loquo,loquo
                    226: l$54   comb,<<,n       hirem,div,l$53
                    227:        sub     hirem,div,hirem
                    228:        addi    1,loquo,loquo
                    229:
                    230: l$53   stw     hirem,hiremainder-$global$(%dp)
                    231:        .leave
                    232:        .procend
                    233:
                    234:        .end

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>