| 1 | #include <prim/seadEndian.h> |
| 2 | |
| 3 | namespace |
| 4 | { |
| 5 | u8 Swap8(u8 val) |
| 6 | { |
| 7 | return val; |
| 8 | } |
| 9 | |
| 10 | u8 Null8(u8 val) |
| 11 | { |
| 12 | return val; |
| 13 | } |
| 14 | |
| 15 | u16 Swap16(u16 val) |
| 16 | { |
| 17 | return (val << 8 | val >> 8) & 0xFFFF; |
| 18 | } |
| 19 | |
| 20 | u16 Null16(u16 val) |
| 21 | { |
| 22 | return val; |
| 23 | } |
| 24 | |
| 25 | u32 Swap32(u32 val) |
| 26 | { |
| 27 | return val << 24 | (val & 0xFF00) << 8 | val >> 24 | (val >> 8 & 0xFF00); |
| 28 | } |
| 29 | |
| 30 | u32 Null32(u32 val) |
| 31 | { |
| 32 | return val; |
| 33 | } |
| 34 | |
| 35 | u64 Swap64(u64 val) |
| 36 | { |
| 37 | // Couldn't make an implementation that matches the original assembly |
| 38 | // But this should be much more efficient |
| 39 | return val << 56 | (val & 0xFF00) << 40 | (val & 0xFF0000) << 24 | (val & 0xFF000000) << 8 | |
| 40 | val >> 56 | (val >> 40 & 0xFF00) | (val >> 24 & 0xFF0000) | (val >> 8 & 0xFF000000); |
| 41 | } |
| 42 | |
| 43 | u64 Null64(u64 val) |
| 44 | { |
| 45 | return val; |
| 46 | } |
| 47 | } // anonymous namespace |
| 48 | |
| 49 | namespace sead |
| 50 | { |
| 51 | const Endian::Types Endian::cHostEndian = Endian::markToEndian(bom: 0xfeff); |
| 52 | |
| 53 | const Endian::ConvFuncTable Endian::cConvFuncTable = { |
| 54 | .conv8: {&Null8, &Swap8}, |
| 55 | .conv16: {&Null16, &Swap16}, |
| 56 | .conv32: {&Null32, &Swap32}, |
| 57 | .conv64: {&Null64, &Swap64}, |
| 58 | }; |
| 59 | |
| 60 | } // namespace sead |
| 61 | |