Mercurial > dropbear
comparison tomsfastmath/src/mul/fp_mul_comba_17.c @ 643:a362b62d38b2 dropbear-tfm
Add tomsfastmath from git rev bfa4582842bc3bab42e4be4aed5703437049502a
with Makefile.in renamed
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Wed, 23 Nov 2011 18:10:20 +0700 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
642:33fd2f3499d2 | 643:a362b62d38b2 |
---|---|
1 #define TFM_DEFINES | |
2 #include "fp_mul_comba.c" | |
3 | |
4 #ifdef TFM_MUL17 | |
5 void fp_mul_comba17(fp_int *A, fp_int *B, fp_int *C) | |
6 { | |
7 fp_digit c0, c1, c2, at[34]; | |
8 | |
9 memcpy(at, A->dp, 17 * sizeof(fp_digit)); | |
10 memcpy(at+17, B->dp, 17 * sizeof(fp_digit)); | |
11 COMBA_START; | |
12 | |
13 COMBA_CLEAR; | |
14 /* 0 */ | |
15 MULADD(at[0], at[17]); | |
16 COMBA_STORE(C->dp[0]); | |
17 /* 1 */ | |
18 COMBA_FORWARD; | |
19 MULADD(at[0], at[18]); MULADD(at[1], at[17]); | |
20 COMBA_STORE(C->dp[1]); | |
21 /* 2 */ | |
22 COMBA_FORWARD; | |
23 MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); | |
24 COMBA_STORE(C->dp[2]); | |
25 /* 3 */ | |
26 COMBA_FORWARD; | |
27 MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); | |
28 COMBA_STORE(C->dp[3]); | |
29 /* 4 */ | |
30 COMBA_FORWARD; | |
31 MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); | |
32 COMBA_STORE(C->dp[4]); | |
33 /* 5 */ | |
34 COMBA_FORWARD; | |
35 MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); | |
36 COMBA_STORE(C->dp[5]); | |
37 /* 6 */ | |
38 COMBA_FORWARD; | |
39 MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); | |
40 COMBA_STORE(C->dp[6]); | |
41 /* 7 */ | |
42 COMBA_FORWARD; | |
43 MULADD(at[0], at[24]); MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); | |
44 COMBA_STORE(C->dp[7]); | |
45 /* 8 */ | |
46 COMBA_FORWARD; | |
47 MULADD(at[0], at[25]); MULADD(at[1], at[24]); MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); | |
48 COMBA_STORE(C->dp[8]); | |
49 /* 9 */ | |
50 COMBA_FORWARD; | |
51 MULADD(at[0], at[26]); MULADD(at[1], at[25]); MULADD(at[2], at[24]); MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); | |
52 COMBA_STORE(C->dp[9]); | |
53 /* 10 */ | |
54 COMBA_FORWARD; | |
55 MULADD(at[0], at[27]); MULADD(at[1], at[26]); MULADD(at[2], at[25]); MULADD(at[3], at[24]); MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); | |
56 COMBA_STORE(C->dp[10]); | |
57 /* 11 */ | |
58 COMBA_FORWARD; | |
59 MULADD(at[0], at[28]); MULADD(at[1], at[27]); MULADD(at[2], at[26]); MULADD(at[3], at[25]); MULADD(at[4], at[24]); MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]); | |
60 COMBA_STORE(C->dp[11]); | |
61 /* 12 */ | |
62 COMBA_FORWARD; | |
63 MULADD(at[0], at[29]); MULADD(at[1], at[28]); MULADD(at[2], at[27]); MULADD(at[3], at[26]); MULADD(at[4], at[25]); MULADD(at[5], at[24]); MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]); MULADD(at[12], at[17]); | |
64 COMBA_STORE(C->dp[12]); | |
65 /* 13 */ | |
66 COMBA_FORWARD; | |
67 MULADD(at[0], at[30]); MULADD(at[1], at[29]); MULADD(at[2], at[28]); MULADD(at[3], at[27]); MULADD(at[4], at[26]); MULADD(at[5], at[25]); MULADD(at[6], at[24]); MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]); MULADD(at[12], at[18]); MULADD(at[13], at[17]); | |
68 COMBA_STORE(C->dp[13]); | |
69 /* 14 */ | |
70 COMBA_FORWARD; | |
71 MULADD(at[0], at[31]); MULADD(at[1], at[30]); MULADD(at[2], at[29]); MULADD(at[3], at[28]); MULADD(at[4], at[27]); MULADD(at[5], at[26]); MULADD(at[6], at[25]); MULADD(at[7], at[24]); MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); MULADD(at[12], at[19]); MULADD(at[13], at[18]); MULADD(at[14], at[17]); | |
72 COMBA_STORE(C->dp[14]); | |
73 /* 15 */ | |
74 COMBA_FORWARD; | |
75 MULADD(at[0], at[32]); MULADD(at[1], at[31]); MULADD(at[2], at[30]); MULADD(at[3], at[29]); MULADD(at[4], at[28]); MULADD(at[5], at[27]); MULADD(at[6], at[26]); MULADD(at[7], at[25]); MULADD(at[8], at[24]); MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); MULADD(at[12], at[20]); MULADD(at[13], at[19]); MULADD(at[14], at[18]); MULADD(at[15], at[17]); | |
76 COMBA_STORE(C->dp[15]); | |
77 /* 16 */ | |
78 COMBA_FORWARD; | |
79 MULADD(at[0], at[33]); MULADD(at[1], at[32]); MULADD(at[2], at[31]); MULADD(at[3], at[30]); MULADD(at[4], at[29]); MULADD(at[5], at[28]); MULADD(at[6], at[27]); MULADD(at[7], at[26]); MULADD(at[8], at[25]); MULADD(at[9], at[24]); MULADD(at[10], at[23]); MULADD(at[11], at[22]); MULADD(at[12], at[21]); MULADD(at[13], at[20]); MULADD(at[14], at[19]); MULADD(at[15], at[18]); MULADD(at[16], at[17]); | |
80 COMBA_STORE(C->dp[16]); | |
81 /* 17 */ | |
82 COMBA_FORWARD; | |
83 MULADD(at[1], at[33]); MULADD(at[2], at[32]); MULADD(at[3], at[31]); MULADD(at[4], at[30]); MULADD(at[5], at[29]); MULADD(at[6], at[28]); MULADD(at[7], at[27]); MULADD(at[8], at[26]); MULADD(at[9], at[25]); MULADD(at[10], at[24]); MULADD(at[11], at[23]); MULADD(at[12], at[22]); MULADD(at[13], at[21]); MULADD(at[14], at[20]); MULADD(at[15], at[19]); MULADD(at[16], at[18]); | |
84 COMBA_STORE(C->dp[17]); | |
85 /* 18 */ | |
86 COMBA_FORWARD; | |
87 MULADD(at[2], at[33]); MULADD(at[3], at[32]); MULADD(at[4], at[31]); MULADD(at[5], at[30]); MULADD(at[6], at[29]); MULADD(at[7], at[28]); MULADD(at[8], at[27]); MULADD(at[9], at[26]); MULADD(at[10], at[25]); MULADD(at[11], at[24]); MULADD(at[12], at[23]); MULADD(at[13], at[22]); MULADD(at[14], at[21]); MULADD(at[15], at[20]); MULADD(at[16], at[19]); | |
88 COMBA_STORE(C->dp[18]); | |
89 /* 19 */ | |
90 COMBA_FORWARD; | |
91 MULADD(at[3], at[33]); MULADD(at[4], at[32]); MULADD(at[5], at[31]); MULADD(at[6], at[30]); MULADD(at[7], at[29]); MULADD(at[8], at[28]); MULADD(at[9], at[27]); MULADD(at[10], at[26]); MULADD(at[11], at[25]); MULADD(at[12], at[24]); MULADD(at[13], at[23]); MULADD(at[14], at[22]); MULADD(at[15], at[21]); MULADD(at[16], at[20]); | |
92 COMBA_STORE(C->dp[19]); | |
93 /* 20 */ | |
94 COMBA_FORWARD; | |
95 MULADD(at[4], at[33]); MULADD(at[5], at[32]); MULADD(at[6], at[31]); MULADD(at[7], at[30]); MULADD(at[8], at[29]); MULADD(at[9], at[28]); MULADD(at[10], at[27]); MULADD(at[11], at[26]); MULADD(at[12], at[25]); MULADD(at[13], at[24]); MULADD(at[14], at[23]); MULADD(at[15], at[22]); MULADD(at[16], at[21]); | |
96 COMBA_STORE(C->dp[20]); | |
97 /* 21 */ | |
98 COMBA_FORWARD; | |
99 MULADD(at[5], at[33]); MULADD(at[6], at[32]); MULADD(at[7], at[31]); MULADD(at[8], at[30]); MULADD(at[9], at[29]); MULADD(at[10], at[28]); MULADD(at[11], at[27]); MULADD(at[12], at[26]); MULADD(at[13], at[25]); MULADD(at[14], at[24]); MULADD(at[15], at[23]); MULADD(at[16], at[22]); | |
100 COMBA_STORE(C->dp[21]); | |
101 /* 22 */ | |
102 COMBA_FORWARD; | |
103 MULADD(at[6], at[33]); MULADD(at[7], at[32]); MULADD(at[8], at[31]); MULADD(at[9], at[30]); MULADD(at[10], at[29]); MULADD(at[11], at[28]); MULADD(at[12], at[27]); MULADD(at[13], at[26]); MULADD(at[14], at[25]); MULADD(at[15], at[24]); MULADD(at[16], at[23]); | |
104 COMBA_STORE(C->dp[22]); | |
105 /* 23 */ | |
106 COMBA_FORWARD; | |
107 MULADD(at[7], at[33]); MULADD(at[8], at[32]); MULADD(at[9], at[31]); MULADD(at[10], at[30]); MULADD(at[11], at[29]); MULADD(at[12], at[28]); MULADD(at[13], at[27]); MULADD(at[14], at[26]); MULADD(at[15], at[25]); MULADD(at[16], at[24]); | |
108 COMBA_STORE(C->dp[23]); | |
109 /* 24 */ | |
110 COMBA_FORWARD; | |
111 MULADD(at[8], at[33]); MULADD(at[9], at[32]); MULADD(at[10], at[31]); MULADD(at[11], at[30]); MULADD(at[12], at[29]); MULADD(at[13], at[28]); MULADD(at[14], at[27]); MULADD(at[15], at[26]); MULADD(at[16], at[25]); | |
112 COMBA_STORE(C->dp[24]); | |
113 /* 25 */ | |
114 COMBA_FORWARD; | |
115 MULADD(at[9], at[33]); MULADD(at[10], at[32]); MULADD(at[11], at[31]); MULADD(at[12], at[30]); MULADD(at[13], at[29]); MULADD(at[14], at[28]); MULADD(at[15], at[27]); MULADD(at[16], at[26]); | |
116 COMBA_STORE(C->dp[25]); | |
117 /* 26 */ | |
118 COMBA_FORWARD; | |
119 MULADD(at[10], at[33]); MULADD(at[11], at[32]); MULADD(at[12], at[31]); MULADD(at[13], at[30]); MULADD(at[14], at[29]); MULADD(at[15], at[28]); MULADD(at[16], at[27]); | |
120 COMBA_STORE(C->dp[26]); | |
121 /* 27 */ | |
122 COMBA_FORWARD; | |
123 MULADD(at[11], at[33]); MULADD(at[12], at[32]); MULADD(at[13], at[31]); MULADD(at[14], at[30]); MULADD(at[15], at[29]); MULADD(at[16], at[28]); | |
124 COMBA_STORE(C->dp[27]); | |
125 /* 28 */ | |
126 COMBA_FORWARD; | |
127 MULADD(at[12], at[33]); MULADD(at[13], at[32]); MULADD(at[14], at[31]); MULADD(at[15], at[30]); MULADD(at[16], at[29]); | |
128 COMBA_STORE(C->dp[28]); | |
129 /* 29 */ | |
130 COMBA_FORWARD; | |
131 MULADD(at[13], at[33]); MULADD(at[14], at[32]); MULADD(at[15], at[31]); MULADD(at[16], at[30]); | |
132 COMBA_STORE(C->dp[29]); | |
133 /* 30 */ | |
134 COMBA_FORWARD; | |
135 MULADD(at[14], at[33]); MULADD(at[15], at[32]); MULADD(at[16], at[31]); | |
136 COMBA_STORE(C->dp[30]); | |
137 /* 31 */ | |
138 COMBA_FORWARD; | |
139 MULADD(at[15], at[33]); MULADD(at[16], at[32]); | |
140 COMBA_STORE(C->dp[31]); | |
141 /* 32 */ | |
142 COMBA_FORWARD; | |
143 MULADD(at[16], at[33]); | |
144 COMBA_STORE(C->dp[32]); | |
145 COMBA_STORE2(C->dp[33]); | |
146 C->used = 34; | |
147 C->sign = A->sign ^ B->sign; | |
148 fp_clamp(C); | |
149 COMBA_FINI; | |
150 } | |
151 #endif |