[PATCH 11/18] rs6000: Builtin expansion, part 6

Segher Boessenkool segher@kernel.crashing.org
Thu Nov 4 01:24:19 GMT 2021


Hi!

On Wed, Sep 01, 2021 at 11:13:47AM -0500, Bill Schmidt wrote:
> Provide replacements for htm_spr_num and htm_expand_builtin.  No logic
> changes are intended here, as usual.  Much code was factored out into
> rs6000_expand_new_builtin, so the new version of htm_expand_builtin is
> a little tidier.

Nice.

> Also implement the support for the "endian" and "32bit" attributes,
> which is straightforward.  These just do icode substitution.

Don't call this "attributes" please?  I don't know what would be a
better name, of course.  "bif attribute" maybe?

> +  rtx op[MAX_HTM_OPERANDS], pat;

Don't declare arrays and scalars in the same statement, in general.  It
is important that the arrays stand out.

Also, don't declare things before they are used please.

> +  FOR_EACH_CALL_EXPR_ARG (arg, iter, exp)
> +    {
> +      if (arg == error_mark_node || nopnds >= MAX_HTM_OPERANDS)
> +	return const0_rtx;
> +
> +      insn_op = &insn_data[icode].operand[nopnds];
> +      op[nopnds] = expand_normal (arg);
> +
> +      if (!insn_op->predicate (op[nopnds], insn_op->mode))
> +	{
> +	  if (!strcmp (insn_op->constraint, "n"))
> +	    {
> +	      int arg_num = (nonvoid) ? nopnds : nopnds + 1;

Please don't parenthesise random expressions like "nonvoid".  I wonder
if that can be simpler handled by just unshifting a void_node into the
operands, btw :-)

And the same "n" thing as before of course.  Since it is the same: some
factoring would be helpful probably.

> +      machine_mode mode = (TARGET_POWERPC64) ? DImode : SImode;

Superfluous parens.  This is just "word_mode", anyway?

> +  /* If this builtin accesses a CR, then pass in a scratch
> +     CR as the last operand.  */
> +  else if (bif_is_htmcr (*bifaddr))
> +    {
> +      cr = gen_reg_rtx (CCmode);
> +      op[nopnds++] = cr;
> +    }

There is only one CR ("condition register").  You can say CRF here
("condition register field", a 4-bit thing), or just cc or CC maybe
("condition code").  A pet peeve, I know.

> +  if (bif_is_endian (*bifaddr) && BYTES_BIG_ENDIAN)

"is_endian" should maybe be "is_bigendian" or something like that?

Okay for trunk with the changes you see fit at this time.  Thanks!


Segher


More information about the Gcc-patches mailing list