Nios® II Processor Reference Guide

ID 683836
Date 8/28/2023
Public
Document Table of Contents

7.5.2. Return Values

Return values of types up to 8 bytes are returned in r2 and r3. For return values greater than 8 bytes, the caller must allocate memory for the result and must pass the address of the result memory as a hidden zero argument.

The hidden zero argument is best explained through an example.

Returned struct

/* b() computes a structure-type result and returns it */
STRUCT b(int i, int j)
{
   ...
   return result;
}
void a(...)
{
   ...
   value = b(i, j);
}

In the example above, if the result type is no larger than 8 bytes, b() returns its result in r2 and r3.

If the return type is larger than 8 bytes, the Nios II C/C++ compiler treats this program as if a() had passed a pointer to b(). The example below shows how the Nios II C/C++ compiler sees the code in the Returned Struct example above.

Returned struct is Larger than 8 Bytes

void b(STRUCT *p_result, int i, int j)
{
   ...
   *p_result = result;
}

void a(...)
{
   STRUCT value;
   ...
   b(&value, i, j);
}