1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| /*
Fonctions d'extraction
Je les mets toutes, mais seules Word0, Word1, Byte0 et Byte1 sont utilisées ici.
*/
inline unsigned __int16 Word0(unsigned __int64 val) { return (val ) & 0x000000000000FFFFull; }
inline unsigned __int16 Word1(unsigned __int64 val) { return (val >> 16) & 0x000000000000FFFFull; }
inline unsigned __int16 Word2(unsigned __int64 val) { return (val >> 32) & 0x000000000000FFFFull; }
inline unsigned __int16 Word3(unsigned __int64 val) { return (val >> 48) & 0x000000000000FFFFull; }
inline unsigned __int16 Word0(unsigned __int32 val) { return (val ) & 0x0000FFFFul; }
inline unsigned __int16 Word1(unsigned __int32 val) { return (val >> 16) & 0x0000FFFFul; }
inline unsigned __int8 Byte0(unsigned __int32 val) { return (val ) & 0x000000FFul; }
inline unsigned __int8 Byte1(unsigned __int32 val) { return (val >> 8) & 0x000000FFul; }
inline unsigned __int8 Byte2(unsigned __int32 val) { return (val >> 16) & 0x000000FFul; }
inline unsigned __int8 Byte3(unsigned __int32 val) { return (val >> 24) & 0x000000FFul; }
inline unsigned __int8 Byte0(unsigned __int16 val) { return (val ) & 0x00FFu; }
inline unsigned __int8 Byte1(unsigned __int16 val) { return (val >> 8) & 0x00FFu; }
/*
Fonctions de promotion (non-signées)
*/
inline unsigned __int64 Ext64(unsigned __int32 val) { return val; }
inline unsigned __int64 Ext64(unsigned __int16 val) { return val; }
inline unsigned __int64 Ext64(unsigned __int8 val) { return val; }
inline unsigned __int32 Ext32(unsigned __int16 val) { return val; }
inline unsigned __int32 Ext32(unsigned __int8 val) { return val; }
inline unsigned __int16 Ext16(unsigned __int8 val) { return val; }
/*
Fonctions de réglage
*/
inline unsigned __int64 Word0(unsigned __int64 val, unsigned __int16 w) { return (val & 0xFFFFFFFFFFFF0000ull) | (Ext64(w) ); }
inline unsigned __int64 Word1(unsigned __int64 val, unsigned __int16 w) { return (val & 0xFFFFFFFF0000FFFFull) | (Ext64(w) << 16); }
inline unsigned __int64 Word2(unsigned __int64 val, unsigned __int16 w) { return (val & 0xFFFF0000FFFFFFFFull) | (Ext64(w) << 32); }
inline unsigned __int64 Word3(unsigned __int64 val, unsigned __int16 w) { return (val & 0x0000FFFFFFFFFFFFull) | (Ext64(w) << 48); }
inline unsigned __int32 Word0(unsigned __int32 val, unsigned __int16 w) { return (val & 0xFFFF0000ul) | (Ext32(w) ); }
inline unsigned __int32 Word1(unsigned __int32 val, unsigned __int16 w) { return (val & 0x0000FFFFul) | (Ext32(w) << 16); }
inline unsigned __int32 Byte0(unsigned __int32 val, unsigned __int8 b) { return (val & 0xFFFFFF00ul) | (Ext32(b) ); }
inline unsigned __int32 Byte1(unsigned __int32 val, unsigned __int8 b) { return (val & 0xFFFF00FFul) | (Ext32(b) << 8); }
inline unsigned __int32 Byte2(unsigned __int32 val, unsigned __int8 b) { return (val & 0xFF00FFFFul) | (Ext32(b) << 16); }
inline unsigned __int32 Byte3(unsigned __int32 val, unsigned __int8 b) { return (val & 0x00FFFFFFul) | (Ext32(b) << 24); }
inline unsigned __int16 Byte0(unsigned __int16 val, unsigned __int8 b) { return (val & 0xFF00u) | (Ext16(b) ); }
inline unsigned __int16 Byte1(unsigned __int16 val, unsigned __int8 b) { return (val & 0x00FFu) | (Ext16(b) << 8); }
/*
Classe de registre 32 bits.
*/
class Register32
{
private:
unsigned __int32 m_value;
public:
unsigned __int32 ex() const { return m_value; }
unsigned __int16 y() const { return Word1(m_value); }
unsigned __int16 x() const { return Word0(m_value); }
unsigned __int8 h() const { return Byte1(m_value); }
unsigned __int8 l() const { return Byte0(m_value); }
void ex(unsigned __int32 dw) { m_value = dw; }
void y(unsigned __int16 w) { m_value = Word1(m_value, w); }
void x(unsigned __int16 w) { m_value = Word0(m_value, w); }
void h(unsigned __int8 b) { m_value = Byte1(m_value, b); }
void l(unsigned __int8 b) { m_value = Byte0(m_value, b); }
signed __int32 exs() const { return ex(); }
signed __int16 ys() const { return y(); }
signed __int16 xs() const { return x(); }
signed __int8 hs() const { return h(); }
signed __int8 ls() const { return l(); }
}; |
Partager