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