Re: register usage

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

 




----- Original Message ----- From: "Andrew Haley" <aph@xxxxxxxxxx>
To: "Petar Bajic" <petar.bajic@xxxxxxxxxxxxxxx>
Cc: <gcc-help@xxxxxxxxxxx>
Sent: Wednesday, July 12, 2006 2:48 PM
Subject: Re: register usage


Petar Bajic writes:
> I want to forbid compiler to use condition register for destination in > movz
> instruction
> instruction (if r3 == 0, move r2 to r1) should look like this:
> movz r1, r2, r3  (r3 condition, r2 source, r1 destination register)
> but compiler generates this
> movz r3, r2, r3
> and uses r3 further on. Wich is techincally ok, but I have this problem > with
> overwritting condition and would like to save it.
> How do I tell compiler to generate different register for destination?

Put the condition code register in a different class from the other
registers.

Andrew.


For this, I had to make two new register classes (machine has 32 regs and basicly just one reg class GENERAL_REGS) I added two new classes: HI_REGS, and LO_REGS to "enum reg_classes" wich are lower and higher 16 regs of GENERAL_REGS.
REG_CLASS_CONTENTS is expanded with { 0xffff0000 } and { 0x0000ffff }
REG_CLASS_NAMES has two more names "HI_REGS" and "LO_REGS"

in machine.c file I modified "reg_class_from_letter" making letter 'j' and 'k' return HI_REGS and LO_REGS

in machine.md I finally wrote a rule that uses j and k regs to distinct input and output....
(define_insn "*movsicc_insn"
 [(set (match_operand:SI 0 "register_operand" "=j,j")
(if_then_else:SI (match_operator 1 "comparison_operator" [(match_operand:SI 4 "register_operand" "=k,k") (const_int 0)])
   (match_operand:SI 2 "register_operand" "=d,d")
   (match_operand:SI 3 "register_operand" "=d,d")))]
 ""
"..."

and the error is:
../../gcc/libgcc2.c:785: internal compiler error: in copy_to_mode_reg, at explow.c:581

what else do I have to do for this to work?




[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