From 214ebd93f291fbe18ea0a436eac51c97d644cee8 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sun, 31 Oct 2021 20:39:28 +0100 Subject: [PATCH] Bump version to 1.1.44 --- README.md | 2 +- oscar64/NativeCodeGenerator.cpp | 48 ++++++++++++++++++++++++++ oscar64/NativeCodeGenerator.h | 1 + oscar64/oscar64.cpp | 2 +- oscar64/oscar64.rc | 8 ++--- oscar64setup/oscar64setup.vdproj | 58 ++++++++++++++++++++++++++++++-- 6 files changed, 110 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 4ba56b3..0a6c69e 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ The goal is to implement the actual C standard and not some subset for performan ## Limits and Errors -There are still several open areas, but most targets have been reached. The current Dhrystone performance is 35 iterations per second with byte code (12259) and 203 iterations with native code (13572 Bytes). +There are still several open areas, but most targets have been reached. The current Dhrystone performance is 48 iterations per second with byte code (12275) and 245 iterations with native code (12688 Bytes). ### Language diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 6c0a41f..eaa326b 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -7923,6 +7923,39 @@ bool NativeCodeBasicBlock::MoveStoreXUp(int at) return done; } +bool NativeCodeBasicBlock::MoveStoreHighByteDown(int at) +{ + int i = at + 4; + while (i + 1 < mIns.Size()) + { + if (mIns[i].mLive & LIVE_CPU_REG_Y) + return false; + if (mIns[i].ChangesZeroPage(mIns[at + 2].mAddress) || mIns[i].ChangesZeroPage(mIns[at + 2].mAddress + 1) || mIns[i].ChangesZeroPage(mIns[at + 3].mAddress)) + return false; + if (mIns[i].UsesZeroPage(mIns[at + 3].mAddress)) + return false; + if (mIns[i].ChangesGlobalMemory()) + return false; + + if (!(mIns[i].mLive & (LIVE_CPU_REG_A | LIVE_CPU_REG_Z))) + { + mIns.Insert(i + 1, mIns[at + 3]); + mIns.Insert(i + 1, mIns[at + 2]); + mIns.Insert(i + 1, mIns[at + 1]); + + mIns[at + 1].mType = ASMIT_NOP; mIns[at + 1].mMode = ASMIM_IMPLIED; // LDY + mIns[at + 2].mType = ASMIT_NOP; mIns[at + 2].mMode = ASMIM_IMPLIED; // LDA (x), y + mIns[at + 3].mType = ASMIT_NOP; mIns[at + 3].mMode = ASMIM_IMPLIED; // STA T + + return true; + } + + i++; + } + + return false; +} + bool NativeCodeBasicBlock::MoveLoadStoreUp(int at) { int j = at; @@ -8943,6 +8976,21 @@ bool NativeCodeBasicBlock::PeepHoleOptimizer(void) } } #endif + // move high byte load down, if low byte is immediatedly needed afterwards + + for (int i = 0; i + 4 < mIns.Size(); i++) + { + if (mIns[i + 0].mType == ASMIT_STA && mIns[i + 0].mMode == ASMIM_ZERO_PAGE && + mIns[i + 1].mType == ASMIT_LDY && mIns[i + 1].mMode == ASMIM_IMMEDIATE && + mIns[i + 2].mType == ASMIT_LDA && mIns[i + 2].mMode == ASMIM_INDIRECT_Y && mIns[i + 2].mAddress != mIns[i + 3].mAddress && mIns[i + 2].mAddress + 1 != mIns[i + 3].mAddress && + mIns[i + 3].mType == ASMIT_STA && mIns[i + 3].mMode == ASMIM_ZERO_PAGE && mIns[i + 3].mAddress != mIns[i + 0].mAddress && + mIns[i + 4].mType == ASMIT_LDA && mIns[i + 4].mMode == ASMIM_ZERO_PAGE && mIns[i + 4].mAddress == mIns[i + 0].mAddress && !(mIns[i + 4].mLive & LIVE_CPU_REG_Z)) + { + if (MoveStoreHighByteDown(i)) + changed = true; + } + + } bool progress = false; do { diff --git a/oscar64/NativeCodeGenerator.h b/oscar64/NativeCodeGenerator.h index 4f1970e..af733c1 100644 --- a/oscar64/NativeCodeGenerator.h +++ b/oscar64/NativeCodeGenerator.h @@ -178,6 +178,7 @@ public: bool FindGlobalAddress(int at, int reg, int& apos); bool FindGlobalAddressSumY(int at, int reg, bool direct, int& apos, const NativeCodeInstruction * & ains, const NativeCodeInstruction*& iins, uint32 & flags); bool MoveStoreXUp(int at); + bool MoveStoreHighByteDown(int at); bool ValueForwarding(const NativeRegisterDataSet& data); diff --git a/oscar64/oscar64.cpp b/oscar64/oscar64.cpp index e11a3da..18ef9d7 100644 --- a/oscar64/oscar64.cpp +++ b/oscar64/oscar64.cpp @@ -75,7 +75,7 @@ int main(int argc, const char** argv) DWORD length = ::GetModuleFileNameA(NULL, basePath, sizeof(basePath)); #else - printf("Starting oscar64 1.1.43\n"); + printf("Starting oscar64 1.1.44\n"); #ifdef __APPLE__ uint32_t length = sizeof(basePath); diff --git a/oscar64/oscar64.rc b/oscar64/oscar64.rc index cb6a1ca..0836070 100644 --- a/oscar64/oscar64.rc +++ b/oscar64/oscar64.rc @@ -25,8 +25,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,1,43,0 - PRODUCTVERSION 1,1,43,0 + FILEVERSION 1,1,44,0 + PRODUCTVERSION 1,1,44,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -43,12 +43,12 @@ BEGIN BEGIN VALUE "CompanyName", "oscar64" VALUE "FileDescription", "oscar64 compiler" - VALUE "FileVersion", "1.1.43.0" + VALUE "FileVersion", "1.1.44.0" VALUE "InternalName", "oscar64.exe" VALUE "LegalCopyright", "Copyright (C) 2021" VALUE "OriginalFilename", "oscar64.exe" VALUE "ProductName", "oscar64" - VALUE "ProductVersion", "1.1.43.0" + VALUE "ProductVersion", "1.1.44.0" END END BLOCK "VarFileInfo" diff --git a/oscar64setup/oscar64setup.vdproj b/oscar64setup/oscar64setup.vdproj index e6e8cb1..fdd28ca 100644 --- a/oscar64setup/oscar64setup.vdproj +++ b/oscar64setup/oscar64setup.vdproj @@ -46,6 +46,12 @@ } "Entry" { + "MsmKey" = "8:_343F58F80DF84D40AE23457288C5D7D5" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_3AFDC86156F04AABB8D82218C17005F2" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -112,6 +118,12 @@ } "Entry" { + "MsmKey" = "8:_A32AAE4931564357A3222F04C8D99C2F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { "MsmKey" = "8:_A566398810C1458E8E063A81FA88D46F" "OwnerKey" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED" @@ -381,6 +393,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_343F58F80DF84D40AE23457288C5D7D5" + { + "SourcePath" = "8:..\\include\\c64\\keyboard.c" + "TargetName" = "8:keyboard.c" + "Tag" = "8:" + "Folder" = "8:_247D4CAD3CB843B3A8A4DC2D90F47C28" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_3AFDC86156F04AABB8D82218C17005F2" { "SourcePath" = "8:..\\include\\c64\\vic.h" @@ -601,6 +633,26 @@ "IsDependency" = "11:FALSE" "IsolateTo" = "8:" } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A32AAE4931564357A3222F04C8D99C2F" + { + "SourcePath" = "8:..\\include\\c64\\keyboard.h" + "TargetName" = "8:keyboard.h" + "Tag" = "8:" + "Folder" = "8:_247D4CAD3CB843B3A8A4DC2D90F47C28" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_A566398810C1458E8E063A81FA88D46F" { "SourcePath" = "8:..\\include\\stddef.h" @@ -950,15 +1002,15 @@ { "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:oscar64" - "ProductCode" = "8:{9CDBFF70-1B69-46D4-AF9A-421A9A0A39A3}" - "PackageCode" = "8:{5E5D8444-E4D7-49D3-B597-D5F498EC44BE}" + "ProductCode" = "8:{25890560-0659-4815-9695-967059797606}" + "PackageCode" = "8:{277046A3-B4FB-4443-B541-4CA3F0FC51B8}" "UpgradeCode" = "8:{9AB61EFF-ACAC-4079-9950-8D96615CD4EF}" "AspNetVersion" = "8:2.0.50727.0" "RestartWWWService" = "11:FALSE" "RemovePreviousVersions" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE" "InstallAllUsers" = "11:FALSE" - "ProductVersion" = "8:1.1.43" + "ProductVersion" = "8:1.1.44" "Manufacturer" = "8:oscar64" "ARPHELPTELEPHONE" = "8:" "ARPHELPLINK" = "8:"