ARM assembly instruction set 汇总(一)

    ARM Core指令现在越来越强大,同时又因此能耗低,现在越来越广泛地应用于移动设备中。随着3G时代的到来,各种移动终端设备中都有多媒体功能,而且是功能越多且性能越优.很多smartphone上都能播放高清的视频了。在这就把ARM assembly instruction sets 进行次总结,也好让自己对相关的指令更加地灵活应用。

    目前由指令集来看,主要有以下几种:ARMv4, ARMv5E, ARMv6 and Neon.

    各种ARM CPU core都有其对应的指令集,其体的型号可查ARM 公司资料(在公司主页可以找到很有用的infos),如:ARM7TDMI, ARM720T,ARM920T等用ARMv4 ISA; ARM7EJ-S, AMR926EJ-S, ARM1020E 等用ARMv5E, ARM1036J-S, ARM1136J-S等用ARMv6 ISA, Cortex-A8 等用Neon. 所有的ARM core都有向下兼容性。

 本文基于ARMv4,来对ARMv5E, ARMv6 和Neon ISAs增加部分进行汇总,并分析新增指令会带来什么样的性能提升。

   ARMv5E 扩展提供了许多新的指令。

   (1) CLZ  Rd, Rm    ---- 零计数指令用于计算最高符号位与第一个1之间的零的个数

   这个指令在Speech/Audio codec 归一化运算中很有用,如用ARMv4 ISA实现前向零计数会有用到好几第指令来实现。

   (2) QADD Rd, Rm, Rn   --- Rd = Sat(Rm + Rn)

        QDADD Rd, Rm, Rn  ---- Rd = Sat(Rm + Rn << 1)

        QSUB    Rd, Rm, Rn  ---- Rd = Sat(Rm - Rn)

        QDSUB  Rd, Rm, Rn  ---- Rd = Sat(Rm - Rn << 1)

        由于代码的定点化过程中,对很多运算都有饱和保护,用C或ARMv4 ISA来实现这个功能效率会很低。但用ARMv5只照一条指令就行了。

   (3) 乘累加指令

        ARMv5E在音频算法方面的optimization效果会很好,主要是有新增加了16bits*16bits,32bits*16bits乘累加指令。而音频很多源数据是16bits,同时也有可能一些filter coefs 是32bits,这时ARMv5E指令就能很好的发挥其威力.

        SMLAxy    Rd, Rm, Rs, Rn    --- Rd = (Rm.x * Rs.y) + Rn

        SMLALxy   RdHi, RdLo, Rm, Rs --- [RdHi, RdLo] += Rm.x * Rs.y

        SMLAWy    Rd, Rm, Rs, Rn    ---- Rd = ((Rm*Rs.y) >> 16) + Rn

        SMULxy     Rd, Rm, Rs          ---- Rd = Rm.x + Rs. y

        SMULWy    Rd, Rm, Rs          ---- Rd = ((Rm*Rs.y) >> 16)

       

 

       

你可能感兴趣的:(assembly)