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,704 @@
1
+ ;
2
+ ; jidctred.asm - reduced-size 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 inverse-DCT routines that produce reduced-size
18
+ ; output: either 4x4 or 2x2 pixels from an 8x8 DCT block.
19
+ ; The following code is based directly on the IJG's original jidctred.c;
20
+ ; see the jidctred.c for 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_4 (CONST_BITS - PASS1_BITS + 1)
31
+ %define DESCALE_P2_4 (CONST_BITS + PASS1_BITS + 3 + 1)
32
+ %define DESCALE_P1_2 (CONST_BITS - PASS1_BITS + 2)
33
+ %define DESCALE_P2_2 (CONST_BITS + PASS1_BITS + 3 + 2)
34
+
35
+ %if CONST_BITS == 13
36
+ F_0_211 equ 1730 ; FIX(0.211164243)
37
+ F_0_509 equ 4176 ; FIX(0.509795579)
38
+ F_0_601 equ 4926 ; FIX(0.601344887)
39
+ F_0_720 equ 5906 ; FIX(0.720959822)
40
+ F_0_765 equ 6270 ; FIX(0.765366865)
41
+ F_0_850 equ 6967 ; FIX(0.850430095)
42
+ F_0_899 equ 7373 ; FIX(0.899976223)
43
+ F_1_061 equ 8697 ; FIX(1.061594337)
44
+ F_1_272 equ 10426 ; FIX(1.272758580)
45
+ F_1_451 equ 11893 ; FIX(1.451774981)
46
+ F_1_847 equ 15137 ; FIX(1.847759065)
47
+ F_2_172 equ 17799 ; FIX(2.172734803)
48
+ F_2_562 equ 20995 ; FIX(2.562915447)
49
+ F_3_624 equ 29692 ; FIX(3.624509785)
50
+ %else
51
+ ; NASM cannot do compile-time arithmetic on floating-point constants.
52
+ %define DESCALE(x, n) (((x) + (1 << ((n) - 1))) >> (n))
53
+ F_0_211 equ DESCALE( 226735879, 30 - CONST_BITS) ; FIX(0.211164243)
54
+ F_0_509 equ DESCALE( 547388834, 30 - CONST_BITS) ; FIX(0.509795579)
55
+ F_0_601 equ DESCALE( 645689155, 30 - CONST_BITS) ; FIX(0.601344887)
56
+ F_0_720 equ DESCALE( 774124714, 30 - CONST_BITS) ; FIX(0.720959822)
57
+ F_0_765 equ DESCALE( 821806413, 30 - CONST_BITS) ; FIX(0.765366865)
58
+ F_0_850 equ DESCALE( 913142361, 30 - CONST_BITS) ; FIX(0.850430095)
59
+ F_0_899 equ DESCALE( 966342111, 30 - CONST_BITS) ; FIX(0.899976223)
60
+ F_1_061 equ DESCALE(1139878239, 30 - CONST_BITS) ; FIX(1.061594337)
61
+ F_1_272 equ DESCALE(1366614119, 30 - CONST_BITS) ; FIX(1.272758580)
62
+ F_1_451 equ DESCALE(1558831516, 30 - CONST_BITS) ; FIX(1.451774981)
63
+ F_1_847 equ DESCALE(1984016188, 30 - CONST_BITS) ; FIX(1.847759065)
64
+ F_2_172 equ DESCALE(2332956230, 30 - CONST_BITS) ; FIX(2.172734803)
65
+ F_2_562 equ DESCALE(2751909506, 30 - CONST_BITS) ; FIX(2.562915447)
66
+ F_3_624 equ DESCALE(3891787747, 30 - CONST_BITS) ; FIX(3.624509785)
67
+ %endif
68
+
69
+ ; --------------------------------------------------------------------------
70
+ SECTION SEG_CONST
71
+
72
+ alignz 32
73
+ GLOBAL_DATA(jconst_idct_red_mmx)
74
+
75
+ EXTN(jconst_idct_red_mmx):
76
+
77
+ PW_F184_MF076 times 2 dw F_1_847, -F_0_765
78
+ PW_F256_F089 times 2 dw F_2_562, F_0_899
79
+ PW_F106_MF217 times 2 dw F_1_061, -F_2_172
80
+ PW_MF060_MF050 times 2 dw -F_0_601, -F_0_509
81
+ PW_F145_MF021 times 2 dw F_1_451, -F_0_211
82
+ PW_F362_MF127 times 2 dw F_3_624, -F_1_272
83
+ PW_F085_MF072 times 2 dw F_0_850, -F_0_720
84
+ PD_DESCALE_P1_4 times 2 dd 1 << (DESCALE_P1_4 - 1)
85
+ PD_DESCALE_P2_4 times 2 dd 1 << (DESCALE_P2_4 - 1)
86
+ PD_DESCALE_P1_2 times 2 dd 1 << (DESCALE_P1_2 - 1)
87
+ PD_DESCALE_P2_2 times 2 dd 1 << (DESCALE_P2_2 - 1)
88
+ PB_CENTERJSAMP times 8 db CENTERJSAMPLE
89
+
90
+ alignz 32
91
+
92
+ ; --------------------------------------------------------------------------
93
+ SECTION SEG_TEXT
94
+ BITS 32
95
+ ;
96
+ ; Perform dequantization and inverse DCT on one block of coefficients,
97
+ ; producing a reduced-size 4x4 output block.
98
+ ;
99
+ ; GLOBAL(void)
100
+ ; jsimd_idct_4x4_mmx(void *dct_table, JCOEFPTR coef_block,
101
+ ; JSAMPARRAY output_buf, JDIMENSION output_col)
102
+ ;
103
+
104
+ %define dct_table(b) (b) + 8 ; void *dct_table
105
+ %define coef_block(b) (b) + 12 ; JCOEFPTR coef_block
106
+ %define output_buf(b) (b) + 16 ; JSAMPARRAY output_buf
107
+ %define output_col(b) (b) + 20 ; JDIMENSION output_col
108
+
109
+ %define original_ebp ebp + 0
110
+ %define wk(i) ebp - (WK_NUM - (i)) * SIZEOF_MMWORD
111
+ ; mmword wk[WK_NUM]
112
+ %define WK_NUM 2
113
+ %define workspace wk(0) - DCTSIZE2 * SIZEOF_JCOEF
114
+ ; JCOEF workspace[DCTSIZE2]
115
+
116
+ align 32
117
+ GLOBAL_FUNCTION(jsimd_idct_4x4_mmx)
118
+
119
+ EXTN(jsimd_idct_4x4_mmx):
120
+ push ebp
121
+ mov eax, esp ; eax = original ebp
122
+ sub esp, byte 4
123
+ and esp, byte (-SIZEOF_MMWORD) ; align to 64 bits
124
+ mov [esp], eax
125
+ mov ebp, esp ; ebp = aligned ebp
126
+ lea esp, [workspace]
127
+ pushpic ebx
128
+ ; push ecx ; need not be preserved
129
+ ; push edx ; need not be preserved
130
+ push esi
131
+ push edi
132
+
133
+ get_GOT ebx ; get GOT address
134
+
135
+ ; ---- Pass 1: process columns from input, store into work array.
136
+
137
+ ; mov eax, [original_ebp]
138
+ mov edx, POINTER [dct_table(eax)] ; quantptr
139
+ mov esi, JCOEFPTR [coef_block(eax)] ; inptr
140
+ lea edi, [workspace] ; JCOEF *wsptr
141
+ mov ecx, DCTSIZE/4 ; ctr
142
+ alignx 16, 7
143
+ .columnloop:
144
+ %ifndef NO_ZERO_COLUMN_TEST_4X4_MMX
145
+ mov eax, dword [DWBLOCK(1,0,esi,SIZEOF_JCOEF)]
146
+ or eax, dword [DWBLOCK(2,0,esi,SIZEOF_JCOEF)]
147
+ jnz short .columnDCT
148
+
149
+ movq mm0, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
150
+ movq mm1, MMWORD [MMBLOCK(2,0,esi,SIZEOF_JCOEF)]
151
+ por mm0, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
152
+ por mm1, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
153
+ por mm0, MMWORD [MMBLOCK(6,0,esi,SIZEOF_JCOEF)]
154
+ por mm1, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]
155
+ por mm0, mm1
156
+ packsswb mm0, mm0
157
+ movd eax, mm0
158
+ test eax, eax
159
+ jnz short .columnDCT
160
+
161
+ ; -- AC terms all zero
162
+
163
+ movq mm0, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
164
+ pmullw mm0, MMWORD [MMBLOCK(0,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
165
+
166
+ psllw mm0, PASS1_BITS
167
+
168
+ movq mm2, mm0 ; mm0=in0=(00 01 02 03)
169
+ punpcklwd mm0, mm0 ; mm0=(00 00 01 01)
170
+ punpckhwd mm2, mm2 ; mm2=(02 02 03 03)
171
+
172
+ movq mm1, mm0
173
+ punpckldq mm0, mm0 ; mm0=(00 00 00 00)
174
+ punpckhdq mm1, mm1 ; mm1=(01 01 01 01)
175
+ movq mm3, mm2
176
+ punpckldq mm2, mm2 ; mm2=(02 02 02 02)
177
+ punpckhdq mm3, mm3 ; mm3=(03 03 03 03)
178
+
179
+ movq MMWORD [MMBLOCK(0,0,edi,SIZEOF_JCOEF)], mm0
180
+ movq MMWORD [MMBLOCK(1,0,edi,SIZEOF_JCOEF)], mm1
181
+ movq MMWORD [MMBLOCK(2,0,edi,SIZEOF_JCOEF)], mm2
182
+ movq MMWORD [MMBLOCK(3,0,edi,SIZEOF_JCOEF)], mm3
183
+ jmp near .nextcolumn
184
+ alignx 16, 7
185
+ %endif
186
+ .columnDCT:
187
+
188
+ ; -- Odd part
189
+
190
+ movq mm0, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
191
+ movq mm1, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
192
+ pmullw mm0, MMWORD [MMBLOCK(1,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
193
+ pmullw mm1, MMWORD [MMBLOCK(3,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
194
+ movq mm2, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
195
+ movq mm3, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]
196
+ pmullw mm2, MMWORD [MMBLOCK(5,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
197
+ pmullw mm3, MMWORD [MMBLOCK(7,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
198
+
199
+ movq mm4, mm0
200
+ movq mm5, mm0
201
+ punpcklwd mm4, mm1
202
+ punpckhwd mm5, mm1
203
+ movq mm0, mm4
204
+ movq mm1, mm5
205
+ pmaddwd mm4, [GOTOFF(ebx,PW_F256_F089)] ; mm4=(tmp2L)
206
+ pmaddwd mm5, [GOTOFF(ebx,PW_F256_F089)] ; mm5=(tmp2H)
207
+ pmaddwd mm0, [GOTOFF(ebx,PW_F106_MF217)] ; mm0=(tmp0L)
208
+ pmaddwd mm1, [GOTOFF(ebx,PW_F106_MF217)] ; mm1=(tmp0H)
209
+
210
+ movq mm6, mm2
211
+ movq mm7, mm2
212
+ punpcklwd mm6, mm3
213
+ punpckhwd mm7, mm3
214
+ movq mm2, mm6
215
+ movq mm3, mm7
216
+ pmaddwd mm6, [GOTOFF(ebx,PW_MF060_MF050)] ; mm6=(tmp2L)
217
+ pmaddwd mm7, [GOTOFF(ebx,PW_MF060_MF050)] ; mm7=(tmp2H)
218
+ pmaddwd mm2, [GOTOFF(ebx,PW_F145_MF021)] ; mm2=(tmp0L)
219
+ pmaddwd mm3, [GOTOFF(ebx,PW_F145_MF021)] ; mm3=(tmp0H)
220
+
221
+ paddd mm6, mm4 ; mm6=tmp2L
222
+ paddd mm7, mm5 ; mm7=tmp2H
223
+ paddd mm2, mm0 ; mm2=tmp0L
224
+ paddd mm3, mm1 ; mm3=tmp0H
225
+
226
+ movq MMWORD [wk(0)], mm2 ; wk(0)=tmp0L
227
+ movq MMWORD [wk(1)], mm3 ; wk(1)=tmp0H
228
+
229
+ ; -- Even part
230
+
231
+ movq mm4, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
232
+ movq mm5, MMWORD [MMBLOCK(2,0,esi,SIZEOF_JCOEF)]
233
+ movq mm0, MMWORD [MMBLOCK(6,0,esi,SIZEOF_JCOEF)]
234
+ pmullw mm4, MMWORD [MMBLOCK(0,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
235
+ pmullw mm5, MMWORD [MMBLOCK(2,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
236
+ pmullw mm0, MMWORD [MMBLOCK(6,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
237
+
238
+ pxor mm1, mm1
239
+ pxor mm2, mm2
240
+ punpcklwd mm1, mm4 ; mm1=tmp0L
241
+ punpckhwd mm2, mm4 ; mm2=tmp0H
242
+ psrad mm1, (16-CONST_BITS-1) ; psrad mm1,16 & pslld mm1,CONST_BITS+1
243
+ psrad mm2, (16-CONST_BITS-1) ; psrad mm2,16 & pslld mm2,CONST_BITS+1
244
+
245
+ movq mm3, mm5 ; mm5=in2=z2
246
+ punpcklwd mm5, mm0 ; mm0=in6=z3
247
+ punpckhwd mm3, mm0
248
+ pmaddwd mm5, [GOTOFF(ebx,PW_F184_MF076)] ; mm5=tmp2L
249
+ pmaddwd mm3, [GOTOFF(ebx,PW_F184_MF076)] ; mm3=tmp2H
250
+
251
+ movq mm4, mm1
252
+ movq mm0, mm2
253
+ paddd mm1, mm5 ; mm1=tmp10L
254
+ paddd mm2, mm3 ; mm2=tmp10H
255
+ psubd mm4, mm5 ; mm4=tmp12L
256
+ psubd mm0, mm3 ; mm0=tmp12H
257
+
258
+ ; -- Final output stage
259
+
260
+ movq mm5, mm1
261
+ movq mm3, mm2
262
+ paddd mm1, mm6 ; mm1=data0L
263
+ paddd mm2, mm7 ; mm2=data0H
264
+ psubd mm5, mm6 ; mm5=data3L
265
+ psubd mm3, mm7 ; mm3=data3H
266
+
267
+ movq mm6, [GOTOFF(ebx,PD_DESCALE_P1_4)] ; mm6=[PD_DESCALE_P1_4]
268
+
269
+ paddd mm1, mm6
270
+ paddd mm2, mm6
271
+ psrad mm1, DESCALE_P1_4
272
+ psrad mm2, DESCALE_P1_4
273
+ paddd mm5, mm6
274
+ paddd mm3, mm6
275
+ psrad mm5, DESCALE_P1_4
276
+ psrad mm3, DESCALE_P1_4
277
+
278
+ packssdw mm1, mm2 ; mm1=data0=(00 01 02 03)
279
+ packssdw mm5, mm3 ; mm5=data3=(30 31 32 33)
280
+
281
+ movq mm7, MMWORD [wk(0)] ; mm7=tmp0L
282
+ movq mm6, MMWORD [wk(1)] ; mm6=tmp0H
283
+
284
+ movq mm2, mm4
285
+ movq mm3, mm0
286
+ paddd mm4, mm7 ; mm4=data1L
287
+ paddd mm0, mm6 ; mm0=data1H
288
+ psubd mm2, mm7 ; mm2=data2L
289
+ psubd mm3, mm6 ; mm3=data2H
290
+
291
+ movq mm7, [GOTOFF(ebx,PD_DESCALE_P1_4)] ; mm7=[PD_DESCALE_P1_4]
292
+
293
+ paddd mm4, mm7
294
+ paddd mm0, mm7
295
+ psrad mm4, DESCALE_P1_4
296
+ psrad mm0, DESCALE_P1_4
297
+ paddd mm2, mm7
298
+ paddd mm3, mm7
299
+ psrad mm2, DESCALE_P1_4
300
+ psrad mm3, DESCALE_P1_4
301
+
302
+ packssdw mm4, mm0 ; mm4=data1=(10 11 12 13)
303
+ packssdw mm2, mm3 ; mm2=data2=(20 21 22 23)
304
+
305
+ movq mm6, mm1 ; transpose coefficients(phase 1)
306
+ punpcklwd mm1, mm4 ; mm1=(00 10 01 11)
307
+ punpckhwd mm6, mm4 ; mm6=(02 12 03 13)
308
+ movq mm7, mm2 ; transpose coefficients(phase 1)
309
+ punpcklwd mm2, mm5 ; mm2=(20 30 21 31)
310
+ punpckhwd mm7, mm5 ; mm7=(22 32 23 33)
311
+
312
+ movq mm0, mm1 ; transpose coefficients(phase 2)
313
+ punpckldq mm1, mm2 ; mm1=(00 10 20 30)
314
+ punpckhdq mm0, mm2 ; mm0=(01 11 21 31)
315
+ movq mm3, mm6 ; transpose coefficients(phase 2)
316
+ punpckldq mm6, mm7 ; mm6=(02 12 22 32)
317
+ punpckhdq mm3, mm7 ; mm3=(03 13 23 33)
318
+
319
+ movq MMWORD [MMBLOCK(0,0,edi,SIZEOF_JCOEF)], mm1
320
+ movq MMWORD [MMBLOCK(1,0,edi,SIZEOF_JCOEF)], mm0
321
+ movq MMWORD [MMBLOCK(2,0,edi,SIZEOF_JCOEF)], mm6
322
+ movq MMWORD [MMBLOCK(3,0,edi,SIZEOF_JCOEF)], mm3
323
+
324
+ .nextcolumn:
325
+ add esi, byte 4*SIZEOF_JCOEF ; coef_block
326
+ add edx, byte 4*SIZEOF_ISLOW_MULT_TYPE ; quantptr
327
+ add edi, byte 4*DCTSIZE*SIZEOF_JCOEF ; wsptr
328
+ dec ecx ; ctr
329
+ jnz near .columnloop
330
+
331
+ ; ---- Pass 2: process rows from work array, store into output array.
332
+
333
+ mov eax, [original_ebp]
334
+ lea esi, [workspace] ; JCOEF *wsptr
335
+ mov edi, JSAMPARRAY [output_buf(eax)] ; (JSAMPROW *)
336
+ mov eax, JDIMENSION [output_col(eax)]
337
+
338
+ ; -- Odd part
339
+
340
+ movq mm0, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
341
+ movq mm1, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
342
+ movq mm2, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
343
+ movq mm3, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]
344
+
345
+ movq mm4, mm0
346
+ movq mm5, mm0
347
+ punpcklwd mm4, mm1
348
+ punpckhwd mm5, mm1
349
+ movq mm0, mm4
350
+ movq mm1, mm5
351
+ pmaddwd mm4, [GOTOFF(ebx,PW_F256_F089)] ; mm4=(tmp2L)
352
+ pmaddwd mm5, [GOTOFF(ebx,PW_F256_F089)] ; mm5=(tmp2H)
353
+ pmaddwd mm0, [GOTOFF(ebx,PW_F106_MF217)] ; mm0=(tmp0L)
354
+ pmaddwd mm1, [GOTOFF(ebx,PW_F106_MF217)] ; mm1=(tmp0H)
355
+
356
+ movq mm6, mm2
357
+ movq mm7, mm2
358
+ punpcklwd mm6, mm3
359
+ punpckhwd mm7, mm3
360
+ movq mm2, mm6
361
+ movq mm3, mm7
362
+ pmaddwd mm6, [GOTOFF(ebx,PW_MF060_MF050)] ; mm6=(tmp2L)
363
+ pmaddwd mm7, [GOTOFF(ebx,PW_MF060_MF050)] ; mm7=(tmp2H)
364
+ pmaddwd mm2, [GOTOFF(ebx,PW_F145_MF021)] ; mm2=(tmp0L)
365
+ pmaddwd mm3, [GOTOFF(ebx,PW_F145_MF021)] ; mm3=(tmp0H)
366
+
367
+ paddd mm6, mm4 ; mm6=tmp2L
368
+ paddd mm7, mm5 ; mm7=tmp2H
369
+ paddd mm2, mm0 ; mm2=tmp0L
370
+ paddd mm3, mm1 ; mm3=tmp0H
371
+
372
+ movq MMWORD [wk(0)], mm2 ; wk(0)=tmp0L
373
+ movq MMWORD [wk(1)], mm3 ; wk(1)=tmp0H
374
+
375
+ ; -- Even part
376
+
377
+ movq mm4, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
378
+ movq mm5, MMWORD [MMBLOCK(2,0,esi,SIZEOF_JCOEF)]
379
+ movq mm0, MMWORD [MMBLOCK(6,0,esi,SIZEOF_JCOEF)]
380
+
381
+ pxor mm1, mm1
382
+ pxor mm2, mm2
383
+ punpcklwd mm1, mm4 ; mm1=tmp0L
384
+ punpckhwd mm2, mm4 ; mm2=tmp0H
385
+ psrad mm1, (16-CONST_BITS-1) ; psrad mm1,16 & pslld mm1,CONST_BITS+1
386
+ psrad mm2, (16-CONST_BITS-1) ; psrad mm2,16 & pslld mm2,CONST_BITS+1
387
+
388
+ movq mm3, mm5 ; mm5=in2=z2
389
+ punpcklwd mm5, mm0 ; mm0=in6=z3
390
+ punpckhwd mm3, mm0
391
+ pmaddwd mm5, [GOTOFF(ebx,PW_F184_MF076)] ; mm5=tmp2L
392
+ pmaddwd mm3, [GOTOFF(ebx,PW_F184_MF076)] ; mm3=tmp2H
393
+
394
+ movq mm4, mm1
395
+ movq mm0, mm2
396
+ paddd mm1, mm5 ; mm1=tmp10L
397
+ paddd mm2, mm3 ; mm2=tmp10H
398
+ psubd mm4, mm5 ; mm4=tmp12L
399
+ psubd mm0, mm3 ; mm0=tmp12H
400
+
401
+ ; -- Final output stage
402
+
403
+ movq mm5, mm1
404
+ movq mm3, mm2
405
+ paddd mm1, mm6 ; mm1=data0L
406
+ paddd mm2, mm7 ; mm2=data0H
407
+ psubd mm5, mm6 ; mm5=data3L
408
+ psubd mm3, mm7 ; mm3=data3H
409
+
410
+ movq mm6, [GOTOFF(ebx,PD_DESCALE_P2_4)] ; mm6=[PD_DESCALE_P2_4]
411
+
412
+ paddd mm1, mm6
413
+ paddd mm2, mm6
414
+ psrad mm1, DESCALE_P2_4
415
+ psrad mm2, DESCALE_P2_4
416
+ paddd mm5, mm6
417
+ paddd mm3, mm6
418
+ psrad mm5, DESCALE_P2_4
419
+ psrad mm3, DESCALE_P2_4
420
+
421
+ packssdw mm1, mm2 ; mm1=data0=(00 10 20 30)
422
+ packssdw mm5, mm3 ; mm5=data3=(03 13 23 33)
423
+
424
+ movq mm7, MMWORD [wk(0)] ; mm7=tmp0L
425
+ movq mm6, MMWORD [wk(1)] ; mm6=tmp0H
426
+
427
+ movq mm2, mm4
428
+ movq mm3, mm0
429
+ paddd mm4, mm7 ; mm4=data1L
430
+ paddd mm0, mm6 ; mm0=data1H
431
+ psubd mm2, mm7 ; mm2=data2L
432
+ psubd mm3, mm6 ; mm3=data2H
433
+
434
+ movq mm7, [GOTOFF(ebx,PD_DESCALE_P2_4)] ; mm7=[PD_DESCALE_P2_4]
435
+
436
+ paddd mm4, mm7
437
+ paddd mm0, mm7
438
+ psrad mm4, DESCALE_P2_4
439
+ psrad mm0, DESCALE_P2_4
440
+ paddd mm2, mm7
441
+ paddd mm3, mm7
442
+ psrad mm2, DESCALE_P2_4
443
+ psrad mm3, DESCALE_P2_4
444
+
445
+ packssdw mm4, mm0 ; mm4=data1=(01 11 21 31)
446
+ packssdw mm2, mm3 ; mm2=data2=(02 12 22 32)
447
+
448
+ movq mm6, [GOTOFF(ebx,PB_CENTERJSAMP)] ; mm6=[PB_CENTERJSAMP]
449
+
450
+ packsswb mm1, mm2 ; mm1=(00 10 20 30 02 12 22 32)
451
+ packsswb mm4, mm5 ; mm4=(01 11 21 31 03 13 23 33)
452
+ paddb mm1, mm6
453
+ paddb mm4, mm6
454
+
455
+ movq mm7, mm1 ; transpose coefficients(phase 1)
456
+ punpcklbw mm1, mm4 ; mm1=(00 01 10 11 20 21 30 31)
457
+ punpckhbw mm7, mm4 ; mm7=(02 03 12 13 22 23 32 33)
458
+
459
+ movq mm0, mm1 ; transpose coefficients(phase 2)
460
+ punpcklwd mm1, mm7 ; mm1=(00 01 02 03 10 11 12 13)
461
+ punpckhwd mm0, mm7 ; mm0=(20 21 22 23 30 31 32 33)
462
+
463
+ mov edx, JSAMPROW [edi+0*SIZEOF_JSAMPROW]
464
+ mov esi, JSAMPROW [edi+2*SIZEOF_JSAMPROW]
465
+ movd dword [edx+eax*SIZEOF_JSAMPLE], mm1
466
+ movd dword [esi+eax*SIZEOF_JSAMPLE], mm0
467
+
468
+ psrlq mm1, 4*BYTE_BIT
469
+ psrlq mm0, 4*BYTE_BIT
470
+
471
+ mov edx, JSAMPROW [edi+1*SIZEOF_JSAMPROW]
472
+ mov esi, JSAMPROW [edi+3*SIZEOF_JSAMPROW]
473
+ movd dword [edx+eax*SIZEOF_JSAMPLE], mm1
474
+ movd dword [esi+eax*SIZEOF_JSAMPLE], mm0
475
+
476
+ emms ; empty MMX state
477
+
478
+ pop edi
479
+ pop esi
480
+ ; pop edx ; need not be preserved
481
+ ; pop ecx ; need not be preserved
482
+ poppic ebx
483
+ mov esp, ebp ; esp <- aligned ebp
484
+ pop esp ; esp <- original ebp
485
+ pop ebp
486
+ ret
487
+
488
+ ; --------------------------------------------------------------------------
489
+ ;
490
+ ; Perform dequantization and inverse DCT on one block of coefficients,
491
+ ; producing a reduced-size 2x2 output block.
492
+ ;
493
+ ; GLOBAL(void)
494
+ ; jsimd_idct_2x2_mmx(void *dct_table, JCOEFPTR coef_block,
495
+ ; JSAMPARRAY output_buf, JDIMENSION output_col)
496
+ ;
497
+
498
+ %define dct_table(b) (b) + 8 ; void *dct_table
499
+ %define coef_block(b) (b) + 12 ; JCOEFPTR coef_block
500
+ %define output_buf(b) (b) + 16 ; JSAMPARRAY output_buf
501
+ %define output_col(b) (b) + 20 ; JDIMENSION output_col
502
+
503
+ align 32
504
+ GLOBAL_FUNCTION(jsimd_idct_2x2_mmx)
505
+
506
+ EXTN(jsimd_idct_2x2_mmx):
507
+ push ebp
508
+ mov ebp, esp
509
+ push ebx
510
+ ; push ecx ; need not be preserved
511
+ ; push edx ; need not be preserved
512
+ push esi
513
+ push edi
514
+
515
+ get_GOT ebx ; get GOT address
516
+
517
+ ; ---- Pass 1: process columns from input.
518
+
519
+ mov edx, POINTER [dct_table(ebp)] ; quantptr
520
+ mov esi, JCOEFPTR [coef_block(ebp)] ; inptr
521
+
522
+ ; | input: | result: |
523
+ ; | 00 01 ** 03 ** 05 ** 07 | |
524
+ ; | 10 11 ** 13 ** 15 ** 17 | |
525
+ ; | ** ** ** ** ** ** ** ** | |
526
+ ; | 30 31 ** 33 ** 35 ** 37 | A0 A1 A3 A5 A7 |
527
+ ; | ** ** ** ** ** ** ** ** | B0 B1 B3 B5 B7 |
528
+ ; | 50 51 ** 53 ** 55 ** 57 | |
529
+ ; | ** ** ** ** ** ** ** ** | |
530
+ ; | 70 71 ** 73 ** 75 ** 77 | |
531
+
532
+ ; -- Odd part
533
+
534
+ movq mm0, MMWORD [MMBLOCK(1,0,esi,SIZEOF_JCOEF)]
535
+ movq mm1, MMWORD [MMBLOCK(3,0,esi,SIZEOF_JCOEF)]
536
+ pmullw mm0, MMWORD [MMBLOCK(1,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
537
+ pmullw mm1, MMWORD [MMBLOCK(3,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
538
+ movq mm2, MMWORD [MMBLOCK(5,0,esi,SIZEOF_JCOEF)]
539
+ movq mm3, MMWORD [MMBLOCK(7,0,esi,SIZEOF_JCOEF)]
540
+ pmullw mm2, MMWORD [MMBLOCK(5,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
541
+ pmullw mm3, MMWORD [MMBLOCK(7,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
542
+
543
+ ; mm0=(10 11 ** 13), mm1=(30 31 ** 33)
544
+ ; mm2=(50 51 ** 53), mm3=(70 71 ** 73)
545
+
546
+ pcmpeqd mm7, mm7
547
+ pslld mm7, WORD_BIT ; mm7={0x0000 0xFFFF 0x0000 0xFFFF}
548
+
549
+ movq mm4, mm0 ; mm4=(10 11 ** 13)
550
+ movq mm5, mm2 ; mm5=(50 51 ** 53)
551
+ punpcklwd mm4, mm1 ; mm4=(10 30 11 31)
552
+ punpcklwd mm5, mm3 ; mm5=(50 70 51 71)
553
+ pmaddwd mm4, [GOTOFF(ebx,PW_F362_MF127)]
554
+ pmaddwd mm5, [GOTOFF(ebx,PW_F085_MF072)]
555
+
556
+ psrld mm0, WORD_BIT ; mm0=(11 -- 13 --)
557
+ pand mm1, mm7 ; mm1=(-- 31 -- 33)
558
+ psrld mm2, WORD_BIT ; mm2=(51 -- 53 --)
559
+ pand mm3, mm7 ; mm3=(-- 71 -- 73)
560
+ por mm0, mm1 ; mm0=(11 31 13 33)
561
+ por mm2, mm3 ; mm2=(51 71 53 73)
562
+ pmaddwd mm0, [GOTOFF(ebx,PW_F362_MF127)]
563
+ pmaddwd mm2, [GOTOFF(ebx,PW_F085_MF072)]
564
+
565
+ paddd mm4, mm5 ; mm4=tmp0[col0 col1]
566
+
567
+ movq mm6, MMWORD [MMBLOCK(1,1,esi,SIZEOF_JCOEF)]
568
+ movq mm1, MMWORD [MMBLOCK(3,1,esi,SIZEOF_JCOEF)]
569
+ pmullw mm6, MMWORD [MMBLOCK(1,1,edx,SIZEOF_ISLOW_MULT_TYPE)]
570
+ pmullw mm1, MMWORD [MMBLOCK(3,1,edx,SIZEOF_ISLOW_MULT_TYPE)]
571
+ movq mm3, MMWORD [MMBLOCK(5,1,esi,SIZEOF_JCOEF)]
572
+ movq mm5, MMWORD [MMBLOCK(7,1,esi,SIZEOF_JCOEF)]
573
+ pmullw mm3, MMWORD [MMBLOCK(5,1,edx,SIZEOF_ISLOW_MULT_TYPE)]
574
+ pmullw mm5, MMWORD [MMBLOCK(7,1,edx,SIZEOF_ISLOW_MULT_TYPE)]
575
+
576
+ ; mm6=(** 15 ** 17), mm1=(** 35 ** 37)
577
+ ; mm3=(** 55 ** 57), mm5=(** 75 ** 77)
578
+
579
+ psrld mm6, WORD_BIT ; mm6=(15 -- 17 --)
580
+ pand mm1, mm7 ; mm1=(-- 35 -- 37)
581
+ psrld mm3, WORD_BIT ; mm3=(55 -- 57 --)
582
+ pand mm5, mm7 ; mm5=(-- 75 -- 77)
583
+ por mm6, mm1 ; mm6=(15 35 17 37)
584
+ por mm3, mm5 ; mm3=(55 75 57 77)
585
+ pmaddwd mm6, [GOTOFF(ebx,PW_F362_MF127)]
586
+ pmaddwd mm3, [GOTOFF(ebx,PW_F085_MF072)]
587
+
588
+ paddd mm0, mm2 ; mm0=tmp0[col1 col3]
589
+ paddd mm6, mm3 ; mm6=tmp0[col5 col7]
590
+
591
+ ; -- Even part
592
+
593
+ movq mm1, MMWORD [MMBLOCK(0,0,esi,SIZEOF_JCOEF)]
594
+ movq mm5, MMWORD [MMBLOCK(0,1,esi,SIZEOF_JCOEF)]
595
+ pmullw mm1, MMWORD [MMBLOCK(0,0,edx,SIZEOF_ISLOW_MULT_TYPE)]
596
+ pmullw mm5, MMWORD [MMBLOCK(0,1,edx,SIZEOF_ISLOW_MULT_TYPE)]
597
+
598
+ ; mm1=(00 01 ** 03), mm5=(** 05 ** 07)
599
+
600
+ movq mm2, mm1 ; mm2=(00 01 ** 03)
601
+ pslld mm1, WORD_BIT ; mm1=(-- 00 -- **)
602
+ psrad mm1, (WORD_BIT-CONST_BITS-2) ; mm1=tmp10[col0 ****]
603
+
604
+ pand mm2, mm7 ; mm2=(-- 01 -- 03)
605
+ pand mm5, mm7 ; mm5=(-- 05 -- 07)
606
+ psrad mm2, (WORD_BIT-CONST_BITS-2) ; mm2=tmp10[col1 col3]
607
+ psrad mm5, (WORD_BIT-CONST_BITS-2) ; mm5=tmp10[col5 col7]
608
+
609
+ ; -- Final output stage
610
+
611
+ movq mm3, mm1
612
+ paddd mm1, mm4 ; mm1=data0[col0 ****]=(A0 **)
613
+ psubd mm3, mm4 ; mm3=data1[col0 ****]=(B0 **)
614
+ punpckldq mm1, mm3 ; mm1=(A0 B0)
615
+
616
+ movq mm7, [GOTOFF(ebx,PD_DESCALE_P1_2)] ; mm7=[PD_DESCALE_P1_2]
617
+
618
+ movq mm4, mm2
619
+ movq mm3, mm5
620
+ paddd mm2, mm0 ; mm2=data0[col1 col3]=(A1 A3)
621
+ paddd mm5, mm6 ; mm5=data0[col5 col7]=(A5 A7)
622
+ psubd mm4, mm0 ; mm4=data1[col1 col3]=(B1 B3)
623
+ psubd mm3, mm6 ; mm3=data1[col5 col7]=(B5 B7)
624
+
625
+ paddd mm1, mm7
626
+ psrad mm1, DESCALE_P1_2
627
+
628
+ paddd mm2, mm7
629
+ paddd mm5, mm7
630
+ psrad mm2, DESCALE_P1_2
631
+ psrad mm5, DESCALE_P1_2
632
+ paddd mm4, mm7
633
+ paddd mm3, mm7
634
+ psrad mm4, DESCALE_P1_2
635
+ psrad mm3, DESCALE_P1_2
636
+
637
+ ; ---- Pass 2: process rows, store into output array.
638
+
639
+ mov edi, JSAMPARRAY [output_buf(ebp)] ; (JSAMPROW *)
640
+ mov eax, JDIMENSION [output_col(ebp)]
641
+
642
+ ; | input:| result:|
643
+ ; | A0 B0 | |
644
+ ; | A1 B1 | C0 C1 |
645
+ ; | A3 B3 | D0 D1 |
646
+ ; | A5 B5 | |
647
+ ; | A7 B7 | |
648
+
649
+ ; -- Odd part
650
+
651
+ packssdw mm2, mm4 ; mm2=(A1 A3 B1 B3)
652
+ packssdw mm5, mm3 ; mm5=(A5 A7 B5 B7)
653
+ pmaddwd mm2, [GOTOFF(ebx,PW_F362_MF127)]
654
+ pmaddwd mm5, [GOTOFF(ebx,PW_F085_MF072)]
655
+
656
+ paddd mm2, mm5 ; mm2=tmp0[row0 row1]
657
+
658
+ ; -- Even part
659
+
660
+ pslld mm1, (CONST_BITS+2) ; mm1=tmp10[row0 row1]
661
+
662
+ ; -- Final output stage
663
+
664
+ movq mm0, [GOTOFF(ebx,PD_DESCALE_P2_2)] ; mm0=[PD_DESCALE_P2_2]
665
+
666
+ movq mm6, mm1
667
+ paddd mm1, mm2 ; mm1=data0[row0 row1]=(C0 C1)
668
+ psubd mm6, mm2 ; mm6=data1[row0 row1]=(D0 D1)
669
+
670
+ paddd mm1, mm0
671
+ paddd mm6, mm0
672
+ psrad mm1, DESCALE_P2_2
673
+ psrad mm6, DESCALE_P2_2
674
+
675
+ movq mm7, mm1 ; transpose coefficients
676
+ punpckldq mm1, mm6 ; mm1=(C0 D0)
677
+ punpckhdq mm7, mm6 ; mm7=(C1 D1)
678
+
679
+ packssdw mm1, mm7 ; mm1=(C0 D0 C1 D1)
680
+ packsswb mm1, mm1 ; mm1=(C0 D0 C1 D1 C0 D0 C1 D1)
681
+ paddb mm1, [GOTOFF(ebx,PB_CENTERJSAMP)]
682
+
683
+ movd ecx, mm1
684
+ movd ebx, mm1 ; ebx=(C0 D0 C1 D1)
685
+ shr ecx, 2*BYTE_BIT ; ecx=(C1 D1 -- --)
686
+
687
+ mov edx, JSAMPROW [edi+0*SIZEOF_JSAMPROW]
688
+ mov esi, JSAMPROW [edi+1*SIZEOF_JSAMPROW]
689
+ mov word [edx+eax*SIZEOF_JSAMPLE], bx
690
+ mov word [esi+eax*SIZEOF_JSAMPLE], cx
691
+
692
+ emms ; empty MMX state
693
+
694
+ pop edi
695
+ pop esi
696
+ ; pop edx ; need not be preserved
697
+ ; pop ecx ; need not be preserved
698
+ pop ebx
699
+ pop ebp
700
+ ret
701
+
702
+ ; For some reason, the OS X linker does not honor the request to align the
703
+ ; segment unless we do this.
704
+ align 32