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,132 @@
1
+ /*
2
+ * Loongson MMI optimizations for libjpeg-turbo
3
+ *
4
+ * Copyright (C) 2011, 2014, D. R. Commander. All Rights Reserved.
5
+ * Copyright (C) 2016-2018, Loongson Technology Corporation Limited, BeiJing.
6
+ * All Rights Reserved.
7
+ * Authors: ZhangLixia <zhanglixia-hf@loongson.cn>
8
+ *
9
+ * This software is provided 'as-is', without any express or implied
10
+ * warranty. In no event will the authors be held liable for any damages
11
+ * arising from the use of this software.
12
+ *
13
+ * Permission is granted to anyone to use this software for any purpose,
14
+ * including commercial applications, and to alter it and redistribute it
15
+ * freely, subject to the following restrictions:
16
+ *
17
+ * 1. The origin of this software must not be misrepresented; you must not
18
+ * claim that you wrote the original software. If you use this software
19
+ * in a product, an acknowledgment in the product documentation would be
20
+ * appreciated but is not required.
21
+ * 2. Altered source versions must be plainly marked as such, and must not be
22
+ * misrepresented as being the original software.
23
+ * 3. This notice may not be removed or altered from any source distribution.
24
+ */
25
+
26
+ /* RGB --> GRAYSCALE CONVERSION */
27
+
28
+ #include "jsimd_mmi.h"
29
+
30
+
31
+ #define F_0_114 ((short)7471) /* FIX(0.11400) */
32
+ #define F_0_250 ((short)16384) /* FIX(0.25000) */
33
+ #define F_0_299 ((short)19595) /* FIX(0.29900) */
34
+ #define F_0_587 ((short)38470) /* FIX(0.58700) */
35
+ #define F_0_337 ((short)(F_0_587 - F_0_250)) /* FIX(0.58700) - FIX(0.25000) */
36
+
37
+ enum const_index {
38
+ index_PD_ONEHALF,
39
+ index_PW_F0299_F0337,
40
+ index_PW_F0114_F0250
41
+ };
42
+
43
+ static uint64_t const_value[] = {
44
+ _uint64_set_pi32((int)(1 << (SCALEBITS - 1)), (int)(1 << (SCALEBITS - 1))),
45
+ _uint64_set_pi16(F_0_337, F_0_299, F_0_337, F_0_299),
46
+ _uint64_set_pi16(F_0_250, F_0_114, F_0_250, F_0_114)
47
+ };
48
+
49
+ #define get_const_value(index) (*(__m64 *)&const_value[index])
50
+
51
+ #define PD_ONEHALF get_const_value(index_PD_ONEHALF)
52
+ #define PW_F0299_F0337 get_const_value(index_PW_F0299_F0337)
53
+ #define PW_F0114_F0250 get_const_value(index_PW_F0114_F0250)
54
+
55
+
56
+ #include "jcgryext-mmi.c"
57
+ #undef RGB_RED
58
+ #undef RGB_GREEN
59
+ #undef RGB_BLUE
60
+ #undef RGB_PIXELSIZE
61
+
62
+ #define RGB_RED EXT_RGB_RED
63
+ #define RGB_GREEN EXT_RGB_GREEN
64
+ #define RGB_BLUE EXT_RGB_BLUE
65
+ #define RGB_PIXELSIZE EXT_RGB_PIXELSIZE
66
+ #define jsimd_rgb_gray_convert_mmi jsimd_extrgb_gray_convert_mmi
67
+ #include "jcgryext-mmi.c"
68
+ #undef RGB_RED
69
+ #undef RGB_GREEN
70
+ #undef RGB_BLUE
71
+ #undef RGB_PIXELSIZE
72
+ #undef jsimd_rgb_gray_convert_mmi
73
+
74
+ #define RGB_RED EXT_RGBX_RED
75
+ #define RGB_GREEN EXT_RGBX_GREEN
76
+ #define RGB_BLUE EXT_RGBX_BLUE
77
+ #define RGB_PIXELSIZE EXT_RGBX_PIXELSIZE
78
+ #define jsimd_rgb_gray_convert_mmi jsimd_extrgbx_gray_convert_mmi
79
+ #include "jcgryext-mmi.c"
80
+ #undef RGB_RED
81
+ #undef RGB_GREEN
82
+ #undef RGB_BLUE
83
+ #undef RGB_PIXELSIZE
84
+ #undef jsimd_rgb_gray_convert_mmi
85
+
86
+ #define RGB_RED EXT_BGR_RED
87
+ #define RGB_GREEN EXT_BGR_GREEN
88
+ #define RGB_BLUE EXT_BGR_BLUE
89
+ #define RGB_PIXELSIZE EXT_BGR_PIXELSIZE
90
+ #define jsimd_rgb_gray_convert_mmi jsimd_extbgr_gray_convert_mmi
91
+ #include "jcgryext-mmi.c"
92
+ #undef RGB_RED
93
+ #undef RGB_GREEN
94
+ #undef RGB_BLUE
95
+ #undef RGB_PIXELSIZE
96
+ #undef jsimd_rgb_gray_convert_mmi
97
+
98
+ #define RGB_RED EXT_BGRX_RED
99
+ #define RGB_GREEN EXT_BGRX_GREEN
100
+ #define RGB_BLUE EXT_BGRX_BLUE
101
+ #define RGB_PIXELSIZE EXT_BGRX_PIXELSIZE
102
+ #define jsimd_rgb_gray_convert_mmi jsimd_extbgrx_gray_convert_mmi
103
+ #include "jcgryext-mmi.c"
104
+ #undef RGB_RED
105
+ #undef RGB_GREEN
106
+ #undef RGB_BLUE
107
+ #undef RGB_PIXELSIZE
108
+ #undef jsimd_rgb_gray_convert_mmi
109
+
110
+ #define RGB_RED EXT_XBGR_RED
111
+ #define RGB_GREEN EXT_XBGR_GREEN
112
+ #define RGB_BLUE EXT_XBGR_BLUE
113
+ #define RGB_PIXELSIZE EXT_XBGR_PIXELSIZE
114
+ #define jsimd_rgb_gray_convert_mmi jsimd_extxbgr_gray_convert_mmi
115
+ #include "jcgryext-mmi.c"
116
+ #undef RGB_RED
117
+ #undef RGB_GREEN
118
+ #undef RGB_BLUE
119
+ #undef RGB_PIXELSIZE
120
+ #undef jsimd_rgb_gray_convert_mmi
121
+
122
+ #define RGB_RED EXT_XRGB_RED
123
+ #define RGB_GREEN EXT_XRGB_GREEN
124
+ #define RGB_BLUE EXT_XRGB_BLUE
125
+ #define RGB_PIXELSIZE EXT_XRGB_PIXELSIZE
126
+ #define jsimd_rgb_gray_convert_mmi jsimd_extxrgb_gray_convert_mmi
127
+ #include "jcgryext-mmi.c"
128
+ #undef RGB_RED
129
+ #undef RGB_GREEN
130
+ #undef RGB_BLUE
131
+ #undef RGB_PIXELSIZE
132
+ #undef jsimd_rgb_gray_convert_mmi
@@ -0,0 +1,374 @@
1
+ /*
2
+ * Loongson MMI optimizations for libjpeg-turbo
3
+ *
4
+ * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
5
+ * Copyright (C) 2014-2015, 2019, D. R. Commander. All Rights Reserved.
6
+ * Copyright (C) 2016-2018, Loongson Technology Corporation Limited, BeiJing.
7
+ * All Rights Reserved.
8
+ * Authors: ZhangLixia <zhanglixia-hf@loongson.cn>
9
+ *
10
+ * Based on the x86 SIMD extension for IJG JPEG library
11
+ * Copyright (C) 1999-2006, MIYASAKA Masaru.
12
+ *
13
+ * This software is provided 'as-is', without any express or implied
14
+ * warranty. In no event will the authors be held liable for any damages
15
+ * arising from the use of this software.
16
+ *
17
+ * Permission is granted to anyone to use this software for any purpose,
18
+ * including commercial applications, and to alter it and redistribute it
19
+ * freely, subject to the following restrictions:
20
+ *
21
+ * 1. The origin of this software must not be misrepresented; you must not
22
+ * claim that you wrote the original software. If you use this software
23
+ * in a product, an acknowledgment in the product documentation would be
24
+ * appreciated but is not required.
25
+ * 2. Altered source versions must be plainly marked as such, and must not be
26
+ * misrepresented as being the original software.
27
+ * 3. This notice may not be removed or altered from any source distribution.
28
+ */
29
+
30
+ /* This file is included by jcgray-mmi.c */
31
+
32
+
33
+ #if RGB_RED == 0
34
+ #define mmA re
35
+ #define mmB ro
36
+ #elif RGB_GREEN == 0
37
+ #define mmA ge
38
+ #define mmB go
39
+ #elif RGB_BLUE == 0
40
+ #define mmA be
41
+ #define mmB bo
42
+ #else
43
+ #define mmA xe
44
+ #define mmB xo
45
+ #endif
46
+
47
+ #if RGB_RED == 1
48
+ #define mmC re
49
+ #define mmD ro
50
+ #elif RGB_GREEN == 1
51
+ #define mmC ge
52
+ #define mmD go
53
+ #elif RGB_BLUE == 1
54
+ #define mmC be
55
+ #define mmD bo
56
+ #else
57
+ #define mmC xe
58
+ #define mmD xo
59
+ #endif
60
+
61
+ #if RGB_RED == 2
62
+ #define mmE re
63
+ #define mmF ro
64
+ #elif RGB_GREEN == 2
65
+ #define mmE ge
66
+ #define mmF go
67
+ #elif RGB_BLUE == 2
68
+ #define mmE be
69
+ #define mmF bo
70
+ #else
71
+ #define mmE xe
72
+ #define mmF xo
73
+ #endif
74
+
75
+ #if RGB_RED == 3
76
+ #define mmG re
77
+ #define mmH ro
78
+ #elif RGB_GREEN == 3
79
+ #define mmG ge
80
+ #define mmH go
81
+ #elif RGB_BLUE == 3
82
+ #define mmG be
83
+ #define mmH bo
84
+ #else
85
+ #define mmG xe
86
+ #define mmH xo
87
+ #endif
88
+
89
+
90
+ void jsimd_rgb_gray_convert_mmi(JDIMENSION image_width, JSAMPARRAY input_buf,
91
+ JSAMPIMAGE output_buf, JDIMENSION output_row,
92
+ int num_rows)
93
+ {
94
+ JSAMPROW inptr, outptr;
95
+ int num_cols, col;
96
+ __m64 re, ro, ge, go, be, bo, xe;
97
+ #if RGB_PIXELSIZE == 4
98
+ __m64 xo;
99
+ #endif
100
+ __m64 rgle, rghe, rglo, rgho, bgle, bghe, bglo, bgho;
101
+ __m64 yle_rg, yhe_rg, yle_bg, yhe_bg, yle, yhe, ye;
102
+ __m64 ylo_rg, yho_rg, ylo_bg, yho_bg, ylo, yho, yo, y;
103
+
104
+ while (--num_rows >= 0) {
105
+ inptr = *input_buf++;
106
+ outptr = output_buf[0][output_row];
107
+ output_row++;
108
+
109
+ for (num_cols = image_width; num_cols > 0; num_cols -= 8,
110
+ outptr += 8) {
111
+
112
+ #if RGB_PIXELSIZE == 3
113
+
114
+ if (num_cols < 8) {
115
+ col = num_cols * 3;
116
+ asm(".set noreorder\r\n"
117
+
118
+ "li $8, 1\r\n"
119
+ "move $9, %3\r\n"
120
+ "and $10, $9, $8\r\n"
121
+ "beqz $10, 1f\r\n"
122
+ "nop \r\n"
123
+ "subu $9, $9, 1\r\n"
124
+ "xor $12, $12, $12\r\n"
125
+ "move $13, %5\r\n"
126
+ PTR_ADDU "$13, $13, $9\r\n"
127
+ "lbu $12, 0($13)\r\n"
128
+
129
+ "1: \r\n"
130
+ "li $8, 2\r\n"
131
+ "and $10, $9, $8\r\n"
132
+ "beqz $10, 2f\r\n"
133
+ "nop \r\n"
134
+ "subu $9, $9, 2\r\n"
135
+ "xor $11, $11, $11\r\n"
136
+ "move $13, %5\r\n"
137
+ PTR_ADDU "$13, $13, $9\r\n"
138
+ "lhu $11, 0($13)\r\n"
139
+ "sll $12, $12, 16\r\n"
140
+ "or $12, $12, $11\r\n"
141
+
142
+ "2: \r\n"
143
+ "dmtc1 $12, %0\r\n"
144
+ "li $8, 4\r\n"
145
+ "and $10, $9, $8\r\n"
146
+ "beqz $10, 3f\r\n"
147
+ "nop \r\n"
148
+ "subu $9, $9, 4\r\n"
149
+ "move $13, %5\r\n"
150
+ PTR_ADDU "$13, $13, $9\r\n"
151
+ "lwu $14, 0($13)\r\n"
152
+ "dmtc1 $14, %1\r\n"
153
+ "dsll32 $12, $12, 0\r\n"
154
+ "or $12, $12, $14\r\n"
155
+ "dmtc1 $12, %0\r\n"
156
+
157
+ "3: \r\n"
158
+ "li $8, 8\r\n"
159
+ "and $10, $9, $8\r\n"
160
+ "beqz $10, 4f\r\n"
161
+ "nop \r\n"
162
+ "mov.s %1, %0\r\n"
163
+ "ldc1 %0, 0(%5)\r\n"
164
+ "li $9, 8\r\n"
165
+ "j 5f\r\n"
166
+ "nop \r\n"
167
+
168
+ "4: \r\n"
169
+ "li $8, 16\r\n"
170
+ "and $10, $9, $8\r\n"
171
+ "beqz $10, 5f\r\n"
172
+ "nop \r\n"
173
+ "mov.s %2, %0\r\n"
174
+ "ldc1 %0, 0(%5)\r\n"
175
+ "ldc1 %1, 8(%5)\r\n"
176
+
177
+ "5: \r\n"
178
+ "nop \r\n"
179
+ ".set reorder\r\n"
180
+
181
+ : "=f" (mmA), "=f" (mmG), "=f" (mmF)
182
+ : "r" (col), "r" (num_rows), "r" (inptr)
183
+ : "$f0", "$f2", "$f4", "$8", "$9", "$10", "$11", "$12", "$13",
184
+ "$14", "memory"
185
+ );
186
+ } else {
187
+ if (!(((long)inptr) & 7)) {
188
+ mmA = _mm_load_si64((__m64 *)&inptr[0]);
189
+ mmG = _mm_load_si64((__m64 *)&inptr[8]);
190
+ mmF = _mm_load_si64((__m64 *)&inptr[16]);
191
+ } else {
192
+ mmA = _mm_loadu_si64((__m64 *)&inptr[0]);
193
+ mmG = _mm_loadu_si64((__m64 *)&inptr[8]);
194
+ mmF = _mm_loadu_si64((__m64 *)&inptr[16]);
195
+ }
196
+ inptr += RGB_PIXELSIZE * 8;
197
+ }
198
+ mmD = _mm_srli_si64(mmA, 4 * BYTE_BIT);
199
+ mmA = _mm_slli_si64(mmA, 4 * BYTE_BIT);
200
+
201
+ mmA = _mm_unpackhi_pi8(mmA, mmG);
202
+ mmG = _mm_slli_si64(mmG, 4 * BYTE_BIT);
203
+
204
+ mmD = _mm_unpacklo_pi8(mmD, mmF);
205
+ mmG = _mm_unpackhi_pi8(mmG, mmF);
206
+
207
+ mmE = _mm_srli_si64(mmA, 4 * BYTE_BIT);
208
+ mmA = _mm_slli_si64(mmA, 4 * BYTE_BIT);
209
+
210
+ mmA = _mm_unpackhi_pi8(mmA, mmD);
211
+ mmD = _mm_slli_si64(mmD, 4 * BYTE_BIT);
212
+
213
+ mmE = _mm_unpacklo_pi8(mmE, mmG);
214
+ mmD = _mm_unpackhi_pi8(mmD, mmG);
215
+ mmC = _mm_loadhi_pi8_f(mmA);
216
+ mmA = _mm_loadlo_pi8_f(mmA);
217
+
218
+ mmB = _mm_loadhi_pi8_f(mmE);
219
+ mmE = _mm_loadlo_pi8_f(mmE);
220
+
221
+ mmF = _mm_loadhi_pi8_f(mmD);
222
+ mmD = _mm_loadlo_pi8_f(mmD);
223
+
224
+ #else /* RGB_PIXELSIZE == 4 */
225
+
226
+ if (num_cols < 8) {
227
+ col = num_cols;
228
+ asm(".set noreorder\r\n"
229
+
230
+ "li $8, 1\r\n"
231
+ "move $9, %4\r\n"
232
+ "and $10, $9, $8\r\n"
233
+ "beqz $10, 1f\r\n"
234
+ "nop \r\n"
235
+ "subu $9, $9, 1\r\n"
236
+ PTR_SLL "$11, $9, 2\r\n"
237
+ "move $13, %5\r\n"
238
+ PTR_ADDU "$13, $13, $11\r\n"
239
+ "lwc1 %0, 0($13)\r\n"
240
+
241
+ "1: \r\n"
242
+ "li $8, 2\r\n"
243
+ "and $10, $9, $8\r\n"
244
+ "beqz $10, 2f\r\n"
245
+ "nop \r\n"
246
+ "subu $9, $9, 2\r\n"
247
+ PTR_SLL "$11, $9, 2\r\n"
248
+ "move $13, %5\r\n"
249
+ PTR_ADDU "$13, $13, $11\r\n"
250
+ "mov.s %1, %0\r\n"
251
+ "ldc1 %0, 0($13)\r\n"
252
+
253
+ "2: \r\n"
254
+ "li $8, 4\r\n"
255
+ "and $10, $9, $8\r\n"
256
+ "beqz $10, 3f\r\n"
257
+ "nop \r\n"
258
+ "mov.s %2, %0\r\n"
259
+ "mov.s %3, %1\r\n"
260
+ "ldc1 %0, 0(%5)\r\n"
261
+ "ldc1 %1, 8(%5)\r\n"
262
+
263
+ "3: \r\n"
264
+ "nop \r\n"
265
+ ".set reorder\r\n"
266
+
267
+ : "=f" (mmA), "=f" (mmF), "=f" (mmD), "=f" (mmC)
268
+ : "r" (col), "r" (inptr)
269
+ : "$f0", "$f2", "$8", "$9", "$10", "$11", "$13", "memory"
270
+ );
271
+ } else {
272
+ if (!(((long)inptr) & 7)) {
273
+ mmA = _mm_load_si64((__m64 *)&inptr[0]);
274
+ mmF = _mm_load_si64((__m64 *)&inptr[8]);
275
+ mmD = _mm_load_si64((__m64 *)&inptr[16]);
276
+ mmC = _mm_load_si64((__m64 *)&inptr[24]);
277
+ } else {
278
+ mmA = _mm_loadu_si64((__m64 *)&inptr[0]);
279
+ mmF = _mm_loadu_si64((__m64 *)&inptr[8]);
280
+ mmD = _mm_loadu_si64((__m64 *)&inptr[16]);
281
+ mmC = _mm_loadu_si64((__m64 *)&inptr[24]);
282
+ }
283
+ inptr += RGB_PIXELSIZE * 8;
284
+ }
285
+ mmB = _mm_unpackhi_pi8(mmA, mmF);
286
+ mmA = _mm_unpacklo_pi8(mmA, mmF);
287
+
288
+ mmG = _mm_unpackhi_pi8(mmD, mmC);
289
+ mmD = _mm_unpacklo_pi8(mmD, mmC);
290
+
291
+ mmE = _mm_unpackhi_pi16(mmA, mmD);
292
+ mmA = _mm_unpacklo_pi16(mmA, mmD);
293
+
294
+ mmH = _mm_unpackhi_pi16(mmB, mmG);
295
+ mmB = _mm_unpacklo_pi16(mmB, mmG);
296
+
297
+ mmC = _mm_loadhi_pi8_f(mmA);
298
+ mmA = _mm_loadlo_pi8_f(mmA);
299
+
300
+ mmD = _mm_loadhi_pi8_f(mmB);
301
+ mmB = _mm_loadlo_pi8_f(mmB);
302
+
303
+ mmG = _mm_loadhi_pi8_f(mmE);
304
+ mmE = _mm_loadlo_pi8_f(mmE);
305
+
306
+ mmF = _mm_unpacklo_pi8(mmH, mmH);
307
+ mmH = _mm_unpackhi_pi8(mmH, mmH);
308
+ mmF = _mm_srli_pi16(mmF, BYTE_BIT);
309
+ mmH = _mm_srli_pi16(mmH, BYTE_BIT);
310
+
311
+ #endif
312
+
313
+ /* re=(R0 R2 R4 R6), ge=(G0 G2 G4 G6), be=(B0 B2 B4 B6)
314
+ * ro=(R1 R3 R5 R7), go=(G1 G3 G5 G7), bo=(B1 B3 B5 B7)
315
+ *
316
+ * (Original)
317
+ * Y = 0.29900 * R + 0.58700 * G + 0.11400 * B
318
+ *
319
+ * (This implementation)
320
+ * Y = 0.29900 * R + 0.33700 * G + 0.11400 * B + 0.25000 * G
321
+ */
322
+
323
+ rglo = _mm_unpacklo_pi16(ro, go);
324
+ rgho = _mm_unpackhi_pi16(ro, go);
325
+ ylo_rg = _mm_madd_pi16(rglo, PW_F0299_F0337);
326
+ yho_rg = _mm_madd_pi16(rgho, PW_F0299_F0337);
327
+
328
+ rgle = _mm_unpacklo_pi16(re, ge);
329
+ rghe = _mm_unpackhi_pi16(re, ge);
330
+ yle_rg = _mm_madd_pi16(rgle, PW_F0299_F0337);
331
+ yhe_rg = _mm_madd_pi16(rghe, PW_F0299_F0337);
332
+
333
+ bglo = _mm_unpacklo_pi16(bo, go);
334
+ bgho = _mm_unpackhi_pi16(bo, go);
335
+ ylo_bg = _mm_madd_pi16(bglo, PW_F0114_F0250);
336
+ yho_bg = _mm_madd_pi16(bgho, PW_F0114_F0250);
337
+
338
+ ylo = _mm_add_pi32(ylo_bg, ylo_rg);
339
+ yho = _mm_add_pi32(yho_bg, yho_rg);
340
+ ylo = _mm_add_pi32(ylo, PD_ONEHALF);
341
+ yho = _mm_add_pi32(yho, PD_ONEHALF);
342
+ ylo = _mm_srli_pi32(ylo, SCALEBITS);
343
+ yho = _mm_srli_pi32(yho, SCALEBITS);
344
+ yo = _mm_packs_pi32(ylo, yho);
345
+
346
+ bgle = _mm_unpacklo_pi16(be, ge);
347
+ bghe = _mm_unpackhi_pi16(be, ge);
348
+ yle_bg = _mm_madd_pi16(bgle, PW_F0114_F0250);
349
+ yhe_bg = _mm_madd_pi16(bghe, PW_F0114_F0250);
350
+
351
+ yle = _mm_add_pi32(yle_bg, yle_rg);
352
+ yhe = _mm_add_pi32(yhe_bg, yhe_rg);
353
+ yle = _mm_add_pi32(yle, PD_ONEHALF);
354
+ yhe = _mm_add_pi32(yhe, PD_ONEHALF);
355
+ yle = _mm_srli_pi32(yle, SCALEBITS);
356
+ yhe = _mm_srli_pi32(yhe, SCALEBITS);
357
+ ye = _mm_packs_pi32(yle, yhe);
358
+
359
+ yo = _mm_slli_pi16(yo, BYTE_BIT);
360
+ y = _mm_or_si64(ye, yo);
361
+
362
+ _mm_store_si64((__m64 *)&outptr[0], y);
363
+ }
364
+ }
365
+ }
366
+
367
+ #undef mmA
368
+ #undef mmB
369
+ #undef mmC
370
+ #undef mmD
371
+ #undef mmE
372
+ #undef mmF
373
+ #undef mmG
374
+ #undef mmH
@@ -0,0 +1,98 @@
1
+ /*
2
+ * Loongson MMI optimizations for libjpeg-turbo
3
+ *
4
+ * Copyright (C) 2015, 2018-2019, D. R. Commander. All Rights Reserved.
5
+ * Copyright (C) 2016-2017, Loongson Technology Corporation Limited, BeiJing.
6
+ * All Rights Reserved.
7
+ * Authors: ZhuChen <zhuchen@loongson.cn>
8
+ * CaiWanwei <caiwanwei@loongson.cn>
9
+ * SunZhangzhi <sunzhangzhi-cq@loongson.cn>
10
+ *
11
+ * Based on the x86 SIMD extension for IJG JPEG library
12
+ * Copyright (C) 1999-2006, MIYASAKA Masaru.
13
+ *
14
+ * This software is provided 'as-is', without any express or implied
15
+ * warranty. In no event will the authors be held liable for any damages
16
+ * arising from the use of this software.
17
+ *
18
+ * Permission is granted to anyone to use this software for any purpose,
19
+ * including commercial applications, and to alter it and redistribute it
20
+ * freely, subject to the following restrictions:
21
+ *
22
+ * 1. The origin of this software must not be misrepresented; you must not
23
+ * claim that you wrote the original software. If you use this software
24
+ * in a product, an acknowledgment in the product documentation would be
25
+ * appreciated but is not required.
26
+ * 2. Altered source versions must be plainly marked as such, and must not be
27
+ * misrepresented as being the original software.
28
+ * 3. This notice may not be removed or altered from any source distribution.
29
+ */
30
+
31
+ /* CHROMA DOWNSAMPLING */
32
+
33
+ #include "jsimd_mmi.h"
34
+ #include "jcsample.h"
35
+
36
+
37
+ void jsimd_h2v2_downsample_mmi(JDIMENSION image_width, int max_v_samp_factor,
38
+ JDIMENSION v_samp_factor,
39
+ JDIMENSION width_in_blocks,
40
+ JSAMPARRAY input_data, JSAMPARRAY output_data)
41
+ {
42
+ int inrow, outrow, outcol;
43
+ JDIMENSION output_cols = width_in_blocks * DCTSIZE;
44
+ JSAMPROW inptr0, inptr1, outptr;
45
+ __m64 bias, mask = 0.0, thisavg, nextavg, avg;
46
+ __m64 this0o, this0e, this0, this0sum, next0o, next0e, next0, next0sum;
47
+ __m64 this1o, this1e, this1, this1sum, next1o, next1e, next1, next1sum;
48
+
49
+ expand_right_edge(input_data, max_v_samp_factor, image_width,
50
+ output_cols * 2);
51
+
52
+ bias = _mm_set1_pi32((1 << 17) + 1); /* 0x00020001 (32-bit bias pattern) */
53
+ /* bias={1, 2, 1, 2} (16-bit) */
54
+ mask = _mm_cmpeq_pi16(mask, mask);
55
+ mask = _mm_srli_pi16(mask, BYTE_BIT); /* {0xFF 0x00 0xFF 0x00 ..} */
56
+
57
+ for (inrow = 0, outrow = 0; outrow < v_samp_factor;
58
+ inrow += 2, outrow++) {
59
+
60
+ inptr0 = input_data[inrow];
61
+ inptr1 = input_data[inrow + 1];
62
+ outptr = output_data[outrow];
63
+
64
+ for (outcol = output_cols; outcol > 0;
65
+ outcol -= 8, inptr0 += 16, inptr1 += 16, outptr += 8) {
66
+
67
+ this0 = _mm_load_si64((__m64 *)&inptr0[0]);
68
+ this1 = _mm_load_si64((__m64 *)&inptr1[0]);
69
+ next0 = _mm_load_si64((__m64 *)&inptr0[8]);
70
+ next1 = _mm_load_si64((__m64 *)&inptr1[8]);
71
+
72
+ this0o = _mm_and_si64(this0, mask);
73
+ this0e = _mm_srli_pi16(this0, BYTE_BIT);
74
+ this1o = _mm_and_si64(this1, mask);
75
+ this1e = _mm_srli_pi16(this1, BYTE_BIT);
76
+ this0sum = _mm_add_pi16(this0o, this0e);
77
+ this1sum = _mm_add_pi16(this1o, this1e);
78
+
79
+ next0o = _mm_and_si64(next0, mask);
80
+ next0e = _mm_srli_pi16(next0, BYTE_BIT);
81
+ next1o = _mm_and_si64(next1, mask);
82
+ next1e = _mm_srli_pi16(next1, BYTE_BIT);
83
+ next0sum = _mm_add_pi16(next0o, next0e);
84
+ next1sum = _mm_add_pi16(next1o, next1e);
85
+
86
+ thisavg = _mm_add_pi16(this0sum, this1sum);
87
+ nextavg = _mm_add_pi16(next0sum, next1sum);
88
+ thisavg = _mm_add_pi16(thisavg, bias);
89
+ nextavg = _mm_add_pi16(nextavg, bias);
90
+ thisavg = _mm_srli_pi16(thisavg, 2);
91
+ nextavg = _mm_srli_pi16(nextavg, 2);
92
+
93
+ avg = _mm_packs_pu16(thisavg, nextavg);
94
+
95
+ _mm_store_si64((__m64 *)&outptr[0], avg);
96
+ }
97
+ }
98
+ }
@@ -0,0 +1,28 @@
1
+ /*
2
+ * jcsample.h
3
+ *
4
+ * This file was part of the Independent JPEG Group's software:
5
+ * Copyright (C) 1991-1996, Thomas G. Lane.
6
+ * For conditions of distribution and use, see the accompanying README.ijg
7
+ * file.
8
+ */
9
+
10
+ LOCAL(void)
11
+ expand_right_edge(JSAMPARRAY image_data, int num_rows, JDIMENSION input_cols,
12
+ JDIMENSION output_cols)
13
+ {
14
+ register JSAMPROW ptr;
15
+ register JSAMPLE pixval;
16
+ register int count;
17
+ int row;
18
+ int numcols = (int)(output_cols - input_cols);
19
+
20
+ if (numcols > 0) {
21
+ for (row = 0; row < num_rows; row++) {
22
+ ptr = image_data[row] + input_cols;
23
+ pixval = ptr[-1];
24
+ for (count = numcols; count > 0; count--)
25
+ *ptr++ = pixval;
26
+ }
27
+ }
28
+ }