11b362b15af34006e6a11974088a46d42b903418eJohann;
21b362b15af34006e6a11974088a46d42b903418eJohann;  Copyright (c) 2011 The WebM project authors. All Rights Reserved.
31b362b15af34006e6a11974088a46d42b903418eJohann;
41b362b15af34006e6a11974088a46d42b903418eJohann;  Use of this source code is governed by a BSD-style license
51b362b15af34006e6a11974088a46d42b903418eJohann;  that can be found in the LICENSE file in the root of the source
61b362b15af34006e6a11974088a46d42b903418eJohann;  tree. An additional intellectual property rights grant can be found
71b362b15af34006e6a11974088a46d42b903418eJohann;  in the file PATENTS.  All contributing project authors may
81b362b15af34006e6a11974088a46d42b903418eJohann;  be found in the AUTHORS file in the root of the source tree.
91b362b15af34006e6a11974088a46d42b903418eJohann;
101b362b15af34006e6a11974088a46d42b903418eJohann
111b362b15af34006e6a11974088a46d42b903418eJohann
121b362b15af34006e6a11974088a46d42b903418eJohann    EXPORT  |vp8_fast_quantize_b_neon|
131b362b15af34006e6a11974088a46d42b903418eJohann    EXPORT  |vp8_fast_quantize_b_pair_neon|
141b362b15af34006e6a11974088a46d42b903418eJohann
15ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang    INCLUDE vp8_asm_enc_offsets.asm
161b362b15af34006e6a11974088a46d42b903418eJohann
171b362b15af34006e6a11974088a46d42b903418eJohann    ARM
181b362b15af34006e6a11974088a46d42b903418eJohann    REQUIRE8
191b362b15af34006e6a11974088a46d42b903418eJohann    PRESERVE8
201b362b15af34006e6a11974088a46d42b903418eJohann
211b362b15af34006e6a11974088a46d42b903418eJohann    AREA ||.text||, CODE, READONLY, ALIGN=4
221b362b15af34006e6a11974088a46d42b903418eJohann
231b362b15af34006e6a11974088a46d42b903418eJohann;vp8_fast_quantize_b_pair_neon(BLOCK *b1, BLOCK *b2, BLOCKD *d1, BLOCKD *d2);
241b362b15af34006e6a11974088a46d42b903418eJohann|vp8_fast_quantize_b_pair_neon| PROC
251b362b15af34006e6a11974088a46d42b903418eJohann
261b362b15af34006e6a11974088a46d42b903418eJohann    stmfd           sp!, {r4-r9}
271b362b15af34006e6a11974088a46d42b903418eJohann    vstmdb          sp!, {q4-q7}
281b362b15af34006e6a11974088a46d42b903418eJohann
291b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r4, [r0, #vp8_block_coeff]
301b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r5, [r0, #vp8_block_quant_fast]
311b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r6, [r0, #vp8_block_round]
321b362b15af34006e6a11974088a46d42b903418eJohann
331b362b15af34006e6a11974088a46d42b903418eJohann    vld1.16         {q0, q1}, [r4@128]  ; load z
341b362b15af34006e6a11974088a46d42b903418eJohann
351b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r7, [r2, #vp8_blockd_qcoeff]
361b362b15af34006e6a11974088a46d42b903418eJohann
371b362b15af34006e6a11974088a46d42b903418eJohann    vabs.s16        q4, q0              ; calculate x = abs(z)
381b362b15af34006e6a11974088a46d42b903418eJohann    vabs.s16        q5, q1
391b362b15af34006e6a11974088a46d42b903418eJohann
401b362b15af34006e6a11974088a46d42b903418eJohann    ;right shift 15 to get sign, all 0 if it is positive, all 1 if it is negative
411b362b15af34006e6a11974088a46d42b903418eJohann    vshr.s16        q2, q0, #15         ; sz
421b362b15af34006e6a11974088a46d42b903418eJohann    vshr.s16        q3, q1, #15
431b362b15af34006e6a11974088a46d42b903418eJohann
441b362b15af34006e6a11974088a46d42b903418eJohann    vld1.s16        {q6, q7}, [r6@128]  ; load round_ptr [0-15]
451b362b15af34006e6a11974088a46d42b903418eJohann    vld1.s16        {q8, q9}, [r5@128]  ; load quant_ptr [0-15]
461b362b15af34006e6a11974088a46d42b903418eJohann
471b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r4, [r1, #vp8_block_coeff]
481b362b15af34006e6a11974088a46d42b903418eJohann
491b362b15af34006e6a11974088a46d42b903418eJohann    vadd.s16        q4, q6              ; x + Round
501b362b15af34006e6a11974088a46d42b903418eJohann    vadd.s16        q5, q7
511b362b15af34006e6a11974088a46d42b903418eJohann
521b362b15af34006e6a11974088a46d42b903418eJohann    vld1.16         {q0, q1}, [r4@128]  ; load z2
531b362b15af34006e6a11974088a46d42b903418eJohann
541b362b15af34006e6a11974088a46d42b903418eJohann    vqdmulh.s16     q4, q8              ; y = ((Round+abs(z)) * Quant) >> 16
551b362b15af34006e6a11974088a46d42b903418eJohann    vqdmulh.s16     q5, q9
561b362b15af34006e6a11974088a46d42b903418eJohann
571b362b15af34006e6a11974088a46d42b903418eJohann    vabs.s16        q10, q0             ; calculate x2 = abs(z_2)
581b362b15af34006e6a11974088a46d42b903418eJohann    vabs.s16        q11, q1
591b362b15af34006e6a11974088a46d42b903418eJohann    vshr.s16        q12, q0, #15        ; sz2
601b362b15af34006e6a11974088a46d42b903418eJohann    vshr.s16        q13, q1, #15
611b362b15af34006e6a11974088a46d42b903418eJohann
621b362b15af34006e6a11974088a46d42b903418eJohann    ;modify data to have its original sign
631b362b15af34006e6a11974088a46d42b903418eJohann    veor.s16        q4, q2              ; y^sz
641b362b15af34006e6a11974088a46d42b903418eJohann    veor.s16        q5, q3
651b362b15af34006e6a11974088a46d42b903418eJohann
661b362b15af34006e6a11974088a46d42b903418eJohann    vadd.s16        q10, q6             ; x2 + Round
671b362b15af34006e6a11974088a46d42b903418eJohann    vadd.s16        q11, q7
681b362b15af34006e6a11974088a46d42b903418eJohann
691b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r8, [r2, #vp8_blockd_dequant]
701b362b15af34006e6a11974088a46d42b903418eJohann
711b362b15af34006e6a11974088a46d42b903418eJohann    vqdmulh.s16     q10, q8             ; y2 = ((Round+abs(z)) * Quant) >> 16
721b362b15af34006e6a11974088a46d42b903418eJohann    vqdmulh.s16     q11, q9
731b362b15af34006e6a11974088a46d42b903418eJohann
741b362b15af34006e6a11974088a46d42b903418eJohann    vshr.s16        q4, #1              ; right shift 1 after vqdmulh
751b362b15af34006e6a11974088a46d42b903418eJohann    vshr.s16        q5, #1
761b362b15af34006e6a11974088a46d42b903418eJohann
771b362b15af34006e6a11974088a46d42b903418eJohann    vld1.s16        {q6, q7}, [r8@128]  ;load dequant_ptr[i]
781b362b15af34006e6a11974088a46d42b903418eJohann
791b362b15af34006e6a11974088a46d42b903418eJohann    vsub.s16        q4, q2              ; x1=(y^sz)-sz = (y^sz)-(-1) (2's complement)
801b362b15af34006e6a11974088a46d42b903418eJohann    vsub.s16        q5, q3
811b362b15af34006e6a11974088a46d42b903418eJohann
821b362b15af34006e6a11974088a46d42b903418eJohann    vshr.s16        q10, #1             ; right shift 1 after vqdmulh
831b362b15af34006e6a11974088a46d42b903418eJohann    vshr.s16        q11, #1
841b362b15af34006e6a11974088a46d42b903418eJohann
851b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r9, [r2, #vp8_blockd_dqcoeff]
861b362b15af34006e6a11974088a46d42b903418eJohann
871b362b15af34006e6a11974088a46d42b903418eJohann    veor.s16        q10, q12            ; y2^sz2
881b362b15af34006e6a11974088a46d42b903418eJohann    veor.s16        q11, q13
891b362b15af34006e6a11974088a46d42b903418eJohann
901b362b15af34006e6a11974088a46d42b903418eJohann    vst1.s16        {q4, q5}, [r7]      ; store: qcoeff = x1
911b362b15af34006e6a11974088a46d42b903418eJohann
921b362b15af34006e6a11974088a46d42b903418eJohann
931b362b15af34006e6a11974088a46d42b903418eJohann    vsub.s16        q10, q12            ; x2=(y^sz)-sz = (y^sz)-(-1) (2's complement)
941b362b15af34006e6a11974088a46d42b903418eJohann    vsub.s16        q11, q13
951b362b15af34006e6a11974088a46d42b903418eJohann
961b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r6, [r3, #vp8_blockd_qcoeff]
971b362b15af34006e6a11974088a46d42b903418eJohann
981b362b15af34006e6a11974088a46d42b903418eJohann    vmul.s16        q2, q6, q4          ; x * Dequant
991b362b15af34006e6a11974088a46d42b903418eJohann    vmul.s16        q3, q7, q5
1001b362b15af34006e6a11974088a46d42b903418eJohann
1011b362b15af34006e6a11974088a46d42b903418eJohann    adr             r0, inv_zig_zag     ; load ptr of inverse zigzag table
1021b362b15af34006e6a11974088a46d42b903418eJohann
1031b362b15af34006e6a11974088a46d42b903418eJohann    vceq.s16        q8, q8              ; set q8 to all 1
1041b362b15af34006e6a11974088a46d42b903418eJohann
1051b362b15af34006e6a11974088a46d42b903418eJohann    vst1.s16        {q10, q11}, [r6]    ; store: qcoeff = x2
1061b362b15af34006e6a11974088a46d42b903418eJohann
1071b362b15af34006e6a11974088a46d42b903418eJohann    vmul.s16        q12, q6, q10        ; x2 * Dequant
1081b362b15af34006e6a11974088a46d42b903418eJohann    vmul.s16        q13, q7, q11
1091b362b15af34006e6a11974088a46d42b903418eJohann
1101b362b15af34006e6a11974088a46d42b903418eJohann    vld1.16         {q6, q7}, [r0@128]  ; load inverse scan order
1111b362b15af34006e6a11974088a46d42b903418eJohann
1121b362b15af34006e6a11974088a46d42b903418eJohann    vtst.16         q14, q4, q8         ; now find eob
1131b362b15af34006e6a11974088a46d42b903418eJohann    vtst.16         q15, q5, q8         ; non-zero element is set to all 1
1141b362b15af34006e6a11974088a46d42b903418eJohann
1151b362b15af34006e6a11974088a46d42b903418eJohann    vst1.s16        {q2, q3}, [r9]      ; store dqcoeff = x * Dequant
1161b362b15af34006e6a11974088a46d42b903418eJohann
1171b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r7, [r3, #vp8_blockd_dqcoeff]
1181b362b15af34006e6a11974088a46d42b903418eJohann
1191b362b15af34006e6a11974088a46d42b903418eJohann    vand            q0, q6, q14         ; get all valid numbers from scan array
1201b362b15af34006e6a11974088a46d42b903418eJohann    vand            q1, q7, q15
1211b362b15af34006e6a11974088a46d42b903418eJohann
1221b362b15af34006e6a11974088a46d42b903418eJohann    vst1.s16        {q12, q13}, [r7]    ; store dqcoeff = x * Dequant
1231b362b15af34006e6a11974088a46d42b903418eJohann
1241b362b15af34006e6a11974088a46d42b903418eJohann    vtst.16         q2, q10, q8         ; now find eob
1251b362b15af34006e6a11974088a46d42b903418eJohann    vtst.16         q3, q11, q8         ; non-zero element is set to all 1
1261b362b15af34006e6a11974088a46d42b903418eJohann
1271b362b15af34006e6a11974088a46d42b903418eJohann    vmax.u16        q0, q0, q1          ; find maximum value in q0, q1
1281b362b15af34006e6a11974088a46d42b903418eJohann
1291b362b15af34006e6a11974088a46d42b903418eJohann    vand            q10, q6, q2         ; get all valid numbers from scan array
1301b362b15af34006e6a11974088a46d42b903418eJohann    vand            q11, q7, q3
1311b362b15af34006e6a11974088a46d42b903418eJohann    vmax.u16        q10, q10, q11       ; find maximum value in q10, q11
1321b362b15af34006e6a11974088a46d42b903418eJohann
1331b362b15af34006e6a11974088a46d42b903418eJohann    vmax.u16        d0, d0, d1
1341b362b15af34006e6a11974088a46d42b903418eJohann    vmax.u16        d20, d20, d21
1351b362b15af34006e6a11974088a46d42b903418eJohann    vmovl.u16       q0, d0
1361b362b15af34006e6a11974088a46d42b903418eJohann    vmovl.u16       q10, d20
1371b362b15af34006e6a11974088a46d42b903418eJohann
1381b362b15af34006e6a11974088a46d42b903418eJohann    vmax.u32        d0, d0, d1
1391b362b15af34006e6a11974088a46d42b903418eJohann    vmax.u32        d20, d20, d21
1401b362b15af34006e6a11974088a46d42b903418eJohann    vpmax.u32       d0, d0, d0
1411b362b15af34006e6a11974088a46d42b903418eJohann    vpmax.u32       d20, d20, d20
1421b362b15af34006e6a11974088a46d42b903418eJohann
1431b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r4, [r2, #vp8_blockd_eob]
1441b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r5, [r3, #vp8_blockd_eob]
1451b362b15af34006e6a11974088a46d42b903418eJohann
1461b362b15af34006e6a11974088a46d42b903418eJohann    vst1.8          {d0[0]}, [r4]       ; store eob
1471b362b15af34006e6a11974088a46d42b903418eJohann    vst1.8          {d20[0]}, [r5]      ; store eob
1481b362b15af34006e6a11974088a46d42b903418eJohann
1491b362b15af34006e6a11974088a46d42b903418eJohann    vldmia          sp!, {q4-q7}
1501b362b15af34006e6a11974088a46d42b903418eJohann    ldmfd           sp!, {r4-r9}
1511b362b15af34006e6a11974088a46d42b903418eJohann    bx              lr
1521b362b15af34006e6a11974088a46d42b903418eJohann
1531b362b15af34006e6a11974088a46d42b903418eJohann    ENDP
1541b362b15af34006e6a11974088a46d42b903418eJohann
1551b362b15af34006e6a11974088a46d42b903418eJohann;void vp8_fast_quantize_b_c(BLOCK *b, BLOCKD *d)
1561b362b15af34006e6a11974088a46d42b903418eJohann|vp8_fast_quantize_b_neon| PROC
1571b362b15af34006e6a11974088a46d42b903418eJohann
1581b362b15af34006e6a11974088a46d42b903418eJohann    stmfd           sp!, {r4-r7}
1591b362b15af34006e6a11974088a46d42b903418eJohann
1601b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r3, [r0, #vp8_block_coeff]
1611b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r4, [r0, #vp8_block_quant_fast]
1621b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r5, [r0, #vp8_block_round]
1631b362b15af34006e6a11974088a46d42b903418eJohann
1641b362b15af34006e6a11974088a46d42b903418eJohann    vld1.16         {q0, q1}, [r3@128]  ; load z
1651b362b15af34006e6a11974088a46d42b903418eJohann    vorr.s16        q14, q0, q1         ; check if all zero (step 1)
1661b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r6, [r1, #vp8_blockd_qcoeff]
1671b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r7, [r1, #vp8_blockd_dqcoeff]
1681b362b15af34006e6a11974088a46d42b903418eJohann    vorr.s16        d28, d28, d29       ; check if all zero (step 2)
1691b362b15af34006e6a11974088a46d42b903418eJohann
1701b362b15af34006e6a11974088a46d42b903418eJohann    vabs.s16        q12, q0             ; calculate x = abs(z)
1711b362b15af34006e6a11974088a46d42b903418eJohann    vabs.s16        q13, q1
1721b362b15af34006e6a11974088a46d42b903418eJohann
1731b362b15af34006e6a11974088a46d42b903418eJohann    ;right shift 15 to get sign, all 0 if it is positive, all 1 if it is negative
1741b362b15af34006e6a11974088a46d42b903418eJohann    vshr.s16        q2, q0, #15         ; sz
1751b362b15af34006e6a11974088a46d42b903418eJohann    vmov            r2, r3, d28         ; check if all zero (step 3)
1761b362b15af34006e6a11974088a46d42b903418eJohann    vshr.s16        q3, q1, #15
1771b362b15af34006e6a11974088a46d42b903418eJohann
1781b362b15af34006e6a11974088a46d42b903418eJohann    vld1.s16        {q14, q15}, [r5@128]; load round_ptr [0-15]
1791b362b15af34006e6a11974088a46d42b903418eJohann    vld1.s16        {q8, q9}, [r4@128]  ; load quant_ptr [0-15]
1801b362b15af34006e6a11974088a46d42b903418eJohann
1811b362b15af34006e6a11974088a46d42b903418eJohann    vadd.s16        q12, q14            ; x + Round
1821b362b15af34006e6a11974088a46d42b903418eJohann    vadd.s16        q13, q15
1831b362b15af34006e6a11974088a46d42b903418eJohann
1841b362b15af34006e6a11974088a46d42b903418eJohann    adr             r0, inv_zig_zag     ; load ptr of inverse zigzag table
1851b362b15af34006e6a11974088a46d42b903418eJohann
1861b362b15af34006e6a11974088a46d42b903418eJohann    vqdmulh.s16     q12, q8             ; y = ((Round+abs(z)) * Quant) >> 16
1871b362b15af34006e6a11974088a46d42b903418eJohann    vqdmulh.s16     q13, q9
1881b362b15af34006e6a11974088a46d42b903418eJohann
1891b362b15af34006e6a11974088a46d42b903418eJohann    vld1.16         {q10, q11}, [r0@128]; load inverse scan order
1901b362b15af34006e6a11974088a46d42b903418eJohann
1911b362b15af34006e6a11974088a46d42b903418eJohann    vceq.s16        q8, q8              ; set q8 to all 1
1921b362b15af34006e6a11974088a46d42b903418eJohann
1931b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r4, [r1, #vp8_blockd_dequant]
1941b362b15af34006e6a11974088a46d42b903418eJohann
1951b362b15af34006e6a11974088a46d42b903418eJohann    vshr.s16        q12, #1             ; right shift 1 after vqdmulh
1961b362b15af34006e6a11974088a46d42b903418eJohann    vshr.s16        q13, #1
1971b362b15af34006e6a11974088a46d42b903418eJohann
1981b362b15af34006e6a11974088a46d42b903418eJohann    ldr             r5, [r1, #vp8_blockd_eob]
1991b362b15af34006e6a11974088a46d42b903418eJohann
2001b362b15af34006e6a11974088a46d42b903418eJohann    orr             r2, r2, r3          ; check if all zero (step 4)
2011b362b15af34006e6a11974088a46d42b903418eJohann    cmp             r2, #0              ; check if all zero (step 5)
2021b362b15af34006e6a11974088a46d42b903418eJohann    beq             zero_output         ; check if all zero (step 6)
2031b362b15af34006e6a11974088a46d42b903418eJohann
2041b362b15af34006e6a11974088a46d42b903418eJohann    ;modify data to have its original sign
2051b362b15af34006e6a11974088a46d42b903418eJohann    veor.s16        q12, q2             ; y^sz
2061b362b15af34006e6a11974088a46d42b903418eJohann    veor.s16        q13, q3
2071b362b15af34006e6a11974088a46d42b903418eJohann
2081b362b15af34006e6a11974088a46d42b903418eJohann    vsub.s16        q12, q2             ; x1=(y^sz)-sz = (y^sz)-(-1) (2's complement)
2091b362b15af34006e6a11974088a46d42b903418eJohann    vsub.s16        q13, q3
2101b362b15af34006e6a11974088a46d42b903418eJohann
2111b362b15af34006e6a11974088a46d42b903418eJohann    vld1.s16        {q2, q3}, [r4@128]  ; load dequant_ptr[i]
2121b362b15af34006e6a11974088a46d42b903418eJohann
2131b362b15af34006e6a11974088a46d42b903418eJohann    vtst.16         q14, q12, q8        ; now find eob
2141b362b15af34006e6a11974088a46d42b903418eJohann    vtst.16         q15, q13, q8        ; non-zero element is set to all 1
2151b362b15af34006e6a11974088a46d42b903418eJohann
2161b362b15af34006e6a11974088a46d42b903418eJohann    vst1.s16        {q12, q13}, [r6@128]; store: qcoeff = x1
2171b362b15af34006e6a11974088a46d42b903418eJohann
2181b362b15af34006e6a11974088a46d42b903418eJohann    vand            q10, q10, q14       ; get all valid numbers from scan array
2191b362b15af34006e6a11974088a46d42b903418eJohann    vand            q11, q11, q15
2201b362b15af34006e6a11974088a46d42b903418eJohann
2211b362b15af34006e6a11974088a46d42b903418eJohann
2221b362b15af34006e6a11974088a46d42b903418eJohann    vmax.u16        q0, q10, q11        ; find maximum value in q0, q1
2231b362b15af34006e6a11974088a46d42b903418eJohann    vmax.u16        d0, d0, d1
2241b362b15af34006e6a11974088a46d42b903418eJohann    vmovl.u16       q0, d0
2251b362b15af34006e6a11974088a46d42b903418eJohann
2261b362b15af34006e6a11974088a46d42b903418eJohann    vmul.s16        q2, q12             ; x * Dequant
2271b362b15af34006e6a11974088a46d42b903418eJohann    vmul.s16        q3, q13
2281b362b15af34006e6a11974088a46d42b903418eJohann
2291b362b15af34006e6a11974088a46d42b903418eJohann    vmax.u32        d0, d0, d1
2301b362b15af34006e6a11974088a46d42b903418eJohann    vpmax.u32       d0, d0, d0
2311b362b15af34006e6a11974088a46d42b903418eJohann
2321b362b15af34006e6a11974088a46d42b903418eJohann    vst1.s16        {q2, q3}, [r7@128]  ; store dqcoeff = x * Dequant
2331b362b15af34006e6a11974088a46d42b903418eJohann
2341b362b15af34006e6a11974088a46d42b903418eJohann    vst1.8          {d0[0]}, [r5]       ; store eob
2351b362b15af34006e6a11974088a46d42b903418eJohann
2361b362b15af34006e6a11974088a46d42b903418eJohann    ldmfd           sp!, {r4-r7}
2371b362b15af34006e6a11974088a46d42b903418eJohann    bx              lr
2381b362b15af34006e6a11974088a46d42b903418eJohann
2391b362b15af34006e6a11974088a46d42b903418eJohannzero_output
2401b362b15af34006e6a11974088a46d42b903418eJohann    strb            r2, [r5]            ; store eob
2411b362b15af34006e6a11974088a46d42b903418eJohann    vst1.s16        {q0, q1}, [r6@128]  ; qcoeff = 0
2421b362b15af34006e6a11974088a46d42b903418eJohann    vst1.s16        {q0, q1}, [r7@128]  ; dqcoeff = 0
2431b362b15af34006e6a11974088a46d42b903418eJohann
2441b362b15af34006e6a11974088a46d42b903418eJohann    ldmfd           sp!, {r4-r7}
2451b362b15af34006e6a11974088a46d42b903418eJohann    bx              lr
2461b362b15af34006e6a11974088a46d42b903418eJohann
2471b362b15af34006e6a11974088a46d42b903418eJohann    ENDP
2481b362b15af34006e6a11974088a46d42b903418eJohann
2491b362b15af34006e6a11974088a46d42b903418eJohann; default inverse zigzag table is defined in vp8/common/entropy.c
2501b362b15af34006e6a11974088a46d42b903418eJohann    ALIGN 16    ; enable use of @128 bit aligned loads
2511b362b15af34006e6a11974088a46d42b903418eJohanninv_zig_zag
2521b362b15af34006e6a11974088a46d42b903418eJohann    DCW 0x0001, 0x0002, 0x0006, 0x0007
2531b362b15af34006e6a11974088a46d42b903418eJohann    DCW 0x0003, 0x0005, 0x0008, 0x000d
2541b362b15af34006e6a11974088a46d42b903418eJohann    DCW 0x0004, 0x0009, 0x000c, 0x000e
2551b362b15af34006e6a11974088a46d42b903418eJohann    DCW 0x000a, 0x000b, 0x000f, 0x0010
2561b362b15af34006e6a11974088a46d42b903418eJohann
2571b362b15af34006e6a11974088a46d42b903418eJohann    END
2581b362b15af34006e6a11974088a46d42b903418eJohann
259