| 1 | module main |
| 2 | |
| 3 | fn read_u32_le_like(data []u8, off int) u32 { |
| 4 | return u32(data[off]) | (u32(data[off + 1]) << 8) | (u32(data[off + 2]) << 16) | (u32(data[ |
| 5 | off + 3]) << 24) |
| 6 | } |
| 7 | |
| 8 | fn main() { |
| 9 | instr := u32(0x910000a5) |
| 10 | result := (instr & u32(0xffc003ff)) | (u32(0xa0) << 10) |
| 11 | assert result == u32(0x910280a5) |
| 12 | |
| 13 | sym_addr := u64(0x1000240e0) |
| 14 | page_off := sym_addr & 0xfff |
| 15 | result_from_sym := (instr & u32(0xffc003ff)) | (u32(page_off) << 10) |
| 16 | assert result_from_sym == u32(0x910380a5) |
| 17 | |
| 18 | bytes := [u8(0xa5), 0, 0, 0x91] |
| 19 | instr_from_bytes := read_u32_le_like(bytes, 0) |
| 20 | assert instr_from_bytes == u32(0x910000a5) |
| 21 | result_from_bytes := (instr_from_bytes & u32(0xffc003ff)) | (u32(page_off) << 10) |
| 22 | assert result_from_bytes == u32(0x910380a5) |
| 23 | } |
| 24 | |