Comments
Patch
===================================================================
@@ -47,22 +47,6 @@ enum rs6000_dependence_cost rs6000_sched
TargetVariable
enum rs6000_nop_insertion rs6000_sched_insert_nops = sched_finish_none
-;; IEEE quad extended precision long double.
-TargetVariable
-unsigned char rs6000_ieeequad
-
-;; Nonzero to use AltiVec ABI.
-TargetVariable
-unsigned char rs6000_altivec_abi
-
-;; Nonzero if we want SPE ABI extensions.
-TargetVariable
-unsigned char rs6000_spe_abi
-
-;; Nonzero if we want Darwin's struct-by-value-in-regs ABI.
-TargetVariable
-unsigned char rs6000_darwin64_abi
-
;; Non-zero to allow overriding loop alignment.
TargetVariable
unsigned char can_override_loop_align
@@ -385,9 +369,37 @@ mdebug=
Target RejectNegative Joined
-mdebug= Enable debug output
-mabi=
-Target RejectNegative Joined
--mabi= Specify ABI to use
+mabi=altivec
+Target RejectNegative Var(rs6000_altivec_abi) Save
+Use the AltiVec ABI extensions
+
+mabi=no-altivec
+Target RejectNegative Var(rs6000_altivec_abi, 0)
+Do not use the AltiVec ABI extensions
+
+mabi=spe
+Target RejectNegative Var(rs6000_spe_abi) Save
+Use the SPE ABI extensions
+
+mabi=no-spe
+Target RejectNegative Var(rs6000_spe_abi, 0)
+Do not use the SPE ABI extensions
+
+; These are here for testing during development only, do not document
+; in the manual please.
+
+; If we want Darwin's struct-by-value-in-regs ABI.
+mabi=d64
+Target RejectNegative Undocumented Warn(using darwin64 ABI) Var(rs6000_darwin64_abi) Save
+
+mabi=d32
+Target RejectNegative Undocumented Warn(using old darwin ABI) Var(rs6000_darwin64_abi, 0)
+
+mabi=ieeelongdouble
+Target RejectNegative Undocumented Warn(using IEEE extended precision long double) Var(rs6000_ieeequad) Save
+
+mabi=ibmlongdouble
+Target RejectNegative Undocumented Warn(using IBM extended precision long double) Var(rs6000_ieeequad, 0)
mcpu=
Target RejectNegative Joined
===================================================================
@@ -2665,6 +2665,11 @@ rs6000_option_override_internal (bool gl
warning (0, "-malign-power is not supported for 64-bit Darwin;"
" it is incompatible with the installed C and C++ libraries");
+ if (global_options_set.x_rs6000_spe_abi
+ && rs6000_spe_abi
+ && !TARGET_SPE_ABI)
+ error ("not configured for SPE ABI");
+
/* Numerous experiment shows that IRA based loop pressure
calculation works better for RTL loop invariant motion on targets
with enough (>= 32) registers. It is an expensive optimization.
@@ -4340,65 +4345,13 @@ rs6000_handle_option (struct gcc_options
break;
#endif
- case OPT_mabi_:
- if (!strcmp (arg, "altivec"))
- {
- opts_set->x_rs6000_altivec_abi = true;
- opts->x_rs6000_altivec_abi = 1;
-
- /* Enabling the AltiVec ABI turns off the SPE ABI. */
- opts->x_rs6000_spe_abi = 0;
- }
- else if (! strcmp (arg, "no-altivec"))
- {
- opts_set->x_rs6000_altivec_abi = true;
- opts->x_rs6000_altivec_abi = 0;
- }
- else if (! strcmp (arg, "spe"))
- {
- opts_set->x_rs6000_spe_abi = true;
- opts->x_rs6000_spe_abi = 1;
- opts->x_rs6000_altivec_abi = 0;
- if (!TARGET_SPE_ABI)
- error_at (loc, "not configured for ABI: '%s'", arg);
- }
- else if (! strcmp (arg, "no-spe"))
- {
- opts_set->x_rs6000_spe_abi = true;
- opts->x_rs6000_spe_abi = 0;
- }
-
- /* These are here for testing during development only, do not
- document in the manual please. */
- else if (! strcmp (arg, "d64"))
- {
- opts->x_rs6000_darwin64_abi = 1;
- warning_at (loc, 0, "using darwin64 ABI");
- }
- else if (! strcmp (arg, "d32"))
- {
- opts->x_rs6000_darwin64_abi = 0;
- warning_at (loc, 0, "using old darwin ABI");
- }
-
- else if (! strcmp (arg, "ibmlongdouble"))
- {
- opts_set->x_rs6000_ieeequad = true;
- opts->x_rs6000_ieeequad = 0;
- warning_at (loc, 0, "using IBM extended precision long double");
- }
- else if (! strcmp (arg, "ieeelongdouble"))
- {
- opts_set->x_rs6000_ieeequad = true;
- opts->x_rs6000_ieeequad = 1;
- warning_at (loc, 0, "using IEEE extended precision long double");
- }
+ case OPT_mabi_altivec:
+ /* Enabling the AltiVec ABI turns off the SPE ABI. */
+ opts->x_rs6000_spe_abi = 0;
+ break;
- else
- {
- error_at (loc, "unknown ABI specified: '%s'", arg);
- return false;
- }
+ case OPT_mabi_spe:
+ opts->x_rs6000_altivec_abi = 0;
break;
case OPT_mcpu_: