https://sourceware.org/bugzilla/show_bug.cgi?id=31142
Robbin Ehn <rehn at rivosinc dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |rehn at rivosinc dot com
--- Comment #1 from Robbin Ehn <rehn at rivosinc dot com> ---
I'm no expert in RV ABI, but from 18.2 RVG Calling Convention:
"Values are returned from functions in integer registers a0 and a1 and
floating-point registers fa0 and fa1. Floating-point values are returned in
floating-point registers only if they are primitives or members of a struct
consisting of only one or two floating-point values. Other return values that
fit into two pointer-words are returned in a0 and a1. Larger return values are
passed entirely
in memory; the caller allocates this memory region and passes a pointer to it
as an implicit first parameter to the callee."
AFAICT they should be packed into a0+a1 seen as 8/16 byte field.
rv32 a0 would be quot and a1 would be rem
rv64 a0 low 32-bit would be quot and a0 high 32-bit would be rem
This seems to be inline with what clang do, removes sign extension, shift and
or the values in.
Did this help ?
--
You are receiving this mail because:
You are on the CC list for the bug.