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