Every // ---- section banner dies (132 -> 0): names carry the WHAT. Narration deleted (filename restatements, run-with lines, what-the- next-line-does); every ref/hare cite, task cite, divergence, ABI/ layout contract, and ownership qualifier kept (borrowed-view lines restored where the sweep over-cut). Comment-only proven: all 442 walk-workdir .s and 32 import-probe .s byte-identical before/after; libbyteid 56-roster all-ID.
35 lines
1.2 KiB
Plaintext
35 lines
1.2 KiB
Plaintext
// Mirrors Hare's endian:: surface: big-endian (be*), little-endian
|
|
// (le*), and network-order (hton/ntoh) helpers. Host order on amd64 is
|
|
// little-endian, so hton/ntoh are byte swaps and the le* family is
|
|
// identity.
|
|
|
|
package endian;
|
|
|
|
export fn htonu16(in: u16) u16 = {
|
|
return ((in << 8u16) | (in >> 8u16)) & 0xffffu16;
|
|
};
|
|
export fn ntohu16(in: u16) u16 = { return htonu16(in); };
|
|
|
|
export fn htonu32(in: u32) u32 = {
|
|
let b0: u32 = (in >> 24u32) & 0xffu32;
|
|
let b1: u32 = (in >> 16u32) & 0xffu32;
|
|
let b2: u32 = (in >> 8u32) & 0xffu32;
|
|
let b3: u32 = in & 0xffu32;
|
|
return (b3 << 24u32) | (b2 << 16u32) | (b1 << 8u32) | b0;
|
|
};
|
|
export fn ntohu32(in: u32) u32 = { return htonu32(in); };
|
|
|
|
export fn htonu64(in: u64) u64 = {
|
|
let b0: u64 = (in >> 56u64) & 0xffu64;
|
|
let b1: u64 = (in >> 48u64) & 0xffu64;
|
|
let b2: u64 = (in >> 40u64) & 0xffu64;
|
|
let b3: u64 = (in >> 32u64) & 0xffu64;
|
|
let b4: u64 = (in >> 24u64) & 0xffu64;
|
|
let b5: u64 = (in >> 16u64) & 0xffu64;
|
|
let b6: u64 = (in >> 8u64) & 0xffu64;
|
|
let b7: u64 = in & 0xffu64;
|
|
return (b7 << 56u64) | (b6 << 48u64) | (b5 << 40u64) | (b4 << 32u64)
|
|
| (b3 << 24u64) | (b2 << 16u64) | (b1 << 8u64) | b0;
|
|
};
|
|
export fn ntohu64(in: u64) u64 = { return htonu64(in); };
|