From b6bfae9c24dd369111825590f09f6c50a8559061 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Sun, 1 Sep 2024 19:44:20 +0800 Subject: [PATCH] asm.c: fix ppc asm for macOS --- wolfcrypt/src/asm.c | 50 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/wolfcrypt/src/asm.c b/wolfcrypt/src/asm.c index c36099067..2096ae90d 100644 --- a/wolfcrypt/src/asm.c +++ b/wolfcrypt/src/asm.c @@ -529,6 +529,27 @@ __asm__( \ #define LOOP_START \ mu = c[x] * mp +#ifdef __APPLE__ + +#define INNERMUL \ +__asm__( \ + " mullw r16,%3,%4 \n\t" \ + " mulhwu r17,%3,%4 \n\t" \ + " addc r16,r16,%2 \n\t" \ + " addze r17,r17 \n\t" \ + " addc %1,r16,%5 \n\t" \ + " addze %0,r17 \n\t" \ +:"=r"(cy),"=r"(_c[0]):"0"(cy),"r"(mu),"r"(tmpm[0]),"1"(_c[0]):"r16", "r17", "cc"); ++tmpm; + +#define PROPCARRY \ +__asm__( \ + " addc %1,%3,%2 \n\t" \ + " xor %0,%2,%2 \n\t" \ + " addze %0,%2 \n\t" \ +:"=r"(cy),"=r"(_c[0]):"0"(cy),"1"(_c[0]):"cc"); + +#else + #define INNERMUL \ __asm__( \ " mullw 16,%3,%4 \n\t" \ @@ -546,6 +567,8 @@ __asm__( \ " addze %0,%2 \n\t" \ :"=r"(cy),"=r"(_c[0]):"0"(cy),"1"(_c[0]):"cc"); +#endif + #elif defined(TFM_PPC64) /* PPC64 */ @@ -555,6 +578,8 @@ __asm__( \ #define LOOP_START \ mu = c[x] * mp +#ifdef __APPLE__ + #define INNERMUL \ __asm__( \ " mulld r16,%3,%4 \n\t" \ @@ -576,6 +601,31 @@ __asm__( \ " addze %0,%0 \n\t" \ :"=r"(cy),"=m"(_c[0]):"0"(cy),"1"(_c[0]):"r16","cc"); +#else + +#define INNERMUL \ +__asm__( \ + " mulld 16,%3,%4 \n\t" \ + " mulhdu 17,%3,%4 \n\t" \ + " addc 16,16,%0 \n\t" \ + " addze 17,17 \n\t" \ + " ldx 18,0,%1 \n\t" \ + " addc 16,16,18 \n\t" \ + " addze %0,17 \n\t" \ + " sdx 16,0,%1 \n\t" \ +:"=r"(cy),"=m"(_c[0]):"0"(cy),"r"(mu),"r"(tmpm[0]),"1"(_c[0]):"16", "17", "18","cc"); ++tmpm; + +#define PROPCARRY \ +__asm__( \ + " ldx 16,0,%1 \n\t" \ + " addc 16,16,%0 \n\t" \ + " sdx 16,0,%1 \n\t" \ + " xor %0,%0,%0 \n\t" \ + " addze %0,%0 \n\t" \ +:"=r"(cy),"=m"(_c[0]):"0"(cy),"1"(_c[0]):"16","cc"); + +#endif + /******************************************************************/ #elif defined(TFM_AVR32)