1.2. MIPS中的MIPS16e ASE

对应的,MIPS中也有个类似的做法。

普通MIPS是32位的,当然也有MIPS64的。

MIPS中有个MIPS16e ASE ,其中ASE是Application Specific Extension,(根据应用的)专用扩展。

关于为何叫做ASE,我的理解是,MIPS16e ASE是针对MIPS32来说的,是对其一种扩展,是在,某些特定的应用(多为嵌入式应用)下减少代码大小,方面的扩展,因此,才叫做Specific Extension专用扩展。

MIPS16e ASE也常被简称为MIPS16e。

在MIPS16e ASE之前,有个MIPS16™,提供了一些额外的指令,用于提高代码的兼容性。而MIPS16e ASE,可以看作是MIPS16™的增强版。

相比MIPS32,利用MIPS16e编译的应用程序平均减小30%,最多可减少40%。

MIPS16e的指令集,兼容MIPS32 和 MIPS64的指令集。

程序也可以在MIPS16e 模式和MIPS 32位模式之间切换。

1.2.1. MIPS16e ASE的优势和劣势

用了MIPS16e ASE后,代码量减少,也相应的带来一个好处,还能提高指令缓存命中率(cache hit rate),即降低了cache miss rate。

而由于缓存是个耗电大户,因此,相应地减少了功耗,实现省电,环保(有利于生态系统Ecosystem)的功效。

与优点相对应的缺点是,MIPS16e ASE比普通的MIPS32,增加了解码的复杂度,即解码时间相对增加了。

不过,拿MIPS16e ASE的劣质和优势相比,总体优势还是很明显的。

不过,貌似实际应用中用到MIPS16e ASE的不多。

1.2.2. 软件检测CPU处于何种模式

软件中可以通过检测MIPS16e ASE中的Config1 CP0寄存器的CA bit位来判断是否是处在MIPS16e ASE模式。

图 1.1. Config1(CP0 Register 16, Select 1)寄存器域值说明

Config1(CP0 Register 16, Select 1)寄存器域值说明

1.2.3. MIPS16e ASE的一些细节特性

  1. MIPS16e指令为16位指令
  2. 32个通用寄存器中有8个可用于MIPS16e模式;其中包括常用于变元传递(argument passing)和返回值的寄存器
  3. 与MIPS32一起使用时,支持8位、16位和32位数据类型;与MIPS64一起使用时,支持8位、16位、32位和64位数据类型
  4. MIPS16e 和 MIPS32/64之间的模式切换允许特权架构/浮点/ASE支持;通过一条特殊的跳转指令来实现模式切换的软件控制
  5. EXTEND指令可让16位指令有效创建16位立即值(immediate value)
  6. SAVE/RESTORE指令可提高栈帧处理(stack frame handling)的代码密度
  7. PC相关寻址可提高创建导入/存储地址的代码密度
  8. 某些指令采用隐型寄存器描述符(implied register specifier)来提高代码密度--用于导入/存储的堆栈指针或程序计数器;分配一个GPR(通用寄存器)来比较分支结果
  9. 仍支持专用宏指令序列