| ... | @@ -238,6 +238,9 @@ pub const Instruction = union(enum) { | ... | @@ -238,6 +238,9 @@ pub const Instruction = union(enum) { |
| 238 | fixed: u5 = 0b00101, | 238 | fixed: u5 = 0b00101, |
| 239 | op: u1, | 239 | op: u1, |
| 240 | }, | 240 | }, |
| | 241 | NoOperation: packed struct { |
| | 242 | fixed: u32 = 0b1101010100_0_00_011_0010_0000_000_11111, |
| | 243 | }, |
| 241 | | 244 | |
| 242 | pub fn toU32(self: Instruction) u32 { | 245 | pub fn toU32(self: Instruction) u32 { |
| 243 | return switch (self) { | 246 | return switch (self) { |
| ... | @@ -247,6 +250,7 @@ pub const Instruction = union(enum) { | ... | @@ -247,6 +250,7 @@ pub const Instruction = union(enum) { |
| 247 | .ExceptionGeneration => |v| @bitCast(u32, v), | 250 | .ExceptionGeneration => |v| @bitCast(u32, v), |
| 248 | .UnconditionalBranchRegister => |v| @bitCast(u32, v), | 251 | .UnconditionalBranchRegister => |v| @bitCast(u32, v), |
| 249 | .UnconditionalBranchImmediate => |v| @bitCast(u32, v), | 252 | .UnconditionalBranchImmediate => |v| @bitCast(u32, v), |
| | 253 | .NoOperation => |v| @bitCast(u32, v), |
| 250 | }; | 254 | }; |
| 251 | } | 255 | } |
| 252 | | 256 | |
| ... | @@ -599,6 +603,12 @@ pub const Instruction = union(enum) { | ... | @@ -599,6 +603,12 @@ pub const Instruction = union(enum) { |
| 599 | pub fn bl(offset: i28) Instruction { | 603 | pub fn bl(offset: i28) Instruction { |
| 600 | return unconditionalBranchImmediate(1, offset); | 604 | return unconditionalBranchImmediate(1, offset); |
| 601 | } | 605 | } |
| | 606 | |
| | 607 | // Nop |
| | 608 | |
| | 609 | pub fn nop() Instruction { |
| | 610 | return Instruction{ .NoOperation = {} }; |
| | 611 | } |
| 602 | }; | 612 | }; |
| 603 | | 613 | |
| 604 | test "" { | 614 | test "" { |