diff --git a/lib/std/os/bits/linux/bpf.zig b/lib/std/os/bits/linux/bpf.zig index 6baccd4362..5517e2ae80 100644 --- a/lib/std/os/bits/linux/bpf.zig +++ b/lib/std/os/bits/linux/bpf.zig @@ -460,27 +460,32 @@ pub const Insn = packed struct { }; } - fn ld_imm_impl(dst: Reg, src: Reg, imm: u64) [2]Insn { - return [2]Insn{ - Insn{ - .code = LD | DW | IMM, - .dst = @enumToInt(dst), - .src = @enumToInt(src), - .off = 0, - .imm = @intCast(i32, @truncate(u32, imm)), - }, - Insn{ - .code = 0, - .dst = 0, - .src = 0, - .off = 0, - .imm = @intCast(i32, @truncate(u32, imm >> 32)), - }, + fn ld_imm_impl1(dst: Reg, src: Reg, imm: u64) Insn { + return Insn{ + .code = LD | DW | IMM, + .dst = @enumToInt(dst), + .src = @enumToInt(src), + .off = 0, + .imm = @intCast(i32, @truncate(u32, imm)), }; } - pub fn ld_map_fd(dst: Reg, map_fd: fd_t) [2]Insn { - return ld_imm_impl(dst, @intToEnum(Reg, PSEUDO_MAP_FD), @intCast(u64, map_fd)); + fn ld_imm_impl2(imm: u64) Insn { + return Insn{ + .code = 0, + .dst = 0, + .src = 0, + .off = 0, + .imm = @intCast(i32, @truncate(u32, imm >> 32)), + }; + } + + pub fn ld_map_fd1(dst: Reg, map_fd: fd_t) Insn { + return ld_imm_impl1(dst, @intToEnum(Reg, PSEUDO_MAP_FD), @intCast(u64, map_fd)); + } + + pub fn ld_map_fd2(map_fd: fd_t) Insn { + return ld_imm_impl2(@intCast(u64, map_fd)); } pub fn call(helper: Helper) Insn { @@ -533,9 +538,8 @@ test "ld_abs" { } test "ld_map_fd" { - const insns = Insn.ld_map_fd(.r1, 42); - expect_insn(insns[0], 0x0000002a00001118); - expect_insn(insns[1], 0x0000000000000000); + expect_insn(Insn.ld_map_fd1(.r1, 42), 0x0000002a00001118); + expect_insn(Insn.ld_map_fd2(42), 0x0000000000000000); } // st instructions