Nios II Classic Processor Reference Guide

ID 683620
Date 10/28/2016
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); }