[PATCH][ARM][gas] Make gas accept vcmp[e].f{32,64} <reg>, #0.0

Kyrill Tkachov kyrylo.tkachov@arm.com
Thu Aug 14 08:13:00 GMT 2014


Ping.
https://sourceware.org/ml/binutils/2014-08/msg00058.html

Thanks,
Kyrill

On 07/08/14 09:54, Will Newton wrote:
> On 7 August 2014 09:45, Kyrill Tkachov <kyrylo.tkachov@arm.com> wrote:
>> On 05/08/14 15:14, Will Newton wrote:
>>> On 5 August 2014 14:11, Kyrill Tkachov <kyrylo.tkachov@arm.com> wrote:
>>>> On 04/08/14 11:08, Will Newton wrote:
>>>>> On 4 August 2014 10:34, Kyrill Tkachov <kyrylo.tkachov@arm.com> wrote:
>>>>>
>>>>> Hi Kyrill,
>>>>>
>>>>>> The ARM ARM says that the VFP compare with zero instructions (vcmp,
>>>>>> vcmpe)
>>>>>> accept the zero in the form of a #0.0 immediate. However, gas currently
>>>>>> only
>>>>>> accepts #0. This patch fixes that and some simple tests are added.
>>>>>>
>>>>>> The new parse_ifimm_zerofunction is rather simple and is modelled on
>>>>>> the
>>>>>> parse_qfloat_immediate below it and didn't blow up in my testing.
>>>>>>
>>>>>>
>>>>>> make check on gas passes and a gcc testsuite run doesn't show any
>>>>>> problems.
>>>>>>
>>>>>> Ok for trunk?
>>>>>>
>>>>>> Thanks,
>>>>>> Kyrill
>>>>>>
>>>>>> [gas/]
>>>>>> 2014-06-24  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>>>>>>
>>>>>>        * config/tc-arm.c (parse_ifimm_zero): New function.
>>>>>>        (enum operand_parse_code): Add OP_RSVD_FI0 value.
>>>>>>        (parse_operands): Handle OP_RSVD_FI0.
>>>>>>        (asm_opcode_insns): Use RSVD_FI0 for second operand of vcmp,
>>>>>> vcmpe.
>>>>>>
>>>>>> [gas/testsuite/]
>>>>>> 2014-06-24  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>>>>>>
>>>>>>        * gas/arm/ual-vcmp.s: New file.
>>>>>>        * gas/arm/ual-vcmp.d: Likewise.
>>>>> Would it be possible to use my_get_expression or a similar parser for
>>>>> this?
>>>> Hi Will,
>>>>
>>>> Thanks for the suggestion, but I'm struggling to figure out what
>>>> my_get_expression is supposed to be doing. Is it supposed to be taking a
>>>> string and parsing it into an expressionS?
>>>> I'm not very well versed in gas internal data types...
>>> Yes, that's pretty much it. I think an integer will be type O_constant
>>> with the value in X_add_number and a floating point value O_big with a
>>> value in generic_floating_point_number. The expr.c code is not pretty
>>> but it should be possible to make it do something approaching what's
>>> reguired...
>>
>> Hi Will,
>>
>> After a bit of investigation, it seems that atof_generic is what I need. It
>> can handle any form of floating point zero, as well as plain old "0".
>>
>>  From what I understand from looking around gas the global variable
>> generic_floating_point_number is supposed to be used to store the various
>> parts of a floating point representation and the way it's checked for 0.0 in
>> config/atof-ieee.c is by comparing the .low and .leader components.
>>
>>   I've also added a *-bad.s testcase to make sure we reject non-zero
>> immediates.
>>
>> make check on gas passes.
>>
>> How does this look?
> Looks good to me (although I am not a maintainer).
>
>> Thanks,
>> Kyrill
>>
>> [gas/]
>> 2014-08-07  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>>
>>
>>          * config/tc-arm.c (parse_ifimm_zero): New function.
>>          (enum operand_parse_code): Add OP_RSVD_FI0 value.
>>          (parse_operands): Handle OP_RSVD_FI0.
>>          (asm_opcode_insns): Use RSVD_FI0 for second operand of vcmp, vcmpe.
>>
>> [gas/testsuite/]
>> 2014-08-07  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>>
>>
>>          * gas/arm/ual-vcmp.s: New file.
>>          * gas/arm/ual-vcmp.d: Likewise.
>>          * gas/arm/vcmp-zero-bad.s: Likewise.
>>          * gas/arm/vcmp-zero-bad.d: Likewise.
>>          * gas/arm/vcmp-zero-bad.l: Likewise.
>
>




More information about the Binutils mailing list