On Friday, 5 March 2021 at 12:57:43 UTC, z wrote:
XMM registers work, but as soon as they are changed into YMM
DMD outputs "bad type/size of operands %s" and LDC outputs an
"label YMM0 is undefined" error. Are they not supported?
To illutrate : https://run.dlang.io/is/IqDHlK
By the way, how can i use instructions that are not listed in
[1]?(vfmaddxxxps for example) And how are function parameters
accessed if they are not on the stack?(looking up my own code
in a debugger, i see that the majority of pointer parameters
are already in registers rather than being on the stack.)
I need those so that i can write a better answer for [2].
Big thanks
[1] https://dlang.org/spec/iasm.html#supported_opcodes
[2]
https://forum.dlang.org/thread/[email protected]
First of all, in 64 bit ABI, parameters are not passed on stack,
therefore a[RBP] is a nonsense.
void complement32(simdbytes* a, simdbytes* b)
a is in RCX, b is in RDX on Windows
a is in RDI, b is in RSI on Linux
Secondly, there is no such thing as movaps YMMX, [RAX], but
vmovaps YMM3, [RAX]
Same for vxorps, but there are 3 operands, not 2.