First thanks very much for your thoughts
If those two instructions appear for the first time in the .greg dump file, then they have been created by reload.
Yes they appear for the first time in .greg dump file.
> 1. What could be the reason for this behavior? I'm really shooting in the dark here, but my guess is that you have a define_expand for movdi that is not reload safe. You can do this operation correctly, you just have to reverse the instructions: load a5 from (a4 + 4) before you load a4 from (a4). See, e.g., mips_split_64bit_move in mips.c and note the use of reg_overlap_mentioned_p.
I have already mentioned earlier in this conversation that adddi3 and subdi3 are the only DI mode patterns in the .md file. Then Rask pointed out that middile end will synthesize other patterns for DI mode looking at similar SI mode patters in the backend. As this is the case am i to assume that the synthesized movdi pattern is not safe for reload? Should i tweak the movsi pattern to to correct this issue or should i write a explicit movdi pattern ? With this in mind how come this worked fine in gcc 3.4.6 port of the target. Has the behavior of reload changed very much in gcc 4.1.1? Regards, Shafi