image_pack 0.2.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 (319) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +18 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +140 -0
  5. data/THIRD_PARTY_NOTICES.md +8 -0
  6. data/ext/image_pack/extconf.rb +515 -0
  7. data/ext/image_pack/image_pack.c +1618 -0
  8. data/ext/image_pack/vendor/.vendored +1 -0
  9. data/ext/image_pack/vendor/mozjpeg/BUILDING.txt +902 -0
  10. data/ext/image_pack/vendor/mozjpeg/CMakeLists.txt +1593 -0
  11. data/ext/image_pack/vendor/mozjpeg/LICENSE.md +132 -0
  12. data/ext/image_pack/vendor/mozjpeg/README-mozilla.txt +194 -0
  13. data/ext/image_pack/vendor/mozjpeg/README-turbo.txt +346 -0
  14. data/ext/image_pack/vendor/mozjpeg/README.ijg +258 -0
  15. data/ext/image_pack/vendor/mozjpeg/README.md +29 -0
  16. data/ext/image_pack/vendor/mozjpeg/cderror.h +128 -0
  17. data/ext/image_pack/vendor/mozjpeg/cdjpeg.c +156 -0
  18. data/ext/image_pack/vendor/mozjpeg/cdjpeg.h +171 -0
  19. data/ext/image_pack/vendor/mozjpeg/cjpeg.c +961 -0
  20. data/ext/image_pack/vendor/mozjpeg/cmyk.h +60 -0
  21. data/ext/image_pack/vendor/mozjpeg/coderules.txt +78 -0
  22. data/ext/image_pack/vendor/mozjpeg/croptest.in +95 -0
  23. data/ext/image_pack/vendor/mozjpeg/djpeg.c +855 -0
  24. data/ext/image_pack/vendor/mozjpeg/example.txt +464 -0
  25. data/ext/image_pack/vendor/mozjpeg/jaricom.c +157 -0
  26. data/ext/image_pack/vendor/mozjpeg/jcapimin.c +307 -0
  27. data/ext/image_pack/vendor/mozjpeg/jcapistd.c +168 -0
  28. data/ext/image_pack/vendor/mozjpeg/jcarith.c +972 -0
  29. data/ext/image_pack/vendor/mozjpeg/jccoefct.c +609 -0
  30. data/ext/image_pack/vendor/mozjpeg/jccolext.c +144 -0
  31. data/ext/image_pack/vendor/mozjpeg/jccolor.c +721 -0
  32. data/ext/image_pack/vendor/mozjpeg/jcdctmgr.c +1776 -0
  33. data/ext/image_pack/vendor/mozjpeg/jcext.c +219 -0
  34. data/ext/image_pack/vendor/mozjpeg/jchuff.c +1146 -0
  35. data/ext/image_pack/vendor/mozjpeg/jchuff.h +57 -0
  36. data/ext/image_pack/vendor/mozjpeg/jcicc.c +105 -0
  37. data/ext/image_pack/vendor/mozjpeg/jcinit.c +82 -0
  38. data/ext/image_pack/vendor/mozjpeg/jcmainct.c +162 -0
  39. data/ext/image_pack/vendor/mozjpeg/jcmarker.c +844 -0
  40. data/ext/image_pack/vendor/mozjpeg/jcmaster.c +958 -0
  41. data/ext/image_pack/vendor/mozjpeg/jcmaster.h +56 -0
  42. data/ext/image_pack/vendor/mozjpeg/jcomapi.c +109 -0
  43. data/ext/image_pack/vendor/mozjpeg/jconfig.h.in +37 -0
  44. data/ext/image_pack/vendor/mozjpeg/jconfig.txt +93 -0
  45. data/ext/image_pack/vendor/mozjpeg/jconfigint.h.in +44 -0
  46. data/ext/image_pack/vendor/mozjpeg/jcparam.c +991 -0
  47. data/ext/image_pack/vendor/mozjpeg/jcphuff.c +1123 -0
  48. data/ext/image_pack/vendor/mozjpeg/jcprepct.c +351 -0
  49. data/ext/image_pack/vendor/mozjpeg/jcsample.c +522 -0
  50. data/ext/image_pack/vendor/mozjpeg/jcstest.c +126 -0
  51. data/ext/image_pack/vendor/mozjpeg/jctrans.c +408 -0
  52. data/ext/image_pack/vendor/mozjpeg/jdapimin.c +407 -0
  53. data/ext/image_pack/vendor/mozjpeg/jdapistd.c +691 -0
  54. data/ext/image_pack/vendor/mozjpeg/jdarith.c +782 -0
  55. data/ext/image_pack/vendor/mozjpeg/jdatadst-tj.c +198 -0
  56. data/ext/image_pack/vendor/mozjpeg/jdatadst.c +299 -0
  57. data/ext/image_pack/vendor/mozjpeg/jdatasrc-tj.c +194 -0
  58. data/ext/image_pack/vendor/mozjpeg/jdatasrc.c +295 -0
  59. data/ext/image_pack/vendor/mozjpeg/jdcoefct.c +881 -0
  60. data/ext/image_pack/vendor/mozjpeg/jdcoefct.h +83 -0
  61. data/ext/image_pack/vendor/mozjpeg/jdcol565.c +384 -0
  62. data/ext/image_pack/vendor/mozjpeg/jdcolext.c +141 -0
  63. data/ext/image_pack/vendor/mozjpeg/jdcolor.c +881 -0
  64. data/ext/image_pack/vendor/mozjpeg/jdct.h +208 -0
  65. data/ext/image_pack/vendor/mozjpeg/jddctmgr.c +367 -0
  66. data/ext/image_pack/vendor/mozjpeg/jdhuff.c +834 -0
  67. data/ext/image_pack/vendor/mozjpeg/jdhuff.h +247 -0
  68. data/ext/image_pack/vendor/mozjpeg/jdicc.c +167 -0
  69. data/ext/image_pack/vendor/mozjpeg/jdinput.c +408 -0
  70. data/ext/image_pack/vendor/mozjpeg/jdmainct.c +460 -0
  71. data/ext/image_pack/vendor/mozjpeg/jdmainct.h +71 -0
  72. data/ext/image_pack/vendor/mozjpeg/jdmarker.c +1374 -0
  73. data/ext/image_pack/vendor/mozjpeg/jdmaster.c +727 -0
  74. data/ext/image_pack/vendor/mozjpeg/jdmaster.h +33 -0
  75. data/ext/image_pack/vendor/mozjpeg/jdmerge.c +587 -0
  76. data/ext/image_pack/vendor/mozjpeg/jdmerge.h +47 -0
  77. data/ext/image_pack/vendor/mozjpeg/jdmrg565.c +354 -0
  78. data/ext/image_pack/vendor/mozjpeg/jdmrgext.c +184 -0
  79. data/ext/image_pack/vendor/mozjpeg/jdphuff.c +679 -0
  80. data/ext/image_pack/vendor/mozjpeg/jdpostct.c +294 -0
  81. data/ext/image_pack/vendor/mozjpeg/jdsample.c +524 -0
  82. data/ext/image_pack/vendor/mozjpeg/jdsample.h +50 -0
  83. data/ext/image_pack/vendor/mozjpeg/jdtrans.c +156 -0
  84. data/ext/image_pack/vendor/mozjpeg/jerror.c +251 -0
  85. data/ext/image_pack/vendor/mozjpeg/jerror.h +335 -0
  86. data/ext/image_pack/vendor/mozjpeg/jfdctflt.c +169 -0
  87. data/ext/image_pack/vendor/mozjpeg/jfdctfst.c +227 -0
  88. data/ext/image_pack/vendor/mozjpeg/jfdctint.c +288 -0
  89. data/ext/image_pack/vendor/mozjpeg/jidctflt.c +240 -0
  90. data/ext/image_pack/vendor/mozjpeg/jidctfst.c +371 -0
  91. data/ext/image_pack/vendor/mozjpeg/jidctint.c +2627 -0
  92. data/ext/image_pack/vendor/mozjpeg/jidctred.c +409 -0
  93. data/ext/image_pack/vendor/mozjpeg/jinclude.h +147 -0
  94. data/ext/image_pack/vendor/mozjpeg/jmemmgr.c +1180 -0
  95. data/ext/image_pack/vendor/mozjpeg/jmemnobs.c +110 -0
  96. data/ext/image_pack/vendor/mozjpeg/jmemsys.h +178 -0
  97. data/ext/image_pack/vendor/mozjpeg/jmorecfg.h +382 -0
  98. data/ext/image_pack/vendor/mozjpeg/jpeg_nbits_table.h +4098 -0
  99. data/ext/image_pack/vendor/mozjpeg/jpegcomp.h +32 -0
  100. data/ext/image_pack/vendor/mozjpeg/jpegint.h +453 -0
  101. data/ext/image_pack/vendor/mozjpeg/jpeglib.h +1211 -0
  102. data/ext/image_pack/vendor/mozjpeg/jpegtran.c +827 -0
  103. data/ext/image_pack/vendor/mozjpeg/jpegyuv.c +172 -0
  104. data/ext/image_pack/vendor/mozjpeg/jquant1.c +856 -0
  105. data/ext/image_pack/vendor/mozjpeg/jquant2.c +1286 -0
  106. data/ext/image_pack/vendor/mozjpeg/jsimd.h +123 -0
  107. data/ext/image_pack/vendor/mozjpeg/jsimd_none.c +431 -0
  108. data/ext/image_pack/vendor/mozjpeg/jsimddct.h +70 -0
  109. data/ext/image_pack/vendor/mozjpeg/jstdhuff.c +144 -0
  110. data/ext/image_pack/vendor/mozjpeg/jutils.c +133 -0
  111. data/ext/image_pack/vendor/mozjpeg/jversion.h.in +56 -0
  112. data/ext/image_pack/vendor/mozjpeg/libjpeg.map.in +11 -0
  113. data/ext/image_pack/vendor/mozjpeg/libjpeg.txt +3150 -0
  114. data/ext/image_pack/vendor/mozjpeg/rdbmp.c +690 -0
  115. data/ext/image_pack/vendor/mozjpeg/rdcolmap.c +253 -0
  116. data/ext/image_pack/vendor/mozjpeg/rdgif.c +720 -0
  117. data/ext/image_pack/vendor/mozjpeg/rdjpeg.c +160 -0
  118. data/ext/image_pack/vendor/mozjpeg/rdjpgcom.c +494 -0
  119. data/ext/image_pack/vendor/mozjpeg/rdpng.c +194 -0
  120. data/ext/image_pack/vendor/mozjpeg/rdppm.c +781 -0
  121. data/ext/image_pack/vendor/mozjpeg/rdswitch.c +642 -0
  122. data/ext/image_pack/vendor/mozjpeg/rdtarga.c +508 -0
  123. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jccolext-neon.c +148 -0
  124. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jchuff-neon.c +334 -0
  125. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd.c +976 -0
  126. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch32/jsimd_neon.S +1200 -0
  127. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jccolext-neon.c +316 -0
  128. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jchuff-neon.c +411 -0
  129. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jsimd.c +1053 -0
  130. data/ext/image_pack/vendor/mozjpeg/simd/arm/aarch64/jsimd_neon.S +2254 -0
  131. data/ext/image_pack/vendor/mozjpeg/simd/arm/align.h +28 -0
  132. data/ext/image_pack/vendor/mozjpeg/simd/arm/jccolor-neon.c +160 -0
  133. data/ext/image_pack/vendor/mozjpeg/simd/arm/jcgray-neon.c +120 -0
  134. data/ext/image_pack/vendor/mozjpeg/simd/arm/jcgryext-neon.c +106 -0
  135. data/ext/image_pack/vendor/mozjpeg/simd/arm/jchuff.h +131 -0
  136. data/ext/image_pack/vendor/mozjpeg/simd/arm/jcphuff-neon.c +623 -0
  137. data/ext/image_pack/vendor/mozjpeg/simd/arm/jcsample-neon.c +192 -0
  138. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdcolext-neon.c +374 -0
  139. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdcolor-neon.c +141 -0
  140. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdmerge-neon.c +144 -0
  141. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdmrgext-neon.c +723 -0
  142. data/ext/image_pack/vendor/mozjpeg/simd/arm/jdsample-neon.c +569 -0
  143. data/ext/image_pack/vendor/mozjpeg/simd/arm/jfdctfst-neon.c +214 -0
  144. data/ext/image_pack/vendor/mozjpeg/simd/arm/jfdctint-neon.c +376 -0
  145. data/ext/image_pack/vendor/mozjpeg/simd/arm/jidctfst-neon.c +472 -0
  146. data/ext/image_pack/vendor/mozjpeg/simd/arm/jidctint-neon.c +801 -0
  147. data/ext/image_pack/vendor/mozjpeg/simd/arm/jidctred-neon.c +486 -0
  148. data/ext/image_pack/vendor/mozjpeg/simd/arm/jquanti-neon.c +193 -0
  149. data/ext/image_pack/vendor/mozjpeg/simd/arm/neon-compat.h +26 -0
  150. data/ext/image_pack/vendor/mozjpeg/simd/arm/neon-compat.h.in +37 -0
  151. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-avx2.asm +578 -0
  152. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-mmx.asm +476 -0
  153. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolext-sse2.asm +503 -0
  154. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-avx2.asm +121 -0
  155. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-mmx.asm +121 -0
  156. data/ext/image_pack/vendor/mozjpeg/simd/i386/jccolor-sse2.asm +120 -0
  157. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-avx2.asm +113 -0
  158. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-mmx.asm +113 -0
  159. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgray-sse2.asm +112 -0
  160. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-avx2.asm +457 -0
  161. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-mmx.asm +355 -0
  162. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcgryext-sse2.asm +382 -0
  163. data/ext/image_pack/vendor/mozjpeg/simd/i386/jchuff-sse2.asm +761 -0
  164. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcphuff-sse2.asm +662 -0
  165. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-avx2.asm +388 -0
  166. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-mmx.asm +324 -0
  167. data/ext/image_pack/vendor/mozjpeg/simd/i386/jcsample-sse2.asm +351 -0
  168. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-avx2.asm +515 -0
  169. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-mmx.asm +404 -0
  170. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolext-sse2.asm +458 -0
  171. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-avx2.asm +118 -0
  172. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-mmx.asm +117 -0
  173. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdcolor-sse2.asm +117 -0
  174. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-avx2.asm +136 -0
  175. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-mmx.asm +123 -0
  176. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmerge-sse2.asm +135 -0
  177. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-avx2.asm +575 -0
  178. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-mmx.asm +460 -0
  179. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdmrgext-sse2.asm +517 -0
  180. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-avx2.asm +760 -0
  181. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-mmx.asm +731 -0
  182. data/ext/image_pack/vendor/mozjpeg/simd/i386/jdsample-sse2.asm +724 -0
  183. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctflt-3dn.asm +318 -0
  184. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctflt-sse.asm +369 -0
  185. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctfst-mmx.asm +395 -0
  186. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctfst-sse2.asm +403 -0
  187. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-avx2.asm +331 -0
  188. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-mmx.asm +620 -0
  189. data/ext/image_pack/vendor/mozjpeg/simd/i386/jfdctint-sse2.asm +633 -0
  190. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-3dn.asm +451 -0
  191. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-sse.asm +571 -0
  192. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctflt-sse2.asm +497 -0
  193. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctfst-mmx.asm +499 -0
  194. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctfst-sse2.asm +501 -0
  195. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-avx2.asm +453 -0
  196. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-mmx.asm +851 -0
  197. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctint-sse2.asm +858 -0
  198. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctred-mmx.asm +704 -0
  199. data/ext/image_pack/vendor/mozjpeg/simd/i386/jidctred-sse2.asm +592 -0
  200. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-3dn.asm +230 -0
  201. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-mmx.asm +276 -0
  202. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquant-sse.asm +208 -0
  203. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquantf-sse2.asm +168 -0
  204. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-avx2.asm +188 -0
  205. data/ext/image_pack/vendor/mozjpeg/simd/i386/jquanti-sse2.asm +201 -0
  206. data/ext/image_pack/vendor/mozjpeg/simd/i386/jsimd.c +1312 -0
  207. data/ext/image_pack/vendor/mozjpeg/simd/i386/jsimdcpu.asm +135 -0
  208. data/ext/image_pack/vendor/mozjpeg/simd/jsimd.h +1258 -0
  209. data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd.c +1143 -0
  210. data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2.S +4543 -0
  211. data/ext/image_pack/vendor/mozjpeg/simd/mips/jsimd_dspr2_asm.h +292 -0
  212. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jccolext-mmi.c +455 -0
  213. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jccolor-mmi.c +148 -0
  214. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcgray-mmi.c +132 -0
  215. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcgryext-mmi.c +374 -0
  216. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample-mmi.c +98 -0
  217. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jcsample.h +28 -0
  218. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdcolext-mmi.c +415 -0
  219. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdcolor-mmi.c +139 -0
  220. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdmerge-mmi.c +149 -0
  221. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdmrgext-mmi.c +615 -0
  222. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jdsample-mmi.c +304 -0
  223. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jfdctfst-mmi.c +255 -0
  224. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jfdctint-mmi.c +398 -0
  225. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jidctfst-mmi.c +395 -0
  226. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jidctint-mmi.c +571 -0
  227. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jquanti-mmi.c +124 -0
  228. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd.c +866 -0
  229. data/ext/image_pack/vendor/mozjpeg/simd/mips64/jsimd_mmi.h +69 -0
  230. data/ext/image_pack/vendor/mozjpeg/simd/mips64/loongson-mmintrin.h +1334 -0
  231. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jcolsamp.inc +135 -0
  232. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jdct.inc +31 -0
  233. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdcfg.inc +93 -0
  234. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdcfg.inc.h +133 -0
  235. data/ext/image_pack/vendor/mozjpeg/simd/nasm/jsimdext.inc +520 -0
  236. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jccolext-altivec.c +269 -0
  237. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jccolor-altivec.c +116 -0
  238. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcgray-altivec.c +111 -0
  239. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcgryext-altivec.c +228 -0
  240. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample-altivec.c +159 -0
  241. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jcsample.h +28 -0
  242. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdcolext-altivec.c +276 -0
  243. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdcolor-altivec.c +106 -0
  244. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdmerge-altivec.c +130 -0
  245. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdmrgext-altivec.c +329 -0
  246. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jdsample-altivec.c +400 -0
  247. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jfdctfst-altivec.c +154 -0
  248. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jfdctint-altivec.c +258 -0
  249. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jidctfst-altivec.c +255 -0
  250. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jidctint-altivec.c +357 -0
  251. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jquanti-altivec.c +250 -0
  252. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd.c +884 -0
  253. data/ext/image_pack/vendor/mozjpeg/simd/powerpc/jsimd_altivec.h +98 -0
  254. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolext-avx2.asm +559 -0
  255. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolext-sse2.asm +484 -0
  256. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolor-avx2.asm +121 -0
  257. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jccolor-sse2.asm +120 -0
  258. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgray-avx2.asm +113 -0
  259. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgray-sse2.asm +112 -0
  260. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgryext-avx2.asm +438 -0
  261. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcgryext-sse2.asm +363 -0
  262. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jchuff-sse2.asm +583 -0
  263. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcphuff-sse2.asm +639 -0
  264. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcsample-avx2.asm +367 -0
  265. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jcsample-sse2.asm +330 -0
  266. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolext-avx2.asm +496 -0
  267. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolext-sse2.asm +439 -0
  268. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolor-avx2.asm +118 -0
  269. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdcolor-sse2.asm +117 -0
  270. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmerge-avx2.asm +136 -0
  271. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmerge-sse2.asm +135 -0
  272. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmrgext-avx2.asm +596 -0
  273. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdmrgext-sse2.asm +538 -0
  274. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdsample-avx2.asm +696 -0
  275. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jdsample-sse2.asm +665 -0
  276. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctflt-sse.asm +355 -0
  277. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctfst-sse2.asm +389 -0
  278. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctint-avx2.asm +320 -0
  279. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jfdctint-sse2.asm +619 -0
  280. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctflt-sse2.asm +482 -0
  281. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctfst-sse2.asm +491 -0
  282. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctint-avx2.asm +418 -0
  283. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctint-sse2.asm +847 -0
  284. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jidctred-sse2.asm +574 -0
  285. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jquantf-sse2.asm +155 -0
  286. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jquanti-avx2.asm +163 -0
  287. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jquanti-sse2.asm +188 -0
  288. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jsimd.c +1110 -0
  289. data/ext/image_pack/vendor/mozjpeg/simd/x86_64/jsimdcpu.asm +86 -0
  290. data/ext/image_pack/vendor/mozjpeg/strtest.c +170 -0
  291. data/ext/image_pack/vendor/mozjpeg/structure.txt +900 -0
  292. data/ext/image_pack/vendor/mozjpeg/tjbench.c +1044 -0
  293. data/ext/image_pack/vendor/mozjpeg/tjbenchtest.in +256 -0
  294. data/ext/image_pack/vendor/mozjpeg/tjbenchtest.java.in +215 -0
  295. data/ext/image_pack/vendor/mozjpeg/tjexample.c +406 -0
  296. data/ext/image_pack/vendor/mozjpeg/tjexampletest.in +149 -0
  297. data/ext/image_pack/vendor/mozjpeg/tjexampletest.java.in +151 -0
  298. data/ext/image_pack/vendor/mozjpeg/tjunittest.c +961 -0
  299. data/ext/image_pack/vendor/mozjpeg/tjutil.c +70 -0
  300. data/ext/image_pack/vendor/mozjpeg/tjutil.h +53 -0
  301. data/ext/image_pack/vendor/mozjpeg/transupp.c +2373 -0
  302. data/ext/image_pack/vendor/mozjpeg/transupp.h +243 -0
  303. data/ext/image_pack/vendor/mozjpeg/turbojpeg-jni.c +1259 -0
  304. data/ext/image_pack/vendor/mozjpeg/turbojpeg.c +2320 -0
  305. data/ext/image_pack/vendor/mozjpeg/turbojpeg.h +1784 -0
  306. data/ext/image_pack/vendor/mozjpeg/usage.txt +679 -0
  307. data/ext/image_pack/vendor/mozjpeg/wizard.txt +220 -0
  308. data/ext/image_pack/vendor/mozjpeg/wrbmp.c +552 -0
  309. data/ext/image_pack/vendor/mozjpeg/wrgif.c +580 -0
  310. data/ext/image_pack/vendor/mozjpeg/wrjpgcom.c +577 -0
  311. data/ext/image_pack/vendor/mozjpeg/wrppm.c +366 -0
  312. data/ext/image_pack/vendor/mozjpeg/wrtarga.c +258 -0
  313. data/ext/image_pack/vendor/mozjpeg/yuvjpeg.c +268 -0
  314. data/lib/image_pack/backend.rb +8 -0
  315. data/lib/image_pack/configuration.rb +23 -0
  316. data/lib/image_pack/errors.rb +13 -0
  317. data/lib/image_pack/version.rb +5 -0
  318. data/lib/image_pack.rb +208 -0
  319. metadata +433 -0
@@ -0,0 +1,484 @@
1
+ ;
2
+ ; jccolext.asm - colorspace conversion (64-bit SSE2)
3
+ ;
4
+ ; Copyright (C) 2009, 2016, D. R. Commander.
5
+ ; Copyright (C) 2018, Matthias Räncker.
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
+ %include "jcolsamp.inc"
18
+
19
+ ; --------------------------------------------------------------------------
20
+ ;
21
+ ; Convert some rows of samples to the output colorspace.
22
+ ;
23
+ ; GLOBAL(void)
24
+ ; jsimd_rgb_ycc_convert_sse2(JDIMENSION img_width, JSAMPARRAY input_buf,
25
+ ; JSAMPIMAGE output_buf, JDIMENSION output_row,
26
+ ; int num_rows);
27
+ ;
28
+
29
+ ; r10d = JDIMENSION img_width
30
+ ; r11 = JSAMPARRAY input_buf
31
+ ; r12 = JSAMPIMAGE output_buf
32
+ ; r13d = JDIMENSION output_row
33
+ ; r14d = int num_rows
34
+
35
+ %define wk(i) rbp - (WK_NUM - (i)) * SIZEOF_XMMWORD ; xmmword wk[WK_NUM]
36
+ %define WK_NUM 8
37
+
38
+ align 32
39
+ GLOBAL_FUNCTION(jsimd_rgb_ycc_convert_sse2)
40
+
41
+ EXTN(jsimd_rgb_ycc_convert_sse2):
42
+ push rbp
43
+ mov rax, rsp ; rax = original rbp
44
+ sub rsp, byte 4
45
+ and rsp, byte (-SIZEOF_XMMWORD) ; align to 128 bits
46
+ mov [rsp], rax
47
+ mov rbp, rsp ; rbp = aligned rbp
48
+ lea rsp, [wk(0)]
49
+ collect_args 5
50
+ push rbx
51
+
52
+ mov ecx, r10d
53
+ test rcx, rcx
54
+ jz near .return
55
+
56
+ push rcx
57
+
58
+ mov rsi, r12
59
+ mov ecx, r13d
60
+ mov rdip, JSAMPARRAY [rsi+0*SIZEOF_JSAMPARRAY]
61
+ mov rbxp, JSAMPARRAY [rsi+1*SIZEOF_JSAMPARRAY]
62
+ mov rdxp, JSAMPARRAY [rsi+2*SIZEOF_JSAMPARRAY]
63
+ lea rdi, [rdi+rcx*SIZEOF_JSAMPROW]
64
+ lea rbx, [rbx+rcx*SIZEOF_JSAMPROW]
65
+ lea rdx, [rdx+rcx*SIZEOF_JSAMPROW]
66
+
67
+ pop rcx
68
+
69
+ mov rsi, r11
70
+ mov eax, r14d
71
+ test rax, rax
72
+ jle near .return
73
+ .rowloop:
74
+ push rdx
75
+ push rbx
76
+ push rdi
77
+ push rsi
78
+ push rcx ; col
79
+
80
+ mov rsip, JSAMPROW [rsi] ; inptr
81
+ mov rdip, JSAMPROW [rdi] ; outptr0
82
+ mov rbxp, JSAMPROW [rbx] ; outptr1
83
+ mov rdxp, JSAMPROW [rdx] ; outptr2
84
+
85
+ cmp rcx, byte SIZEOF_XMMWORD
86
+ jae near .columnloop
87
+
88
+ %if RGB_PIXELSIZE == 3 ; ---------------
89
+
90
+ .column_ld1:
91
+ push rax
92
+ push rdx
93
+ lea rcx, [rcx+rcx*2] ; imul ecx,RGB_PIXELSIZE
94
+ test cl, SIZEOF_BYTE
95
+ jz short .column_ld2
96
+ sub rcx, byte SIZEOF_BYTE
97
+ movzx rax, byte [rsi+rcx]
98
+ .column_ld2:
99
+ test cl, SIZEOF_WORD
100
+ jz short .column_ld4
101
+ sub rcx, byte SIZEOF_WORD
102
+ movzx rdx, word [rsi+rcx]
103
+ shl rax, WORD_BIT
104
+ or rax, rdx
105
+ .column_ld4:
106
+ movd xmmA, eax
107
+ pop rdx
108
+ pop rax
109
+ test cl, SIZEOF_DWORD
110
+ jz short .column_ld8
111
+ sub rcx, byte SIZEOF_DWORD
112
+ movd xmmF, XMM_DWORD [rsi+rcx]
113
+ pslldq xmmA, SIZEOF_DWORD
114
+ por xmmA, xmmF
115
+ .column_ld8:
116
+ test cl, SIZEOF_MMWORD
117
+ jz short .column_ld16
118
+ sub rcx, byte SIZEOF_MMWORD
119
+ movq xmmB, XMM_MMWORD [rsi+rcx]
120
+ pslldq xmmA, SIZEOF_MMWORD
121
+ por xmmA, xmmB
122
+ .column_ld16:
123
+ test cl, SIZEOF_XMMWORD
124
+ jz short .column_ld32
125
+ movdqa xmmF, xmmA
126
+ movdqu xmmA, XMMWORD [rsi+0*SIZEOF_XMMWORD]
127
+ mov rcx, SIZEOF_XMMWORD
128
+ jmp short .rgb_ycc_cnv
129
+ .column_ld32:
130
+ test cl, 2*SIZEOF_XMMWORD
131
+ mov rcx, SIZEOF_XMMWORD
132
+ jz short .rgb_ycc_cnv
133
+ movdqa xmmB, xmmA
134
+ movdqu xmmA, XMMWORD [rsi+0*SIZEOF_XMMWORD]
135
+ movdqu xmmF, XMMWORD [rsi+1*SIZEOF_XMMWORD]
136
+ jmp short .rgb_ycc_cnv
137
+
138
+ .columnloop:
139
+ movdqu xmmA, XMMWORD [rsi+0*SIZEOF_XMMWORD]
140
+ movdqu xmmF, XMMWORD [rsi+1*SIZEOF_XMMWORD]
141
+ movdqu xmmB, XMMWORD [rsi+2*SIZEOF_XMMWORD]
142
+
143
+ .rgb_ycc_cnv:
144
+ ; xmmA=(00 10 20 01 11 21 02 12 22 03 13 23 04 14 24 05)
145
+ ; xmmF=(15 25 06 16 26 07 17 27 08 18 28 09 19 29 0A 1A)
146
+ ; xmmB=(2A 0B 1B 2B 0C 1C 2C 0D 1D 2D 0E 1E 2E 0F 1F 2F)
147
+
148
+ movdqa xmmG, xmmA
149
+ pslldq xmmA, 8 ; xmmA=(-- -- -- -- -- -- -- -- 00 10 20 01 11 21 02 12)
150
+ psrldq xmmG, 8 ; xmmG=(22 03 13 23 04 14 24 05 -- -- -- -- -- -- -- --)
151
+
152
+ punpckhbw xmmA, xmmF ; xmmA=(00 08 10 18 20 28 01 09 11 19 21 29 02 0A 12 1A)
153
+ pslldq xmmF, 8 ; xmmF=(-- -- -- -- -- -- -- -- 15 25 06 16 26 07 17 27)
154
+
155
+ punpcklbw xmmG, xmmB ; xmmG=(22 2A 03 0B 13 1B 23 2B 04 0C 14 1C 24 2C 05 0D)
156
+ punpckhbw xmmF, xmmB ; xmmF=(15 1D 25 2D 06 0E 16 1E 26 2E 07 0F 17 1F 27 2F)
157
+
158
+ movdqa xmmD, xmmA
159
+ pslldq xmmA, 8 ; xmmA=(-- -- -- -- -- -- -- -- 00 08 10 18 20 28 01 09)
160
+ psrldq xmmD, 8 ; xmmD=(11 19 21 29 02 0A 12 1A -- -- -- -- -- -- -- --)
161
+
162
+ punpckhbw xmmA, xmmG ; xmmA=(00 04 08 0C 10 14 18 1C 20 24 28 2C 01 05 09 0D)
163
+ pslldq xmmG, 8 ; xmmG=(-- -- -- -- -- -- -- -- 22 2A 03 0B 13 1B 23 2B)
164
+
165
+ punpcklbw xmmD, xmmF ; xmmD=(11 15 19 1D 21 25 29 2D 02 06 0A 0E 12 16 1A 1E)
166
+ punpckhbw xmmG, xmmF ; xmmG=(22 26 2A 2E 03 07 0B 0F 13 17 1B 1F 23 27 2B 2F)
167
+
168
+ movdqa xmmE, xmmA
169
+ pslldq xmmA, 8 ; xmmA=(-- -- -- -- -- -- -- -- 00 04 08 0C 10 14 18 1C)
170
+ psrldq xmmE, 8 ; xmmE=(20 24 28 2C 01 05 09 0D -- -- -- -- -- -- -- --)
171
+
172
+ punpckhbw xmmA, xmmD ; xmmA=(00 02 04 06 08 0A 0C 0E 10 12 14 16 18 1A 1C 1E)
173
+ pslldq xmmD, 8 ; xmmD=(-- -- -- -- -- -- -- -- 11 15 19 1D 21 25 29 2D)
174
+
175
+ punpcklbw xmmE, xmmG ; xmmE=(20 22 24 26 28 2A 2C 2E 01 03 05 07 09 0B 0D 0F)
176
+ punpckhbw xmmD, xmmG ; xmmD=(11 13 15 17 19 1B 1D 1F 21 23 25 27 29 2B 2D 2F)
177
+
178
+ pxor xmmH, xmmH
179
+
180
+ movdqa xmmC, xmmA
181
+ punpcklbw xmmA, xmmH ; xmmA=(00 02 04 06 08 0A 0C 0E)
182
+ punpckhbw xmmC, xmmH ; xmmC=(10 12 14 16 18 1A 1C 1E)
183
+
184
+ movdqa xmmB, xmmE
185
+ punpcklbw xmmE, xmmH ; xmmE=(20 22 24 26 28 2A 2C 2E)
186
+ punpckhbw xmmB, xmmH ; xmmB=(01 03 05 07 09 0B 0D 0F)
187
+
188
+ movdqa xmmF, xmmD
189
+ punpcklbw xmmD, xmmH ; xmmD=(11 13 15 17 19 1B 1D 1F)
190
+ punpckhbw xmmF, xmmH ; xmmF=(21 23 25 27 29 2B 2D 2F)
191
+
192
+ %else ; RGB_PIXELSIZE == 4 ; -----------
193
+
194
+ .column_ld1:
195
+ test cl, SIZEOF_XMMWORD/16
196
+ jz short .column_ld2
197
+ sub rcx, byte SIZEOF_XMMWORD/16
198
+ movd xmmA, XMM_DWORD [rsi+rcx*RGB_PIXELSIZE]
199
+ .column_ld2:
200
+ test cl, SIZEOF_XMMWORD/8
201
+ jz short .column_ld4
202
+ sub rcx, byte SIZEOF_XMMWORD/8
203
+ movq xmmE, XMM_MMWORD [rsi+rcx*RGB_PIXELSIZE]
204
+ pslldq xmmA, SIZEOF_MMWORD
205
+ por xmmA, xmmE
206
+ .column_ld4:
207
+ test cl, SIZEOF_XMMWORD/4
208
+ jz short .column_ld8
209
+ sub rcx, byte SIZEOF_XMMWORD/4
210
+ movdqa xmmE, xmmA
211
+ movdqu xmmA, XMMWORD [rsi+rcx*RGB_PIXELSIZE]
212
+ .column_ld8:
213
+ test cl, SIZEOF_XMMWORD/2
214
+ mov rcx, SIZEOF_XMMWORD
215
+ jz short .rgb_ycc_cnv
216
+ movdqa xmmF, xmmA
217
+ movdqa xmmH, xmmE
218
+ movdqu xmmA, XMMWORD [rsi+0*SIZEOF_XMMWORD]
219
+ movdqu xmmE, XMMWORD [rsi+1*SIZEOF_XMMWORD]
220
+ jmp short .rgb_ycc_cnv
221
+
222
+ .columnloop:
223
+ movdqu xmmA, XMMWORD [rsi+0*SIZEOF_XMMWORD]
224
+ movdqu xmmE, XMMWORD [rsi+1*SIZEOF_XMMWORD]
225
+ movdqu xmmF, XMMWORD [rsi+2*SIZEOF_XMMWORD]
226
+ movdqu xmmH, XMMWORD [rsi+3*SIZEOF_XMMWORD]
227
+
228
+ .rgb_ycc_cnv:
229
+ ; xmmA=(00 10 20 30 01 11 21 31 02 12 22 32 03 13 23 33)
230
+ ; xmmE=(04 14 24 34 05 15 25 35 06 16 26 36 07 17 27 37)
231
+ ; xmmF=(08 18 28 38 09 19 29 39 0A 1A 2A 3A 0B 1B 2B 3B)
232
+ ; xmmH=(0C 1C 2C 3C 0D 1D 2D 3D 0E 1E 2E 3E 0F 1F 2F 3F)
233
+
234
+ movdqa xmmD, xmmA
235
+ punpcklbw xmmA, xmmE ; xmmA=(00 04 10 14 20 24 30 34 01 05 11 15 21 25 31 35)
236
+ punpckhbw xmmD, xmmE ; xmmD=(02 06 12 16 22 26 32 36 03 07 13 17 23 27 33 37)
237
+
238
+ movdqa xmmC, xmmF
239
+ punpcklbw xmmF, xmmH ; xmmF=(08 0C 18 1C 28 2C 38 3C 09 0D 19 1D 29 2D 39 3D)
240
+ punpckhbw xmmC, xmmH ; xmmC=(0A 0E 1A 1E 2A 2E 3A 3E 0B 0F 1B 1F 2B 2F 3B 3F)
241
+
242
+ movdqa xmmB, xmmA
243
+ punpcklwd xmmA, xmmF ; xmmA=(00 04 08 0C 10 14 18 1C 20 24 28 2C 30 34 38 3C)
244
+ punpckhwd xmmB, xmmF ; xmmB=(01 05 09 0D 11 15 19 1D 21 25 29 2D 31 35 39 3D)
245
+
246
+ movdqa xmmG, xmmD
247
+ punpcklwd xmmD, xmmC ; xmmD=(02 06 0A 0E 12 16 1A 1E 22 26 2A 2E 32 36 3A 3E)
248
+ punpckhwd xmmG, xmmC ; xmmG=(03 07 0B 0F 13 17 1B 1F 23 27 2B 2F 33 37 3B 3F)
249
+
250
+ movdqa xmmE, xmmA
251
+ punpcklbw xmmA, xmmD ; xmmA=(00 02 04 06 08 0A 0C 0E 10 12 14 16 18 1A 1C 1E)
252
+ punpckhbw xmmE, xmmD ; xmmE=(20 22 24 26 28 2A 2C 2E 30 32 34 36 38 3A 3C 3E)
253
+
254
+ movdqa xmmH, xmmB
255
+ punpcklbw xmmB, xmmG ; xmmB=(01 03 05 07 09 0B 0D 0F 11 13 15 17 19 1B 1D 1F)
256
+ punpckhbw xmmH, xmmG ; xmmH=(21 23 25 27 29 2B 2D 2F 31 33 35 37 39 3B 3D 3F)
257
+
258
+ pxor xmmF, xmmF
259
+
260
+ movdqa xmmC, xmmA
261
+ punpcklbw xmmA, xmmF ; xmmA=(00 02 04 06 08 0A 0C 0E)
262
+ punpckhbw xmmC, xmmF ; xmmC=(10 12 14 16 18 1A 1C 1E)
263
+
264
+ movdqa xmmD, xmmB
265
+ punpcklbw xmmB, xmmF ; xmmB=(01 03 05 07 09 0B 0D 0F)
266
+ punpckhbw xmmD, xmmF ; xmmD=(11 13 15 17 19 1B 1D 1F)
267
+
268
+ movdqa xmmG, xmmE
269
+ punpcklbw xmmE, xmmF ; xmmE=(20 22 24 26 28 2A 2C 2E)
270
+ punpckhbw xmmG, xmmF ; xmmG=(30 32 34 36 38 3A 3C 3E)
271
+
272
+ punpcklbw xmmF, xmmH
273
+ punpckhbw xmmH, xmmH
274
+ psrlw xmmF, BYTE_BIT ; xmmF=(21 23 25 27 29 2B 2D 2F)
275
+ psrlw xmmH, BYTE_BIT ; xmmH=(31 33 35 37 39 3B 3D 3F)
276
+
277
+ %endif ; RGB_PIXELSIZE ; ---------------
278
+
279
+ ; xmm0=R(02468ACE)=RE, xmm2=G(02468ACE)=GE, xmm4=B(02468ACE)=BE
280
+ ; xmm1=R(13579BDF)=RO, xmm3=G(13579BDF)=GO, xmm5=B(13579BDF)=BO
281
+
282
+ ; (Original)
283
+ ; Y = 0.29900 * R + 0.58700 * G + 0.11400 * B
284
+ ; Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + CENTERJSAMPLE
285
+ ; Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + CENTERJSAMPLE
286
+ ;
287
+ ; (This implementation)
288
+ ; Y = 0.29900 * R + 0.33700 * G + 0.11400 * B + 0.25000 * G
289
+ ; Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + CENTERJSAMPLE
290
+ ; Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + CENTERJSAMPLE
291
+
292
+ movdqa XMMWORD [wk(0)], xmm0 ; wk(0)=RE
293
+ movdqa XMMWORD [wk(1)], xmm1 ; wk(1)=RO
294
+ movdqa XMMWORD [wk(2)], xmm4 ; wk(2)=BE
295
+ movdqa XMMWORD [wk(3)], xmm5 ; wk(3)=BO
296
+
297
+ movdqa xmm6, xmm1
298
+ punpcklwd xmm1, xmm3
299
+ punpckhwd xmm6, xmm3
300
+ movdqa xmm7, xmm1
301
+ movdqa xmm4, xmm6
302
+ pmaddwd xmm1, [rel PW_F0299_F0337] ; xmm1=ROL*FIX(0.299)+GOL*FIX(0.337)
303
+ pmaddwd xmm6, [rel PW_F0299_F0337] ; xmm6=ROH*FIX(0.299)+GOH*FIX(0.337)
304
+ pmaddwd xmm7, [rel PW_MF016_MF033] ; xmm7=ROL*-FIX(0.168)+GOL*-FIX(0.331)
305
+ pmaddwd xmm4, [rel PW_MF016_MF033] ; xmm4=ROH*-FIX(0.168)+GOH*-FIX(0.331)
306
+
307
+ movdqa XMMWORD [wk(4)], xmm1 ; wk(4)=ROL*FIX(0.299)+GOL*FIX(0.337)
308
+ movdqa XMMWORD [wk(5)], xmm6 ; wk(5)=ROH*FIX(0.299)+GOH*FIX(0.337)
309
+
310
+ pxor xmm1, xmm1
311
+ pxor xmm6, xmm6
312
+ punpcklwd xmm1, xmm5 ; xmm1=BOL
313
+ punpckhwd xmm6, xmm5 ; xmm6=BOH
314
+ psrld xmm1, 1 ; xmm1=BOL*FIX(0.500)
315
+ psrld xmm6, 1 ; xmm6=BOH*FIX(0.500)
316
+
317
+ movdqa xmm5, [rel PD_ONEHALFM1_CJ] ; xmm5=[PD_ONEHALFM1_CJ]
318
+
319
+ paddd xmm7, xmm1
320
+ paddd xmm4, xmm6
321
+ paddd xmm7, xmm5
322
+ paddd xmm4, xmm5
323
+ psrld xmm7, SCALEBITS ; xmm7=CbOL
324
+ psrld xmm4, SCALEBITS ; xmm4=CbOH
325
+ packssdw xmm7, xmm4 ; xmm7=CbO
326
+
327
+ movdqa xmm1, XMMWORD [wk(2)] ; xmm1=BE
328
+
329
+ movdqa xmm6, xmm0
330
+ punpcklwd xmm0, xmm2
331
+ punpckhwd xmm6, xmm2
332
+ movdqa xmm5, xmm0
333
+ movdqa xmm4, xmm6
334
+ pmaddwd xmm0, [rel PW_F0299_F0337] ; xmm0=REL*FIX(0.299)+GEL*FIX(0.337)
335
+ pmaddwd xmm6, [rel PW_F0299_F0337] ; xmm6=REH*FIX(0.299)+GEH*FIX(0.337)
336
+ pmaddwd xmm5, [rel PW_MF016_MF033] ; xmm5=REL*-FIX(0.168)+GEL*-FIX(0.331)
337
+ pmaddwd xmm4, [rel PW_MF016_MF033] ; xmm4=REH*-FIX(0.168)+GEH*-FIX(0.331)
338
+
339
+ movdqa XMMWORD [wk(6)], xmm0 ; wk(6)=REL*FIX(0.299)+GEL*FIX(0.337)
340
+ movdqa XMMWORD [wk(7)], xmm6 ; wk(7)=REH*FIX(0.299)+GEH*FIX(0.337)
341
+
342
+ pxor xmm0, xmm0
343
+ pxor xmm6, xmm6
344
+ punpcklwd xmm0, xmm1 ; xmm0=BEL
345
+ punpckhwd xmm6, xmm1 ; xmm6=BEH
346
+ psrld xmm0, 1 ; xmm0=BEL*FIX(0.500)
347
+ psrld xmm6, 1 ; xmm6=BEH*FIX(0.500)
348
+
349
+ movdqa xmm1, [rel PD_ONEHALFM1_CJ] ; xmm1=[PD_ONEHALFM1_CJ]
350
+
351
+ paddd xmm5, xmm0
352
+ paddd xmm4, xmm6
353
+ paddd xmm5, xmm1
354
+ paddd xmm4, xmm1
355
+ psrld xmm5, SCALEBITS ; xmm5=CbEL
356
+ psrld xmm4, SCALEBITS ; xmm4=CbEH
357
+ packssdw xmm5, xmm4 ; xmm5=CbE
358
+
359
+ psllw xmm7, BYTE_BIT
360
+ por xmm5, xmm7 ; xmm5=Cb
361
+ movdqa XMMWORD [rbx], xmm5 ; Save Cb
362
+
363
+ movdqa xmm0, XMMWORD [wk(3)] ; xmm0=BO
364
+ movdqa xmm6, XMMWORD [wk(2)] ; xmm6=BE
365
+ movdqa xmm1, XMMWORD [wk(1)] ; xmm1=RO
366
+
367
+ movdqa xmm4, xmm0
368
+ punpcklwd xmm0, xmm3
369
+ punpckhwd xmm4, xmm3
370
+ movdqa xmm7, xmm0
371
+ movdqa xmm5, xmm4
372
+ pmaddwd xmm0, [rel PW_F0114_F0250] ; xmm0=BOL*FIX(0.114)+GOL*FIX(0.250)
373
+ pmaddwd xmm4, [rel PW_F0114_F0250] ; xmm4=BOH*FIX(0.114)+GOH*FIX(0.250)
374
+ pmaddwd xmm7, [rel PW_MF008_MF041] ; xmm7=BOL*-FIX(0.081)+GOL*-FIX(0.418)
375
+ pmaddwd xmm5, [rel PW_MF008_MF041] ; xmm5=BOH*-FIX(0.081)+GOH*-FIX(0.418)
376
+
377
+ movdqa xmm3, [rel PD_ONEHALF] ; xmm3=[PD_ONEHALF]
378
+
379
+ paddd xmm0, XMMWORD [wk(4)]
380
+ paddd xmm4, XMMWORD [wk(5)]
381
+ paddd xmm0, xmm3
382
+ paddd xmm4, xmm3
383
+ psrld xmm0, SCALEBITS ; xmm0=YOL
384
+ psrld xmm4, SCALEBITS ; xmm4=YOH
385
+ packssdw xmm0, xmm4 ; xmm0=YO
386
+
387
+ pxor xmm3, xmm3
388
+ pxor xmm4, xmm4
389
+ punpcklwd xmm3, xmm1 ; xmm3=ROL
390
+ punpckhwd xmm4, xmm1 ; xmm4=ROH
391
+ psrld xmm3, 1 ; xmm3=ROL*FIX(0.500)
392
+ psrld xmm4, 1 ; xmm4=ROH*FIX(0.500)
393
+
394
+ movdqa xmm1, [rel PD_ONEHALFM1_CJ] ; xmm1=[PD_ONEHALFM1_CJ]
395
+
396
+ paddd xmm7, xmm3
397
+ paddd xmm5, xmm4
398
+ paddd xmm7, xmm1
399
+ paddd xmm5, xmm1
400
+ psrld xmm7, SCALEBITS ; xmm7=CrOL
401
+ psrld xmm5, SCALEBITS ; xmm5=CrOH
402
+ packssdw xmm7, xmm5 ; xmm7=CrO
403
+
404
+ movdqa xmm3, XMMWORD [wk(0)] ; xmm3=RE
405
+
406
+ movdqa xmm4, xmm6
407
+ punpcklwd xmm6, xmm2
408
+ punpckhwd xmm4, xmm2
409
+ movdqa xmm1, xmm6
410
+ movdqa xmm5, xmm4
411
+ pmaddwd xmm6, [rel PW_F0114_F0250] ; xmm6=BEL*FIX(0.114)+GEL*FIX(0.250)
412
+ pmaddwd xmm4, [rel PW_F0114_F0250] ; xmm4=BEH*FIX(0.114)+GEH*FIX(0.250)
413
+ pmaddwd xmm1, [rel PW_MF008_MF041] ; xmm1=BEL*-FIX(0.081)+GEL*-FIX(0.418)
414
+ pmaddwd xmm5, [rel PW_MF008_MF041] ; xmm5=BEH*-FIX(0.081)+GEH*-FIX(0.418)
415
+
416
+ movdqa xmm2, [rel PD_ONEHALF] ; xmm2=[PD_ONEHALF]
417
+
418
+ paddd xmm6, XMMWORD [wk(6)]
419
+ paddd xmm4, XMMWORD [wk(7)]
420
+ paddd xmm6, xmm2
421
+ paddd xmm4, xmm2
422
+ psrld xmm6, SCALEBITS ; xmm6=YEL
423
+ psrld xmm4, SCALEBITS ; xmm4=YEH
424
+ packssdw xmm6, xmm4 ; xmm6=YE
425
+
426
+ psllw xmm0, BYTE_BIT
427
+ por xmm6, xmm0 ; xmm6=Y
428
+ movdqa XMMWORD [rdi], xmm6 ; Save Y
429
+
430
+ pxor xmm2, xmm2
431
+ pxor xmm4, xmm4
432
+ punpcklwd xmm2, xmm3 ; xmm2=REL
433
+ punpckhwd xmm4, xmm3 ; xmm4=REH
434
+ psrld xmm2, 1 ; xmm2=REL*FIX(0.500)
435
+ psrld xmm4, 1 ; xmm4=REH*FIX(0.500)
436
+
437
+ movdqa xmm0, [rel PD_ONEHALFM1_CJ] ; xmm0=[PD_ONEHALFM1_CJ]
438
+
439
+ paddd xmm1, xmm2
440
+ paddd xmm5, xmm4
441
+ paddd xmm1, xmm0
442
+ paddd xmm5, xmm0
443
+ psrld xmm1, SCALEBITS ; xmm1=CrEL
444
+ psrld xmm5, SCALEBITS ; xmm5=CrEH
445
+ packssdw xmm1, xmm5 ; xmm1=CrE
446
+
447
+ psllw xmm7, BYTE_BIT
448
+ por xmm1, xmm7 ; xmm1=Cr
449
+ movdqa XMMWORD [rdx], xmm1 ; Save Cr
450
+
451
+ sub rcx, byte SIZEOF_XMMWORD
452
+ add rsi, byte RGB_PIXELSIZE*SIZEOF_XMMWORD ; inptr
453
+ add rdi, byte SIZEOF_XMMWORD ; outptr0
454
+ add rbx, byte SIZEOF_XMMWORD ; outptr1
455
+ add rdx, byte SIZEOF_XMMWORD ; outptr2
456
+ cmp rcx, byte SIZEOF_XMMWORD
457
+ jae near .columnloop
458
+ test rcx, rcx
459
+ jnz near .column_ld1
460
+
461
+ pop rcx ; col
462
+ pop rsi
463
+ pop rdi
464
+ pop rbx
465
+ pop rdx
466
+
467
+ add rsi, byte SIZEOF_JSAMPROW ; input_buf
468
+ add rdi, byte SIZEOF_JSAMPROW
469
+ add rbx, byte SIZEOF_JSAMPROW
470
+ add rdx, byte SIZEOF_JSAMPROW
471
+ dec rax ; num_rows
472
+ jg near .rowloop
473
+
474
+ .return:
475
+ pop rbx
476
+ uncollect_args 5
477
+ mov rsp, rbp ; rsp <- aligned rbp
478
+ pop rsp ; rsp <- original rbp
479
+ pop rbp
480
+ ret
481
+
482
+ ; For some reason, the OS X linker does not honor the request to align the
483
+ ; segment unless we do this.
484
+ align 32
@@ -0,0 +1,121 @@
1
+ ;
2
+ ; jccolor.asm - colorspace conversion (64-bit AVX2)
3
+ ;
4
+ ; Copyright (C) 2009, 2016, D. R. Commander.
5
+ ; Copyright (C) 2015, Intel Corporation.
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
+ %include "jsimdext.inc"
18
+
19
+ ; --------------------------------------------------------------------------
20
+
21
+ %define SCALEBITS 16
22
+
23
+ F_0_081 equ 5329 ; FIX(0.08131)
24
+ F_0_114 equ 7471 ; FIX(0.11400)
25
+ F_0_168 equ 11059 ; FIX(0.16874)
26
+ F_0_250 equ 16384 ; FIX(0.25000)
27
+ F_0_299 equ 19595 ; FIX(0.29900)
28
+ F_0_331 equ 21709 ; FIX(0.33126)
29
+ F_0_418 equ 27439 ; FIX(0.41869)
30
+ F_0_587 equ 38470 ; FIX(0.58700)
31
+ F_0_337 equ (F_0_587 - F_0_250) ; FIX(0.58700) - FIX(0.25000)
32
+
33
+ ; --------------------------------------------------------------------------
34
+ SECTION SEG_CONST
35
+
36
+ alignz 32
37
+ GLOBAL_DATA(jconst_rgb_ycc_convert_avx2)
38
+
39
+ EXTN(jconst_rgb_ycc_convert_avx2):
40
+
41
+ PW_F0299_F0337 times 8 dw F_0_299, F_0_337
42
+ PW_F0114_F0250 times 8 dw F_0_114, F_0_250
43
+ PW_MF016_MF033 times 8 dw -F_0_168, -F_0_331
44
+ PW_MF008_MF041 times 8 dw -F_0_081, -F_0_418
45
+ PD_ONEHALFM1_CJ times 8 dd (1 << (SCALEBITS - 1)) - 1 + \
46
+ (CENTERJSAMPLE << SCALEBITS)
47
+ PD_ONEHALF times 8 dd (1 << (SCALEBITS - 1))
48
+
49
+ alignz 32
50
+
51
+ ; --------------------------------------------------------------------------
52
+ SECTION SEG_TEXT
53
+ BITS 64
54
+
55
+ %include "jccolext-avx2.asm"
56
+
57
+ %undef RGB_RED
58
+ %undef RGB_GREEN
59
+ %undef RGB_BLUE
60
+ %undef RGB_PIXELSIZE
61
+ %define RGB_RED EXT_RGB_RED
62
+ %define RGB_GREEN EXT_RGB_GREEN
63
+ %define RGB_BLUE EXT_RGB_BLUE
64
+ %define RGB_PIXELSIZE EXT_RGB_PIXELSIZE
65
+ %define jsimd_rgb_ycc_convert_avx2 jsimd_extrgb_ycc_convert_avx2
66
+ %include "jccolext-avx2.asm"
67
+
68
+ %undef RGB_RED
69
+ %undef RGB_GREEN
70
+ %undef RGB_BLUE
71
+ %undef RGB_PIXELSIZE
72
+ %define RGB_RED EXT_RGBX_RED
73
+ %define RGB_GREEN EXT_RGBX_GREEN
74
+ %define RGB_BLUE EXT_RGBX_BLUE
75
+ %define RGB_PIXELSIZE EXT_RGBX_PIXELSIZE
76
+ %define jsimd_rgb_ycc_convert_avx2 jsimd_extrgbx_ycc_convert_avx2
77
+ %include "jccolext-avx2.asm"
78
+
79
+ %undef RGB_RED
80
+ %undef RGB_GREEN
81
+ %undef RGB_BLUE
82
+ %undef RGB_PIXELSIZE
83
+ %define RGB_RED EXT_BGR_RED
84
+ %define RGB_GREEN EXT_BGR_GREEN
85
+ %define RGB_BLUE EXT_BGR_BLUE
86
+ %define RGB_PIXELSIZE EXT_BGR_PIXELSIZE
87
+ %define jsimd_rgb_ycc_convert_avx2 jsimd_extbgr_ycc_convert_avx2
88
+ %include "jccolext-avx2.asm"
89
+
90
+ %undef RGB_RED
91
+ %undef RGB_GREEN
92
+ %undef RGB_BLUE
93
+ %undef RGB_PIXELSIZE
94
+ %define RGB_RED EXT_BGRX_RED
95
+ %define RGB_GREEN EXT_BGRX_GREEN
96
+ %define RGB_BLUE EXT_BGRX_BLUE
97
+ %define RGB_PIXELSIZE EXT_BGRX_PIXELSIZE
98
+ %define jsimd_rgb_ycc_convert_avx2 jsimd_extbgrx_ycc_convert_avx2
99
+ %include "jccolext-avx2.asm"
100
+
101
+ %undef RGB_RED
102
+ %undef RGB_GREEN
103
+ %undef RGB_BLUE
104
+ %undef RGB_PIXELSIZE
105
+ %define RGB_RED EXT_XBGR_RED
106
+ %define RGB_GREEN EXT_XBGR_GREEN
107
+ %define RGB_BLUE EXT_XBGR_BLUE
108
+ %define RGB_PIXELSIZE EXT_XBGR_PIXELSIZE
109
+ %define jsimd_rgb_ycc_convert_avx2 jsimd_extxbgr_ycc_convert_avx2
110
+ %include "jccolext-avx2.asm"
111
+
112
+ %undef RGB_RED
113
+ %undef RGB_GREEN
114
+ %undef RGB_BLUE
115
+ %undef RGB_PIXELSIZE
116
+ %define RGB_RED EXT_XRGB_RED
117
+ %define RGB_GREEN EXT_XRGB_GREEN
118
+ %define RGB_BLUE EXT_XRGB_BLUE
119
+ %define RGB_PIXELSIZE EXT_XRGB_PIXELSIZE
120
+ %define jsimd_rgb_ycc_convert_avx2 jsimd_extxrgb_ycc_convert_avx2
121
+ %include "jccolext-avx2.asm"