Andrew Huang <bluedrum@163.com> 轉(zhuǎn)載請(qǐng)注明作者及聯(lián)絡(luò)方式
ARM的浮點(diǎn)匯編指令集可以參考如下參考文檔
可以直接使用寫(xiě)類(lèi)似函數(shù)的宏來(lái)完成一組浮點(diǎn)運(yùn)算
一.嵌入式匯編代碼編寫(xiě)
關(guān)于使用GNU的嵌入式匯編,可以參見(jiàn)的我的博文 <<gnu C語(yǔ)言中嵌入式匯編>>
一種函數(shù)的寫(xiě)法可以參見(jiàn),內(nèi)核中的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;
-
}
而寫(xiě)成帶返回值的宏的格式 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"); \
-
})
二.浮點(diǎn)函數(shù)庫(kù)
|