如何将大数据类型(双精度/浮点型)加载到用于算术运算的寄存器中? 寄存器可以容纳一个字大小的数据吗? 如果只能添加2个寄存器以将结果加载到第三个寄存器,那么数据类型大于单个寄存器会发生什么?

===============>>#1 票数:0

例如,在SPARCv8 ABI中,将64位双精度加载到两个32位寄存器中,并且在两个寄存器上进行FP操作的时间相同。 fsqrtd %f10, %f8采用%f10:%f11中的值,并将根结果写入%f8:%f9。 在x86_32上,执行32x32-> 64乘法时可以观察到类似的结果,其结果将在edx:eax中(等等)。 实际上与286模式下的16x16-> 32乘法相同,结果进入dx:ax。

===============>>#2 票数:0

首先,CPU通常具有分别用于整数和浮点数的寄存器文件。

在80年代,一些CPU尝试使用统一的寄存器空间,但发现这是带宽瓶颈。 由于浮点运算几乎总是多周期的,并且总是混有大量基于整数的流控制,因此同时访问单独的寄存器空间会更有效。

其次,对于某些体系结构,浮点寄存器文件都是80位扩展浮点数(C语言中为“ long double”)。 双精度和浮点型在加载时会扩展为该格式,扩展格式在存储时会四舍五入。

对于整数运算,这取决于体系结构。 由于64位是x86的后代,因此它将8位(AL和AH),16位(AX),32位(EAX)和64位(RAX)覆盖在同一物理寄存器上,每个都可以通过不同的寻址模式进行访问。 另一方面,某些RISC架构将寄存器中的数字视为64位以进行MOST操作,只关心加载和存储中的字长。

  ask by Carbonizer translate from so

未解决问题?本站智能推荐: