florian 4f0da5fcc3 + patch by Marģers to support the x86 assembler instructions blsi, blsr, blsmsk, adcx, adox, movbe, pclmulqdq, resolves #34815 and #34799 %!s(int64=6) %!d(string=hai) anos
..
asmtestgenerator.pas 8c66e9a2eb + support for 16 bit registers %!s(int64=6) %!d(string=hai) anos
avxopcodes.pas 4f0da5fcc3 + patch by Marģers to support the x86 assembler instructions blsi, blsr, blsmsk, adcx, adox, movbe, pclmulqdq, resolves #34815 and #34799 %!s(int64=6) %!d(string=hai) anos
avxtestfilecmp.lpi 5604e98b1c + lazarus project files for the avx assembler test generators %!s(int64=6) %!d(string=hai) anos
avxtestfilecmp.pp dc17b7ef46 * Extention -> extension (By Reinier, bug ID #25979) %!s(int64=11) %!d(string=hai) anos
avxtestgenerator.lpi 40598944f8 + support fpc include output in avx test generation code %!s(int64=6) %!d(string=hai) anos
avxtestgenerator.pp 40598944f8 + support fpc include output in avx test generation code %!s(int64=6) %!d(string=hai) anos
baselist.pas e5a1231931 * updated FSF address (mantis #30198, patch by Paul Gevers) %!s(int64=8) %!d(string=hai) anos
cmpoptions.pas dc17b7ef46 * Extention -> extension (By Reinier, bug ID #25979) %!s(int64=11) %!d(string=hai) anos
filecomparer.pas dc17b7ef46 * Extention -> extension (By Reinier, bug ID #25979) %!s(int64=11) %!d(string=hai) anos
options.pas 40598944f8 + support fpc include output in avx test generation code %!s(int64=6) %!d(string=hai) anos
readme.txt fc7ecf3206 * usage example for linux %!s(int64=6) %!d(string=hai) anos

readme.txt

create testfiles in shell (linux):

for i in `ls /tmp/avx/*.pp`; do /home/torsten/fpc/avx/ppcx64 -Fu/home/torsten/fpc/avx/rtl/units/x86_64-linux/ "$i"; done;

On windows, complete testing would look like:

i386:
mkdir tmp
fpc avxtestgenerator
fpc avxtestfilecmp
avxtestgenerator -ffpc -otmp
cd tmp
for %%p in (*.pp) do call fpc %%p -v0
cd ..
avxtestgenerator -fnasm -otmp
cd tmp
for %%a in (*.asm) do nasm -fwin32 %%a
cd ..
avxtestfilecmp -mtmp\*.obj -dtmp -eexe -s

x86_64:
fpc avxtestgenerator
fpc avxtestfilecmp
avxtestgenerator -px8664 -ffpc -otmp
avxtestgenerator -px8664 -fnasm -otmp
cd tmp
for %%p in (*.pp) do call fpc -Px86_64 %%p -v0
for %a in (*.asm) do nasm -fwin64 %a
cd ..
avxtestfilecmp -mtmp\*.obj -dtmp -eexe -s

Linux x86-64:
mkdir tmp
fpc avxtestgenerator
fpc avxtestfilecmp
./avxtestgenerator -px8664 -ffpc -otmp
./avxtestgenerator -px8664 -fnasm -otmp
cd tmp
echo *.pp | xargs -n 1 fpc -Px86_64 -v0i
echo *.asm | xargs -n 1 nasm -fwin64
cd ..
./avxtestfilecmp -mtmp/*.o -dtmp -s

x86_64 testing by using self testing fpc executables:
avxtestgenerator -px8664 -ffpcinc -otmp
avxtestgenerator -px8664 -fnasm -otmp
cd tmp
for %a in (*.asm) do nasm -fbin %a -o %~na.bin
for %b in (*.bin) do bin2obj -x -c %~nb %b -o%~nb.inc
for %p in (*.pp) do call fpc -Px86_64 %p -v0i
for %e in (*.exe) do call %e

****************************************************************************************************
Note:
While avxtestgenerator supports FASM output, testing with FASM does not work because
FASM assembles slightly different from FPC, e.g. it swaps base and index register
in references if this is benefical (e.g. [rbp+rax] => [rax+rbp] saves one byte).
****************************************************************************************************

compare binary-files:

any instructions can have a different binary-streams

e.g.
VMOVAPD XMM0, XMM1:

possible binary-codes:
VMOVAPD xmm1, xmm2/m128 [VEX.128.66.0F.28 /r]
VMOVAPD xmm2/m128, xmm1 [VEX.128.66.0F.29 /r]


VMOVSD XMM1, XMM2, XMM3

possible binary-codes:
VMOVSD xmm1, xmm2, xmm3 [VEX.NDS.LIG.F2.0F.WIG.10 /r] operand encoding: RVM
VMOVSD xmm1, xmm2, xmm3 [VEX.NDS.LIG.F2.0F.WIG.11 /r] operand encoding: MVR

currently (AVX I):

VMOVAPD
VMOVAPS
VMOVDQA
VMOVDQU
VMOVQ
VMOVSD
VMOVSS
VMOVUPD
VMOVUPS