Thumb / Thumb-2 / ThumbEE

本文转载至:http://zh.wikipedia.org/wiki/ARM%E6%9E%B6%E6%A7%8B

Thumb

较新的ARM处理器有一种16-bit指令模式,叫做Thumb,也许跟每个条件式运行指令均耗用4位的情形有关。在Thumb模式下,较小的opcode有更少的功能性。例如,只有分支可以是条件式的,且许多opcode无法访问所有CPU的暂存器。然而,较短的opcode提供整体更佳的编码密度(注:意指代码在存储器中占的空间),即使有些运算需要更多的指令。特别在存储器端口或总线宽度限制在32以下的情形时,更短的Thumb opcode能更有效地使用有限的存储器带宽,因而提供比32位代码更佳的性能。典型的嵌入式硬件仅具有较小的32-bit datapath寻址范围以及其他更窄的16 bits寻址(例如Game Boy Advance)。在这种情形下,通常可行的方案是编译成Thumb代码,并自行优化一些使用(非Thumb)32位指令集的CPU相关程序区,因而能将它们置入受限的32-bit总线宽度的存储器中。

首颗具备Thumb技术的处理器是ARM7TDMI。所有ARM9和后来的家族,包括XScale,都纳入了Thumb技术。

Thumb-2

Thumb-2技术首见于“ARM1156核心”,并于2003年发表。Thumb-2扩充了受限的16位Thumb指令集,以额外的32位指令让指令集的使用更广泛。因此Thumb-2的预期目标是要达到近乎Thumb的编码密度,但能表现出近乎ARM指令集在32位存储器下的性能。

Thumb-2至今也从ARM和Thumb指令集中派生出多种指令,包含位栏操作、分支建表和条件运行等功能。

Thumb Execution Environment(ThumbEE)

ThumbEE,也就是所谓的Thumb-2EE,业界称为Jazelle RCT技术,于2005年发表,首见于“Cortex-A8”处理器。ThumbEE提供从Thumb-2而来的一些扩充性,在所处的运行环境下,使得指令集能特别适用于运行阶段的编码产生(例如实时编译)。Thumb-2EE是专为一些语言如Limbo、Java、C#、Perl和Python,并能让实时编译器能够输出更小的编译码却不会影响到性能。

ThumbEE所提供的新功能,包括在每次访问指令时自动检查是否有无效指针,以及一种可以运行数组范围检查的指令,并能够分支到分类器,其包含一小部份经常调用的编码,通常用于高级语言功能的实现,例如对一个新对象做存储器配置。

你可能感兴趣的:(Thumb / Thumb-2 / ThumbEE)