Changeset View
Changeset View
Standalone View
Standalone View
src/secp256k1/src/scalar_4x64_impl.h
Show First 20 Lines • Show All 370 Lines • ▼ Show 20 Lines | #ifdef USE_ASM_X86_64 | ||||
/* (r10,r8) += n3 */ | /* (r10,r8) += n3 */ | ||||
"addq %%r14, %%r10\n" | "addq %%r14, %%r10\n" | ||||
"adcq $0, %%r8\n" | "adcq $0, %%r8\n" | ||||
/* extract m5 */ | /* extract m5 */ | ||||
"movq %%r10, %q5\n" | "movq %%r10, %q5\n" | ||||
/* 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. */ | ||||
__asm__ __volatile__( | __asm__ __volatile__( | ||||
/* Preload */ | /* Preload */ | ||||
"movq %q9, %%r11\n" | "movq %q9, %%r11\n" | ||||
"movq %q10, %%r12\n" | "movq %q10, %%r12\n" | ||||
"movq %q11, %%r13\n" | "movq %q11, %%r13\n" | ||||
▲ Show 20 Lines • Show All 62 Lines • ▼ Show 20 Lines | #ifdef USE_ASM_X86_64 | ||||
"adcq $0, %%r9\n" | "adcq $0, %%r9\n" | ||||
/* extract p3 */ | /* extract p3 */ | ||||
"movq %%r8, %q3\n" | "movq %%r8, %q3\n" | ||||
/* (r9) += m6 */ | /* (r9) += m6 */ | ||||
"addq %%r13, %%r9\n" | "addq %%r13, %%r9\n" | ||||
/* 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. */ | ||||
__asm__ __volatile__( | __asm__ __volatile__( | ||||
/* Preload */ | /* Preload */ | ||||
"movq %q5, %%r10\n" | "movq %q5, %%r10\n" | ||||
/* (rax,rdx) = p4 * c0 */ | /* (rax,rdx) = p4 * c0 */ | ||||
"movq %7, %%rax\n" | "movq %7, %%rax\n" | ||||
Show All 29 Lines | #ifdef USE_ASM_X86_64 | ||||
/* (r8,r9) += p3 */ | /* (r8,r9) += p3 */ | ||||
"addq %q4, %%r8\n" | "addq %q4, %%r8\n" | ||||
"adcq $0, %%r9\n" | "adcq $0, %%r9\n" | ||||
/* Extract r3 */ | /* Extract r3 */ | ||||
"movq %%r8, 24(%q6)\n" | "movq %%r8, 24(%q6)\n" | ||||
/* 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; | ||||
uint64_t c0, c1, c2; | uint64_t c0, c1, c2; | ||||
uint64_t n0 = l[4], n1 = l[5], n2 = l[6], n3 = l[7]; | uint64_t n0 = l[4], n1 = l[5], n2 = l[6], n3 = l[7]; | ||||
uint64_t m0, m1, m2, m3, m4, m5; | uint64_t m0, m1, m2, m3, m4, m5; | ||||
uint32_t m6; | uint32_t m6; | ||||
uint64_t p0, p1, p2, p3; | uint64_t p0, p1, p2, p3; | ||||
▲ Show 20 Lines • Show All 437 Lines • Show Last 20 Lines |