On Mon, 28 May 2001, Kevin D. Kissell wrote: > I'd been disassembling the resulting .o files, as I didn't care whether > it's the compiler or the assembler that ultimately makes things right. It's good to check the generated assembly if you suspect a tool bug. > Repeating your experiment using -S gives the following results: Thanks for testing other versions. > However, if one compiles all the way to object code and looks > at what the assembler is actually doing with those "impossible" > offsets under gcc 2.90 and 2.91, technically, it's not violating ".noat" > in the "m" and "o" constraint cases. It is *not* using the "at" register. > It is, however, cleverly using the load destination register as a temporary > to calculate the correct address. As there are no memory operations, That's clever, indeed... > these instructions should have no effect on the correct execution > of the ll/sc sequence (though they will increase the statistical > probability > of a context switch between ll and sc). ... but that won't work for a lone store, so we need a properly working 'R' constraint in the compiler. Since 3.0 works, as you report, there is no need to worry (but I might consider backporting changes to 2.95.3). Maciej -- + Maciej W. Rozycki, Technical University of Gdansk, Poland + +--------------------------------------------------------------+ + e-mail: macro@ds2.pg.gda.pl, PGP key available +