标签: fpu

如何在MacOSX上设置C++的双精度?

我正在尝试移植_controlfp(_CW_DEFAULT,0xffffffff); 从WIN32到Mac OS X/Intel.我完全不知道如何移植这条指令......你呢?谢谢!

c++ macos fpu double-precision

3
推荐指数
1
解决办法
734
查看次数

fpu以基于堆栈的方式实现寄存器的动机是什么?

fpu以基于堆栈的方式实现寄存器的动机是什么?据我所知,其他指令集如x86/sse使用命名寄存器.我可以想象基于堆栈的属性通常与我们的函数思想相对应,从而为汇编程序员提供了更直观的设计.

然而,我很好奇是否有一些更有形的动机,即技术优势.

assembly stack fpu

3
推荐指数
1
解决办法
239
查看次数

给定浮点数时如何避免FPU?

嗯,这根本不是一个优化问题.

我正在写一个(现在)简单的Linux内核模块,我需要找到一些位置的平均值.这些位置存储为浮点(即float)变量.(我是整个事情的作者,所以我可以改变它,但我宁愿保持漂浮的准确性,如果我可以避免它,也不参与其中).

现在,这些位置值仅存储(或至少用于)内核中的存储空间.一个用户应用程序写入这些数据(通过共享内存(我正在使用RTAI,所以我在内核和用户空间之间共享内存))和其他人从中读取数据.我假设浮点变量的读写不会使用FPU,所以这是安全的.

安全的,我的意思是避免在内核中使用FPU,更不用说某些系统甚至可能没有FPU.我不会使用kernel_fpu_begin/end,因为这可能会破坏我的任务的实时性.

现在在我的内核模块中,我真的不需要太多的精度(因为无论如何平均位置),但我需要它说0.001.我的问题是,如何在不使用FPU的情况下将浮点数转换为整数(原始数字的1000倍)?

我想过从float的位模式中手动提取数字,但我不确定这是不是一个好主意,因为我不确定endian-ness如何影响它,或者即使所有架构中的浮点都是标准的.

c floating-point fpu linux-kernel rtai

3
推荐指数
2
解决办法
2220
查看次数

如何将ST(0)移动到EAX?

Hullo,我正在学习x86 FPU汇编,我有一个简单的问题,我找不到答案:

如何将值从ST(0)(FPU堆栈顶部)移动到EAX

还有:
这段代码是否正确:

; multiply (dot) two vectors of 3 floats passed by pointers as arg 1 arg 2
; passings are ok I think, but not sure if multiplies-adds are ok

    push    ebp                                     
    mov     ebp, esp                                
    mov     eax, dword [ebp+8H]                     
    mov     edx, dword [ebp+0CH]                    

    fld     qword [eax]                             
    fmul    qword [edx]                             
    fld     qword [eax+4H]                          
    fmul    qword [edx+4H]                          
    fld     qword [eax+8H]                          
    fmul    qword [edx+8H]                          
    faddp   st1, st(0)                              
    faddp   st1, st(0)                            
    fstp    qword [ebp+10H]     ; here …
Run Code Online (Sandbox Code Playgroud)

x86 assembly fpu x87

3
推荐指数
1
解决办法
6589
查看次数

gcc选项同时使用i87,AVX但也不使用SSE

当编译为支持AVX扩展的处理器(比如-m64 -march=corei7-avx -mtune=corei7-avx适用)时,同时使用-mfpmath=both -mavx密钥是否有意义?没有这么多,它会导致编译器使用三套指令(i87,SSE,AVX在同一时间)?或者只是i87为了标量(在某种意义上)和AVX仅用于向量?

gcc sse instruction-set fpu avx

3
推荐指数
1
解决办法
796
查看次数

MMX指令和x87 FPU标记字

section .data
    qVar1: dq 1


section .bss
    var28: resb  28


section .text
    _main:

        ; Use an MMX instruction

            movq mm0, [qVar1] ; Move quadword from r/m64 to mm.

        ; Read Tag Word

            fstenv [var28]
            mov    ax, [var28 + 8] ; move the Tag Word to ax
Run Code Online (Sandbox Code Playgroud)

这一刻ax0101 0101 0101 0110

但是从英特尔手册,第9.5.1MMX指令和x87 FPU标签字,我引用:

在每个MMX指令之后,整个x87 FPU标记字被设置为有效(00B).

那么为什么ax不是全零呢?

x86 assembly fpu x87 mmx

3
推荐指数
1
解决办法
237
查看次数

我可以从我的EAX/RAX中获取一个int到FPU的寄存器,如st0吗?

我目前正在大学开展一个小型的Assembler项目.现在我的问题是,是否有可能得到一个乘法器(int)的skalar,这是由用户给出的,从我的EAX/RAX寄存器到我的FPU寄存器之一,如st0?我正在使用NASM语法.

谢谢

x86 assembly nasm fpu

3
推荐指数
1
解决办法
260
查看次数

将寄存器值加载到 FPU 堆栈

我目前正在开发一个同时使用 CPU 和 FPU 寄存器的程序集。我的问题涉及如何将寄存器值加载到 FPU 堆栈(即 ecx)。

mov    ecx, 10d    ; Load 10 into ECX
fldpi              ; Load Pi
fild   ecx         ; This does not work, it does however for .data variables
fmul               ; Multiply
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。我正在使用 Visual Studio 2015/MASM 进行开发,使用 .386 和 .model flat、STDCALL。

最好的问候,Z

cpu x86 assembly fpu

2
推荐指数
1
解决办法
1241
查看次数

AVX 和浮点有什么关系,为什么 AVX 用于 FP 计算?

我最近正在研究 FP 和 AVX,在维基百科(https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#Applications)上我读到 AVX 用于 FP 计算。我不明白为什么并行环境 FP 是进程。另外https://forums.aida64.com/topic/1629-real-world-benefit-of-fpu-test/以这种形式AIDA管理员告诉FPU使用AVX等。

x86 fpu avx avx2

2
推荐指数
1
解决办法
1383
查看次数

使用MASM Assembly中的FPU x87指令集执行操作时,为什么会得到无意义的数字?

我最近开始学习汇编,现在正在学习FPU x86体系结构和FPU堆栈。我有两个简单的函数,可在摄氏温度和华氏温度之间转换,反之亦然。

我研究了各种不同的指令,尝试了FPU指令的变体,包括自动执行POP操作的指令,并尝试通过调试器了解我所看到的内容。迄今无济于事。

.386
.model flat, c

.const
  r8_ftoc real8 0.5555555556 ;5/9
  r8_ctof real8 1.8 ;9/5
  i4_32 dword 32
.code
  fahrentocel PROC
    push ebp
    mov ebp, esp
    fld[r8_ftoc]
    fld real8 ptr [ebp+8] ; load f 
    fild[i4_32] ; load 32    
    fsubp
    fmulp
    pop ebp
    ret
  fahrentocel ENDP

  celtofahren PROC
    push ebp
    mov ebp, esp
    fild real8 ptr [ebp+8] ; load c
    fmul[r8_ctof]
    fiadd[i4_32]
    pop ebp
    ret
  celtofahren endp
END
Run Code Online (Sandbox Code Playgroud)

C代码:

extern "C" double fahrentocel(double temp);
extern "C" double celtofahren(double …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly masm fpu

2
推荐指数
1
解决办法
77
查看次数

标签 统计

fpu ×10

assembly ×6

x86 ×6

avx ×2

c ×2

x87 ×2

avx2 ×1

c++ ×1

cpu ×1

double-precision ×1

floating-point ×1

gcc ×1

instruction-set ×1

linux-kernel ×1

macos ×1

masm ×1

mmx ×1

nasm ×1

rtai ×1

sse ×1

stack ×1