使用 Milicode 例程

milicode 例程包含依赖于机器的功能和关键性能的功能。

对于 POWER ® 系列和 PowerPC®,所有定点除法指令以及部分乘法指令都有所不同。 为了允许程序基于任一体系结构在系统上运行,操作系统提供了一组特殊例程。 它们被称为 milicode 例程,并包含依赖于机器的功能和性能关键型功能。 Milicode 例程位于内核段中的固定地址处。 可以通过 布拉 指令来访问这些例程。 所有 Milicode 例程都使用链接寄存器。

注意:
  1. 没有不必要的寄存器被破坏。 请参阅每个 milicode 例程的定义以获取寄存器使用情况信息。
  2. Milicode 例程不改变任何浮点寄存器,计数寄存器或通用寄存器 (GPR) 10-12。 如果调用出现在不使用非易失性 GPR 的叶过程中,那么链接寄存器可以保存在 GPR 中 (例如, GPR 10)。
  3. Milicode 例程不使用 TOC。

提供了以下 Milicode 例程:

描述
__mulh 计算整数产品的高位 32 位 arg1 * arg2
input
R3 = arg1 (带符号整数)
R4 = arg2 (带符号整数)
output
R3 = 高阶 32 位 arg1*arg2
POWER ® 系列 注册使用情况
GPR3, GPR4, MQ
PowerPC® 注册使用情况
GPR3, GPR4
__mull 计算在两个 32 位寄存器中返回的整数产品 arg1 * arg2的 64 位。
input
R3 = arg1 (带符号整数)
R4 = arg2 (带符号整数)
output
R3 = 高阶 32 位 arg1*arg2
R4 = 低阶 32 位 arg1*arg2
POWER ® 系列 注册使用情况
GPR3, GPR4, MQ
PowerPC® 注册使用情况
GPR0, GPR3, GPR4
__divss 计算有符号整数 arg1/arg2的 32 位商和 32 位余数。 对于除以零和溢出,商和余数是未定义的,并且可能因实现而变化。
input
R3 = arg1 (红利) (带符号整数)
R4 = arg2 (除数) (带符号整数)
output
R3 = arg1/arg2 的商 (带符号整数)
R4 = arg1 的余数/arg2 (带符号整数)
POWER ® 系列 注册使用情况
GPR3, GPR4, MQ
PowerPC® 注册使用情况
GPR0, GPR3, GPR4
__divus 计算了无符号整数 arg1/arg2的 32 位商和 32 位余数。 对于除以零和溢出,商和余数是未定义的,并且可能因实现而变化。
input
R3 = arg1 (红利) (无符号整数)
R4 = arg2 (除数) (无符号整数)
output
R3 = arg1/arg2 的商 (无符号整数)
R4 = arg1 的余数/arg2 (无符号整数)
POWER ® 系列 注册使用情况
CR 的 GPR0, GPR3, GPR4, MQ, CR0 和 CR1
PowerPC® 注册使用情况
GPR0, GPR3, GPR4
__quoss 计算有符号整数 arg1/arg2的 32 位商。 对于除以零和溢出,商和余数是未定义的,并且可能因实现而变化。
input
R3 = arg1 (红利) (带符号整数)
R4 = arg2 (除数) (带符号整数)
output
R3 = arg1/arg2 的商 (带符号整数)
POWER ® 系列 注册使用情况
GPR3, GPR4, MQ
PowerPC® 注册使用情况
GPR3, GPR4
__quous 计算无符号整数 arg1/arg2的 32 位商。 对于除以零和溢出,商和余数是未定义的,并且可能因实现而变化。
input
R3 = arg1 (红利) (无符号整数)
R4 = arg2 (除数) (无符号整数)
output
R3 = arg1/arg2 的商 (无符号整数)
POWER ® 系列 注册使用情况
CR 的 GPR0, GPR3, GPR4, MQ, CR0 和 CR1
PowerPC® 注册使用情况
GPR3, GPR4
以下示例在汇编程序中使用了 穆尔赫 milicode 例程:

li R3, -900
li R4, 50000
bla .__mulh
...
.extern .__mulh