readme.txt 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. create testfiles in shell (linux):
  2. 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;
  3. ***********************************************************************************************************
  4. On windows, complete testing would look like:
  5. i386:
  6. mkdir tmp
  7. fpc avxtestgenerator
  8. fpc avxtestfilecmp
  9. avxtestgenerator -ffpc -otmp
  10. cd tmp
  11. for %%p in (*.pp) do call fpc %%p -v0
  12. cd ..
  13. avxtestgenerator -fnasm -otmp
  14. cd tmp
  15. for %%a in (*.asm) do nasm -fwin32 %%a
  16. cd ..
  17. avxtestfilecmp -mtmp\*.obj -dtmp -eexe -s
  18. x86_64:
  19. fpc avxtestgenerator
  20. fpc avxtestfilecmp
  21. avxtestgenerator -px8664 -ffpc -otmp
  22. avxtestgenerator -px8664 -fnasm -otmp
  23. cd tmp
  24. for %%p in (*.pp) do call fpc -Px86_64 %%p -v0
  25. for %a in (*.asm) do nasm -fwin64 %a
  26. cd ..
  27. avxtestfilecmp -mtmp\*.obj -dtmp -eexe -s
  28. ***********************************************************************************************************
  29. Linux x86-64:
  30. mkdir tmp
  31. fpc avxtestgenerator
  32. fpc avxtestfilecmp
  33. ./avxtestgenerator -px8664 -ffpc -otmp
  34. # AVX-512: ./avxtestgenerator -px8664 -ffpc -otmp -z
  35. ./avxtestgenerator -px8664 -fnasm -otmp
  36. # AVX-512: ./avxtestgenerator -px8664 -fnasm -otmp -z
  37. cd tmp
  38. # use GNU Parallel [1]
  39. # if not available:
  40. # echo *.pp | xargs -n 1 fpc -Px86_64 -v0i
  41. find . -name '*.pp' | parallel fpc -Px86_64 -v0i
  42. # use GNU Parallel [1]
  43. # if not available:
  44. # echo *.asm | xargs -n 1 nasm -fwin64
  45. find . -name '*.asm' | parallel nasm -fwin64
  46. cd ..
  47. ./avxtestfilecmp -mtmp/*.o -dtmp -s
  48. ***********************************************************************************************************
  49. x86_64 testing by using self testing fpc executables:
  50. avxtestgenerator -px8664 -ffpcinc -otmp
  51. avxtestgenerator -px8664 -fnasm -otmp
  52. cd tmp
  53. for %a in (*.asm) do nasm -fbin %a -o %~na.bin
  54. for %b in (*.bin) do bin2obj -x -c %~nb %b -o%~nb.inc
  55. for %p in (*.pp) do call fpc -Px86_64 %p -v0i
  56. for %e in (*.exe) do call %e
  57. ****************************************************************************************************
  58. Note:
  59. While avxtestgenerator supports FASM output, testing with FASM does not work because
  60. FASM assembles slightly different from FPC, e.g. it swaps base and index register
  61. in references if this is benefical (e.g. [rbp+rax] => [rax+rbp] saves one byte).
  62. ****************************************************************************************************
  63. compare binary-files:
  64. any instructions can have a different binary-streams
  65. e.g.
  66. VMOVAPD XMM0, XMM1:
  67. possible binary-codes:
  68. VMOVAPD xmm1, xmm2/m128 [VEX.128.66.0F.28 /r]
  69. VMOVAPD xmm2/m128, xmm1 [VEX.128.66.0F.29 /r]
  70. VMOVSD XMM1, XMM2, XMM3
  71. possible binary-codes:
  72. VMOVSD xmm1, xmm2, xmm3 [VEX.NDS.LIG.F2.0F.WIG.10 /r] operand encoding: RVM
  73. VMOVSD xmm1, xmm2, xmm3 [VEX.NDS.LIG.F2.0F.WIG.11 /r] operand encoding: MVR
  74. currently (AVX I):
  75. VMOVAPD
  76. VMOVAPS
  77. VMOVDQA
  78. VMOVDQU
  79. VMOVQ
  80. VMOVSD
  81. VMOVSS
  82. VMOVUPD
  83. VMOVUPS
  84. [1] O. Tange (2011): GNU Parallel - The Command-Line Power Tool, ;login: The USENIX Magazine, February 2011:42-47.