Using YMM registers causes an undefined label error
Rumbu
rumbu at rumbu.ro
Fri Mar 5 16:10:02 UTC 2021
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/qyybpvwvbfkhlvulvuxa@forum.dlang.org
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.
More information about the Digitalmars-d-learn
mailing list