xxxxxxxxxx
import std;
void main()
{
simdbytes a = 2;
writeln(a);
complement32(&a , cast(simdbytes*)&b); // A should contain 0xFD/253 if it had 2.
writeln(a);
}
alias simdbytes = ubyte[32];
static const simdbytes b = 0b1111_1111;
void complement32(simdbytes* a, simdbytes* b) { //i don't know how to get addr of "b", sorry
asm{
mov RAX, a[RBP];
mov RBX, b[RBP];
test RBX,RBX;//test if pointer to B is null
jz end;
movaps YMM0, [RAX];//prepare register
movaps YMM1, [RBX];
xorps YMM0, [RBX];
movaps [RAX] , YMM0;//xmm version crashes with LDC but works just fine with DMD, why?
end:;
}
}