Skip to content

Commit 105df2f

Browse files
committed
Trim a few unneeded bits
1 parent bed1c8a commit 105df2f

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

device/Karatsuba.cpp

+7-4
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,15 @@ auto _Karatsuba(ap_uint<bits> const &a, ap_uint<bits> const &b) ->
3232
bool a0a1b0b1_is_neg = a0a1_is_neg != b0b1_is_neg;
3333
// Recurse on |a_0 - a_1| * |b_0 - b_1|
3434
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));
3737

3838
// 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;
4144
ap_uint<(2 * bits) + 1> z = PipelinedAdd<2 * bits>(z1_aligned, z0z2);
4245

4346
return z;

0 commit comments

Comments
 (0)