• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import { BitWidth } from './bit-width'
2
3export function toByteWidth(bitWidth: BitWidth): number {
4  return 1 << bitWidth;
5}
6
7export function iwidth(value: number | bigint): BitWidth {
8  if (value >= -128 && value <= 127) return BitWidth.WIDTH8;
9  if (value >= -32768 && value <= 32767) return BitWidth.WIDTH16;
10  if (value >= -2147483648 && value <= 2147483647) return BitWidth.WIDTH32;
11  return BitWidth.WIDTH64;
12}
13
14export function fwidth(value: number): BitWidth {
15  return value === Math.fround(value) ? BitWidth.WIDTH32 : BitWidth.WIDTH64;
16}
17
18export function uwidth(value: number): BitWidth {
19  if (value <= 255) return BitWidth.WIDTH8;
20  if (value <= 65535) return BitWidth.WIDTH16;
21  if (value <= 4294967295) return BitWidth.WIDTH32;
22  return BitWidth.WIDTH64;
23}
24
25export function fromByteWidth(value: number): BitWidth {
26  if (value === 1) return BitWidth.WIDTH8;
27  if (value === 2) return BitWidth.WIDTH16;
28  if (value === 4) return BitWidth.WIDTH32;
29  return BitWidth.WIDTH64;
30}
31
32export function paddingSize(bufSize: number, scalarSize: number): number {
33  return (~bufSize + 1) & (scalarSize - 1);
34}