Data structures 大于word的数据类型

Data structures 大于word的数据类型,data-structures,cpu-architecture,instruction-set,Data Structures,Cpu Architecture,Instruction Set,如何将大数据类型(双精度/浮点)加载到寄存器中进行算术运算?寄存器可以容纳超过一个字大小的数据吗?如果只能添加两个寄存器以将结果加载到第三个寄存器,那么大于单个寄存器的数据类型会发生什么情况 例如,在SPARCv8 ABI中,64位双精度运算加载到两个32位寄存器中,同时对两个寄存器执行FP操作fsqrtd%f10,%f8获取%f10:%f11中的值,并将根结果写入%f8:%f9。在x86_32上,在执行32x32->64乘法时可以观察到类似的情况,其中结果将是edx:eax(大约)。在286模

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

例如,在SPARCv8 ABI中,64位双精度运算加载到两个32位寄存器中,同时对两个寄存器执行FP操作<代码>fsqrtd%f10,%f8获取%f10:%f11中的值,并将根结果写入%f8:%f9。在x86_32上,在执行32x32->64乘法时可以观察到类似的情况,其中结果将是edx:eax(大约)。在286模式下,16x16->32次乘法的结果与dx:ax相同

首先,CPU通常有单独的整数和浮点数寄存器文件

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

其次,对于某些体系结构,浮点寄存器文件都是80位扩展浮点(C中的“长双精度”)。加载时,double和float被扩展为该格式,而扩展格式在存储时被舍入和截断


对于整数运算,这取决于体系结构。由于64位是x86的后遗症,它将8位(AL和AH)、16位(AX)、32位(EAX)和64位(RAX)全部覆盖在同一个物理寄存器上,每个寄存器通过不同的寻址模式访问。另一方面,对于大多数操作,一些RISC体系结构将寄存器中的数字视为64位,只关心加载和存储时的字大小。

您能提供更多信息或上下文吗?以我有限的知识,这是不同的拱门到另一个。您为哪种体系结构设计?