-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) {
LTR
s 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=z1r2
i
(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.