Using YMM registers causes an undefined label error

z z at z.com
Tue Mar 9 20:23:48 UTC 2021


On Friday, 5 March 2021 at 12:57:43 UTC, z wrote:
> ...

Then it seems the only way to get AVX-compatible inline 
assembly(ldc.llvmasm excluded) is to use an external assembler.

For example :
>import std.stdio;
>extern(C) void vxorps_d(ubyte[32]*);
>
>void main() {
>	ubyte[32] a = 2;
>	writefln!"Contents of a before : %( %s %)"(a);
>	vxorps_d(&a);
>	writefln!"Contents of a after  : %( %s %)"(a);
>}



>BITS 64
>
>global vxorps_d
>
>section .text2
>vxorps_d:
>	vmovups ymm0, [rcx];
>	mov rdx, zerofilled
>	vbroadcastss ymm1, [rdx]
>	vxorps ymm0, ymm0, ymm1
>	vmovups [rcx], ymm0
>	ret
>zerofilled:
>db 0xFF,0xFF,0xFF,0xFF

>nasm -g -f win64 asmfile.asm

>dmd vxorpstest.d asmfile.obj -m64
>ldc vxorpstest.d asmfile.obj -m64

>vxorpstest.exe
>Contents of a before :  2  2  2... (0x02/0b0000_0010)
>Contents of a after  :  253  253  253...(0xFD/0b1111_1101)


More information about the Digitalmars-d-learn mailing list