packed structs can have an explicit backing integer (#75)

wch-ch32v003
Matt Knight 2 years ago committed by Matt Knight
parent 43ee9c8af0
commit 83b4ee2a3d

@ -710,7 +710,7 @@ fn writeRegister(
} }
std.sort.sort(EntityWithOffset, fields.items, {}, EntityWithOffset.lessThan); std.sort.sort(EntityWithOffset, fields.items, {}, EntityWithOffset.lessThan);
try writer.print("{s}: {s}mmio.Mmio({}, packed struct{{\n", .{ try writer.print("{s}: {s}mmio.Mmio(packed struct(u{}) {{\n", .{
std.zig.fmtId(name), std.zig.fmtId(name),
array_prefix, array_prefix,
size, size,
@ -744,7 +744,7 @@ fn writeFields(
var i: u32 = 0; var i: u32 = 0;
while (i < fields.len and offset < register_size) { while (i < fields.len and offset < register_size) {
if (offset < fields[i].offset) { if (offset < fields[i].offset) {
try writer.print("reserved{}: u{} = 0,\n", .{ fields[i].offset, fields[i].offset - offset }); try writer.print("reserved{}: u{},\n", .{ fields[i].offset, fields[i].offset - offset });
offset = fields[i].offset; offset = fields[i].offset;
} else if (offset > fields[i].offset) { } else if (offset > fields[i].offset) {
if (db.attrs.name.get(fields[i].id)) |name| if (db.attrs.name.get(fields[i].id)) |name|
@ -818,7 +818,7 @@ fn writeFields(
assert(offset <= register_size); assert(offset <= register_size);
if (offset < register_size) if (offset < register_size)
try writer.print("padding: u{} = 0,\n", .{register_size - offset}); try writer.print("padding: u{},\n", .{register_size - offset});
try out_writer.writeAll(buffer.items); try out_writer.writeAll(buffer.items);
} }
@ -874,9 +874,9 @@ test "gen.peripheral type with register and field" {
\\ \\
\\pub const types = struct { \\pub const types = struct {
\\ pub const TEST_PERIPHERAL = extern struct { \\ pub const TEST_PERIPHERAL = extern struct {
\\ TEST_REGISTER: mmio.Mmio(32, packed struct { \\ TEST_REGISTER: mmio.Mmio(packed struct(u32) {
\\ TEST_FIELD: u1, \\ TEST_FIELD: u1,
\\ padding: u31 = 0, \\ padding: u31,
\\ }), \\ }),
\\ }; \\ };
\\}; \\};
@ -931,9 +931,9 @@ test "gen.peripheral instantiation" {
\\ \\
\\pub const types = struct { \\pub const types = struct {
\\ pub const TEST_PERIPHERAL = extern struct { \\ pub const TEST_PERIPHERAL = extern struct {
\\ TEST_REGISTER: mmio.Mmio(32, packed struct { \\ TEST_REGISTER: mmio.Mmio(packed struct(u32) {
\\ TEST_FIELD: u1, \\ TEST_FIELD: u1,
\\ padding: u31 = 0, \\ padding: u31,
\\ }), \\ }),
\\ }; \\ };
\\}; \\};
@ -987,9 +987,9 @@ test "gen.peripherals with a shared type" {
\\ \\
\\pub const types = struct { \\pub const types = struct {
\\ pub const TEST_PERIPHERAL = extern struct { \\ pub const TEST_PERIPHERAL = extern struct {
\\ TEST_REGISTER: mmio.Mmio(32, packed struct { \\ TEST_REGISTER: mmio.Mmio(packed struct(u32) {
\\ TEST_FIELD: u1, \\ TEST_FIELD: u1,
\\ padding: u31 = 0, \\ padding: u31,
\\ }), \\ }),
\\ }; \\ };
\\}; \\};
@ -1082,16 +1082,16 @@ test "gen.peripheral with modes" {
\\ \\
\\ TEST_MODE1: extern struct { \\ TEST_MODE1: extern struct {
\\ TEST_REGISTER1: u32, \\ TEST_REGISTER1: u32,
\\ COMMON_REGISTER: mmio.Mmio(32, packed struct { \\ COMMON_REGISTER: mmio.Mmio(packed struct(u32) {
\\ TEST_FIELD: u1, \\ TEST_FIELD: u1,
\\ padding: u31 = 0, \\ padding: u31,
\\ }), \\ }),
\\ }, \\ },
\\ TEST_MODE2: extern struct { \\ TEST_MODE2: extern struct {
\\ TEST_REGISTER2: u32, \\ TEST_REGISTER2: u32,
\\ COMMON_REGISTER: mmio.Mmio(32, packed struct { \\ COMMON_REGISTER: mmio.Mmio(packed struct(u32) {
\\ TEST_FIELD: u1, \\ TEST_FIELD: u1,
\\ padding: u31 = 0, \\ padding: u31,
\\ }), \\ }),
\\ }, \\ },
\\ }; \\ };
@ -1234,12 +1234,12 @@ test "gen.field with named enum" {
\\ _, \\ _,
\\ }; \\ };
\\ \\
\\ TEST_REGISTER: mmio.Mmio(8, packed struct { \\ TEST_REGISTER: mmio.Mmio(packed struct(u8) {
\\ TEST_FIELD: packed union { \\ TEST_FIELD: packed union {
\\ raw: u4, \\ raw: u4,
\\ value: TEST_ENUM, \\ value: TEST_ENUM,
\\ }, \\ },
\\ padding: u4 = 0, \\ padding: u4,
\\ }), \\ }),
\\ }; \\ };
\\}; \\};
@ -1285,7 +1285,7 @@ test "gen.field with anonymous enum" {
\\ \\
\\pub const types = struct { \\pub const types = struct {
\\ pub const TEST_PERIPHERAL = extern struct { \\ pub const TEST_PERIPHERAL = extern struct {
\\ TEST_REGISTER: mmio.Mmio(8, packed struct { \\ TEST_REGISTER: mmio.Mmio(packed struct(u8) {
\\ TEST_FIELD: packed union { \\ TEST_FIELD: packed union {
\\ raw: u4, \\ raw: u4,
\\ value: enum(u4) { \\ value: enum(u4) {
@ -1294,7 +1294,7 @@ test "gen.field with anonymous enum" {
\\ _, \\ _,
\\ }, \\ },
\\ }, \\ },
\\ padding: u4 = 0, \\ padding: u4,
\\ }), \\ }),
\\ }; \\ };
\\}; \\};
@ -1605,9 +1605,9 @@ test "gen.register with count and fields" {
\\ \\
\\pub const types = struct { \\pub const types = struct {
\\ pub const PORTB = extern struct { \\ pub const PORTB = extern struct {
\\ PORTB: [4]mmio.Mmio(8, packed struct { \\ PORTB: [4]mmio.Mmio(packed struct(u8) {
\\ TEST_FIELD: u4, \\ TEST_FIELD: u4,
\\ padding: u4 = 0, \\ padding: u4,
\\ }), \\ }),
\\ DDRB: u8, \\ DDRB: u8,
\\ PINB: u8, \\ PINB: u8,

Loading…
Cancel
Save