FR-V Built-in Functions#
GCC provides many FR-V-specific built-in functions. In general,
these functions are intended to be compatible with those described
by FR-V Family, Softune C/C++ Compiler Manual (V6), Fujitsu
Semiconductor. The two exceptions are __MDUNPACKH
and
__MBTOHE
, the GCC forms of which pass 128-bit values by
pointer rather than by value.
Most of the functions are named after specific FR-V instructions. Such functions are said to be ‘directly mapped’ and are summarized here in tabular form.
Argument Types#
The arguments to the built-in functions can be divided into three groups: register numbers, compile-time constants and run-time values. In order to make this classification clear at a glance, the arguments and return values are given the following pseudo types:
Pseudo type |
Real C type |
Constant? |
Description |
---|---|---|---|
|
|
No |
an unsigned halfword |
|
|
No |
an unsigned word |
|
|
No |
a signed word |
|
|
No |
an unsigned doubleword |
|
|
No |
a signed doubleword |
|
|
Yes |
an integer constant |
|
|
Yes |
an ACC register number |
|
|
Yes |
an IACC register number |
These pseudo types are not defined by GCC, they are simply a notational convenience used in this manual.
Arguments of type uh
, uw1
, sw1
, uw2
and sw2
are evaluated at run time. They correspond to
register operands in the underlying FR-V instructions.
const
arguments represent immediate operands in the underlying
FR-V instructions. They must be compile-time constants.
acc
arguments are evaluated at compile time and specify the number
of an accumulator register. For example, an acc
argument of 2
selects the ACC2 register.
iacc
arguments are similar to acc
arguments but specify the
number of an IACC register. See see Other Built-in Functions Provided by GCC
for more details.
Directly-Mapped Integer Functions#
The functions listed below map directly to FR-V I-type instructions.
Function prototype |
Example usage |
Assembly output |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Directly-Mapped Media Functions#
The functions listed below map directly to FR-V M-type instructions.
Function prototype |
Example usage |
Assembly output |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Raw Read/Write Functions#
This sections describes built-in functions related to read and write
instructions to access memory. These functions generate
membar
instructions to flush the I/O load and stores where
appropriate, as described in Fujitsu’s manual described above.
unsigned char __builtin_read8 (void *data);
unsigned short __builtin_read16 (void *data);
unsigned long __builtin_read32 (void *data);
unsigned long long __builtin_read64 (void *data);
void __builtin_write8 (void *data, unsigned char datum);
void __builtin_write16 (void *data, unsigned short datum);
void __builtin_write32 (void *data, unsigned long datum);
void __builtin_write64 (void *data, unsigned long long datum);
Other Built-in Functions#
This section describes built-in functions that are not named after a specific FR-V instruction.
-
sw2 __IACCreadll(iacc reg)#
Return the full 64-bit value of IACC0. The
reg
argument is reserved for future expansion and must be 0.
-
sw1 __IACCreadl(iacc reg)#
Return the value of IACC0H if
reg
is 0 and IACC0L ifreg
is 1. Other values ofreg
are rejected as invalid.
-
void __IACCsetll(iacc reg, sw2 x)#
Set the full 64-bit value of IACC0 to
x
. Thereg
argument is reserved for future expansion and must be 0.
-
void __IACCsetl(iacc reg, sw1 x)#
Set IACC0H to
x
ifreg
is 0 and IACC0L tox
ifreg
is 1. Other values ofreg
are rejected as invalid.
-
void __data_prefetch0(const void *x)#
Use the
dcpl
instruction to load the contents of addressx
into the data cache.
-
void __data_prefetch(const void *x)#
Use the
nldub
instruction to load the contents of addressx
into the data cache. The instruction is issued in slot I1.