Since I won't have much time after today, before Wednesday to get a lot of coding in (exams come first), I thought I'd at least post the bits of aarch64 assembler code that I've managed to template out on my machine.
It's not too much, and I think I might need to edit a line or two of it so far, but it's coming along. I guess this is like my rough draft:
#if defined(__aarch64__) || defined(__arm64__)
#ifndef __ARCH_AARCH64_ATOMIC__
#define __ARCH_AARCH64_ATOMIC__
#ifdef CONFIG_SMP
#define SMP_LOCK “lock ; ”
#else
#define SMP_LOCK "”
#endif
typedef struct {volatile int counter;} atomic_t;
#define ATOMIC_INIT(I) { (i) }
#define atomic_read(v) ((v)->counter)
#define atomic_set(v,i) (((v)->counter) = (i))
static __inline__ void atomic_add(int i, atomic_t *v)
{
__asm__ __volatile__(
SMP_LOCK “add x1, x0, x0“
:“=m” (v->counter)
:"ir” (i), “m” (v->counter)) ; - this needs fixing/porting to proper aarch64
}
static __inline__ void atomic_sub(int i, atomic_t *v)
{
__asm__ __volatile__(
SMP_LOCK “sub x2, x1“
: “=m” (v->counter)
:"ir” (i), “m” (v->counter));
}
No comments:
Post a Comment