With the release of IDE Fix Pack 6.1, the Compiler Speed Pack not only makes the compiler compile faster but it can now also change the generated code, something that IDE Fix Pack has never done before. For this, new command line compiler options are introduced. They all start with “-x” (eXtension) followed by the Compiler Speed Pack option (-x-ff -x-fdi -x-fvs -x-fpr) and if you want to use them from the command line compiler you need to use fastdcc32/fastdcc64.
You can specify these options in the “Project/Options…” dialog under “Delphi Compiler/Compiling/Additional options to pass to the compiler”. You may need to rebuild the project to see an effect as only then the compiler will generate new code.
Windows 10 Creators Update 1703 caused issues with all Delphi programs, libraries and packages because it changed how Windows loads imported DLLs in such a way that it causes performance issues and can crash the debugger. Delphi 10.2 Tokyo Update 2 fixed this by not producing multiple dll import sections for one DLL anymore. IDE Fix Pack 6.1 implements that “feature” for all previous Delphi versions (2009-10.1 Berlin) and extends it to not only eliminate duplicate dll imports but also duplicate delay dll imports.
This patch changes the generated binary, the Win32 and Win64 compiler outputs, and it can be disabled by using the new “-x-fdi-“ option.
The next patch that changes the Win32 code generator is the “fast floating point” option that C++Builder users may know from the “bcc32.exe -ff” option. It removes all “fwait” instructions that the compiler usually emits after floating point operations. Removing “fwait” may cause FPU exceptions to be thrown at the wrong source code line.
This option is disabled by default and can be enabled by specifying the new option “-x-ff”.
When calling virtual methods through an interface the Win32 Delphi compiler has to route that call through a helper function that translates the interface reference into an object reference and calls the virtual method. For this helper the compiler uses the XCHG instruction that has an implicit CPU LOCK.
The new “-x-fvs” / “-x-fvs=1” option replaces the XCHG instruction with an alternative code and if the called virtual function doesn’t use the ECX register for the 3rd parameter, it generates a direct jump into the virtual method.
The “-x-fvs=2” option replaces the XCHG and uses ECX if available but if ECX is not available it keeps the CPU’s “return stack cache” valid by replacing the RET with a JMP instructions. For this it uses stack memory below ESP.
For some functions that meet special conditions the Win32 compiler emits stack frame code that fills the stack with zeros to clear variables with managed types. If there are too many of those the compiler uses a loop and the XCHG instruction to restore the ECX register that is used as the loop counter.
The option “-x-fpr” replaces the XCHG with an alternative code.
Changelog:
- Added: Option -x-ff to enable “fast floating point” (like Borland C++’s -ff command line option)
- Added: Option -x-fvs and -x-fvs=n to enable fast interface virtual stub (n=1: replace XCHG, n=2: keep the CPU’s return stack buffer in order)
- Added: Option -x-fpr to remove XCHG from the function prolog code.
- Added: DLL import table section folding and duplicate name/ordinal elimination, also for delay dll imports
- Changed: Split “Compiler64.X86″ patch into multiple smaller patches and removed the “Compiler64.X86” patch name
- Changed: EditorFocusFix now skips the SetActiveWindow call if the mainform (undocked) is not the active window
Download:
Name | IDE Version | File | Size | Downloads | Added |
---|---|---|---|---|---|
IDE Fix Pack 6.4.2 | 2009 (UP4) | IDEFixPack2009Reg64.2.7z | 242.75 KB | 5761 times | 2019-03-23 |
IDE Fix Pack 6.4.2 | 2010 (UP5) | IDEFixPack2010Reg64.2.7z | 237.09 KB | 6567 times | 2019-03-23 |
IDE Fix Pack 6.4.2 | XE (UP1) | IDEFixPackXEReg64.2.7z | 221.38 KB | 4086 times | 2019-03-23 |
IDE Fix Pack 6.4.2 | XE2 (UP4+HF1) | IDEFixPackXE2Reg64.2.7z | 316.78 KB | 4503 times | 2019-03-23 |
IDE Fix Pack 6.4.2 | XE3 (UP2) | IDEFixPackXE3Reg64.2.7z | 257.4 KB | 3628 times | 2019-03-23 |
IDE Fix Pack 6.4.2 | XE4 (UP1) | IDEFixPackXE4Reg64.2.7z | 260.1 KB | 3243 times | 2019-03-23 |
IDE Fix Pack 6.4.2 | XE5 (UP2) | IDEFixPackXE5Reg64.2.7z | 257.7 KB | 3741 times | 2019-03-23 |
IDE Fix Pack 6.4.2 | XE6 (UP1) | IDEFixPackXE6Reg64.2.7z | 423 KB | 3429 times | 2019-03-23 |
IDE Fix Pack 6.4.2 | XE7 (UP1) | IDEFixPackXE7Reg64.2.7z | 429.48 KB | 4596 times | 2019-03-23 |
IDE Fix Pack 6.4.2 | XE8 (UP1) | IDEFixPackXE8Reg64.2.7z | 431.7 KB | 3878 times | 2019-03-23 |
IDE Fix Pack 6.4.2 | 10 Seattle (RTM/UP1) | IDEFixPackD10Reg64.2.7z | 428.33 KB | 5367 times | 2019-03-23 |
IDE Fix Pack 6.4.2 | 10.1 Berlin | IDEFixPackD101Reg64.2.7z | 430.65 KB | 5952 times | 2019-03-23 |
IDE Fix Pack 6.4.2 | 10.2 (RTM/UP1/2/3) | IDEFixPackD102Reg64.2.7z | 426.27 KB | 9412 times | 2019-03-23 |
IDE Fix Pack 6.4.4 | 10.3 (RTM/UP1/2/3) | IDEFixPackD103Reg64.4.7z | 444.98 KB | 17837 times | 2019-08-01 |
Download (fastdcc):
Name | IDE Version | File | Size | Downloads | Added |
---|---|---|---|---|---|
fastdcc 6.4.2 | 2009 (UP4) | fastdcc2009v64.2.7z | 112.87 KB | 3117 times | 2019-03-23 |
fastdcc 6.4.2 | 2010 (UP5) | fastdcc2010v64.2.7z | 120.38 KB | 3232 times | 2019-03-23 |
fastdcc 6.4.2 | XE (UP1) | fastdccXEv64.2.7z | 121.36 KB | 2985 times | 2019-03-23 |
fastdcc 6.4.2 | XE2 (UP4+HF1) | fastdccXE2v64.2.7z | 166.48 KB | 3025 times | 2019-03-23 |
fastdcc 6.4.2 | XE3 (UP2) | fastdccXE3v64.2.7z | 150.88 KB | 2856 times | 2019-03-23 |
fastdcc 6.4.2 | XE4 (UP1) | fastdccXE4v64.2.7z | 153.55 KB | 2915 times | 2019-03-23 |
fastdcc 6.4.2 | XE5 (UP2) | fastdccXE5v64.2.7z | 151.87 KB | 2916 times | 2019-03-23 |
fastdcc 6.4.2 | XE6 (UP1) | fastdccXE6v64.2.7z | 198.67 KB | 2917 times | 2019-03-23 |
fastdcc 6.4.2 | XE7 (UP1) | fastdccXE7v64.2.7z | 219.84 KB | 3286 times | 2019-03-23 |
fastdcc 6.4.2 | XE8 (UP1) | fastdccXE8v64.2.7z | 224.67 KB | 2941 times | 2019-03-23 |
fastdcc 6.4.2 | 10 Seattle (RTM/UP1) | fastdccD10v64.2.7z | 219.65 KB | 3279 times | 2019-03-23 |
fastdcc 6.4.2 | 10.1 Berlin | fastdccD101v64.2.7z | 223.52 KB | 3351 times | 2019-03-23 |
fastdcc 6.4.2 | 10.2 (RTM/UP1/2/3) | fastdccD102v64.2.7z | 219.06 KB | 4170 times | 2019-03-23 |
fastdcc 6.4.4 | 10.3 (RTM/UP1/2/3) | fastdccD103v64.4.7z | 228.61 KB | 5739 times | 2019-07-31 |
I applied this update and get a linker error L898 error when building my Tokyo 10.2 Up1 project (at the end in linking phase). If I install without the compiler speedpack, it’s fine. Any ideas to try?
Delphi 10.2 Update 1 doesn’t really need that patch so you can disable it by setting the environment variable
IDEFixPack.DisabledPatches=CodeGenMod.Linker.CombineDllImportTab
I made the following changes and still had same result.
Windows Environment Variables
CodeGenMod.Linker.CombineDllImportTab;Compiler.UnitFreeAll = CodeGenMod.Linker.CombineDllImportTab;Compiler.UnitFreeAll
IDEFixPack.DisabledPatches = CodeGenMod.Linker.CombineDllImportTab;Compiler.UnitFreeAll
Sorry. Mis-pasted.