v / vlib / v2 / gen / arm64 / tests / u32_mask_expr.v
23 lines · 19 sloc · 733 bytes · 1e3e9d52d5434ba375aa0e8677279da0ddbaf89c
Raw
1module main
2
3fn 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
8fn 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