This is the mail archive of the crossgcc@cygnus.com mailing list for the crossgcc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Atomic Operations (continuing on from Masking Interrupts?)


On Tue, Jul 06, 1999 at 10:40:48AM -0700, David Querbach wrote:

> In our system, we have a target-dependent header file that defines four
> macros:
> 
>   - enableInts()  unconditionally enables interrupts 
> 
>   - disableInts() unconditionally disables interrupts 
> 
>   - inhibitInts() saves the CPU's interrupt mask bit in an auto variable,
> 		  then invokes disableInts()
> 
>   - restoreInts() sets the CPU's interrupt mask bit from the auto variable
> 		  written by inhibitInts().

Right - I use these, too (however, in my case, inhibitInts returns the old
mask value, which restoreInts writes back to the SR). However, the problem
is that these disable *all* interrupts, and increase latencies. In many
cases, all I need is a single atomic instruction.

I can either write this in assembler, or use C with inline assembler. Gcc
tends to produce code that is 'quite good' compared to assembler, and the
code is a lot easier to maintain - however I don't want to waste extra
cycles in short interrupt handlers.

I realize that both are not portable, but when I write code for a special
target, portability may not be as important as efficiency.

cu
Michael
-- 
Michael Schwingen, Ahornstrasse 36, 52074 Aachen
_______________________________________________
New CrossGCC FAQ: http://www.objsw.com/CrossGCC
_______________________________________________
To remove yourself from the crossgcc list, send
mail to crossgcc-request@cygnus.com with the
text 'unsubscribe' (without the quotes) in the
body of the message.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]