On 08-Dec-00 Julian Elischer wrote:
> I'm trying to write  some experimental mutex operations similar to those
> in -current, but to do differnt things (e.g. a read/write lock)
> however, I am having some problems with the __asm  stuff.
> What I want to do is to define some operations that will
> assemble down to:
>       pushfl
>       cli
>       [stuff]
>       popfl
> I can generate the code, but it seems to me that there should be 
> a way of telling gcc that you have just pushed an item onto the stack, 
> so that if you were to have some C code between the push and po 
> (of the flags reg) the compiler has a correct idea of where the 
> SP is. I can imagine that it doesn't matter so it may be that there 
> is no constaint for that purpose (I read the gcc asm info pages)
> but I wanted to make sure that that is the case because if it does turn
> out to be important, it may manifest itself as a wierd bug sometime 
> in 2002.

As long as gcc uses %ebp to address local variables and functoin parameters
rather than %esp you should be fine.  %esp will be preserved, but if %esp is
for some odd reason used to address a variable during the C code, you are hosed.
Just use foo = save_intr(); disable_intr(); .. restore_intr() for now.  If you
want to save the 2 instructions so badly, then you should probably be writing
the whole chunk in assembly.  Getting it correct first and optimizing later is
more sane than getting correctness and optimization at the same time and not
knowing which one your bugs are coming from.


John Baldwin <[EMAIL PROTECTED]> -- http://www.FreeBSD.org/~jhb/
PGP Key: http://www.Baldwin.cx/~john/pgpkey.asc
"Power Users Use the Power to Serve!"  -  http://www.FreeBSD.org/

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to