CELQPRLG provides a Language Environment-conforming
prolog for AMODE 64 routines. The macro generates reentrant code.
You must use CELQPRLG in conjunction with the CELQEPLG macro.
CELQPRLG assumes that the registers contain what is described in Register conventions for AMODE 64 assembler routines.
Syntax
>>-name--CELQPRLG--+----------+--------------------------------->
'-ENTNAME=-'
>--+----------------------------+--+--------------+------------->
| .-160 bytes-. | '-,--PARMWRDS=-'
'-,--DSASIZE=--+-size------+-'
>--+---------------------------+--+-----------+----------------->
| .-8--------. | '-,--PSECT=-'
'-,--BASEREG=--+-register-+-'
>--+-----------------------+--+---------------------+----------->
'-,--PARMREG=--register-' | .-NO--. |
'-,--EXPORT=--+-YES-+-'
>--+---------------------------+--+------------------+---------><
| .-NO-----. | '-,--GT2KSTK=--YES-'
'-,--FETCHABLE=--+-RENT---+-'
'-NORENT-'
- name
- If ENTNAME=epname is specified, then name is
used as the name of the 64-bit XPLINK entry
marker, else name is the name of the entry
point and name#C is used as the name of
the 64-bit XPLINK entry
marker.
- ENTNAME
- The optional name of the entry point.
- DSASIZE
- The amount of space used by prolog code for the 64-bit XPLINK DSA (excluding
the 2K bias), the largest parameter list built by this routine, and
local automatic variables that are to be allocated for the duration
of this routine. This value will be rounded up to a multiple of 32-bytes.
If unspecified, the size of the automatic area is the size of a fixed
portion of the 64-bit XPLINK DSA without
any argument area or automatic variables (160 bytes). This is indicated
by the label CEEDSAHPSZ (in the DSA mapping generated by the CEEDSA
macro. See CEEDSA macro — Generate a DSA mapping for syntax),
and is also the minimum required size.
- PARMWRDS
- Specifies the number of 4-byte words in the input parameter list.
If this is omitted, then the routine will be treated as vararg.
- BASEREG
- Designates the required base register. The macro generates code
needed for setting the value of the register and for establishing
addressibility. The default is register 8. If register equals NONE,
no code is generated for establishing addressibility.
- PSECT
- The name to be assigned to the AMODE 64 assembler routine PSECT
area. The PSECT is used to establish this routines 64-bit XPLINK environment.
For more information about the PSECT area, see HLASM Language Reference.
- PARMREG
- Specifies the register to hold the address of the argument area
in the caller's save area.
- EXPORT
- Indicates whether this entry point will be exported. For EXPORT=NO
this entry point can only be called from other routines that are bound
into the same program object. For EXPORT=YES, this entry point will
be marked as an exported DLL function. If you want the exported name
to be a long name. mixed case, or both, follow the CELQPRLG macro
with an ALIAS statement. For more information about
on DLLs, including full sample assembler DLL routines, see Building and using AMODE 64 dynamic link libraries (DLLs).
For
the extry point to be available as an exported DLL function, you must
specify the DYNAM(DLL) binder option, and the resulting program object
must reside in a PDSE.
- FETCHABLE
- If NO is specified, then this entry point is not be marked as
fetchable. If RENT or NORENT is specified, then the CELQEPLG macro
will generate either a reentrant or non-reentrant CELQFMAN structure,
respectively, so that this entry point can be fetched.
- GT2KSTK
- If YES is specified, then an unconditional "large stack frame" prolog
is used that checks for the 64-bit XPLINK stack
floor in the LAA, instead of depending on the write-protected guard
page. This parameter must be specified if DSASIZE is greater than
2048 (that is, the 2K stack bias).
Usage notes: - The CELQPRLG macro automatically sets the module to AMODE 64 and
RMODE ANY.
- Unless otherwise indicated, no register values should be expected
to remain unchanged after the code generated by CELQPRLG has executed.
- When more than one CELQPRLG macro invocation occurs in an assembly,
it is the programmer's responsibility to code DROP statements for
the base registers set up by the previous invocation of the CELQPRLG
macro.