问题标签 [x87]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1226 浏览

.net - 为什么 .NET 使用 SIMD 而不是 x87 进行并非 SIMD 固有的数学运算?

这是一个好奇的问题,比什么都重要。我正在查看此代码反汇编(C#,64 位,发布模式,VS 2012 RC):

...并发现编译器在这里没有对日志使用 x87 指令(Power 使用日志),这很奇怪。当然,我不知道调用位置的代码是什么,但我知道 SIMD 没有 Log 功能,这使得这个选择更加奇怪。此外,这里没有任何东西是并行化的,那么为什么是 SIMD 而不是简单的 x87?

顺便说一句,我还发现没有使用 x87 FYL2X指令很奇怪,该指令专为第一行代码中所示的情况而设计。

任何人都可以对此有所了解吗?

0 投票
1 回答
4907 浏览

assembly - 在 LLVM 中调用 fsincos 指令比调用 libc sin/cos 函数慢?

我正在研究一种用 LLVM 编译的语言。只是为了好玩,我想做一些微基准测试。一方面,我在一个循环中运行了数百万次 sin / cos 计算。在伪代码中,它看起来像这样:

如果我使用以下形式的 LLVM IR 内联汇编计算 sin/cos:

这比分别使用 fsin 和 fcos 而不是 fsincos 更快。但是,它比我单独调用llvm.sin.f64andllvm.cos.f64内部函数要慢,后者编译为对 C 数学库函数的调用,至少在我使用的目标设置下(启用 SSE 的 x86_64)。

似乎 LLVM 在单/双精度 FP 之间插入了一些转换——这可能是罪魁祸首。这是为什么?抱歉,我是大会的相对新手:

与调用 llvm sin/cos 内在函数的相同测试:

您能否建议使用 fsincos 的理想装配是什么样的?PS。向 llc 添加 -enable-unsafe-fp-math 会使转换消失并切换到双精度(fldl 等),但速度保持不变。

0 投票
1 回答
1610 浏览

assembly - 为什么 Intel x87 寄存器是 80 位宽的?

为什么使用如此“奇怪”的寄存器大小?是否有任何文档说明为什么这些寄存器不宜使用 64 位或 128 位?

0 投票
2 回答
318 浏览

performance - 将 fpu 切换为单精度

在 fpu 切换到单精度模式前几年,我在旧 fpu 上读到过,除法和 sqr 的速度是正常模式下的两倍。

(检查它的来源http://stereopsis.com/FPU.html

还是这样,这样的切换可以加快一些循环,在里面产生很多浮点代码?

第二个问题相关,例如,在执行系统(winapi)调用时,我可以在代码中自由地玩弄 FPU 精度吗,与 fpu 舍入模式和系统端相同,api 是否也会破坏我的设置?

0 投票
1 回答
237 浏览

assembly - 如何在 asm(x87) 中查看并放入数组

我有一个任务 - 计算函数的 6 个结果 (Y = (20 * x) /(5 * x2 – 8,5)) x - 从 1 开始,每次计算必须增加 4 (1, 5, 9 .. )。

我写了一些代码,但我不明白如何制作循环并将数据放入数组。所有操作都必须在 asm 上 - 循环并放入数组,1 次迭代 - 数组中的 1 个元素

有我的代码:

}

0 投票
2 回答
299 浏览

assembly - sin() 的总和结果为 asm(x87)

我需要计算y(i) = sin(5*i)度数的总和,i每次迭代都会增加。我需要在总和大于 3 之前计算总和,并找出i总和何时更大。

使用下面的代码,我得到一个无限循环:

0 投票
1 回答
205 浏览

assembly - 为什么循环在 asm(x87) 中失败

我在循环中的 asm 中有一些计算,它必须在 Sum 为 3 之前,但循环一直工作并且永无止境。这是mu代码:

0 投票
2 回答
287 浏览

assembly - fpu 状态 (x87)

我正在搜索有关可以将多少值视为当前 fpu 状态的一部分的信息(我的意思是浮点代码计算所依赖的值)我知道这将是 3 种精确模式,4 种舍入模式,大约 5与 fpu 异常相关的位标志,但还有什么?tnx

0 投票
2 回答
155 浏览

assembly - sinus 是可扩展的吗?

sinus 我的意思是 c stdlib sin() / fpu assembl;y fsin。

我可以给这个正弦参数大约 16 个十进制数字或更多,例如 sin(1.1e-14); sin(1.2e-14) 然后得到结果,

sinus 在如此小的增量上几乎是线性的,但尽管它也可以以相同的 16 位精度计算,它是否也可以在如此小的增量上精确计算?

(我问这个问题是因为在一段时间内我似乎有点不寻常,因为它在论点和特别是输出值方面都如此精确地计算出来,所以我想知道它是否没有被削减或什么的)

0 投票
1 回答
1288 浏览

assembly - 使用 FFREE 和 FDECSTP

我无法理解这些事情:这些命令(FFREE、FDECSTP)有什么用?它可以用来从 fpu 堆栈中弹出值,还是出于其他目的?我不明白:/有人可以解释一下吗,tnx