On Thu, Nov 13, 2008 at 06:01:27PM +0200, Revital1 Eres wrote:
> 
> Hello,
> 
> I want print additional information for each branch insn which will be
> used by the linker (for the SPU software i-cache), for example:
> 
> brsl $lr,[EMAIL PROTECTED]
> 
> and I wonder what is the best way to implement it in GCC.
> 
> I defined a new note (in reg-notes.def) which can be attached to each
> branch (using add_reg_note ()) and holds that info.  I now want to print
> the information of that note when emitting the branch, but I am not
> sure exactly how to do that.  Should I change the instruction template
> to use the reg-notes?

Unfortunately, it is harder than it should be.  The approach I would take is
define FINAL_SCAN_INSN to set a global variable to the loop level, based on the
notes being present or 0 if the note is not present.  At present,
FINAL_SCAN_INSN is not defined for the SPU.

Then I would define PRINT_OPERAND_PUNCT_VALID_P to add a new punctuation
character, such as '*' which will print the thing you want if the note is
there, or nothing if it isn't.  For example, here is the i386 version which
adds 4 special formats:

#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
   ((CODE) == '*' || (CODE) == '+' || (CODE) == '&' || (CODE) == ';')

Then in print_operand, add a new case statement for '*' to do what you want.

-- 
Michael Meissner, IBM
4 Technology Place Drive, MS 2203A, Westford, MA, 01886, USA
[EMAIL PROTECTED]

Reply via email to