vpx_subpixel_8t_ssse3.asm 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. ;
  2. ; Copyright (c) 2015 The WebM project authors. All Rights Reserved.
  3. ;
  4. ; Use of this source code is governed by a BSD-style license
  5. ; that can be found in the LICENSE file in the root of the source
  6. ; tree. An additional intellectual property rights grant can be found
  7. ; in the file PATENTS. All contributing project authors may
  8. ; be found in the AUTHORS file in the root of the source tree.
  9. ;
  10. %include "third_party/x86inc/x86inc.asm"
  11. SECTION_RODATA
  12. pw_64: times 8 dw 64
  13. ; %define USE_PMULHRSW
  14. ; NOTE: pmulhrsw has a latency of 5 cycles. Tests showed a performance loss
  15. ; when using this instruction.
  16. ;
  17. ; The add order below (based on ffvp9) must be followed to prevent outranges.
  18. ; x = k0k1 + k4k5
  19. ; y = k2k3 + k6k7
  20. ; z = signed SAT(x + y)
  21. SECTION .text
  22. %if ARCH_X86_64
  23. %define LOCAL_VARS_SIZE 16*4
  24. %else
  25. %define LOCAL_VARS_SIZE 16*6
  26. %endif
  27. %macro SETUP_LOCAL_VARS 0
  28. ; TODO(slavarnway): using xmm registers for these on ARCH_X86_64 +
  29. ; pmaddubsw has a higher latency on some platforms, this might be eased by
  30. ; interleaving the instructions.
  31. %define k0k1 [rsp + 16*0]
  32. %define k2k3 [rsp + 16*1]
  33. %define k4k5 [rsp + 16*2]
  34. %define k6k7 [rsp + 16*3]
  35. packsswb m4, m4
  36. ; TODO(slavarnway): multiple pshufb instructions had a higher latency on
  37. ; some platforms.
  38. pshuflw m0, m4, 0b ;k0_k1
  39. pshuflw m1, m4, 01010101b ;k2_k3
  40. pshuflw m2, m4, 10101010b ;k4_k5
  41. pshuflw m3, m4, 11111111b ;k6_k7
  42. punpcklqdq m0, m0
  43. punpcklqdq m1, m1
  44. punpcklqdq m2, m2
  45. punpcklqdq m3, m3
  46. mova k0k1, m0
  47. mova k2k3, m1
  48. mova k4k5, m2
  49. mova k6k7, m3
  50. %if ARCH_X86_64
  51. %define krd m12
  52. %define tmp m13
  53. mova krd, [GLOBAL(pw_64)]
  54. %else
  55. %define tmp [rsp + 16*4]
  56. %define krd [rsp + 16*5]
  57. %if CONFIG_PIC=0
  58. mova m6, [GLOBAL(pw_64)]
  59. %else
  60. ; build constants without accessing global memory
  61. pcmpeqb m6, m6 ;all ones
  62. psrlw m6, 15
  63. psllw m6, 6 ;aka pw_64
  64. %endif
  65. mova krd, m6
  66. %endif
  67. %endm
  68. %macro HORIZx4_ROW 2
  69. mova %2, %1
  70. punpcklbw %1, %1
  71. punpckhbw %2, %2
  72. mova m3, %2
  73. palignr %2, %1, 1
  74. palignr m3, %1, 5
  75. pmaddubsw %2, k0k1k4k5
  76. pmaddubsw m3, k2k3k6k7
  77. mova m4, %2 ;k0k1
  78. mova m5, m3 ;k2k3
  79. psrldq %2, 8 ;k4k5
  80. psrldq m3, 8 ;k6k7
  81. paddsw %2, m4
  82. paddsw m5, m3
  83. paddsw %2, m5
  84. paddsw %2, krd
  85. psraw %2, 7
  86. packuswb %2, %2
  87. %endm
  88. ;-------------------------------------------------------------------------------
  89. %macro SUBPIX_HFILTER4 1
  90. cglobal filter_block1d4_%1, 6, 6+(ARCH_X86_64*2), 11, LOCAL_VARS_SIZE, \
  91. src, sstride, dst, dstride, height, filter
  92. mova m4, [filterq]
  93. packsswb m4, m4
  94. %if ARCH_X86_64
  95. %define k0k1k4k5 m8
  96. %define k2k3k6k7 m9
  97. %define krd m10
  98. %define orig_height r7d
  99. mova krd, [GLOBAL(pw_64)]
  100. pshuflw k0k1k4k5, m4, 0b ;k0_k1
  101. pshufhw k0k1k4k5, k0k1k4k5, 10101010b ;k0_k1_k4_k5
  102. pshuflw k2k3k6k7, m4, 01010101b ;k2_k3
  103. pshufhw k2k3k6k7, k2k3k6k7, 11111111b ;k2_k3_k6_k7
  104. %else
  105. %define k0k1k4k5 [rsp + 16*0]
  106. %define k2k3k6k7 [rsp + 16*1]
  107. %define krd [rsp + 16*2]
  108. %define orig_height [rsp + 16*3]
  109. pshuflw m6, m4, 0b ;k0_k1
  110. pshufhw m6, m6, 10101010b ;k0_k1_k4_k5
  111. pshuflw m7, m4, 01010101b ;k2_k3
  112. pshufhw m7, m7, 11111111b ;k2_k3_k6_k7
  113. %if CONFIG_PIC=0
  114. mova m1, [GLOBAL(pw_64)]
  115. %else
  116. ; build constants without accessing global memory
  117. pcmpeqb m1, m1 ;all ones
  118. psrlw m1, 15
  119. psllw m1, 6 ;aka pw_64
  120. %endif
  121. mova k0k1k4k5, m6
  122. mova k2k3k6k7, m7
  123. mova krd, m1
  124. %endif
  125. mov orig_height, heightd
  126. shr heightd, 1
  127. .loop:
  128. ;Do two rows at once
  129. movh m0, [srcq - 3]
  130. movh m1, [srcq + 5]
  131. punpcklqdq m0, m1
  132. mova m1, m0
  133. movh m2, [srcq + sstrideq - 3]
  134. movh m3, [srcq + sstrideq + 5]
  135. punpcklqdq m2, m3
  136. mova m3, m2
  137. punpcklbw m0, m0
  138. punpckhbw m1, m1
  139. punpcklbw m2, m2
  140. punpckhbw m3, m3
  141. mova m4, m1
  142. palignr m4, m0, 1
  143. pmaddubsw m4, k0k1k4k5
  144. palignr m1, m0, 5
  145. pmaddubsw m1, k2k3k6k7
  146. mova m7, m3
  147. palignr m7, m2, 1
  148. pmaddubsw m7, k0k1k4k5
  149. palignr m3, m2, 5
  150. pmaddubsw m3, k2k3k6k7
  151. mova m0, m4 ;k0k1
  152. mova m5, m1 ;k2k3
  153. mova m2, m7 ;k0k1 upper
  154. psrldq m4, 8 ;k4k5
  155. psrldq m1, 8 ;k6k7
  156. paddsw m4, m0
  157. paddsw m5, m1
  158. mova m1, m3 ;k2k3 upper
  159. psrldq m7, 8 ;k4k5 upper
  160. psrldq m3, 8 ;k6k7 upper
  161. paddsw m7, m2
  162. paddsw m4, m5
  163. paddsw m1, m3
  164. paddsw m7, m1
  165. paddsw m4, krd
  166. psraw m4, 7
  167. packuswb m4, m4
  168. paddsw m7, krd
  169. psraw m7, 7
  170. packuswb m7, m7
  171. %ifidn %1, h8_avg
  172. movd m0, [dstq]
  173. pavgb m4, m0
  174. movd m2, [dstq + dstrideq]
  175. pavgb m7, m2
  176. %endif
  177. movd [dstq], m4
  178. movd [dstq + dstrideq], m7
  179. lea srcq, [srcq + sstrideq ]
  180. prefetcht0 [srcq + 4 * sstrideq - 3]
  181. lea srcq, [srcq + sstrideq ]
  182. lea dstq, [dstq + 2 * dstrideq ]
  183. prefetcht0 [srcq + 2 * sstrideq - 3]
  184. dec heightd
  185. jnz .loop
  186. ; Do last row if output_height is odd
  187. mov heightd, orig_height
  188. and heightd, 1
  189. je .done
  190. movh m0, [srcq - 3] ; load src
  191. movh m1, [srcq + 5]
  192. punpcklqdq m0, m1
  193. HORIZx4_ROW m0, m1
  194. %ifidn %1, h8_avg
  195. movd m0, [dstq]
  196. pavgb m1, m0
  197. %endif
  198. movd [dstq], m1
  199. .done
  200. RET
  201. %endm
  202. %macro HORIZx8_ROW 5
  203. mova %2, %1
  204. punpcklbw %1, %1
  205. punpckhbw %2, %2
  206. mova %3, %2
  207. mova %4, %2
  208. mova %5, %2
  209. palignr %2, %1, 1
  210. palignr %3, %1, 5
  211. palignr %4, %1, 9
  212. palignr %5, %1, 13
  213. pmaddubsw %2, k0k1
  214. pmaddubsw %3, k2k3
  215. pmaddubsw %4, k4k5
  216. pmaddubsw %5, k6k7
  217. paddsw %2, %4
  218. paddsw %5, %3
  219. paddsw %2, %5
  220. paddsw %2, krd
  221. psraw %2, 7
  222. packuswb %2, %2
  223. SWAP %1, %2
  224. %endm
  225. ;-------------------------------------------------------------------------------
  226. %macro SUBPIX_HFILTER8 1
  227. cglobal filter_block1d8_%1, 6, 6+(ARCH_X86_64*1), 14, LOCAL_VARS_SIZE, \
  228. src, sstride, dst, dstride, height, filter
  229. mova m4, [filterq]
  230. SETUP_LOCAL_VARS
  231. %if ARCH_X86_64
  232. %define orig_height r7d
  233. %else
  234. %define orig_height heightmp
  235. %endif
  236. mov orig_height, heightd
  237. shr heightd, 1
  238. .loop:
  239. movh m0, [srcq - 3]
  240. movh m3, [srcq + 5]
  241. movh m4, [srcq + sstrideq - 3]
  242. movh m7, [srcq + sstrideq + 5]
  243. punpcklqdq m0, m3
  244. mova m1, m0
  245. punpcklbw m0, m0
  246. punpckhbw m1, m1
  247. mova m5, m1
  248. palignr m5, m0, 13
  249. pmaddubsw m5, k6k7
  250. mova m2, m1
  251. mova m3, m1
  252. palignr m1, m0, 1
  253. pmaddubsw m1, k0k1
  254. punpcklqdq m4, m7
  255. mova m6, m4
  256. punpcklbw m4, m4
  257. palignr m2, m0, 5
  258. punpckhbw m6, m6
  259. palignr m3, m0, 9
  260. mova m7, m6
  261. pmaddubsw m2, k2k3
  262. pmaddubsw m3, k4k5
  263. palignr m7, m4, 13
  264. mova m0, m6
  265. palignr m0, m4, 5
  266. pmaddubsw m7, k6k7
  267. paddsw m1, m3
  268. paddsw m2, m5
  269. paddsw m1, m2
  270. mova m5, m6
  271. palignr m6, m4, 1
  272. pmaddubsw m0, k2k3
  273. pmaddubsw m6, k0k1
  274. palignr m5, m4, 9
  275. paddsw m1, krd
  276. pmaddubsw m5, k4k5
  277. psraw m1, 7
  278. paddsw m0, m7
  279. %ifidn %1, h8_avg
  280. movh m7, [dstq]
  281. movh m2, [dstq + dstrideq]
  282. %endif
  283. packuswb m1, m1
  284. paddsw m6, m5
  285. paddsw m6, m0
  286. paddsw m6, krd
  287. psraw m6, 7
  288. packuswb m6, m6
  289. %ifidn %1, h8_avg
  290. pavgb m1, m7
  291. pavgb m6, m2
  292. %endif
  293. movh [dstq], m1
  294. movh [dstq + dstrideq], m6
  295. lea srcq, [srcq + sstrideq ]
  296. prefetcht0 [srcq + 4 * sstrideq - 3]
  297. lea srcq, [srcq + sstrideq ]
  298. lea dstq, [dstq + 2 * dstrideq ]
  299. prefetcht0 [srcq + 2 * sstrideq - 3]
  300. dec heightd
  301. jnz .loop
  302. ;Do last row if output_height is odd
  303. mov heightd, orig_height
  304. and heightd, 1
  305. je .done
  306. movh m0, [srcq - 3]
  307. movh m3, [srcq + 5]
  308. punpcklqdq m0, m3
  309. HORIZx8_ROW m0, m1, m2, m3, m4
  310. %ifidn %1, h8_avg
  311. movh m1, [dstq]
  312. pavgb m0, m1
  313. %endif
  314. movh [dstq], m0
  315. .done:
  316. RET
  317. %endm
  318. ;-------------------------------------------------------------------------------
  319. %macro SUBPIX_HFILTER16 1
  320. cglobal filter_block1d16_%1, 6, 6+(ARCH_X86_64*0), 14, LOCAL_VARS_SIZE, \
  321. src, sstride, dst, dstride, height, filter
  322. mova m4, [filterq]
  323. SETUP_LOCAL_VARS
  324. .loop:
  325. prefetcht0 [srcq + 2 * sstrideq -3]
  326. movh m0, [srcq - 3]
  327. movh m4, [srcq + 5]
  328. movh m6, [srcq + 13]
  329. punpcklqdq m0, m4
  330. mova m7, m0
  331. punpckhbw m0, m0
  332. mova m1, m0
  333. punpcklqdq m4, m6
  334. mova m3, m0
  335. punpcklbw m7, m7
  336. palignr m3, m7, 13
  337. mova m2, m0
  338. pmaddubsw m3, k6k7
  339. palignr m0, m7, 1
  340. pmaddubsw m0, k0k1
  341. palignr m1, m7, 5
  342. pmaddubsw m1, k2k3
  343. palignr m2, m7, 9
  344. pmaddubsw m2, k4k5
  345. paddsw m1, m3
  346. mova m3, m4
  347. punpckhbw m4, m4
  348. mova m5, m4
  349. punpcklbw m3, m3
  350. mova m7, m4
  351. palignr m5, m3, 5
  352. mova m6, m4
  353. palignr m4, m3, 1
  354. pmaddubsw m4, k0k1
  355. pmaddubsw m5, k2k3
  356. palignr m6, m3, 9
  357. pmaddubsw m6, k4k5
  358. palignr m7, m3, 13
  359. pmaddubsw m7, k6k7
  360. paddsw m0, m2
  361. paddsw m0, m1
  362. %ifidn %1, h8_avg
  363. mova m1, [dstq]
  364. %endif
  365. paddsw m4, m6
  366. paddsw m5, m7
  367. paddsw m4, m5
  368. paddsw m0, krd
  369. paddsw m4, krd
  370. psraw m0, 7
  371. psraw m4, 7
  372. packuswb m0, m4
  373. %ifidn %1, h8_avg
  374. pavgb m0, m1
  375. %endif
  376. lea srcq, [srcq + sstrideq]
  377. mova [dstq], m0
  378. lea dstq, [dstq + dstrideq]
  379. dec heightd
  380. jnz .loop
  381. RET
  382. %endm
  383. INIT_XMM ssse3
  384. SUBPIX_HFILTER16 h8
  385. SUBPIX_HFILTER16 h8_avg
  386. SUBPIX_HFILTER8 h8
  387. SUBPIX_HFILTER8 h8_avg
  388. SUBPIX_HFILTER4 h8
  389. SUBPIX_HFILTER4 h8_avg
  390. ;-------------------------------------------------------------------------------
  391. %macro SUBPIX_VFILTER 2
  392. cglobal filter_block1d%2_%1, 6, 6+(ARCH_X86_64*3), 14, LOCAL_VARS_SIZE, \
  393. src, sstride, dst, dstride, height, filter
  394. mova m4, [filterq]
  395. SETUP_LOCAL_VARS
  396. %if ARCH_X86_64
  397. %define src1q r7
  398. %define sstride6q r8
  399. %define dst_stride dstrideq
  400. %else
  401. %define src1q filterq
  402. %define sstride6q dstrideq
  403. %define dst_stride dstridemp
  404. %endif
  405. mov src1q, srcq
  406. add src1q, sstrideq
  407. lea sstride6q, [sstrideq + sstrideq * 4]
  408. add sstride6q, sstrideq ;pitch * 6
  409. %ifidn %2, 8
  410. %define movx movh
  411. %else
  412. %define movx movd
  413. %endif
  414. .loop:
  415. movx m0, [srcq ] ;A
  416. movx m1, [srcq + sstrideq ] ;B
  417. punpcklbw m0, m1 ;A B
  418. movx m2, [srcq + sstrideq * 2 ] ;C
  419. pmaddubsw m0, k0k1
  420. mova m6, m2
  421. movx m3, [src1q + sstrideq * 2] ;D
  422. punpcklbw m2, m3 ;C D
  423. pmaddubsw m2, k2k3
  424. movx m4, [srcq + sstrideq * 4 ] ;E
  425. mova m7, m4
  426. movx m5, [src1q + sstrideq * 4] ;F
  427. punpcklbw m4, m5 ;E F
  428. pmaddubsw m4, k4k5
  429. punpcklbw m1, m6 ;A B next iter
  430. movx m6, [srcq + sstride6q ] ;G
  431. punpcklbw m5, m6 ;E F next iter
  432. punpcklbw m3, m7 ;C D next iter
  433. pmaddubsw m5, k4k5
  434. movx m7, [src1q + sstride6q ] ;H
  435. punpcklbw m6, m7 ;G H
  436. pmaddubsw m6, k6k7
  437. pmaddubsw m3, k2k3
  438. pmaddubsw m1, k0k1
  439. paddsw m0, m4
  440. paddsw m2, m6
  441. movx m6, [srcq + sstrideq * 8 ] ;H next iter
  442. punpcklbw m7, m6
  443. pmaddubsw m7, k6k7
  444. paddsw m0, m2
  445. paddsw m0, krd
  446. psraw m0, 7
  447. paddsw m1, m5
  448. packuswb m0, m0
  449. paddsw m3, m7
  450. paddsw m1, m3
  451. paddsw m1, krd
  452. psraw m1, 7
  453. lea srcq, [srcq + sstrideq * 2 ]
  454. lea src1q, [src1q + sstrideq * 2]
  455. packuswb m1, m1
  456. %ifidn %1, v8_avg
  457. movx m2, [dstq]
  458. pavgb m0, m2
  459. %endif
  460. movx [dstq], m0
  461. add dstq, dst_stride
  462. %ifidn %1, v8_avg
  463. movx m3, [dstq]
  464. pavgb m1, m3
  465. %endif
  466. movx [dstq], m1
  467. add dstq, dst_stride
  468. sub heightd, 2
  469. cmp heightd, 1
  470. jg .loop
  471. cmp heightd, 0
  472. je .done
  473. movx m0, [srcq ] ;A
  474. movx m1, [srcq + sstrideq ] ;B
  475. movx m6, [srcq + sstride6q ] ;G
  476. punpcklbw m0, m1 ;A B
  477. movx m7, [src1q + sstride6q ] ;H
  478. pmaddubsw m0, k0k1
  479. movx m2, [srcq + sstrideq * 2 ] ;C
  480. punpcklbw m6, m7 ;G H
  481. movx m3, [src1q + sstrideq * 2] ;D
  482. pmaddubsw m6, k6k7
  483. movx m4, [srcq + sstrideq * 4 ] ;E
  484. punpcklbw m2, m3 ;C D
  485. movx m5, [src1q + sstrideq * 4] ;F
  486. punpcklbw m4, m5 ;E F
  487. pmaddubsw m2, k2k3
  488. pmaddubsw m4, k4k5
  489. paddsw m2, m6
  490. paddsw m0, m4
  491. paddsw m0, m2
  492. paddsw m0, krd
  493. psraw m0, 7
  494. packuswb m0, m0
  495. %ifidn %1, v8_avg
  496. movx m1, [dstq]
  497. pavgb m0, m1
  498. %endif
  499. movx [dstq], m0
  500. .done:
  501. RET
  502. %endm
  503. ;-------------------------------------------------------------------------------
  504. %macro SUBPIX_VFILTER16 1
  505. cglobal filter_block1d16_%1, 6, 6+(ARCH_X86_64*3), 14, LOCAL_VARS_SIZE, \
  506. src, sstride, dst, dstride, height, filter
  507. mova m4, [filterq]
  508. SETUP_LOCAL_VARS
  509. %if ARCH_X86_64
  510. %define src1q r7
  511. %define sstride6q r8
  512. %define dst_stride dstrideq
  513. %else
  514. %define src1q filterq
  515. %define sstride6q dstrideq
  516. %define dst_stride dstridemp
  517. %endif
  518. mov src1q, srcq
  519. add src1q, sstrideq
  520. lea sstride6q, [sstrideq + sstrideq * 4]
  521. add sstride6q, sstrideq ;pitch * 6
  522. .loop:
  523. movh m0, [srcq ] ;A
  524. movh m1, [srcq + sstrideq ] ;B
  525. movh m2, [srcq + sstrideq * 2 ] ;C
  526. movh m3, [src1q + sstrideq * 2] ;D
  527. movh m4, [srcq + sstrideq * 4 ] ;E
  528. movh m5, [src1q + sstrideq * 4] ;F
  529. punpcklbw m0, m1 ;A B
  530. movh m6, [srcq + sstride6q] ;G
  531. punpcklbw m2, m3 ;C D
  532. movh m7, [src1q + sstride6q] ;H
  533. punpcklbw m4, m5 ;E F
  534. pmaddubsw m0, k0k1
  535. movh m3, [srcq + 8] ;A
  536. pmaddubsw m2, k2k3
  537. punpcklbw m6, m7 ;G H
  538. movh m5, [srcq + sstrideq + 8] ;B
  539. pmaddubsw m4, k4k5
  540. punpcklbw m3, m5 ;A B
  541. movh m7, [srcq + sstrideq * 2 + 8] ;C
  542. pmaddubsw m6, k6k7
  543. movh m5, [src1q + sstrideq * 2 + 8] ;D
  544. punpcklbw m7, m5 ;C D
  545. paddsw m2, m6
  546. pmaddubsw m3, k0k1
  547. movh m1, [srcq + sstrideq * 4 + 8] ;E
  548. paddsw m0, m4
  549. pmaddubsw m7, k2k3
  550. movh m6, [src1q + sstrideq * 4 + 8] ;F
  551. punpcklbw m1, m6 ;E F
  552. paddsw m0, m2
  553. paddsw m0, krd
  554. movh m2, [srcq + sstride6q + 8] ;G
  555. pmaddubsw m1, k4k5
  556. movh m5, [src1q + sstride6q + 8] ;H
  557. psraw m0, 7
  558. punpcklbw m2, m5 ;G H
  559. pmaddubsw m2, k6k7
  560. %ifidn %1, v8_avg
  561. mova m4, [dstq]
  562. %endif
  563. movh [dstq], m0
  564. paddsw m7, m2
  565. paddsw m3, m1
  566. paddsw m3, m7
  567. paddsw m3, krd
  568. psraw m3, 7
  569. packuswb m0, m3
  570. add srcq, sstrideq
  571. add src1q, sstrideq
  572. %ifidn %1, v8_avg
  573. pavgb m0, m4
  574. %endif
  575. mova [dstq], m0
  576. add dstq, dst_stride
  577. dec heightd
  578. jnz .loop
  579. RET
  580. %endm
  581. INIT_XMM ssse3
  582. SUBPIX_VFILTER16 v8
  583. SUBPIX_VFILTER16 v8_avg
  584. SUBPIX_VFILTER v8, 8
  585. SUBPIX_VFILTER v8_avg, 8
  586. SUBPIX_VFILTER v8, 4
  587. SUBPIX_VFILTER v8_avg, 4