PIC implementation , help needed.

sumanth sumanth.gundapneni@redpinesignals.com
Tue Dec 29 16:29:00 GMT 2009


Hi all,
            I am trying to generate PIC code through my backend .
            As per my understanding according my ISA , a  global 
variable is accessed using the following instructions.
            /mov  r0, #global variables address ;
            ldw r1,r0,#0 ;( loads the global variable's value in to r1).
            /If I implement PIC, ideally my PIC reg has 
_GLOBAL_OFFSET_TABLE_ ( starting address of Global Offset Table) and my 
global variable is some offset away from _GLOBAL_OFFSET_TABLE_. So the 
code generated is /
          ldw r1,pic-reg,#offset;

/In order to implement this I defined  PIC_OFFSET_TABLE_REGNUM , 
LEGITIMATE_PIC_OPERAND_P (x) . My legitimate pic operand has the 
constant offset range of ldw (load word )instruction. In my case my  
ldw  reg, reg,  #K12  has maximum offset of 12 bit . So, I can address 
span of 2^12.

In my md file , depending on flag flag_pic ( detecting whether PIC is 
needed or not ) in movsi pattern , I emitted instruction ldw %0, 
pic-reg, #offset . The
memory operand 'm' has code PLUS . Split in to REG + CONST . REG is 
pic_reg and CONST is in the range of 0 - (2^12-1).

Is my understanding true? 

Your help is deeply appreciated.

Thanks,
sumanth G

      





/
               /



More information about the Gcc-help mailing list