; $Id: kerPPC.s,v 1.1.1.1 1999/09/16 13:47:57 karim Exp $ import hiremainder,overflow toc tc hiremainder[TC], hiremainder tc overflow[TC], overflow export addll[DS],.addll[PR],addllx[DS],.addllx[PR] export subll[DS],.subll[PR],subllx[DS],.subllx[PR] export mulll[DS],.mulll[PR],addmul[DS],.addmul[PR] export divll[DS],.divll[PR],bfffo[DS],.bfffo[PR] toc tc addll[TC], addll[DS] tc addllx[TC], addllx[DS] tc subll[TC], subll[DS] tc subllx[TC], subllx[DS] tc mulll[TC], mulll[DS] tc addmul[TC], addmul[DS] tc divll[TC], divll[DS] tc bfffo[TC], bfffo[DS] csect addll[DS] dc.l .addll[PR] dc.l TOC[tc0] dc.l 0 csect .addll[PR] addc r3,r3,r4 subfe r5,r5,r5 addi r5,r5,1 lwz r6,overflow{TC}(RTOC) stw r5,0x0000(r6) blr csect addllx[DS] dc.l .addllx[PR] dc.l TOC[tc0] dc.l 0 csect .addllx[PR] addc r3,r3,r4 subfe r5,r5,r5 lwz r6,overflow{TC}(RTOC) lwz r7,0x0000(r6) addc r3,r7,r3 subfe r8,r8,r8 addc r5,r8,r5 addi r5,r5,2 stw r5,0x0000(r6) blr csect subll[DS] dc.l .subll[PR] dc.l TOC[tc0] dc.l 0 csect .subll[PR] subfc r3,r4,r3 subfe r5,r5,r5 neg r5,r5 lwz r6,overflow{TC}(RTOC) stw r5,0x0000(r6) blr csect subllx[DS] dc.l .subllx[PR] dc.l TOC[tc0] dc.l 0 csect .subllx[PR] subfc r3,r4,r3 subfe r5,r5,r5 lwz r6,overflow{TC}(RTOC) lwz r7,0x0000(r6) subfc r3,r7,r3 subfe r8,r8,r8 addc r5,r8,r5 neg r5,r5 stw r5,0x0000(r6) blr csect mulll[DS] dc.l .mulll[PR] dc.l TOC[tc0] dc.l 0 csect .mulll[PR] ; version PowerPC, plus lente ; mulhwu r5,r3,r4 ; lwz r6,hiremainder{TC}(RTOC) ; stw r5,0x0000(r6) ; mullw r3,r3,r4 ; blr ; version POWER lwz r6,hiremainder{TC}(RTOC) dialect POWER mul r5,r3,r4 dialect POWERPC cmpwi r3,0 bge @1 add r5,r5,r4 @1 cmpwi r4,0 bge @2 add r5,r5,r3 @2 stw r5,0x0000(r6) mfspr r3,mq blr csect addmul[DS] dc.l .addmul[PR] dc.l TOC[tc0] dc.l 0 csect .addmul[PR] ; version PowerPC, plus lente ; mulhwu r5,r3,r4 ; mullw r3,r3,r4 ; lwz r6,hiremainder{TC}(RTOC) ; lwz r7,0x0000(r6) ; addc r3,r7,r3 ; addze r5,r5 ; stw r5,0x0000(r6) ; blr ; version POWER lwz r6,hiremainder{TC}(RTOC) dialect POWER mul r5,r3,r4 dialect POWERPC cmpwi r3,0 bge @1 add r5,r5,r4 @1 cmpwi r4,0 bge @2 add r5,r5,r3 @2 lwz r7,0x0000(r6) mfspr r3,mq addc r3,r7,r3 addze r5,r5 stw r5,0x0000(r6) blr csect divll[DS] dc.l .divll[PR] dc.l TOC[tc0] dc.l 0 csect .divll[PR] ; version POWER ; chargement de a puis a1 dans r5, b puis b1 dans r3 et c puis c1 dans r4 lwz r6,hiremainder{TC}(RTOC) lwz r5,0x0000(r6) ; etape 1, f est code dans cr5, eb dans r7 et ec dans cr6 ; si f = 1, on garde une copie de c dans r10 cmpwi 5,r4,0 bge 5,@1 andi. r7,r4,1 mcrf 6,0 mr r10,r4 srwi r4,r4,1 andi. r7,r3,1 srwi r3,r3,1 rlwimi r3,r5,31,0,0 srwi r5,r5,1 ; modif cmplw r5,r4 bne @1 slwi r3,r3,1 add r3,r3,r7 addc r4,r3,r10 subfe. r5,r5,r5 li r3,-1 beq @5 subi r3,r3,1 add r4,r10,r4 b @5 ; etape 2 r3 recoit q et mq recoit r @1 add r8,r5,r5 addi r8,r8,1 cmplw r4,r8 bgt @2 bne @3 cmpwi r3,0 bge @2 @3 slwi r9,r4,31 srwi r8,r4,1 subfc r3,r9,r3 subfe r5,r8,r5 mtspr mq,r3 dialect POWER div r3,r5,r4 dialect POWERPC mfspr r4,mq oris r3,r3,0x8000 b @4 @2 mtspr mq,r3 dialect POWER div r3,r5,r4 dialect POWERPC mfspr r4,mq ; etape 3 r4 recoit r @4 bge 5,@5 slwi r4,r4,1 add r4,r4,r7 beq 6,@5 ; etape 4 modifiee subfc r4,r3,r4 subfe. r5,r5,r5 beq @5 subi r3,r3,1 addc r4,r4,r10 subfe. r5,r5,r5 beq @5 subi r3,r3,1 addc r4,r4,r10 ; retour @5 stw r4,0x0000(r6) blr csect bfffo[DS] dc.l .bfffo[PR] dc.l TOC[tc0] dc.l 0 csect .bfffo[PR] cntlzw r3,r3 blr