aix: Permit use of AIX Vector extended ABI mode
AIX only permits use of Altivec VSRs 20-31 in a Vector Extended ABI mode. This patch explicitly enables use of the VSRs using the new -mabi=vec-extabi command line option also implemented in LLVM for AIX. Bootstrapped on powerpc-ibm-aix7.2.3.0 and powerpc64le-linux-gnu. gcc/ChangeLog: * config/rs6000/rs6000.opt (mabi=vec-extabi): New. (mabi=vec-default): New. * config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Define __EXTABI__ for AIX Vector extended ABI. * config/rs6000/rs6000.c (rs6000_debug_reg_global): Print AIX Vector extabi info. (conditional_register_usage): If AIX vec_extabi enabled, vs20-vs31 are non-volatile. * doc/invoke.texi (PowerPC mabi): Add AIX vec-extabi and vec-default.
This commit is contained in:
parent
92dd3e71f9
commit
2e7750cb51
@ -483,6 +483,8 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags,
|
||||
/* Define this when supporting context-sensitive keywords. */
|
||||
if (!flag_iso)
|
||||
rs6000_define_or_undefine_macro (define_p, "__APPLE_ALTIVEC__");
|
||||
if (rs6000_aix_extabi)
|
||||
rs6000_define_or_undefine_macro (define_p, "__EXTABI__");
|
||||
}
|
||||
/* Note that the OPTION_MASK_VSX flag is automatically turned on in
|
||||
the following conditions:
|
||||
|
@ -2512,6 +2512,9 @@ rs6000_debug_reg_global (void)
|
||||
if (rs6000_altivec_abi)
|
||||
fprintf (stderr, DEBUG_FMT_S, "altivec_abi", "true");
|
||||
|
||||
if (rs6000_aix_extabi)
|
||||
fprintf (stderr, DEBUG_FMT_S, "AIX vec-extabi", "true");
|
||||
|
||||
if (rs6000_darwin64_abi)
|
||||
fprintf (stderr, DEBUG_FMT_S, "darwin64_abi", "true");
|
||||
|
||||
@ -9815,7 +9818,7 @@ rs6000_conditional_register_usage (void)
|
||||
call_used_regs[i] = 1;
|
||||
|
||||
/* AIX reserves VR20:31 in non-extended ABI mode. */
|
||||
if (TARGET_XCOFF)
|
||||
if (TARGET_XCOFF && !rs6000_aix_extabi)
|
||||
for (i = FIRST_ALTIVEC_REGNO + 20; i < FIRST_ALTIVEC_REGNO + 32; ++i)
|
||||
fixed_regs[i] = call_used_regs[i] = 1;
|
||||
}
|
||||
|
@ -352,6 +352,7 @@ mdebug=
|
||||
Target RejectNegative Joined
|
||||
-mdebug= Enable debug output.
|
||||
|
||||
; Altivec ABI
|
||||
mabi=altivec
|
||||
Target RejectNegative Var(rs6000_altivec_abi) Save
|
||||
Use the AltiVec ABI extensions.
|
||||
@ -360,6 +361,16 @@ mabi=no-altivec
|
||||
Target RejectNegative Var(rs6000_altivec_abi, 0)
|
||||
Do not use the AltiVec ABI extensions.
|
||||
|
||||
; AIX Extended vector ABI
|
||||
mabi=vec-extabi
|
||||
Target RejectNegative Var(rs6000_aix_extabi, 1) Save
|
||||
Use the AIX Vector Extended ABI
|
||||
|
||||
mabi=vec-default
|
||||
Target RejectNegative Var(rs6000_aix_extabi, 0)
|
||||
Do not use the AIX Vector Extended ABI
|
||||
|
||||
; PPC64 Linux ELF ABI
|
||||
mabi=elfv1
|
||||
Target RejectNegative Var(rs6000_elf_abi, 1) Save
|
||||
Use the ELFv1 ABI.
|
||||
|
@ -27509,9 +27509,10 @@ SVR4 ABI)@.
|
||||
@item -mabi=@var{abi-type}
|
||||
@opindex mabi
|
||||
Extend the current ABI with a particular extension, or remove such extension.
|
||||
Valid values are @samp{altivec}, @samp{no-altivec},
|
||||
Valid values are: @samp{altivec}, @samp{no-altivec},
|
||||
@samp{ibmlongdouble}, @samp{ieeelongdouble},
|
||||
@samp{elfv1}, @samp{elfv2}@.
|
||||
@samp{elfv1}, @samp{elfv2},
|
||||
and for AIX: @samp{vec-extabi}, @samp{vec-default}@.
|
||||
|
||||
@item -mabi=ibmlongdouble
|
||||
@opindex mabi=ibmlongdouble
|
||||
|
Loading…
Reference in New Issue
Block a user