xref: /aosp_15_r20/external/pytorch/c10/util/bits.h (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker #pragma once
2*da0073e9SAndroid Build Coastguard Worker #include <cstdint>
3*da0073e9SAndroid Build Coastguard Worker 
4*da0073e9SAndroid Build Coastguard Worker #include <c10/macros/Macros.h>
5*da0073e9SAndroid Build Coastguard Worker 
6*da0073e9SAndroid Build Coastguard Worker namespace c10 {
7*da0073e9SAndroid Build Coastguard Worker 
8*da0073e9SAndroid Build Coastguard Worker /**
9*da0073e9SAndroid Build Coastguard Worker  * bits1x8 is an uninterpreted dtype of a tensor with 1 bit (packed to byte
10*da0073e9SAndroid Build Coastguard Worker  * boundary), without any semantics defined.
11*da0073e9SAndroid Build Coastguard Worker  */
12*da0073e9SAndroid Build Coastguard Worker struct alignas(1) bits1x8 {
13*da0073e9SAndroid Build Coastguard Worker   using underlying = uint8_t;
14*da0073e9SAndroid Build Coastguard Worker   uint8_t val_;
15*da0073e9SAndroid Build Coastguard Worker   bits1x8() = default;
bits1x8bits1x816*da0073e9SAndroid Build Coastguard Worker   C10_HOST_DEVICE explicit bits1x8(uint8_t val) : val_(val) {}
17*da0073e9SAndroid Build Coastguard Worker };
18*da0073e9SAndroid Build Coastguard Worker 
19*da0073e9SAndroid Build Coastguard Worker /**
20*da0073e9SAndroid Build Coastguard Worker  * bits2x4 is an uninterpreted dtype of a tensor with 2 bits (packed to byte
21*da0073e9SAndroid Build Coastguard Worker  * boundary), without any semantics defined.
22*da0073e9SAndroid Build Coastguard Worker  */
23*da0073e9SAndroid Build Coastguard Worker struct alignas(1) bits2x4 {
24*da0073e9SAndroid Build Coastguard Worker   using underlying = uint8_t;
25*da0073e9SAndroid Build Coastguard Worker   uint8_t val_;
26*da0073e9SAndroid Build Coastguard Worker   bits2x4() = default;
bits2x4bits2x427*da0073e9SAndroid Build Coastguard Worker   C10_HOST_DEVICE explicit bits2x4(uint8_t val) : val_(val) {}
28*da0073e9SAndroid Build Coastguard Worker };
29*da0073e9SAndroid Build Coastguard Worker 
30*da0073e9SAndroid Build Coastguard Worker /**
31*da0073e9SAndroid Build Coastguard Worker  * bits4x2 is an uninterpreted dtype of a tensor with 4 bits (packed to byte
32*da0073e9SAndroid Build Coastguard Worker  * boundary), without any semantics defined.
33*da0073e9SAndroid Build Coastguard Worker  */
34*da0073e9SAndroid Build Coastguard Worker struct alignas(1) bits4x2 {
35*da0073e9SAndroid Build Coastguard Worker   using underlying = uint8_t;
36*da0073e9SAndroid Build Coastguard Worker   uint8_t val_;
37*da0073e9SAndroid Build Coastguard Worker   bits4x2() = default;
bits4x2bits4x238*da0073e9SAndroid Build Coastguard Worker   C10_HOST_DEVICE explicit bits4x2(uint8_t val) : val_(val) {}
39*da0073e9SAndroid Build Coastguard Worker };
40*da0073e9SAndroid Build Coastguard Worker 
41*da0073e9SAndroid Build Coastguard Worker /**
42*da0073e9SAndroid Build Coastguard Worker  * bits8 is an uninterpreted dtype of a tensor with 8 bits, without any
43*da0073e9SAndroid Build Coastguard Worker  * semantics defined.
44*da0073e9SAndroid Build Coastguard Worker  */
45*da0073e9SAndroid Build Coastguard Worker struct alignas(1) bits8 {
46*da0073e9SAndroid Build Coastguard Worker   uint8_t val_;
47*da0073e9SAndroid Build Coastguard Worker   bits8() = default;
bits8bits848*da0073e9SAndroid Build Coastguard Worker   C10_HOST_DEVICE explicit bits8(uint8_t val) : val_(val) {}
49*da0073e9SAndroid Build Coastguard Worker };
50*da0073e9SAndroid Build Coastguard Worker 
51*da0073e9SAndroid Build Coastguard Worker /**
52*da0073e9SAndroid Build Coastguard Worker  * bits16 is an uninterpreted dtype of a tensor with 16 bits, without any
53*da0073e9SAndroid Build Coastguard Worker  * semantics defined.
54*da0073e9SAndroid Build Coastguard Worker  */
55*da0073e9SAndroid Build Coastguard Worker struct alignas(2) bits16 {
56*da0073e9SAndroid Build Coastguard Worker   uint16_t val_;
57*da0073e9SAndroid Build Coastguard Worker   bits16() = default;
bits16bits1658*da0073e9SAndroid Build Coastguard Worker   C10_HOST_DEVICE explicit bits16(uint16_t val) : val_(val) {}
59*da0073e9SAndroid Build Coastguard Worker };
60*da0073e9SAndroid Build Coastguard Worker 
61*da0073e9SAndroid Build Coastguard Worker } // namespace c10
62