readme.txt 2.3 KB

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