刘品
学以致用---博主简介:专注语音、视频数字信号处理方面的研究以及算法在手机平台上面的移植和优化。涉及语音/音频编解码,语音增强,语音识别,语音音质客观评估,VOIP语音引擎 Qos算法模块和声音变速不变调和变调不变速等功能实现。熟悉ARM 各个系列的CPU,用ARMv4,ARMv5,ARMv6 and Cortex Neon 汇编优化相关算法代码,争取perforamance 最优。目前主要Windows mobile and Android platform上做相关speech/audio算法以及应用开发, HEVC 编解码器PC 和手机上的开发与应用。(交流Email:liupin.2008@gmail.com)

      本轮学习过程主要集中在ARM NEON技术的学习,主要包括指令的学习、编程技巧的总结。

       ARM NEON 技术是ARMv7体系结构的可选组件。NEON是针对高级媒体和信号处理应用程序以及嵌入式处理器64/128位混合SIMD技术,它是作为ARM内核的一部分实现的,但有自己的执行管道和寄存器组,该寄存器组不同于ARM核心寄存器组。

      NEON支持整数、定点和单精度浮点SIMD运算。这些指令在ARM和Thumb-2中都可用。

      NEON 扩展寄存器组:

      --- 16-128bit 四字寄存器Q0~Q15

      --- 32-64bit 双字寄存器D0~D31

      许多NEON数据处理指令可具有正常指令、长指令、宽指令、窄指令和饱和指令变体形式。NEON指令可处理:

      * 由以下内容构成的双字向量:

         ---8个8位元素

         ---4个16位元素

         ---2个32位元素

         ---1个64位元素

     * 由以下内容构成的四字向量

         ---16个8位元素

         ---8个16位元素

         --- 4个32位元素

         --- 2个64位元素

        正常指令

        正常指令可对上述任意向量类型执行运算,并生成大小相同且类型通常与操作数向量相同的结果向量。通过将 Q 附加到指令助记符,可以指定正常指令的操作数和结果必须全部为四字。 这样指定后,如果操作数或结果不是四字,则汇编程序会生成错误。

        长指令

        长指令对双字向量操作数执行运算,并生成四字向量结果。 所生成的元素通常是操作数元素宽度的两倍,并属于同一类型。通过将 L 追加到指令助记符来指定长指令。

        宽指令

        宽指令对一个双字向量操作数和一个四字向量操作数执行运算。 此类指令生成四字向量结果。 所生成的元素和第一个操作数的元素是第二个操作数元素宽度的两倍。通过将 W 追加到指令助记符来指定宽指令。

        窄指令

        窄指令对四字向量操作数执行运算,并生成双字向量结果。 所生成的元素通常是操作数元素宽度的一半。
通过将 N 追加到指令助记符来指定窄指令。

         饱和指令

        通过在 V 和指令助记符之间使用 Q 前缀来指定饱和指令。

     

posted on 2008-08-09 16:21  liupin  阅读(4045)  评论(4编辑  收藏  举报

-->