+#if defined(NIST_INT64)
+ {
+ NIST_INT64 r;
+ unsigned int *rp=(unsigned int *)r_d;
+ const unsigned int *bp=(const unsigned int *)buf;
+
+ r = rp[0]; r += bp[12-12];
+ r += bp[21-12];
+ r += bp[20-12];
+ r -= bp[23-12]; rp[0] = (unsigned int)r; r >>= 32;
+
+ r += rp[1]; r += bp[13-12];
+ r += bp[22-12];
+ r += bp[23-12];
+ r -= bp[12-12];
+ r -= bp[20-12]; rp[1] = (unsigned int)r; r >>= 32;
+
+ r += rp[2]; r += bp[14-12];
+ r += bp[23-12];
+ r -= bp[13-12];
+ r -= bp[21-12]; rp[2] = (unsigned int)r; r >>= 32;
+
+ r += rp[3]; r += bp[15-12];
+ r += bp[12-12];
+ r += bp[20-12];
+ r += bp[21-12];
+ r -= bp[14-12];
+ r -= bp[22-12];
+ r -= bp[23-12]; rp[3] = (unsigned int)r; r >>= 32;
+
+ r += rp[4]; r += bp[21-12];
+ r += bp[21-12];
+ r += bp[16-12];
+ r += bp[13-12];
+ r += bp[12-12];
+ r += bp[20-12];
+ r += bp[22-12];
+ r -= bp[15-12];
+ r -= bp[23-12];
+ r -= bp[23-12]; rp[4] = (unsigned int)r; r >>= 32;
+
+ r += rp[5]; r += bp[22-12];
+ r += bp[22-12];
+ r += bp[17-12];
+ r += bp[14-12];
+ r += bp[13-12];
+ r += bp[21-12];
+ r += bp[23-12];
+ r -= bp[16-12]; rp[5] = (unsigned int)r; r >>= 32;
+
+ r += rp[6]; r += bp[23-12];
+ r += bp[23-12];
+ r += bp[18-12];
+ r += bp[15-12];
+ r += bp[14-12];
+ r += bp[22-12];
+ r -= bp[17-12]; rp[6] = (unsigned int)r; r >>= 32;
+
+ r += rp[7]; r += bp[19-12];
+ r += bp[16-12];
+ r += bp[15-12];
+ r += bp[23-12];
+ r -= bp[18-12]; rp[7] = (unsigned int)r; r >>= 32;
+
+ r += rp[8]; r += bp[20-12];
+ r += bp[17-12];
+ r += bp[16-12];
+ r -= bp[19-12]; rp[8] = (unsigned int)r; r >>= 32;
+
+ r += rp[9]; r += bp[21-12];
+ r += bp[18-12];
+ r += bp[17-12];
+ r -= bp[20-12]; rp[9] = (unsigned int)r; r >>= 32;
+
+ r += rp[10]; r += bp[22-12];
+ r += bp[19-12];
+ r += bp[18-12];
+ r -= bp[21-12]; rp[10] = (unsigned int)r; r >>= 32;
+
+ r += rp[11]; r += bp[23-12];
+ r += bp[20-12];
+ r += bp[19-12];
+ r -= bp[22-12]; rp[11] = (unsigned int)r;
+
+ carry = (int)(r>>32);
+ }
+#else
+ {
+ BN_ULONG t_d[BN_NIST_384_TOP];
+