#ifndef BITS_H
#define BITS_H

inline uint32_t BIT(uint32_t n) { return 1 << n; }

inline uint32_t BIT_N(uint32_t i, uint32_t n) { return (i >> n) & 1; }
inline uint32_t BIT0(uint32_t i) { return i & 1; }
inline uint32_t BIT1(uint32_t i) { return BIT_N(i, 1); }
inline uint32_t BIT2(uint32_t i) { return BIT_N(i, 2); }
inline uint32_t BIT3(uint32_t i) { return BIT_N(i, 3); }
inline uint32_t BIT4(uint32_t i) { return BIT_N(i, 4); }
inline uint32_t BIT5(uint32_t i) { return BIT_N(i, 5); }
inline uint32_t BIT6(uint32_t i) { return BIT_N(i, 6); }
inline uint32_t BIT7(uint32_t i) { return BIT_N(i, 7); }
inline uint32_t BIT8(uint32_t i) { return BIT_N(i, 8); }
inline uint32_t BIT9(uint32_t i) { return BIT_N(i, 9); }
inline uint32_t BIT10(uint32_t i) { return BIT_N(i, 10); }
inline uint32_t BIT11(uint32_t i) { return BIT_N(i, 11); }
inline uint32_t BIT12(uint32_t i) { return BIT_N(i, 12); }
inline uint32_t BIT13(uint32_t i) { return BIT_N(i, 13); }
inline uint32_t BIT14(uint32_t i) { return BIT_N(i, 14); }
inline uint32_t BIT15(uint32_t i) { return BIT_N(i, 15); }
inline uint32_t BIT16(uint32_t i) { return BIT_N(i, 16); }
inline uint32_t BIT17(uint32_t i) { return BIT_N(i, 17); }
inline uint32_t BIT18(uint32_t i) { return BIT_N(i, 18); }
inline uint32_t BIT19(uint32_t i) { return BIT_N(i, 19); }
inline uint32_t BIT20(uint32_t i) { return BIT_N(i, 20); }
inline uint32_t BIT21(uint32_t i) { return BIT_N(i, 21); }
inline uint32_t BIT22(uint32_t i) { return BIT_N(i, 22); }
inline uint32_t BIT23(uint32_t i) { return BIT_N(i, 23); }
inline uint32_t BIT24(uint32_t i) { return BIT_N(i, 24); }
inline uint32_t BIT25(uint32_t i) { return BIT_N(i, 25); }
inline uint32_t BIT26(uint32_t i) { return BIT_N(i, 26); }
inline uint32_t BIT27(uint32_t i) { return BIT_N(i, 27); }
inline uint32_t BIT28(uint32_t i) { return BIT_N(i, 28); }
inline uint32_t BIT29(uint32_t i) { return BIT_N(i, 29); }
inline uint32_t BIT30(uint32_t i) { return BIT_N(i, 30); }
inline uint32_t BIT31(uint32_t i) { return i >> 31; }

inline uint32_t CONDITION(uint32_t i) { return i >> 28; }

inline uint32_t REG_POS(uint32_t i, uint32_t n) { return (i >> n) & 0xF; }

#endif