epeg 1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (504) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/MANIFEST +5 -0
  4. data/TODO +1 -0
  5. data/epeg/.dockerignore +4 -0
  6. data/epeg/.gitignore +5 -0
  7. data/epeg/CMakeLists.txt +30 -0
  8. data/epeg/Dockerfile +23 -0
  9. data/epeg/Epeg.h +90 -0
  10. data/epeg/README.md +42 -0
  11. data/epeg/epeg_main.c +1642 -0
  12. data/epeg/epeg_private.h +85 -0
  13. data/epeg/example/.gitignore +1 -0
  14. data/epeg/example/CMakeLists.txt +20 -0
  15. data/epeg/example/example.jpg +0 -0
  16. data/epeg/example/rotatetest.c +29 -0
  17. data/epeg/example/scaletest.c +48 -0
  18. data/epeg/vendor/libjpeg-turbo-2.0.4/BUILDING.md +828 -0
  19. data/epeg/vendor/libjpeg-turbo-2.0.4/CMakeLists.txt +1420 -0
  20. data/epeg/vendor/libjpeg-turbo-2.0.4/ChangeLog.md +1494 -0
  21. data/epeg/vendor/libjpeg-turbo-2.0.4/LICENSE.md +132 -0
  22. data/epeg/vendor/libjpeg-turbo-2.0.4/README.ijg +277 -0
  23. data/epeg/vendor/libjpeg-turbo-2.0.4/README.md +356 -0
  24. data/epeg/vendor/libjpeg-turbo-2.0.4/cderror.h +137 -0
  25. data/epeg/vendor/libjpeg-turbo-2.0.4/cdjpeg.c +145 -0
  26. data/epeg/vendor/libjpeg-turbo-2.0.4/cdjpeg.h +157 -0
  27. data/epeg/vendor/libjpeg-turbo-2.0.4/change.log +315 -0
  28. data/epeg/vendor/libjpeg-turbo-2.0.4/cjpeg.1 +354 -0
  29. data/epeg/vendor/libjpeg-turbo-2.0.4/cjpeg.c +695 -0
  30. data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/BuildPackages.cmake +182 -0
  31. data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/GNUInstallDirs.cmake +416 -0
  32. data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/cmake_uninstall.cmake.in +24 -0
  33. data/epeg/vendor/libjpeg-turbo-2.0.4/cmakescripts/testclean.cmake +41 -0
  34. data/epeg/vendor/libjpeg-turbo-2.0.4/cmyk.h +61 -0
  35. data/epeg/vendor/libjpeg-turbo-2.0.4/coderules.txt +78 -0
  36. data/epeg/vendor/libjpeg-turbo-2.0.4/djpeg.1 +296 -0
  37. data/epeg/vendor/libjpeg-turbo-2.0.4/djpeg.c +822 -0
  38. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/annotated.html +104 -0
  39. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/bc_s.png +0 -0
  40. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/bdwn.png +0 -0
  41. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/classes.html +106 -0
  42. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/closed.png +0 -0
  43. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/doxygen-extra.css +3 -0
  44. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/doxygen.css +1184 -0
  45. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/doxygen.png +0 -0
  46. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/dynsections.js +97 -0
  47. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2blank.png +0 -0
  48. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2cl.png +0 -0
  49. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2doc.png +0 -0
  50. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2folderclosed.png +0 -0
  51. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2folderopen.png +0 -0
  52. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2lastnode.png +0 -0
  53. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2link.png +0 -0
  54. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2mlastnode.png +0 -0
  55. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2mnode.png +0 -0
  56. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2mo.png +0 -0
  57. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2node.png +0 -0
  58. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2ns.png +0 -0
  59. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2plastnode.png +0 -0
  60. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2pnode.png +0 -0
  61. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2splitbar.png +0 -0
  62. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/ftv2vertline.png +0 -0
  63. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/functions.html +134 -0
  64. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/functions_vars.html +134 -0
  65. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/group___turbo_j_p_e_g.html +2775 -0
  66. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/index.html +90 -0
  67. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/jquery.js +8 -0
  68. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/modules.html +95 -0
  69. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/nav_f.png +0 -0
  70. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/nav_g.png +0 -0
  71. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/nav_h.png +0 -0
  72. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/open.png +0 -0
  73. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_63.html +26 -0
  74. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_63.js +4 -0
  75. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_64.html +26 -0
  76. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_64.js +5 -0
  77. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_68.html +26 -0
  78. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_68.js +4 -0
  79. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6e.html +26 -0
  80. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6e.js +4 -0
  81. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6f.html +26 -0
  82. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_6f.js +5 -0
  83. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_72.html +26 -0
  84. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_72.js +4 -0
  85. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_74.html +26 -0
  86. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_74.js +102 -0
  87. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_77.html +26 -0
  88. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_77.js +4 -0
  89. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_78.html +26 -0
  90. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_78.js +4 -0
  91. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_79.html +26 -0
  92. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/all_79.js +4 -0
  93. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/classes_74.html +26 -0
  94. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/classes_74.js +6 -0
  95. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/close.png +0 -0
  96. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enums_74.html +26 -0
  97. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enums_74.js +8 -0
  98. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enumvalues_74.html +26 -0
  99. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/enumvalues_74.js +37 -0
  100. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/functions_74.html +26 -0
  101. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/functions_74.js +31 -0
  102. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/groups_74.html +26 -0
  103. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/groups_74.js +4 -0
  104. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/mag_sel.png +0 -0
  105. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/nomatches.html +12 -0
  106. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search.css +271 -0
  107. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search.js +809 -0
  108. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search_l.png +0 -0
  109. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search_m.png +0 -0
  110. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/search_r.png +0 -0
  111. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/typedefs_74.html +26 -0
  112. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/typedefs_74.js +5 -0
  113. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_63.html +26 -0
  114. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_63.js +4 -0
  115. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_64.html +26 -0
  116. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_64.js +5 -0
  117. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_68.html +26 -0
  118. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_68.js +4 -0
  119. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6e.html +26 -0
  120. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6e.js +4 -0
  121. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6f.html +26 -0
  122. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_6f.js +5 -0
  123. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_72.html +26 -0
  124. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_72.js +4 -0
  125. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_74.html +26 -0
  126. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_74.js +10 -0
  127. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_77.html +26 -0
  128. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_77.js +4 -0
  129. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_78.html +26 -0
  130. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_78.js +4 -0
  131. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_79.html +26 -0
  132. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/search/variables_79.js +4 -0
  133. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/structtjregion.html +186 -0
  134. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/structtjscalingfactor.html +148 -0
  135. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/structtjtransform.html +212 -0
  136. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/sync_off.png +0 -0
  137. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/sync_on.png +0 -0
  138. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_a.png +0 -0
  139. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_b.png +0 -0
  140. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_h.png +0 -0
  141. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tab_s.png +0 -0
  142. data/epeg/vendor/libjpeg-turbo-2.0.4/doc/html/tabs.css +60 -0
  143. data/epeg/vendor/libjpeg-turbo-2.0.4/doxygen-extra.css +3 -0
  144. data/epeg/vendor/libjpeg-turbo-2.0.4/doxygen.config +16 -0
  145. data/epeg/vendor/libjpeg-turbo-2.0.4/example.txt +464 -0
  146. data/epeg/vendor/libjpeg-turbo-2.0.4/jaricom.c +157 -0
  147. data/epeg/vendor/libjpeg-turbo-2.0.4/java/CMakeLists.txt +88 -0
  148. data/epeg/vendor/libjpeg-turbo-2.0.4/java/MANIFEST.MF +2 -0
  149. data/epeg/vendor/libjpeg-turbo-2.0.4/java/README +52 -0
  150. data/epeg/vendor/libjpeg-turbo-2.0.4/java/TJBench.java +1021 -0
  151. data/epeg/vendor/libjpeg-turbo-2.0.4/java/TJExample.java +405 -0
  152. data/epeg/vendor/libjpeg-turbo-2.0.4/java/TJUnitTest.java +960 -0
  153. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/allclasses-frame.html +24 -0
  154. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/allclasses-noframe.html +24 -0
  155. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/constant-values.html +532 -0
  156. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/deprecated-list.html +252 -0
  157. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/help-doc.html +210 -0
  158. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/index-all.html +1029 -0
  159. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/index.html +71 -0
  160. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJ.html +1356 -0
  161. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJCompressor.html +926 -0
  162. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJCustomFilter.html +241 -0
  163. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJDecompressor.html +1255 -0
  164. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJException.html +340 -0
  165. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJScalingFactor.html +343 -0
  166. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJTransform.html +751 -0
  167. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/TJTransformer.html +421 -0
  168. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/YUVImage.html +765 -0
  169. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/package-frame.html +31 -0
  170. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/package-summary.html +202 -0
  171. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/org/libjpegturbo/turbojpeg/package-tree.html +160 -0
  172. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/overview-tree.html +164 -0
  173. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/package-list +1 -0
  174. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/background.gif +0 -0
  175. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/tab.gif +0 -0
  176. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/titlebar.gif +0 -0
  177. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/resources/titlebar_end.gif +0 -0
  178. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/script.js +30 -0
  179. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/serialized-form.html +176 -0
  180. data/epeg/vendor/libjpeg-turbo-2.0.4/java/doc/stylesheet.css +474 -0
  181. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJ.java +584 -0
  182. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJCompressor.java +677 -0
  183. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJCustomFilter.java +76 -0
  184. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJDecompressor.java +931 -0
  185. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJException.java +78 -0
  186. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJLoader-unix.java.in +59 -0
  187. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJLoader-win.java.in +35 -0
  188. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJScalingFactor.java +115 -0
  189. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJTransform.java +227 -0
  190. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/TJTransformer.java +163 -0
  191. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org/libjpegturbo/turbojpeg/YUVImage.java +445 -0
  192. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJ.h +129 -0
  193. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJCompressor.h +101 -0
  194. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJDecompressor.h +101 -0
  195. data/epeg/vendor/libjpeg-turbo-2.0.4/java/org_libjpegturbo_turbojpeg_TJTransformer.h +29 -0
  196. data/epeg/vendor/libjpeg-turbo-2.0.4/jcapimin.c +295 -0
  197. data/epeg/vendor/libjpeg-turbo-2.0.4/jcapistd.c +162 -0
  198. data/epeg/vendor/libjpeg-turbo-2.0.4/jcarith.c +932 -0
  199. data/epeg/vendor/libjpeg-turbo-2.0.4/jccoefct.c +449 -0
  200. data/epeg/vendor/libjpeg-turbo-2.0.4/jccolext.c +144 -0
  201. data/epeg/vendor/libjpeg-turbo-2.0.4/jccolor.c +710 -0
  202. data/epeg/vendor/libjpeg-turbo-2.0.4/jcdctmgr.c +721 -0
  203. data/epeg/vendor/libjpeg-turbo-2.0.4/jchuff.c +1096 -0
  204. data/epeg/vendor/libjpeg-turbo-2.0.4/jchuff.h +42 -0
  205. data/epeg/vendor/libjpeg-turbo-2.0.4/jcicc.c +105 -0
  206. data/epeg/vendor/libjpeg-turbo-2.0.4/jcinit.c +77 -0
  207. data/epeg/vendor/libjpeg-turbo-2.0.4/jcmainct.c +162 -0
  208. data/epeg/vendor/libjpeg-turbo-2.0.4/jcmarker.c +664 -0
  209. data/epeg/vendor/libjpeg-turbo-2.0.4/jcmaster.c +640 -0
  210. data/epeg/vendor/libjpeg-turbo-2.0.4/jcomapi.c +109 -0
  211. data/epeg/vendor/libjpeg-turbo-2.0.4/jconfig.h.in +73 -0
  212. data/epeg/vendor/libjpeg-turbo-2.0.4/jconfig.txt +143 -0
  213. data/epeg/vendor/libjpeg-turbo-2.0.4/jconfigint.h.in +31 -0
  214. data/epeg/vendor/libjpeg-turbo-2.0.4/jcparam.c +541 -0
  215. data/epeg/vendor/libjpeg-turbo-2.0.4/jcphuff.c +1105 -0
  216. data/epeg/vendor/libjpeg-turbo-2.0.4/jcprepct.c +351 -0
  217. data/epeg/vendor/libjpeg-turbo-2.0.4/jcsample.c +539 -0
  218. data/epeg/vendor/libjpeg-turbo-2.0.4/jcstest.c +126 -0
  219. data/epeg/vendor/libjpeg-turbo-2.0.4/jctrans.c +400 -0
  220. data/epeg/vendor/libjpeg-turbo-2.0.4/jdapimin.c +407 -0
  221. data/epeg/vendor/libjpeg-turbo-2.0.4/jdapistd.c +639 -0
  222. data/epeg/vendor/libjpeg-turbo-2.0.4/jdarith.c +773 -0
  223. data/epeg/vendor/libjpeg-turbo-2.0.4/jdatadst-tj.c +203 -0
  224. data/epeg/vendor/libjpeg-turbo-2.0.4/jdatadst.c +293 -0
  225. data/epeg/vendor/libjpeg-turbo-2.0.4/jdatasrc-tj.c +194 -0
  226. data/epeg/vendor/libjpeg-turbo-2.0.4/jdatasrc.c +295 -0
  227. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcoefct.c +692 -0
  228. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcoefct.h +82 -0
  229. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcol565.c +384 -0
  230. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcolext.c +143 -0
  231. data/epeg/vendor/libjpeg-turbo-2.0.4/jdcolor.c +883 -0
  232. data/epeg/vendor/libjpeg-turbo-2.0.4/jdct.h +208 -0
  233. data/epeg/vendor/libjpeg-turbo-2.0.4/jddctmgr.c +352 -0
  234. data/epeg/vendor/libjpeg-turbo-2.0.4/jdhuff.c +831 -0
  235. data/epeg/vendor/libjpeg-turbo-2.0.4/jdhuff.h +238 -0
  236. data/epeg/vendor/libjpeg-turbo-2.0.4/jdicc.c +171 -0
  237. data/epeg/vendor/libjpeg-turbo-2.0.4/jdinput.c +408 -0
  238. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmainct.c +460 -0
  239. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmainct.h +71 -0
  240. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmarker.c +1377 -0
  241. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmaster.c +737 -0
  242. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmaster.h +28 -0
  243. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmerge.c +617 -0
  244. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmrg565.c +354 -0
  245. data/epeg/vendor/libjpeg-turbo-2.0.4/jdmrgext.c +184 -0
  246. data/epeg/vendor/libjpeg-turbo-2.0.4/jdphuff.c +687 -0
  247. data/epeg/vendor/libjpeg-turbo-2.0.4/jdpostct.c +294 -0
  248. data/epeg/vendor/libjpeg-turbo-2.0.4/jdsample.c +518 -0
  249. data/epeg/vendor/libjpeg-turbo-2.0.4/jdsample.h +50 -0
  250. data/epeg/vendor/libjpeg-turbo-2.0.4/jdtrans.c +155 -0
  251. data/epeg/vendor/libjpeg-turbo-2.0.4/jerror.c +251 -0
  252. data/epeg/vendor/libjpeg-turbo-2.0.4/jerror.h +316 -0
  253. data/epeg/vendor/libjpeg-turbo-2.0.4/jfdctflt.c +169 -0
  254. data/epeg/vendor/libjpeg-turbo-2.0.4/jfdctfst.c +227 -0
  255. data/epeg/vendor/libjpeg-turbo-2.0.4/jfdctint.c +288 -0
  256. data/epeg/vendor/libjpeg-turbo-2.0.4/jidctflt.c +240 -0
  257. data/epeg/vendor/libjpeg-turbo-2.0.4/jidctfst.c +371 -0
  258. data/epeg/vendor/libjpeg-turbo-2.0.4/jidctint.c +2627 -0
  259. data/epeg/vendor/libjpeg-turbo-2.0.4/jidctred.c +409 -0
  260. data/epeg/vendor/libjpeg-turbo-2.0.4/jinclude.h +88 -0
  261. data/epeg/vendor/libjpeg-turbo-2.0.4/jmemmgr.c +1179 -0
  262. data/epeg/vendor/libjpeg-turbo-2.0.4/jmemnobs.c +115 -0
  263. data/epeg/vendor/libjpeg-turbo-2.0.4/jmemsys.h +178 -0
  264. data/epeg/vendor/libjpeg-turbo-2.0.4/jmorecfg.h +421 -0
  265. data/epeg/vendor/libjpeg-turbo-2.0.4/jpeg_nbits_table.h +4098 -0
  266. data/epeg/vendor/libjpeg-turbo-2.0.4/jpegcomp.h +31 -0
  267. data/epeg/vendor/libjpeg-turbo-2.0.4/jpegint.h +368 -0
  268. data/epeg/vendor/libjpeg-turbo-2.0.4/jpeglib.h +1132 -0
  269. data/epeg/vendor/libjpeg-turbo-2.0.4/jpegtran.1 +295 -0
  270. data/epeg/vendor/libjpeg-turbo-2.0.4/jpegtran.c +601 -0
  271. data/epeg/vendor/libjpeg-turbo-2.0.4/jquant1.c +859 -0
  272. data/epeg/vendor/libjpeg-turbo-2.0.4/jquant2.c +1285 -0
  273. data/epeg/vendor/libjpeg-turbo-2.0.4/jsimd.h +117 -0
  274. data/epeg/vendor/libjpeg-turbo-2.0.4/jsimd_none.c +418 -0
  275. data/epeg/vendor/libjpeg-turbo-2.0.4/jsimddct.h +70 -0
  276. data/epeg/vendor/libjpeg-turbo-2.0.4/jstdhuff.c +143 -0
  277. data/epeg/vendor/libjpeg-turbo-2.0.4/jutils.c +133 -0
  278. data/epeg/vendor/libjpeg-turbo-2.0.4/jversion.h +52 -0
  279. data/epeg/vendor/libjpeg-turbo-2.0.4/libjpeg.map.in +11 -0
  280. data/epeg/vendor/libjpeg-turbo-2.0.4/libjpeg.txt +3144 -0
  281. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/CMakeLists.txt +1 -0
  282. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5.c +275 -0
  283. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5.h +57 -0
  284. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5cmp.c +59 -0
  285. data/epeg/vendor/libjpeg-turbo-2.0.4/md5/md5hl.c +125 -0
  286. data/epeg/vendor/libjpeg-turbo-2.0.4/rdbmp.c +689 -0
  287. data/epeg/vendor/libjpeg-turbo-2.0.4/rdcolmap.c +254 -0
  288. data/epeg/vendor/libjpeg-turbo-2.0.4/rdgif.c +39 -0
  289. data/epeg/vendor/libjpeg-turbo-2.0.4/rdjpgcom.1 +63 -0
  290. data/epeg/vendor/libjpeg-turbo-2.0.4/rdjpgcom.c +510 -0
  291. data/epeg/vendor/libjpeg-turbo-2.0.4/rdppm.c +766 -0
  292. data/epeg/vendor/libjpeg-turbo-2.0.4/rdrle.c +389 -0
  293. data/epeg/vendor/libjpeg-turbo-2.0.4/rdswitch.c +424 -0
  294. data/epeg/vendor/libjpeg-turbo-2.0.4/rdtarga.c +509 -0
  295. data/epeg/vendor/libjpeg-turbo-2.0.4/release/Distribution.xml.in +24 -0
  296. data/epeg/vendor/libjpeg-turbo-2.0.4/release/License.rtf +20 -0
  297. data/epeg/vendor/libjpeg-turbo-2.0.4/release/ReadMe.txt +5 -0
  298. data/epeg/vendor/libjpeg-turbo-2.0.4/release/Welcome.rtf +17 -0
  299. data/epeg/vendor/libjpeg-turbo-2.0.4/release/deb-control.in +31 -0
  300. data/epeg/vendor/libjpeg-turbo-2.0.4/release/installer.nsi.in +191 -0
  301. data/epeg/vendor/libjpeg-turbo-2.0.4/release/libjpeg.pc.in +10 -0
  302. data/epeg/vendor/libjpeg-turbo-2.0.4/release/libturbojpeg.pc.in +10 -0
  303. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makecygwinpkg.in +66 -0
  304. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makedpkg.in +115 -0
  305. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makemacpkg.in +284 -0
  306. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makerpm.in +30 -0
  307. data/epeg/vendor/libjpeg-turbo-2.0.4/release/makesrpm.in +48 -0
  308. data/epeg/vendor/libjpeg-turbo-2.0.4/release/maketarball.in +51 -0
  309. data/epeg/vendor/libjpeg-turbo-2.0.4/release/rpm.spec.in +221 -0
  310. data/epeg/vendor/libjpeg-turbo-2.0.4/release/uninstall.in +113 -0
  311. data/epeg/vendor/libjpeg-turbo-2.0.4/sharedlib/CMakeLists.txt +99 -0
  312. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/CMakeLists.txt +385 -0
  313. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm/jsimd.c +721 -0
  314. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm/jsimd_neon.S +2878 -0
  315. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm64/jsimd.c +798 -0
  316. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/arm64/jsimd_neon.S +3433 -0
  317. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/gas-preprocessor.in +1 -0
  318. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolext-avx2.asm +578 -0
  319. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolext-mmx.asm +476 -0
  320. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolext-sse2.asm +503 -0
  321. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolor-avx2.asm +121 -0
  322. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolor-mmx.asm +121 -0
  323. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jccolor-sse2.asm +120 -0
  324. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgray-avx2.asm +113 -0
  325. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgray-mmx.asm +113 -0
  326. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgray-sse2.asm +112 -0
  327. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgryext-avx2.asm +457 -0
  328. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgryext-mmx.asm +355 -0
  329. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcgryext-sse2.asm +382 -0
  330. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jchuff-sse2.asm +424 -0
  331. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcphuff-sse2.asm +660 -0
  332. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcsample-avx2.asm +388 -0
  333. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcsample-mmx.asm +324 -0
  334. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jcsample-sse2.asm +351 -0
  335. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolext-avx2.asm +515 -0
  336. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolext-mmx.asm +404 -0
  337. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolext-sse2.asm +458 -0
  338. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolor-avx2.asm +118 -0
  339. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolor-mmx.asm +117 -0
  340. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdcolor-sse2.asm +117 -0
  341. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmerge-avx2.asm +136 -0
  342. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmerge-mmx.asm +123 -0
  343. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmerge-sse2.asm +135 -0
  344. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmrgext-avx2.asm +575 -0
  345. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmrgext-mmx.asm +460 -0
  346. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdmrgext-sse2.asm +517 -0
  347. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdsample-avx2.asm +760 -0
  348. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdsample-mmx.asm +731 -0
  349. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jdsample-sse2.asm +724 -0
  350. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctflt-3dn.asm +318 -0
  351. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctflt-sse.asm +369 -0
  352. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctfst-mmx.asm +395 -0
  353. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctfst-sse2.asm +403 -0
  354. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctint-avx2.asm +331 -0
  355. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctint-mmx.asm +620 -0
  356. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jfdctint-sse2.asm +633 -0
  357. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctflt-3dn.asm +451 -0
  358. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctflt-sse.asm +571 -0
  359. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctflt-sse2.asm +497 -0
  360. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctfst-mmx.asm +499 -0
  361. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctfst-sse2.asm +501 -0
  362. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctint-avx2.asm +453 -0
  363. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctint-mmx.asm +851 -0
  364. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctint-sse2.asm +858 -0
  365. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctred-mmx.asm +704 -0
  366. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jidctred-sse2.asm +592 -0
  367. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquant-3dn.asm +230 -0
  368. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquant-mmx.asm +276 -0
  369. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquant-sse.asm +208 -0
  370. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquantf-sse2.asm +168 -0
  371. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquanti-avx2.asm +188 -0
  372. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jquanti-sse2.asm +201 -0
  373. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jsimd.c +1253 -0
  374. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/i386/jsimdcpu.asm +135 -0
  375. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/jsimd.h +1083 -0
  376. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jccolext-mmi.c +483 -0
  377. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jccolor-mmi.c +148 -0
  378. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jcsample-mmi.c +100 -0
  379. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jcsample.h +28 -0
  380. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jdcolext-mmi.c +424 -0
  381. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jdcolor-mmi.c +139 -0
  382. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jdsample-mmi.c +245 -0
  383. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jfdctint-mmi.c +398 -0
  384. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jidctint-mmi.c +571 -0
  385. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jquanti-mmi.c +130 -0
  386. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jsimd.c +610 -0
  387. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/jsimd_mmi.h +57 -0
  388. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/loongson/loongson-mmintrin.h +1324 -0
  389. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/mips/jsimd.c +1123 -0
  390. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/mips/jsimd_dspr2.S +4479 -0
  391. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/mips/jsimd_dspr2_asm.h +292 -0
  392. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jcolsamp.inc +135 -0
  393. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jdct.inc +31 -0
  394. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jpeg_nbits_table.inc +4097 -0
  395. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jsimdcfg.inc +93 -0
  396. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jsimdcfg.inc.h +131 -0
  397. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/nasm/jsimdext.inc +479 -0
  398. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jccolext-altivec.c +269 -0
  399. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jccolor-altivec.c +116 -0
  400. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcgray-altivec.c +111 -0
  401. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcgryext-altivec.c +228 -0
  402. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcsample-altivec.c +159 -0
  403. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jcsample.h +28 -0
  404. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdcolext-altivec.c +276 -0
  405. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdcolor-altivec.c +106 -0
  406. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdmerge-altivec.c +130 -0
  407. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdmrgext-altivec.c +329 -0
  408. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jdsample-altivec.c +400 -0
  409. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jfdctfst-altivec.c +154 -0
  410. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jfdctint-altivec.c +258 -0
  411. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jidctfst-altivec.c +255 -0
  412. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jidctint-altivec.c +357 -0
  413. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jquanti-altivec.c +250 -0
  414. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jsimd.c +872 -0
  415. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/powerpc/jsimd_altivec.h +98 -0
  416. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolext-avx2.asm +558 -0
  417. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolext-sse2.asm +483 -0
  418. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolor-avx2.asm +121 -0
  419. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jccolor-sse2.asm +120 -0
  420. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgray-avx2.asm +113 -0
  421. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgray-sse2.asm +112 -0
  422. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgryext-avx2.asm +437 -0
  423. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcgryext-sse2.asm +362 -0
  424. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jchuff-sse2.asm +346 -0
  425. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcphuff-sse2.asm +637 -0
  426. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcsample-avx2.asm +366 -0
  427. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jcsample-sse2.asm +329 -0
  428. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolext-avx2.asm +495 -0
  429. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolext-sse2.asm +438 -0
  430. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolor-avx2.asm +118 -0
  431. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdcolor-sse2.asm +117 -0
  432. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmerge-avx2.asm +136 -0
  433. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmerge-sse2.asm +135 -0
  434. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmrgext-avx2.asm +593 -0
  435. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdmrgext-sse2.asm +535 -0
  436. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdsample-avx2.asm +695 -0
  437. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jdsample-sse2.asm +664 -0
  438. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctflt-sse.asm +355 -0
  439. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctfst-sse2.asm +389 -0
  440. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctint-avx2.asm +320 -0
  441. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jfdctint-sse2.asm +619 -0
  442. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctflt-sse2.asm +481 -0
  443. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctfst-sse2.asm +490 -0
  444. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctint-avx2.asm +417 -0
  445. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctint-sse2.asm +846 -0
  446. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jidctred-sse2.asm +573 -0
  447. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jquantf-sse2.asm +154 -0
  448. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jquanti-avx2.asm +162 -0
  449. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jquanti-sse2.asm +187 -0
  450. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jsimd.c +1076 -0
  451. data/epeg/vendor/libjpeg-turbo-2.0.4/simd/x86_64/jsimdcpu.asm +86 -0
  452. data/epeg/vendor/libjpeg-turbo-2.0.4/structure.txt +904 -0
  453. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/nightshot_iso_100.bmp +0 -0
  454. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/nightshot_iso_100.txt +25 -0
  455. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test.scan +5 -0
  456. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test1.icc +0 -0
  457. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test1.icc.txt +20 -0
  458. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test2.icc +0 -0
  459. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/test2.icc.txt +20 -0
  460. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testimgari.jpg +0 -0
  461. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testimgint.jpg +0 -0
  462. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testorig.jpg +0 -0
  463. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testorig.ppm +4 -0
  464. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/testorig12.jpg +0 -0
  465. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/vgl_5674_0098.bmp +0 -0
  466. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/vgl_6434_0018a.bmp +0 -0
  467. data/epeg/vendor/libjpeg-turbo-2.0.4/testimages/vgl_6548_0026a.bmp +0 -0
  468. data/epeg/vendor/libjpeg-turbo-2.0.4/tjbench.c +1031 -0
  469. data/epeg/vendor/libjpeg-turbo-2.0.4/tjbenchtest.in +256 -0
  470. data/epeg/vendor/libjpeg-turbo-2.0.4/tjbenchtest.java.in +215 -0
  471. data/epeg/vendor/libjpeg-turbo-2.0.4/tjexample.c +396 -0
  472. data/epeg/vendor/libjpeg-turbo-2.0.4/tjexampletest.in +149 -0
  473. data/epeg/vendor/libjpeg-turbo-2.0.4/tjexampletest.java.in +151 -0
  474. data/epeg/vendor/libjpeg-turbo-2.0.4/tjunittest.c +931 -0
  475. data/epeg/vendor/libjpeg-turbo-2.0.4/tjutil.c +70 -0
  476. data/epeg/vendor/libjpeg-turbo-2.0.4/tjutil.h +47 -0
  477. data/epeg/vendor/libjpeg-turbo-2.0.4/transupp.c +1628 -0
  478. data/epeg/vendor/libjpeg-turbo-2.0.4/transupp.h +210 -0
  479. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg-jni.c +1246 -0
  480. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg-mapfile +65 -0
  481. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg-mapfile.jni +101 -0
  482. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg.c +2152 -0
  483. data/epeg/vendor/libjpeg-turbo-2.0.4/turbojpeg.h +1744 -0
  484. data/epeg/vendor/libjpeg-turbo-2.0.4/usage.txt +635 -0
  485. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jconfig.h.in +34 -0
  486. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg62-memsrcdst.def +108 -0
  487. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg62.def +106 -0
  488. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg7-memsrcdst.def +110 -0
  489. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg7.def +108 -0
  490. data/epeg/vendor/libjpeg-turbo-2.0.4/win/jpeg8.def +111 -0
  491. data/epeg/vendor/libjpeg-turbo-2.0.4/wizard.txt +212 -0
  492. data/epeg/vendor/libjpeg-turbo-2.0.4/wrbmp.c +558 -0
  493. data/epeg/vendor/libjpeg-turbo-2.0.4/wrgif.c +413 -0
  494. data/epeg/vendor/libjpeg-turbo-2.0.4/wrjpgcom.1 +103 -0
  495. data/epeg/vendor/libjpeg-turbo-2.0.4/wrjpgcom.c +591 -0
  496. data/epeg/vendor/libjpeg-turbo-2.0.4/wrppm.c +365 -0
  497. data/epeg/vendor/libjpeg-turbo-2.0.4/wrrle.c +309 -0
  498. data/epeg/vendor/libjpeg-turbo-2.0.4/wrtarga.c +261 -0
  499. data/epeg.c +131 -0
  500. data/epeg.gemspec +18 -0
  501. data/extconf.rb +80 -0
  502. data/test.jpg +0 -0
  503. data/test.rb +42 -0
  504. metadata +546 -0
@@ -0,0 +1,851 @@
1
+ ;
2
+ ; jidctint.asm - accurate integer IDCT (MMX)
3
+ ;
4
+ ; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
5
+ ; Copyright (C) 2016, D. R. Commander.
6
+ ;
7
+ ; Based on the x86 SIMD extension for IJG JPEG library
8
+ ; Copyright (C) 1999-2006, MIYASAKA Masaru.
9
+ ; For conditions of distribution and use, see copyright notice in jsimdext.inc
10
+ ;
11
+ ; This file should be assembled with NASM (Netwide Assembler),
12
+ ; can *not* be assembled with Microsoft's MASM or any compatible
13
+ ; assembler (including Borland's Turbo Assembler).
14
+ ; NASM is available from http://nasm.sourceforge.net/ or
15
+ ; http://sourceforge.net/project/showfiles.php?group_id=6208
16
+ ;
17
+ ; This file contains a slow-but-accurate integer implementation of the
18
+ ; inverse DCT (Discrete Cosine Transform). The following code is based
19
+ ; directly on the IJG's original jidctint.c; see the jidctint.c for
20
+ ; more details.
21
+
22
+ %include "jsimdext.inc"
23
+ %include "jdct.inc"
24
+
25
+ ; --------------------------------------------------------------------------
26
+
27
+ %define CONST_BITS 13
28
+ %define PASS1_BITS 2
29
+
30
+ %define DESCALE_P1 (CONST_BITS - PASS1_BITS)
31
+ %define DESCALE_P2 (CONST_BITS + PASS1_BITS + 3)
32
+
33
+ %if CONST_BITS == 13
34
+ F_0_298 equ 2446 ; FIX(0.298631336)
35
+ F_0_390 equ 3196 ; FIX(0.390180644)
36
+ F_0_541 equ 4433 ; FIX(0.541196100)
37
+ F_0_765 equ 6270 ; FIX(0.765366865)
38
+ F_0_899 equ 7373 ; FIX(0.899976223)
39
+ F_1_175 equ 9633 ; FIX(1.175875602)
40
+ F_1_501 equ 12299 ; FIX(1.501321110)
41
+ F_1_847 equ 15137 ; FIX(1.847759065)
42
+ F_1_961 equ 16069 ; FIX(1.961570560)
43
+ F_2_053 equ 16819 ; FIX(2.053119869)
44
+ F_2_562 equ 20995 ; FIX(2.562915447)
45
+ F_3_072 equ 25172 ; FIX(3.072711026)
46
+ %else
47
+ ; NASM cannot do compile-time arithmetic on floating-point constants.
48
+ %define DESCALE(x, n) (((x) + (1 << ((n) - 1))) >> (n))
49
+ F_0_298 equ DESCALE( 320652955, 30 - CONST_BITS) ; FIX(0.298631336)
50
+ F_0_390 equ DESCALE( 418953276, 30 - CONST_BITS) ; FIX(0.390180644)
51
+ F_0_541 equ DESCALE( 581104887, 30 - CONST_BITS) ; FIX(0.541196100)
52
+ F_0_765 equ DESCALE( 821806413, 30 - CONST_BITS) ; FIX(0.765366865)
53
+ F_0_899 equ DESCALE( 966342111, 30 - CONST_BITS) ; FIX(0.899976223)
54
+ F_1_175 equ DESCALE(1262586813, 30 - CONST_BITS) ; FIX(1.175875602)
55
+ F_1_501 equ DESCALE(1612031267, 30 - CONST_BITS) ; FIX(1.501321110)
56
+ F_1_847 equ DESCALE(1984016188, 30 - CONST_BITS) ; FIX(1.847759065)
57
+ F_1_961 equ DESCALE(2106220350, 30 - CONST_BITS) ; FIX(1.961570560)
58
+ F_2_053 equ DESCALE(2204520673, 30 - CONST_BITS) ; FIX(2.053119869)
59
+ F_2_562 equ DESCALE(2751909506, 30 - CONST_BITS) ; FIX(2.562915447)
60
+ F_3_072 equ DESCALE(3299298341, 30 - CONST_BITS) ; FIX(3.072711026)
61
+ %endif
62
+
63
+ ; --------------------------------------------------------------------------
64
+ SECTION SEG_CONST
65
+
66
+ alignz 32
67
+ GLOBAL_DATA(jconst_idct_islow_mmx)
68
+
69
+ EXTN(jconst_idct_islow_mmx):
70
+
71
+ PW_F130_F054 times 2 dw (F_0_541 + F_0_765), F_0_541
72
+ PW_F054_MF130 times 2 dw F_0_541, (F_0_541 - F_1_847)
73
+ PW_MF078_F117 times 2 dw (F_1_175 - F_1_961), F_1_175
74
+ PW_F117_F078 times 2 dw F_1_175, (F_1_175 - F_0_390)
75
+ PW_MF060_MF089 times 2 dw (F_0_298 - F_0_899), -F_0_899
76
+ PW_MF089_F060 times 2 dw -F_0_899, (F_1_501 - F_0_899)
77
+ PW_MF050_MF256 times 2 dw (F_2_053 - F_2_562), -F_2_562
78
+ PW_MF256_F050 times 2 dw -F_2_562, (F_3_072 - F_2_562)
79
+ PD_DESCALE_P1 times 2 dd 1 << (DESCALE_P1 - 1)
80
+ PD_DESCALE_P2 times 2 dd 1 << (DESCALE_P2 - 1)
81
+ PB_CENTERJSAMP times 8 db CENTERJSAMPLE
82
+
83
+ alignz 32
84
+
85
+ ; --------------------------------------------------------------------------
86
+ SECTION SEG_TEXT
87
+ BITS 32
88
+ ;
89
+ ; Perform dequantization and inverse DCT on one block of coefficients.
90
+ ;
91
+ ; GLOBAL(void)
92
+ ; jsimd_idct_islow_mmx(void *dct_table, JCOEFPTR coef_block,
93
+ ; JSAMPARRAY output_buf, JDIMENSION output_col)
94
+ ;
95
+
96
+ %define dct_table(b) (b) + 8 ; jpeg_component_info *compptr
97
+ %define coef_block(b) (b) + 12 ; JCOEFPTR coef_block
98
+ %define output_buf(b) (b) + 16 ; JSAMPARRAY output_buf
99
+ %define output_col(b) (b) + 20 ; JDIMENSION output_col
100
+
101
+ %define original_ebp ebp + 0
102
+ %define wk(i) ebp - (WK_NUM - (i)) * SIZEOF_MMWORD
103
+ ; mmword wk[WK_NUM]
104
+ %define WK_NUM 12
105
+ %define workspace wk(0) - DCTSIZE2 * SIZEOF_JCOEF
106
+ ; JCOEF workspace[DCTSIZE2]
107
+
108
+ align 32
109
+ GLOBAL_FUNCTION(jsimd_idct_islow_mmx)
110
+
111
+ EXTN(jsimd_idct_islow_mmx):
112
+ push ebp
113
+ mov eax, esp ; eax = original ebp
114
+ sub esp, byte 4
115
+ and esp, byte (-SIZEOF_MMWORD) ; align to 64 bits
116
+ mov [esp], eax
117
+ mov ebp, esp ; ebp = aligned ebp
118
+ lea esp, [workspace]
119
+ push ebx
120
+ ; push ecx ; need not be preserved
121
+ ; push edx ; need not be preserved
122
+ push esi
123
+ push edi
124
+
125
+ get_GOT ebx ; get GOT address
126
+
127
+ ; ---- Pass 1: process columns from input, store into work array.
128
+
129
+ ; mov eax, [original_ebp]
130
+ mov edx, POINTER [dct_table(eax)] ; quantptr
131
+ mov esi, JCOEFPTR [coef_block(eax)] ; inptr
132
+ lea edi, [workspace] ; JCOEF *wsptr
133
+ mov ecx, DCTSIZE/4 ; ctr
134
+ alignx 16, 7
135
+ .columnloop:
136
+ %ifndef NO_ZERO_COLUMN_TEST_ISLOW_MMX
137
+ mov eax, dword [DWBLOCK(1,0,esi,SIZEOF_JCOEF)]
138
+ or eax, dword [DWBLOCK(2,0,esi,SIZEOF_JCOEF)]
139
+ jnz short .columnDCT
140
+
141
+ movq mm0, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
142
+ movq mm1, MMWORD [MMBLOCK(2,0,esi,SIZEOF_JCOEF)]
143
+ por mm0, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
144
+ por mm1, MMWORD [MMBLOCK(4,0,esi,SIZEOF_JCOEF)]
145
+ por mm0, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
146
+ por mm1, MMWORD [MMBLOCK(6,0,esi,SIZEOF_JCOEF)]
147
+ por mm0, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]
148
+ por mm1, mm0
149
+ packsswb mm1, mm1
150
+ movd eax, mm1
151
+ test eax, eax
152
+ jnz short .columnDCT
153
+
154
+ ; -- AC terms all zero
155
+
156
+ movq mm0, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
157
+ pmullw mm0, MMWORD [MMBLOCK(0,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
158
+
159
+ psllw mm0, PASS1_BITS
160
+
161
+ movq mm2, mm0 ; mm0=in0=(00 01 02 03)
162
+ punpcklwd mm0, mm0 ; mm0=(00 00 01 01)
163
+ punpckhwd mm2, mm2 ; mm2=(02 02 03 03)
164
+
165
+ movq mm1, mm0
166
+ punpckldq mm0, mm0 ; mm0=(00 00 00 00)
167
+ punpckhdq mm1, mm1 ; mm1=(01 01 01 01)
168
+ movq mm3, mm2
169
+ punpckldq mm2, mm2 ; mm2=(02 02 02 02)
170
+ punpckhdq mm3, mm3 ; mm3=(03 03 03 03)
171
+
172
+ movq MMWORD [MMBLOCK(0,0,edi,SIZEOF_JCOEF)], mm0
173
+ movq MMWORD [MMBLOCK(0,1,edi,SIZEOF_JCOEF)], mm0
174
+ movq MMWORD [MMBLOCK(1,0,edi,SIZEOF_JCOEF)], mm1
175
+ movq MMWORD [MMBLOCK(1,1,edi,SIZEOF_JCOEF)], mm1
176
+ movq MMWORD [MMBLOCK(2,0,edi,SIZEOF_JCOEF)], mm2
177
+ movq MMWORD [MMBLOCK(2,1,edi,SIZEOF_JCOEF)], mm2
178
+ movq MMWORD [MMBLOCK(3,0,edi,SIZEOF_JCOEF)], mm3
179
+ movq MMWORD [MMBLOCK(3,1,edi,SIZEOF_JCOEF)], mm3
180
+ jmp near .nextcolumn
181
+ alignx 16, 7
182
+ %endif
183
+ .columnDCT:
184
+
185
+ ; -- Even part
186
+
187
+ movq mm0, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
188
+ movq mm1, MMWORD [MMBLOCK(2,0,esi,SIZEOF_JCOEF)]
189
+ pmullw mm0, MMWORD [MMBLOCK(0,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
190
+ pmullw mm1, MMWORD [MMBLOCK(2,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
191
+ movq mm2, MMWORD [MMBLOCK(4,0,esi,SIZEOF_JCOEF)]
192
+ movq mm3, MMWORD [MMBLOCK(6,0,esi,SIZEOF_JCOEF)]
193
+ pmullw mm2, MMWORD [MMBLOCK(4,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
194
+ pmullw mm3, MMWORD [MMBLOCK(6,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
195
+
196
+ ; (Original)
197
+ ; z1 = (z2 + z3) * 0.541196100;
198
+ ; tmp2 = z1 + z3 * -1.847759065;
199
+ ; tmp3 = z1 + z2 * 0.765366865;
200
+ ;
201
+ ; (This implementation)
202
+ ; tmp2 = z2 * 0.541196100 + z3 * (0.541196100 - 1.847759065);
203
+ ; tmp3 = z2 * (0.541196100 + 0.765366865) + z3 * 0.541196100;
204
+
205
+ movq mm4, mm1 ; mm1=in2=z2
206
+ movq mm5, mm1
207
+ punpcklwd mm4, mm3 ; mm3=in6=z3
208
+ punpckhwd mm5, mm3
209
+ movq mm1, mm4
210
+ movq mm3, mm5
211
+ pmaddwd mm4, [GOTOFF(ebx,PW_F130_F054)] ; mm4=tmp3L
212
+ pmaddwd mm5, [GOTOFF(ebx,PW_F130_F054)] ; mm5=tmp3H
213
+ pmaddwd mm1, [GOTOFF(ebx,PW_F054_MF130)] ; mm1=tmp2L
214
+ pmaddwd mm3, [GOTOFF(ebx,PW_F054_MF130)] ; mm3=tmp2H
215
+
216
+ movq mm6, mm0
217
+ paddw mm0, mm2 ; mm0=in0+in4
218
+ psubw mm6, mm2 ; mm6=in0-in4
219
+
220
+ pxor mm7, mm7
221
+ pxor mm2, mm2
222
+ punpcklwd mm7, mm0 ; mm7=tmp0L
223
+ punpckhwd mm2, mm0 ; mm2=tmp0H
224
+ psrad mm7, (16-CONST_BITS) ; psrad mm7,16 & pslld mm7,CONST_BITS
225
+ psrad mm2, (16-CONST_BITS) ; psrad mm2,16 & pslld mm2,CONST_BITS
226
+
227
+ movq mm0, mm7
228
+ paddd mm7, mm4 ; mm7=tmp10L
229
+ psubd mm0, mm4 ; mm0=tmp13L
230
+ movq mm4, mm2
231
+ paddd mm2, mm5 ; mm2=tmp10H
232
+ psubd mm4, mm5 ; mm4=tmp13H
233
+
234
+ movq MMWORD [wk(0)], mm7 ; wk(0)=tmp10L
235
+ movq MMWORD [wk(1)], mm2 ; wk(1)=tmp10H
236
+ movq MMWORD [wk(2)], mm0 ; wk(2)=tmp13L
237
+ movq MMWORD [wk(3)], mm4 ; wk(3)=tmp13H
238
+
239
+ pxor mm5, mm5
240
+ pxor mm7, mm7
241
+ punpcklwd mm5, mm6 ; mm5=tmp1L
242
+ punpckhwd mm7, mm6 ; mm7=tmp1H
243
+ psrad mm5, (16-CONST_BITS) ; psrad mm5,16 & pslld mm5,CONST_BITS
244
+ psrad mm7, (16-CONST_BITS) ; psrad mm7,16 & pslld mm7,CONST_BITS
245
+
246
+ movq mm2, mm5
247
+ paddd mm5, mm1 ; mm5=tmp11L
248
+ psubd mm2, mm1 ; mm2=tmp12L
249
+ movq mm0, mm7
250
+ paddd mm7, mm3 ; mm7=tmp11H
251
+ psubd mm0, mm3 ; mm0=tmp12H
252
+
253
+ movq MMWORD [wk(4)], mm5 ; wk(4)=tmp11L
254
+ movq MMWORD [wk(5)], mm7 ; wk(5)=tmp11H
255
+ movq MMWORD [wk(6)], mm2 ; wk(6)=tmp12L
256
+ movq MMWORD [wk(7)], mm0 ; wk(7)=tmp12H
257
+
258
+ ; -- Odd part
259
+
260
+ movq mm4, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
261
+ movq mm6, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
262
+ pmullw mm4, MMWORD [MMBLOCK(1,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
263
+ pmullw mm6, MMWORD [MMBLOCK(3,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
264
+ movq mm1, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
265
+ movq mm3, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]
266
+ pmullw mm1, MMWORD [MMBLOCK(5,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
267
+ pmullw mm3, MMWORD [MMBLOCK(7,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
268
+
269
+ movq mm5, mm6
270
+ movq mm7, mm4
271
+ paddw mm5, mm3 ; mm5=z3
272
+ paddw mm7, mm1 ; mm7=z4
273
+
274
+ ; (Original)
275
+ ; z5 = (z3 + z4) * 1.175875602;
276
+ ; z3 = z3 * -1.961570560; z4 = z4 * -0.390180644;
277
+ ; z3 += z5; z4 += z5;
278
+ ;
279
+ ; (This implementation)
280
+ ; z3 = z3 * (1.175875602 - 1.961570560) + z4 * 1.175875602;
281
+ ; z4 = z3 * 1.175875602 + z4 * (1.175875602 - 0.390180644);
282
+
283
+ movq mm2, mm5
284
+ movq mm0, mm5
285
+ punpcklwd mm2, mm7
286
+ punpckhwd mm0, mm7
287
+ movq mm5, mm2
288
+ movq mm7, mm0
289
+ pmaddwd mm2, [GOTOFF(ebx,PW_MF078_F117)] ; mm2=z3L
290
+ pmaddwd mm0, [GOTOFF(ebx,PW_MF078_F117)] ; mm0=z3H
291
+ pmaddwd mm5, [GOTOFF(ebx,PW_F117_F078)] ; mm5=z4L
292
+ pmaddwd mm7, [GOTOFF(ebx,PW_F117_F078)] ; mm7=z4H
293
+
294
+ movq MMWORD [wk(10)], mm2 ; wk(10)=z3L
295
+ movq MMWORD [wk(11)], mm0 ; wk(11)=z3H
296
+
297
+ ; (Original)
298
+ ; z1 = tmp0 + tmp3; z2 = tmp1 + tmp2;
299
+ ; tmp0 = tmp0 * 0.298631336; tmp1 = tmp1 * 2.053119869;
300
+ ; tmp2 = tmp2 * 3.072711026; tmp3 = tmp3 * 1.501321110;
301
+ ; z1 = z1 * -0.899976223; z2 = z2 * -2.562915447;
302
+ ; tmp0 += z1 + z3; tmp1 += z2 + z4;
303
+ ; tmp2 += z2 + z3; tmp3 += z1 + z4;
304
+ ;
305
+ ; (This implementation)
306
+ ; tmp0 = tmp0 * (0.298631336 - 0.899976223) + tmp3 * -0.899976223;
307
+ ; tmp1 = tmp1 * (2.053119869 - 2.562915447) + tmp2 * -2.562915447;
308
+ ; tmp2 = tmp1 * -2.562915447 + tmp2 * (3.072711026 - 2.562915447);
309
+ ; tmp3 = tmp0 * -0.899976223 + tmp3 * (1.501321110 - 0.899976223);
310
+ ; tmp0 += z3; tmp1 += z4;
311
+ ; tmp2 += z3; tmp3 += z4;
312
+
313
+ movq mm2, mm3
314
+ movq mm0, mm3
315
+ punpcklwd mm2, mm4
316
+ punpckhwd mm0, mm4
317
+ movq mm3, mm2
318
+ movq mm4, mm0
319
+ pmaddwd mm2, [GOTOFF(ebx,PW_MF060_MF089)] ; mm2=tmp0L
320
+ pmaddwd mm0, [GOTOFF(ebx,PW_MF060_MF089)] ; mm0=tmp0H
321
+ pmaddwd mm3, [GOTOFF(ebx,PW_MF089_F060)] ; mm3=tmp3L
322
+ pmaddwd mm4, [GOTOFF(ebx,PW_MF089_F060)] ; mm4=tmp3H
323
+
324
+ paddd mm2, MMWORD [wk(10)] ; mm2=tmp0L
325
+ paddd mm0, MMWORD [wk(11)] ; mm0=tmp0H
326
+ paddd mm3, mm5 ; mm3=tmp3L
327
+ paddd mm4, mm7 ; mm4=tmp3H
328
+
329
+ movq MMWORD [wk(8)], mm2 ; wk(8)=tmp0L
330
+ movq MMWORD [wk(9)], mm0 ; wk(9)=tmp0H
331
+
332
+ movq mm2, mm1
333
+ movq mm0, mm1
334
+ punpcklwd mm2, mm6
335
+ punpckhwd mm0, mm6
336
+ movq mm1, mm2
337
+ movq mm6, mm0
338
+ pmaddwd mm2, [GOTOFF(ebx,PW_MF050_MF256)] ; mm2=tmp1L
339
+ pmaddwd mm0, [GOTOFF(ebx,PW_MF050_MF256)] ; mm0=tmp1H
340
+ pmaddwd mm1, [GOTOFF(ebx,PW_MF256_F050)] ; mm1=tmp2L
341
+ pmaddwd mm6, [GOTOFF(ebx,PW_MF256_F050)] ; mm6=tmp2H
342
+
343
+ paddd mm2, mm5 ; mm2=tmp1L
344
+ paddd mm0, mm7 ; mm0=tmp1H
345
+ paddd mm1, MMWORD [wk(10)] ; mm1=tmp2L
346
+ paddd mm6, MMWORD [wk(11)] ; mm6=tmp2H
347
+
348
+ movq MMWORD [wk(10)], mm2 ; wk(10)=tmp1L
349
+ movq MMWORD [wk(11)], mm0 ; wk(11)=tmp1H
350
+
351
+ ; -- Final output stage
352
+
353
+ movq mm5, MMWORD [wk(0)] ; mm5=tmp10L
354
+ movq mm7, MMWORD [wk(1)] ; mm7=tmp10H
355
+
356
+ movq mm2, mm5
357
+ movq mm0, mm7
358
+ paddd mm5, mm3 ; mm5=data0L
359
+ paddd mm7, mm4 ; mm7=data0H
360
+ psubd mm2, mm3 ; mm2=data7L
361
+ psubd mm0, mm4 ; mm0=data7H
362
+
363
+ movq mm3, [GOTOFF(ebx,PD_DESCALE_P1)] ; mm3=[PD_DESCALE_P1]
364
+
365
+ paddd mm5, mm3
366
+ paddd mm7, mm3
367
+ psrad mm5, DESCALE_P1
368
+ psrad mm7, DESCALE_P1
369
+ paddd mm2, mm3
370
+ paddd mm0, mm3
371
+ psrad mm2, DESCALE_P1
372
+ psrad mm0, DESCALE_P1
373
+
374
+ packssdw mm5, mm7 ; mm5=data0=(00 01 02 03)
375
+ packssdw mm2, mm0 ; mm2=data7=(70 71 72 73)
376
+
377
+ movq mm4, MMWORD [wk(4)] ; mm4=tmp11L
378
+ movq mm3, MMWORD [wk(5)] ; mm3=tmp11H
379
+
380
+ movq mm7, mm4
381
+ movq mm0, mm3
382
+ paddd mm4, mm1 ; mm4=data1L
383
+ paddd mm3, mm6 ; mm3=data1H
384
+ psubd mm7, mm1 ; mm7=data6L
385
+ psubd mm0, mm6 ; mm0=data6H
386
+
387
+ movq mm1, [GOTOFF(ebx,PD_DESCALE_P1)] ; mm1=[PD_DESCALE_P1]
388
+
389
+ paddd mm4, mm1
390
+ paddd mm3, mm1
391
+ psrad mm4, DESCALE_P1
392
+ psrad mm3, DESCALE_P1
393
+ paddd mm7, mm1
394
+ paddd mm0, mm1
395
+ psrad mm7, DESCALE_P1
396
+ psrad mm0, DESCALE_P1
397
+
398
+ packssdw mm4, mm3 ; mm4=data1=(10 11 12 13)
399
+ packssdw mm7, mm0 ; mm7=data6=(60 61 62 63)
400
+
401
+ movq mm6, mm5 ; transpose coefficients(phase 1)
402
+ punpcklwd mm5, mm4 ; mm5=(00 10 01 11)
403
+ punpckhwd mm6, mm4 ; mm6=(02 12 03 13)
404
+ movq mm1, mm7 ; transpose coefficients(phase 1)
405
+ punpcklwd mm7, mm2 ; mm7=(60 70 61 71)
406
+ punpckhwd mm1, mm2 ; mm1=(62 72 63 73)
407
+
408
+ movq mm3, MMWORD [wk(6)] ; mm3=tmp12L
409
+ movq mm0, MMWORD [wk(7)] ; mm0=tmp12H
410
+ movq mm4, MMWORD [wk(10)] ; mm4=tmp1L
411
+ movq mm2, MMWORD [wk(11)] ; mm2=tmp1H
412
+
413
+ movq MMWORD [wk(0)], mm5 ; wk(0)=(00 10 01 11)
414
+ movq MMWORD [wk(1)], mm6 ; wk(1)=(02 12 03 13)
415
+ movq MMWORD [wk(4)], mm7 ; wk(4)=(60 70 61 71)
416
+ movq MMWORD [wk(5)], mm1 ; wk(5)=(62 72 63 73)
417
+
418
+ movq mm5, mm3
419
+ movq mm6, mm0
420
+ paddd mm3, mm4 ; mm3=data2L
421
+ paddd mm0, mm2 ; mm0=data2H
422
+ psubd mm5, mm4 ; mm5=data5L
423
+ psubd mm6, mm2 ; mm6=data5H
424
+
425
+ movq mm7, [GOTOFF(ebx,PD_DESCALE_P1)] ; mm7=[PD_DESCALE_P1]
426
+
427
+ paddd mm3, mm7
428
+ paddd mm0, mm7
429
+ psrad mm3, DESCALE_P1
430
+ psrad mm0, DESCALE_P1
431
+ paddd mm5, mm7
432
+ paddd mm6, mm7
433
+ psrad mm5, DESCALE_P1
434
+ psrad mm6, DESCALE_P1
435
+
436
+ packssdw mm3, mm0 ; mm3=data2=(20 21 22 23)
437
+ packssdw mm5, mm6 ; mm5=data5=(50 51 52 53)
438
+
439
+ movq mm1, MMWORD [wk(2)] ; mm1=tmp13L
440
+ movq mm4, MMWORD [wk(3)] ; mm4=tmp13H
441
+ movq mm2, MMWORD [wk(8)] ; mm2=tmp0L
442
+ movq mm7, MMWORD [wk(9)] ; mm7=tmp0H
443
+
444
+ movq mm0, mm1
445
+ movq mm6, mm4
446
+ paddd mm1, mm2 ; mm1=data3L
447
+ paddd mm4, mm7 ; mm4=data3H
448
+ psubd mm0, mm2 ; mm0=data4L
449
+ psubd mm6, mm7 ; mm6=data4H
450
+
451
+ movq mm2, [GOTOFF(ebx,PD_DESCALE_P1)] ; mm2=[PD_DESCALE_P1]
452
+
453
+ paddd mm1, mm2
454
+ paddd mm4, mm2
455
+ psrad mm1, DESCALE_P1
456
+ psrad mm4, DESCALE_P1
457
+ paddd mm0, mm2
458
+ paddd mm6, mm2
459
+ psrad mm0, DESCALE_P1
460
+ psrad mm6, DESCALE_P1
461
+
462
+ packssdw mm1, mm4 ; mm1=data3=(30 31 32 33)
463
+ packssdw mm0, mm6 ; mm0=data4=(40 41 42 43)
464
+
465
+ movq mm7, MMWORD [wk(0)] ; mm7=(00 10 01 11)
466
+ movq mm2, MMWORD [wk(1)] ; mm2=(02 12 03 13)
467
+
468
+ movq mm4, mm3 ; transpose coefficients(phase 1)
469
+ punpcklwd mm3, mm1 ; mm3=(20 30 21 31)
470
+ punpckhwd mm4, mm1 ; mm4=(22 32 23 33)
471
+ movq mm6, mm0 ; transpose coefficients(phase 1)
472
+ punpcklwd mm0, mm5 ; mm0=(40 50 41 51)
473
+ punpckhwd mm6, mm5 ; mm6=(42 52 43 53)
474
+
475
+ movq mm1, mm7 ; transpose coefficients(phase 2)
476
+ punpckldq mm7, mm3 ; mm7=(00 10 20 30)
477
+ punpckhdq mm1, mm3 ; mm1=(01 11 21 31)
478
+ movq mm5, mm2 ; transpose coefficients(phase 2)
479
+ punpckldq mm2, mm4 ; mm2=(02 12 22 32)
480
+ punpckhdq mm5, mm4 ; mm5=(03 13 23 33)
481
+
482
+ movq mm3, MMWORD [wk(4)] ; mm3=(60 70 61 71)
483
+ movq mm4, MMWORD [wk(5)] ; mm4=(62 72 63 73)
484
+
485
+ movq MMWORD [MMBLOCK(0,0,edi,SIZEOF_JCOEF)], mm7
486
+ movq MMWORD [MMBLOCK(1,0,edi,SIZEOF_JCOEF)], mm1
487
+ movq MMWORD [MMBLOCK(2,0,edi,SIZEOF_JCOEF)], mm2
488
+ movq MMWORD [MMBLOCK(3,0,edi,SIZEOF_JCOEF)], mm5
489
+
490
+ movq mm7, mm0 ; transpose coefficients(phase 2)
491
+ punpckldq mm0, mm3 ; mm0=(40 50 60 70)
492
+ punpckhdq mm7, mm3 ; mm7=(41 51 61 71)
493
+ movq mm1, mm6 ; transpose coefficients(phase 2)
494
+ punpckldq mm6, mm4 ; mm6=(42 52 62 72)
495
+ punpckhdq mm1, mm4 ; mm1=(43 53 63 73)
496
+
497
+ movq MMWORD [MMBLOCK(0,1,edi,SIZEOF_JCOEF)], mm0
498
+ movq MMWORD [MMBLOCK(1,1,edi,SIZEOF_JCOEF)], mm7
499
+ movq MMWORD [MMBLOCK(2,1,edi,SIZEOF_JCOEF)], mm6
500
+ movq MMWORD [MMBLOCK(3,1,edi,SIZEOF_JCOEF)], mm1
501
+
502
+ .nextcolumn:
503
+ add esi, byte 4*SIZEOF_JCOEF ; coef_block
504
+ add edx, byte 4*SIZEOF_ISLOW_MULT_TYPE ; quantptr
505
+ add edi, byte 4*DCTSIZE*SIZEOF_JCOEF ; wsptr
506
+ dec ecx ; ctr
507
+ jnz near .columnloop
508
+
509
+ ; ---- Pass 2: process rows from work array, store into output array.
510
+
511
+ mov eax, [original_ebp]
512
+ lea esi, [workspace] ; JCOEF *wsptr
513
+ mov edi, JSAMPARRAY [output_buf(eax)] ; (JSAMPROW *)
514
+ mov eax, JDIMENSION [output_col(eax)]
515
+ mov ecx, DCTSIZE/4 ; ctr
516
+ alignx 16, 7
517
+ .rowloop:
518
+
519
+ ; -- Even part
520
+
521
+ movq mm0, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
522
+ movq mm1, MMWORD [MMBLOCK(2,0,esi,SIZEOF_JCOEF)]
523
+ movq mm2, MMWORD [MMBLOCK(4,0,esi,SIZEOF_JCOEF)]
524
+ movq mm3, MMWORD [MMBLOCK(6,0,esi,SIZEOF_JCOEF)]
525
+
526
+ ; (Original)
527
+ ; z1 = (z2 + z3) * 0.541196100;
528
+ ; tmp2 = z1 + z3 * -1.847759065;
529
+ ; tmp3 = z1 + z2 * 0.765366865;
530
+ ;
531
+ ; (This implementation)
532
+ ; tmp2 = z2 * 0.541196100 + z3 * (0.541196100 - 1.847759065);
533
+ ; tmp3 = z2 * (0.541196100 + 0.765366865) + z3 * 0.541196100;
534
+
535
+ movq mm4, mm1 ; mm1=in2=z2
536
+ movq mm5, mm1
537
+ punpcklwd mm4, mm3 ; mm3=in6=z3
538
+ punpckhwd mm5, mm3
539
+ movq mm1, mm4
540
+ movq mm3, mm5
541
+ pmaddwd mm4, [GOTOFF(ebx,PW_F130_F054)] ; mm4=tmp3L
542
+ pmaddwd mm5, [GOTOFF(ebx,PW_F130_F054)] ; mm5=tmp3H
543
+ pmaddwd mm1, [GOTOFF(ebx,PW_F054_MF130)] ; mm1=tmp2L
544
+ pmaddwd mm3, [GOTOFF(ebx,PW_F054_MF130)] ; mm3=tmp2H
545
+
546
+ movq mm6, mm0
547
+ paddw mm0, mm2 ; mm0=in0+in4
548
+ psubw mm6, mm2 ; mm6=in0-in4
549
+
550
+ pxor mm7, mm7
551
+ pxor mm2, mm2
552
+ punpcklwd mm7, mm0 ; mm7=tmp0L
553
+ punpckhwd mm2, mm0 ; mm2=tmp0H
554
+ psrad mm7, (16-CONST_BITS) ; psrad mm7,16 & pslld mm7,CONST_BITS
555
+ psrad mm2, (16-CONST_BITS) ; psrad mm2,16 & pslld mm2,CONST_BITS
556
+
557
+ movq mm0, mm7
558
+ paddd mm7, mm4 ; mm7=tmp10L
559
+ psubd mm0, mm4 ; mm0=tmp13L
560
+ movq mm4, mm2
561
+ paddd mm2, mm5 ; mm2=tmp10H
562
+ psubd mm4, mm5 ; mm4=tmp13H
563
+
564
+ movq MMWORD [wk(0)], mm7 ; wk(0)=tmp10L
565
+ movq MMWORD [wk(1)], mm2 ; wk(1)=tmp10H
566
+ movq MMWORD [wk(2)], mm0 ; wk(2)=tmp13L
567
+ movq MMWORD [wk(3)], mm4 ; wk(3)=tmp13H
568
+
569
+ pxor mm5, mm5
570
+ pxor mm7, mm7
571
+ punpcklwd mm5, mm6 ; mm5=tmp1L
572
+ punpckhwd mm7, mm6 ; mm7=tmp1H
573
+ psrad mm5, (16-CONST_BITS) ; psrad mm5,16 & pslld mm5,CONST_BITS
574
+ psrad mm7, (16-CONST_BITS) ; psrad mm7,16 & pslld mm7,CONST_BITS
575
+
576
+ movq mm2, mm5
577
+ paddd mm5, mm1 ; mm5=tmp11L
578
+ psubd mm2, mm1 ; mm2=tmp12L
579
+ movq mm0, mm7
580
+ paddd mm7, mm3 ; mm7=tmp11H
581
+ psubd mm0, mm3 ; mm0=tmp12H
582
+
583
+ movq MMWORD [wk(4)], mm5 ; wk(4)=tmp11L
584
+ movq MMWORD [wk(5)], mm7 ; wk(5)=tmp11H
585
+ movq MMWORD [wk(6)], mm2 ; wk(6)=tmp12L
586
+ movq MMWORD [wk(7)], mm0 ; wk(7)=tmp12H
587
+
588
+ ; -- Odd part
589
+
590
+ movq mm4, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
591
+ movq mm6, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
592
+ movq mm1, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
593
+ movq mm3, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]
594
+
595
+ movq mm5, mm6
596
+ movq mm7, mm4
597
+ paddw mm5, mm3 ; mm5=z3
598
+ paddw mm7, mm1 ; mm7=z4
599
+
600
+ ; (Original)
601
+ ; z5 = (z3 + z4) * 1.175875602;
602
+ ; z3 = z3 * -1.961570560; z4 = z4 * -0.390180644;
603
+ ; z3 += z5; z4 += z5;
604
+ ;
605
+ ; (This implementation)
606
+ ; z3 = z3 * (1.175875602 - 1.961570560) + z4 * 1.175875602;
607
+ ; z4 = z3 * 1.175875602 + z4 * (1.175875602 - 0.390180644);
608
+
609
+ movq mm2, mm5
610
+ movq mm0, mm5
611
+ punpcklwd mm2, mm7
612
+ punpckhwd mm0, mm7
613
+ movq mm5, mm2
614
+ movq mm7, mm0
615
+ pmaddwd mm2, [GOTOFF(ebx,PW_MF078_F117)] ; mm2=z3L
616
+ pmaddwd mm0, [GOTOFF(ebx,PW_MF078_F117)] ; mm0=z3H
617
+ pmaddwd mm5, [GOTOFF(ebx,PW_F117_F078)] ; mm5=z4L
618
+ pmaddwd mm7, [GOTOFF(ebx,PW_F117_F078)] ; mm7=z4H
619
+
620
+ movq MMWORD [wk(10)], mm2 ; wk(10)=z3L
621
+ movq MMWORD [wk(11)], mm0 ; wk(11)=z3H
622
+
623
+ ; (Original)
624
+ ; z1 = tmp0 + tmp3; z2 = tmp1 + tmp2;
625
+ ; tmp0 = tmp0 * 0.298631336; tmp1 = tmp1 * 2.053119869;
626
+ ; tmp2 = tmp2 * 3.072711026; tmp3 = tmp3 * 1.501321110;
627
+ ; z1 = z1 * -0.899976223; z2 = z2 * -2.562915447;
628
+ ; tmp0 += z1 + z3; tmp1 += z2 + z4;
629
+ ; tmp2 += z2 + z3; tmp3 += z1 + z4;
630
+ ;
631
+ ; (This implementation)
632
+ ; tmp0 = tmp0 * (0.298631336 - 0.899976223) + tmp3 * -0.899976223;
633
+ ; tmp1 = tmp1 * (2.053119869 - 2.562915447) + tmp2 * -2.562915447;
634
+ ; tmp2 = tmp1 * -2.562915447 + tmp2 * (3.072711026 - 2.562915447);
635
+ ; tmp3 = tmp0 * -0.899976223 + tmp3 * (1.501321110 - 0.899976223);
636
+ ; tmp0 += z3; tmp1 += z4;
637
+ ; tmp2 += z3; tmp3 += z4;
638
+
639
+ movq mm2, mm3
640
+ movq mm0, mm3
641
+ punpcklwd mm2, mm4
642
+ punpckhwd mm0, mm4
643
+ movq mm3, mm2
644
+ movq mm4, mm0
645
+ pmaddwd mm2, [GOTOFF(ebx,PW_MF060_MF089)] ; mm2=tmp0L
646
+ pmaddwd mm0, [GOTOFF(ebx,PW_MF060_MF089)] ; mm0=tmp0H
647
+ pmaddwd mm3, [GOTOFF(ebx,PW_MF089_F060)] ; mm3=tmp3L
648
+ pmaddwd mm4, [GOTOFF(ebx,PW_MF089_F060)] ; mm4=tmp3H
649
+
650
+ paddd mm2, MMWORD [wk(10)] ; mm2=tmp0L
651
+ paddd mm0, MMWORD [wk(11)] ; mm0=tmp0H
652
+ paddd mm3, mm5 ; mm3=tmp3L
653
+ paddd mm4, mm7 ; mm4=tmp3H
654
+
655
+ movq MMWORD [wk(8)], mm2 ; wk(8)=tmp0L
656
+ movq MMWORD [wk(9)], mm0 ; wk(9)=tmp0H
657
+
658
+ movq mm2, mm1
659
+ movq mm0, mm1
660
+ punpcklwd mm2, mm6
661
+ punpckhwd mm0, mm6
662
+ movq mm1, mm2
663
+ movq mm6, mm0
664
+ pmaddwd mm2, [GOTOFF(ebx,PW_MF050_MF256)] ; mm2=tmp1L
665
+ pmaddwd mm0, [GOTOFF(ebx,PW_MF050_MF256)] ; mm0=tmp1H
666
+ pmaddwd mm1, [GOTOFF(ebx,PW_MF256_F050)] ; mm1=tmp2L
667
+ pmaddwd mm6, [GOTOFF(ebx,PW_MF256_F050)] ; mm6=tmp2H
668
+
669
+ paddd mm2, mm5 ; mm2=tmp1L
670
+ paddd mm0, mm7 ; mm0=tmp1H
671
+ paddd mm1, MMWORD [wk(10)] ; mm1=tmp2L
672
+ paddd mm6, MMWORD [wk(11)] ; mm6=tmp2H
673
+
674
+ movq MMWORD [wk(10)], mm2 ; wk(10)=tmp1L
675
+ movq MMWORD [wk(11)], mm0 ; wk(11)=tmp1H
676
+
677
+ ; -- Final output stage
678
+
679
+ movq mm5, MMWORD [wk(0)] ; mm5=tmp10L
680
+ movq mm7, MMWORD [wk(1)] ; mm7=tmp10H
681
+
682
+ movq mm2, mm5
683
+ movq mm0, mm7
684
+ paddd mm5, mm3 ; mm5=data0L
685
+ paddd mm7, mm4 ; mm7=data0H
686
+ psubd mm2, mm3 ; mm2=data7L
687
+ psubd mm0, mm4 ; mm0=data7H
688
+
689
+ movq mm3, [GOTOFF(ebx,PD_DESCALE_P2)] ; mm3=[PD_DESCALE_P2]
690
+
691
+ paddd mm5, mm3
692
+ paddd mm7, mm3
693
+ psrad mm5, DESCALE_P2
694
+ psrad mm7, DESCALE_P2
695
+ paddd mm2, mm3
696
+ paddd mm0, mm3
697
+ psrad mm2, DESCALE_P2
698
+ psrad mm0, DESCALE_P2
699
+
700
+ packssdw mm5, mm7 ; mm5=data0=(00 10 20 30)
701
+ packssdw mm2, mm0 ; mm2=data7=(07 17 27 37)
702
+
703
+ movq mm4, MMWORD [wk(4)] ; mm4=tmp11L
704
+ movq mm3, MMWORD [wk(5)] ; mm3=tmp11H
705
+
706
+ movq mm7, mm4
707
+ movq mm0, mm3
708
+ paddd mm4, mm1 ; mm4=data1L
709
+ paddd mm3, mm6 ; mm3=data1H
710
+ psubd mm7, mm1 ; mm7=data6L
711
+ psubd mm0, mm6 ; mm0=data6H
712
+
713
+ movq mm1, [GOTOFF(ebx,PD_DESCALE_P2)] ; mm1=[PD_DESCALE_P2]
714
+
715
+ paddd mm4, mm1
716
+ paddd mm3, mm1
717
+ psrad mm4, DESCALE_P2
718
+ psrad mm3, DESCALE_P2
719
+ paddd mm7, mm1
720
+ paddd mm0, mm1
721
+ psrad mm7, DESCALE_P2
722
+ psrad mm0, DESCALE_P2
723
+
724
+ packssdw mm4, mm3 ; mm4=data1=(01 11 21 31)
725
+ packssdw mm7, mm0 ; mm7=data6=(06 16 26 36)
726
+
727
+ packsswb mm5, mm7 ; mm5=(00 10 20 30 06 16 26 36)
728
+ packsswb mm4, mm2 ; mm4=(01 11 21 31 07 17 27 37)
729
+
730
+ movq mm6, MMWORD [wk(6)] ; mm6=tmp12L
731
+ movq mm1, MMWORD [wk(7)] ; mm1=tmp12H
732
+ movq mm3, MMWORD [wk(10)] ; mm3=tmp1L
733
+ movq mm0, MMWORD [wk(11)] ; mm0=tmp1H
734
+
735
+ movq MMWORD [wk(0)], mm5 ; wk(0)=(00 10 20 30 06 16 26 36)
736
+ movq MMWORD [wk(1)], mm4 ; wk(1)=(01 11 21 31 07 17 27 37)
737
+
738
+ movq mm7, mm6
739
+ movq mm2, mm1
740
+ paddd mm6, mm3 ; mm6=data2L
741
+ paddd mm1, mm0 ; mm1=data2H
742
+ psubd mm7, mm3 ; mm7=data5L
743
+ psubd mm2, mm0 ; mm2=data5H
744
+
745
+ movq mm5, [GOTOFF(ebx,PD_DESCALE_P2)] ; mm5=[PD_DESCALE_P2]
746
+
747
+ paddd mm6, mm5
748
+ paddd mm1, mm5
749
+ psrad mm6, DESCALE_P2
750
+ psrad mm1, DESCALE_P2
751
+ paddd mm7, mm5
752
+ paddd mm2, mm5
753
+ psrad mm7, DESCALE_P2
754
+ psrad mm2, DESCALE_P2
755
+
756
+ packssdw mm6, mm1 ; mm6=data2=(02 12 22 32)
757
+ packssdw mm7, mm2 ; mm7=data5=(05 15 25 35)
758
+
759
+ movq mm4, MMWORD [wk(2)] ; mm4=tmp13L
760
+ movq mm3, MMWORD [wk(3)] ; mm3=tmp13H
761
+ movq mm0, MMWORD [wk(8)] ; mm0=tmp0L
762
+ movq mm5, MMWORD [wk(9)] ; mm5=tmp0H
763
+
764
+ movq mm1, mm4
765
+ movq mm2, mm3
766
+ paddd mm4, mm0 ; mm4=data3L
767
+ paddd mm3, mm5 ; mm3=data3H
768
+ psubd mm1, mm0 ; mm1=data4L
769
+ psubd mm2, mm5 ; mm2=data4H
770
+
771
+ movq mm0, [GOTOFF(ebx,PD_DESCALE_P2)] ; mm0=[PD_DESCALE_P2]
772
+
773
+ paddd mm4, mm0
774
+ paddd mm3, mm0
775
+ psrad mm4, DESCALE_P2
776
+ psrad mm3, DESCALE_P2
777
+ paddd mm1, mm0
778
+ paddd mm2, mm0
779
+ psrad mm1, DESCALE_P2
780
+ psrad mm2, DESCALE_P2
781
+
782
+ movq mm5, [GOTOFF(ebx,PB_CENTERJSAMP)] ; mm5=[PB_CENTERJSAMP]
783
+
784
+ packssdw mm4, mm3 ; mm4=data3=(03 13 23 33)
785
+ packssdw mm1, mm2 ; mm1=data4=(04 14 24 34)
786
+
787
+ movq mm0, MMWORD [wk(0)] ; mm0=(00 10 20 30 06 16 26 36)
788
+ movq mm3, MMWORD [wk(1)] ; mm3=(01 11 21 31 07 17 27 37)
789
+
790
+ packsswb mm6, mm1 ; mm6=(02 12 22 32 04 14 24 34)
791
+ packsswb mm4, mm7 ; mm4=(03 13 23 33 05 15 25 35)
792
+
793
+ paddb mm0, mm5
794
+ paddb mm3, mm5
795
+ paddb mm6, mm5
796
+ paddb mm4, mm5
797
+
798
+ movq mm2, mm0 ; transpose coefficients(phase 1)
799
+ punpcklbw mm0, mm3 ; mm0=(00 01 10 11 20 21 30 31)
800
+ punpckhbw mm2, mm3 ; mm2=(06 07 16 17 26 27 36 37)
801
+ movq mm1, mm6 ; transpose coefficients(phase 1)
802
+ punpcklbw mm6, mm4 ; mm6=(02 03 12 13 22 23 32 33)
803
+ punpckhbw mm1, mm4 ; mm1=(04 05 14 15 24 25 34 35)
804
+
805
+ movq mm7, mm0 ; transpose coefficients(phase 2)
806
+ punpcklwd mm0, mm6 ; mm0=(00 01 02 03 10 11 12 13)
807
+ punpckhwd mm7, mm6 ; mm7=(20 21 22 23 30 31 32 33)
808
+ movq mm5, mm1 ; transpose coefficients(phase 2)
809
+ punpcklwd mm1, mm2 ; mm1=(04 05 06 07 14 15 16 17)
810
+ punpckhwd mm5, mm2 ; mm5=(24 25 26 27 34 35 36 37)
811
+
812
+ movq mm3, mm0 ; transpose coefficients(phase 3)
813
+ punpckldq mm0, mm1 ; mm0=(00 01 02 03 04 05 06 07)
814
+ punpckhdq mm3, mm1 ; mm3=(10 11 12 13 14 15 16 17)
815
+ movq mm4, mm7 ; transpose coefficients(phase 3)
816
+ punpckldq mm7, mm5 ; mm7=(20 21 22 23 24 25 26 27)
817
+ punpckhdq mm4, mm5 ; mm4=(30 31 32 33 34 35 36 37)
818
+
819
+ pushpic ebx ; save GOT address
820
+
821
+ mov edx, JSAMPROW [edi+0*SIZEOF_JSAMPROW]
822
+ mov ebx, JSAMPROW [edi+1*SIZEOF_JSAMPROW]
823
+ movq MMWORD [edx+eax*SIZEOF_JSAMPLE], mm0
824
+ movq MMWORD [ebx+eax*SIZEOF_JSAMPLE], mm3
825
+ mov edx, JSAMPROW [edi+2*SIZEOF_JSAMPROW]
826
+ mov ebx, JSAMPROW [edi+3*SIZEOF_JSAMPROW]
827
+ movq MMWORD [edx+eax*SIZEOF_JSAMPLE], mm7
828
+ movq MMWORD [ebx+eax*SIZEOF_JSAMPLE], mm4
829
+
830
+ poppic ebx ; restore GOT address
831
+
832
+ add esi, byte 4*SIZEOF_JCOEF ; wsptr
833
+ add edi, byte 4*SIZEOF_JSAMPROW
834
+ dec ecx ; ctr
835
+ jnz near .rowloop
836
+
837
+ emms ; empty MMX state
838
+
839
+ pop edi
840
+ pop esi
841
+ ; pop edx ; need not be preserved
842
+ ; pop ecx ; need not be preserved
843
+ pop ebx
844
+ mov esp, ebp ; esp <- aligned ebp
845
+ pop esp ; esp <- original ebp
846
+ pop ebp
847
+ ret
848
+
849
+ ; For some reason, the OS X linker does not honor the request to align the
850
+ ; segment unless we do this.
851
+ align 32