Line 40... |
Line 40... |
unsigned char gfmult_hw(unsigned char a, unsigned char b)
|
unsigned char gfmult_hw(unsigned char a, unsigned char b)
|
{
|
{
|
|
|
unsigned int temp = 0;
|
unsigned int temp = 0;
|
|
|
#pragma unroll yes
|
// Directive: Unroll loop maximally
|
for (int i = 0; i < 8; i++)
|
for (int i = 0; i < 8; i++)
|
if (b & (1 << i))
|
if (b & (1 << i))
|
temp ^= (unsigned int)(a << i);
|
temp ^= (unsigned int)(a << i);
|
|
|
#pragma unroll yes
|
// Directive: Unroll loop maximally
|
for (int k = 15; k > 7; k--)
|
for (int k = 15; k > 7; k--)
|
if (temp & (1 << k))
|
if (temp & (1 << k))
|
temp ^= (unsigned int)(pp_char << (k - 8));
|
temp ^= (unsigned int)(pp_char << (k - 8));
|
|
|
return (temp & 255);
|
return (temp & 255);
|
Line 378... |
Line 378... |
|
|
unsigned char alphainv_lut (unsigned char n)
|
unsigned char alphainv_lut (unsigned char n)
|
{
|
{
|
if (n == 0)
|
if (n == 0)
|
return 1;
|
return 1;
|
// unsigned char a = 2;
|
|
// for (int i = 1; i < n; ++ i)
|
|
// a = gfmult_hw (a, 2);
|
|
|
|
// return gfinv_lut( a );
|
|
return gfinv_lut( alpha (n) );
|
return gfinv_lut( alpha (n) );
|
}
|
}
|
|
|
unsigned char gfdiv_lut (unsigned char dividend, unsigned char divisor)
|
unsigned char gfdiv_lut (unsigned char dividend, unsigned char divisor)
|
{
|
{
|
Line 396... |
Line 391... |
|
|
|
|
// Assumption: First bit of Lambda (alpha**0) is not transmitted
|
// Assumption: First bit of Lambda (alpha**0) is not transmitted
|
void compute_deriv (unsigned char lambda[tt], unsigned char lambda_deriv[tt])
|
void compute_deriv (unsigned char lambda[tt], unsigned char lambda_deriv[tt])
|
{
|
{
|
#pragma unroll true
|
// Directive: Unroll loop maximally
|
for (int i = 0; i < tt; i++)
|
for (int i = 0; i < tt; i++)
|
lambda_deriv[i] = (i % 2 == 0) ? lambda[i] : 0;
|
lambda_deriv[i] = (i % 2 == 0) ? lambda[i] : 0;
|
}
|
}
|
|
|
|
|
unsigned char poly_eval (unsigned char poly[tt], unsigned char alpha_inv)
|
unsigned char poly_eval (unsigned char poly[tt], unsigned char alpha_inv)
|
{
|
{
|
unsigned char val = 0;
|
unsigned char val = 0;
|
|
|
#pragma unroll true
|
// Directive: Unroll loop maximally
|
for (int j = tt-1; j >= 0; j--)
|
for (int j = tt-1; j >= 0; j--)
|
{
|
{
|
val = gfadd_hw(gfmult_hw(val, alpha_inv), poly[j]);
|
val = gfadd_hw(gfmult_hw(val, alpha_inv), poly[j]);
|
}
|
}
|
return val;
|
return val;
|
}
|
}
|
|
|
// int main() {
|
|
// for(int i=0; i<256; i++)
|
|
// cout << "," << (int)gfinv_lut(i) << endl;
|
|
// };
|
|
|
|
No newline at end of file
|
No newline at end of file
|