Hi everyone,
I'm trying to fix an issue with x86 assembly language where certain SSE
and AVX instructions don't properly accept memory operands due to their
size being that of a single element (
https://bugs.freepascal.org/view.php?id=32219 ). My fixes are going
okay for the most part, but I've run into an interesting situation with
i386... it seems that 8-byte operands are instead treated as 4-byte
operands, and the Tx86Operand.SetSize method even acknowledges this (it
explains that it's fixed when SetCorrectSize is called) - the reason is
because the TCGSize2OpSize array returns S_L instead of S_Q for sizes
larger than 32-bit, and this is a conscious design decision.
What is the reason for this? I'm trying to find a good solution to this
problem that isn't hacky. So far I've gotten things like "VADDSD XMM0,
XMM0, [EAX]" and "VADDSD XMM0, XMM0, QWORD PTR [EAX]" to compile without
returning any warning, but now "VADDSD XMM0, XMM0, DoubleConst" fails
because it thinks DoubleConst is 32-bit even though it's defined
globally as "const DoubleConst: Double = 1.5".
Gareth aka. Kit
---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
_______________________________________________
fpc-devel maillist - [email protected]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel