major changes between 6.00 and 6.50

General:
  • Added C runtime function gettimeofday.
  • Added additional buffering for stdout and stderr in C runtime functions fprintf, fprintf_s, fputs, fputws, fwprintf, fwprintf_s, printf, printf_s, puts, vfprintf, vfprintf_s, vfwprintf, vfwprintf_s, vprintf, vprintf_s, vwprintf, vwprintf_s, wprintf, wprintf_s.
  • Added some definitions for Windows 7, new include files, and new import libraries.
  • Fixed problem where Ctrl+Z ending a text file could cause an infinite loop in POMAKE, POCB, POMC, PODUMP, POASM, etc.

IDE:
  • Added (minimal) support for DPI-awareness.
  • Added integrated sampling profiler - to complement the older instrumenting profiler.
  • Added support for folding point hovering in the source editor.
  • Added support for Ctrl+MouseWheel zooming in the source editor.
  • Added support for #include file completion in the source editor.
  • Added support for 'member function' call tips in the source editor (like COM interfaces, or other function pointers in a structure).
  • Added caching to the 'Update all dependencies' command, which can significantly reduce the scan time for a large project.
  • Added support for writing a resource symbol include file using UTF-8 encoding (special case that hopefully works now).
  • Revised the font detection and enumeration code. Added creation of monospaced font based on characteristics (and Windows version); this will affect the debugger and hex-dump window, for example.
  • Without relevant support from Microsoft, the IDE now got it's own dialog manager that will attempt to construct dialogs with the correct system font depending on the Windows version (and mode).
  • The resource preview pane will now look for images in RCDATA resources too.
  • The path for POC_PROJECT_OUTPUTDIR, POC_PROJECT_RESULTDIR, and POC_PROJECT_WORKPATH symbols is now stored in project files with a relative path. This bumps the project file version to 6.50; a project loaded once in version 6.50 will no longer load in older versions of the IDE.
  • The path to an add-in module is no longer stored in the settings (Registry or XML file), since all modules must be stored in the same (fixed) directory.
  • Moved the 'Resource symbols' and 'Resource includes' command from the View menu to the Resource menu (the reasons for placing them in the View menu are no longer valid).
  • The debugger will now show a multi-line tooltip when hovering over a structure or array, displaying more information.
  • The debugger thread pane can now be used to select the 'active' thread, which will affect the view in other windows.
  • The debugger stack walker pane can now handle extra aligned stack frames from POCC (X86).
  • Revised the grid drawing algorithm in the dialog editor.
  • Several minor changes and fixes.

Compiler:
  • Finally found an acceptable way of supporting more than two intrinsic arguments. This improved some functions (like memset and memcpy), but mainly opened the door to many new intrinsic functions...
  • Added about 400 intrinsic functions for SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 and AES on X64. Added internal support for SIMD types __m128, __m128d, __m128i; note that the types must be 'activated' with a proper typedef, normally by including a file like xmmintrin.h or emmintrin.h.
  • Added classic loop optimizations like invariant code motion and strength reduction.
  • Added global subexpression elimination.
  • Added optimizations for access to thread-local variables.
  • Added option /GT for fiber-safe TLS access. Probably not very useful, but seemed easy to add.
  • Added basic support for tail recursion elimination.
  • Replaced the internal control flow graph with a better implementation. More transformations are now possible, like reordering the basic blocks of a function using various branch heuristics.
  • Replaced the internal handling of structured exception handling (many places affected). This change was needed for cleaner cooperation with the control flow graph, but also to be able to produce better code for X64. Some warnings will be better for all targets.
  • Revised handling of compound literals. The compiler will accept a few more valid cases and will optimize better; the optimizations will also affect some initializers.
  • The types __int8, __int16, __int32, and __int64 are now keywords in Microsoft mode (rather than preprocessor definitions), but will soon map to other basic types; shouldn't matter much in practice. To make things more complete, the integer constant suffixes I8, UI8, I16, UI16, I32, UI32 are now accepted in Microsoft mode (previously only I64 and UI64).
  • The __unaligned pointer specifier can now be used on SIMD types, to tell the X64 code generator to use the unaligned load and store instructions.
  • The attributes __ptr32 and __ptr64 are now keywords in Microsoft mode (rather than preprocessor definitions), but they remain no-ops.
  • Added support for __declspec(deprecated); mainly intended for obsolete C runtime functions, but can be useful in user code too.
  • Added better check for enum tag compatibility in declarations.
  • Added macro replacement for private #pragma's (not STDC #pragma's, since this is not allowed by the C99 standard).
  • Fixed problem with pragmas not being associated with the correct (inline) function.
  • Fixed problem where a redeclaration of a global symbol wasn't always catched by the frontend, leading to somewhat cryptic messages from the backend.
  • Fixed problem in preprocessor with the ## operator and empty arguments (internal handling of C99 'placemarker' preprocessing token).
  • Fixed problem with clobbering of 8-byte values (double/long long/struct) loaded through a pointer (ARM).
  • Fixed one attempt at coalescing register ranges, since this could sometimes reuse a register too soon (pretty rare, in my experience) (all targets).
  • Many minor changes and fixes.

Macro assembler:
  • Fixed and improved handling of some addressing modes.
  • Fixed problem with infinite recursion after syntax error in nested struct directive.
  • Added missing cmpxchg16b instruction.

Linker:
  • Added option /MAPINFO:PATHS.
  • Fixed problem with safe exception handler table not always being sorted by address (X86).
  • Fixed "problem" with unexpected load configuration in the middle of a segment, which can only happen with assembly modules (X86).

Browse information manager:
  • Added some support for parsing COM interfaces.
  • Added more guesses for better parsing of Windows include files (part of the syntax may be hidden in a currently unknown macro, for example, making it very easy for the browse manager to get lost).