我想将%rax
或内存中的值传递给%xmm0
,这个值应该是两倍,所以我可以稍后将%xmm0
乘以......
目前即时使用:
movq $1, -72(%rbp)
movq -72(%rbp), %rax
movsd -72(%rbp), %xmm0 # 1 should be
movsd -8(%rbp), %xmm1 # 5
mulss %xmm0, %xmm1 # 5 shoud be
但是在%mm0(双倍)下我得到0,而不是1.当我乘以它时返回0 ...... :(
xmm0 {
v4_float = {0x0, 0x0, 0x0, 0x0},
v2_double = {0x0, 0x0},
v16_int8 = {0x1, 0x0 <repeats 15 times>},
v8_int16 = {0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v4_int32 = {0x1, 0x0, 0x0, 0x0},
v2_int64 = {0x1, 0x0},
uint128 = 0x00000000000000000000000000000001
}
如何将整数传递给xmm0?或者如何将xmm1乘以/除以-72(%rbp),这样返回是否正确?
AT&amp; T,linux,64b。
编辑:我读过关于PINSRW但不知道如何使用它。答案 0 :(得分:1)
(推定)问题:
movq $1, -72(%rbp)
将整数值1移动到内存中,当表示为浮点数时,内存非常小。当您将'x'乘以此数字时,结果非常小,以至于它舍入为0。
潜在解决方案:
将浮动点立即值1.0f移动到内存中,而不是1.我无法确切地知道如何执行此操作,因为我不知道您正在使用的汇编程序。
< / LI>像Brett Hale所说,将整数转换为浮点数。可能有一百万种方法可以做到这一点,所以Google就像“SSE Integer to Float”,你会得到很多结果。