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