From 8b52c08efa1b6774218ebdcdb67f48160a60fea9 Mon Sep 17 00:00:00 2001 From: valentinbreiz Date: Mon, 4 Mar 2024 18:46:55 +0100 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9C=A8=20Implement=20MM=20registers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../XSharp/Assembler/Gen1/x86/Registers.cs | 8 +++++ source/XSharp/XSharp/Gen1/XSRegisters.cs | 33 ++++++++++++++----- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/source/XSharp/XSharp/Assembler/Gen1/x86/Registers.cs b/source/XSharp/XSharp/Assembler/Gen1/x86/Registers.cs index 61733c43..4017d704 100644 --- a/source/XSharp/XSharp/Assembler/Gen1/x86/Registers.cs +++ b/source/XSharp/XSharp/Assembler/Gen1/x86/Registers.cs @@ -41,6 +41,14 @@ public enum RegistersEnum: byte CR2, CR3, CR4, + MM0, + MM1, + MM2, + MM3, + MM4, + MM5, + MM6, + MM7, XMM0, XMM1, XMM2, diff --git a/source/XSharp/XSharp/Gen1/XSRegisters.cs b/source/XSharp/XSharp/Gen1/XSRegisters.cs index fa75cb82..dbc9e666 100644 --- a/source/XSharp/XSharp/Gen1/XSRegisters.cs +++ b/source/XSharp/XSharp/Gen1/XSRegisters.cs @@ -13,6 +13,7 @@ public enum RegisterSize : byte Short16 = 16, Int32 = 32, Long64 = 64, + MM = 64, FPU = 128, XMM = 128 } @@ -85,6 +86,13 @@ public RegisterFPU(string name, RegistersEnum regEnum) : base(name, regEnum, Reg } } + public class RegisterMM : Register + { + public RegisterMM(string name, RegistersEnum regEnum) : base(name, regEnum, RegisterSize.MM) + { + } + } + public class RegisterXMM : Register { public RegisterXMM(string name, RegistersEnum regEnum) : base(name, regEnum, RegisterSize.XMM) @@ -141,14 +149,23 @@ public RegisterSegment(string name, RegistersEnum regEnum) : base(name, regEnum, public static readonly RegisterFPU ST6 = new RegisterFPU(nameof(ST6), RegistersEnum.ST6); public static readonly RegisterFPU ST7 = new RegisterFPU(nameof(ST7), RegistersEnum.ST7); - public static readonly RegisterXMM XMM0 = new RegisterXMM(nameof(XMM0), RegistersEnum.XMM0); - public static readonly RegisterXMM XMM1 = new RegisterXMM(nameof(XMM1), RegistersEnum.XMM1); - public static readonly RegisterXMM XMM2 = new RegisterXMM(nameof(XMM2), RegistersEnum.XMM2); - public static readonly RegisterXMM XMM3 = new RegisterXMM(nameof(XMM3), RegistersEnum.XMM3); - public static readonly RegisterXMM XMM4 = new RegisterXMM(nameof(XMM4), RegistersEnum.XMM4); - public static readonly RegisterXMM XMM5 = new RegisterXMM(nameof(XMM5), RegistersEnum.XMM5); - public static readonly RegisterXMM XMM6 = new RegisterXMM(nameof(XMM6), RegistersEnum.XMM6); - public static readonly RegisterXMM XMM7 = new RegisterXMM(nameof(XMM7), RegistersEnum.XMM7); + public static readonly RegisterXMM MM0 = new RegisterXMM(nameof(MM0), RegistersEnum.MM0); + public static readonly RegisterXMM MM1 = new RegisterXMM(nameof(MM1), RegistersEnum.MM1); + public static readonly RegisterXMM MM2 = new RegisterXMM(nameof(MM2), RegistersEnum.MM2); + public static readonly RegisterXMM MM3 = new RegisterXMM(nameof(MM3), RegistersEnum.MM3); + public static readonly RegisterXMM MM4 = new RegisterXMM(nameof(MM4), RegistersEnum.MM4); + public static readonly RegisterXMM MM5 = new RegisterXMM(nameof(MM5), RegistersEnum.MM5); + public static readonly RegisterXMM MM6 = new RegisterXMM(nameof(MM6), RegistersEnum.MM6); + public static readonly RegisterXMM MM7 = new RegisterXMM(nameof(MM7), RegistersEnum.MM7); + + public static readonly RegisterMM XMM0 = new RegisterMM(nameof(XMM0), RegistersEnum.XMM0); + public static readonly RegisterMM XMM1 = new RegisterMM(nameof(XMM1), RegistersEnum.XMM1); + public static readonly RegisterMM XMM2 = new RegisterMM(nameof(XMM2), RegistersEnum.XMM2); + public static readonly RegisterMM XMM3 = new RegisterMM(nameof(XMM3), RegistersEnum.XMM3); + public static readonly RegisterMM XMM4 = new RegisterMM(nameof(XMM4), RegistersEnum.XMM4); + public static readonly RegisterMM XMM5 = new RegisterMM(nameof(XMM5), RegistersEnum.XMM5); + public static readonly RegisterMM XMM6 = new RegisterMM(nameof(XMM6), RegistersEnum.XMM6); + public static readonly RegisterMM XMM7 = new RegisterMM(nameof(XMM7), RegistersEnum.XMM7); // Control Registers public static readonly Register32 CR0 = new Register32(nameof(CR0), RegistersEnum.CR0); From 2be68fbc57a46061d91e53688d1ab291724d53a4 Mon Sep 17 00:00:00 2001 From: valentinbreiz Date: Mon, 4 Mar 2024 18:48:58 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=90=9B=20Fix=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/XSharp/XSharp/Gen1/XSRegisters.cs | 34 ++++++++++++------------ 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/source/XSharp/XSharp/Gen1/XSRegisters.cs b/source/XSharp/XSharp/Gen1/XSRegisters.cs index dbc9e666..1250ba6a 100644 --- a/source/XSharp/XSharp/Gen1/XSRegisters.cs +++ b/source/XSharp/XSharp/Gen1/XSRegisters.cs @@ -149,23 +149,23 @@ public RegisterSegment(string name, RegistersEnum regEnum) : base(name, regEnum, public static readonly RegisterFPU ST6 = new RegisterFPU(nameof(ST6), RegistersEnum.ST6); public static readonly RegisterFPU ST7 = new RegisterFPU(nameof(ST7), RegistersEnum.ST7); - public static readonly RegisterXMM MM0 = new RegisterXMM(nameof(MM0), RegistersEnum.MM0); - public static readonly RegisterXMM MM1 = new RegisterXMM(nameof(MM1), RegistersEnum.MM1); - public static readonly RegisterXMM MM2 = new RegisterXMM(nameof(MM2), RegistersEnum.MM2); - public static readonly RegisterXMM MM3 = new RegisterXMM(nameof(MM3), RegistersEnum.MM3); - public static readonly RegisterXMM MM4 = new RegisterXMM(nameof(MM4), RegistersEnum.MM4); - public static readonly RegisterXMM MM5 = new RegisterXMM(nameof(MM5), RegistersEnum.MM5); - public static readonly RegisterXMM MM6 = new RegisterXMM(nameof(MM6), RegistersEnum.MM6); - public static readonly RegisterXMM MM7 = new RegisterXMM(nameof(MM7), RegistersEnum.MM7); - - public static readonly RegisterMM XMM0 = new RegisterMM(nameof(XMM0), RegistersEnum.XMM0); - public static readonly RegisterMM XMM1 = new RegisterMM(nameof(XMM1), RegistersEnum.XMM1); - public static readonly RegisterMM XMM2 = new RegisterMM(nameof(XMM2), RegistersEnum.XMM2); - public static readonly RegisterMM XMM3 = new RegisterMM(nameof(XMM3), RegistersEnum.XMM3); - public static readonly RegisterMM XMM4 = new RegisterMM(nameof(XMM4), RegistersEnum.XMM4); - public static readonly RegisterMM XMM5 = new RegisterMM(nameof(XMM5), RegistersEnum.XMM5); - public static readonly RegisterMM XMM6 = new RegisterMM(nameof(XMM6), RegistersEnum.XMM6); - public static readonly RegisterMM XMM7 = new RegisterMM(nameof(XMM7), RegistersEnum.XMM7); + public static readonly RegisterMM MM0 = new RegisterMM(nameof(MM0), RegistersEnum.MM0); + public static readonly RegisterMM MM1 = new RegisterMM(nameof(MM1), RegistersEnum.MM1); + public static readonly RegisterMM MM2 = new RegisterMM(nameof(MM2), RegistersEnum.MM2); + public static readonly RegisterMM MM3 = new RegisterMM(nameof(MM3), RegistersEnum.MM3); + public static readonly RegisterMM MM4 = new RegisterMM(nameof(MM4), RegistersEnum.MM4); + public static readonly RegisterMM MM5 = new RegisterMM(nameof(MM5), RegistersEnum.MM5); + public static readonly RegisterMM MM6 = new RegisterMM(nameof(MM6), RegistersEnum.MM6); + public static readonly RegisterMM MM7 = new RegisterMM(nameof(MM7), RegistersEnum.MM7); + + public static readonly RegisterXMM XMM0 = new RegisterXMM(nameof(XMM0), RegistersEnum.XMM0); + public static readonly RegisterXMM XMM1 = new RegisterXMM(nameof(XMM1), RegistersEnum.XMM1); + public static readonly RegisterXMM XMM2 = new RegisterXMM(nameof(XMM2), RegistersEnum.XMM2); + public static readonly RegisterXMM XMM3 = new RegisterXMM(nameof(XMM3), RegistersEnum.XMM3); + public static readonly RegisterXMM XMM4 = new RegisterXMM(nameof(XMM4), RegistersEnum.XMM4); + public static readonly RegisterXMM XMM5 = new RegisterXMM(nameof(XMM5), RegistersEnum.XMM5); + public static readonly RegisterXMM XMM6 = new RegisterXMM(nameof(XMM6), RegistersEnum.XMM6); + public static readonly RegisterXMM XMM7 = new RegisterXMM(nameof(XMM7), RegistersEnum.XMM7); // Control Registers public static readonly Register32 CR0 = new Register32(nameof(CR0), RegistersEnum.CR0);