diff options
author | Andrew Stubbs <ams@codesourcery.com> | 2022-07-15 09:47:36 +0100 |
---|---|---|
committer | Andrew Stubbs <ams@codesourcery.com> | 2022-08-09 13:06:11 +0100 |
commit | 4e1914625dec4aa09a5671c6294e877dbf4518f5 (patch) | |
tree | 6dfe9e0822d10c9c38e88805725841dc67fc06f7 /gcc/fold-const.cc | |
parent | 9aa08cd48490183382371bff4fd53573b5adabe8 (diff) | |
download | gcc-4e1914625dec4aa09a5671c6294e877dbf4518f5.zip gcc-4e1914625dec4aa09a5671c6294e877dbf4518f5.tar.gz gcc-4e1914625dec4aa09a5671c6294e877dbf4518f5.tar.bz2 |
amdgcn: Vector procedure call ABI
Adjust the (unofficial) procedure calling ABI such that vector arguments are
passed in vector registers, not on the stack. Scalar arguments continue to
be passed in scalar registers, making a total of 12 argument registers.
The return value is also moved to a vector register (even for scalars; it
would be possible to retain the scalar location, using untyped_call, but
there's no obvious advantage in doing so).
After this change the ABI is as follows:
s0-s13 : Reserved for kernel launch parameters.
s14-s15 : Frame pointer.
s16-s17 : Stack pointer.
s18-s19 : Link register.
s20-s21 : Exec Save.
s22-s23 : CC Save.
s24-s25 : Scalar arguments. NO LONGER RETURN VALUE.
s26-s29 : Additional scalar arguments (makes 6 total).
s30-s31 : Static Chain.
v0 : Prologue/epilogue scratch.
v1 : Constant 0, 1, 2, 3, 4, ... 63.
v2-v7 : Prologue/epilogue scratch.
v8-v9 : Return value & vector arguments. NEW.
v10-v13 : Additional vector arguments (makes 6 total). NEW.
gcc/ChangeLog:
* config/gcn/gcn.cc (gcn_function_value): Allow vector return values.
(num_arg_regs): Allow vector arguments.
(gcn_function_arg): Likewise.
(gcn_function_arg_advance): Likewise.
(gcn_arg_partial_bytes): Likewise.
(gcn_return_in_memory): Likewise.
(gcn_expand_epilogue): Get return value from v8.
* config/gcn/gcn.h (RETURN_VALUE_REG): Set to v8.
(FIRST_PARM_REG): USE FIRST_SGPR_REG for clarity.
(FIRST_VPARM_REG): New.
(FUNCTION_ARG_REGNO_P): Allow vector parameters.
(struct gcn_args): Add vnum field.
(LIBCALL_VALUE): All vector return values.
* config/gcn/gcn.md (gcn_call_value): Add vector constraints.
(gcn_call_value_indirect): Likewise.
Diffstat (limited to 'gcc/fold-const.cc')
0 files changed, 0 insertions, 0 deletions