tls: fix pstm asm constraint problem

function                                             old     new   delta
pstm_sqr_comba                                       551     475     -76

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-07-15 17:13:08 +02:00
parent 367a55c7d7
commit 79376ecdbd
3 changed files with 7 additions and 6 deletions

View File

@ -26,10 +26,8 @@
#undef USE_SEED #undef USE_SEED
/* pstm: multiprecision numbers */ /* pstm: multiprecision numbers */
#undef DISABLE_PSTM #undef DISABLE_PSTM
#if defined(__GNUC__) && defined(__i386__) && ENABLE_STATIC #if defined(__GNUC__) && defined(__i386__)
/* PSTM_X86 works correctly. +25 bytes. */ /* PSTM_X86 works correctly. +25 bytes. */
/* Only enabled on static build since tls_pstm_mul_comba.c::MULADD
* and tls_pstm_sqr_comba.c::SQRADD2 need too many registers, choke when ebx is not available */
# define PSTM_32BIT # define PSTM_32BIT
# define PSTM_X86 # define PSTM_X86
#endif #endif

View File

@ -85,7 +85,8 @@ asm( \
"addl %%eax,%0 \n\t" \ "addl %%eax,%0 \n\t" \
"adcl %%edx,%1 \n\t" \ "adcl %%edx,%1 \n\t" \
"adcl $0,%2 \n\t" \ "adcl $0,%2 \n\t" \
:"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i), "m"(j) :"%eax","%edx","%cc"); :"=rm"(c0), "=rm"(c1), "=rm"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i), "m"(j) :"%eax","%edx","%cc");
//bbox: ^^^ replaced "=r" with "=rm": %ebx is not available on shared build
/******************************************************************************/ /******************************************************************************/
#elif defined(PSTM_X86_64) #elif defined(PSTM_X86_64)

View File

@ -78,7 +78,8 @@ asm( \
"addl %%eax,%0 \n\t" \ "addl %%eax,%0 \n\t" \
"adcl %%edx,%1 \n\t" \ "adcl %%edx,%1 \n\t" \
"adcl $0,%2 \n\t" \ "adcl $0,%2 \n\t" \
:"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i) :"%eax","%edx","%cc"); :"=rm"(c0), "=rm"(c1), "=rm"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i) :"%eax","%edx","%cc");
//bbox: ^^^ replaced "=r" with "=rm": %ebx is not available on shared build
#define SQRADD2(i, j) \ #define SQRADD2(i, j) \
asm( \ asm( \
@ -90,7 +91,8 @@ asm( \
"addl %%eax,%0 \n\t" \ "addl %%eax,%0 \n\t" \
"adcl %%edx,%1 \n\t" \ "adcl %%edx,%1 \n\t" \
"adcl $0,%2 \n\t" \ "adcl $0,%2 \n\t" \
:"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i), "m"(j) :"%eax","%edx","%cc"); :"=rm"(c0), "=rm"(c1), "=rm"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i), "m"(j) :"%eax","%edx","%cc");
//bbox: ^^^ replaced "=r" with "=rm": %ebx is not available on shared build
#define SQRADDSC(i, j) \ #define SQRADDSC(i, j) \
asm( \ asm( \