请问下 ARM 的VFP指令如何用,谢谢!

sno_guo 2012-12-11 05:35:45
我想在我的代码中加入浮点计算, 这样我使用到inline 嵌入到gcc中, 如果正常的程序(非vfp):我会这样:
__asm__(
"add %0, %1,%2,lsl #16\n"
:"=r"(ret)
:"r"(a),"r"(b)
);


可是如果是浮点计算的话,应该怎么做的, 谁能给个例子,谢谢!

我没有从google上搜到相关的例子,谢谢!
...全文
608 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cimeng2013 2015-05-09
  • 打赏
  • 举报
回复
还记得咋解决的吗,博客里面没找到
sno_guo 2013-01-06
  • 打赏
  • 举报
回复
自己看明白了,如果谁刚好也不懂不话,可以看我的博客。 里面说的很清楚,有例子。
sno_guo 2012-12-31
  • 打赏
  • 举报
回复
有些计算是汇编做不了的,比如你要在一个有很多个大型结构体的函数中。使用汇编,怎么办,结构体中的每个元素的偏移地址是不知道的,那么只能使用inline汇编,这样就要使用到inline的汇编。
HMGuardian 2012-12-31
  • 打赏
  • 举报
回复
编译交叉编译工具链的时候使用选项"--with-float=hard"以生成支持硬件浮点的gcc 编译程序的时候使用选项“-mhard-float”以指明使用硬件浮点 呵呵,我自己也不清楚,木有用过,可以一试,注意浅尝则止……
lr2131 2012-12-30
  • 打赏
  • 举报
回复
C与汇编的混编有2中方法: 1.在C中用类似于__asm的关键字来插入汇编 2.在汇编文件*.s中用汇编编写代码,在C中调用。 我一般都是用第二种,上面帖子说的也是第二种。因为第一种有什么限制(不记得了,而且感觉确实第二种好用的多),你这是不是因为__asm的限制不知道,我一般都不采用第一种方式的,不是很清楚。
lr2131 2012-12-20
  • 打赏
  • 举报
回复
你的意思是说,已经在汇编文件中实现了汇编函数是吗?但只是不会在C文件中来调用这个汇编的函数是吗? 如果是这样,LZ应该问怎么在C中调用汇编。方法是: 1. 在汇编文件中写好汇编函数,自己注意寄存器的压栈。调用最好要服从APCS或ATPCS的要 求,说白了也就是函数传参的要求。汇编函数名也就是这个函数的lable,也即是起始 地址,假如说叫AssemblyFunction 2. 在这个汇编文件中的开头添加 EXPORT 汇编函数函数名,你这就该是 EXPORT AssemblyFunction 3. 在需要调用这个汇编函数的c文件或对应的头文件中声明: extern 函数返回类型 AssemblyFunction(形参列表); 如果有返回值,一般都是用R0返回的。
sno_guo 2012-12-20
  • 打赏
  • 举报
回复
等我明白了,我会贴出来的,呵呵
sno_guo 2012-12-20
  • 打赏
  • 举报
回复
哦,谢谢,我的意思是:怎样编写一个嵌入到C代码中的vfp指令,我试了很多方法,可是无法成功, 我上面有举例子的,呵呵 一般的arm指令 用__asm__(xxxxxx)这样就可以直接嵌入到C代码中,可是vfp指令却不行,不知道为什么 等我把这个弄明白了,再看看,呵呵,谢谢了
sno_guo 2012-12-12
  • 打赏
  • 举报
回复
谢谢回复,我用的cpu是有浮点运算的,我可以直接在.S文件中编写浮点的汇编函数,然后用CROSS-gcc编译,然后在板子上运行, 可是现在的情况是:我想嵌入到我的C代码中,这样就用到了嵌入的一些东西,不知道该如何做了,才来这里提问的,呵呵,
lr2131 2012-12-12
  • 打赏
  • 举报
回复
没有浮点数协处理器的CPU,处理浮点数的时候是用的软件模拟浮点数的。前一周的项目开发还遇到过这种问题,最后不用浮点数运算,生成的bin文件直接少了2K,可见这个软件模拟浮点数运算的代码量是很大的,当然这个和精度有关,精度越高,代码量越大。没有去看这个软件模拟浮点数运算的汇编代码。LZ可以用C写一下用到浮点数运算的代码,然后再调试或生成的汇编中去看这个是怎么做的。
自己利用业余优化了一个h264的解码器,只使用在armv6架构的android2.3版本的手机上, 优化的内容是:完全用汇编重写了解码端h264的预测算法、IDCT算法、反量化算法、MC算法、loop_filter算法。 我的测试: 手机:C8650,配置:CPU:MSM7627-600MHZ,RAM:512M,android2.3.6 测试结果(baseline,mainline,highline解码速度相差不是很大): 352*288的H264视频:完全流畅播放 512*288的H264视频:每秒播放20--25帧 704*576的H264视频:每秒播放20帧左右 1280*544的H264视频:每秒解码12-15帧,播放8--9帧(主要是YUV420转rgb565这里太浪费时间,还在优化中) 1280*720的H264视频:每秒解码13-16帧,播放8--10帧(也是YUV420转rgb565这里浪费时间), 测试结果:1280*544和1280*720的视频文件中,我的解码器要远远优于市面上的mobo播放器,开讯播放器等播放器的解码播放速度。 你如果要测试,则:需要您的手机CPU是armv6架构的,并且支持vfpv3。 视频条件: 视频采样点是8位,完全符合H264编码的视频文件(打包成多媒体格式也可以),采样格式是YUV420。(因为一直从事安防行业,就只按照安防的通用格式来) 下一步的计划是:利用ARMvfp协处理器汇编指令,争取把YUV420转RGB565的转换速度优化到 稍后上传一些一些测试文件,欢迎下载测试(可点击我的名字,查找),谢谢 我会一直在H264的解码算法这块进行优化,不做播放器,只做高性能的H264解码器,如果您有兴趣,希望和我联系:sno_guo#163.com 谢谢

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧