> -----Original Message----- > From: Michael Eager [mailto:[email protected]] > Sent: Thursday, 28 February 2013 3:06 am > To: David Holsgrove > Cc: Michael Eager; [email protected]; John Williams; Edgar E. Iglesias > ([email protected]); Vinod Kathail; Vidhumouli Hunsigida; Nagaraju > Mekala; Tom Shui > Subject: Re: [Patch, microblaze]: Add support for swap instructions and > reorder > option > > The purpose is to avoid issuing a warning for processors before 8.30.a > unless the user explicitly specifies -mxl-reorder. >
Warning the user who explicitly specifies -mxl-reorder with cpu before v8.30.a
is the first goal, but we also need to prevent the usage of swap instructions by
default if they are not possible to use.
> I think that the code can be reordered to make it clearer.
>
> Replace this
>
> + /* TARGET_REORDER initialised as 2 in microblaze.opt,
> + passing -mxl-reorder sets TARGET_REORDER to 1,
> + and passing -mno-xl-reorder sets TARGET_REORDER to 0. */
> + ver = MICROBLAZE_VERSION_COMPARE (microblaze_select_cpu, "v8.30.a");
> + if (ver < 0)
> + {
> + /* MicroBlaze prior to 8.30a didn't have swapb or swaph insns,
> + so if -mxl-reorder passed, warn and clear TARGET_REORDER. */
> + if (TARGET_REORDER == 1)
> + warning (0,
> + "-mxl-reorder can be used only with -mcpu=v8.30.a or greater");
> + TARGET_REORDER = 0;
> + }
> + else if (ver == 0)
> + {
> + /* MicroBlaze v8.30a requires pattern compare for
> + swapb / swaph insns. */
> + if (!TARGET_PATTERN_COMPARE)
> + TARGET_REORDER = 0;
> + }
>
> With this:
>
> /* TARGET_REORDER defaults to 2 if -mxl-reorder not specified. */
> if (TARGET_REORDER == 1)
> {
> ver = MICROBLAZE_VERSION_COMPARE (microblaze_select_cpu, "v8.30.a");
> if (ver < 0)
> {
> warning (0, "-mxl-reorder can be used only with -mcpu=v8.30.a or
> greater");
> TARGET_REORDER = 0;
> }
> else if ((ver == 0) && !TARGET_PATTERN_COMPARE)
> {
> warning (0, "-mxl-reorder requires -mxl-pattern-compare for
> -mcpu=v8.30.a");
> TARGET_REORDER = 0;
> }
> }
So if we switch to your alternative, the default case (TARGET_REORDER=2) will
not
be checked for cpu version, or use of TARGET_PATTERN_COMPARE, meaning we
emit swap instructions which aren’t valid for these situations.
Adjusting your if statement to be;
if (TARGET_REORDER)
would catch the default case along with explicit use of -mxl-reorder, but then
we
would also be issuing the warnings for every compilation where cpu is less than
v8.30.a, or the user hasn’t passed -mxl-pattern-compare.
My attached patch will warn the user if they've explicitly used -mxl-reorder and
don’t meet the requirements, and will adjust the default case silently if
required.
> +mxl-reorder
> +Target Var(TARGET_REORDER) Init(2)
> +Use reorder instructions (default)
>
> Change to
> +Use reorder instructions (swap and byte reversed load/store) (default)
>
Yes thanks, this is a clearer definition of the intent behind the option.
>
> I'll check in the patch with these changes unless you have objections.
>
thanks again for the review, please let me know if this patch is acceptable.
David
>
> --
> Michael Eager [email protected]
> 1960 Park Blvd., Palo Alto, CA 94306 650-325-8077
0001-microblaze-add-support-for-swap-instructions-and-reo.patch
Description: 0001-microblaze-add-support-for-swap-instructions-and-reo.patch
