Skip to content

Commit 10c1fa2

Browse files
authored
Merge pull request #7931 from barracuda156/powerpc-darwin
Fixes for PowerPC
2 parents 500a3b4 + 94478cb commit 10c1fa2

4 files changed

Lines changed: 358 additions & 6 deletions

File tree

wolfcrypt/src/asm.c

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)