-
Notifications
You must be signed in to change notification settings - Fork 68
/
Copy pathtfm_private.h
171 lines (155 loc) · 4.7 KB
/
tfm_private.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
/* TomsFastMath, a fast ISO C bignum library. -- Tom St Denis */
/* SPDX-License-Identifier: Unlicense */
#ifndef TFM_PRIVATE_H_
#define TFM_PRIVATE_H_
#include "tfm.h"
/*
* Private symbols
* ---------------
*
* On Unix symbols can be marked as hidden if tomsfastmath is compiled
* as a shared object. By default, symbols are visible.
*/
#if defined(__GNUC__) && __GNUC__ >= 4 && !defined(_WIN32) && !defined(__CYGWIN__)
# define FP_PRIVATE __attribute__ ((visibility ("hidden")))
#else
# define FP_PRIVATE
#endif
/* VARIOUS LOW LEVEL STUFFS */
#ifdef TFM_NO_STDLIB
FP_PRIVATE void fp_memcpy(void *restrict dst, const void *restrict src, size_t n);
FP_PRIVATE void fp_memset(void *restrict dst, unsigned char c, size_t n);
#define toupper(C) __extension__({ \
int _c = (int)(C); \
'a' <= _c && 'z' >= _c ? _c - ((int)'a' - (int)'A') : _c; \
})
#define memcpy(D, S, N) __extension__({ \
uint8_t *_dst = (uint8_t*)(D); \
const uint8_t *_src = (uint8_t*)(S); \
size_t _n = (size_t)(N); \
if (__builtin_constant_p(_n)) { \
for (size_t _i = 0; _i < _n; ++_i) _dst[_i] = _src[_i]; \
} else { \
fp_memcpy(_dst, _src, _n); \
} \
(void *)_dst; \
})
/* The loop increment of 128 bytes was determined experimentally - it results
* in good inline code optimizations in both GCC and clang. */
#define memset(D, C, N) __extension__({ \
uint8_t *_dst = (uint8_t*)(D); \
uint8_t _c = (uint8_t)(C); \
size_t _n = (size_t)(N); \
if (__builtin_constant_p(_n)) { \
size_t _b = _n >> 7, _r = _n & 127; \
for (size_t _i = 0; _i < _b; ++_i) { \
size_t _j = 0; \
for (;_j < 64; ++_j) *_dst++ = 0; \
for (;_j < 128; ++_j) *_dst++ = 0; \
} \
size_t _i = 0; \
if (_r > 0) for (;_i < 64 && _i < _r; ++_i) *_dst++ = _c; \
if (_r > 64) for (;_i < 128 && _i < _r; ++_i) *_dst++ = _c; \
} else { \
fp_memset(_dst, _c, _n); \
} \
(void *)_dst; \
})
#endif
FP_PRIVATE void s_fp_add(fp_int *a, fp_int *b, fp_int *c);
FP_PRIVATE void s_fp_sub(fp_int *a, fp_int *b, fp_int *c);
FP_PRIVATE void fp_reverse(unsigned char *s, int len);
FP_PRIVATE void fp_mul_comba(fp_int *A, fp_int *B, fp_int *C);
#ifdef TFM_SMALL_SET
FP_PRIVATE void fp_mul_comba_small(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL3
FP_PRIVATE void fp_mul_comba3(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL4
FP_PRIVATE void fp_mul_comba4(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL6
FP_PRIVATE void fp_mul_comba6(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL7
FP_PRIVATE void fp_mul_comba7(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL8
FP_PRIVATE void fp_mul_comba8(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL9
FP_PRIVATE void fp_mul_comba9(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL12
FP_PRIVATE void fp_mul_comba12(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL17
FP_PRIVATE void fp_mul_comba17(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL20
FP_PRIVATE void fp_mul_comba20(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL24
FP_PRIVATE void fp_mul_comba24(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL28
FP_PRIVATE void fp_mul_comba28(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL32
FP_PRIVATE void fp_mul_comba32(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL48
FP_PRIVATE void fp_mul_comba48(fp_int *A, fp_int *B, fp_int *C);
#endif
#ifdef TFM_MUL64
FP_PRIVATE void fp_mul_comba64(fp_int *A, fp_int *B, fp_int *C);
#endif
FP_PRIVATE void fp_sqr_comba(fp_int *A, fp_int *B);
#ifdef TFM_SMALL_SET
FP_PRIVATE void fp_sqr_comba_small(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR3
FP_PRIVATE void fp_sqr_comba3(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR4
FP_PRIVATE void fp_sqr_comba4(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR6
FP_PRIVATE void fp_sqr_comba6(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR7
FP_PRIVATE void fp_sqr_comba7(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR8
FP_PRIVATE void fp_sqr_comba8(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR9
FP_PRIVATE void fp_sqr_comba9(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR12
FP_PRIVATE void fp_sqr_comba12(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR17
FP_PRIVATE void fp_sqr_comba17(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR20
FP_PRIVATE void fp_sqr_comba20(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR24
FP_PRIVATE void fp_sqr_comba24(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR28
FP_PRIVATE void fp_sqr_comba28(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR32
FP_PRIVATE void fp_sqr_comba32(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR48
FP_PRIVATE void fp_sqr_comba48(fp_int *A, fp_int *B);
#endif
#ifdef TFM_SQR64
FP_PRIVATE void fp_sqr_comba64(fp_int *A, fp_int *B);
#endif
FP_PRIVATE extern const char *fp_s_rmap;
#endif