Annotation of OpenXM_contrib/pari-2.2/src/kernel/sparcv7/level0.S, Revision 1.1
1.1 ! noro 1: /* $Id: level0.S,v 1.3 2000/11/03 21:00:26 karim Exp $
! 2:
! 3: Copyright (C) 2000 The PARI group.
! 4:
! 5: This file is part of the PARI/GP package.
! 6:
! 7: PARI/GP is free software; you can redistribute it and/or modify it under the
! 8: terms of the GNU General Public License as published by the Free Software
! 9: Foundation. It is distributed in the hope that it will be useful, but WITHOUT
! 10: ANY WARRANTY WHATSOEVER.
! 11:
! 12: Check the License for details. You should have received a copy of it, along
! 13: with the package; see the file 'COPYING'. If not, write to the Free Software
! 14: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
! 15:
! 16: #if defined(NO_UNDERSCORE) || defined(linux)
! 17: # define C(entrypoint) entrypoint
! 18: #elif defined(sun) || defined(NeXT)
! 19: # ifdef __STDC__
! 20: # define C(entrypoint) _##entrypoint
! 21: # else
! 22: # define C(entrypoint) _/**/entrypoint
! 23: # endif
! 24: #endif
! 25: #if defined(sun) || defined(linux)
! 26: # define GLOBL .global
! 27: #elif defined(NeXT)
! 28: # define GLOBL .globl
! 29: #endif
! 30:
! 31: #if defined(sun) || defined(linux)
! 32: .seg "text"
! 33: #elif defined(NeXT)
! 34: .text
! 35: .align 2
! 36: #endif
! 37: GLOBL C(addll),C(subll),C(addllx),C(subllx),C(shiftl),C(shiftlr),C(bfffo)
! 38: GLOBL C(mulll),C(overflow),C(hiremainder),C(addmul),C(divll)
! 39:
! 40: C(addll): sethi %hi(C(overflow)),%o3
! 41: addcc %o0,%o1,%o0
! 42: addx %g0,%g0,%o2
! 43: retl
! 44: st %o2,[%o3+%lo(C(overflow))]
! 45: C(subll): sethi %hi(C(overflow)),%o3
! 46: subcc %o0,%o1,%o0
! 47: addx %g0,%g0,%o2
! 48: retl
! 49: st %o2,[%o3+%lo(C(overflow))]
! 50: C(addllx): sethi %hi(C(overflow)),%o3
! 51: ld [%o3+%lo(C(overflow))],%o2
! 52: subcc %g0,%o2,%g0
! 53: addxcc %o0,%o1,%o0
! 54: addx %g0,%g0,%o2
! 55: retl
! 56: st %o2,[%o3+%lo(C(overflow))]
! 57: C(subllx): sethi %hi(C(overflow)),%o3
! 58: ld [%o3+%lo(C(overflow))],%o2
! 59: subcc %g0,%o2,%g0
! 60: subxcc %o0,%o1,%o0
! 61: addx %g0,%g0,%o2
! 62: retl
! 63: st %o2,[%o3+%lo(C(overflow))]
! 64: C(shiftl): sethi %hi(C(hiremainder)),%o3
! 65: neg %o1,%o4
! 66: srl %o0,%o4,%o2
! 67: st %o2,[%o3+%lo(C(hiremainder))]
! 68: retl
! 69: sll %o0,%o1,%o0
! 70: C(shiftlr): sethi %hi(C(hiremainder)),%o3
! 71: neg %o1,%o4
! 72: sll %o0,%o4,%o2
! 73: st %o2,[%o3+%lo(C(hiremainder))]
! 74: retl
! 75: srl %o0,%o1,%o0
! 76: C(bfffo): sethi %hi(0xffff0000),%o1
! 77: andcc %o1,%o0,%g0
! 78: bnz,a 1f
! 79: clr %o2
! 80: sll %o0,16,%o0
! 81: mov 16,%o2
! 82: 1: sethi %hi(0xff000000),%o1
! 83: andcc %o1,%o0,%g0
! 84: bnz 2f
! 85: sethi %hi(0xf0000000),%o1
! 86: sll %o0,8,%o0
! 87: add %o2,8,%o2
! 88: 2: andcc %o1,%o0,%g0
! 89: bnz,a 3f
! 90: srl %o0,28,%o0
! 91: add %o2,4,%o2
! 92: srl %o0,24,%o0
! 93: 3: set C(tabshi),%o3
! 94: sll %o0,2,%o0
! 95: ld [%o3+%o0],%o1
! 96: retl
! 97: add %o2,%o1,%o0
! 98: C(mulll): sethi %hi(C(hiremainder)),%o3
! 99: or %o0,%o1,%o4
! 100: mov %o0,%y
! 101: andncc %o4,0xfff,%g0
! 102: be 2f
! 103: andcc %g0,%g0,%o4
! 104: mulscc %o4,%o1,%o4
! 105: mulscc %o4,%o1,%o4
! 106: mulscc %o4,%o1,%o4
! 107: mulscc %o4,%o1,%o4
! 108: mulscc %o4,%o1,%o4
! 109: mulscc %o4,%o1,%o4
! 110: mulscc %o4,%o1,%o4
! 111: mulscc %o4,%o1,%o4
! 112: mulscc %o4,%o1,%o4
! 113: mulscc %o4,%o1,%o4
! 114: mulscc %o4,%o1,%o4
! 115: mulscc %o4,%o1,%o4
! 116: mulscc %o4,%o1,%o4
! 117: mulscc %o4,%o1,%o4
! 118: mulscc %o4,%o1,%o4
! 119: mulscc %o4,%o1,%o4
! 120: mulscc %o4,%o1,%o4
! 121: mulscc %o4,%o1,%o4
! 122: mulscc %o4,%o1,%o4
! 123: mulscc %o4,%o1,%o4
! 124: mulscc %o4,%o1,%o4
! 125: mulscc %o4,%o1,%o4
! 126: mulscc %o4,%o1,%o4
! 127: mulscc %o4,%o1,%o4
! 128: mulscc %o4,%o1,%o4
! 129: mulscc %o4,%o1,%o4
! 130: mulscc %o4,%o1,%o4
! 131: mulscc %o4,%o1,%o4
! 132: mulscc %o4,%o1,%o4
! 133: mulscc %o4,%o1,%o4
! 134: mulscc %o4,%o1,%o4
! 135: mulscc %o4,%o1,%o4
! 136: mulscc %o4,%g0,%o4
! 137: tst %o1
! 138: bl,a 1f
! 139: add %o4,%o0,%o4
! 140: 1: st %o4,[%o3+%lo(C(hiremainder))]
! 141: retl
! 142: rd %y,%o0
! 143: 2: clr [%o3+%lo(C(hiremainder))]
! 144: mulscc %o4,%o1,%o4
! 145: mulscc %o4,%o1,%o4
! 146: mulscc %o4,%o1,%o4
! 147: mulscc %o4,%o1,%o4
! 148: mulscc %o4,%o1,%o4
! 149: mulscc %o4,%o1,%o4
! 150: mulscc %o4,%o1,%o4
! 151: mulscc %o4,%o1,%o4
! 152: mulscc %o4,%o1,%o4
! 153: mulscc %o4,%o1,%o4
! 154: mulscc %o4,%o1,%o4
! 155: mulscc %o4,%o1,%o4
! 156: mulscc %o4,%g0,%o4
! 157: rd %y,%o5
! 158: sll %o4,12,%o4
! 159: srl %o5,20,%o5
! 160: retl
! 161: or %o5,%o4,%o0
! 162:
! 163: C(addmul): sethi %hi(C(hiremainder)),%o3
! 164: ld [%o3+%lo(C(hiremainder))],%o2
! 165: or %o0,%o1,%o4
! 166: mov %o0,%y
! 167: andncc %o4,0xfff,%g0
! 168: be 2f
! 169: andcc %g0,%g0,%o4
! 170: mulscc %o4,%o1,%o4
! 171: mulscc %o4,%o1,%o4
! 172: mulscc %o4,%o1,%o4
! 173: mulscc %o4,%o1,%o4
! 174: mulscc %o4,%o1,%o4
! 175: mulscc %o4,%o1,%o4
! 176: mulscc %o4,%o1,%o4
! 177: mulscc %o4,%o1,%o4
! 178: mulscc %o4,%o1,%o4
! 179: mulscc %o4,%o1,%o4
! 180: mulscc %o4,%o1,%o4
! 181: mulscc %o4,%o1,%o4
! 182: mulscc %o4,%o1,%o4
! 183: mulscc %o4,%o1,%o4
! 184: mulscc %o4,%o1,%o4
! 185: mulscc %o4,%o1,%o4
! 186: mulscc %o4,%o1,%o4
! 187: mulscc %o4,%o1,%o4
! 188: mulscc %o4,%o1,%o4
! 189: mulscc %o4,%o1,%o4
! 190: mulscc %o4,%o1,%o4
! 191: mulscc %o4,%o1,%o4
! 192: mulscc %o4,%o1,%o4
! 193: mulscc %o4,%o1,%o4
! 194: mulscc %o4,%o1,%o4
! 195: mulscc %o4,%o1,%o4
! 196: mulscc %o4,%o1,%o4
! 197: mulscc %o4,%o1,%o4
! 198: mulscc %o4,%o1,%o4
! 199: mulscc %o4,%o1,%o4
! 200: mulscc %o4,%o1,%o4
! 201: mulscc %o4,%o1,%o4
! 202: mulscc %o4,%g0,%o4
! 203: tst %o1
! 204: bl,a 1f
! 205: add %o4,%o0,%o4
! 206: 1: rd %y,%o0
! 207: addcc %o0,%o2,%o0
! 208: addx %g0,%o4,%o4
! 209: retl
! 210: st %o4,[%o3+%lo(C(hiremainder))]
! 211: 2: mulscc %o4,%o1,%o4
! 212: mulscc %o4,%o1,%o4
! 213: mulscc %o4,%o1,%o4
! 214: mulscc %o4,%o1,%o4
! 215: mulscc %o4,%o1,%o4
! 216: mulscc %o4,%o1,%o4
! 217: mulscc %o4,%o1,%o4
! 218: mulscc %o4,%o1,%o4
! 219: mulscc %o4,%o1,%o4
! 220: mulscc %o4,%o1,%o4
! 221: mulscc %o4,%o1,%o4
! 222: mulscc %o4,%o1,%o4
! 223: mulscc %o4,%g0,%o4
! 224: rd %y,%o5
! 225: sll %o4,12,%o4
! 226: srl %o5,20,%o5
! 227: or %o5,%o4,%o0
! 228: addcc %o0,%o2,%o0
! 229: addx %g0,%g0,%o4
! 230: retl
! 231: st %o4,[%o3+%lo(C(hiremainder))]
! 232:
! 233: #define SS0(label) \
! 234: addx %o2,%o2,%o2;\
! 235: subcc %o2,%o1,%o3;\
! 236: bcc label;\
! 237: addxcc %o0,%o0,%o0
! 238:
! 239: #define SS1(label) \
! 240: addx %o3,%o3,%o3;\
! 241: subcc %o3,%o1,%o2;\
! 242: bcc label;\
! 243: addxcc %o0,%o0,%o0
! 244:
! 245: C(divll): sethi %hi(C(hiremainder)),%o4
! 246: ld [%o4+%lo(C(hiremainder))],%o2
! 247: subcc %o2,%o1,%g0
! 248: blu 1f
! 249: addcc %o1,%o1,%g0
! 250: mov 0x2f,%o0
! 251: call C(pari_err),1
! 252: nop
! 253: 1: bcc Lsmalldiv
! 254: andcc %o1,1,%g0
! 255: be Levendiv
! 256: srl %o1,1,%o1
! 257: add %o1,1,%o1
! 258: subcc %o2,%o1,%o3
! 259: bcc Lb01
! 260: addxcc %o0,%o0,%o0
! 261: La01: SS0(Lb02)
! 262: La02: SS0(Lb03)
! 263: La03: SS0(Lb04)
! 264: La04: SS0(Lb05)
! 265: La05: SS0(Lb06)
! 266: La06: SS0(Lb07)
! 267: La07: SS0(Lb08)
! 268: La08: SS0(Lb09)
! 269: La09: SS0(Lb10)
! 270: La10: SS0(Lb11)
! 271: La11: SS0(Lb12)
! 272: La12: SS0(Lb13)
! 273: La13: SS0(Lb14)
! 274: La14: SS0(Lb15)
! 275: La15: SS0(Lb16)
! 276: La16: SS0(Lb17)
! 277: La17: SS0(Lb18)
! 278: La18: SS0(Lb19)
! 279: La19: SS0(Lb20)
! 280: La20: SS0(Lb21)
! 281: La21: SS0(Lb22)
! 282: La22: SS0(Lb23)
! 283: La23: SS0(Lb24)
! 284: La24: SS0(Lb25)
! 285: La25: SS0(Lb26)
! 286: La26: SS0(Lb27)
! 287: La27: SS0(Lb28)
! 288: La28: SS0(Lb29)
! 289: La29: SS0(Lb30)
! 290: La30: SS0(Lb31)
! 291: La31: SS0(Lb32)
! 292: La32: addx %o2,%o2,%o2
! 293: xor %o0,-1,%o0
! 294: add %o1,%o1,%o1
! 295: sub %o1,1,%o1
! 296: addcc %o0,%o2,%o2
! 297: bcc 1f
! 298: subcc %o2,%o1,%o3
! 299: subcc %o3,%o1,%o2
! 300: bcs 2f
! 301: add %o0,1,%o0
! 302: add %o0,1,%o0
! 303: 3: retl
! 304: st %o2,[%o4+%lo(C(hiremainder))]
! 305: 1: bcs 3b
! 306: nop
! 307: add %o0,1,%o0
! 308: 2: retl
! 309: st %o3,[%o4+%lo(C(hiremainder))]
! 310:
! 311: Lb01: SS1(La02)
! 312: Lb02: SS1(La03)
! 313: Lb03: SS1(La04)
! 314: Lb04: SS1(La05)
! 315: Lb05: SS1(La06)
! 316: Lb06: SS1(La07)
! 317: Lb07: SS1(La08)
! 318: Lb08: SS1(La09)
! 319: Lb09: SS1(La10)
! 320: Lb10: SS1(La11)
! 321: Lb11: SS1(La12)
! 322: Lb12: SS1(La13)
! 323: Lb13: SS1(La14)
! 324: Lb14: SS1(La15)
! 325: Lb15: SS1(La16)
! 326: Lb16: SS1(La17)
! 327: Lb17: SS1(La18)
! 328: Lb18: SS1(La19)
! 329: Lb19: SS1(La20)
! 330: Lb20: SS1(La21)
! 331: Lb21: SS1(La22)
! 332: Lb22: SS1(La23)
! 333: Lb23: SS1(La24)
! 334: Lb24: SS1(La25)
! 335: Lb25: SS1(La26)
! 336: Lb26: SS1(La27)
! 337: Lb27: SS1(La28)
! 338: Lb28: SS1(La29)
! 339: Lb29: SS1(La30)
! 340: Lb30: SS1(La31)
! 341: Lb31: SS1(La32)
! 342: Lb32: addx %o3,%o3,%o2
! 343: xor %o0,-1,%o0
! 344: add %o1,%o1,%o1
! 345: sub %o1,1,%o1
! 346: addcc %o0,%o2,%o2
! 347: bcc 1f
! 348: subcc %o2,%o1,%o3
! 349: subcc %o3,%o1,%o2
! 350: bcs 2f
! 351: add %o0,1,%o0
! 352: add %o0,1,%o0
! 353: 3: retl
! 354: st %o2,[%o4+%lo(C(hiremainder))]
! 355: 1: bcs 3b
! 356: nop
! 357: add %o0,1,%o0
! 358: 2: retl
! 359: st %o3,[%o4+%lo(C(hiremainder))]
! 360:
! 361: Lsmalldiv:
! 362: addcc %o0,%o0,%o0
! 363: Lc00: SS0(Ld01)
! 364: Lc01: SS0(Ld02)
! 365: Lc02: SS0(Ld03)
! 366: Lc03: SS0(Ld04)
! 367: Lc04: SS0(Ld05)
! 368: Lc05: SS0(Ld06)
! 369: Lc06: SS0(Ld07)
! 370: Lc07: SS0(Ld08)
! 371: Lc08: SS0(Ld09)
! 372: Lc09: SS0(Ld10)
! 373: Lc10: SS0(Ld11)
! 374: Lc11: SS0(Ld12)
! 375: Lc12: SS0(Ld13)
! 376: Lc13: SS0(Ld14)
! 377: Lc14: SS0(Ld15)
! 378: Lc15: SS0(Ld16)
! 379: Lc16: SS0(Ld17)
! 380: Lc17: SS0(Ld18)
! 381: Lc18: SS0(Ld19)
! 382: Lc19: SS0(Ld20)
! 383: Lc20: SS0(Ld21)
! 384: Lc21: SS0(Ld22)
! 385: Lc22: SS0(Ld23)
! 386: Lc23: SS0(Ld24)
! 387: Lc24: SS0(Ld25)
! 388: Lc25: SS0(Ld26)
! 389: Lc26: SS0(Ld27)
! 390: Lc27: SS0(Ld28)
! 391: Lc28: SS0(Ld29)
! 392: Lc29: SS0(Ld30)
! 393: Lc30: SS0(Ld31)
! 394: Lc31: SS0(Ld32)
! 395: Lc32: xor %o0,-1,%o0
! 396: retl
! 397: st %o2,[%o4+%lo(C(hiremainder))]
! 398:
! 399: Ld01: SS1(Lc02)
! 400: Ld02: SS1(Lc03)
! 401: Ld03: SS1(Lc04)
! 402: Ld04: SS1(Lc05)
! 403: Ld05: SS1(Lc06)
! 404: Ld06: SS1(Lc07)
! 405: Ld07: SS1(Lc08)
! 406: Ld08: SS1(Lc09)
! 407: Ld09: SS1(Lc10)
! 408: Ld10: SS1(Lc11)
! 409: Ld11: SS1(Lc12)
! 410: Ld12: SS1(Lc13)
! 411: Ld13: SS1(Lc14)
! 412: Ld14: SS1(Lc15)
! 413: Ld15: SS1(Lc16)
! 414: Ld16: SS1(Lc17)
! 415: Ld17: SS1(Lc18)
! 416: Ld18: SS1(Lc19)
! 417: Ld19: SS1(Lc20)
! 418: Ld20: SS1(Lc21)
! 419: Ld21: SS1(Lc22)
! 420: Ld22: SS1(Lc23)
! 421: Ld23: SS1(Lc24)
! 422: Ld24: SS1(Lc25)
! 423: Ld25: SS1(Lc26)
! 424: Ld26: SS1(Lc27)
! 425: Ld27: SS1(Lc28)
! 426: Ld28: SS1(Lc29)
! 427: Ld29: SS1(Lc30)
! 428: Ld30: SS1(Lc31)
! 429: Ld31: SS1(Lc32)
! 430: Ld32: xor %o0,-1,%o0
! 431: retl
! 432: st %o3,[%o4+%lo(C(hiremainder))]
! 433:
! 434:
! 435: Levendiv:
! 436: subcc %o2,%o1,%o3
! 437: bcc Lf01
! 438: addxcc %o0,%o0,%o0
! 439: Le01: SS0(Lf02)
! 440: Le02: SS0(Lf03)
! 441: Le03: SS0(Lf04)
! 442: Le04: SS0(Lf05)
! 443: Le05: SS0(Lf06)
! 444: Le06: SS0(Lf07)
! 445: Le07: SS0(Lf08)
! 446: Le08: SS0(Lf09)
! 447: Le09: SS0(Lf10)
! 448: Le10: SS0(Lf11)
! 449: Le11: SS0(Lf12)
! 450: Le12: SS0(Lf13)
! 451: Le13: SS0(Lf14)
! 452: Le14: SS0(Lf15)
! 453: Le15: SS0(Lf16)
! 454: Le16: SS0(Lf17)
! 455: Le17: SS0(Lf18)
! 456: Le18: SS0(Lf19)
! 457: Le19: SS0(Lf20)
! 458: Le20: SS0(Lf21)
! 459: Le21: SS0(Lf22)
! 460: Le22: SS0(Lf23)
! 461: Le23: SS0(Lf24)
! 462: Le24: SS0(Lf25)
! 463: Le25: SS0(Lf26)
! 464: Le26: SS0(Lf27)
! 465: Le27: SS0(Lf28)
! 466: Le28: SS0(Lf29)
! 467: Le29: SS0(Lf30)
! 468: Le30: SS0(Lf31)
! 469: Le31: SS0(Lf32)
! 470: Le32: addx %o2,%o2,%o2
! 471: xor %o0,-1,%o0
! 472: retl
! 473: st %o2,[%o4+%lo(C(hiremainder))]
! 474:
! 475: Lf01: SS1(Le02)
! 476: Lf02: SS1(Le03)
! 477: Lf03: SS1(Le04)
! 478: Lf04: SS1(Le05)
! 479: Lf05: SS1(Le06)
! 480: Lf06: SS1(Le07)
! 481: Lf07: SS1(Le08)
! 482: Lf08: SS1(Le09)
! 483: Lf09: SS1(Le10)
! 484: Lf10: SS1(Le11)
! 485: Lf11: SS1(Le12)
! 486: Lf12: SS1(Le13)
! 487: Lf13: SS1(Le14)
! 488: Lf14: SS1(Le15)
! 489: Lf15: SS1(Le16)
! 490: Lf16: SS1(Le17)
! 491: Lf17: SS1(Le18)
! 492: Lf18: SS1(Le19)
! 493: Lf19: SS1(Le20)
! 494: Lf20: SS1(Le21)
! 495: Lf21: SS1(Le22)
! 496: Lf22: SS1(Le23)
! 497: Lf23: SS1(Le24)
! 498: Lf24: SS1(Le25)
! 499: Lf25: SS1(Le26)
! 500: Lf26: SS1(Le27)
! 501: Lf27: SS1(Le28)
! 502: Lf28: SS1(Le29)
! 503: Lf29: SS1(Le30)
! 504: Lf30: SS1(Le31)
! 505: Lf31: SS1(Le32)
! 506: Lf32: addx %o3,%o3,%o3
! 507: xor %o0,-1,%o0
! 508: retl
! 509: st %o3,[%o4+%lo(C(hiremainder))]
! 510:
! 511: .seg "data"
! 512: .align 4
! 513: C(tabshi): .word 4,3,2,2,1,1,1,1,0,0,0,0,0,0,0,0
! 514:
! 515: .seg "bss"
! 516: .align 4
! 517: C(hiremainder): .skip 4
! 518: C(overflow): .skip 4
! 519:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>