1ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian/*
2ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  Copyright 2012 The LibYuv Project Authors. All rights reserved.
3ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *
4ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  Use of this source code is governed by a BSD-style license
5ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  that can be found in the LICENSE file in the root of the source
6ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  tree. An additional intellectual property rights grant can be found
7ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  in the file PATENTS. All contributing project authors may
8ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian *  be found in the AUTHORS file in the root of the source tree.
9ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian */
10ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
11ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "libyuv/basic_types.h"
12ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#include "libyuv/row.h"
13ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
14ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef __cplusplus
15ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramaniannamespace libyuv {
16ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianextern "C" {
17ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
18ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
19ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// This module is for GCC MIPS DSPR2
20ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#if !defined(LIBYUV_DISABLE_MIPS) && \
21ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    defined(__mips_dsp) && (__mips_dsp_rev >= 2) && \
22ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    (_MIPS_SIM == _MIPS_SIM_ABI32)
23ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
24ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
25ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                              uint8* dst, int dst_width) {
26ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  __asm__ __volatile__(
27ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    ".set push                                     \n"
28ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    ".set noreorder                                \n"
29ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
30ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "srl            $t9, %[dst_width], 4           \n"  // iterations -> by 16
31ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "beqz           $t9, 2f                        \n"
32ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    " nop                                          \n"
33ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
34ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    ".p2align       2                              \n"
35ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  "1:                                              \n"
36ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t0, 0(%[src_ptr])             \n"  // |3|2|1|0|
37ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t1, 4(%[src_ptr])             \n"  // |7|6|5|4|
38ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t2, 8(%[src_ptr])             \n"  // |11|10|9|8|
39ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t3, 12(%[src_ptr])            \n"  // |15|14|13|12|
40ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t4, 16(%[src_ptr])            \n"  // |19|18|17|16|
41ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t5, 20(%[src_ptr])            \n"  // |23|22|21|20|
42ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t6, 24(%[src_ptr])            \n"  // |27|26|25|24|
43ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t7, 28(%[src_ptr])            \n"  // |31|30|29|28|
44ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    // TODO(fbarchard): Use odd pixels instead of even.
45ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "precr.qb.ph    $t8, $t1, $t0                  \n"  // |6|4|2|0|
46ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "precr.qb.ph    $t0, $t3, $t2                  \n"  // |14|12|10|8|
47ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "precr.qb.ph    $t1, $t5, $t4                  \n"  // |22|20|18|16|
48ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "precr.qb.ph    $t2, $t7, $t6                  \n"  // |30|28|26|24|
49ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "addiu          %[src_ptr], %[src_ptr], 32     \n"
50ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "addiu          $t9, $t9, -1                   \n"
51ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sw             $t8, 0(%[dst])                 \n"
52ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sw             $t0, 4(%[dst])                 \n"
53ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sw             $t1, 8(%[dst])                 \n"
54ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sw             $t2, 12(%[dst])                \n"
55ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "bgtz           $t9, 1b                        \n"
56ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    " addiu         %[dst], %[dst], 16             \n"
57ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
58ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  "2:                                              \n"
59ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "andi           $t9, %[dst_width], 0xf         \n"  // residue
60ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "beqz           $t9, 3f                        \n"
61ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    " nop                                          \n"
62ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
63ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  "21:                                             \n"
64ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lbu            $t0, 0(%[src_ptr])             \n"
65ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "addiu          %[src_ptr], %[src_ptr], 2      \n"
66ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "addiu          $t9, $t9, -1                   \n"
67ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sb             $t0, 0(%[dst])                 \n"
68ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "bgtz           $t9, 21b                       \n"
69ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    " addiu         %[dst], %[dst], 1              \n"
70ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
71ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  "3:                                              \n"
72ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    ".set pop                                      \n"
73ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  : [src_ptr] "+r" (src_ptr),
74ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    [dst] "+r" (dst)
75ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  : [dst_width] "r" (dst_width)
76ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  : "t0", "t1", "t2", "t3", "t4", "t5",
77ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "t6", "t7", "t8", "t9"
78ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  );
79ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
80ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
81ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown2Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
82ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                 uint8* dst, int dst_width) {
83ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const uint8* t = src_ptr + src_stride;
84ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
85ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  __asm__ __volatile__ (
86ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    ".set push                                    \n"
87ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    ".set noreorder                               \n"
88ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
89ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "srl            $t9, %[dst_width], 3          \n"  // iterations -> step 8
90ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "bltz           $t9, 2f                       \n"
91ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    " nop                                         \n"
92ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
93ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    ".p2align       2                             \n"
94ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  "1:                                             \n"
95ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t0, 0(%[src_ptr])            \n"  // |3|2|1|0|
96ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t1, 4(%[src_ptr])            \n"  // |7|6|5|4|
97ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t2, 8(%[src_ptr])            \n"  // |11|10|9|8|
98ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t3, 12(%[src_ptr])           \n"  // |15|14|13|12|
99ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t4, 0(%[t])                  \n"  // |19|18|17|16|
100ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t5, 4(%[t])                  \n"  // |23|22|21|20|
101ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t6, 8(%[t])                  \n"  // |27|26|25|24|
102ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lw             $t7, 12(%[t])                 \n"  // |31|30|29|28|
103ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "addiu          $t9, $t9, -1                  \n"
104ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "srl            $t8, $t0, 16                  \n"  // |X|X|3|2|
105ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "ins            $t0, $t4, 16, 16              \n"  // |17|16|1|0|
106ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "ins            $t4, $t8, 0, 16               \n"  // |19|18|3|2|
107ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "raddu.w.qb     $t0, $t0                      \n"  // |17+16+1+0|
108ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "raddu.w.qb     $t4, $t4                      \n"  // |19+18+3+2|
109ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "shra_r.w       $t0, $t0, 2                   \n"  // |t0+2|>>2
110ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "shra_r.w       $t4, $t4, 2                   \n"  // |t4+2|>>2
111ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "srl            $t8, $t1, 16                  \n"  // |X|X|7|6|
112ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "ins            $t1, $t5, 16, 16              \n"  // |21|20|5|4|
113ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "ins            $t5, $t8, 0, 16               \n"  // |22|23|7|6|
114ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "raddu.w.qb     $t1, $t1                      \n"  // |21+20+5+4|
115ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "raddu.w.qb     $t5, $t5                      \n"  // |23+22+7+6|
116ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "shra_r.w       $t1, $t1, 2                   \n"  // |t1+2|>>2
117ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "shra_r.w       $t5, $t5, 2                   \n"  // |t5+2|>>2
118ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "srl            $t8, $t2, 16                  \n"  // |X|X|11|10|
119ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "ins            $t2, $t6, 16, 16              \n"  // |25|24|9|8|
120ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "ins            $t6, $t8, 0, 16               \n"  // |27|26|11|10|
121ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "raddu.w.qb     $t2, $t2                      \n"  // |25+24+9+8|
122ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "raddu.w.qb     $t6, $t6                      \n"  // |27+26+11+10|
123ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "shra_r.w       $t2, $t2, 2                   \n"  // |t2+2|>>2
124ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "shra_r.w       $t6, $t6, 2                   \n"  // |t5+2|>>2
125ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "srl            $t8, $t3, 16                  \n"  // |X|X|15|14|
126ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "ins            $t3, $t7, 16, 16              \n"  // |29|28|13|12|
127ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "ins            $t7, $t8, 0, 16               \n"  // |31|30|15|14|
128ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "raddu.w.qb     $t3, $t3                      \n"  // |29+28+13+12|
129ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "raddu.w.qb     $t7, $t7                      \n"  // |31+30+15+14|
130ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "shra_r.w       $t3, $t3, 2                   \n"  // |t3+2|>>2
131ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "shra_r.w       $t7, $t7, 2                   \n"  // |t7+2|>>2
132ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "addiu          %[src_ptr], %[src_ptr], 16    \n"
133ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "addiu          %[t], %[t], 16                \n"
134ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sb             $t0, 0(%[dst])                \n"
135ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sb             $t4, 1(%[dst])                \n"
136ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sb             $t1, 2(%[dst])                \n"
137ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sb             $t5, 3(%[dst])                \n"
138ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sb             $t2, 4(%[dst])                \n"
139ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sb             $t6, 5(%[dst])                \n"
140ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sb             $t3, 6(%[dst])                \n"
141ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sb             $t7, 7(%[dst])                \n"
142ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "bgtz           $t9, 1b                       \n"
143ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    " addiu         %[dst], %[dst], 8             \n"
144ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
145ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  "2:                                             \n"
146ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "andi           $t9, %[dst_width], 0x7        \n"  // x = residue
147ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "beqz           $t9, 3f                       \n"
148ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    " nop                                         \n"
149ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
150ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "21:                                          \n"
151ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lwr            $t1, 0(%[src_ptr])            \n"
152ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lwl            $t1, 3(%[src_ptr])            \n"
153ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lwr            $t2, 0(%[t])                  \n"
154ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "lwl            $t2, 3(%[t])                  \n"
155ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "srl            $t8, $t1, 16                  \n"
156ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "ins            $t1, $t2, 16, 16              \n"
157ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "ins            $t2, $t8, 0, 16               \n"
158ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "raddu.w.qb     $t1, $t1                      \n"
159ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "raddu.w.qb     $t2, $t2                      \n"
160ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "shra_r.w       $t1, $t1, 2                   \n"
161ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "shra_r.w       $t2, $t2, 2                   \n"
162ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sb             $t1, 0(%[dst])                \n"
163ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "sb             $t2, 1(%[dst])                \n"
164ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "addiu          %[src_ptr], %[src_ptr], 4     \n"
165ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "addiu          $t9, $t9, -2                  \n"
166ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "addiu          %[t], %[t], 4                 \n"
167ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "bgtz           $t9, 21b                      \n"
168ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    " addiu         %[dst], %[dst], 2             \n"
169ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
170ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  "3:                                             \n"
171ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    ".set pop                                     \n"
172ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
173ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  : [src_ptr] "+r" (src_ptr),
174ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    [dst] "+r" (dst), [t] "+r" (t)
175ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  : [dst_width] "r" (dst_width)
176ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  : "t0", "t1", "t2", "t3", "t4", "t5",
177ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "t6", "t7", "t8", "t9"
178ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  );
179ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
180ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
181ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown4_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
182ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                              uint8* dst, int dst_width) {
183ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  __asm__ __volatile__ (
184ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set push                                    \n"
185ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set noreorder                               \n"
186ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
187ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl            $t9, %[dst_width], 3          \n"
188ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "beqz           $t9, 2f                       \n"
189ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      " nop                                         \n"
190ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
191ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".p2align       2                             \n"
192ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian     "1:                                            \n"
193ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw             $t1, 0(%[src_ptr])            \n"  // |3|2|1|0|
194ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw             $t2, 4(%[src_ptr])            \n"  // |7|6|5|4|
195ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw             $t3, 8(%[src_ptr])            \n"  // |11|10|9|8|
196ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw             $t4, 12(%[src_ptr])           \n"  // |15|14|13|12|
197ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw             $t5, 16(%[src_ptr])           \n"  // |19|18|17|16|
198ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw             $t6, 20(%[src_ptr])           \n"  // |23|22|21|20|
199ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw             $t7, 24(%[src_ptr])           \n"  // |27|26|25|24|
200ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw             $t8, 28(%[src_ptr])           \n"  // |31|30|29|28|
201ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "precr.qb.ph    $t1, $t2, $t1                 \n"  // |6|4|2|0|
202ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "precr.qb.ph    $t2, $t4, $t3                 \n"  // |14|12|10|8|
203ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "precr.qb.ph    $t5, $t6, $t5                 \n"  // |22|20|18|16|
204ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "precr.qb.ph    $t6, $t8, $t7                 \n"  // |30|28|26|24|
205ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "precr.qb.ph    $t1, $t2, $t1                 \n"  // |12|8|4|0|
206ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "precr.qb.ph    $t5, $t6, $t5                 \n"  // |28|24|20|16|
207ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu          %[src_ptr], %[src_ptr], 32    \n"
208ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu          $t9, $t9, -1                  \n"
209ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sw             $t1, 0(%[dst])                \n"
210ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sw             $t5, 4(%[dst])                \n"
211ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "bgtz           $t9, 1b                       \n"
212ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      " addiu         %[dst], %[dst], 8             \n"
213ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
214ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "2:                                             \n"
215ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "andi           $t9, %[dst_width], 7          \n"  // residue
216ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "beqz           $t9, 3f                       \n"
217ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      " nop                                         \n"
218ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
219ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "21:                                            \n"
220ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lbu            $t1, 0(%[src_ptr])            \n"
221ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu          %[src_ptr], %[src_ptr], 4     \n"
222ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu          $t9, $t9, -1                  \n"
223ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb             $t1, 0(%[dst])                \n"
224ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "bgtz           $t9, 21b                      \n"
225ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      " addiu         %[dst], %[dst], 1             \n"
226ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
227ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "3:                                             \n"
228ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set pop                                     \n"
229ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : [src_ptr] "+r" (src_ptr),
230ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [dst] "+r" (dst)
231ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : [dst_width] "r" (dst_width)
232ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : "t1", "t2", "t3", "t4", "t5",
233ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        "t6", "t7", "t8", "t9"
234ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  );
235ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
236ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
237ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown4Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
238ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                 uint8* dst, int dst_width) {
239ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  intptr_t stride = src_stride;
240ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const uint8* s1 = src_ptr + stride;
241ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const uint8* s2 = s1 + stride;
242ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const uint8* s3 = s2 + stride;
243ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
244ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  __asm__ __volatile__ (
245ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set push                                  \n"
246ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set noreorder                             \n"
247ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
248ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl           $t9, %[dst_width], 1         \n"
249ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "andi          $t8, %[dst_width], 1         \n"
250ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
251ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".p2align      2                            \n"
252ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian     "1:                                          \n"
253ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw            $t0, 0(%[src_ptr])           \n"  // |3|2|1|0|
254ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw            $t1, 0(%[s1])                \n"  // |7|6|5|4|
255ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw            $t2, 0(%[s2])                \n"  // |11|10|9|8|
256ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw            $t3, 0(%[s3])                \n"  // |15|14|13|12|
257ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw            $t4, 4(%[src_ptr])           \n"  // |19|18|17|16|
258ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw            $t5, 4(%[s1])                \n"  // |23|22|21|20|
259ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw            $t6, 4(%[s2])                \n"  // |27|26|25|24|
260ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw            $t7, 4(%[s3])                \n"  // |31|30|29|28|
261ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb    $t0, $t0                     \n"  // |3 + 2 + 1 + 0|
262ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb    $t1, $t1                     \n"  // |7 + 6 + 5 + 4|
263ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb    $t2, $t2                     \n"  // |11 + 10 + 9 + 8|
264ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb    $t3, $t3                     \n"  // |15 + 14 + 13 + 12|
265ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb    $t4, $t4                     \n"  // |19 + 18 + 17 + 16|
266ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb    $t5, $t5                     \n"  // |23 + 22 + 21 + 20|
267ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb    $t6, $t6                     \n"  // |27 + 26 + 25 + 24|
268ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb    $t7, $t7                     \n"  // |31 + 30 + 29 + 28|
269ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "add           $t0, $t0, $t1                \n"
270ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "add           $t1, $t2, $t3                \n"
271ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "add           $t0, $t0, $t1                \n"
272ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "add           $t4, $t4, $t5                \n"
273ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "add           $t6, $t6, $t7                \n"
274ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "add           $t4, $t4, $t6                \n"
275ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.w      $t0, $t0, 4                  \n"
276ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.w      $t4, $t4, 4                  \n"
277ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb            $t0, 0(%[dst])               \n"
278ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb            $t4, 1(%[dst])               \n"
279ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu         %[src_ptr], %[src_ptr], 8    \n"
280ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu         %[s1], %[s1], 8              \n"
281ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu         %[s2], %[s2], 8              \n"
282ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu         %[s3], %[s3], 8              \n"
283ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu         $t9, $t9, -1                 \n"
284ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "bgtz          $t9, 1b                      \n"
285ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      " addiu        %[dst], %[dst], 2            \n"
286ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "beqz          $t8, 2f                      \n"
287ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      " nop                                       \n"
288ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
289ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw            $t0, 0(%[src_ptr])           \n"  // |3|2|1|0|
290ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw            $t1, 0(%[s1])                \n"  // |7|6|5|4|
291ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw            $t2, 0(%[s2])                \n"  // |11|10|9|8|
292ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw            $t3, 0(%[s3])                \n"  // |15|14|13|12|
293ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb    $t0, $t0                     \n"  // |3 + 2 + 1 + 0|
294ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb    $t1, $t1                     \n"  // |7 + 6 + 5 + 4|
295ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb    $t2, $t2                     \n"  // |11 + 10 + 9 + 8|
296ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb    $t3, $t3                     \n"  // |15 + 14 + 13 + 12|
297ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "add           $t0, $t0, $t1                \n"
298ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "add           $t1, $t2, $t3                \n"
299ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "add           $t0, $t0, $t1                \n"
300ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.w      $t0, $t0, 4                  \n"
301ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb            $t0, 0(%[dst])               \n"
302ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
303ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "2:                                         \n"
304ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set pop                                   \n"
305ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
306ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : [src_ptr] "+r" (src_ptr),
307ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [dst] "+r" (dst),
308ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [s1] "+r" (s1),
309ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [s2] "+r" (s2),
310ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [s3] "+r" (s3)
311ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : [dst_width] "r" (dst_width)
312ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : "t0", "t1", "t2", "t3", "t4", "t5",
313ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        "t6","t7", "t8", "t9"
314ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  );
315ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
316ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
317ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
318ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst, int dst_width) {
319ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  __asm__ __volatile__ (
320ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set push                                          \n"
321ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set noreorder                                     \n"
322ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".p2align        2                                  \n"
323ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "1:                                                   \n"
324ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t1, 0(%[src_ptr])                 \n"  // |3|2|1|0|
325ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t2, 4(%[src_ptr])                 \n"  // |7|6|5|4|
326ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t3, 8(%[src_ptr])                 \n"  // |11|10|9|8|
327ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t4, 12(%[src_ptr])                \n"  // |15|14|13|12|
328ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t5, 16(%[src_ptr])                \n"  // |19|18|17|16|
329ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t6, 20(%[src_ptr])                \n"  // |23|22|21|20|
330ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t7, 24(%[src_ptr])                \n"  // |27|26|25|24|
331ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t8, 28(%[src_ptr])                \n"  // |31|30|29|28|
332ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "precrq.qb.ph    $t0, $t2, $t4                      \n"  // |7|5|15|13|
333ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "precrq.qb.ph    $t9, $t6, $t8                      \n"  // |23|21|31|30|
334ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu           %[dst_width], %[dst_width], -24    \n"
335ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "ins             $t1, $t1, 8, 16                    \n"  // |3|1|0|X|
336ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "ins             $t4, $t0, 8, 16                    \n"  // |X|15|13|12|
337ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "ins             $t5, $t5, 8, 16                    \n"  // |19|17|16|X|
338ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "ins             $t8, $t9, 8, 16                    \n"  // |X|31|29|28|
339ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu           %[src_ptr], %[src_ptr], 32         \n"
340ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "packrl.ph       $t0, $t3, $t0                      \n"  // |9|8|7|5|
341ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "packrl.ph       $t9, $t7, $t9                      \n"  // |25|24|23|21|
342ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "prepend         $t1, $t2, 8                        \n"  // |4|3|1|0|
343ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "prepend         $t3, $t4, 24                       \n"  // |15|13|12|11|
344ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "prepend         $t5, $t6, 8                        \n"  // |20|19|17|16|
345ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "prepend         $t7, $t8, 24                       \n"  // |31|29|28|27|
346ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sw              $t1, 0(%[dst])                     \n"
347ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sw              $t0, 4(%[dst])                     \n"
348ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sw              $t3, 8(%[dst])                     \n"
349ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sw              $t5, 12(%[dst])                    \n"
350ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sw              $t9, 16(%[dst])                    \n"
351ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sw              $t7, 20(%[dst])                    \n"
352ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "bnez            %[dst_width], 1b                   \n"
353ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      " addiu          %[dst], %[dst], 24                 \n"
354ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set pop                                           \n"
355ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : [src_ptr] "+r" (src_ptr),
356ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [dst] "+r" (dst),
357ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [dst_width] "+r" (dst_width)
358ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      :
359ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : "t0", "t1", "t2", "t3", "t4", "t5",
360ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        "t6","t7", "t8", "t9"
361ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  );
362ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
363ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
364ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_0_Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
365ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                     uint8* d, int dst_width) {
366ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  __asm__ __volatile__ (
367ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set push                                         \n"
368ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set noreorder                                    \n"
369ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "repl.ph           $t3, 3                          \n"  // 0x00030003
370ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
371ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian     ".p2align           2                               \n"
372ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "1:                                                  \n"
373ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw                $t0, 0(%[src_ptr])              \n"  // |S3|S2|S1|S0|
374ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lwx               $t1, %[src_stride](%[src_ptr])  \n"  // |T3|T2|T1|T0|
375ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "rotr              $t2, $t0, 8                     \n"  // |S0|S3|S2|S1|
376ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "rotr              $t6, $t1, 8                     \n"  // |T0|T3|T2|T1|
377ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "muleu_s.ph.qbl    $t4, $t2, $t3                   \n"  // |S0*3|S3*3|
378ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "muleu_s.ph.qbl    $t5, $t6, $t3                   \n"  // |T0*3|T3*3|
379ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "andi              $t0, $t2, 0xFFFF                \n"  // |0|0|S2|S1|
380ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "andi              $t1, $t6, 0xFFFF                \n"  // |0|0|T2|T1|
381ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb        $t0, $t0                        \n"
382ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb        $t1, $t1                        \n"
383ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.w          $t0, $t0, 1                     \n"
384ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.w          $t1, $t1, 1                     \n"
385ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "preceu.ph.qbr     $t2, $t2                        \n"  // |0|S2|0|S1|
386ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "preceu.ph.qbr     $t6, $t6                        \n"  // |0|T2|0|T1|
387ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "rotr              $t2, $t2, 16                    \n"  // |0|S1|0|S2|
388ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "rotr              $t6, $t6, 16                    \n"  // |0|T1|0|T2|
389ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu.ph           $t2, $t2, $t4                   \n"
390ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu.ph           $t6, $t6, $t5                   \n"
391ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sll               $t5, $t0, 1                     \n"
392ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "add               $t0, $t5, $t0                   \n"
393ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.ph         $t2, $t2, 2                     \n"
394ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.ph         $t6, $t6, 2                     \n"
395ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shll.ph           $t4, $t2, 1                     \n"
396ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addq.ph           $t4, $t4, $t2                   \n"
397ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu              $t0, $t0, $t1                   \n"
398ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu             %[src_ptr], %[src_ptr], 4       \n"
399ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.w          $t0, $t0, 2                     \n"
400ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu.ph           $t6, $t6, $t4                   \n"
401ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.ph         $t6, $t6, 2                     \n"
402ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl               $t1, $t6, 16                    \n"
403ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu             %[dst_width], %[dst_width], -3  \n"
404ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb                $t1, 0(%[d])                    \n"
405ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb                $t0, 1(%[d])                    \n"
406ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb                $t6, 2(%[d])                    \n"
407ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "bgtz              %[dst_width], 1b                \n"
408ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      " addiu            %[d], %[d], 3                   \n"
409ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "3:                                                  \n"
410ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set pop                                          \n"
411ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : [src_ptr] "+r" (src_ptr),
412ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [src_stride] "+r" (src_stride),
413ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [d] "+r" (d),
414ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [dst_width] "+r" (dst_width)
415ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      :
416ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : "t0", "t1", "t2", "t3",
417ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        "t4", "t5", "t6"
418ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  );
419ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
420ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
421ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown34_1_Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
422ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                     uint8* d, int dst_width) {
423ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  __asm__ __volatile__ (
424ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set push                                           \n"
425ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set noreorder                                      \n"
426ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "repl.ph           $t2, 3                            \n"  // 0x00030003
427ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
428ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".p2align          2                                 \n"
429ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "1:                                                    \n"
430ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw                $t0, 0(%[src_ptr])                \n"  // |S3|S2|S1|S0|
431ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lwx               $t1, %[src_stride](%[src_ptr])    \n"  // |T3|T2|T1|T0|
432ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "rotr              $t4, $t0, 8                       \n"  // |S0|S3|S2|S1|
433ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "rotr              $t6, $t1, 8                       \n"  // |T0|T3|T2|T1|
434ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "muleu_s.ph.qbl    $t3, $t4, $t2                     \n"  // |S0*3|S3*3|
435ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "muleu_s.ph.qbl    $t5, $t6, $t2                     \n"  // |T0*3|T3*3|
436ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "andi              $t0, $t4, 0xFFFF                  \n"  // |0|0|S2|S1|
437ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "andi              $t1, $t6, 0xFFFF                  \n"  // |0|0|T2|T1|
438ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb        $t0, $t0                          \n"
439ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb        $t1, $t1                          \n"
440ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.w          $t0, $t0, 1                       \n"
441ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.w          $t1, $t1, 1                       \n"
442ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "preceu.ph.qbr     $t4, $t4                          \n"  // |0|S2|0|S1|
443ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "preceu.ph.qbr     $t6, $t6                          \n"  // |0|T2|0|T1|
444ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "rotr              $t4, $t4, 16                      \n"  // |0|S1|0|S2|
445ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "rotr              $t6, $t6, 16                      \n"  // |0|T1|0|T2|
446ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu.ph           $t4, $t4, $t3                     \n"
447ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu.ph           $t6, $t6, $t5                     \n"
448ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.ph         $t6, $t6, 2                       \n"
449ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.ph         $t4, $t4, 2                       \n"
450ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu.ph           $t6, $t6, $t4                     \n"
451ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu             %[src_ptr], %[src_ptr], 4         \n"
452ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.ph         $t6, $t6, 1                       \n"
453ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu              $t0, $t0, $t1                     \n"
454ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu             %[dst_width], %[dst_width], -3    \n"
455ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "shra_r.w          $t0, $t0, 1                       \n"
456ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl               $t1, $t6, 16                      \n"
457ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb                $t1, 0(%[d])                      \n"
458ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb                $t0, 1(%[d])                      \n"
459ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb                $t6, 2(%[d])                      \n"
460ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "bgtz              %[dst_width], 1b                  \n"
461ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      " addiu            %[d], %[d], 3                     \n"
462ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "3:                                                    \n"
463ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set pop                                            \n"
464ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : [src_ptr] "+r" (src_ptr),
465ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [src_stride] "+r" (src_stride),
466ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [d] "+r" (d),
467ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [dst_width] "+r" (dst_width)
468ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      :
469ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : "t0", "t1", "t2", "t3",
470ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        "t4", "t5", "t6"
471ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  );
472ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
473ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
474ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
475ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                               uint8* dst, int dst_width) {
476ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  __asm__ __volatile__ (
477ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set push                                     \n"
478ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set noreorder                                \n"
479ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
480ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".p2align   2                                  \n"
481ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "1:                                              \n"
482ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw         $t0, 0(%[src_ptr])                 \n"  // |3|2|1|0|
483ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw         $t1, 4(%[src_ptr])                 \n"  // |7|6|5|4|
484ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw         $t2, 8(%[src_ptr])                 \n"  // |11|10|9|8|
485ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw         $t3, 12(%[src_ptr])                \n"  // |15|14|13|12|
486ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw         $t4, 16(%[src_ptr])                \n"  // |19|18|17|16|
487ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw         $t5, 20(%[src_ptr])                \n"  // |23|22|21|20|
488ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw         $t6, 24(%[src_ptr])                \n"  // |27|26|25|24|
489ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw         $t7, 28(%[src_ptr])                \n"  // |31|30|29|28|
490ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "wsbh       $t0, $t0                           \n"  // |2|3|0|1|
491ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "wsbh       $t6, $t6                           \n"  // |26|27|24|25|
492ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl        $t0, $t0, 8                        \n"  // |X|2|3|0|
493ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl        $t3, $t3, 16                       \n"  // |X|X|15|14|
494ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl        $t5, $t5, 16                       \n"  // |X|X|23|22|
495ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl        $t7, $t7, 16                       \n"  // |X|X|31|30|
496ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "ins        $t1, $t2, 24, 8                    \n"  // |8|6|5|4|
497ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "ins        $t6, $t5, 0, 8                     \n"  // |26|27|24|22|
498ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "ins        $t1, $t0, 0, 16                    \n"  // |8|6|3|0|
499ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "ins        $t6, $t7, 24, 8                    \n"  // |30|27|24|22|
500ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "prepend    $t2, $t3, 24                       \n"  // |X|15|14|11|
501ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "ins        $t4, $t4, 16, 8                    \n"  // |19|16|17|X|
502ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "ins        $t4, $t2, 0, 16                    \n"  // |19|16|14|11|
503ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu      %[src_ptr], %[src_ptr], 32         \n"
504ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu      %[dst_width], %[dst_width], -12    \n"
505ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu      $t8,%[dst_width], -12              \n"
506ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sw         $t1, 0(%[dst])                     \n"
507ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sw         $t4, 4(%[dst])                     \n"
508ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sw         $t6, 8(%[dst])                     \n"
509ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "bgez       $t8, 1b                            \n"
510ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      " addiu     %[dst], %[dst], 12                 \n"
511ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set pop                                      \n"
512ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : [src_ptr] "+r" (src_ptr),
513ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [dst] "+r" (dst),
514ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [dst_width] "+r" (dst_width)
515ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      :
516ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : "t0", "t1", "t2", "t3", "t4",
517ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        "t5", "t6", "t7", "t8"
518ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  );
519ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
520ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
521ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_2_Box_MIPS_DSPR2(const uint8* src_ptr, ptrdiff_t src_stride,
522ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                     uint8* dst_ptr, int dst_width) {
523ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  intptr_t stride = src_stride;
524ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const uint8* t = src_ptr + stride;
525ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const int c = 0x2AAA;
526ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
527ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  __asm__ __volatile__ (
528ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set push                                         \n"
529ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set noreorder                                    \n"
530ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
531ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".p2align        2                                 \n"
532ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "1:                                                  \n"
533ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t0, 0(%[src_ptr])                \n"  // |S3|S2|S1|S0|
534ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t1, 4(%[src_ptr])                \n"  // |S7|S6|S5|S4|
535ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t2, 0(%[t])                      \n"  // |T3|T2|T1|T0|
536ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t3, 4(%[t])                      \n"  // |T7|T6|T5|T4|
537ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "rotr            $t1, $t1, 16                      \n"  // |S5|S4|S7|S6|
538ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "packrl.ph       $t4, $t1, $t3                     \n"  // |S7|S6|T7|T6|
539ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "packrl.ph       $t5, $t3, $t1                     \n"  // |T5|T4|S5|S4|
540ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t4, $t4                          \n"  // S7+S6+T7+T6
541ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t5, $t5                          \n"  // T5+T4+S5+S4
542ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "precrq.qb.ph    $t6, $t0, $t2                     \n"  // |S3|S1|T3|T1|
543ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "precrq.qb.ph    $t6, $t6, $t6                     \n"  // |S3|T3|S3|T3|
544ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl             $t4, $t4, 2                       \n"  // t4 / 4
545ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl             $t6, $t6, 16                      \n"  // |0|0|S3|T3|
546ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t6, $t6                          \n"  // 0+0+S3+T3
547ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu            $t6, $t5, $t6                     \n"
548ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "mul             $t6, $t6, %[c]                    \n"  // t6 * 0x2AAA
549ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sll             $t0, $t0, 8                       \n"  // |S2|S1|S0|0|
550ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sll             $t2, $t2, 8                       \n"  // |T2|T1|T0|0|
551ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t0, $t0                          \n"  // S2+S1+S0+0
552ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t2, $t2                          \n"  // T2+T1+T0+0
553ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu            $t0, $t0, $t2                     \n"
554ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "mul             $t0, $t0, %[c]                    \n"  // t0 * 0x2AAA
555ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu           %[src_ptr], %[src_ptr], 8         \n"
556ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu           %[t], %[t], 8                     \n"
557ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu           %[dst_width], %[dst_width], -3    \n"
558ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu           %[dst_ptr], %[dst_ptr], 3         \n"
559ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl             $t6, $t6, 16                      \n"
560ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl             $t0, $t0, 16                      \n"
561ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb              $t4, -1(%[dst_ptr])               \n"
562ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb              $t6, -2(%[dst_ptr])               \n"
563ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "bgtz            %[dst_width], 1b                  \n"
564ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      " sb             $t0, -3(%[dst_ptr])               \n"
565ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set pop                                          \n"
566ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : [src_ptr] "+r" (src_ptr),
567ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [dst_ptr] "+r" (dst_ptr),
568ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [t] "+r" (t),
569ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [dst_width] "+r" (dst_width)
570ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : [c] "r" (c)
571ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : "t0", "t1", "t2", "t3", "t4", "t5", "t6"
572ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  );
573ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
574ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
575ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanianvoid ScaleRowDown38_3_Box_MIPS_DSPR2(const uint8* src_ptr,
576ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                     ptrdiff_t src_stride,
577ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian                                     uint8* dst_ptr, int dst_width) {
578ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  intptr_t stride = src_stride;
579ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const uint8* s1 = src_ptr + stride;
580ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  stride += stride;
581ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const uint8* s2 = src_ptr + stride;
582ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const int c1 = 0x1C71;
583ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  const int c2 = 0x2AAA;
584ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
585ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  __asm__ __volatile__ (
586ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set push                                         \n"
587ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set noreorder                                    \n"
588ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
589ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".p2align        2                                 \n"
590ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian    "1:                                                  \n"
591ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t0, 0(%[src_ptr])                \n"  // |S3|S2|S1|S0|
592ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t1, 4(%[src_ptr])                \n"  // |S7|S6|S5|S4|
593ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t2, 0(%[s1])                     \n"  // |T3|T2|T1|T0|
594ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t3, 4(%[s1])                     \n"  // |T7|T6|T5|T4|
595ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t4, 0(%[s2])                     \n"  // |R3|R2|R1|R0|
596ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "lw              $t5, 4(%[s2])                     \n"  // |R7|R6|R5|R4|
597ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "rotr            $t1, $t1, 16                      \n"  // |S5|S4|S7|S6|
598ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "packrl.ph       $t6, $t1, $t3                     \n"  // |S7|S6|T7|T6|
599ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t6, $t6                          \n"  // S7+S6+T7+T6
600ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "packrl.ph       $t7, $t3, $t1                     \n"  // |T5|T4|S5|S4|
601ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t7, $t7                          \n"  // T5+T4+S5+S4
602ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sll             $t8, $t5, 16                      \n"  // |R5|R4|0|0|
603ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t8, $t8                          \n"  // R5+R4
604ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu            $t7, $t7, $t8                     \n"
605ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl             $t8, $t5, 16                      \n"  // |0|0|R7|R6|
606ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t8, $t8                          \n"  // R7 + R6
607ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu            $t6, $t6, $t8                     \n"
608ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "mul             $t6, $t6, %[c2]                   \n"  // t6 * 0x2AAA
609ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "precrq.qb.ph    $t8, $t0, $t2                     \n"  // |S3|S1|T3|T1|
610ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "precrq.qb.ph    $t8, $t8, $t4                     \n"  // |S3|T3|R3|R1|
611ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl             $t8, $t8, 8                       \n"  // |0|S3|T3|R3|
612ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t8, $t8                          \n"  // S3 + T3 + R3
613ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu            $t7, $t7, $t8                     \n"
614ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "mul             $t7, $t7, %[c1]                   \n"  // t7 * 0x1C71
615ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sll             $t0, $t0, 8                       \n"  // |S2|S1|S0|0|
616ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sll             $t2, $t2, 8                       \n"  // |T2|T1|T0|0|
617ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sll             $t4, $t4, 8                       \n"  // |R2|R1|R0|0|
618ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t0, $t0                          \n"
619ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t2, $t2                          \n"
620ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "raddu.w.qb      $t4, $t4                          \n"
621ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu            $t0, $t0, $t2                     \n"
622ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addu            $t0, $t0, $t4                     \n"
623ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "mul             $t0, $t0, %[c1]                   \n"  // t0 * 0x1C71
624ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu           %[src_ptr], %[src_ptr], 8         \n"
625ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu           %[s1], %[s1], 8                   \n"
626ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu           %[s2], %[s2], 8                   \n"
627ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu           %[dst_width], %[dst_width], -3    \n"
628ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "addiu           %[dst_ptr], %[dst_ptr], 3         \n"
629ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl             $t6, $t6, 16                      \n"
630ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl             $t7, $t7, 16                      \n"
631ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "srl             $t0, $t0, 16                      \n"
632ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb              $t6, -1(%[dst_ptr])               \n"
633ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "sb              $t7, -2(%[dst_ptr])               \n"
634ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      "bgtz            %[dst_width], 1b                  \n"
635ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      " sb             $t0, -3(%[dst_ptr])               \n"
636ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      ".set pop                                          \n"
637ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : [src_ptr] "+r" (src_ptr),
638ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [dst_ptr] "+r" (dst_ptr),
639ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [s1] "+r" (s1),
640ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [s2] "+r" (s2),
641ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        [dst_width] "+r" (dst_width)
642ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : [c1] "r" (c1), [c2] "r" (c2)
643ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian      : "t0", "t1", "t2", "t3", "t4",
644ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian        "t5", "t6", "t7", "t8"
645ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian  );
646ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}
647ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
648ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif  // defined(__mips_dsp) && (__mips_dsp_rev >= 2)
649ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
650ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#ifdef __cplusplus
651ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}  // extern "C"
652ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian}  // namespace libyuv
653ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian#endif
654ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian
655