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

Renlin Li renlin.li@arm.com
Tue Dec 24 14:46:00 GMT 2013


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.
>>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: vcvt.diff
Type: text/x-patch
Size: 5456 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20131224/819efed3/attachment.bin>


More information about the Gcc-patches mailing list