2 个版本
0.1.1 | 2024年5月24日 |
---|---|
0.1.0 | 2024年5月24日 |
#339 in 过程宏
13KB
142 行
Asm Unroll
提供比正常行内汇编更多的功能的宏。 asm_ext!()
允许将循环体展开为带有字面值的汇编行。
示例
use asm_unroll::asm_ext;
pub fn sum_array(array: &[i64; 8]) -> i64 {
let output: i64;
unsafe {
asm_ext!(
// quickly zero a register
"xor {output:e}, {output:e}",
// This loop is unrolled and `{i}` is replaced with a literal.
for i in 0..8 {
"add {output}, [{array} + 8*{i}]",
}
// inputs:
array = in(reg) array,
// outputs:
output = out(reg) output,
options(nostack),
);
}
output
}
编译成以下汇编代码
push rax
xor eax, eax
add rax, qword ptr [rdi]
add rax, qword ptr [rdi + 8]
add rax, qword ptr [rdi + 16]
add rax, qword ptr [rdi + 24]
add rax, qword ptr [rdi + 32]
add rax, qword ptr [rdi + 40]
add rax, qword ptr [rdi + 48]
add rax, qword ptr [rdi + 56]
pop rcx
ret
许可证
许可如下之一
- Apache许可证第2版 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则根据Apache-2.0许可证定义,你提交的任何有意包含在工作中的贡献,都将按照上述方式双许可,没有任何额外的条款或条件。