免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1408 | 回复: 0

ARM 浮点运算函数/宏库 [复制链接]

论坛徽章:
0
发表于 2011-12-23 02:29 |显示全部楼层
 Andrew Huang <bluedrum@163.com> 转载请注明作者及联络方式

 ARM的浮点汇编指令集可以参考如下参考文档

可以直接使用写类似函数的宏来完成一组浮点运算



一.嵌入式汇编代码编写

关于使用GNU的嵌入式汇编,可以参见的我的博文
  <<gnu C语言中嵌入式汇编>>

一种函数的写法可以参见,内核中的atomic.h的定义

  1. static inline int atomic_add_return(int i, atomic_t *v)
  2. {
  3.     unsigned long tmp;
  4.     int result;

  5.     __asm__ __volatile__("@ atomic_add_return\n"
  6. "1:    ldrex    %0, [%2]\n"
  7. "    add    %0, %0, %3\n"
  8. "    strex    %1, %0, [%2]\n"
  9. "    teq    %1, #0\n"
  10. "    bne    1b"
  11.     : "=&r" (result), "=&r" (tmp)
  12.     : "r" (&v->counter), "Ir" (i)
  13.     : "cc");

  14.     return result;
  15. }


而写成带返回值的宏的格式 irqflags.h

  1. /*
  2.  * Save the current interrupt enable state & disable IRQs
  3.  */
  4. #define raw_local_irq_save(x)                    \
  5.     ({                            \
  6.         unsigned long temp;                \
  7.         (void) (&temp == &x);                \
  8.     __asm__ __volatile__(                    \
  9.     "mrs    %0, cpsr        @ local_irq_save\n"    \
  10. "    orr    %1, %0, #128\n"                    \
  11. "    msr    cpsr_c, %1"                    \
  12.     : "=r" (x), "=r" (temp)                    \
  13.     :                            \
  14.     : "memory", "cc");                    \
  15.     })

二.浮点函数库




您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP