> -----Original Message----- > From: gcc-help-owner@xxxxxxxxxxx [mailto:gcc-help-owner@xxxxxxxxxxx] On > Behalf Of zneda@xxxxxxxxxxxx > Sent: Tuesday, December 12, 2006 9:44 AM > To: gnu@xxxxxxx; gcc-help@xxxxxxxxxxx > Cc: neda.zf@xxxxxxxxx > Subject: Hazard Detection > > Hi > > I have a question: I compiled a program with gcc -mips1 , > Compiler generate this list of instructions: > ... .... ... > 10b71c: 87a20018 lh v0,24(sp) > 10b720: 00000000 nop > 10b724: 144000b9 bnez v0,10ba0c > 10b728: 0015ac03 sra s5,s5,0x10 > ... .... ... > > but by a small change, some times in variables, (using same compiler > switches) compiler don't insert nop between load and branch and generates > this sequence of instructions: > ... .... ... > 10b754: 87a20018 lh v0,24(sp) > 10b758: 144000b9 bnez v0,10ba40 > 10b75c: 0015ac03 sra s5,s5,0x10 > ... .... ... > > would you please tell me the reason? > > why doesn't compiler detect hazard always? > > Thanks in advanced. I haven't programmed in the MIPS for awhile, but when I did, GCC expected the assembler to do the hazard detection (ie, if you disassemble the object code, there should be a NOP between the lh and the bnez if -mips1 was passed to the assembler. GCC used to have a separate hazard detection pass many years ago, but it was removed when GAS added the support.