Previous | Contents | Index |
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 one of 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 __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); |
6.2.1.95 Unsigned Quadword Multiply High ( __UMULH)
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
.
6.2.2 Built-In Functions for OpenVMS VAX Systems (VAX ONLY)
The following sections describe the DEC C built-in functions available on OpenVMS VAX systems.
The DEC C built-in functions use enumerated
typedefs
to define possible return values. We recommend that you use the
enumerated types to store and compare return values.
6.2.2.1 Allocate Bytes from Stack ( __ALLOCA)
The __ALLOCA function allocates n bytes from the stack.
This function has the following format:
void *__ALLOCA (unsigned int n); |
n
The number of bytes to be allocated.
A pointer to the allocated memory is returned.
6.2.2.2 Add Aligned Word Interlocked ( _ADAWI)
The _ADAWI function adds its source operand to the destination. This function is interlocked against similar operations by other processors or devices in the system.
The _ADAWI function has the following format:
typedef enum { _adawi_sum_neg=--1, _adawi_sum_zero, _adawi_sum_pos} _ADAWI_STATUS; _ADAWI_STATUS _ADAWI (short __src, short *__dest); |
__src
The value to be added to the destination.__dest
A pointer to the destination. The destination must be aligned on a word boundary. (You can achieve alignment using the _align storage-class modifier.)
There are three possible return values:
The _BBCCI function performs the following functions in interlocked fashion:
The _BBCCI function has the following format:
typedef enum { _bbcci_oldval_1, _bbcci_oldval_0} _BBCCI_STATUS; _BBCCI_STATUS _BBCCI (int __position, void *__address); |
__position
The position of the bit within the field.__address
The base address of the field.
The return value of
_bbcci_oldval_1
(0) or
_bbcci_oldval_0
(1) is the complement of the value of the specified bit before being
cleared.
6.2.2.4 Branch on Bit Set-Set Interlocked ( _BBSSI)
The _BBSSI function performs the following functions in interlocked fashion:
The _BBSSI function has the following format:
typedef enum { _bbssi_oldval_0, _bbcci_oldval_1} _BBSSI_STATUS; _BBSSI_STATUS _BBSSI (int __position, void *__address); |
__position
The position of the bit within the field.__address
The base address of the field.
The return value of
_bbssi_oldval_0
(0) or
_bbssi_oldval_1
(1) is the value of the specified bit before being set.
6.2.2.5 Find First Clear Bit ( _FFC)
The _FFC function finds the position of the first clear bit in a field. The bits are tested for clear status starting at bit 0 and extending to the highest bit in the field.
The _FFC function has the following format:
typedef enum { _ff_bit_not_found, _ff_bit_found} _FF_STATUS; _FF_STATUS _FFC (int __start, char __size, const void *__base, int *__position); |
__start
The start position of the field.__size
The size of the field, in bits. The size must be a value from 0 to 32 bits.__base
The address of the field.__position
The address of an integer to receive the position of the clear bit. If no bit is clear, the integer is set to the position of the first bit past the last bit tested.
There are two possible return values:
The _FFS function finds the position of the first set bit in a field. The bits are tested for set status starting at bit 0 and extending to the highest bit in the field.
The _FFS function has the following format:
typedef enum { _ff_bit_not_found, _ff_bit_found} _FF_STATUS; _FF_STATUS _FFS (int __start, char __size, const void *__base, int *__position); |
__start
The start position of the field.__size
The size of the field, in bits. The size must be a value from 0 to 32 bits.__base
The address of the field.__position
The address of an integer to receive the position of the set bit. If no bit is set, the integer is set to the position of the first bit past the last bit tested.
There are two possible return values:
The _HALT function halts the processor when executed by a process running in kernel mode. This is a privileged function.
The _HALT function has the following format:
void _HALT (void); |
6.2.2.8 Insert Entry into Queue at Head Interlocked ( _INSQHI)
The _INSQHI function inserts an entry into the front of a queue in an indivisible manner. This operation is interlocked against similar operations by other processors or devices in the system.
The _INSQHI function has the following format:
typedef enum {_insqi_inserted_many, _insqi_not_inserted, _insqi_inserted_only} _INSQI_STATUS; _INSQI_STATUS _INSQHI (void *__new_entry, void *__head); |
__new_entry
A pointer to the new entry to be inserted. The entry must be aligned on a quadword boundary. (You can achieve alignment using the _align storage-class modifier.)__head
A pointer to the queue header. The header must be aligned on a quadword boundary. (You can achieve alignment using the _align storage-class modifier.)
There are three possible return values:
The _INSQTI function inserts an entry at the end of a queue in an indivisible manner. This operation is interlocked against similar operations by other processors or devices in the system.
The _INSQTI function has the following format:
typedef enum {_insqi_inserted_many, _insqi_not_inserted, _insqi_inserted_only} _INSQI_STATUS; _INSQI_STATUS _INSQTI (void *__new_entry, void *__head); |
__new_entry
A pointer to the new entry to be inserted. The entry must be aligned on a quadword boundary. (You can achieve alignment using the _align storage-class modifier.)__head
A pointer to the queue header. The header must be aligned on a quadword boundary. (You can achieve alignment using the _align storage-class modifier.)
There are three possible return values:
The _INSQUE function inserts a new entry into a queue following an existing entry.
The _INSQUE function has the following format:
typedef enum { _insque_inserted_only, _insque_inserted_many} _INSQUE_STATUS; _INSQUE_STATUS _INSQUE (void *__new_entry, void *__predecessor); |
__new_entry
A pointer to the new entry to be inserted.__predecessor
A pointer to an existing entry in the queue.
There are two possible return values:
The _LOCC function locates the first character in a string matching the target character.
The _LOCC function has the following format:
unsigned short _LOCC (char __target, unsigned short __length, const char *__string, ...); |
__target
The character being searched.__length
The length of the searched string. The length must be a value from 0 to 65,535.__string
A pointer to the searched string....
An optional position argument, which is a pointer to a pointer to char . If the searched character is found, this output argument is updated to point to the character found. If the character is not found, this argument is set to the address one byte beyond the string.
If the target character is found, the return value is the number of
bytes remaining in the string; otherwise, the return value is 0.
6.2.2.12 Move from Processor Register ( _MFPR)
The _MFPR function returns the contents of a processor register. This is a privileged function.
The _MFPR function has the following formats:
void _MFPR (int register_num, int *destination); void _MFPR (int register_num, unsigned int *destination); |
register_num
The number of the privileged register to be read.destination
A pointer to the location receiving the value from the register. This location can be a signed or unsigned int .
The _MOVC3 function copies a block of memory.
The _MOVC3 function has the following format:
void _MOVC3 (unsigned short __length, const char *__src, char *__dest, ...); |
__length
The length of the source string, in bytes. The length must be a value from 0 to 65,535.__src
A pointer to the source string.__dest
A pointer to the destination memory....
One or two optional arguments:
- endscr
A pointer to a pointer to char . The _MOVC3 function sets this output argument to the address of the byte beyond the source string. Although this is an optional argument, it is required if enddest is specified.- enddest
A pointer to a pointer to char . The _MOVC3 function sets this output argument to the address of the byte beyond the destination string.
The _MOVC5 function allows the source string specified by the pointer and length pair to be moved to the destination string specified by the other pointer and length pair. If the source string is smaller than the destination string, the destination string is padded with the specified character.
The _MOVC5 function has the following format:
void _MOVC5 (unsigned short __srclen, const char *__src, char __fill, unsigned short __destlen, char *__dest, ...); |
__srclen
The length of the source string, in bytes. The length must be a value from 0 to 65,535.__src
A pointer to the source string.__fill
The fill character to be used if the source string is smaller than the destination string.__destlen
The length of the destination string, in bytes. The length must be a value from 0 to 65,535.__dest
A pointer to the destination string....
One to three optional arguments:
- unmoved_src
A pointer to an unsigned short integer. The _MOVC5 function sets this output argument to the number of unmoved bytes remaining in the source string. This argument is optional if the endscr argument is not specified.- endscr
A pointer to a pointer to char . The _MOVC5 function sets this output argument to the address of the byte beyond the source string. Although this is an optional argument, it is required if enddest is specified.- enddest
A pointer to a pointer to char . The _MOVC5 function sets this output argument to the address of the byte beyond the destination string.
The _MOVPSL function stores the value of the Processor Status Longword (PSL).
The _MOVPSL function has the following format:
void _MOVPSL (void *__psl); |
__psl
The address of the location for storing the value of the PSL.
The _MTPR function loads a value into one of the special processor registers. It is a privileged function.
The _MTPR function has the following format:
int _MTPR (int src, int register_num); |
src
The value to store into the processor register.register_num
The number of a privileged register to be updated.
The return value is the V condition flag from the Processor Status
Longword (PSL).
6.2.2.17 Probe Read Accessibility ( _PROBER)
The _PROBER function checks to see if you can read the first and last byte of the given address and length pair.
The _PROBER function has the following format:
typedef enum { _probe_not_accessible, _probe_accessible} _PROBE_STATUS; _PROBE_STATUS _PROBER (char __mode, unsigned short __length, const void *__address); |
__mode
The processor mode used for checking the access.__length
The length of the memory segment, in bytes. The length must be a value from 0 to 65,535.__address
The pointer to the memory segment to be tested for read access.
There are two possible return values:
Previous | Next | Contents | Index |