Przemyslaw Wirkus <przemyslaw.wir...@arm.com> writes:
> Hello Richard,
>
> I've updated my patch following all your comments. Thank you.
>
> Boostrapped on aarch64-linux-gnu and all new ACLE tests pass.
>
> OK to install?

Thanks.  OK with a couple of formatting nits:

> @@ -2130,6 +2203,57 @@ aarch64_expand_builtin_tme (int fcode, tree exp, rtx 
> target)
>      return target;
>  }
>  
> +/* Function to expand an expression EXP which calls one of the Load/Store
> +   64 Byte extension (LS64) builtins FCODE with the result going to TARGET.  
> */
> +static rtx
> +aarch64_expand_builtin_ls64 (int fcode, tree exp, rtx target)
> +{
> +  expand_operand ops[3];
> +
> +  switch (fcode)
> +    {
> +    case AARCH64_LS64_BUILTIN_LD64B:
> +      {
> +        rtx op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
> +        create_output_operand (&ops[0], target, V8DImode);
> +        create_input_operand (&ops[1], op0, DImode);
> +        expand_insn (CODE_FOR_ld64b, 2, ops);
> +        return ops[0].value;
> +      }
> +    case AARCH64_LS64_BUILTIN_ST64B:
> +      {
> +        rtx op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
> +        rtx op1 = expand_normal (CALL_EXPR_ARG (exp, 1));
> +        create_output_operand (&ops[0], op0, DImode);
> +        create_input_operand (&ops[1], op1, V8DImode);
> +        expand_insn (CODE_FOR_st64b, 2, ops);
> +        return const0_rtx;
> +      }
> +    case AARCH64_LS64_BUILTIN_ST64BV:
> +      {
> +        rtx op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
> +        rtx op1 = expand_normal (CALL_EXPR_ARG (exp, 1));
> +        create_output_operand (&ops[0], target, DImode);
> +        create_input_operand (&ops[1], op0, DImode);
> +        create_input_operand (&ops[2], op1, V8DImode);
> +        expand_insn (CODE_FOR_st64bv, 3, ops);
> +        return ops[0].value;
> +      }
> +    case AARCH64_LS64_BUILTIN_ST64BV0:
> +      {
> +        rtx op0 = expand_normal (CALL_EXPR_ARG (exp, 0));
> +        rtx op1 = expand_normal (CALL_EXPR_ARG (exp, 1));
> +        create_output_operand (&ops[0], target, DImode);
> +        create_input_operand (&ops[1], op0, DImode);
> +        create_input_operand (&ops[2], op1, V8DImode);
> +        expand_insn (CODE_FOR_st64bv0, 3, ops);
> +        return ops[0].value;
> +      }
> +    }
> +
> +    gcc_unreachable ();

This line should be indented by 2 spaces rather than 4.

> +}
> +
>  /* Expand a random number builtin EXP with code FCODE, putting the result
>     int TARGET.  If IGNORE is true the return value is ignored.  */
>  
> […]
> diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
> index 
> be24b7320d28deed9a19a0451c96bd67d2fb3104..e0ceba68968a28a9fcf1ba6e3a3036783b0931b0
>  100644
> --- a/gcc/config/aarch64/aarch64.c
> +++ b/gcc/config/aarch64/aarch64.c
> @@ -10013,8 +10013,12 @@ aarch64_classify_address (struct 
> aarch64_address_info *info,
>            instruction memory accesses.  */
>         if (mode == TImode || mode == TFmode)
>           return (aarch64_offset_7bit_signed_scaled_p (DImode, offset)
> -                 && (aarch64_offset_9bit_signed_unscaled_p (mode, offset)
> -                     || offset_12bit_unsigned_scaled_p (mode, offset)));
> +                 && (aarch64_offset_9bit_signed_unscaled_p (mode, offset)
> +                 || offset_12bit_unsigned_scaled_p (mode, offset)));

The original formatting was correct here.

> +
> +       if (mode == V8DImode)
> +         return (aarch64_offset_7bit_signed_scaled_p (DImode, offset)
> +                 && aarch64_offset_7bit_signed_scaled_p (DImode, offset + 
> 48));
>  
>         /* A 7bit offset check because OImode will emit a ldp/stp
>            instruction (only big endian will get here).

Reply via email to