Ich habe ein Problem mit der SSE-Instruktion comiss (Vergleich des float in den Bits [0;31] eines XMM-Registers mit dem entsprechenden float eines anderen XMM-Registers oder einem float einer Adresse m32, setzt EFLAGS). Ich erhalte dabei falsche Ergebnisse:
2 < 4 wahr
3 < 4 wahr
4 < 4 falsch
9 < 4 wahr
Das ist der Assemblercode:
movups xmm0, dqword ptr [rdi]
movups xmm1, dqword ptr [rsi]
cvttss2si rax, xmm0
mov dword ptr [rdx], rax
cvttss2si rax, xmm1
mov dword ptr [rcx], rax
comiss xmm0, xmm1
short jl L.2
mov rax, 0
jmp L.1
L.2:
mov rax, 1
Alle floats in einem XMM-Register habe den selben Wert (float f[4] = { 1.0f };, oder?).