Switch x86_64 asm to use "i" instead of "n" for immediate values.
The constraint "n" is a more obscure setting which is needed for special cases that don't apply to our use. Use of "n" exposed some bugs in pre-release versions of clang. This fixes #594
This commit is contained in:
parent
05362ee042
commit
d58bc93f2c
|
@ -376,7 +376,7 @@ static void secp256k1_scalar_reduce_512(secp256k1_scalar *r, const uint64_t *l)
|
||||||
/* extract m6 */
|
/* extract m6 */
|
||||||
"movq %%r8, %q6\n"
|
"movq %%r8, %q6\n"
|
||||||
: "=g"(m0), "=g"(m1), "=g"(m2), "=g"(m3), "=g"(m4), "=g"(m5), "=g"(m6)
|
: "=g"(m0), "=g"(m1), "=g"(m2), "=g"(m3), "=g"(m4), "=g"(m5), "=g"(m6)
|
||||||
: "S"(l), "n"(SECP256K1_N_C_0), "n"(SECP256K1_N_C_1)
|
: "S"(l), "i"(SECP256K1_N_C_0), "i"(SECP256K1_N_C_1)
|
||||||
: "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "cc");
|
: "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "cc");
|
||||||
|
|
||||||
/* Reduce 385 bits into 258. */
|
/* Reduce 385 bits into 258. */
|
||||||
|
@ -455,7 +455,7 @@ static void secp256k1_scalar_reduce_512(secp256k1_scalar *r, const uint64_t *l)
|
||||||
/* extract p4 */
|
/* extract p4 */
|
||||||
"movq %%r9, %q4\n"
|
"movq %%r9, %q4\n"
|
||||||
: "=&g"(p0), "=&g"(p1), "=&g"(p2), "=g"(p3), "=g"(p4)
|
: "=&g"(p0), "=&g"(p1), "=&g"(p2), "=g"(p3), "=g"(p4)
|
||||||
: "g"(m0), "g"(m1), "g"(m2), "g"(m3), "g"(m4), "g"(m5), "g"(m6), "n"(SECP256K1_N_C_0), "n"(SECP256K1_N_C_1)
|
: "g"(m0), "g"(m1), "g"(m2), "g"(m3), "g"(m4), "g"(m5), "g"(m6), "i"(SECP256K1_N_C_0), "i"(SECP256K1_N_C_1)
|
||||||
: "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "cc");
|
: "rax", "rdx", "r8", "r9", "r10", "r11", "r12", "r13", "cc");
|
||||||
|
|
||||||
/* Reduce 258 bits into 256. */
|
/* Reduce 258 bits into 256. */
|
||||||
|
@ -501,7 +501,7 @@ static void secp256k1_scalar_reduce_512(secp256k1_scalar *r, const uint64_t *l)
|
||||||
/* Extract c */
|
/* Extract c */
|
||||||
"movq %%r9, %q0\n"
|
"movq %%r9, %q0\n"
|
||||||
: "=g"(c)
|
: "=g"(c)
|
||||||
: "g"(p0), "g"(p1), "g"(p2), "g"(p3), "g"(p4), "D"(r), "n"(SECP256K1_N_C_0), "n"(SECP256K1_N_C_1)
|
: "g"(p0), "g"(p1), "g"(p2), "g"(p3), "g"(p4), "D"(r), "i"(SECP256K1_N_C_0), "i"(SECP256K1_N_C_1)
|
||||||
: "rax", "rdx", "r8", "r9", "r10", "cc", "memory");
|
: "rax", "rdx", "r8", "r9", "r10", "cc", "memory");
|
||||||
#else
|
#else
|
||||||
uint128_t c;
|
uint128_t c;
|
||||||
|
|
Loading…
Reference in New Issue