C++ compiler:

C++11 is now the default. A new -fcpp98 option indicates
that the previous C98 standard should apply.

Allocation of offsets in the local stack frame
was greatly improved to reduce total runtime
stack size.

Many improvements to use newer instructions when
the appropriate architecture level is selected. The
maximum architecture level is now -march=z11 which
represents the 11th revision of the z/Architecture
Priniciples of Operation.

Loops that involve constant assignments are converted
into memset-style operations.

The C++ compiler now accepts the _Ieee and
_Hexadec qualifiers on floating-point types (indicating a
value in IEEE or HFP format regardless of the -fieee
compile time setting.)

Support for __builtin_fpclassify() for HFP and BFP data.
This is the 'generic' version; __builtin_bfp_fpclassify()
accepts BFP data, and __builtin_hfp_fpclassify() accepts
HFP data.

Support for floating-pt builtin functions:
__builtin_frexpf, __builtin_frexp, __builtin_frexpl,
__builtin_signbitf, __builtin_signbit, __builtin_signbitl,
__builtin_isnanf, __builtin_isnan, __builtin_isnanl,
__builtin_isinff, __builtin_isinf, __builtin_isinfl,
__builtin_isfinitef, __builtin_isfinite, __builtin_isfinitel,
__builtin_isnormalf, __builtin_isnormal, __builtin_isnormall
These are 'generic' versions that depend on the
current setting of the -fieee option. There are also
BFP or HFP specific versions of these (with _bfp or _hfp
qualifications after the __builtin portion of the name.)

new -febcdic=name option that indicates which EBCDIC code
page to use for compile-time ASCIIEBCDIC constant translations.
Consult the C++ compiler documentation for the list of
supported EBCDIC character sets.

Improve temporary file creation on Windows platforms
so the compiler won't encounter problems when run
in parallel.

Add support for the remaining IBM _Traits_is_...() and
_Traits_has_...() operators when -fc370 is specified.

Add support for #pragma namemangling(v5/v7/v8/pop)
for IBM compatibility (-fc370).

Predefine the __NO_INLINE__ macro if inlining disabled.

New -fvtable_listing option that adds the virtual
function table offsets to the C++ compiler listing.

If optimization is enabled, predefine the __OPTIMIZE__
and __OPTIMIZE_SIZE__ macros.

-frtti now applies to both -fc370 and -fc370_extended (LE compatibility) modes.

Internal improvements to improve compilation speed
for programs that have many global initializers.

Implement -fsigned_char in DCXX. Previously,
most operations were still treated as unsigned. Name mangling
(ABI) is not affected by this change.

Anonymous structures are now accepted as operands
of the sizeof() operator.

If the 3rd argument to __builtin_memchr() is 0, then
the result is definitionally NULL.

C++ Library:

The older StlPort library was replaced with a more
modern version based on LLVM. This version is C++11
compliant; with many C++14 features.

The C++ library is now floating-point type agnostic
and can handle BFP and HFP values in the same load
module.

What is new in Release 2.00 of Systems/C++

C++ compiler:

Ongoing C++ 11 support

Support __attribute__((visibility("hidden")) for Systems/C
shared objects.

Support for many GCC-style __builtin functions

Support __attribute__((always_inline)) on functions to bypass
compiler heuristics when determining if a function is eligible
for inlining.

New -isystem option for providing the location of system include files.

Support "dignus.inf-relative" paths for "System Include" specified
in the license key file.

Support new -Spath option that is similar to IBM's SEARCH
option for searching for included files.

Support IBM's _Traits_is_pod() operator in IBM compatibility mode.

New __bit_offsetof() and __bit_sizeof() operations similarly
to offsetof() and sizeof() but returning the values in bits.

Support for GCC-style inline assembly.

New -M=fn option to specify an optional file name for dependency
information. New -fdep[=fn] option to generate the dependency
information during the normal compilation.

Add -MT and -MF options compatibly with GCC. -MT targ
provides the target name to use in dependency information.
-MF names the output (equivalent to '=filename' for -fdep and -M.)

If in-line __asm__ or gcc-style asm("") appears in a function,
generate an LTORG in the 4K region in which it appears so that the
in-line ASM can reference ASM literals.

The compiler will now recognize a BASER=int specification in
a #pragma prolkey() and use that given integer value
as the code base register for the specific function. This allows the
programmer to change the code-base for individual functions.

Support (unsigned long long) (64-bit) bitfields in 32-bit
compilations.

Accept 0-sized arrays in any C++ context for better general
compatibility with code written for gcc.

New -fhfpfloatpromote option indicating if HFP
(float) values should be promoted. For LE these are promoted to
(double) when passed directly in parm blocks. For Linux and Systems/C
mode, these are not promoted (to be compatible with IEEE
values.) The -fnohfpfloatpromote option will disable the
promotion, -fhfpfloatpromote enables it. Previous compiler
versions did the promotion in Systems/C mode but this was changed.

Add support for SFINAE, which involved some minor
C++ ABI changes to support decltype template parameters.

Support for -On option, where n is a the value 0, 1, 2 or 3
that controls the application of optimizations.

New optimizer with many more global optimizations. These new
optimizations demonstrate a significant improvement in the
generated code. Some test examples showed improvement between
22% - 38% in runtime performance.

What is new in Release 1.95 of Systems/C++

C++ compiler

Support for use with z/TPF, including z/TPF runtime components.

Improved codegeneration & optimization

Integrated support for building for z/TPF, as well as TPF 4.1
in the same compiler.

Support for specifying both -g and -O on the command
line (generating some debugging information for optimized code.)

Reductions to compile-time memory use, especially for large
functions.

Improved use of builtin memset() instead of invoking the library
memset() routine in certain internal operations.

Compatibility with GCC when the -flinux or -fztpf
options are specified. We no longer provide Dignus C++
runtime libraries, the system-provided ones are now used.

New -march=z option that indicates that the z/Architecture
instructions are available even in 31-bit mode.

New -mlp64 option which replaces the now deprecated -march=zarch
option. -mlp64 indicates 64-bit long and 64-bit pointer.

New -mdistinct-operands option that indicates the compiler
can generate code that uses the z196 distinct-operands-facility
instructions.

New -mload-store-on-condition option that indicates the compiler
can generate code that uses the z196 load-store-on-condition--facility
instructions.

New -mmvcle option that indicates the compiler can use
the mvcle/clcle instructions for large memory moves/compares.

Improved code generation for builtin strlen().

Builtin strcat()/memchr() will use string instructions if
they are allowed.

Block move and builtin memcpy() with a constant length was
improved to use a simple MVC loop with only one EXecuted MVC
if needed, or the MVCLE instruction if allowed.

Improvements to recognize common BCTR+LTR+BNZ sequences and
fold those into a single BCT instruction.

If the length parameter to builtin memcpy() is a (non-constant)
unsigned character, the compiler will generate a single EXecuted
MVC instruction as the length cannot be longer than 256.

C++ library

The compiler now operates in GNU compatible mode in z/Linux,
Linux/390 and z/TPF modes. Thus, a C++ library for these
environments is no longer provided. The version that is installed
with the operating system is used.

What is new in Release 1.90 of Systems/C++

C++ Compiler:

Improved codegeneration & optimization.

Allow function pointers to have
__ptr31/__ptr64
qualifiers even if they are not defined through a typedef.

Allow calls to function pointers with __ptr31 and
__ptr64.

When -g (debugging mode) is specified in IBM compatibility
mode, the compiler
will now generate ISD debugging information, or DWARF debugging
information.

Options are now listed in alphabetical order in the compiler
listing.

Support for z/TPF code genration.

Guiding declarations is now disabled by default, use -fguiding_decls
to achieve the old behavior.

Support for GCC's __attribute__((__packed__)).

New -fstructmaphex option for displaying offsets/lengths in the
structure map in hex values.

Default section name length expanded to 1023.

Add support for A/E prefix on string/character literals to
specify ASCII or EBCDIC independently of -fasciiout.

Improve generated code for 1-byte signed __asmval() values.

Provide the __370__ predefined macro as the IBM compiler does.

Added -fnamemangling=ansi for IBM compatibility mode.

Add support for include files in .zip files, like -Imyheaders.zip.

Many codegeneration/optionization improvments, some of which include:

Use TML instruction for situations like:
if(x & val) {
(where 'val' is sufficiently sized to take advantage
of the instructions.)

Improved the codegenerator to eliminate LTRs after
certain arithmetic and logical operations.

Improved value-numbering algorithms for local/block
optimizations.

Improved memory usage in register allocator on many large
examples.

Improvide in-liner algorithms and heuristics.

Add support for #pragma runopts(POSIX(ON/OFF)) in IBM compatibility
mode.

Support for z/OS 1.9 and z/OS 1.10 versions in IBM compatibility
mode.

Many improvements in IBM compatibility and XPLINK modes.

What is new in Release 1.85 of Systems/C++

C++ Compiler

Improved support for volatile data references, forcing them
to be in memory and loaded/stored at each reference.

Support for XPLINK linkages in IBM compatibility mode.

Support for later versions of IBM compatibility, including
support through z/OS 1.7. This also includes newer IBM predefined
macros.

Improved compile time for large programs with large amounts of
constant data.

New optimizations, including improved constant propogation and
basic-block related optimizations.

Improved code generation, particularly when -march=esa390 or later
is enabled.

Added support for IBM-style "events file" for use with the IBM
TPF Toolkit.

Support Microsoft's __int8/__int16/__int32 and __int64
builtin types.

What is new in Release 1.80 of Systems/C++

C++ Library

Updated to version 4.6.2 of the industry-standard STLPort library.

C++ Compiler

New -fpack option to specify per-compilation structure member
alignment.

Support for reading #include files from PDS members under OpenEdition.

Support for -frsa=NNN to provide the user a mechanism
for defining the per-function register-save-area.

Support for IBM compatible namespaces if -fc370=z1r2i
(or later) is enabled.

Support for extern "OS" and extern "PLI" linkages.

Support for 128-bit (long double) data type.

New -march=esa390 option; causes the compiler to use
halfword immediate instructions, use string instructions and to
assume 16 floating-pt registers. Enabled by default with
-flinux is specified.

New state-of-the-art register allocation algorithms, greatly improving
register use in the generated code.

C++ compiler:

If -march=zarch is specified, the compiler will predefine
the macro _LP64 to 1; otherwise, it defines the _ILP32 macro to 1.

Constant modulus by power-of-two (either signed or unsigned)
is now optimized in the code-generator.

When -fc370 is not specified, the compiler recognizes
#pragma pack(pop) as a equivalent to #pragma pack(reset).

Compiler was changed to define the name of the function
(in Systems/C mode) in a compiler-generated character
string that preceeds the function prologue. Then, a new LNAMEADDR=
parameter was added to DCCPRLG which provides the label for
this string. This allows the string to be as long as necessary,
and contain any required bytes, and also be properly demangled
in the C++ case. With this change, the results of a call
to __traceback are much better.

New -fc370=z1r2 option, to indicate compatibility with the
IBM V1R2 z/OS compiler.

New -fptr_to_unsized_array_parm option, to allow for
compatibility with compilers that incorrectly allow
this in C++ source (e.g. SAS/C++ and Microsoft.)

Other enhancements

Utilities:

PLINK supplied with Systesm/C has been rewritten to
better support automatic template instantiation. The C++
compiler now generates weakly defined functions for template
instantiations. During the PLINK step, duplicate definitions
of these weakly defined functions are eliminated.

This allows version 1.70 of Systems/C++ to provide much better
management of automatic template instantiation; without the need
for "side files", or bloated executables.

Compilers:

New -finstrument_functions option. For Linux (-flinux), this
decorates function entry/exit points compatibly with the normal Linux
utilities. In Systems/C mode, this causes macros to be generated
a function entry/exit points.

New -fstructmap/-fno_structmap option to enable/disable the
"structure map" portion of the listing.

New -fasmcomm option in the C++ compiler, which describes
how the original C++ lines should appear in the generated
assembler output.

New -fasmlnno option in the C++ compiler. This causes
the codegenerator to generate comments detailing the line number
in the generated assembler source.

New -fflex, -fmin_lm_reg=X and -fmin_stm_reg=X options in the
C and C++ compiler. These control peepholing of consecutive
Load/STore instructions. On the FLEX/ES(tm) system, LM and STM
instructions can perform slower than the sequence of L/ST instructions.

Code generation improvements to add new options to the
prologue/epilogue to not save/restore as many registers (or,
possibly no saving/restoring of registers.) Also, improvements
to reduce the local DSA requirements.

Compiler:

-fquiet option, which suppresses the banner messages

-march=zarch option:
True 64-bit compiler using "Grande" instructions
extern "align4" linkage for C++
Uses all 16 floating point registers for improved math code.
Takes advantage immediate instructions
New -famode=any to support using Grande
instructions and 64-bit integers/pointers when the
execution AMODE may not
be 64-bits.

__ptr31/__ptr64 pointer type qualifiers,
for specifically declaring 32 (31) bit or 64 bit pointers,
no matter what type of code is being compiled.

switch() statements extended to support long-long integral
values when -fc99 not enabled

-fc370 now supports the following IBM builtin functions:
alloca, tsched, cs,
cds. Thus, all of the documented IBM C builtin
functions are now supported.

export supported in IBM compatiblity mode

C++ compiler now includes a structure map in the listing file.

Enhanced debugging information support for C and C++ compilers
in -flinux mode. C and C++ code compiled with
-flinux is now
directly debuggable by the Linux debugger gdb.