[git commit] tls: fix pstm asm constraint problem

Denys Vlasenko vda.linux at googlemail.com
Sat Jul 15 15:13:08 UTC 2017


commit: https://git.busybox.net/busybox/commit/?id=79376ecdbd2fff83795dfcbddf5a0cc5eed3adf9
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

function                                             old     new   delta
pstm_sqr_comba                                       551     475     -76

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 networking/tls.h                | 4 +---
 networking/tls_pstm_mul_comba.c | 3 ++-
 networking/tls_pstm_sqr_comba.c | 6 ++++--
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/networking/tls.h b/networking/tls.h
index b80cc64..d487f38 100644
--- a/networking/tls.h
+++ b/networking/tls.h
@@ -26,10 +26,8 @@
 #undef  USE_SEED
 /* pstm: multiprecision numbers */
 #undef  DISABLE_PSTM
-#if defined(__GNUC__) && defined(__i386__) && ENABLE_STATIC
+#if defined(__GNUC__) && defined(__i386__)
   /* 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_X86
 #endif
diff --git a/networking/tls_pstm_mul_comba.c b/networking/tls_pstm_mul_comba.c
index 47cbb96..845ab95 100644
--- a/networking/tls_pstm_mul_comba.c
+++ b/networking/tls_pstm_mul_comba.c
@@ -85,7 +85,8 @@ asm(                                                      \
 	 "addl  %%eax,%0     \n\t"                            \
 	 "adcl  %%edx,%1     \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)
diff --git a/networking/tls_pstm_sqr_comba.c b/networking/tls_pstm_sqr_comba.c
index 36cb9ea..4fcfcf9 100644
--- a/networking/tls_pstm_sqr_comba.c
+++ b/networking/tls_pstm_sqr_comba.c
@@ -78,7 +78,8 @@ asm(                                            \
 	 "addl  %%eax,%0     \n\t"                            \
 	 "adcl  %%edx,%1     \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)                                     \
 asm(                                            \
@@ -90,7 +91,8 @@ asm(                                            \
 	 "addl  %%eax,%0     \n\t"                            \
 	 "adcl  %%edx,%1     \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)                                    \
 asm(                                                     \


More information about the busybox-cvs mailing list