assembly - 如何使用内联 x86 程序集添加两个浮点数?
问题描述
第一:我知道这是没有意义的,我稍后会写更复杂的东西(这是一个作业),这是一个起点。
这是我写的代码:
#![feature(asm)]
fn my_add(a: f32, b: f32) -> f32 {
let x: f32;
unsafe {
asm!(
"addss {0}, {1}",
inlateout(xmm_reg) a => x,
in(xmm_reg) b,
);
};
x
}
这编译为:
example::my_add:
sub rsp, 4
addss xmm0, xmm1
movss dword ptr [rsp], xmm0
movss xmm0, dword ptr [rsp]
add rsp, 4
ret
这些 movss 是从哪里来的?为什么它写入内存然后再次读取?
此外,这仅适用于 f32 而不适用于 f64,我不明白为什么:返回值是第一个参数的值
我没有注意到我在 f64 中使用了添加而不是添加。
我用rustc 1.57.0-nightly (25ec82738 2021-10-05)
.
解决方案
推荐阅读
- xodus - 如何触发垃圾收集器以减少数据库大小?
- javascript - 将真/假数组与其他数组进行比较
- r - 从 Sparklyr 中的字符串中提取十进制数字
- javascript - 将 Select2 数组输出转换为字符串
- python - 多处理我的循环/迭代(尝试...除外)
- java - RocksDB内存不足
- python - 提取整个html后如何选择子元素tbody?
- css - 导航栏滚动到固定顶部正常工作但是当浏览器重新加载时间滚动导航栏固定不工作使用引导程序 4?
- google-chrome-app - 在 Windows 工具栏中突出显示应用程序图标的方法是什么,类似于环聊和谷歌浏览器
- javascript - Reactjs将函数道具传递给组件道具“addrow”的值无效标签。从元素中删除它