[BACK]Return to udiv_qrnnd.s CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpn / hppa

Annotation of OpenXM_contrib/gmp/mpn/hppa/udiv_qrnnd.s, Revision 1.1

1.1     ! maekawa     1: ; HP-PA  __udiv_qrnnd division support, used from longlong.h.
        !             2: ; This version runs fast on pre-PA7000 CPUs.
        !             3:
        !             4: ; Copyright (C) 1993, 1994 Free Software Foundation, Inc.
        !             5:
        !             6: ; This file is part of the GNU MP Library.
        !             7:
        !             8: ; The GNU MP Library is free software; you can redistribute it and/or modify
        !             9: ; it under the terms of the GNU Library General Public License as published by
        !            10: ; the Free Software Foundation; either version 2 of the License, or (at your
        !            11: ; option) any later version.
        !            12:
        !            13: ; The GNU MP Library is distributed in the hope that it will be useful, but
        !            14: ; WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
        !            15: ; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
        !            16: ; License for more details.
        !            17:
        !            18: ; You should have received a copy of the GNU Library General Public License
        !            19: ; along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
        !            20: ; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
        !            21: ; MA 02111-1307, USA.
        !            22:
        !            23:
        !            24: ; INPUT PARAMETERS
        !            25: ; rem_ptr      gr26
        !            26: ; n1           gr25
        !            27: ; n0           gr24
        !            28: ; d            gr23
        !            29:
        !            30: ; The code size is a bit excessive.  We could merge the last two ds;addc
        !            31: ; sequences by simply moving the "bb,< Odd" instruction down.  The only
        !            32: ; trouble is the FFFFFFFF code that would need some hacking.
        !            33:
        !            34:        .code
        !            35:        .export         __udiv_qrnnd
        !            36: __udiv_qrnnd
        !            37:        .proc
        !            38:        .callinfo       frame=0,no_calls
        !            39:        .entry
        !            40:
        !            41:        comb,<          %r23,0,L$largedivisor
        !            42:         sub            %r0,%r23,%r1            ; clear cy as side-effect
        !            43:        ds              %r0,%r1,%r0
        !            44:        addc            %r24,%r24,%r24
        !            45:        ds              %r25,%r23,%r25
        !            46:        addc            %r24,%r24,%r24
        !            47:        ds              %r25,%r23,%r25
        !            48:        addc            %r24,%r24,%r24
        !            49:        ds              %r25,%r23,%r25
        !            50:        addc            %r24,%r24,%r24
        !            51:        ds              %r25,%r23,%r25
        !            52:        addc            %r24,%r24,%r24
        !            53:        ds              %r25,%r23,%r25
        !            54:        addc            %r24,%r24,%r24
        !            55:        ds              %r25,%r23,%r25
        !            56:        addc            %r24,%r24,%r24
        !            57:        ds              %r25,%r23,%r25
        !            58:        addc            %r24,%r24,%r24
        !            59:        ds              %r25,%r23,%r25
        !            60:        addc            %r24,%r24,%r24
        !            61:        ds              %r25,%r23,%r25
        !            62:        addc            %r24,%r24,%r24
        !            63:        ds              %r25,%r23,%r25
        !            64:        addc            %r24,%r24,%r24
        !            65:        ds              %r25,%r23,%r25
        !            66:        addc            %r24,%r24,%r24
        !            67:        ds              %r25,%r23,%r25
        !            68:        addc            %r24,%r24,%r24
        !            69:        ds              %r25,%r23,%r25
        !            70:        addc            %r24,%r24,%r24
        !            71:        ds              %r25,%r23,%r25
        !            72:        addc            %r24,%r24,%r24
        !            73:        ds              %r25,%r23,%r25
        !            74:        addc            %r24,%r24,%r24
        !            75:        ds              %r25,%r23,%r25
        !            76:        addc            %r24,%r24,%r24
        !            77:        ds              %r25,%r23,%r25
        !            78:        addc            %r24,%r24,%r24
        !            79:        ds              %r25,%r23,%r25
        !            80:        addc            %r24,%r24,%r24
        !            81:        ds              %r25,%r23,%r25
        !            82:        addc            %r24,%r24,%r24
        !            83:        ds              %r25,%r23,%r25
        !            84:        addc            %r24,%r24,%r24
        !            85:        ds              %r25,%r23,%r25
        !            86:        addc            %r24,%r24,%r24
        !            87:        ds              %r25,%r23,%r25
        !            88:        addc            %r24,%r24,%r24
        !            89:        ds              %r25,%r23,%r25
        !            90:        addc            %r24,%r24,%r24
        !            91:        ds              %r25,%r23,%r25
        !            92:        addc            %r24,%r24,%r24
        !            93:        ds              %r25,%r23,%r25
        !            94:        addc            %r24,%r24,%r24
        !            95:        ds              %r25,%r23,%r25
        !            96:        addc            %r24,%r24,%r24
        !            97:        ds              %r25,%r23,%r25
        !            98:        addc            %r24,%r24,%r24
        !            99:        ds              %r25,%r23,%r25
        !           100:        addc            %r24,%r24,%r24
        !           101:        ds              %r25,%r23,%r25
        !           102:        addc            %r24,%r24,%r24
        !           103:        ds              %r25,%r23,%r25
        !           104:        addc            %r24,%r24,%r24
        !           105:        ds              %r25,%r23,%r25
        !           106:        addc            %r24,%r24,%r28
        !           107:        ds              %r25,%r23,%r25
        !           108:        comclr,>=       %r25,%r0,%r0
        !           109:        addl            %r25,%r23,%r25
        !           110:        stws            %r25,0(0,%r26)
        !           111:        bv              0(%r2)
        !           112:         addc           %r28,%r28,%r28
        !           113:
        !           114: L$largedivisor
        !           115:        extru           %r24,31,1,%r19          ; r19 = n0 & 1
        !           116:        bb,<            %r23,31,L$odd
        !           117:         extru          %r23,30,31,%r22         ; r22 = d >> 1
        !           118:        shd             %r25,%r24,1,%r24        ; r24 = new n0
        !           119:        extru           %r25,30,31,%r25         ; r25 = new n1
        !           120:        sub             %r0,%r22,%r21
        !           121:        ds              %r0,%r21,%r0
        !           122:        addc            %r24,%r24,%r24
        !           123:        ds              %r25,%r22,%r25
        !           124:        addc            %r24,%r24,%r24
        !           125:        ds              %r25,%r22,%r25
        !           126:        addc            %r24,%r24,%r24
        !           127:        ds              %r25,%r22,%r25
        !           128:        addc            %r24,%r24,%r24
        !           129:        ds              %r25,%r22,%r25
        !           130:        addc            %r24,%r24,%r24
        !           131:        ds              %r25,%r22,%r25
        !           132:        addc            %r24,%r24,%r24
        !           133:        ds              %r25,%r22,%r25
        !           134:        addc            %r24,%r24,%r24
        !           135:        ds              %r25,%r22,%r25
        !           136:        addc            %r24,%r24,%r24
        !           137:        ds              %r25,%r22,%r25
        !           138:        addc            %r24,%r24,%r24
        !           139:        ds              %r25,%r22,%r25
        !           140:        addc            %r24,%r24,%r24
        !           141:        ds              %r25,%r22,%r25
        !           142:        addc            %r24,%r24,%r24
        !           143:        ds              %r25,%r22,%r25
        !           144:        addc            %r24,%r24,%r24
        !           145:        ds              %r25,%r22,%r25
        !           146:        addc            %r24,%r24,%r24
        !           147:        ds              %r25,%r22,%r25
        !           148:        addc            %r24,%r24,%r24
        !           149:        ds              %r25,%r22,%r25
        !           150:        addc            %r24,%r24,%r24
        !           151:        ds              %r25,%r22,%r25
        !           152:        addc            %r24,%r24,%r24
        !           153:        ds              %r25,%r22,%r25
        !           154:        addc            %r24,%r24,%r24
        !           155:        ds              %r25,%r22,%r25
        !           156:        addc            %r24,%r24,%r24
        !           157:        ds              %r25,%r22,%r25
        !           158:        addc            %r24,%r24,%r24
        !           159:        ds              %r25,%r22,%r25
        !           160:        addc            %r24,%r24,%r24
        !           161:        ds              %r25,%r22,%r25
        !           162:        addc            %r24,%r24,%r24
        !           163:        ds              %r25,%r22,%r25
        !           164:        addc            %r24,%r24,%r24
        !           165:        ds              %r25,%r22,%r25
        !           166:        addc            %r24,%r24,%r24
        !           167:        ds              %r25,%r22,%r25
        !           168:        addc            %r24,%r24,%r24
        !           169:        ds              %r25,%r22,%r25
        !           170:        addc            %r24,%r24,%r24
        !           171:        ds              %r25,%r22,%r25
        !           172:        addc            %r24,%r24,%r24
        !           173:        ds              %r25,%r22,%r25
        !           174:        addc            %r24,%r24,%r24
        !           175:        ds              %r25,%r22,%r25
        !           176:        addc            %r24,%r24,%r24
        !           177:        ds              %r25,%r22,%r25
        !           178:        addc            %r24,%r24,%r24
        !           179:        ds              %r25,%r22,%r25
        !           180:        addc            %r24,%r24,%r24
        !           181:        ds              %r25,%r22,%r25
        !           182:        addc            %r24,%r24,%r24
        !           183:        ds              %r25,%r22,%r25
        !           184:        addc            %r24,%r24,%r24
        !           185:        ds              %r25,%r22,%r25
        !           186:        comclr,>=       %r25,%r0,%r0
        !           187:        addl            %r25,%r22,%r25
        !           188:        sh1addl         %r25,%r19,%r25
        !           189:        stws            %r25,0(0,%r26)
        !           190:        bv              0(%r2)
        !           191:         addc           %r24,%r24,%r28
        !           192:
        !           193: L$odd  addib,sv,n      1,%r22,L$FF..           ; r22 = (d / 2 + 1)
        !           194:        shd             %r25,%r24,1,%r24        ; r24 = new n0
        !           195:        extru           %r25,30,31,%r25         ; r25 = new n1
        !           196:        sub             %r0,%r22,%r21
        !           197:        ds              %r0,%r21,%r0
        !           198:        addc            %r24,%r24,%r24
        !           199:        ds              %r25,%r22,%r25
        !           200:        addc            %r24,%r24,%r24
        !           201:        ds              %r25,%r22,%r25
        !           202:        addc            %r24,%r24,%r24
        !           203:        ds              %r25,%r22,%r25
        !           204:        addc            %r24,%r24,%r24
        !           205:        ds              %r25,%r22,%r25
        !           206:        addc            %r24,%r24,%r24
        !           207:        ds              %r25,%r22,%r25
        !           208:        addc            %r24,%r24,%r24
        !           209:        ds              %r25,%r22,%r25
        !           210:        addc            %r24,%r24,%r24
        !           211:        ds              %r25,%r22,%r25
        !           212:        addc            %r24,%r24,%r24
        !           213:        ds              %r25,%r22,%r25
        !           214:        addc            %r24,%r24,%r24
        !           215:        ds              %r25,%r22,%r25
        !           216:        addc            %r24,%r24,%r24
        !           217:        ds              %r25,%r22,%r25
        !           218:        addc            %r24,%r24,%r24
        !           219:        ds              %r25,%r22,%r25
        !           220:        addc            %r24,%r24,%r24
        !           221:        ds              %r25,%r22,%r25
        !           222:        addc            %r24,%r24,%r24
        !           223:        ds              %r25,%r22,%r25
        !           224:        addc            %r24,%r24,%r24
        !           225:        ds              %r25,%r22,%r25
        !           226:        addc            %r24,%r24,%r24
        !           227:        ds              %r25,%r22,%r25
        !           228:        addc            %r24,%r24,%r24
        !           229:        ds              %r25,%r22,%r25
        !           230:        addc            %r24,%r24,%r24
        !           231:        ds              %r25,%r22,%r25
        !           232:        addc            %r24,%r24,%r24
        !           233:        ds              %r25,%r22,%r25
        !           234:        addc            %r24,%r24,%r24
        !           235:        ds              %r25,%r22,%r25
        !           236:        addc            %r24,%r24,%r24
        !           237:        ds              %r25,%r22,%r25
        !           238:        addc            %r24,%r24,%r24
        !           239:        ds              %r25,%r22,%r25
        !           240:        addc            %r24,%r24,%r24
        !           241:        ds              %r25,%r22,%r25
        !           242:        addc            %r24,%r24,%r24
        !           243:        ds              %r25,%r22,%r25
        !           244:        addc            %r24,%r24,%r24
        !           245:        ds              %r25,%r22,%r25
        !           246:        addc            %r24,%r24,%r24
        !           247:        ds              %r25,%r22,%r25
        !           248:        addc            %r24,%r24,%r24
        !           249:        ds              %r25,%r22,%r25
        !           250:        addc            %r24,%r24,%r24
        !           251:        ds              %r25,%r22,%r25
        !           252:        addc            %r24,%r24,%r24
        !           253:        ds              %r25,%r22,%r25
        !           254:        addc            %r24,%r24,%r24
        !           255:        ds              %r25,%r22,%r25
        !           256:        addc            %r24,%r24,%r24
        !           257:        ds              %r25,%r22,%r25
        !           258:        addc            %r24,%r24,%r24
        !           259:        ds              %r25,%r22,%r25
        !           260:        addc            %r24,%r24,%r24
        !           261:        ds              %r25,%r22,%r25
        !           262:        addc            %r24,%r24,%r28
        !           263:        comclr,>=       %r25,%r0,%r0
        !           264:        addl            %r25,%r22,%r25
        !           265:        sh1addl         %r25,%r19,%r25
        !           266: ; We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25
        !           267:        add,nuv         %r28,%r25,%r25
        !           268:        addl            %r25,%r1,%r25
        !           269:        addc            %r0,%r28,%r28
        !           270:        sub,<<          %r25,%r23,%r0
        !           271:        addl            %r25,%r1,%r25
        !           272:        stws            %r25,0(0,%r26)
        !           273:        bv              0(%r2)
        !           274:         addc           %r0,%r28,%r28
        !           275:
        !           276: ; This is just a special case of the code above.
        !           277: ; We come here when d == 0xFFFFFFFF
        !           278: L$FF.. add,uv          %r25,%r24,%r24
        !           279:        sub,<<          %r24,%r23,%r0
        !           280:        ldo             1(%r24),%r24
        !           281:        stws            %r24,0(0,%r26)
        !           282:        bv              0(%r2)
        !           283:         addc           %r0,%r25,%r28
        !           284:
        !           285:        .exit
        !           286:        .procend

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