|
|
|
@ -282,29 +282,24 @@ static void fill_elements(uint32_t idx, uint32_t shift, int size, uint32_t *e0, |
|
|
|
|
{ |
|
|
|
|
uint32_t b, h = idx << (32 - shift); |
|
|
|
|
|
|
|
|
|
for (int i = 0; i < size; i++) { |
|
|
|
|
b = 4 * (table[2 * i + 1] & 0xF); |
|
|
|
|
if (shift >= b && (h & (0xFFF00000u << (12 - b))) == (table[2 * i + 1] & 0xFFFF0000u)) { |
|
|
|
|
if (table[2 * i] >> 8 == 0x80u) { |
|
|
|
|
return; |
|
|
|
|
} else { |
|
|
|
|
*e1 = table[2 * i]; |
|
|
|
|
*e0 = (*e0 & 0xFFFFFFu) | (((12 + b - shift) & 0xFFFFFFFCu | 0x40u) << 22); |
|
|
|
|
shift -= b; |
|
|
|
|
h <<= b; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (int i = 0; i < size; i++) { |
|
|
|
|
b = 4 * (table[2 * i + 1] & 0xF); |
|
|
|
|
if (shift >= b && (h & (0xFFF00000u << (12 - b))) == (table[2 * i + 1] & 0xFFFF0000u)) { |
|
|
|
|
if (table[2 * i] >> 8 == 0x80u) { |
|
|
|
|
return; |
|
|
|
|
} else { |
|
|
|
|
*e1 |= table[2 * i] << 16; |
|
|
|
|
*e0 = (*e0 & 0xFFFFFFu) | (((12 + b - shift) & 0xFFFFFFFCu | 0x80u) << 22); |
|
|
|
|
break; |
|
|
|
|
for (int j = 0; j < 2; j++) { |
|
|
|
|
for (int i = 0; i < size; i++) { |
|
|
|
|
b = 4 * (table[2 * i + 1] & 0xF); |
|
|
|
|
if (shift >= b && (h & (0xFFF00000u << (12 - b))) == (table[2 * i + 1] & 0xFFFF0000u)) { |
|
|
|
|
if (table[2 * i] >> 8 == 0x80u) { |
|
|
|
|
return; |
|
|
|
|
} else { |
|
|
|
|
if (j == 0) { |
|
|
|
|
*e1 = table[2 * i]; |
|
|
|
|
*e0 = (*e0 & 0xFFFFFFu) | (((12 + b - shift) & 0xFFFFFFFCu | 0x40u) << 22); |
|
|
|
|
shift -= b; |
|
|
|
|
h <<= b; |
|
|
|
|
} else { |
|
|
|
|
*e1 |= table[2 * i] << 16; |
|
|
|
|
*e0 = (*e0 & 0xFFFFFFu) | (((12 + b - shift) & 0xFFFFFFFCu | 0x80u) << 22); |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|