Richard Sandiford via Gcc-patches <gcc-patches@gcc.gnu.org> writes:
> Jonathan Wright <jonathan.wri...@arm.com> writes:
>> diff --git a/gcc/config/aarch64/aarch64-simd.md 
>> b/gcc/config/aarch64/aarch64-simd.md
>> index 
>> bdee49f74f4725409d33af733bb55be290b3f0e7..234762960bd6df057394f753072ef65a6628a43d
>>  100644
>> --- a/gcc/config/aarch64/aarch64-simd.md
>> +++ b/gcc/config/aarch64/aarch64-simd.md
>> @@ -734,6 +734,22 @@
>>    [(set_attr "type" "neon<fp>_mul_<stype>_scalar<q>")]
>>  )
>>  
>> +(define_insn "mul_laneq<mode>3"
>> +  [(set (match_operand:VDQSF 0 "register_operand" "=w")
>> +    (mult:VDQSF
>> +      (vec_duplicate:VDQSF
>> +        (vec_select:<VEL>
>> +          (match_operand:V4SF 2 "register_operand" "w")
>> +          (parallel [(match_operand:SI 3 "immediate_operand" "i")])))
>> +      (match_operand:VDQSF 1 "register_operand" "w")))]
>> +  "TARGET_SIMD"
>> +  {
>> +    operands[3] = aarch64_endian_lane_rtx (V4SFmode, INTVAL (operands[3]));
>> +    return "fmul\\t%0.<Vtype>, %1.<Vtype>, %2.<Vetype>[%3]";
>> +  }
>> +  [(set_attr "type" "neon_fp_mul_s_scalar<q>")]
>> +)
>> +

Oops, sorry, I just realised that this pattern does already exist as:

(define_insn "*aarch64_mul3_elt<mode>"
 [(set (match_operand:VMUL 0 "register_operand" "=w")
    (mult:VMUL
      (vec_duplicate:VMUL
          (vec_select:<VEL>
            (match_operand:VMUL 1 "register_operand" "<h_con>")
            (parallel [(match_operand:SI 2 "immediate_operand")])))
      (match_operand:VMUL 3 "register_operand" "w")))]
  "TARGET_SIMD"
  {
    operands[2] = aarch64_endian_lane_rtx (<MODE>mode, INTVAL (operands[2]));
    return "<f>mul\\t%0.<Vtype>, %3.<Vtype>, %1.<Vetype>[%2]";
  }
  [(set_attr "type" "neon<fp>_mul_<stype>_scalar<q>")]
)

Thanks,
Richard

Reply via email to