|
|
HP C
|
Previous | Contents | Index |
This function removes the first entry from a quadword queue in an indivisible manner. This operation is interlocked against similar operations by other processors or devices in the system. This function must have write access to the header and queue entries. All parts of the queue must be memory resident.
This function has the following format:
int __PAL_REMQHIQR (void *head, void **removed_entry); /* At head, interlocked resident */ |
head
A pointer to the queue header. The header must be aligned on an octaword boundary.removed_entry
A pointer to the address of the entry removed from the queue.
There are four possible return values:
This function removes the last entry from a longword queue in an indivisible manner. This operation is interlocked against similar operations by other processors or devices in the system. This function must have write access to the header and queue entries.
This function has the following format:
int __PAL_REMQTIL (void *head, void **removed_entry); /* At tail, interlocked */ |
head
A pointer to the queue header. The header must be aligned on a quadword boundary.removed_entry
A pointer to the address of the entry removed from the queue.
There are four possible return values:
This function removes the last entry from a longword queue in an indivisible manner. This operation is interlocked against similar operations by other processors or devices in the system. This function must have write access to the header and queue entries. All parts of the queue must be memory resident.
This function has the following format:
int __PAL_REMQTILR (void *head, void **removed_entry); /* At tail, interlocked resident */ |
head
A pointer to the queue header. The header must be aligned on a quadword boundary.removed_entry
A pointer to the address of the entry removed from the queue.
There are four possible return values:
This function removes the last entry from a quadword queue in an indivisible manner. This operation is interlocked against similar operations by other processors or devices in the system. This function must have write access to the header and queue entries.
This function has the following format:
int __PAL_REMQTIQ (void *head, void **removed_entry); /* At tail, interlocked */ |
head
A pointer to the queue header. The header must be aligned on an octaword boundary.removed_entry
A pointer to the address of the entry removed from the queue.
There are four possible return values:
This function removes the last entry from a quadword queue in an indivisible manner. This operation is interlocked against similar operations by other processors or devices in the system. This function must have write access to the header and queue entries. All parts of the queue must be memory resident.
This function has the following format:
int __PAL_REMQTIQR (void *head, void **removed_entry); /* At tail, interlocked resident */ |
head
A pointer to the queue header. The header must be aligned on an octaword boundary.removed_entry
A pointer to the address of the entry removed from the queue.
There are four possible return values:
This function removes an entry from a longword queue. This function must have write access to header and queue entries.
This function has the following format:
int _PAL_REMQUEL (void *entry, void **removed_entry); |
entry
A pointer to the queue entry to be removed.removed_entry
A pointer to the address of the entry removed from the queue.
There are three possible return values:
This function removes an entry from a longword queue deferred. This function must have write access to header and queue entries.
This function has the following format:
int __PAL_REMQUEL_D (void **entry, void **removed_entry); /* Deferred */ |
entry
A pointer to a pointer to the queue entry to be removed.removed_entry
A pointer to the address of the entry removed from the queue.
There are three possible return values:
This function removes an entry from a quadword queue. This function must have write access to header and queue entries.
This function has the following format:
int __PAL_REMQUEQ (void *entry, void **removed_entry); |
entry
A pointer to the queue entry to be removed.removed_entry
A pointer to the address of the entry removed from the queue.
There are three possible return values:
This function removes an entry from a quadword queue deferred. This function must have write access to header and queue entries.
This function has the following format:
int __PAL_REMQUEQ_D (void **entry, void **removed_entry); /* Deferred */ |
entry
A pointer to a pointer to the queue entry to be removed.removed_entry
A pointer to the address of the entry removed from the queue.
There are three possible return values:
This function returns ownership of the data structure that contains the current hardware privileged context (the HWPCB) to the operating system and passes ownership of the new HWPCB to the processor.
This function has the following format:
void __PAL_SWPCTX (void *address); |
address
A pointer to the new HWPCB.
This function swaps the previous state of the Asynchronous System Trap (AST) enable bit for the new state. The new state is supplied in bit 0 of new_state_mask. The previous state is returned, zero-extended.
A check is made to determine if an AST is pending. If the enabling conditions are present for an AST at the completion of this instruction, the AST occurs before the next instruction.
This function has the following format:
unsigned int __PAL_SWASTEN (int new_state_mask); |
new_state_mask
An integer whose 0 bit is the new state of the AST enable bit.
This function writes the low-order three bits of mask into the Processor Status software field (PS<SW>).
This function has the following format:
void __PAL_WR_PS_SW (int mask); |
mask
An integer whose low-order three bits are written into PS<SW>.
The _popcnt built-in function returns the number of "1" bits (0 to 64) in its argument. For example, _popcnt(12) returns 2.
This function has the following format:
int64 _popcnt (unsigned int64); |
The _poppar built-in function returns 1 if the number of "1" bits in its argument is odd; otherwise it returns 0. For example, _poppar(12) returns 0.
This function has the following format:
int64 _poppar (unsigned int64); |
The __RPCC function reads the current process cycle counter.
This function has the following format:
uint64 __RPCC (void); |
The __SIN built-in is functionally equivalent to its counterpart, sin , in the standard header file <math.h> .
Its format is also the same:
#include <math.h> double __SIN (double x); |
x
A radian value.
This built-in offers performance improvements because there is less call overhead associated with its use.
If you include <math.h> , the built-in is automatically used for all occurrences of sin . To disable the built-in, use #undef sin .
The following built-in functions provide single-precision, floating-point chopped arithmetic:
__ADDF_C | __ADDS_C | __SUBF_C | __SUBS_C |
__MULF_C | __MULS_C | __DIVF_C | __DIVS_C |
They have the following format:
float __op{F,S}_C (float operand1, float operand2); |
Where op is one of ADD, SUB, MUL, DIV, and {F,S} represents VAX or IEEE floating-point arithmetic, respectively.
The result of the arithmetic operation is returned.
The __INTERLOCKED_TESTBITCC_QUAD function performs the following functions in interlocked fashion:
This function has the following formats:
int __INTERLOCKED_TESTBITCC_QUAD (volatile void *address, int bit_position); int __INTERLOCKED_TESTBITCC_QUAD_RETRY (volatile void *address, int bit_position, int retry, int *status); |
address
The quadword-aligned base address of the bit field.bit_position
The position within the field of the bit that you want cleared, in the range of 0 to 63.retry
A retry count of type int that indicates the number of times the operation is attempted (which is at least once, even if the retry argument is 0). If the operation cannot be performed successfully in the specified number of retries, the function returns without updating the quadword.status
A pointer to an integer that is set to 0 if the operation did not succeed within the specified number of retries, and set to 1 if the operation succeeded.
The __TESTBITCCI function performs the following operations in interlocked fashion:
This function has the following format:
int __TESTBITCCI (void *address, int position, ...); |
address
The base address of the field.position
The position within the field of the bit that you want cleared....
An optional retry count of type int . If specified, the retry count indicates the number of times the operation is attempted (which will be at least once, even if the count argument is 0).
The __INTERLOCKED_TESTBITSS_QUAD function performs the following functions in interlocked fashion:
This function has the following formats:
int __INTERLOCKED_TESTBITSS_QUAD (volatile void *address, int bit_position); int __INTERLOCKED_TESTBITSS_QUAD_RETRY (volatile void *address, int expression, int retry, int *status); |
address
The quadword-aligned base address of the bit field.bit_position
The position within the field of the bit that you want cleared, in the range of 0 to 63.retry
A retry count of type int that indicates the number of times the operation is attempted (which is at least once, even if the retry argument is 0). If the operation cannot be performed successfully in the specified number of retries, the function returns without updating the longword.status
A pointer to an integer that is set to 0 if the operation did not succeed within the specified number of retries, and set to 1 if the operation succeeded.
The __TESTBITSSI function performs the following operations in interlocked fashion:
This function has the following format:
int __TESTBITSSI (void *address, int position, ...); |
address
The base address of the field.position
The position within the field of the bit that you want set....
An optional retry count of type int . If specified, the retry count indicates the number of times the operation is attempted (which will be at least once, even if the count argument is 0).
The _trailz built-in function returns the number of trailing zeros (counting after the least significant set bit to the least significant bit position) in its argument. For example, _trailz(2) returns 1, and _trailz(0) returns 64.
This function has the following format:
int64 _trailz (unsigned int64); |
The __TRAPB function allows software to guarantee that, in a pipeline implementation, all previous arithmetic instructions will be completed without incurring any arithmetic traps before any instructions after the TRAPB instruction are issued.
This function has the following format:
void __TRAPB (void); |
The __UMULH function performs a quadword multiply high instruction.
This function has the following format:
uint64 __UMULH (uint64 operand1, uint64 operand2); |
operand1
A 64-bit unsigned integer.operand2
A 64-bit unsigned integer.
The two operands are multiplied as unsigned integers to produce a 128-bit result. The high-order 64 bits are returned. Note that uint64 is a typedef for the Alpha data type unsigned __int64 .
The HP C built-in functions available on OpenVMS Alpha systems are also available on I64 systems, with some differences, as described in this section. This section also describes built-in functions that are specific to I64 systems.
The <builtins.h> header file contains comments noting which built-in functions are not available or are not the preferred form for I64 systems. The compiler issues diagnostics where using a different built-in function for I64 systems would be preferable.
The comments in <builtins.h> reflect only what is explicitly present in that header file itself, and in the compiler implementation. You should also consult the content and comments in <pal_builtins.h> to determine more accurately what functionality is effectively provided by including <builtins.h> . For example, if a program explicitly declares one of the Alpha built-in functions and invokes it without having included <builtins.h> , the compiler might issue the BIFNOTAVAIL error message, regardless of whether or not the function is available through a system service. If the compilation does include <builtins.h> , and BIFNOTAVAIL is issued, then either there is no support at all for the built-in function or a new version of <pal_builtins.h> is needed. |
Here is a summary of these differences on I64 systems:
__int64 __RETURN_ADDRESS(void); |
Previous | Next | Contents | Index |
|