This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 6/6][ARM] Implement support for ACLE Coprocessor MCRR and MRRC intrinsics


On 05/01/17 11:11, Kyrill Tkachov wrote:
> Hi Andre,
> 
> On 09/11/16 10:12, Andre Vieira (lists) wrote:
>> Hi,
>>
>> This patch implements support for the ARM ACLE Coprocessor MCR and MRC
>> intrinsics. See below a table mapping the intrinsics to their respective
>> instructions:
>>
>> +-------------------------------------------------------------------+---------------------------------------+
>>
>> | Intrinsic signature                                               |
>> Instruction pattern                   |
>> +-------------------------------------------------------------------+---------------------------------------+
>>
>> |void __arm_mcrr(coproc, opc1, uint64_t value, CRm)                 |
>> MCRR coproc, opc1, Rt, Rt2, CRm       |
>> +-------------------------------------------------------------------+---------------------------------------+
>>
>> |void __arm_mcrr2(coproc, opc1, uint64_t value, CRm)                |
>> MCRR2 coproc, opc1, Rt, Rt2, CRm      |
>> +-------------------------------------------------------------------+---------------------------------------+
>>
>> |uint64_t __arm_mrrc(coproc, opc1, CRm)                             |
>> MRRC coproc, opc1, Rt, Rt2, CRm       |
>> +-------------------------------------------------------------------+---------------------------------------+
>>
>> |uint64_t __arm_mrrc2(coproc, opc1, CRm)                            |
>> MRRC2 coproc, opc1, Rt, Rt2, CRm      |
>> +-------------------------------------------------------------------+---------------------------------------+
>>
>> Note that any untyped variable in the intrinsic signature is required to
>> be a compiler-time constant and has the type 'unsigned int'.  We do some
>> boundary checks for coproc:[0-15], opc1[0-7] CR*:[0-31]. If either of
>> these requirements are not met a diagnostic is issued.
>>
>> I added a new arm_arch variable for ARMv5TE to use when deciding whether
>> or not the MCRR and MRCC intrinsics are available.
>>
>> Is this OK for trunk?
> 
> Same as with the previous two patches the define_insns need constraints
> and also I believe you'll want to rebase this patch on top of Richard's
> rework of the
> architecture feature bits for the ARMv5TE hunk.
> 
> Thanks,
> Kyrill
> 
>> Regards,
>> Andre
>>
>> gcc/ChangeLog:
>> 2016-11-09  Andre Vieira  <andre.simoesdiasvieira@arm.com>
>>
>>    * config/arm/arm.md (<mcrr>): New.
>>    (<mrrc>): New.
>>    * config/arm/arm.c (arm_arch5te): New.
>>    (arm_option_override): Set arm_arch5te.
>>    (arm_coproc_builtin_available): Add support for mcrr, mcrr2, mrrc
>>    and mrrc2.
>>    * config/arm/arm-builtins.c (MCRR_QUALIFIERS): Define to...
>>    (arm_mcrr_qualifiers): ... this. New.
>>    (MRRC_QUALIFIERS): Define to...
>>    (arm_mrrc_qualifiers): ... this. New.
>>    * config/arm/arm_acle.h (__arm_mcrr, __arm_mcrr2, __arm_mrrc,
>>    __arm_mrrc2): New.
>>    * config/arm/arm_acle_builtins.def (mcrr, mcrr2, mrrc, mrrc2): New.
>>    * config/arm/iterators.md (MCRRI, mcrr, MCRR): New.
>>    (MRRCI, mrrc, MRRC): New.
>>    * config/arm/unspecs.md (VUNSPEC_MCRR, VUNSPEC_MCRR2, VUNSPEC_MRRC,
>>    VUNSPEC_MRRC2): New.
>>
>> gcc/testsuite/ChangeLog:
>>
>> 2016-11-09  Andre Vieira  <andre.simoesdiasvieira@arm.com>
>>
>>    * gcc.target/arm/acle/mcrr: New.
>>    * gcc.target/arm/acle/mcrr2: New.
>>    * gcc.target/arm/acle/mrrc: New.
>>    * gcc.target/arm/acle/mrrc2: New.
>>
> 
Hi,

Reworked this patch according to comments, rebased and fixed the
availability of MCRR2/MRRC2 to only be available for ARMv6 and later.

Is this OK for trunk?

Regards,
Andre

gcc/ChangeLog:
2017-01-xx  Andre Vieira  <andre.simoesdiasvieira@arm.com>

  * config/arm/arm.md (<mcrr>): New.
  (<mrrc>): New.
  * config/arm/arm.c (arm_arch5te): New.
  (arm_option_override): Set arm_arch5te.
  (arm_coproc_builtin_available): Add support for mcrr, mcrr2, mrrc
  and mrrc2.
  * config/arm/arm-builtins.c (MCRR_QUALIFIERS): Define to...
  (arm_mcrr_qualifiers): ... this. New.
  (MRRC_QUALIFIERS): Define to...
  (arm_mrrc_qualifiers): ... this. New.
  * config/arm/arm_acle.h (__arm_mcrr, __arm_mcrr2, __arm_mrrc,
  __arm_mrrc2): New.
  * config/arm/arm_acle_builtins.def (mcrr, mcrr2, mrrc, mrrc2): New.
  * config/arm/iterators.md (MCRRI, mcrr, MCRR): New.
  (MRRCI, mrrc, MRRC): New.
  * config/arm/unspecs.md (VUNSPEC_MCRR, VUNSPEC_MCRR2, VUNSPEC_MRRC,
  VUNSPEC_MRRC2): New.

gcc/testsuite/ChangeLog:

2017-01-xx  Andre Vieira  <andre.simoesdiasvieira@arm.com>

  * gcc.target/arm/acle/mcrr: New.
  * gcc.target/arm/acle/mcrr2: New.
  * gcc.target/arm/acle/mrrc: New.
  * gcc.target/arm/acle/mrrc2: New.

Attachment: diff6
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]