On Mon, Aug 24, 2020 at 03:48:43PM +0800, HAO CHEN GUI wrote:
> >I'll try to be quicker at reviewing iterations of this -- there is quite
> >some way to go, without me slowing things down!

Sigh :-(

>       * config/rs6000/linux.h (rs6000_relative_jumptables): Define.

That macro looks like it is variable (or function).  *Make* it a
variable, please?

>       * config/rs6000/rs6000.c (TARGET_ASM_GENERATE_PIC_ADDR_DIFF_VEC):
>       Define

Period?

>       (rs6000_gen_pic_addr_diff_vec, rs6000_output_addr_vec_elt): Implement.

"New function."

>       * config/rs6000/rs6000.md (absolute_tablejumpsi,
>       absolute_tablejumpsi_nospec, absolute_tablejumpdi,
>       absolute_tablejumpdi_nospec): Add four new expansions.

"New define_expands." or "New expanders."

>       * config/rs6000/rs6000.opt (mrelative-jumptables): Add a new option and
>       set rs6000_relative_jumptables to true by default.

"rs6000.opt: Add -mrelative-jumptables."

> +/* Disable relative jump tables for Power Linux.  */
> +#undef rs6000_relative_jumptables
> +#define rs6000_relative_jumptables 0

Why?

> +/* Disable relative jump tables for Power Linux64.  */
> +#undef rs6000_relative_jumptables
> +#define rs6000_relative_jumptables 0

(That's not what it's called...  Just don't say the "for..." at all?
It is clear from what file it is in.)

>  /* Indicate that jump tables go in the text section.  */
>  #undef  JUMP_TABLES_IN_TEXT_SECTION
> -#define JUMP_TABLES_IN_TEXT_SECTION TARGET_64BIT
> +#define JUMP_TABLES_IN_TEXT_SECTION rs6000_relative_jumptables

Not sure that is correct.  Maybe the patch using rodata (.data.rel.ro)
should be a separate patch?

>  /* Define as C expression which evaluates to nonzero if the tablejump
>     instruction expects the table to contain offsets from the address of the
>     table.
>     Do not define this if the table should contain absolute addresses.  */
> -#define CASE_VECTOR_PC_RELATIVE 1
> +#define CASE_VECTOR_PC_RELATIVE 0

This should depend on the new flag?

> +/* Specify the machine mode that this machine uses
> +   for the index in the tablejump instruction.  */
> +#define CASE_VECTOR_MODE \
> +  (TARGET_32BIT || rs6000_relative_jumptables ? SImode : DImode)

rs6000_relative_jumptables ? SImode : Pmode;

> +      if (rs6000_relative_jumptables)
> +     {
> +       if (TARGET_32BIT)
> +         emit_jump_insn (gen_tablejumpsi (operands[0], operands[1]));
> +       else
> +         emit_jump_insn (gen_tablejumpdi (operands[0], operands[1]));
> +     }

Hrm, I guess we should make that a parameterized name (future work,
don't do it now :-) )

> +(define_expand "absolute_tablejumpsi"

Don't prefix names; it should start with "tablejump".


Segher

Reply via email to