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,1324 @@
1
+ /*
2
+ * Loongson MMI optimizations for libjpeg-turbo
3
+ *
4
+ * Copyright (C) 2016-2018, Loongson Technology Corporation Limited, BeiJing.
5
+ * All Rights Reserved.
6
+ * Copyright (C) 2019, D. R. Commander. All Rights Reserved.
7
+ *
8
+ * This software is provided 'as-is', without any express or implied
9
+ * warranty. In no event will the authors be held liable for any damages
10
+ * arising from the use of this software.
11
+ *
12
+ * Permission is granted to anyone to use this software for any purpose,
13
+ * including commercial applications, and to alter it and redistribute it
14
+ * freely, subject to the following restrictions:
15
+ *
16
+ * 1. The origin of this software must not be misrepresented; you must not
17
+ * claim that you wrote the original software. If you use this software
18
+ * in a product, an acknowledgment in the product documentation would be
19
+ * appreciated but is not required.
20
+ * 2. Altered source versions must be plainly marked as such, and must not be
21
+ * misrepresented as being the original software.
22
+ * 3. This notice may not be removed or altered from any source distribution.
23
+ */
24
+
25
+ #ifndef __LOONGSON_MMINTRIN_H__
26
+ #define __LOONGSON_MMINTRIN_H__
27
+
28
+ #include <stdint.h>
29
+
30
+
31
+ #define FUNCTION_ATTRIBS \
32
+ __attribute__((__gnu_inline__, __always_inline__, __artificial__))
33
+
34
+
35
+ /* Vectors are stored in 64-bit floating-point registers. */
36
+ typedef double __m64;
37
+
38
+ /* Having a 32-bit datatype allows us to use 32-bit loads in places like
39
+ load8888. */
40
+ typedef float __m32;
41
+
42
+
43
+ /********** Set Operations **********/
44
+
45
+ extern __inline __m64 FUNCTION_ATTRIBS
46
+ _mm_setzero_si64(void)
47
+ {
48
+ return 0.0;
49
+ }
50
+
51
+ extern __inline __m64 FUNCTION_ATTRIBS
52
+ _mm_set_pi8(uint8_t __b7, uint8_t __b6, uint8_t __b5, uint8_t __b4,
53
+ uint8_t __b3, uint8_t __b2, uint8_t __b1, uint8_t __b0)
54
+ {
55
+ __m64 ret;
56
+ uint32_t lo = ((uint32_t)__b6 << 24) |
57
+ ((uint32_t)__b4 << 16) |
58
+ ((uint32_t)__b2 << 8) |
59
+ (uint32_t)__b0;
60
+ uint32_t hi = ((uint32_t)__b7 << 24) |
61
+ ((uint32_t)__b5 << 16) |
62
+ ((uint32_t)__b3 << 8) |
63
+ (uint32_t)__b1;
64
+
65
+ asm("mtc1 %1, %0\n\t"
66
+ "mtc1 %2, $f0\n\t"
67
+ "punpcklbh %0, %0, $f0\n\t"
68
+ : "=f" (ret)
69
+ : "r" (lo), "r" (hi)
70
+ : "$f0"
71
+ );
72
+
73
+ return ret;
74
+ }
75
+
76
+ extern __inline __m64 FUNCTION_ATTRIBS
77
+ _mm_set_pi16(uint16_t __h3, uint16_t __h2, uint16_t __h1, uint16_t __h0)
78
+ {
79
+ __m64 ret;
80
+ uint32_t lo = ((uint32_t)__h2 << 16) | (uint32_t)__h0;
81
+ uint32_t hi = ((uint32_t)__h3 << 16) | (uint32_t)__h1;
82
+
83
+ asm("mtc1 %1, %0\n\t"
84
+ "mtc1 %2, $f0\n\t"
85
+ "punpcklhw %0, %0, $f0\n\t"
86
+ : "=f" (ret)
87
+ : "r" (lo), "r" (hi)
88
+ : "$f0"
89
+ );
90
+
91
+ return ret;
92
+ }
93
+
94
+ #define _MM_SHUFFLE(fp3, fp2, fp1, fp0) \
95
+ (((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | (fp0))
96
+
97
+ extern __inline __m64 FUNCTION_ATTRIBS
98
+ _mm_set_pi32(uint32_t __i1, uint32_t __i0)
99
+ {
100
+ if (__builtin_constant_p(__i1) && __builtin_constant_p(__i0)) {
101
+ uint64_t val = ((uint64_t)__i1 << 32) |
102
+ ((uint64_t)__i0 << 0);
103
+
104
+ return *(__m64 *)&val;
105
+ } else if (__i1 == __i0) {
106
+ uint64_t imm = _MM_SHUFFLE(1, 0, 1, 0);
107
+ __m64 ret;
108
+
109
+ asm("pshufh %0, %1, %2\n\t"
110
+ : "=f" (ret)
111
+ : "f" (*(__m32 *)&__i1), "f" (*(__m64 *)&imm)
112
+ );
113
+
114
+ return ret;
115
+ } else {
116
+ uint64_t val = ((uint64_t)__i1 << 32) |
117
+ ((uint64_t)__i0 << 0);
118
+
119
+ return *(__m64 *)&val;
120
+ }
121
+ }
122
+
123
+ extern __inline __m64 FUNCTION_ATTRIBS
124
+ _mm_set1_pi8(uint8_t __b0)
125
+ {
126
+ __m64 ret;
127
+
128
+ asm("sll $8, %1, 8\n\t"
129
+ "or %1, %1, $8\n\t"
130
+ "mtc1 %1, %0\n\t"
131
+ "mtc1 $0, $f0\n\t"
132
+ "pshufh %0, %0, $f0\n\t"
133
+ : "=f" (ret)
134
+ : "r" (__b0)
135
+ : "$8", "$f0"
136
+ );
137
+
138
+ return ret;
139
+ }
140
+
141
+ extern __inline __m64 FUNCTION_ATTRIBS
142
+ _mm_set1_pi16(uint16_t __h0)
143
+ {
144
+ __m64 ret;
145
+
146
+ asm("mtc1 %1, %0\n\t"
147
+ "mtc1 $0, $f0\n\t"
148
+ "pshufh %0, %0, $f0\n\t"
149
+ : "=f" (ret)
150
+ : "r" (__h0)
151
+ : "$8", "$f0"
152
+ );
153
+
154
+ return ret;
155
+ }
156
+
157
+ extern __inline __m64 FUNCTION_ATTRIBS
158
+ _mm_set1_pi32(unsigned __i0)
159
+ {
160
+ return _mm_set_pi32(__i0, __i0);
161
+ }
162
+
163
+ extern __inline __m64 FUNCTION_ATTRIBS
164
+ _mm_setr_pi8(uint8_t __h0, uint8_t __h1, uint8_t __h2, uint8_t __h3,
165
+ uint8_t __h4, uint8_t __h5, uint8_t __h6, uint8_t __h7)
166
+ {
167
+ return _mm_set_pi8(__h7, __h6, __h5, __h4,
168
+ __h3, __h2, __h1, __h0);
169
+ }
170
+
171
+ extern __inline __m64 FUNCTION_ATTRIBS
172
+ _mm_setr_pi16(uint16_t __w0, uint16_t __w1, uint16_t __w2, uint16_t __w3)
173
+ {
174
+ return _mm_set_pi16(__w3, __w2, __w1, __w0);
175
+ }
176
+
177
+ extern __inline __m64 FUNCTION_ATTRIBS
178
+ _mm_setr_pi32(uint32_t __i0, uint32_t __i1)
179
+ {
180
+ return _mm_set_pi32(__i1, __i0);
181
+ }
182
+
183
+
184
+ /********** Arithmetic Operations **********/
185
+
186
+ extern __inline __m64 FUNCTION_ATTRIBS
187
+ _mm_add_pi8(__m64 __m1, __m64 __m2)
188
+ {
189
+ __m64 ret;
190
+
191
+ asm("paddb %0, %1, %2\n\t"
192
+ : "=f" (ret)
193
+ : "f" (__m1), "f" (__m2)
194
+ );
195
+
196
+ return ret;
197
+ }
198
+
199
+ extern __inline __m64 FUNCTION_ATTRIBS
200
+ _mm_add_pi16(__m64 __m1, __m64 __m2)
201
+ {
202
+ __m64 ret;
203
+
204
+ asm("paddh %0, %1, %2\n\t"
205
+ : "=f" (ret)
206
+ : "f" (__m1), "f" (__m2)
207
+ );
208
+
209
+ return ret;
210
+ }
211
+
212
+ extern __inline __m64 FUNCTION_ATTRIBS
213
+ _mm_add_pi32(__m64 __m1, __m64 __m2)
214
+ {
215
+ __m64 ret;
216
+
217
+ asm("paddw %0, %1, %2\n\t"
218
+ : "=f" (ret)
219
+ : "f" (__m1), "f" (__m2)
220
+ );
221
+
222
+ return ret;
223
+ }
224
+
225
+ extern __inline __m64 FUNCTION_ATTRIBS
226
+ _mm_add_si64(__m64 __m1, __m64 __m2)
227
+ {
228
+ __m64 ret;
229
+
230
+ asm("paddd %0, %1, %2\n\t"
231
+ : "=f" (ret)
232
+ : "f" (__m1), "f" (__m2)
233
+ );
234
+
235
+ return ret;
236
+ }
237
+
238
+ extern __inline __m64 FUNCTION_ATTRIBS
239
+ _mm_adds_pi8(__m64 __m1, __m64 __m2)
240
+ {
241
+ __m64 ret;
242
+
243
+ asm("paddsb %0, %1, %2\n\t"
244
+ : "=f" (ret)
245
+ : "f" (__m1), "f" (__m2)
246
+ );
247
+
248
+ return ret;
249
+ }
250
+
251
+ extern __inline __m64 FUNCTION_ATTRIBS
252
+ _mm_adds_pi16(__m64 __m1, __m64 __m2)
253
+ {
254
+ __m64 ret;
255
+
256
+ asm("paddsh %0, %1, %2\n\t"
257
+ : "=f" (ret)
258
+ : "f" (__m1), "f" (__m2)
259
+ );
260
+
261
+ return ret;
262
+ }
263
+
264
+
265
+ extern __inline __m64 FUNCTION_ATTRIBS
266
+ _mm_adds_pu8(__m64 __m1, __m64 __m2)
267
+ {
268
+ __m64 ret;
269
+
270
+ asm("paddusb %0, %1, %2\n\t"
271
+ : "=f" (ret)
272
+ : "f" (__m1), "f" (__m2)
273
+ );
274
+
275
+ return ret;
276
+ }
277
+
278
+ extern __inline __m64 FUNCTION_ATTRIBS
279
+ _mm_adds_pu16(__m64 __m1, __m64 __m2)
280
+ {
281
+ __m64 ret;
282
+
283
+ asm("paddush %0, %1, %2\n\t"
284
+ : "=f" (ret)
285
+ : "f" (__m1), "f" (__m2)
286
+ );
287
+
288
+ return ret;
289
+ }
290
+
291
+ extern __inline __m64 FUNCTION_ATTRIBS
292
+ _mm_avg_pu8(__m64 __m1, __m64 __m2)
293
+ {
294
+ __m64 ret;
295
+
296
+ asm("pavgb %0, %1, %2\n\t"
297
+ : "=f" (ret)
298
+ : "f" (__m1), "f" (__m2)
299
+ );
300
+
301
+ return ret;
302
+ }
303
+
304
+ extern __inline __m64 FUNCTION_ATTRIBS
305
+ _mm_avg_pu16(__m64 __m1, __m64 __m2)
306
+ {
307
+ __m64 ret;
308
+
309
+ asm("pavgh %0, %1, %2\n\t"
310
+ : "=f" (ret)
311
+ : "f" (__m1), "f" (__m2)
312
+ );
313
+
314
+ return ret;
315
+ }
316
+
317
+ extern __inline __m64 FUNCTION_ATTRIBS
318
+ _mm_madd_pi16(__m64 __m1, __m64 __m2)
319
+ {
320
+ __m64 ret;
321
+
322
+ asm("pmaddhw %0, %1, %2\n\t"
323
+ : "=f" (ret)
324
+ : "f" (__m1), "f" (__m2)
325
+ );
326
+
327
+ return ret;
328
+ }
329
+
330
+ extern __inline __m64 FUNCTION_ATTRIBS
331
+ _mm_max_pi16(__m64 __m1, __m64 __m2)
332
+ {
333
+ __m64 ret;
334
+
335
+ asm("pmaxsh %0, %1, %2\n\t"
336
+ : "=f" (ret)
337
+ : "f" (__m1), "f" (__m2)
338
+ );
339
+
340
+ return ret;
341
+ }
342
+
343
+ extern __inline __m64 FUNCTION_ATTRIBS
344
+ _mm_max_pu8(__m64 __m1, __m64 __m2)
345
+ {
346
+ __m64 ret;
347
+
348
+ asm("pmaxub %0, %1, %2\n\t"
349
+ : "=f" (ret)
350
+ : "f" (__m1), "f" (__m2)
351
+ );
352
+
353
+ return ret;
354
+ }
355
+
356
+ extern __inline __m64 FUNCTION_ATTRIBS
357
+ _mm_min_pi16(__m64 __m1, __m64 __m2)
358
+ {
359
+ __m64 ret;
360
+
361
+ asm("pminsh %0, %1, %2\n\t"
362
+ : "=f" (ret)
363
+ : "f" (__m1), "f" (__m2)
364
+ );
365
+
366
+ return ret;
367
+ }
368
+
369
+ extern __inline __m64 FUNCTION_ATTRIBS
370
+ _mm_min_pu8(__m64 __m1, __m64 __m2)
371
+ {
372
+ __m64 ret;
373
+
374
+ asm("pminub %0, %1, %2\n\t"
375
+ : "=f" (ret)
376
+ : "f" (__m1), "f" (__m2)
377
+ );
378
+
379
+ return ret;
380
+ }
381
+
382
+ extern __inline int FUNCTION_ATTRIBS
383
+ _mm_movemask_pi8(__m64 __m1)
384
+ {
385
+ int ret;
386
+
387
+ asm("pmovmskb %0, %1\n\t"
388
+ : "=r" (ret)
389
+ : "y" (__m1)
390
+ );
391
+
392
+ return ret;
393
+ }
394
+
395
+ extern __inline __m64 FUNCTION_ATTRIBS
396
+ _mm_mulhi_pi16(__m64 __m1, __m64 __m2)
397
+ {
398
+ __m64 ret;
399
+
400
+ asm("pmulhh %0, %1, %2\n\t"
401
+ : "=f" (ret)
402
+ : "f" (__m1), "f" (__m2)
403
+ );
404
+
405
+ return ret;
406
+ }
407
+
408
+ extern __inline __m64 FUNCTION_ATTRIBS
409
+ _mm_mulhi_pu16(__m64 __m1, __m64 __m2)
410
+ {
411
+ __m64 ret;
412
+
413
+ asm("pmulhuh %0, %1, %2\n\t"
414
+ : "=f" (ret)
415
+ : "f" (__m1), "f" (__m2)
416
+ );
417
+
418
+ return ret;
419
+ }
420
+
421
+ extern __inline __m64 FUNCTION_ATTRIBS
422
+ _mm_mullo_pi16(__m64 __m1, __m64 __m2)
423
+ {
424
+ __m64 ret;
425
+
426
+ asm("pmullh %0, %1, %2\n\t"
427
+ : "=f" (ret)
428
+ : "f" (__m1), "f" (__m2)
429
+ );
430
+
431
+ return ret;
432
+ }
433
+
434
+ extern __inline __m64 FUNCTION_ATTRIBS
435
+ _mm_mul_pu32(__m64 __m1, __m64 __m2)
436
+ {
437
+ __m64 ret;
438
+
439
+ asm("pmuluw %0, %1, %2\n\t"
440
+ : "=f" (ret)
441
+ : "f" (__m1), "f" (__m2)
442
+ );
443
+
444
+ return ret;
445
+ }
446
+
447
+ extern __inline __m64 FUNCTION_ATTRIBS
448
+ _mm_sad_pu8(__m64 __m1, __m64 __m2)
449
+ {
450
+ __m64 ret;
451
+
452
+ asm("psadbh %0, %1, %2\n\t"
453
+ : "=f" (ret)
454
+ : "f" (__m1), "f" (__m2)
455
+ );
456
+
457
+ return ret;
458
+ }
459
+
460
+
461
+ extern __inline __m64 FUNCTION_ATTRIBS
462
+ _mm_asub_pu8(__m64 __m1, __m64 __m2)
463
+ {
464
+ __m64 ret;
465
+
466
+ asm("pasubub %0, %1, %2\n\t"
467
+ : "=f" (ret)
468
+ : "f" (__m1), "f" (__m2)
469
+ );
470
+
471
+ return ret;
472
+ }
473
+
474
+ extern __inline __m64 FUNCTION_ATTRIBS
475
+ _mm_biadd_pu8(__m64 __m1, __m64 __m2)
476
+ {
477
+ __m64 ret;
478
+
479
+ asm("biadd %0, %1, %2\n\t"
480
+ : "=f" (ret)
481
+ : "f" (__m1), "f" (__m2)
482
+ );
483
+
484
+ return ret;
485
+ }
486
+
487
+ extern __inline __m64 FUNCTION_ATTRIBS
488
+ _mm_sub_pi8(__m64 __m1, __m64 __m2)
489
+ {
490
+ __m64 ret;
491
+
492
+ asm("psubb %0, %1, %2\n\t"
493
+ : "=f" (ret)
494
+ : "f" (__m1), "f" (__m2)
495
+ );
496
+
497
+ return ret;
498
+ }
499
+
500
+ extern __inline __m64 FUNCTION_ATTRIBS
501
+ _mm_sub_pi16(__m64 __m1, __m64 __m2)
502
+ {
503
+ __m64 ret;
504
+
505
+ asm("psubh %0, %1, %2\n\t"
506
+ : "=f" (ret)
507
+ : "f" (__m1), "f" (__m2)
508
+ );
509
+
510
+ return ret;
511
+ }
512
+
513
+ extern __inline __m64 FUNCTION_ATTRIBS
514
+ _mm_sub_pi32(__m64 __m1, __m64 __m2)
515
+ {
516
+ __m64 ret;
517
+
518
+ asm("psubw %0, %1, %2\n\t"
519
+ : "=f" (ret)
520
+ : "f" (__m1), "f" (__m2)
521
+ );
522
+
523
+ return ret;
524
+ }
525
+
526
+ extern __inline __m64 FUNCTION_ATTRIBS
527
+ _mm_sub_si64(__m64 __m1, __m64 __m2)
528
+ {
529
+ __m64 ret;
530
+
531
+ asm("psubd %0, %1, %2\n\t"
532
+ : "=f" (ret)
533
+ : "f" (__m1), "f" (__m2)
534
+ );
535
+
536
+ return ret;
537
+ }
538
+
539
+ extern __inline __m64 FUNCTION_ATTRIBS
540
+ _mm_subs_pi8(__m64 __m1, __m64 __m2)
541
+ {
542
+ __m64 ret;
543
+
544
+ asm("psubsb %0, %1, %2\n\t"
545
+ : "=f" (ret)
546
+ : "f" (__m1), "f" (__m2)
547
+ );
548
+
549
+ return ret;
550
+ }
551
+
552
+ extern __inline __m64 FUNCTION_ATTRIBS
553
+ _mm_subs_pi16(__m64 __m1, __m64 __m2)
554
+ {
555
+ __m64 ret;
556
+
557
+ asm("psubsh %0, %1, %2\n\t"
558
+ : "=f" (ret)
559
+ : "f" (__m1), "f" (__m2)
560
+ );
561
+
562
+ return ret;
563
+ }
564
+
565
+
566
+ extern __inline __m64 FUNCTION_ATTRIBS
567
+ _mm_subs_pu8(__m64 __m1, __m64 __m2)
568
+ {
569
+ __m64 ret;
570
+
571
+ asm("psubusb %0, %1, %2\n\t"
572
+ : "=f" (ret)
573
+ : "f" (__m1), "f" (__m2)
574
+ );
575
+
576
+ return ret;
577
+ }
578
+
579
+ extern __inline __m64 FUNCTION_ATTRIBS
580
+ _mm_subs_pu16(__m64 __m1, __m64 __m2)
581
+ {
582
+ __m64 ret;
583
+
584
+ asm("psubush %0, %1, %2\n\t"
585
+ : "=f" (ret)
586
+ : "f" (__m1), "f" (__m2)
587
+ );
588
+
589
+ return ret;
590
+ }
591
+
592
+
593
+ /********** Logical Operations **********/
594
+
595
+ extern __inline __m64 FUNCTION_ATTRIBS
596
+ _mm_and_si64(__m64 __m1, __m64 __m2)
597
+ {
598
+ __m64 ret;
599
+
600
+ asm("and %0, %1, %2\n\t"
601
+ : "=f" (ret)
602
+ : "f" (__m1), "f" (__m2)
603
+ );
604
+
605
+ return ret;
606
+ }
607
+
608
+ extern __inline __m64 FUNCTION_ATTRIBS
609
+ _mm_andnot_si64(__m64 __m1, __m64 __m2)
610
+ {
611
+ __m64 ret;
612
+
613
+ asm("andn %0, %1, %2\n\t"
614
+ : "=f" (ret)
615
+ : "f" (__m1), "f" (__m2)
616
+ );
617
+
618
+ return ret;
619
+ }
620
+
621
+
622
+ extern __inline __m64 FUNCTION_ATTRIBS
623
+ _mm_or_si32(__m32 __m1, __m32 __m2)
624
+ {
625
+ __m32 ret;
626
+
627
+ asm("or %0, %1, %2\n\t"
628
+ : "=f" (ret)
629
+ : "f" (__m1), "f" (__m2)
630
+ );
631
+
632
+ return ret;
633
+ }
634
+
635
+ extern __inline __m64 FUNCTION_ATTRIBS
636
+ _mm_or_si64(__m64 __m1, __m64 __m2)
637
+ {
638
+ __m64 ret;
639
+
640
+ asm("or %0, %1, %2\n\t"
641
+ : "=f" (ret)
642
+ : "f" (__m1), "f" (__m2)
643
+ );
644
+
645
+ return ret;
646
+ }
647
+
648
+ extern __inline __m64 FUNCTION_ATTRIBS
649
+ _mm_xor_si64(__m64 __m1, __m64 __m2)
650
+ {
651
+ __m64 ret;
652
+
653
+ asm("xor %0, %1, %2\n\t"
654
+ : "=f" (ret)
655
+ : "f" (__m1), "f" (__m2)
656
+ );
657
+
658
+ return ret;
659
+ }
660
+
661
+
662
+ /********** Shift Operations **********/
663
+
664
+ extern __inline __m64 FUNCTION_ATTRIBS
665
+ _mm_slli_pi16(__m64 __m, int64_t __count)
666
+ {
667
+ __m64 ret;
668
+
669
+ asm("psllh %0, %1, %2\n\t"
670
+ : "=f" (ret)
671
+ : "f" (__m), "f" (*(__m64 *)&__count)
672
+ );
673
+
674
+ return ret;
675
+ }
676
+
677
+ extern __inline __m64 FUNCTION_ATTRIBS
678
+ _mm_slli_pi32(__m64 __m, int64_t __count)
679
+ {
680
+ __m64 ret;
681
+
682
+ asm("psllw %0, %1, %2\n\t"
683
+ : "=f" (ret)
684
+ : "f" (__m), "f" (*(__m64 *)&__count)
685
+ );
686
+
687
+ return ret;
688
+ }
689
+
690
+ extern __inline __m64 FUNCTION_ATTRIBS
691
+ _mm_slli_si64(__m64 __m, int64_t __count)
692
+ {
693
+ __m64 ret;
694
+
695
+ asm("dsll %0, %1, %2\n\t"
696
+ : "=f" (ret)
697
+ : "f" (__m), "f" (*(__m64 *)&__count)
698
+ );
699
+
700
+ return ret;
701
+ }
702
+
703
+ extern __inline __m64 FUNCTION_ATTRIBS
704
+ _mm_srli_pi16(__m64 __m, int64_t __count)
705
+ {
706
+ __m64 ret;
707
+
708
+ asm("psrlh %0, %1, %2\n\t"
709
+ : "=f" (ret)
710
+ : "f" (__m), "f" (*(__m64 *)&__count)
711
+ );
712
+
713
+ return ret;
714
+ }
715
+
716
+ extern __inline __m64 FUNCTION_ATTRIBS
717
+ _mm_srli_pi32(__m64 __m, int64_t __count)
718
+ {
719
+ __m64 ret;
720
+
721
+ asm("psrlw %0, %1, %2\n\t"
722
+ : "=f" (ret)
723
+ : "f" (__m), "f" (*(__m64 *)&__count)
724
+ );
725
+
726
+ return ret;
727
+ }
728
+
729
+ extern __inline __m64 FUNCTION_ATTRIBS
730
+ _mm_srli_si64(__m64 __m, int64_t __count)
731
+ {
732
+ __m64 ret;
733
+
734
+ asm("dsrl %0, %1, %2\n\t"
735
+ : "=f" (ret)
736
+ : "f" (__m), "f" (*(__m64 *)&__count)
737
+ );
738
+
739
+ return ret;
740
+ }
741
+
742
+ extern __inline __m64 FUNCTION_ATTRIBS
743
+ _mm_srai_pi16(__m64 __m, int64_t __count)
744
+ {
745
+ __m64 ret;
746
+
747
+ asm("psrah %0, %1, %2\n\t"
748
+ : "=f" (ret)
749
+ : "f" (__m), "f" (*(__m64 *)&__count)
750
+ );
751
+
752
+ return ret;
753
+ }
754
+
755
+ extern __inline __m64 FUNCTION_ATTRIBS
756
+ _mm_srai_pi32(__m64 __m, int64_t __count)
757
+ {
758
+ __m64 ret;
759
+
760
+ asm("psraw %0, %1, %2\n\t"
761
+ : "=f" (ret)
762
+ : "f" (__m), "f" (*(__m64 *)&__count)
763
+ );
764
+
765
+ return ret;
766
+ }
767
+
768
+ extern __inline __m64 FUNCTION_ATTRIBS
769
+ _mm_srai_si64(__m64 __m, int64_t __count)
770
+ {
771
+ __m64 ret;
772
+
773
+ asm("dsra %0, %1, %2\n\t"
774
+ : "=f" (ret)
775
+ : "f" (__m), "f" (*(__m64 *)&__count)
776
+ );
777
+
778
+ return ret;
779
+ }
780
+
781
+
782
+ /********** Conversion Intrinsics **********/
783
+
784
+ extern __inline __m64 FUNCTION_ATTRIBS
785
+ to_m64(uint64_t x)
786
+ {
787
+ return *(__m64 *)&x;
788
+ }
789
+
790
+ extern __inline uint64_t FUNCTION_ATTRIBS
791
+ to_uint64(__m64 x)
792
+ {
793
+ return *(uint64_t *)&x;
794
+ }
795
+
796
+
797
+ /********** Comparison Intrinsics **********/
798
+
799
+ extern __inline __m64 FUNCTION_ATTRIBS
800
+ _mm_cmpeq_pi8(__m64 __m1, __m64 __m2)
801
+ {
802
+ __m64 ret;
803
+
804
+ asm("pcmpeqb %0, %1, %2\n\t"
805
+ : "=f" (ret)
806
+ : "f" (__m1), "f" (__m2)
807
+ );
808
+
809
+ return ret;
810
+ }
811
+
812
+ extern __inline __m64 FUNCTION_ATTRIBS
813
+ _mm_cmpeq_pi16(__m64 __m1, __m64 __m2)
814
+ {
815
+ __m64 ret;
816
+
817
+ asm("pcmpeqh %0, %1, %2\n\t"
818
+ : "=f" (ret)
819
+ : "f" (__m1), "f" (__m2)
820
+ );
821
+
822
+ return ret;
823
+ }
824
+
825
+ extern __inline __m64 FUNCTION_ATTRIBS
826
+ _mm_cmpeq_pi32(__m64 __m1, __m64 __m2)
827
+ {
828
+ __m64 ret;
829
+
830
+ asm("pcmpeqw %0, %1, %2\n\t"
831
+ : "=f" (ret)
832
+ : "f" (__m1), "f" (__m2)
833
+ );
834
+
835
+ return ret;
836
+ }
837
+
838
+ extern __inline __m64 FUNCTION_ATTRIBS
839
+ _mm_cmpgt_pi8(__m64 __m1, __m64 __m2)
840
+ {
841
+ __m64 ret;
842
+
843
+ asm("pcmpgtb %0, %1, %2\n\t"
844
+ : "=f" (ret)
845
+ : "f" (__m1), "f" (__m2)
846
+ );
847
+
848
+ return ret;
849
+ }
850
+
851
+ extern __inline __m64 FUNCTION_ATTRIBS
852
+ _mm_cmpgt_pi16(__m64 __m1, __m64 __m2)
853
+ {
854
+ __m64 ret;
855
+
856
+ asm("pcmpgth %0, %1, %2\n\t"
857
+ : "=f" (ret)
858
+ : "f" (__m1), "f" (__m2)
859
+ );
860
+
861
+ return ret;
862
+ }
863
+
864
+ extern __inline __m64 FUNCTION_ATTRIBS
865
+ _mm_cmpgt_pi32(__m64 __m1, __m64 __m2)
866
+ {
867
+ __m64 ret;
868
+
869
+ asm("pcmpgtw %0, %1, %2\n\t"
870
+ : "=f" (ret)
871
+ : "f" (__m1), "f" (__m2)
872
+ );
873
+
874
+ return ret;
875
+ }
876
+
877
+ extern __inline __m64 FUNCTION_ATTRIBS
878
+ _mm_cmplt_pi8(__m64 __m1, __m64 __m2)
879
+ {
880
+ __m64 ret;
881
+
882
+ asm("pcmpltb %0, %1, %2\n\t"
883
+ : "=f" (ret)
884
+ : "f" (__m1), "f" (__m2)
885
+ );
886
+
887
+ return ret;
888
+ }
889
+
890
+ extern __inline __m64 FUNCTION_ATTRIBS
891
+ _mm_cmplt_pi16(__m64 __m1, __m64 __m2)
892
+ {
893
+ __m64 ret;
894
+
895
+ asm("pcmplth %0, %1, %2\n\t"
896
+ : "=f" (ret)
897
+ : "f" (__m1), "f" (__m2)
898
+ );
899
+
900
+ return ret;
901
+ }
902
+
903
+ extern __inline __m64 FUNCTION_ATTRIBS
904
+ _mm_cmplt_pi32(__m64 __m1, __m64 __m2)
905
+ {
906
+ __m64 ret;
907
+
908
+ asm("pcmpltw %0, %1, %2\n\t"
909
+ : "=f" (ret)
910
+ : "f" (__m1), "f" (__m2)
911
+ );
912
+
913
+ return ret;
914
+ }
915
+
916
+
917
+ /********** Miscellaneous Operations **********/
918
+
919
+ extern __inline __m64 FUNCTION_ATTRIBS
920
+ _mm_packs_pi16(__m64 __m1, __m64 __m2)
921
+ {
922
+ __m64 ret;
923
+
924
+ asm("packsshb %0, %1, %2\n\t"
925
+ : "=f" (ret)
926
+ : "f" (__m1), "f" (__m2)
927
+ );
928
+
929
+ return ret;
930
+ }
931
+
932
+ extern __inline __m64 FUNCTION_ATTRIBS
933
+ _mm_packs_pi32(__m64 __m1, __m64 __m2)
934
+ {
935
+ __m64 ret;
936
+
937
+ asm("packsswh %0, %1, %2\n\t"
938
+ : "=f" (ret)
939
+ : "f" (__m1), "f" (__m2)
940
+ );
941
+
942
+ return ret;
943
+ }
944
+
945
+ extern __inline __m64 FUNCTION_ATTRIBS
946
+ _mm_packs_pi32_f(__m64 __m1, __m64 __m2)
947
+ {
948
+ __m64 ret;
949
+
950
+ asm("packsswh %0, %1, %2\n\t"
951
+ : "=f" (ret)
952
+ : "f" (__m1), "f" (__m2)
953
+ );
954
+
955
+ return ret;
956
+ }
957
+
958
+ extern __inline __m64 FUNCTION_ATTRIBS
959
+ _mm_packs_pu16(__m64 __m1, __m64 __m2)
960
+ {
961
+ __m64 ret;
962
+
963
+ asm("packushb %0, %1, %2\n\t"
964
+ : "=f" (ret)
965
+ : "f" (__m1), "f" (__m2)
966
+ );
967
+
968
+ return ret;
969
+ }
970
+
971
+ extern __inline __m64 FUNCTION_ATTRIBS
972
+ _mm_extract_pi16(__m64 __m, int64_t __pos)
973
+ {
974
+ __m64 ret;
975
+
976
+ asm("pextrh %0, %1, %2\n\t"
977
+ : "=f" (ret)
978
+ : "f" (__m), "f" (*(__m64 *)&__pos)
979
+ );
980
+
981
+ return ret;
982
+ }
983
+
984
+ extern __inline __m64 FUNCTION_ATTRIBS
985
+ _mm_insert_pi16(__m64 __m1, __m64 __m2, int64_t __pos)
986
+ {
987
+ __m64 ret;
988
+
989
+ switch (__pos) {
990
+ case 0:
991
+
992
+ asm("pinsrh_0 %0, %1, %2\n\t"
993
+ : "=f" (ret)
994
+ : "f" (__m1), "f" (__m2), "i" (__pos)
995
+ );
996
+
997
+ break;
998
+
999
+ case 1:
1000
+
1001
+ asm("pinsrh_1 %0, %1, %2\n\t"
1002
+ : "=f" (ret)
1003
+ : "f" (__m1), "f" (__m2), "i" (__pos)
1004
+ );
1005
+
1006
+ break;
1007
+ case 2:
1008
+
1009
+ asm("pinsrh_2 %0, %1, %2\n\t"
1010
+ : "=f" (ret)
1011
+ : "f" (__m1), "f" (__m2), "i" (__pos)
1012
+ );
1013
+
1014
+ break;
1015
+
1016
+ case 3:
1017
+
1018
+ asm("pinsrh_3 %0, %1, %2\n\t"
1019
+ : "=f" (ret)
1020
+ : "f" (__m1), "f" (__m2), "i" (__pos)
1021
+ );
1022
+
1023
+ break;
1024
+ }
1025
+
1026
+ return ret;
1027
+ }
1028
+
1029
+ extern __inline __m64 FUNCTION_ATTRIBS
1030
+ _mm_shuffle_pi16(__m64 __m, int64_t __n)
1031
+ {
1032
+ __m64 ret;
1033
+
1034
+ asm("pshufh %0, %1, %2\n\t"
1035
+ : "=f" (ret)
1036
+ : "f" (__m), "f" (*(__m64 *)&__n)
1037
+ );
1038
+
1039
+ return ret;
1040
+ }
1041
+
1042
+ extern __inline __m64 FUNCTION_ATTRIBS
1043
+ _mm_unpackhi_pi8(__m64 __m1, __m64 __m2)
1044
+ {
1045
+ __m64 ret;
1046
+
1047
+ asm("punpckhbh %0, %1, %2\n\t"
1048
+ : "=f" (ret)
1049
+ : "f" (__m1), "f" (__m2)
1050
+ );
1051
+
1052
+ return ret;
1053
+ }
1054
+
1055
+ extern __inline __m64 FUNCTION_ATTRIBS
1056
+ _mm_unpackhi_pi8_f(__m64 __m1, __m64 __m2)
1057
+ {
1058
+ __m64 ret;
1059
+
1060
+ asm("punpckhbh %0, %1, %2\n\t"
1061
+ : "=f" (ret)
1062
+ : "f" (__m1), "f" (__m2)
1063
+ );
1064
+
1065
+ return ret;
1066
+ }
1067
+
1068
+ extern __inline __m64 FUNCTION_ATTRIBS
1069
+ _mm_unpackhi_pi16(__m64 __m1, __m64 __m2)
1070
+ {
1071
+ __m64 ret;
1072
+
1073
+ asm("punpckhhw %0, %1, %2\n\t"
1074
+ : "=f" (ret)
1075
+ : "f" (__m1), "f" (__m2)
1076
+ );
1077
+
1078
+ return ret;
1079
+ }
1080
+
1081
+ extern __inline __m64 FUNCTION_ATTRIBS
1082
+ _mm_unpackhi_pi16_f(__m64 __m1, __m64 __m2)
1083
+ {
1084
+ __m64 ret;
1085
+
1086
+ asm("punpckhhw %0, %1, %2\n\t"
1087
+ : "=f" (ret)
1088
+ : "f" (__m1), "f" (__m2)
1089
+ );
1090
+
1091
+ return ret;
1092
+ }
1093
+
1094
+ extern __inline __m64 FUNCTION_ATTRIBS
1095
+ _mm_unpackhi_pi32(__m64 __m1, __m64 __m2)
1096
+ {
1097
+ __m64 ret;
1098
+
1099
+ asm("punpckhwd %0, %1, %2\n\t"
1100
+ : "=f" (ret)
1101
+ : "f" (__m1), "f" (__m2)
1102
+ );
1103
+
1104
+ return ret;
1105
+ }
1106
+
1107
+ extern __inline __m64 FUNCTION_ATTRIBS
1108
+ _mm_unpacklo_pi8(__m64 __m1, __m64 __m2)
1109
+ {
1110
+ __m64 ret;
1111
+
1112
+ asm("punpcklbh %0, %1, %2\n\t"
1113
+ : "=f" (ret)
1114
+ : "f" (__m1), "f" (__m2)
1115
+ );
1116
+
1117
+ return ret;
1118
+ }
1119
+
1120
+ /* Since punpcklbh cares about the high 32-bits, we use the __m64 datatype,
1121
+ which preserves the data. */
1122
+
1123
+ extern __inline __m64 FUNCTION_ATTRIBS
1124
+ _mm_unpacklo_pi8_f64(__m64 __m1, __m64 __m2)
1125
+ {
1126
+ __m64 ret;
1127
+
1128
+ asm("punpcklbh %0, %1, %2\n\t"
1129
+ : "=f" (ret)
1130
+ : "f" (__m1), "f" (__m2)
1131
+ );
1132
+
1133
+ return ret;
1134
+ }
1135
+
1136
+ /* Since punpcklbh doesn't care about the high 32-bits, we use the __m32,
1137
+ datatype, which allows load8888 to use 32-bit loads. */
1138
+
1139
+ extern __inline __m64 FUNCTION_ATTRIBS
1140
+ _mm_unpacklo_pi8_f(__m32 __m1, __m64 __m2)
1141
+ {
1142
+ __m64 ret;
1143
+
1144
+ asm("punpcklbh %0, %1, %2\n\t"
1145
+ : "=f" (ret)
1146
+ : "f" (__m1), "f" (__m2)
1147
+ );
1148
+
1149
+ return ret;
1150
+ }
1151
+
1152
+ extern __inline __m64 FUNCTION_ATTRIBS
1153
+ _mm_unpacklo_pi16(__m64 __m1, __m64 __m2)
1154
+ {
1155
+ __m64 ret;
1156
+
1157
+ asm("punpcklhw %0, %1, %2\n\t"
1158
+ : "=f" (ret)
1159
+ : "f" (__m1), "f" (__m2)
1160
+ );
1161
+
1162
+ return ret;
1163
+ }
1164
+
1165
+ extern __inline __m64 FUNCTION_ATTRIBS
1166
+ _mm_unpacklo_pi16_f(__m64 __m1, __m64 __m2)
1167
+ {
1168
+ __m64 ret;
1169
+
1170
+ asm("punpcklhw %0, %1, %2\n\t"
1171
+ : "=f" (ret)
1172
+ : "f" (__m1), "f" (__m2)
1173
+ );
1174
+
1175
+ return ret;
1176
+ }
1177
+
1178
+ extern __inline __m64 FUNCTION_ATTRIBS
1179
+ _mm_unpacklo_pi32(__m64 __m1, __m64 __m2)
1180
+ {
1181
+ __m64 ret;
1182
+
1183
+ asm("punpcklwd %0, %1, %2\n\t"
1184
+ : "=f" (ret)
1185
+ : "f" (__m1), "f" (__m2)
1186
+ );
1187
+
1188
+ return ret;
1189
+ }
1190
+
1191
+
1192
+ extern __inline __m64 FUNCTION_ATTRIBS
1193
+ _mm_unpacklo_pi32_f(__m64 __m1, __m64 __m2)
1194
+ {
1195
+ __m64 ret;
1196
+
1197
+ asm("punpcklwd %0, %1, %2\n\t"
1198
+ : "=f" (ret)
1199
+ : "f" (__m1), "f" (__m2)
1200
+ );
1201
+
1202
+ return ret;
1203
+ }
1204
+
1205
+ extern __inline void FUNCTION_ATTRIBS
1206
+ _mm_store_pi32(__m32 *dest, __m64 src)
1207
+ {
1208
+ src = _mm_packs_pu16(src, _mm_setzero_si64());
1209
+
1210
+ asm("swc1 %1, %0\n\t"
1211
+ : "=m" (*dest)
1212
+ : "f" (src)
1213
+ : "memory"
1214
+ );
1215
+ }
1216
+
1217
+ extern __inline void FUNCTION_ATTRIBS
1218
+ _mm_store_si64(__m64 *dest, __m64 src)
1219
+ {
1220
+ asm("gssdlc1 %1, 7+%0\n\t"
1221
+ "gssdrc1 %1, %0\n\t"
1222
+ : "=m" (*dest)
1223
+ : "f" (src)
1224
+ : "memory"
1225
+ );
1226
+ }
1227
+
1228
+ extern __inline __m64 FUNCTION_ATTRIBS
1229
+ _mm_load_si32(const __m32 *src)
1230
+ {
1231
+ __m32 ret;
1232
+
1233
+ asm("lwc1 %0, %1\n\t"
1234
+ : "=f" (ret)
1235
+ : "m" (*src)
1236
+ );
1237
+
1238
+ return ret;
1239
+ }
1240
+
1241
+ extern __inline __m64 FUNCTION_ATTRIBS
1242
+ _mm_load_si64(const __m64 *src)
1243
+ {
1244
+ __m64 ret;
1245
+
1246
+ asm("ldc1 %0, %1\n\t"
1247
+ : "=f" (ret)
1248
+ : "m" (*src)
1249
+ : "memory"
1250
+ );
1251
+
1252
+ return ret;
1253
+ }
1254
+
1255
+ extern __inline __m64 FUNCTION_ATTRIBS
1256
+ _mm_loadu_si64(const __m64 *src)
1257
+ {
1258
+ __m64 ret;
1259
+
1260
+ asm("gsldlc1 %0, 7(%1)\n\t"
1261
+ "gsldrc1 %0, 0(%1)\n\t"
1262
+ : "=f" (ret)
1263
+ : "r" (src)
1264
+ : "memory"
1265
+ );
1266
+
1267
+ return ret;
1268
+ }
1269
+
1270
+ extern __inline __m64 FUNCTION_ATTRIBS
1271
+ _mm_loadlo_pi8(const uint32_t *src)
1272
+ {
1273
+ return _mm_unpacklo_pi8_f(*(__m32 *)src, _mm_setzero_si64());
1274
+ }
1275
+
1276
+ extern __inline __m64 FUNCTION_ATTRIBS
1277
+ _mm_loadlo_pi8_f(__m64 src)
1278
+ {
1279
+ return _mm_unpacklo_pi8_f64(src, _mm_setzero_si64());
1280
+ }
1281
+
1282
+ extern __inline __m64 FUNCTION_ATTRIBS
1283
+ _mm_loadhi_pi8_f(__m64 src)
1284
+ {
1285
+ return _mm_unpackhi_pi8_f(src, _mm_setzero_si64());
1286
+ }
1287
+
1288
+ extern __inline __m64 FUNCTION_ATTRIBS
1289
+ _mm_loadlo_pi16(__m64 src)
1290
+ {
1291
+ return _mm_unpacklo_pi16(src, _mm_setzero_si64());
1292
+ }
1293
+
1294
+ extern __inline __m64 FUNCTION_ATTRIBS
1295
+ _mm_loadlo_pi16_f(__m64 src)
1296
+ {
1297
+ return _mm_unpacklo_pi16_f(_mm_setzero_si64(), src);
1298
+ }
1299
+
1300
+ extern __inline __m64 FUNCTION_ATTRIBS
1301
+ _mm_loadhi_pi16(__m64 src)
1302
+ {
1303
+ return _mm_unpackhi_pi16(src, _mm_setzero_si64());
1304
+ }
1305
+
1306
+ extern __inline __m64 FUNCTION_ATTRIBS
1307
+ _mm_loadhi_pi16_f(__m64 src)
1308
+ {
1309
+ return _mm_unpackhi_pi16_f(_mm_setzero_si64(), src);
1310
+ }
1311
+
1312
+ extern __inline __m64 FUNCTION_ATTRIBS
1313
+ _mm_expand_alpha(__m64 pixel)
1314
+ {
1315
+ return _mm_shuffle_pi16(pixel, _MM_SHUFFLE(3, 3, 3, 3));
1316
+ }
1317
+
1318
+ extern __inline __m64 FUNCTION_ATTRIBS
1319
+ _mm_expand_alpha_rev(__m64 pixel)
1320
+ {
1321
+ return _mm_shuffle_pi16(pixel, _MM_SHUFFLE(0, 0, 0, 0));
1322
+ }
1323
+
1324
+ #endif /* __LOONGSON_MMINTRIN_H__ */