| |||
| Home > Compiler Coding Practices > Functions that return multiple values through registers | |||
In C and C++, one way of returning multiple values from a function is to use a structure. Normally, structures are returned on the stack, with all the associated expense this entails.
To reduce memory traffic and reduce code size, the compiler
enables multiple values to be returned from a function through the
registers. Up to four words can be returned from a function in a struct by
qualifying the function with __value_in_regs.
For example:
typedef struct s_coord { int x; int y; } coord;
coord reflect(int x1, int y1) __value_in_regs;
__value_in_regs can be used anywhere where
multiple values have to be returned from a function. Examples include:
returning multiple values from C and C++ functions
returning multiple values from embedded assembly language functions
making supervisor calls
re-implementing __user_initial_stackheap.
Compiler Reference: