authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-05-15 10:03:38+02:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-05-15 19:52:43+02:00
log5b03d55c5ecf697086db7c454e0f3982fec42408
tree4a6b5dd9d81afd7364c9fa2feba25681e070f50d
parent5f97652da8881773b823a0730e5791816668528a

x64: rename brk to int3, and MIR to interrupt


3 files changed, 18 insertions(+), 9 deletions(-)

src/arch/x86_64/CodeGen.zig+4-2
......@@ -3755,8 +3755,10 @@ fn airArg(self: *Self, inst: Air.Inst.Index) !void {
37553755
37563756fn airBreakpoint(self: *Self) !void {
37573757 _ = try self.addInst(.{
3758 .tag = .brk,
3759 .ops = undefined,
3758 .tag = .interrupt,
3759 .ops = (Mir.Ops{
3760 .flags = 0b00,
3761 }).encode(),
37603762 .data = undefined,
37613763 });
37623764 return self.finishAirBookkeeping();
src/arch/x86_64/Emit.zig+11-5
......@@ -178,7 +178,7 @@ pub fn lowerMir(emit: *Emit) InnerError!void {
178178
179179 .@"test" => try emit.mirTest(inst),
180180
181 .brk => try emit.mirBrk(),
181 .interrupt => try emit.mirInterrupt(inst),
182182 .nop => try emit.mirNop(),
183183
184184 .call_extern => try emit.mirCallExtern(inst),
......@@ -225,8 +225,14 @@ fn fixupRelocs(emit: *Emit) InnerError!void {
225225 }
226226}
227227
228fn mirBrk(emit: *Emit) InnerError!void {
229 return lowerToZoEnc(.brk, emit.code);
228fn mirInterrupt(emit: *Emit, inst: Mir.Inst.Index) InnerError!void {
229 const tag = emit.mir.instructions.items(.tag)[inst];
230 assert(tag == .interrupt);
231 const ops = Mir.Ops.decode(emit.mir.instructions.items(.ops)[inst]);
232 switch (ops.flags) {
233 0b00 => return lowerToZoEnc(.int3, emit.code),
234 else => return emit.fail("TODO handle variant 0b{b} of interrupt instruction", .{ops.flags}),
235 }
230236}
231237
232238fn mirNop(emit: *Emit) InnerError!void {
......@@ -1074,7 +1080,7 @@ const Tag = enum {
10741080 push,
10751081 pop,
10761082 @"test",
1077 brk,
1083 int3,
10781084 nop,
10791085 imul,
10801086 mul,
......@@ -1278,7 +1284,7 @@ inline fn getOpCode(tag: Tag, enc: Encoding, is_one_byte: bool) ?OpCode {
12781284 .zo => return switch (tag) {
12791285 .ret_near => OpCode.oneByte(0xc3),
12801286 .ret_far => OpCode.oneByte(0xcb),
1281 .brk => OpCode.oneByte(0xcc),
1287 .int3 => OpCode.oneByte(0xcc),
12821288 .nop => OpCode.oneByte(0x90),
12831289 .syscall => OpCode.twoByte(0x0f, 0x05),
12841290 .cbw => OpCode.oneByte(0x98),
src/arch/x86_64/Mir.zig+3-2
......@@ -342,8 +342,9 @@ pub const Inst = struct {
342342 /// TODO handle more cases
343343 @"test",
344344
345 /// Breakpoint
346 brk,
345 /// Breakpoint form:
346 /// 0b00 int3
347 interrupt,
347348
348349 /// Nop
349350 nop,