From 64ada17c2dcd565f26d11f84440cb616a00231e2 Mon Sep 17 00:00:00 2001 From: Matthijs ter Woord Date: Sun, 12 Jun 2016 10:17:06 -0400 Subject: [PATCH] . --- source/Cosmos.Debug.DebugStub/AsmBreak.asm | 10 +-- source/Cosmos.Debug.DebugStub/CmdMisc.asm | 2 +- source/Cosmos.Debug.DebugStub/CmdProcess.asm | 2 +- source/Cosmos.Debug.DebugStub/CmdSend.asm | 4 +- source/Cosmos.Debug.DebugStub/Consts.asm | 2 +- source/Cosmos.Debug.DebugStub/DebugStub.asm | 6 +- source/Cosmos.Debug.DebugStub/Init.asm | 2 +- source/Cosmos.Debug.DebugStub/Screen.asm | 2 +- source/Cosmos.Debug.DebugStub/Serial.asm | 2 +- .../Cosmos.Debug.DebugStub/SerialHelpers.asm | 2 +- source/Cosmos.Debug.DebugStub/SerialIO.asm | 2 +- source/Cosmos.Debug.DebugStub/TracerEntry.asm | 4 +- source/Cosmos.Debug.DebugStub/Utilities.asm | 2 +- source/XSharp.Compiler/TokenPatterns.cs | 32 ++++++-- source/XSharp.Compiler/XS.Literal.cs | 25 ------- source/XSharp.Compiler/XS.cs | 73 +++++++++++++++++++ 16 files changed, 118 insertions(+), 54 deletions(-) diff --git a/source/Cosmos.Debug.DebugStub/AsmBreak.asm b/source/Cosmos.Debug.DebugStub/AsmBreak.asm index b29bb211f..2729bd811 100644 --- a/source/Cosmos.Debug.DebugStub/AsmBreak.asm +++ b/source/Cosmos.Debug.DebugStub/AsmBreak.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:07 AM DebugStub_AsmBreakEIP dd 0 DebugStub_AsmOrigByte dd 0 @@ -48,9 +48,9 @@ DebugStub_SetINT1_TrapFLAG: push dword EBP push dword EAX Mov EBP, [DebugStub_CallerESP] -Sub EBP, 4 +sub dword EBP, 0x4 Mov EAX, [EBP] -Or EAX, 0x0100 +or dword EAX, 0x100 Mov [EBP], EAX pop dword EAX pop dword EBP @@ -64,9 +64,9 @@ DebugStub_ResetINT1_TrapFLAG: push dword EBP push dword EAX Mov EBP, [DebugStub_CallerESP] -Sub EBP, 4 +sub dword EBP, 0x4 Mov EAX, [EBP] -And EAX, 0xFEFF +and dword EAX, 0xFEFF Mov [EBP], EAX pop dword EAX pop dword EBP diff --git a/source/Cosmos.Debug.DebugStub/CmdMisc.asm b/source/Cosmos.Debug.DebugStub/CmdMisc.asm index d36386c3d..4dfba1348 100644 --- a/source/Cosmos.Debug.DebugStub/CmdMisc.asm +++ b/source/Cosmos.Debug.DebugStub/CmdMisc.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:07 AM diff --git a/source/Cosmos.Debug.DebugStub/CmdProcess.asm b/source/Cosmos.Debug.DebugStub/CmdProcess.asm index bff54bf07..281853fd0 100644 --- a/source/Cosmos.Debug.DebugStub/CmdProcess.asm +++ b/source/Cosmos.Debug.DebugStub/CmdProcess.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:07 AM diff --git a/source/Cosmos.Debug.DebugStub/CmdSend.asm b/source/Cosmos.Debug.DebugStub/CmdSend.asm index 9cdf5029a..04ef47a9d 100644 --- a/source/Cosmos.Debug.DebugStub/CmdSend.asm +++ b/source/Cosmos.Debug.DebugStub/CmdSend.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:07 AM @@ -65,7 +65,7 @@ Mov AL, DebugStub_Const_Ds2Vs_Stack Call DebugStub_ComWriteAL Mov ESI, [DebugStub_CallerESP] Mov EAX, [DebugStub_CallerEBP] -Sub EAX, ESI +sub dword EAX, ESI Call DebugStub_ComWriteAX Mov ESI, [DebugStub_CallerESP] diff --git a/source/Cosmos.Debug.DebugStub/Consts.asm b/source/Cosmos.Debug.DebugStub/Consts.asm index cb1b97bfc..d862d3b6e 100644 --- a/source/Cosmos.Debug.DebugStub/Consts.asm +++ b/source/Cosmos.Debug.DebugStub/Consts.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:07 AM DebugStub_Const_Signature equ 427034631 diff --git a/source/Cosmos.Debug.DebugStub/DebugStub.asm b/source/Cosmos.Debug.DebugStub/DebugStub.asm index 7df110259..03b1b8005 100644 --- a/source/Cosmos.Debug.DebugStub/DebugStub.asm +++ b/source/Cosmos.Debug.DebugStub/DebugStub.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:07 AM DebugStub_CallerEBP dd 0 DebugStub_CallerEIP dd 0 @@ -98,10 +98,10 @@ Ret DebugStub_Executing: MOV EAX, DR6 -And EAX, 0x4000 +and dword EAX, 0x4000 Cmp EAX, 0x4000 JNE near DebugStub_Executing_Block1_End -And EAX, 0xBFFF +and dword EAX, 0xBFFF MOV DR6, EAX Call DebugStub_ResetINT1_TrapFLAG Call DebugStub_Break diff --git a/source/Cosmos.Debug.DebugStub/Init.asm b/source/Cosmos.Debug.DebugStub/Init.asm index 09f4d1fca..c7d9f3990 100644 --- a/source/Cosmos.Debug.DebugStub/Init.asm +++ b/source/Cosmos.Debug.DebugStub/Init.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:08 AM DebugStub_MaxBPId dd 0 diff --git a/source/Cosmos.Debug.DebugStub/Screen.asm b/source/Cosmos.Debug.DebugStub/Screen.asm index 5f2c0f7d5..901d6f649 100644 --- a/source/Cosmos.Debug.DebugStub/Screen.asm +++ b/source/Cosmos.Debug.DebugStub/Screen.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:08 AM DebugWaitMsg db 96, 87, 97, 105, 116, 105, 110, 103, 32, 102, 111, 114, 32, 100, 101, 98, 117, 103, 103, 101, 114, 32, 99, 111, 110, 110, 101, 99, 116, 105, 111, 110, 46, 46, 46, 96, 0 diff --git a/source/Cosmos.Debug.DebugStub/Serial.asm b/source/Cosmos.Debug.DebugStub/Serial.asm index 9211f78e7..e3ef2aefe 100644 --- a/source/Cosmos.Debug.DebugStub/Serial.asm +++ b/source/Cosmos.Debug.DebugStub/Serial.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:08 AM %ifndef Exclude_IOPort_Based_SerialInit diff --git a/source/Cosmos.Debug.DebugStub/SerialHelpers.asm b/source/Cosmos.Debug.DebugStub/SerialHelpers.asm index b673ab7df..5caa843ee 100644 --- a/source/Cosmos.Debug.DebugStub/SerialHelpers.asm +++ b/source/Cosmos.Debug.DebugStub/SerialHelpers.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:08 AM diff --git a/source/Cosmos.Debug.DebugStub/SerialIO.asm b/source/Cosmos.Debug.DebugStub/SerialIO.asm index 717bf6353..6eb21d8a0 100644 --- a/source/Cosmos.Debug.DebugStub/SerialIO.asm +++ b/source/Cosmos.Debug.DebugStub/SerialIO.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:08 AM DebugStub_ComAddr dd 1016 diff --git a/source/Cosmos.Debug.DebugStub/TracerEntry.asm b/source/Cosmos.Debug.DebugStub/TracerEntry.asm index 097da5d32..e2df4b1bc 100644 --- a/source/Cosmos.Debug.DebugStub/TracerEntry.asm +++ b/source/Cosmos.Debug.DebugStub/TracerEntry.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:08 AM @@ -14,7 +14,7 @@ add dword EBP, 0xC Mov [DebugStub_CallerESP], EBP Mov EBX, EAX MOV EAX, DR6 -And EAX, 0x4000 +and dword EAX, 0x4000 Cmp EAX, 0x4000 JE near DebugStub_TracerEntry_Block1_End dec dword EBX diff --git a/source/Cosmos.Debug.DebugStub/Utilities.asm b/source/Cosmos.Debug.DebugStub/Utilities.asm index f2d0708f8..ff7ba96db 100644 --- a/source/Cosmos.Debug.DebugStub/Utilities.asm +++ b/source/Cosmos.Debug.DebugStub/Utilities.asm @@ -1,4 +1,4 @@ -; Generated at 6/12/2016 9:54:11 AM +; Generated at 6/12/2016 10:15:08 AM diff --git a/source/XSharp.Compiler/TokenPatterns.cs b/source/XSharp.Compiler/TokenPatterns.cs index ffd2d76b7..426a21361 100644 --- a/source/XSharp.Compiler/TokenPatterns.cs +++ b/source/XSharp.Compiler/TokenPatterns.cs @@ -787,9 +787,13 @@ namespace XSharp.Compiler { }); AddPattern(new string[] { "_REG - 1", + }, delegate (TokenList aTokens) { + XS.Sub(aTokens[0].Register, aTokens[2].IntValue); + }); + AddPattern(new string[] { "_REG - _REG" - }, delegate(TokenList aTokens) { - XS.SubLiteral(GetSimpleRef(aTokens[0]), GetSimpleRef(aTokens[2])); + }, delegate (TokenList aTokens) { + XS.Sub(aTokens[0].Register, aTokens[2].Register); }); AddPattern(new string[] { "_REG * 1", @@ -829,21 +833,33 @@ namespace XSharp.Compiler { AddPattern(new string[] { "_REG & 1", - "_REG & _REG" }, delegate(TokenList aTokens) { - XS.AndLiteral(GetSimpleRef(aTokens[0]), GetSimpleRef(aTokens[2])); + XS.And(aTokens[0].Register, aTokens[2].IntValue); + }); + AddPattern(new string[] { + "_REG & _REG" + }, delegate (TokenList aTokens) { + XS.And(aTokens[0].Register, aTokens[2].Register); }); AddPattern(new string[] { "_REG | 1", - "_REG | _REG" }, delegate(TokenList aTokens) { - XS.OrLiteral(GetSimpleRef(aTokens[0]), GetSimpleRef(aTokens[2])); + XS.Or(aTokens[0].Register, aTokens[2].IntValue); + }); + AddPattern(new string[] { + "_REG | _REG" + }, delegate (TokenList aTokens) { + XS.Or(aTokens[0].Register, aTokens[2].Register); }); AddPattern(new string[] { "_REG ^ 1", - "_REG ^ _REG" }, delegate(TokenList aTokens) { - XS.XorLiteral(GetSimpleRef(aTokens[0]), GetSimpleRef(aTokens[2])); + XS.Xor(aTokens[0].Register, aTokens[2].IntValue); + }); + AddPattern(new string[] { + "_REG ^ _REG" + }, delegate (TokenList aTokens) { + XS.Xor(aTokens[0].Register, aTokens[2].Register); }); // End block. This handle both terminating a standard block as well as a function or an diff --git a/source/XSharp.Compiler/XS.Literal.cs b/source/XSharp.Compiler/XS.Literal.cs index d9ff28e12..3523812a5 100644 --- a/source/XSharp.Compiler/XS.Literal.cs +++ b/source/XSharp.Compiler/XS.Literal.cs @@ -11,31 +11,6 @@ namespace XSharp.Compiler new LiteralAssemblerCode(code); } - public static void AddLiteral(string left, string right) - { - LiteralCode("Add " + left + ", " + right); - } - - public static void SubLiteral(string left, string right) - { - LiteralCode("Sub " + left + ", " + right); - } - - public static void AndLiteral(string left, string right) - { - LiteralCode("And " + left + ", " + right); - } - - public static void OrLiteral(string left, string right) - { - LiteralCode("Or " + left + ", " + right); - } - - public static void XorLiteral(string left, string right) - { - LiteralCode("xor " + left + ", " + right); - } - public static void IntegerMultiplyLiteral(string left, string right) { LiteralCode("imul " + left + ", " + right); diff --git a/source/XSharp.Compiler/XS.cs b/source/XSharp.Compiler/XS.cs index c248069f7..f072004bd 100644 --- a/source/XSharp.Compiler/XS.cs +++ b/source/XSharp.Compiler/XS.cs @@ -2,6 +2,7 @@ using System.Diagnostics.CodeAnalysis; using Cosmos.Assembler; using Cosmos.Assembler.x86; +using Cosmos.Assembler.x86.x87; using static XSharp.Compiler.XSRegisters; namespace XSharp.Compiler @@ -217,5 +218,77 @@ namespace XSharp.Compiler SourceReg = valueToAdd.RegEnum }; } + + public static void Sub(Register register, uint valueToAdd) + { + new Sub + { + DestinationReg = register.RegEnum, + SourceValue = valueToAdd + }; + } + + public static void Sub(Register register, Register valueToAdd) + { + new Sub + { + DestinationReg = register.RegEnum, + SourceReg = valueToAdd.RegEnum + }; + } + + public static void And(Register register, uint valueToAdd) + { + new And + { + DestinationReg = register.RegEnum, + SourceValue = valueToAdd + }; + } + + public static void And(Register register, Register valueToAdd) + { + new And + { + DestinationReg = register.RegEnum, + SourceReg = valueToAdd.RegEnum + }; + } + + public static void Or(Register register, uint valueToAdd) + { + new Or + { + DestinationReg = register.RegEnum, + SourceValue = valueToAdd + }; + } + + public static void Or(Register register, Register valueToAdd) + { + new Or + { + DestinationReg = register.RegEnum, + SourceReg = valueToAdd.RegEnum + }; + } + + public static void Xor(Register register, uint valueToAdd) + { + new Xor + { + DestinationReg = register.RegEnum, + SourceValue = valueToAdd + }; + } + + public static void Xor(Register register, Register valueToAdd) + { + new Xor + { + DestinationReg = register.RegEnum, + SourceReg = valueToAdd.RegEnum + }; + } } }