190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;
2f71323e297a928af368937089d3ed71239786f86Andreas Huber;  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;
4f71323e297a928af368937089d3ed71239786f86Andreas Huber;  Use of this source code is governed by a BSD-style license
5f71323e297a928af368937089d3ed71239786f86Andreas Huber;  that can be found in the LICENSE file in the root of the source
6f71323e297a928af368937089d3ed71239786f86Andreas Huber;  tree. An additional intellectual property rights grant can be found
7f71323e297a928af368937089d3ed71239786f86Andreas Huber;  in the file PATENTS.  All contributing project authors may
8f71323e297a928af368937089d3ed71239786f86Andreas Huber;  be found in the AUTHORS file in the root of the source tree.
990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;
1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    EXPORT  |vp8_fast_fdct8x4_neon|
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ARM
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    REQUIRE8
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    PRESERVE8
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    AREA ||.text||, CODE, READONLY, ALIGN=2
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;void vp8_fast_fdct4x4_c(short *input, short *output, int pitch);
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;NOTE:
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;The input *src_diff. src_diff is calculated as:
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;diff_ptr[c] = src_ptr[c] - pred_ptr[c]; (in Subtract* function)
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;In which *src_ptr and *pred_ptr both are unsigned char.
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;Therefore, *src_diff should be in the range of [-255, 255].
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;CAUTION:
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;The input values of 25th block are set in vp8_build_dcblock function, which are out of [-255, 255].
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;But, VP8 encoder only uses vp8_short_fdct4x4_c for 25th block, not vp8_fast_fdct4x4_c. That makes
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;it ok for assuming *input in [-255, 255] in vp8_fast_fdct4x4_c, but not ok in vp8_short_fdct4x4_c.
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber|vp8_fast_fdct8x4_neon| PROC
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vld1.16         {q1}, [r0], r2              ;load input
32d35fe0269d77984b383b6bdc051f26b72da15277Ard Biesheuvel    adr             r12, ffdct8_coeff
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vld1.16         {q2}, [r0], r2
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vld1.16         {q3}, [r0], r2
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vld1.16         {d0}, [r12]
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vld1.16         {q4}, [r0], r2
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;First for-loop
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;transpose d2, d4, d6, d8. Then, d2=ip[0], d4=ip[1], d6=ip[2], d8=ip[3]
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;transpose d3, d5, d7, d9. Then, d3=ip[0], d5=ip[1], d7=ip[2], d9=ip[3]
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.32         d2, d6
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.32         d3, d7
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.32         d4, d8
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.32         d5, d9
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.16         d2, d4
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.16         d3, d5
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.16         d6, d8
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.16         d7, d9
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d10, d2, d8             ;ip[0]+ip[3]
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d11, d4, d6             ;ip[1]+ip[2]
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d12, d4, d6             ;ip[1]-ip[2]
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d13, d2, d8             ;ip[0]-ip[3]
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d22, d3, d9
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d23, d5, d7
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d24, d5, d7
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d25, d3, d9
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshl.i16        q5, q5, #1              ; a1, b1
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshl.i16        q6, q6, #1              ; c1, d1
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshl.i16        q1, q11, #1
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshl.i16        q2, q12, #1
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d14, d10, d11           ;temp1 = a1 + b1
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d15, d10, d11           ;temp2 = a1 - b1
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d24, d2, d3
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d25, d2, d3
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqdmulh.s16     q8, q7, d0[1]
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqdmulh.s16     q13, q12, d0[1]
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqdmulh.s16     q10, q6, d0[0]
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqdmulh.s16     q15, q2, d0[0]
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqdmulh.s16     q9, q6, d0[2]
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqdmulh.s16     q14, q2, d0[2]
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q8, q8, #1
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q13, q13, #1
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q10, q10, #1
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q15, q15, #1
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q9, q9, #1              ;d18:temp1 = ( c1 * x_c3)>>16;  d19:temp1 =  (d1 * x_c3)>>16
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q14, q14, #1            ;d28:temp1 = ( c1 * x_c3)>>16;  d29:temp1 =  (d1 * x_c3)>>16
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        q10, q6, q10            ;d20:temp2 = ((c1 * x_c1)>>16) + c1;  d21:temp2 = ((d1 * x_c1)>>16) + d1
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        q15, q2, q15            ;d30:temp2 = ((c1 * x_c1)>>16) + c1;  d31:temp2 = ((d1 * x_c1)>>16) + d1
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d2, d14, d16            ;op[0] = ((temp1 * x_c2 )>>16) + temp1
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d3, d24, d26            ;op[0] = ((temp1 * x_c2 )>>16) + temp1
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d6, d15, d17            ;op[2] = ((temp2 * x_c2 )>>16) + temp2
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d7, d25, d27            ;op[2] = ((temp2 * x_c2 )>>16) + temp2
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d4, d18, d21            ;op[1] = temp1 + temp2  -- q is not necessary, just for protection
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d5, d28, d31            ;op[1] = temp1 + temp2  -- q is not necessary, just for protection
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d8, d19, d20            ;op[3] = temp1 - temp2
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d9, d29, d30            ;op[3] = temp1 - temp2
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;Second for-loop
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;transpose d2, d4, d6, d8. Then, d2=ip[0], d4=ip[4], d6=ip[8], d8=ip[12]
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;transpose d3, d5, d7, d9. Then, d3=ip[0], d5=ip[4], d7=ip[8], d9=ip[12]
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.32         d2, d6
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.32         d3, d7
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.32         d4, d8
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.32         d5, d9
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.16         d2, d4
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.16         d3, d5
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.16         d6, d8
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vtrn.16         d7, d9
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d10, d2, d8             ;a1 = ip[0]+ip[12]
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d11, d4, d6             ;b1 = ip[4]+ip[8]
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d12, d4, d6             ;c1 = ip[4]-ip[8]
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d13, d2, d8             ;d1 = ip[0]-ip[12]
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d2, d3, d9
11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d4, d5, d7
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d24, d5, d7
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d25, d3, d9
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d14, d10, d11           ;temp1 = a1 + b1
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d15, d10, d11           ;temp2 = a1 - b1
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d22, d2, d4
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d23, d2, d4
11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqdmulh.s16     q8, q7, d0[1]
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqdmulh.s16     q13, q11, d0[1]
12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqdmulh.s16     q10, q6, d0[0]
12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqdmulh.s16     q15, q12, d0[0]
12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqdmulh.s16     q9, q6, d0[2]
12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vqdmulh.s16     q14, q12, d0[2]
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q8, q8, #1
12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q13, q13, #1
12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q10, q10, #1
13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q15, q15, #1
13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q9, q9, #1              ;d18:temp1 = ( c1 * x_c3)>>16;  d19:temp1 =  (d1 * x_c3)>>16
13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q14, q14, #1            ;d28:temp1 = ( c1 * x_c3)>>16;  d29:temp1 =  (d1 * x_c3)>>16
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        q10, q6, q10            ;d20:temp2 = ((c1 * x_c1)>>16) + c1;  d21:temp2 = ((d1 * x_c1)>>16) + d1
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        q15, q12, q15           ;d30:temp2 = ((c1 * x_c1)>>16) + c1;  d31:temp2 = ((d1 * x_c1)>>16) + d1
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d2, d14, d16            ;a2 = ((temp1 * x_c2 )>>16) + temp1
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d6, d22, d26            ;a2 = ((temp1 * x_c2 )>>16) + temp1
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d4, d15, d17            ;c2 = ((temp2 * x_c2 )>>16) + temp2
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d8, d23, d27            ;c2 = ((temp2 * x_c2 )>>16) + temp2
14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d3, d18, d21            ;b2 = temp1 + temp2  -- q is not necessary, just for protection
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vadd.s16        d7, d28, d31            ;b2 = temp1 + temp2  -- q is not necessary, just for protection
14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d5, d19, d20            ;d2 = temp1 - temp2
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        d9, d29, d30            ;d2 = temp1 - temp2
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vclt.s16        q5, q1, #0
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vclt.s16        q6, q2, #0
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vclt.s16        q7, q3, #0
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vclt.s16        q8, q4, #0
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        q1, q1, q5
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        q2, q2, q6
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        q3, q3, q7
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsub.s16        q4, q4, q8
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q1, q1, #1
15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q2, q2, #1
15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q3, q3, #1
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vshr.s16        q4, q4, #1
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.16         {q1, q2}, [r1]!
16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vst1.16         {q3, q4}, [r1]
16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    bx              lr
16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ENDP
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;-----------------
16879f15823c34ae1e423108295e416213200bb280fAndreas Huber
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberffdct8_coeff
17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 60547 =  0xEC83
17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 46341 =  0xB505
17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 25080 =  0x61F8
17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    DCD     0xB505EC83, 0x000061F8
17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    END
176