Author: Robert Hyatt
Date: 19:39:47 02/19/04
Go up one level in this thread
On February 19, 2004 at 16:44:38, Dieter Buerssner wrote: >On February 19, 2004 at 16:16:23, Robert Hyatt wrote: > >>I looked at my old inline asm docs, and I found the following statement, >>paraphrased: >> >>"you don't need to put gcc-allocated registers on the clobber list, it knows you >>are fooling with them." > >That's news to me. I cannot find it in my gcc manual (and I know, that it did >not work with earlier gcc versions). > >Some snippets of my gcc manual: > >--- >The compiler cannot check whether the operands have data types that are >reasonable for the instruction being executed. It does not parse the assembler >instruction template and does not know what it means or even whether it is valid >assembler input. > >[...] > Some instructions clobber specific hard registers. To describe this, ^^^^^^^^^^^^^^^ I am keying on that in your quote. "hard register" as opposed to "dynamically assigned register"... I won't say that is a correct interpretation, of course. The syntax is not horrible for inline asm, but the documentation leaves a lot to be desired, clarity-wise... >write a third colon after the input operands, followed by the names of >the clobbered hard registers (given as strings). >[...] > You may not write a clobber description in a way that overlaps with >an input or output operand. For example, you may not have an operand >describing a register class with one member if you mention that register >in the clobber list. There is no way for you to specify that an input >operand is modified without also specifying it as an output operand. >Note that if all the output operands you specify are for this purpose >(and hence unused), you will then also need to specify `volatile' for >the `asm' construct, as described below, to prevent GCC from deleting >the `asm' statement as unused. >--- > >To me it looks, as you really have to tell to gcc exactly, which operands to the >asm are modified. This indeed makes it not really easy, to write correct inline >assembly for gcc. > >I had one project for "big numbers", which I had coded with inline assembly in >gcc (over a factor of 10 faster, than the C code - mainly because one cannot >access the carry from C, and the 32*32->64 bit mul, similar for div). At that >time, gcc allowed to put input operands into the clobber list. Then they changed >that, and all the asm had to be modified. It was a lot of work. There was no >option for backwards compability - the code just broke from one version to the >other (it was correct according to the older documentation, the feature was not >deprecated at all, there were even examples in the manual, that showed the later > not allowed input regs in the clobber list). > >Regards, >Dieter
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.