使用 Milicode 例程
milicode 例程包含依赖于机器的功能和关键性能的功能。
对于 POWER ® 系列和 PowerPC®,所有定点除法指令以及部分乘法指令都有所不同。 为了允许程序基于任一体系结构在系统上运行,操作系统提供了一组特殊例程。 它们被称为 milicode 例程,并包含依赖于机器的功能和性能关键型功能。 Milicode 例程位于内核段中的固定地址处。 可以通过 布拉 指令来访问这些例程。 所有 Milicode 例程都使用链接寄存器。
注意:
- 没有不必要的寄存器被破坏。 请参阅每个 milicode 例程的定义以获取寄存器使用情况信息。
- Milicode 例程不改变任何浮点寄存器,计数寄存器或通用寄存器 (GPR) 10-12。 如果调用出现在不使用非易失性 GPR 的叶过程中,那么链接寄存器可以保存在 GPR 中 (例如, GPR 10)。
- Milicode 例程不使用 TOC。
提供了以下 Milicode 例程:
| 项 | 描述 |
|---|---|
| __mulh | 计算整数产品的高位 32 位 arg1 * arg2。
|
| __mull | 计算在两个 32 位寄存器中返回的整数产品 arg1 * arg2的 64 位。
|
| __divss | 计算有符号整数 arg1/arg2的 32 位商和 32 位余数。 对于除以零和溢出,商和余数是未定义的,并且可能因实现而变化。
|
| __divus | 计算了无符号整数 arg1/arg2的 32 位商和 32 位余数。 对于除以零和溢出,商和余数是未定义的,并且可能因实现而变化。
|
| __quoss | 计算有符号整数 arg1/arg2的 32 位商。 对于除以零和溢出,商和余数是未定义的,并且可能因实现而变化。
|
| __quous | 计算无符号整数 arg1/arg2的 32 位商。 对于除以零和溢出,商和余数是未定义的,并且可能因实现而变化。
|
以下示例在汇编程序中使用了 穆尔赫 milicode 例程:
li R3, -900
li R4, 50000
bla .__mulh
...
.extern .__mulh