From 3069669bc13450988d58d650c82289ba796ab966 Mon Sep 17 00:00:00 2001 From: David Rubin Date: Mon, 5 Feb 2024 17:05:20 -0800 Subject: [PATCH] add the `clflush` mnem --- src/arch/x86_64/CodeGen.zig | 1 + src/arch/x86_64/Encoding.zig | 2 +- src/arch/x86_64/Mir.zig | 2 ++ src/arch/x86_64/encodings.zig | 2 ++ 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index 8ebb861398..cc231fd1c9 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/src/arch/x86_64/CodeGen.zig @@ -12475,6 +12475,7 @@ fn airAsm(self: *Self, inst: Air.Inst.Index) !void { break :mnem std.meta.stringToEnum(Instruction.Mnemonic, mnem_str); } orelse return self.fail("invalid mnemonic: '{s}'", .{mnem_str}); if (@as(?Memory.Size, switch (mnem_tag) { + .clflush => .byte, .fldenv, .fnstenv, .fstenv => .none, .ldmxcsr, .stmxcsr, .vldmxcsr, .vstmxcsr => .dword, else => null, diff --git a/src/arch/x86_64/Encoding.zig b/src/arch/x86_64/Encoding.zig index 21b1168bb4..85c43903ba 100644 --- a/src/arch/x86_64/Encoding.zig +++ b/src/arch/x86_64/Encoding.zig @@ -224,7 +224,7 @@ pub const Mnemonic = enum { // General-purpose adc, add, @"and", bsf, bsr, bswap, bt, btc, btr, bts, - call, cbw, cdq, cdqe, + call, cbw, cdq, cdqe, clflush, cmova, cmovae, cmovb, cmovbe, cmovc, cmove, cmovg, cmovge, cmovl, cmovle, cmovna, cmovnae, cmovnb, cmovnbe, cmovnc, cmovne, cmovng, cmovnge, cmovnl, cmovnle, cmovno, cmovnp, cmovns, cmovnz, cmovo, cmovp, cmovpe, cmovpo, cmovs, cmovz, diff --git a/src/arch/x86_64/Mir.zig b/src/arch/x86_64/Mir.zig index de3db8d224..e70298af75 100644 --- a/src/arch/x86_64/Mir.zig +++ b/src/arch/x86_64/Mir.zig @@ -305,6 +305,8 @@ pub const Inst = struct { cdq, /// Convert doubleword to quadword cdqe, + /// Flush cache line + clflush, /// Conditional move cmov, /// Logical compare diff --git a/src/arch/x86_64/encodings.zig b/src/arch/x86_64/encodings.zig index 76003f89a6..3e62bd4d59 100644 --- a/src/arch/x86_64/encodings.zig +++ b/src/arch/x86_64/encodings.zig @@ -132,6 +132,8 @@ pub const table = [_]Entry{ .{ .cdq, .zo, &.{ .o32 }, &.{ 0x99 }, 0, .none, .none }, .{ .cqo, .zo, &.{ .o64 }, &.{ 0x99 }, 0, .long, .none }, + .{ .clflush, .m, &.{ .m8 }, &.{ 0x0f, 0xae }, 7, .none, .none }, + .{ .cmova, .rm, &.{ .r16, .rm16 }, &.{ 0x0f, 0x47 }, 0, .short, .none }, .{ .cmova, .rm, &.{ .r32, .rm32 }, &.{ 0x0f, 0x47 }, 0, .none, .none }, .{ .cmova, .rm, &.{ .r64, .rm64 }, &.{ 0x0f, 0x47 }, 0, .long, .none },