Andrew Huang <bluedrum@163.com> 转载请注明作者及联络方式
ARM的浮点汇编指令集可以参考如下参考文档
可以直接使用写类似函数的宏来完成一组浮点运算
一.嵌入式汇编代码编写
关于使用GNU的嵌入式汇编,可以参见的我的博文 <<gnu C语言中嵌入式汇编>>
一种函数的写法可以参见,内核中的atomic.h的定义
- static inline int atomic_add_return(int i, atomic_t *v)
-
{
-
unsigned long tmp;
-
int result;
-
-
__asm__ __volatile__("@ atomic_add_return\n"
-
"1: ldrex %0, [%2]\n"
-
" add %0, %0, %3\n"
-
" strex %1, %0, [%2]\n"
-
" teq %1, #0\n"
-
" bne 1b"
-
: "=&r" (result), "=&r" (tmp)
-
: "r" (&v->counter), "Ir" (i)
-
: "cc");
-
-
return result;
-
}
而写成带返回值的宏的格式 irqflags.h
- /*
-
* Save the current interrupt enable state & disable IRQs
-
*/
-
#define raw_local_irq_save(x) \
-
({ \
-
unsigned long temp; \
-
(void) (&temp == &x); \
-
__asm__ __volatile__( \
-
"mrs %0, cpsr @ local_irq_save\n" \
-
" orr %1, %0, #128\n" \
-
" msr cpsr_c, %1" \
-
: "=r" (x), "=r" (temp) \
-
: \
-
: "memory", "cc"); \
-
})
二.浮点函数库
|