[PATCH 6/6][ARM] Implement support for ACLE Coprocessor MCRR and MRRC intrinsics
Kyrill Tkachov
kyrylo.tkachov@foss.arm.com
Mon Jan 9 10:26:00 GMT 2017
Hi Andre,
On 06/01/17 15:15, Kyrill Tkachov wrote:
>
> On 06/01/17 14:58, Andre Vieira (lists) wrote:
>> 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?
>
> Ok.
> Thanks,
> Kyrill
>
Also, can you please propose a patch for the GCC 7 changes page mentioning this work?
Thanks,
Kyrill
>> 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.
>
More information about the Gcc-patches
mailing list