首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将32位霓虹灯组件转换为64位?

如何将32位霓虹灯组件转换为64位?
EN

Stack Overflow用户
提问于 2016-07-01 16:02:31
回答 1查看 1K关注 0票数 0

我试图在64位iOS设备上使用MSFA (googles音乐合成),它有四个用于DSP操作的霓虹灯组装源文件,这些文件显然是为32位架构编写的。我最初被告知,最好把它改写成霓虹灯的本质,这样它就会成为建筑不可知论者。但是,在阅读了一些文章(如http://hilbert-space.de/?p=22)之后,将其作为纯手工编写的程序集似乎仍然是理想的。

我的问题是,把这个转换成64位是否微不足道?如果是的话,我怎么开始这么做呢?

.s文件是:

fir.s

kernel.s

iir.s

ladder.s

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-01 16:31:11

TL;DR:使用本质

检查asm输出以确保它不是哑的并不是个坏主意,但是使用intrinsics可以让编译器进行常量传播,并对顺序内核进行调度/软件管道。

如果您阅读从2009年起你联系的那个帖子上的注释线程,您会发现来自NEON的坏代码是一个gcc错误修复于2011年

编译器现在非常擅长处理内部的问题,并且不断改进。尤其是Clang可以做很多事情,比如使用不同的洗牌指令,而不是用本质写的东西。

至少它们适用于x86;用于ARM的编译器有时仍在与本质进行斗争,特别是当您试图访问16字节向量的两个8字节部分时,就像您通常希望在32位ARM代码中进行横向操作时那样。参见https://stackoverflow.com/questions/46910799/arm-neon-intrinsics-convert-d-64-bit-register-to-low-half-of-q-128-bit-regis / https://stackoverflow.com/questions/49511244/neon-intrinsic-for-sum-of-two-subparts-of-a-q-register -杰克·李报道说,早在2018年,一些clang版本就把它搞得一团糟,但GCC6.x并没有那么糟糕。

这在AArch64中可能没有那么大的问题。

asm-级别差异:

我根本不是这方面的专家,但主要的霓虹灯变化之一是,Aarch64有32个128 B霓虹灯寄存器(v0 - v31),而不是每个q寄存器混叠成两个d半。

还请参阅一些关于元素大小语法的官方ARM文件,其中可以使用.16B来指示由16个字节元素组成的向量。(相对于意味着每个元素是8位。)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38149695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档