Am 30.03.2023 um 21:32 schrieb Paul Gilmartin:
What code does the compiler generate when a long scalar such as
_Decimal128 is
passed by value?
The C compiler - at least - puts the long scalar in the reg1 list where
it uses more than 4 bytes.
"call by value" in my understanding means, that values are passed, not
addressed.
With the mainframe (or z/OS and CMS) linkage convention, this means,
that values
and not addresses are in the reg1 parameter list.
Of course, the compiler can be guided by function prologues and rely on the
function
to copy from a passed address to automatic storage.
Does C use the CALL VL convention?
see above. Because the values entered into the reg1 list "by value" can
be negative integers
(or other types, which need more that 4 bytes), the VL convention cannot
be used by C callers
or C routines being called. The VL convention is not present in the more
"modern"
calling conventions like 64-bit parameter passing and XPLINK - maybe for
this reason.
The original z/OS linkage convention, honestly, restricts the parameter
passing mechanism to
call by reference. That's why it was changed - or enhanced - in the last
(20) years. In the 1960s
and 1970s, when z/OS linkage was first defined, there was only PL/1 and
Fortran (and COBOL,
of course), and they all had call by reference.
HTH, kind regards
Bernd
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN