File tree 1 file changed +7
-4
lines changed
1 file changed +7
-4
lines changed Original file line number Diff line number Diff line change @@ -32,12 +32,15 @@ auto _Karatsuba(ap_uint<bits> const &a, ap_uint<bits> const &b) ->
32
32
bool a0a1b0b1_is_neg = a0a1_is_neg != b0b1_is_neg;
33
33
// Recurse on |a_0 - a_1| * |b_0 - b_1|
34
34
Full a0a1b0b1 = _Karatsuba<bits / 2 >(a0a1, b0b1);
35
- ap_int<bits + 2 > a0a1b0b1_signed = a0a1b0b1_is_neg ? -ap_int<bits + 1 >(a0a1b0b1) : ap_int<bits + 2 >(a0a1b0b1);
36
- ap_uint<bits + 2 > z1 = PipelinedAdd<bits + 2 >(ap_uint<bits + 2 >(a0a1b0b1_signed), PipelinedAdd<bits>(z0, z2));
35
+ ap_int<bits + 1 > a0a1b0b1_signed = a0a1b0b1_is_neg ? -ap_int<bits + 1 >(a0a1b0b1) : ap_int<bits + 2 >(a0a1b0b1);
36
+ ap_uint<bits + 1 > z1 = PipelinedAdd<bits + 1 >(ap_uint<bits + 1 >(a0a1b0b1_signed), PipelinedAdd<bits>(z0, z2));
37
37
38
38
// Align everything and combine
39
- ap_uint<(2 * bits)> z0z2 = z0 | (ap_uint<(2 * bits)>(z2) << bits);
40
- ap_uint<(bits + 2 + bits / 2 )> z1_aligned = ap_uint<(bits + 2 + bits / 2 )>(z1) << (bits / 2 );
39
+ ap_uint<(2 * bits)> z0z2;
40
+ z0z2.range (bits - 1 , 0 ) = z0;
41
+ z0z2.range (2 * bits - 1 , bits) = z2;
42
+ ap_uint<(bits + 1 + bits / 2 )> z1_aligned (0 );
43
+ z1_aligned.range (bits / 2 + bits, bits / 2 ) = z1;
41
44
ap_uint<(2 * bits) + 1 > z = PipelinedAdd<2 * bits>(z1_aligned, z0z2);
42
45
43
46
return z;
You can’t perform that action at this time.
0 commit comments