2.2.2 ARM体系结构版本的变种
ARM处理器是典型的SoC,其处理器核的版本用体系结构版本号标记,但在实际制造过程中,ARM处理器核的具体功能要求往往会与某一个标准ARM体系结构版本不完全一致,会在一个体系结构版本上添加或减少一些功能。ARM公司制定了标准,使用一些字母后缀来标明基于某标准ARM体系结构版本之上的不同之处,这些字母称为ARM体系结构版本变量或者变量后缀。带有变量后缀的ARM体系结构版本称为ARM体系结构版本变种。目前主要有以下变种:
(1)T变种(Thumb指令集)
Thumb指令是ARM指令的一个子集,它从标准32位ARM指令集中抽出36条指令格式,重新编成16位的操作码,以节省存储空间。运行时,16位的Thumb指令又由处理器解压成32位的ARM指令,在ARM环境下执行。因此,Thumb技术具有比16位处理器更高的处理性能(运行在ARM环境:地址空间、寄存器、移位器、算术逻辑单元、存储器接口宽度等都是32位),同时具有比32位处理器更高的代码密度,同样的程序运行在Thumb状态下时其代码尺寸仅为ARM状态下的60%~70%。
ARM指令是32位的,其运行环境也是32位的。一般来说,指令越长,功能越强大,那为什么还要再出16位Thumb指令(T变种)呢?
在ARMv4前,基于CISC的8位、16位处理器在性能上不能满足移动电话、磁盘驱动器、调制解调器等的需求,而基于CISC的32核虽性能可满足要求,但在体积、功耗及成本等方面又不能满足要求;基于RISC的32位核处理能力虽能满足要求,但代码密度低,需较大存储空间,也不具成本优势。因此需要一种处理性能强、代码密度高的处理器,于是便产生了Thumb指令,即T变种。
与ARM指令集相比,T指令集具有以下局限:
① 完成相同的操作,Thumb通常需要更多的指令,不适宜对运行时间要求高的系统使用;
② 无异常处理指令,异常中断时需回到ARM指令集。
Thumb指令不是一个完整的指令集,通常需要将Thumb指令与ARM指令混合使用。
(2)M变种(长乘法指令)
M变种增加了如下两条长乘指令:
① 32位整数乘32整数产生64位整数;
② 32位整数乘32整数加32位整数产生64位整数。
M变种首先在ARMv3开始引入,现已成为所有版本的标准部分。
(3)E变种(增强型DSP指令)
E变种增加了一些附加的指令,这些指令用于增强处理器对一些典型的DSP算法的处理性能。ARM在提供通用的RISC处理器架构的同时,为其增添了一些针对特定应用的高性能指令集,以期能够达到软件和硬件的一个优化平衡。这样,一些高度涉及信号处理的应用本来是要借助一块专用DSP来完成的,现在由一个ARM内核就可以实现同样的功能。有着DSP增强指令的内核是最适合于应用在既需要高性能DSP核,同时又要求能够进行有效的任务控制的场合,如大容量存储器,语音编码器,语音识别与合成,网络应用,车控系统,智能手机,发报机和调制解调器等。
E变种增加的指令主要包括:
① 单周期16×16和32×16的乘法指令;
② 增加了饱和运算功能的运算指令,这些指令为开发稳定的操作系统和比特级精确的算法提供了方便;
③ 前导零指令为算法的标准化和浮点数运算,特别是对于除法运算,带来了高性能;
④ 进行双字数据操作的指令,包括双字读取指令、双字写入指令和协处理器传输指令;
⑤ Cache预取指令PLD。
E变种始用于ARMv5T。
(4)J变种(Java加速器Jazelle)
ARM的Jazelle技术提供的Java加速器运行Java代码比JavaVM快8倍,功耗降80%。
Jazelle技术可在单处理器上同时运行Java应用程序,取代原需要双处理器或协处理器的场合。
(5)SIMD变种(ARM媒体功能扩展)
SIMD指令针对音视频处理设计,为下一代的Internet应用产品、移动电话和PDA等需要流式媒体处理的终端设备提供解决方案。SIMD指令使处理器的音视频性能提高2~4倍,可同时进行2个16位操作数或者4个8位操作数的运算,用户可自定义饱和运算的模式,可进行2个16位操作数的乘加/乘减运算及32位乘以32位的小数运算。
ARM体系结构版本的变种总结如表2.2所示。
表2.2 ARM体系结构版本的技术变种