Message ID | 4C4D168F.3080708@codesourcery.com |
---|---|
State | New |
Headers | show |
On Mon, 2010-07-26 at 13:01 +0800, Chung-Lin Tang wrote: > Richard Earnshaw wrote: > > The tests should be on arm_pcs_default. If that has the value > > ARM_PCS_AAPCS_VFP then __ARM_PCS_VFP should be defined. If it has the > > value ARM_PCS_AAPCS, then __ARM_PCS should be defined. In other cases, > > I think neither should be defined (leaving the option open to create new > > pre-processor defines in future). > > > > That does leave nothing defined for the IWMMXT variant. I'm not > > entirely sure what to do about that. It appears that this just follows > > the base standard for calling, in which case __ARM_PCS probably should > > be defined, but I want to think that case through further before making > > that decision: there may be a subtlety that I've missed. > > > > R. > Hi Richard, I have update the patch as you have suggested. > Please see if this is okay. This is OK, but it needs an updated changelog entry (covering the changes to arm.c as well). R. > > Thanks, > Chung-Lin > > > plain text document attachment (pcs2.diff) > Index: arm.c > =================================================================== > --- arm.c (revision 162525) > +++ arm.c (working copy) > @@ -711,7 +711,7 @@ > the next function. */ > static int after_arm_reorg = 0; > > -static enum arm_pcs arm_pcs_default; > +enum arm_pcs arm_pcs_default; > > /* For an explanation of these variables, see final_prescan_insn below. */ > int arm_ccfsm_state; > Index: arm.h > =================================================================== > --- arm.h (revision 162525) > +++ arm.h (working copy) > @@ -94,7 +94,13 @@ > if (arm_arch_iwmmxt) \ > builtin_define ("__IWMMXT__"); \ > if (TARGET_AAPCS_BASED) \ > - builtin_define ("__ARM_EABI__"); \ > + { \ > + if (arm_pcs_default == ARM_PCS_AAPCS_VFP) \ > + builtin_define ("__ARM_PCS_VFP"); \ > + else if (arm_pcs_default == ARM_PCS_AAPCS) \ > + builtin_define ("__ARM_PCS"); \ > + builtin_define ("__ARM_EABI__"); \ > + } \ > } while (0) > > /* The various ARM cores. */ > @@ -1641,6 +1647,9 @@ > ARM_PCS_UNKNOWN > }; > > +/* Default procedure calling standard of current compilation unit. */ > +extern enum arm_pcs arm_pcs_default; > + > /* A C type for declaring a variable that is used as the first argument of > `FUNCTION_ARG' and other related values. */ > typedef struct
Richard Earnshaw wrote: > This is OK, but it needs an updated changelog entry (covering the > changes to arm.c as well). > > R. Patch committed, here's the updated ChangeLog entry: * config/arm/arm.c (arm_pcs_default): Remove static. * config/arm/arm.h (TARGET_CPU_CPP_BUILTINS): Define __ARM_PCS or __ARM_PCS_VFP to indicate soft/hard-float calling convention. (arm_pcs_default): Declare. Thanks, Chung-Lin
Index: arm.c =================================================================== --- arm.c (revision 162525) +++ arm.c (working copy) @@ -711,7 +711,7 @@ the next function. */ static int after_arm_reorg = 0; -static enum arm_pcs arm_pcs_default; +enum arm_pcs arm_pcs_default; /* For an explanation of these variables, see final_prescan_insn below. */ int arm_ccfsm_state; Index: arm.h =================================================================== --- arm.h (revision 162525) +++ arm.h (working copy) @@ -94,7 +94,13 @@ if (arm_arch_iwmmxt) \ builtin_define ("__IWMMXT__"); \ if (TARGET_AAPCS_BASED) \ - builtin_define ("__ARM_EABI__"); \ + { \ + if (arm_pcs_default == ARM_PCS_AAPCS_VFP) \ + builtin_define ("__ARM_PCS_VFP"); \ + else if (arm_pcs_default == ARM_PCS_AAPCS) \ + builtin_define ("__ARM_PCS"); \ + builtin_define ("__ARM_EABI__"); \ + } \ } while (0) /* The various ARM cores. */ @@ -1641,6 +1647,9 @@ ARM_PCS_UNKNOWN }; +/* Default procedure calling standard of current compilation unit. */ +extern enum arm_pcs arm_pcs_default; + /* A C type for declaring a variable that is used as the first argument of `FUNCTION_ARG' and other related values. */ typedef struct