mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 22:33:08 +00:00
Most of this migration was performed automatically with `zig fmt`. There were a few exceptions which I had to manually fix: * `@alignCast` and `@addrSpaceCast` cannot be automatically rewritten * `@truncate`'s fixup is incorrect for vectors * Test cases are not formatted, and their error locations change
57 lines
1.3 KiB
Zig
57 lines
1.3 KiB
Zig
const std = @import("../../std.zig");
|
|
|
|
const bits = switch (@import("builtin").cpu.arch) {
|
|
.mips,
|
|
.mipsel,
|
|
.mips64,
|
|
.mips64el,
|
|
.powerpc,
|
|
.powerpcle,
|
|
.powerpc64,
|
|
.powerpc64le,
|
|
.sparc,
|
|
.sparc64,
|
|
.sparcel,
|
|
=> .{ .size = 13, .dir = 3, .none = 1, .read = 2, .write = 4 },
|
|
else => .{ .size = 14, .dir = 2, .none = 0, .read = 2, .write = 1 },
|
|
};
|
|
|
|
const Direction = std.meta.Int(.unsigned, bits.dir);
|
|
|
|
pub const Request = packed struct {
|
|
nr: u8,
|
|
io_type: u8,
|
|
size: std.meta.Int(.unsigned, bits.size),
|
|
dir: Direction,
|
|
};
|
|
|
|
fn io_impl(dir: Direction, io_type: u8, nr: u8, comptime T: type) u32 {
|
|
const request = Request{
|
|
.dir = dir,
|
|
.size = @sizeOf(T),
|
|
.io_type = io_type,
|
|
.nr = nr,
|
|
};
|
|
return @as(u32, @bitCast(request));
|
|
}
|
|
|
|
pub fn IO(io_type: u8, nr: u8) u32 {
|
|
return io_impl(bits.none, io_type, nr, void);
|
|
}
|
|
|
|
pub fn IOR(io_type: u8, nr: u8, comptime T: type) u32 {
|
|
return io_impl(bits.read, io_type, nr, T);
|
|
}
|
|
|
|
pub fn IOW(io_type: u8, nr: u8, comptime T: type) u32 {
|
|
return io_impl(bits.write, io_type, nr, T);
|
|
}
|
|
|
|
pub fn IOWR(io_type: u8, nr: u8, comptime T: type) u32 {
|
|
return io_impl(bits.read | bits.write, io_type, nr, T);
|
|
}
|
|
|
|
comptime {
|
|
std.debug.assert(@bitSizeOf(Request) == 32);
|
|
}
|