Annotation of OpenXM_contrib/pari/src/kernel/ppc/kerPPC.s, Revision 1.1
1.1 ! maekawa 1: ; $Id: kerPPC.s,v 1.1.1.1 1999/09/16 13:47:57 karim Exp $
! 2: import hiremainder,overflow
! 3:
! 4: toc
! 5: tc hiremainder[TC], hiremainder
! 6: tc overflow[TC], overflow
! 7:
! 8: export addll[DS],.addll[PR],addllx[DS],.addllx[PR]
! 9: export subll[DS],.subll[PR],subllx[DS],.subllx[PR]
! 10: export mulll[DS],.mulll[PR],addmul[DS],.addmul[PR]
! 11: export divll[DS],.divll[PR],bfffo[DS],.bfffo[PR]
! 12:
! 13: toc
! 14: tc addll[TC], addll[DS]
! 15: tc addllx[TC], addllx[DS]
! 16: tc subll[TC], subll[DS]
! 17: tc subllx[TC], subllx[DS]
! 18: tc mulll[TC], mulll[DS]
! 19: tc addmul[TC], addmul[DS]
! 20: tc divll[TC], divll[DS]
! 21: tc bfffo[TC], bfffo[DS]
! 22:
! 23: csect addll[DS]
! 24: dc.l .addll[PR]
! 25: dc.l TOC[tc0]
! 26: dc.l 0
! 27:
! 28: csect .addll[PR]
! 29: addc r3,r3,r4
! 30: subfe r5,r5,r5
! 31: addi r5,r5,1
! 32: lwz r6,overflow{TC}(RTOC)
! 33: stw r5,0x0000(r6)
! 34: blr
! 35:
! 36: csect addllx[DS]
! 37: dc.l .addllx[PR]
! 38: dc.l TOC[tc0]
! 39: dc.l 0
! 40:
! 41: csect .addllx[PR]
! 42: addc r3,r3,r4
! 43: subfe r5,r5,r5
! 44: lwz r6,overflow{TC}(RTOC)
! 45: lwz r7,0x0000(r6)
! 46: addc r3,r7,r3
! 47: subfe r8,r8,r8
! 48: addc r5,r8,r5
! 49: addi r5,r5,2
! 50: stw r5,0x0000(r6)
! 51: blr
! 52:
! 53: csect subll[DS]
! 54: dc.l .subll[PR]
! 55: dc.l TOC[tc0]
! 56: dc.l 0
! 57:
! 58: csect .subll[PR]
! 59: subfc r3,r4,r3
! 60: subfe r5,r5,r5
! 61: neg r5,r5
! 62: lwz r6,overflow{TC}(RTOC)
! 63: stw r5,0x0000(r6)
! 64: blr
! 65:
! 66: csect subllx[DS]
! 67: dc.l .subllx[PR]
! 68: dc.l TOC[tc0]
! 69: dc.l 0
! 70:
! 71: csect .subllx[PR]
! 72: subfc r3,r4,r3
! 73: subfe r5,r5,r5
! 74: lwz r6,overflow{TC}(RTOC)
! 75: lwz r7,0x0000(r6)
! 76: subfc r3,r7,r3
! 77: subfe r8,r8,r8
! 78: addc r5,r8,r5
! 79: neg r5,r5
! 80: stw r5,0x0000(r6)
! 81: blr
! 82:
! 83: csect mulll[DS]
! 84: dc.l .mulll[PR]
! 85: dc.l TOC[tc0]
! 86: dc.l 0
! 87:
! 88: csect .mulll[PR]
! 89:
! 90: ; version PowerPC, plus lente
! 91: ; mulhwu r5,r3,r4
! 92: ; lwz r6,hiremainder{TC}(RTOC)
! 93: ; stw r5,0x0000(r6)
! 94: ; mullw r3,r3,r4
! 95: ; blr
! 96: ; version POWER
! 97: lwz r6,hiremainder{TC}(RTOC)
! 98: dialect POWER
! 99: mul r5,r3,r4
! 100: dialect POWERPC
! 101: cmpwi r3,0
! 102: bge @1
! 103: add r5,r5,r4
! 104: @1 cmpwi r4,0
! 105: bge @2
! 106: add r5,r5,r3
! 107: @2 stw r5,0x0000(r6)
! 108: mfspr r3,mq
! 109: blr
! 110:
! 111: csect addmul[DS]
! 112: dc.l .addmul[PR]
! 113: dc.l TOC[tc0]
! 114: dc.l 0
! 115:
! 116: csect .addmul[PR]
! 117: ; version PowerPC, plus lente
! 118: ; mulhwu r5,r3,r4
! 119: ; mullw r3,r3,r4
! 120: ; lwz r6,hiremainder{TC}(RTOC)
! 121: ; lwz r7,0x0000(r6)
! 122: ; addc r3,r7,r3
! 123: ; addze r5,r5
! 124: ; stw r5,0x0000(r6)
! 125: ; blr
! 126: ; version POWER
! 127: lwz r6,hiremainder{TC}(RTOC)
! 128: dialect POWER
! 129: mul r5,r3,r4
! 130: dialect POWERPC
! 131: cmpwi r3,0
! 132: bge @1
! 133: add r5,r5,r4
! 134: @1 cmpwi r4,0
! 135: bge @2
! 136: add r5,r5,r3
! 137: @2 lwz r7,0x0000(r6)
! 138: mfspr r3,mq
! 139: addc r3,r7,r3
! 140: addze r5,r5
! 141: stw r5,0x0000(r6)
! 142: blr
! 143:
! 144: csect divll[DS]
! 145: dc.l .divll[PR]
! 146: dc.l TOC[tc0]
! 147: dc.l 0
! 148:
! 149: csect .divll[PR]
! 150:
! 151: ; version POWER
! 152: ; chargement de a puis a1 dans r5, b puis b1 dans r3 et c puis c1 dans r4
! 153: lwz r6,hiremainder{TC}(RTOC)
! 154: lwz r5,0x0000(r6)
! 155:
! 156: ; etape 1, f est code dans cr5, eb dans r7 et ec dans cr6
! 157: ; si f = 1, on garde une copie de c dans r10
! 158: cmpwi 5,r4,0
! 159: bge 5,@1
! 160: andi. r7,r4,1
! 161: mcrf 6,0
! 162: mr r10,r4
! 163: srwi r4,r4,1
! 164: andi. r7,r3,1
! 165: srwi r3,r3,1
! 166: rlwimi r3,r5,31,0,0
! 167: srwi r5,r5,1
! 168:
! 169: ; modif
! 170: cmplw r5,r4
! 171: bne @1
! 172: slwi r3,r3,1
! 173: add r3,r3,r7
! 174: addc r4,r3,r10
! 175: subfe. r5,r5,r5
! 176: li r3,-1
! 177: beq @5
! 178: subi r3,r3,1
! 179: add r4,r10,r4
! 180: b @5
! 181:
! 182: ; etape 2 r3 recoit q et mq recoit r
! 183: @1 add r8,r5,r5
! 184: addi r8,r8,1
! 185: cmplw r4,r8
! 186: bgt @2
! 187: bne @3
! 188: cmpwi r3,0
! 189: bge @2
! 190: @3 slwi r9,r4,31
! 191: srwi r8,r4,1
! 192: subfc r3,r9,r3
! 193: subfe r5,r8,r5
! 194: mtspr mq,r3
! 195: dialect POWER
! 196: div r3,r5,r4
! 197: dialect POWERPC
! 198: mfspr r4,mq
! 199: oris r3,r3,0x8000
! 200: b @4
! 201: @2 mtspr mq,r3
! 202: dialect POWER
! 203: div r3,r5,r4
! 204: dialect POWERPC
! 205: mfspr r4,mq
! 206:
! 207: ; etape 3 r4 recoit r
! 208: @4 bge 5,@5
! 209: slwi r4,r4,1
! 210: add r4,r4,r7
! 211: beq 6,@5
! 212:
! 213: ; etape 4 modifiee
! 214: subfc r4,r3,r4
! 215: subfe. r5,r5,r5
! 216: beq @5
! 217: subi r3,r3,1
! 218: addc r4,r4,r10
! 219: subfe. r5,r5,r5
! 220: beq @5
! 221: subi r3,r3,1
! 222: addc r4,r4,r10
! 223:
! 224: ; retour
! 225: @5 stw r4,0x0000(r6)
! 226: blr
! 227:
! 228: csect bfffo[DS]
! 229: dc.l .bfffo[PR]
! 230: dc.l TOC[tc0]
! 231: dc.l 0
! 232:
! 233: csect .bfffo[PR]
! 234: cntlzw r3,r3
! 235: blr
! 236:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>