 |
API参考
|
15#ifndef BN_BINCAL_ARMV8_H
16#define BN_BINCAL_ARMV8_H
18#include "hitls_build.h"
28#define MUL_AB(wh, wl, u, v) \
30 __asm("mul %1, %2, %3 \n\t" \
31 "umulh %0, %2, %3 \n\t" \
32 : "=&r"(wh), "=&r"(wl) \
37#define SQR_A(wh, wl, u) \
39 __asm("mul %1, %2, %2 \n\t" \
40 "umulh %0, %2, %2 \n\t" \
41 : "=&r"(wh), "=&r"(wl) \
47#define DIV_ND(q, r, nh, nl, d) \
49 BN_UINT macroTmpD1, macroTmpD0, macroTmpQ1, macroTmpQ0, macroTmpR1, macroTmpR0, macroTmpM; \
51 macroTmpD1 = BN_UINT_HI(d); \
52 macroTmpD0 = BN_UINT_LO(d); \
54 macroTmpQ1 = (nh) / macroTmpD1; \
55 macroTmpR1 = (nh) - macroTmpQ1 * macroTmpD1; \
56 macroTmpM = macroTmpQ1 * macroTmpD0; \
57 macroTmpR1 = (macroTmpR1 << (BN_UINT_BITS >> 1)) | BN_UINT_HI(nl); \
58 if (macroTmpR1 < macroTmpM) { \
59 macroTmpQ1--, macroTmpR1 += (d); \
60 if (macroTmpR1 >= (d)) { \
61 if (macroTmpR1 < macroTmpM) { \
67 macroTmpR1 -= macroTmpM; \
69 macroTmpQ0 = macroTmpR1 / macroTmpD1; \
70 macroTmpR0 = macroTmpR1 - macroTmpQ0 * macroTmpD1; \
71 macroTmpM = macroTmpQ0 * macroTmpD0; \
72 macroTmpR0 = (macroTmpR0 << (BN_UINT_BITS >> 1)) | BN_UINT_LO(nl); \
73 if (macroTmpR0 < macroTmpM) { \
74 macroTmpQ0--, macroTmpR0 += (d); \
75 if (macroTmpR0 >= (d)) { \
76 if (macroTmpR0 < macroTmpM) { \
82 macroTmpR0 -= macroTmpM; \
84 (q) = (macroTmpQ1 << (BN_UINT_BITS >> 1)) | macroTmpQ0; \
91#define MULADC_AB(r, a, b, carry) \
94 __asm("mul %0, %2, %3 \n\t" \
95 "umulh %1, %2, %3 \n\t" \
96 : "=&r"(lo), "=&r"(hi) \
99 __asm("adds %1, %1, %3 \n\t" \
100 "adc %2, %2, xzr \n\t " \
101 "adds %0, %0, %1 \n\t" \
102 "adc %2, %2, xzr \n\t " \
104 : "+&r"(r), "+&r"(carry), "+&r"(hi) \
110#define MULADD_AB(h, m, l, u, v) \
113 __asm("mul %0, %2, %3 \n\t" \
114 "umulh %1, %2, %3 \n\t" \
115 : "=&r"(lo), "=&r"(hi) \
118 __asm("adds %0, %0, %3 \n\t " \
119 "adcs %1, %1, %4 \n\t " \
120 "adc %2, %2, xzr \n\t " \
121 : "+&r"(l), "+&r"(m), "+&r"(h) \
127#define MULADD_AB2(h, m, l, u, v) \
130 __asm("mul %0, %2, %3 \n\t" \
131 "umulh %1, %2, %3 \n\t" \
132 : "=&r"(lo), "=&r"(hi) \
135 __asm("adds %0, %0, %3 \n\t " \
136 "adcs %1, %1, %4 \n\t " \
137 "adc %2, %2, xzr \n\t " \
138 "adds %0, %0, %3 \n\t " \
139 "adcs %1, %1, %4 \n\t " \
140 "adc %2, %2, xzr \n\t " \
141 : "+&r"(l), "+&r"(m), "+&r"(h) \
147#define SQRADD_A(h, m, l, u) MULADD_AB(h, m, l, u, u)
150#define MOD_HALF(r, nh, nl, d) \
152 BN_UINT macroTmpD = (d); \
153 (r) = (nh) % macroTmpD; \
154 (r) = ((r) << BN_UINT_HALF_BITS) | BN_UINT_HI((nl)); \
155 (r) = (r) % macroTmpD; \
156 (r) = ((r) << BN_UINT_HALF_BITS) | BN_UINT_LO((nl)); \
157 (r) = (r) % macroTmpD; \
- crypto
- bn
- src
- bn_bincal_armv8.h