-fident/-fno-indent options to control generation
of .ident strings on platforms that support that.
-fgcc-version=x.y.z option to specify desired
GCC compatility (for Linux and z/TPF environments.)
-fsyntax-only/-fno-syntax-only options to simply
parse the source and not generate the program.
-D and -U options are now processed in the order
they appear on the command line.
_Decimal128 changed to match GCC's
for DCC, z/TPF and Linux environments. For LE environments
the alignment will match IBM's.
.cfi_xxx
instructions the GNU gas assembler. -fno-dwarf2-cfi-asm
selects the old manually-generated tables.
__builtin_popcount() function takes
advantage of the Miscellaneous-Instruction-Extentions
Facility 3 enhancements to the POPCNT instruction to reduce
the generated code
-MM option which is similar to -M
except that dependencies involving system include
files are not included in the output.
CC
in the register allocator for improved code.
-fwrapv and -fno-wrapv options
control this assumption. -fwrapv indicates the compiler
should assume signed integer overflow "wraps-around" and
defeats such optimization. -fwrapv is the default
but that may change in the future.
-fwrapv-pointer and -fno-wrapv-pointer options to
control this.
FPR8-FPR15 if used in a function. There
is a new -mafp_volatile option also causes any function call
to indicate the registers are altered and thus saved/restored
in the calling function.
strcmp() function was
improved to 'swap' the comparison addresses for CLC and
CLST instructions and take advantage of IPM + shifts to
produce a -1, 0, +1 result.
memcmp() function was
improved to do no branches for constant lengths when
possible. Also, the code was dramatically improved
over the previous byte-by-byte comparison code to do
the comparison in 256-byte chunks, then a final CLC
for the remainder.
-@ processing improved on MVS to support quoted strings.
ptrdiff_t) for the
pointer to data member types. That means "type class::*var", which
defines a variable of type "pointer to data member of type within
class" will now be 8 bytes in 64-bit mode. It used to be always 4
bytes, which was a mistake and makes it incompatible with IA64 ABI
(g++ for z/Linux and z/TPF).
-D and -U options are now processed in command line order.
-fshort-enums. -fshort-enums is equivalent
to -fenum=SMALL and -fno-short-enums is equivalent to -fenum=INT.
constexpr if
-fsource_enc=utf8.
__builtin_* math functions (sin/exp/etc...) for
compatibility with g++.
__builtin_sqrtf(), __builtin_sqrt() and __builtin_sqrtl()
builtins from GCC, for both IEEE and HFP data
__atomic_load / store / exchange / compare_exchange now use the
builtin implementation for pointer types (previously, it punted to
the run-time implementation). And provide a run-time implementation
of these for z/TPF.
__atomic builtins: __atomic_test_and_set() and __atomic_clear().
__builtin_bswap16(), __builtin_bswap32() and __builtin_bswap64() builtins. Generated code will use hardware
instructions when allowed by the architecture settings.
-mtpf-trace-skip option which alters the z/TPF trace branch
targets in the prologue and epilogue to point to a skip-frame variant.
-O).
__builtin_isdigit() function.
-march=z13 flag for the 13th edition (Sept. 2019) of
the Principles of Operation and take advantage of the new
miscellaneous-instruction-extensions facility 3 instructions
when we can.
-mmisc-instructions-extensions-facility-2 is allowed,
the compiler will now take advantage of the AGH/SGH and MGH
instructions for operations involving 64-bit signed values and 16-bit
signed values in memory.
-O).
__cs1()/__cds1()/__csg()/__cdsg() builtins in LE mode.
__builtin_alloca() (as Linux and, essentially, LE environments do.) This allows the compiler to be aware when alloca() has been used.
__builtin_tbegin, __builtin_tbegin_nofloat, __builtin_tbegin_retry, __builtin_tbegin_retry_nofloat, __builtin_tend, __builtin_tabort, __builtin_tx_assist, __builtin_tx_nesting_depth, __builtin_non_tx_store.
@CODE section.) This allows for duplicate non-rent definitions to be elided at link time.
__callback function pointers are fully supported, allowing via non-XPLINK function pointers passed to other DLLs.
-fcpp98 option indicates
that the previous C98 standard should apply.
-march=z11 which
represents the 11th revision of the z/Architecture
Priniciples of Operation.
_Ieee and
_Hexadec qualifiers on floating-point types (indicating a
value in IEEE or HFP format regardless of the -fieee
compile time setting.)
__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.
__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.)
__builtin_return_address in all environments.
#pragma namemangling(ansi/compat)
and
#pragma namemanglingrule(fnparmtype/fnparmscmp, on/off).
-febcdic=name option that indicates which EBCDIC code
page to use for compile-time ASCII<->EBCDIC constant translations.
Consult the C++ compiler documentation for the list of
supported EBCDIC character sets.
_Traits_is_...() and
_Traits_has_...() operators when -fc370 is specified.
#pragma namemangling(v5/v7/v8/pop)
for IBM compatibility (-fc370).
__NO_INLINE__ macro if inlining disabled.
-fvtable_listing option that adds the virtual
function table offsets to the C++ compiler listing.
__OPTIMIZE__
and __OPTIMIZE_SIZE__ macros.
-frtti now applies to both -fc370 and -fc370_extended (LE compatibility) modes.
-fsigned_char in DCXX. Previously,
most operations were still treated as unsigned. Name mangling
(ABI) is not affected by this change.
sizeof() operator.
__builtin_memchr() is 0, then
the result is definitionally NULL.
__attribute__((visibility("hidden")) for Systems/C
shared objects.
__builtin functions
__attribute__((always_inline)) on functions to bypass
compiler heuristics when determining if a function is eligible
for inlining.
-isystem option for providing the location of system include files.
System Include" specified
in the license key file.
-Spath option that is similar to IBM's SEARCH
option for searching for included files.
_Traits_is_pod() operator in IBM compatibility mode.
__bit_offsetof() and __bit_sizeof() operations similarly
to offsetof() and sizeof() but returning the values in bits.
-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.
-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.)
__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.
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.
unsigned long long) (64-bit) bitfields in 32-bit
compilations.
-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.
SFINAE, which involved some minor
C++ ABI changes to support decltype template parameters.
std::
namespace for situations like the <cmath> header where there are
overloaded versions supplied in C++.
-M option output was changed to be consistent with among
all the Dignus tools.
-fcpp11 option to enable support for most C++11 language
features:
>> token can be used to indicate two closing angle brackets,
in addition to the right shift operator.
static_assert declaration is supported.
friend specifier can indicate non-class types.
_Pragma is supported.
__func__ string is defined.
enum is accepted.
(long)) are now (long long).
extern template can be used to suppress instantiation.
typename can appear outside of a template.
auto is a valid type specifier.
func() -> type) is supported.
decltype operator (a standardized replacement for the typeof
extension) is supported.
std::function is not).
&&) are supported.
sizeof, typeid, and decltype operators can refer to
non-static data members of classes.
nullptr keyword is supported.
final keyword may appear on class types and virtual member
functions.
using) are supported.
char16_t and char32_t types are supported, along with their matching u''/u""/U''/U"" literals.
inline namespace is supported.
type var{...};, etc.) are supported.
noexcept specifier and operator are supported (influenced by
-fimplicit_noexcept).
for (auto i : container)) are supported.
constexpr specifier is supported.
-funrestricted_unions option).
R"(...)") and UTF-8 strings (u8"...") are supported.
-march=z option was extended to become -march=zN,
where N indicates the revision number of the z/Architecture
Principles of Operation.
-mhfp-mult-add, -mgeneral-instructions-extension,
-mimmediate-extension options to control the use of the
z/Architecture instructions available with those hardware
extensions.
NIHH/NIHL/NILH/NILL and OIHH/
OIHL/OILH/OILL when z/Architecture instructions are allowed.
memset() instead of invoking the library
memset() routine in certain internal operations.
__asm__("string") syntax, applied to variables
and function declarations; basically the same as #pragma map().
#pragma pack() extensions to provide configurable support
for LE-style packing, Systems/C-style packing, or GCC-style packing.
#pragma export and _Export for ELF (z/TPF and z/Linux)
objects.
#define values to the -E output.
__local/__remote qualifiers in more positions.
#pragma linkage("OS") now implies __local.
#pragma prolkey/epilkey now imply that the function
cannot be inlined.
#pragma options(inline)/#pragma options(noinline)
__COUNTER__ predefined macro extension.
#pragma variable(name, RENT) and #pragma variable(name, NORENT)
strlen().
strcat()/memchr() will use string instructions if
they are allowed.
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.
memcpy() is a (non-constant)
unsigned character, the compiler will generate a single EXecuted
MVC instruction as the length cannot be longer than 256.
__ptr31/__ptr64
qualifiers even if they are not defined through a typedef.
__ptr31 and
__ptr64.
__attribute__((__packed__)).
A/E prefix on string/character literals to
specify ASCII or EBCDIC independently of -fasciiout.
__asmval() values.
__370__ predefined macro as the IBM compiler does.
TML instruction for situations like:
if(x & val) {
LTRs after
certain arithmetic and logical operations.
#pragma runopts(POSIX(ON/OFF)) in IBM compatibility
mode.
volatile data references, forcing them
to be in memory and loaded/stored at each reference.
-march=esa390 or later
is enabled.
__int8/__int16/__int32 and __int64
builtin types.
-fpack option to specify per-compilation structure member
alignment.
#include files from PDS members under OpenEdition.
-frsa=NNN to provide the user a mechanism
for defining the per-function register-save-area.
-fc370=z1r2i
(or later) is enabled.
"OS" and extern "PLI" linkages.
long double) data type.
-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.
__rent and __norent keywords
applied to data.
-march=zarch is specified, the compiler will predefine
the macro _LP64 to 1; otherwise, it defines the _ILP32 macro to 1.
-fc370 is not specified, the compiler recognizes
#pragma pack(pop) as a equivalent to #pragma pack(reset).
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.
-fc370=z1r2 option, to indicate compatibility with the
IBM V1R2 z/OS compiler.
-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.)
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.
-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.
-fstructmap/-fno_structmap option to enable/disable the
"structure map" portion of the listing.
-fasmcomm option in the C++ compiler, which describes
how the original C++ lines should appear in the generated
assembler output.
-fasmlnno option in the C++ compiler. This causes
the codegenerator to generate comments detailing the line number
in the generated assembler source.
-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.
-fopts[=macro] and -fendmacro[=text] option in the C++ compiler.
-fexportall option in C++ compiler (in IBM mode.)
-fdollar option in the C++ compiler - allows '$' in
identifiers.
#if 0 or 1
#pragma ident and #ident which
place text characters into the generated object.
-O option to engage optimizations.
As well as the new features of the C compiler , Systems/C++ V1.60 provides the following enhancements
-fquiet option, which suppresses the banner messages
-march=zarch option:
extern "align4" linkage for C++
-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.
-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
-flinux mode. C and C++ code compiled with
-flinux is now
directly debuggable by the Linux debugger gdb.
-fpic and -fPIC for Linux/390 and z/Linux.