123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- ;
- ; Copyright (c) 2014 The WebM project authors. All Rights Reserved.
- ;
- ; Use of this source code is governed by a BSD-style license
- ; that can be found in the LICENSE file in the root of the source
- ; tree. An additional intellectual property rights grant can be found
- ; in the file PATENTS. All contributing project authors may
- ; be found in the AUTHORS file in the root of the source tree.
- ;
- %include "third_party/x86inc/x86inc.asm"
- %include "vpx_dsp/x86/bitdepth_conversion_sse2.asm"
- SECTION .text
- %if ARCH_X86_64
- ; matrix transpose
- %macro TRANSPOSE8X8 10
- ; stage 1
- punpcklwd m%9, m%1, m%2
- punpcklwd m%10, m%3, m%4
- punpckhwd m%1, m%2
- punpckhwd m%3, m%4
- punpcklwd m%2, m%5, m%6
- punpcklwd m%4, m%7, m%8
- punpckhwd m%5, m%6
- punpckhwd m%7, m%8
- ; stage 2
- punpckldq m%6, m%9, m%10
- punpckldq m%8, m%1, m%3
- punpckhdq m%9, m%10
- punpckhdq m%1, m%3
- punpckldq m%10, m%2, m%4
- punpckldq m%3, m%5, m%7
- punpckhdq m%2, m%4
- punpckhdq m%5, m%7
- ; stage 3
- punpckhqdq m%4, m%9, m%2 ; out3
- punpcklqdq m%9, m%2 ; out2
- punpcklqdq m%7, m%1, m%5 ; out6
- punpckhqdq m%1, m%5 ; out7
- punpckhqdq m%2, m%6, m%10 ; out1
- punpcklqdq m%6, m%10 ; out0
- punpcklqdq m%5, m%8, m%3 ; out4
- punpckhqdq m%8, m%3 ; out5
- SWAP %6, %1
- SWAP %3, %9
- SWAP %8, %6
- %endmacro
- %macro HMD8_1D 0
- psubw m8, m0, m1
- psubw m9, m2, m3
- paddw m0, m1
- paddw m2, m3
- SWAP 1, 8
- SWAP 3, 9
- psubw m8, m4, m5
- psubw m9, m6, m7
- paddw m4, m5
- paddw m6, m7
- SWAP 5, 8
- SWAP 7, 9
- psubw m8, m0, m2
- psubw m9, m1, m3
- paddw m0, m2
- paddw m1, m3
- SWAP 2, 8
- SWAP 3, 9
- psubw m8, m4, m6
- psubw m9, m5, m7
- paddw m4, m6
- paddw m5, m7
- SWAP 6, 8
- SWAP 7, 9
- psubw m8, m0, m4
- psubw m9, m1, m5
- paddw m0, m4
- paddw m1, m5
- SWAP 4, 8
- SWAP 5, 9
- psubw m8, m2, m6
- psubw m9, m3, m7
- paddw m2, m6
- paddw m3, m7
- SWAP 6, 8
- SWAP 7, 9
- %endmacro
- INIT_XMM ssse3
- cglobal hadamard_8x8, 3, 5, 11, input, stride, output
- lea r3, [2 * strideq]
- lea r4, [4 * strideq]
- mova m0, [inputq]
- mova m1, [inputq + r3]
- lea inputq, [inputq + r4]
- mova m2, [inputq]
- mova m3, [inputq + r3]
- lea inputq, [inputq + r4]
- mova m4, [inputq]
- mova m5, [inputq + r3]
- lea inputq, [inputq + r4]
- mova m6, [inputq]
- mova m7, [inputq + r3]
- HMD8_1D
- TRANSPOSE8X8 0, 1, 2, 3, 4, 5, 6, 7, 9, 10
- HMD8_1D
- STORE_TRAN_LOW 0, outputq, 0, 8, 9
- STORE_TRAN_LOW 1, outputq, 8, 8, 9
- STORE_TRAN_LOW 2, outputq, 16, 8, 9
- STORE_TRAN_LOW 3, outputq, 24, 8, 9
- STORE_TRAN_LOW 4, outputq, 32, 8, 9
- STORE_TRAN_LOW 5, outputq, 40, 8, 9
- STORE_TRAN_LOW 6, outputq, 48, 8, 9
- STORE_TRAN_LOW 7, outputq, 56, 8, 9
- RET
- %endif
|