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)
- 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.
__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.