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    .globl vp8_short_fdct4x4_ppc
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .globl vp8_short_fdct8x4_ppc
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro load_c V, LABEL, OFF, R0, R1
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lis     \R0, \LABEL@ha
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    la      \R1, \LABEL@l(\R0)
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lvx     \V, \OFF, \R1
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# Forward and inverse DCTs are nearly identical; only differences are
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;#   in normalization (fwd is twice unitary, inv is half unitary)
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;#   and that they are of course transposes of each other.
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;#
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;#   The following three accomplish most of implementation and
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;#   are used only by ppc_idct.c and ppc_fdct.c.
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro prologue
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mfspr   r11, 256            ;# get old VRSAVE
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    oris    r12, r11, 0xfffc
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mtspr   256, r12            ;# set VRSAVE
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stwu    r1,-32(r1)          ;# create space on the stack
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    li      r6, 16
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    load_c v0, dct_tab, 0, r9, r10
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lvx     v1,   r6, r10
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    addi    r10, r10, 32
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lvx     v2,    0, r10
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lvx     v3,   r6, r10
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    load_c v4, ppc_dctperm_tab,  0, r9, r10
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    load_c v5, ppc_dctperm_tab, r6, r9, r10
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    load_c v6, round_tab, 0, r10, r9
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro epilogue
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    addi    r1, r1, 32          ;# recover stack
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mtspr   256, r11            ;# reset old VRSAVE
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# Do horiz xf on two rows of coeffs  v8 = a0 a1 a2 a3  b0 b1 b2 b3.
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;#   a/A are the even rows 0,2   b/B are the odd rows 1,3
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;#   For fwd transform, indices are horizontal positions, then frequencies.
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;#   For inverse transform, frequencies then positions.
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;#   The two resulting  A0..A3  B0..B3  are later combined
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;#   and vertically transformed.
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro two_rows_horiz Dst
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vperm   v9, v8, v8, v4      ;# v9 = a2 a3 a0 a1  b2 b3 b0 b1
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmsumshm v10, v0, v8, v6
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmsumshm v10, v1, v9, v10
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsraw   v10, v10, v7        ;# v10 = A0 A1  B0 B1
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmsumshm v11, v2, v8, v6
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmsumshm v11, v3, v9, v11
7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsraw   v11, v11, v7        ;# v11 = A2 A3  B2 B3
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vpkuwum v10, v10, v11       ;# v10  = A0 A1  B0 B1  A2 A3  B2 B3
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vperm   \Dst, v10, v10, v5  ;# Dest = A0 B0  A1 B1  A2 B2  A3 B3
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# Vertical xf on two rows. DCT values in comments are for inverse transform;
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;#   forward transform uses transpose.
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro two_rows_vert Ceven, Codd
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vspltw  v8, \Ceven, 0       ;# v8 = c00 c10  or  c02 c12 four times
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vspltw  v9, \Codd,  0       ;# v9 = c20 c30  or  c22 c32 ""
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmsumshm v8, v8, v12, v6
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmsumshm v8, v9, v13, v8
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsraw   v10, v8, v7
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vspltw  v8, \Codd,  1       ;# v8 = c01 c11  or  c03 c13
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vspltw  v9, \Ceven, 1       ;# v9 = c21 c31  or  c23 c33
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmsumshm v8, v8, v12, v6
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vmsumshm v8, v9, v13, v8
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vsraw   v8, v8, v7
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vpkuwum v8, v10, v8         ;# v8 = rows 0,1  or 2,3
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro two_rows_h Dest
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stw     r0,  0(r8)
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lwz     r0,  4(r3)
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stw     r0,  4(r8)
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lwzux   r0, r3,r5
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stw     r0,  8(r8)
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lwz     r0,  4(r3)
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stw     r0, 12(r8)
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lvx     v8,  0,r8
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_horiz \Dest
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .align 2
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 short *input
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r4 short *output
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r5 int pitch
11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervp8_short_fdct4x4_ppc:
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    prologue
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vspltisw v7, 14             ;# == 14, fits in 5 signed bits
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    addi    r8, r1, 0
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lwz     r0, 0(r3)
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_h v12                ;# v12 = H00 H10  H01 H11  H02 H12  H03 H13
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lwzux   r0, r3, r5
12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_h v13                ;# v13 = H20 H30  H21 H31  H22 H32  H23 H33
12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lvx     v6, r6, r9          ;# v6 = Vround
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vspltisw v7, -16            ;# == 16 == -16, only low 5 bits matter
12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_vert v0, v1
12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stvx    v8, 0, r4
13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_vert v2, v3
13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stvx    v8, r6, r4
13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    epilogue
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    blr
13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .align 2
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 short *input
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r4 short *output
14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r5 int pitch
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervp8_short_fdct8x4_ppc:
14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    prologue
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vspltisw v7, 14             ;# == 14, fits in 5 signed bits
14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    addi    r8,  r1, 0
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    addi    r10, r3, 0
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lwz     r0, 0(r3)
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_h v12                ;# v12 = H00 H10  H01 H11  H02 H12  H03 H13
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lwzux   r0, r3, r5
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_h v13                ;# v13 = H20 H30  H21 H31  H22 H32  H23 H33
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lvx     v6, r6, r9          ;# v6 = Vround
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vspltisw v7, -16            ;# == 16 == -16, only low 5 bits matter
15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_vert v0, v1
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stvx    v8, 0, r4
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_vert v2, v3
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stvx    v8, r6, r4
16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ;# Next block
16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    addi    r3, r10, 8
16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    addi    r4, r4, 32
16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lvx     v6, 0, r9           ;# v6 = Hround
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vspltisw v7, 14             ;# == 14, fits in 5 signed bits
16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    addi    r8, r1, 0
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lwz     r0, 0(r3)
17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_h v12                ;# v12 = H00 H10  H01 H11  H02 H12  H03 H13
17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lwzux   r0, r3, r5
17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_h v13                ;# v13 = H20 H30  H21 H31  H22 H32  H23 H33
17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    lvx     v6, r6, r9          ;# v6 = Vround
17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    vspltisw v7, -16            ;# == 16 == -16, only low 5 bits matter
17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_vert v0, v1
18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stvx    v8, 0, r4
18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    two_rows_vert v2, v3
18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    stvx    v8, r6, r4
18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    epilogue
18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    blr
18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .data
18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .align 4
19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberppc_dctperm_tab:
19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .byte 4,5,6,7, 0,1,2,3, 12,13,14,15, 8,9,10,11
19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .byte 0,1,4,5, 2,3,6,7, 8,9,12,13, 10,11,14,15
19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .align 4
19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberdct_tab:
19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .short  23170, 23170,-12540,-30274, 23170, 23170,-12540,-30274
19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .short  23170, 23170, 30274, 12540, 23170, 23170, 30274, 12540
19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .short  23170,-23170, 30274,-12540, 23170,-23170, 30274,-12540
20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .short -23170, 23170, 12540,-30274,-23170, 23170, 12540,-30274
20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .align 4
20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberround_tab:
20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .long (1 << (14-1)), (1 << (14-1)), (1 << (14-1)), (1 << (14-1))
20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    .long (1 << (16-1)), (1 << (16-1)), (1 << (16-1)), (1 << (16-1))
206