http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54821
--- Comment #1 from qball at sarine dot nl 2012-10-05 13:17:17 UTC --- For 4.6.2 (xilinx) this seems to fix the code generation: mb_gnu/src/gcc/gcc/config/microblaze/microblaze.c temp/mb_gnu/src/gcc/gcc/config/microblaze/microblaze.c @@ -558,7 +558,7 @@ { return !(flag_pic && pic_address_needs_scratch (x)); } - else if (flag_pic == 2) + else if (flag_pic) { return false; } Generates: addik r1,r1,-16 swi r19,r1,8 swi r20,r1,12 addk r19,r1,r0 lwi r3,r20,temp@GOT lbui r3,r3,0 sext8 r3,r3 addk r4,r3,r0 lwi r3,r20,temp2@GOT lwi r3,r3,0 addk r4,r4,r3 lwi r3,r20,temp4@GOT lhui r3,r3,0 sext16 r3,r3 addk r3,r4,r3 swi r3,r19,4 addk r1,r19,r0 lwi r19,r1,8 lwi r20,r1,12 addik r1,r1,16 rtsd r15,8 nop # Unfilled delay slot