Re: Complex half-word operations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 18 October 2011 22:38, Ian Lance Taylor <iant@xxxxxxxxxx> wrote:
> On Tue, Oct 18, 2011 at 9:30 AM, Ayonam Ray <ayonam@xxxxxxxxx> wrote:
>> I'm trying to define a complex half word operation (add:CHI) using the
>> following RTL:
>>
>> (define_insn "addchi3"
>>   [(set (match_operand:CHI 0 "register_operand" "=r")
>>         (plus:CHI (match_operand:CHI 1 "register_operand" "r")
>>                   (match_operand:CHI 2 "register_operand" "r")))]
>>   ""
>>   "cmplxadd\t%1, %2, %0"
>>   [(set_attr "type" "complex")
>>    (set_attr "slot" "s1")
>>    (set_attr "predicable" "no")
>>    (set_attr "length" "4")])
>>
>> This architecture can perform arithmetic operations on "complex short"
>> data by packing the real and imaginary parts into two half words of a
>> 32-bit general register.
>>
>> However, the instruction matcher doesn't seem to generate this RTL at
>> all.  It splits the operation into two half word additions.  I have
>> handled the CHImode in the macros HARD_REGNO_NREGS, and
>> HARD_REGNO_MODE_OK.  How do we tell GCC that the real and imaginary
>> parts are actually packed into a single register?  I tried defining
>> two RTLs to pack and unpack the two parts using the concat:CHI
>> operation.
>
> I don't think the gcc middle-end has any support for machines which provide
> special handling for complex int.  I think the middle-end always breaks up
> complex int operations into pairs of int operations.  So to make this work you
> would probably have to add that support.
>
> Ian
>

Thanks Ian for the reply.  Can you please point me to the files in the
middle-end where I may find the relevant code?



[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux