[PATCH][ARM]Use of vcvt for float to fixed point conversions.

Christophe Lyon christophe.lyon@linaro.org
Wed Jan 8 16:43:00 GMT 2014


Hi Renlin,

The new test you added introduces 2 new FAILs when the target is
arm-none-linux-gnueabi (as opposed to arm-none-linux-gnueabihf).

Christophe.


On 24 December 2013 15:46, Renlin Li <renlin.li@arm.com> wrote:
> Hi,
>
> I just updated my patch according your suggestion.
> Thank you for committing it for me!
>
> All you guys have a nice Xmas break!
>
> Kind regards,
> Renlin Li
>
>
> On 04/12/13 11:23, Ramana Radhakrishnan wrote:
>>
>> Sorry about the slow response. Been on holiday.
>>
>> On 20/11/13 16:27, Renlin Li wrote:
>>>
>>> Hi all,
>>>
>>> This patch will make the arm back-end use vcvt for float to fixed point
>>> conversions when applicable.
>>>
>>> Test on arm-none-linux-gnueabi has been done on the model.
>>> Okay for trunk?
>>>
>>> + (define_insn "*combine_vcvtf2i"
>>> +   [(set (match_operand:SI 0 "s_register_operand" "=r")
>>> +       (fix:SI (fix:SF (mult:SF (match_operand:SF 1 "s_register_operand"
>>> "t")
>>> +                                (match_operand 2
>>> +                                "const_double_vcvt_power_of_two"
>>> "Dp")))))]
>>> +   "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 &&
>>> !flag_rounding_math"
>>> +   "vcvt%?.s32.f32\\t%1, %1, %v2\;vmov%?\\t%0, %1"
>>> +   [(set_attr "predicable" "yes")
>>> +    (set_attr "predicable_short_it" "no")
>>> +    (set_attr "ce_count" "2")
>>> +    (set_attr "type" "f_cvtf2i")]
>>> + )
>>> +
>>
>> You need to set length to 8.
>>
>>> --- /dev/null
>>> +++ b/gcc/testsuite/gcc.target/arm/fixed_float_conversion.c
>>> @@ -0,0 +1,15 @@
>>> +/* Check that vcvt is used for fixed and float data conversions.  */
>>> +/* { dg-do compile } */
>>> +/* { dg-options "-O1 -mfpu=vfp3" } */
>>> +/* { dg-require-effective-target arm_vfp_ok } */
>>> +float fixed_to_float(int i)
>>> +{
>>> +    return ((float)i / (1 << 16));
>>> +}
>>> +
>>> +int float_to_fixed(float f)
>>> +{
>>> +    return ((int)(f*(1 << 16)));
>>> +}
>>> +/* { dg-final { scan-assembler "vcvt.f32.s32" } } */
>>> +/* { dg-final { scan-assembler "vcvt.s32.f32" } } */
>>
>>
>> GNU coding style for functions.
>>
>> Ok with those changes.
>>
>>
>>
>>
>> regards
>> Ramana
>>
>>
>>> Kind regards,
>>> Renlin Li
>>>
>>>
>>> gcc/ChangeLog:
>>>
>>> 2013-11-20  Renlin Li  <Renlin.Li@arm.com>
>>>
>>>        * config/arm/arm-protos.h (vfp_const_double_for_bits): Declare.
>>>        * config/arm/constraints.md (Dp): Define new constraint.
>>>        * config/arm/predicates.md ( const_double_vcvt_power_of_two):
>>> Define
>>>        new predicate.
>>>        * config/arm/arm.c (arm_print_operand): Add print for new
>>> fucntion.
>>>        (vfp3_const_double_for_bits): New function.
>>>        * config/arm/vfp.md (combine_vcvtf2i): Define new instruction.
>>>
>>> gcc/testsuite/ChangeLog:
>>>
>>> 2013-11-20  Renlin Li  <Renlin.Li@arm.com>
>>>
>>>        * gcc.target/arm/fixed_float_conversion.c: New test case.
>>>
>



More information about the Gcc-patches mailing list