Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 2173 → Rev 2174

/branches/arm/kernel/arch/arm32/include/atomic.h
1,5 → 1,5
/*
* Copyright (c) 2005 Ondrej Palkovsky
* Copyright (c) 2007 Michal Kebrt
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
53,8 → 53,24
*/
static inline long atomic_add(atomic_t *val, int i)
{
/* TODO */
return (val->count += i);
int ret;
volatile long * mem = &(val->count);
 
asm volatile (
"1: \n"
"ldr r2, [%1] \n"
"add r3, r2, %2 \n"
"str r3, %0 \n"
"swp r3, r3, [%1] \n"
"cmp r3, r2 \n"
"bne 1b \n"
 
: "=m" (ret)
: "r" (mem), "r" (i)
: "r3", "r2"
);
 
return ret;
}
 
#endif