FSINCOS

正弦和余弦

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
D9 FBFSINCOS有效有效计算ST( 0) 的正弦和余弦; 将 ST( 0) 替换为 大约正弦, 并将 大约 余弦 推到寄存器堆栈 。

实测开销

正在从 arch-data 加载实测数据...

说明

在寄存器 ST (0) 中计算 源操作数 的大概正弦和余弦,并将正弦存储于 ST (0) ,并将余弦推到 FPU 寄存器堆栈的顶端. (此指令比相继执行 FSIN 和 FCOS 指令更快 。)

源操作数必须用弧度给出,并且必须在-263到+263之间. 下表显示在采用各类数字的正弦和余弦时获得的结果,假设不存在下流.

FSINCOS 结果

ST(0)ST(1) 余弦ST( 0) 正弦
-**
-F- 1 to + 1- 1 to + 1
-0+1-0
+0+1+0
+F- 1 to + 1- 1 to + 1
+**
纳恩纳恩纳恩

行动

IF ST(0) < 263
    THEN
          C2 := 0;
          TEMP := fcos(ST(0)); // approximation of cosine
          ST(0) := fsin(ST(0)); // approximation of sine
          TOP := TOP - 1;
          ST(0) := TEMP;
    ELSE (* Source operand out of range *)
          C2 := 1;

FI;

FPU Flags Affected

C1                        Set to 0 if stack underflow occurred; set to 1 of stack overflow occurs.

                          Set if result was rounded up; cleared otherwise.

C2                        Set to 1 if outside range (-263 < source operand < +263); otherwise, set to 0.

C0, C3                    Undefined.

浮点 例外

#IS                       Stack underflow or overflow occurred.
#IA                       Source operand is an SNaN value, , or unsupported format.
#D                        Source operand is a denormal value.
#U                        Result is too small for destination format.
#P                        Value cannot be represented exactly in destination format.

异常

保护模式
#NMCR0.EM[bit 2] 或 CR0.TS[bit 3] = 1.
#MF如果存在待决的x87 FPU例外.
#UD如果使用 LOCK 前缀 。
实地址模式
与保护模式中的例外相同.
虚拟 8086 模式
与保护模式中的例外相同.
兼容模式
与保护模式中的例外相同.
64 位模式
与保护模式中的例外相同.

来源