@@ -529,6 +529,27 @@ __asm__( \
529529#define LOOP_START \
530530 mu = c[x] * mp
531531
532+ #ifdef __APPLE__
533+
534+ #define INNERMUL \
535+ __asm__( \
536+ " mullw r16,%3,%4 \n\t" \
537+ " mulhwu r17,%3,%4 \n\t" \
538+ " addc r16,r16,%2 \n\t" \
539+ " addze r17,r17 \n\t" \
540+ " addc %1,r16,%5 \n\t" \
541+ " addze %0,r17 \n\t" \
542+ :"=r"(cy),"=r"(_c[0]):"0"(cy),"r"(mu),"r"(tmpm[0]),"1"(_c[0]):"r16", "r17", "cc"); ++tmpm;
543+
544+ #define PROPCARRY \
545+ __asm__( \
546+ " addc %1,%3,%2 \n\t" \
547+ " xor %0,%2,%2 \n\t" \
548+ " addze %0,%2 \n\t" \
549+ :"=r"(cy),"=r"(_c[0]):"0"(cy),"1"(_c[0]):"cc");
550+
551+ #else
552+
532553#define INNERMUL \
533554__asm__( \
534555 " mullw 16,%3,%4 \n\t" \
@@ -546,6 +567,8 @@ __asm__( \
546567 " addze %0,%2 \n\t" \
547568:"=r"(cy),"=r"(_c[0]):"0"(cy),"1"(_c[0]):"cc");
548569
570+ #endif
571+
549572#elif defined(TFM_PPC64 )
550573
551574/* PPC64 */
@@ -555,6 +578,8 @@ __asm__( \
555578#define LOOP_START \
556579 mu = c[x] * mp
557580
581+ #ifdef __APPLE__
582+
558583#define INNERMUL \
559584__asm__( \
560585 " mulld r16,%3,%4 \n\t" \
@@ -576,6 +601,31 @@ __asm__( \
576601 " addze %0,%0 \n\t" \
577602:"=r"(cy),"=m"(_c[0]):"0"(cy),"1"(_c[0]):"r16","cc");
578603
604+ #else
605+
606+ #define INNERMUL \
607+ __asm__( \
608+ " mulld 16,%3,%4 \n\t" \
609+ " mulhdu 17,%3,%4 \n\t" \
610+ " addc 16,16,%0 \n\t" \
611+ " addze 17,17 \n\t" \
612+ " ldx 18,0,%1 \n\t" \
613+ " addc 16,16,18 \n\t" \
614+ " addze %0,17 \n\t" \
615+ " sdx 16,0,%1 \n\t" \
616+ :"=r"(cy),"=m"(_c[0]):"0"(cy),"r"(mu),"r"(tmpm[0]),"1"(_c[0]):"16", "17", "18","cc"); ++tmpm;
617+
618+ #define PROPCARRY \
619+ __asm__( \
620+ " ldx 16,0,%1 \n\t" \
621+ " addc 16,16,%0 \n\t" \
622+ " sdx 16,0,%1 \n\t" \
623+ " xor %0,%0,%0 \n\t" \
624+ " addze %0,%0 \n\t" \
625+ :"=r"(cy),"=m"(_c[0]):"0"(cy),"1"(_c[0]):"16","cc");
626+
627+ #endif
628+
579629/******************************************************************/
580630
581631#elif defined(TFM_AVR32 )
0 commit comments