This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Ok to commit for both mainline and 3.4? Should this also go into 3.3? Andreas Andreas Jaeger <aj@suse.de> writes: > Michael Matz <matz@suse.de> writes: > >> On Fri, 16 Jan 2004, Andreas Jaeger wrote: >> >>> +@example >>> +@{"m"( (@{ struct @{ char x[10]; @} *p = (void *)ptr ; *p @}) )@}. >> ^^^ >> semicolon missing >> >>> +int foo (int *x) >>> +@{ >>> + int y = bar(x); >>> + int r; >>> + asm ("magic stuff accessing (%1)..." >>> + "=&d" (r) : "a" (y), "m" (*y)); >>> + return r; >> >> 'y' must be a pointer to be dereferencable ;) > > Good idea ;-) > >> I suggest something like this: >> >> int foo () >> { >> int x = 42; >> int *y = &x; >> int result; >> asm ("stuff accessing an 'int' pointed to by '%1'" >> "=&r" (result) : "r" (y), "m" (*y)); >> return result; >> } >> >> And what could be optimized away is the store to x. > > Ok, adjusted. What do you think of our ;-) patch now? > > Cheers, > Andreas > > 2004-01-16 Andreas Jaeger <aj@suse.de> > Michael Matz <matz@suse.de> > > * doc/extend.texi (Extended Asm): Clarify memory clobber. > > ============================================================ > Index: gcc/doc/extend.texi > --- gcc/doc/extend.texi 7 Jan 2004 22:24:39 -0000 1.177 > +++ gcc/doc/extend.texi 16 Jan 2004 17:04:23 -0000 > @@ -4006,13 +4006,35 @@ represents the condition codes as a spec > condition code is handled differently, and specifying @samp{cc} has no > effect. But it is valid no matter what the machine. > > -If your assembler instruction modifies memory in an unpredictable > +If your assembler instructions access memory in an unpredictable > fashion, add @samp{memory} to the list of clobbered registers. This > -will cause GCC to not keep memory values cached in registers across > -the assembler instruction. You will also want to add the > -@code{volatile} keyword if the memory affected is not listed in the > -inputs or outputs of the @code{asm}, as the @samp{memory} clobber does > -not count as a side-effect of the @code{asm}. > +will cause GCC to not keep memory values cached in registers across the > +assembler instruction and not optimize stores or loads to that memory. > +You will also want to add the @code{volatile} keyword if the memory > +affected is not listed in the inputs or outputs of the @code{asm}, as > +the @samp{memory} clobber does not count as a side-effect of the > +@code{asm}. If you known how large the accessed memory is, you can add > +it as input or output but if this is not known, you should add > +@samp{memory}. As an example, if you access ten bytes of a string, you > +can use a memory input like: > + > +@example > +@{"m"( (@{ struct @{ char x[10]; @} *p = (void *)ptr ; *p; @}) )@}. > +@end example > + > +Note that in the following example the memory input is necessary, > +otherwise GCC might optimize the store to @code{x} away: > +@example > +int foo () > +@{ > + int x = 42; > + int *y = &x; > + int result; > + asm ("magic stuff accessing an 'int' pointed to by '%1'" > + "=&d" (r) : "a" (y), "m" (*y)); > + return result; > +@} > +@end example > > You can put multiple assembler instructions together in a single > @code{asm} template, separated by the characters normally used in assembly Andreas -- Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj SuSE Linux AG, Maxfeldstr. 5, 90409 Nürnberg, Germany GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
Attachment:
pgp00000.pgp
Description: PGP signature
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |