aes-586.pl
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:49k
源码类别:

其他游戏

开发平台:

Visual C++

  1. #!/usr/bin/env perl
  2. #
  3. # ====================================================================
  4. # Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
  5. # project. Rights for redistribution and usage in source and binary
  6. # forms are granted according to the OpenSSL license.
  7. # ====================================================================
  8. #
  9. # Version 3.4.
  10. #
  11. # You might fail to appreciate this module performance from the first
  12. # try. If compared to "vanilla" linux-ia32-icc target, i.e. considered
  13. # to be *the* best Intel C compiler without -KPIC, performance appears
  14. # to be virtually identical... But try to re-configure with shared
  15. # library support... Aha! Intel compiler "suddenly" lags behind by 30%
  16. # [on P4, more on others]:-) And if compared to position-independent
  17. # code generated by GNU C, this code performs *more* than *twice* as
  18. # fast! Yes, all this buzz about PIC means that unlike other hand-
  19. # coded implementations, this one was explicitly designed to be safe
  20. # to use even in shared library context... This also means that this
  21. # code isn't necessarily absolutely fastest "ever," because in order
  22. # to achieve position independence an extra register has to be
  23. # off-loaded to stack, which affects the benchmark result.
  24. #
  25. # Special note about instruction choice. Do you recall RC4_INT code
  26. # performing poorly on P4? It might be the time to figure out why.
  27. # RC4_INT code implies effective address calculations in base+offset*4
  28. # form. Trouble is that it seems that offset scaling turned to be
  29. # critical path... At least eliminating scaling resulted in 2.8x RC4
  30. # performance improvement [as you might recall]. As AES code is hungry
  31. # for scaling too, I [try to] avoid the latter by favoring off-by-2
  32. # shifts and masking the result with 0xFF<<2 instead of "boring" 0xFF.
  33. #
  34. # As was shown by Dean Gaudet <dean@arctic.org>, the above note turned
  35. # void. Performance improvement with off-by-2 shifts was observed on
  36. # intermediate implementation, which was spilling yet another register
  37. # to stack... Final offset*4 code below runs just a tad faster on P4,
  38. # but exhibits up to 10% improvement on other cores.
  39. #
  40. # Second version is "monolithic" replacement for aes_core.c, which in
  41. # addition to AES_[de|en]crypt implements AES_set_[de|en]cryption_key.
  42. # This made it possible to implement little-endian variant of the
  43. # algorithm without modifying the base C code. Motivating factor for
  44. # the undertaken effort was that it appeared that in tight IA-32
  45. # register window little-endian flavor could achieve slightly higher
  46. # Instruction Level Parallelism, and it indeed resulted in up to 15%
  47. # better performance on most recent