1233d2500723e5594f3e7c70896ffeeef32b9c950ywan/*
2233d2500723e5594f3e7c70896ffeeef32b9c950ywan *  Copyright (c) 2013 The WebM project authors. All Rights Reserved.
3233d2500723e5594f3e7c70896ffeeef32b9c950ywan *
4233d2500723e5594f3e7c70896ffeeef32b9c950ywan *  Use of this source code is governed by a BSD-style license
5233d2500723e5594f3e7c70896ffeeef32b9c950ywan *  that can be found in the LICENSE file in the root of the source
6233d2500723e5594f3e7c70896ffeeef32b9c950ywan *  tree. An additional intellectual property rights grant can be found
7233d2500723e5594f3e7c70896ffeeef32b9c950ywan *  in the file PATENTS.  All contributing project authors may
8233d2500723e5594f3e7c70896ffeeef32b9c950ywan *  be found in the AUTHORS file in the root of the source tree.
9233d2500723e5594f3e7c70896ffeeef32b9c950ywan */
10233d2500723e5594f3e7c70896ffeeef32b9c950ywan
11233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifndef VP9_COMMON_MIPS_DSPR2_VP9_LOOPFILTER_MACROS_DSPR2_H_
12233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define VP9_COMMON_MIPS_DSPR2_VP9_LOOPFILTER_MACROS_DSPR2_H_
13233d2500723e5594f3e7c70896ffeeef32b9c950ywan
14233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include <stdlib.h>
15233d2500723e5594f3e7c70896ffeeef32b9c950ywan
16233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "./vp9_rtcd.h"
17233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vp9/common/vp9_common.h"
18233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vp9/common/vp9_onyxc_int.h"
19233d2500723e5594f3e7c70896ffeeef32b9c950ywan
20233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus
21233d2500723e5594f3e7c70896ffeeef32b9c950ywanextern "C" {
22233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif
23233d2500723e5594f3e7c70896ffeeef32b9c950ywan
24233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if HAVE_DSPR2
25233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define STORE_F0() {                                                    \
26233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
27233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q1_f0],    1(%[s4])           \n\t"                   \
28233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q0_f0],    0(%[s4])           \n\t"                   \
29233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p0_f0],   -1(%[s4])           \n\t"                   \
30233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p1_f0],   -2(%[s4])           \n\t"                   \
31233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
32233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
33233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q1_f0] "r" (q1_f0), [q0_f0] "r" (q0_f0),                     \
34233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_f0] "r" (p0_f0), [p1_f0] "r" (p1_f0),                     \
35233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [s4] "r" (s4)                                                 \
36233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
37233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
38233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
39233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q1_f0],   %[q1_f0],   8       \n\t"                   \
40233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q0_f0],   %[q0_f0],   8       \n\t"                   \
41233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p0_f0],   %[p0_f0],   8       \n\t"                   \
42233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p1_f0],   %[p1_f0],   8       \n\t"                   \
43233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
44233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q1_f0] "+r" (q1_f0), [q0_f0] "+r" (q0_f0),                   \
45233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_f0] "+r" (p0_f0), [p1_f0] "+r" (p1_f0)                    \
46233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
47233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
48233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
49233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
50233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q1_f0],    1(%[s3])           \n\t"                   \
51233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q0_f0],    0(%[s3])           \n\t"                   \
52233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p0_f0],   -1(%[s3])           \n\t"                   \
53233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p1_f0],   -2(%[s3])           \n\t"                   \
54233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
55233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p1_f0] "+r" (p1_f0)                                          \
56233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q1_f0] "r" (q1_f0), [q0_f0] "r" (q0_f0),                     \
57233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [s3] "r" (s3), [p0_f0] "r" (p0_f0)                            \
58233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
59233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
60233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
61233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q1_f0],   %[q1_f0],   8       \n\t"                   \
62233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q0_f0],   %[q0_f0],   8       \n\t"                   \
63233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p0_f0],   %[p0_f0],   8       \n\t"                   \
64233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p1_f0],   %[p1_f0],   8       \n\t"                   \
65233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
66233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q1_f0] "+r" (q1_f0), [q0_f0] "+r" (q0_f0),                   \
67233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_f0] "+r" (p0_f0), [p1_f0] "+r" (p1_f0)                    \
68233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
69233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
70233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
71233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
72233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q1_f0],    1(%[s2])           \n\t"                   \
73233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q0_f0],    0(%[s2])           \n\t"                   \
74233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p0_f0],   -1(%[s2])           \n\t"                   \
75233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p1_f0],   -2(%[s2])           \n\t"                   \
76233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
77233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
78233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q1_f0] "r" (q1_f0), [q0_f0] "r" (q0_f0),                     \
79233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_f0] "r" (p0_f0), [p1_f0] "r" (p1_f0),                     \
80233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [s2] "r" (s2)                                                 \
81233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
82233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
83233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
84233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q1_f0],   %[q1_f0],   8       \n\t"                   \
85233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q0_f0],   %[q0_f0],   8       \n\t"                   \
86233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p0_f0],   %[p0_f0],   8       \n\t"                   \
87233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p1_f0],   %[p1_f0],   8       \n\t"                   \
88233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
89233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q1_f0] "+r" (q1_f0), [q0_f0] "+r" (q0_f0),                   \
90233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_f0] "+r" (p0_f0), [p1_f0] "+r" (p1_f0)                    \
91233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
92233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
93233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
94233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
95233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q1_f0],    1(%[s1])           \n\t"                   \
96233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q0_f0],    0(%[s1])           \n\t"                   \
97233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p0_f0],   -1(%[s1])           \n\t"                   \
98233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p1_f0],   -2(%[s1])           \n\t"                   \
99233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
100233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
101233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q1_f0] "r" (q1_f0), [q0_f0] "r" (q0_f0),                     \
102233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_f0] "r" (p0_f0), [p1_f0] "r" (p1_f0),                     \
103233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [s1] "r" (s1)                                                 \
104233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
105233d2500723e5594f3e7c70896ffeeef32b9c950ywan}
106233d2500723e5594f3e7c70896ffeeef32b9c950ywan
107233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define STORE_F1() {                                                    \
108233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
109233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q2_r],     2(%[s4])           \n\t"                   \
110233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q1_r],     1(%[s4])           \n\t"                   \
111233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q0_r],     0(%[s4])           \n\t"                   \
112233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p0_r],    -1(%[s4])           \n\t"                   \
113233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p1_r],    -2(%[s4])           \n\t"                   \
114233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p2_r],    -3(%[s4])           \n\t"                   \
115233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
116233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
117233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q2_r] "r" (q2_r), [q1_r] "r" (q1_r), [q0_r] "r" (q0_r),      \
118233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_r] "r" (p0_r), [p1_r] "r" (p1_r), [p2_r] "r" (p2_r),      \
119233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [s4] "r" (s4)                                                 \
120233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
121233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
122233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
123233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q2_r],    %[q2_r],    16      \n\t"                   \
124233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q1_r],    %[q1_r],    16      \n\t"                   \
125233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q0_r],    %[q0_r],    16      \n\t"                   \
126233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p0_r],    %[p0_r],    16      \n\t"                   \
127233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p1_r],    %[p1_r],    16      \n\t"                   \
128233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p2_r],    %[p2_r],    16      \n\t"                   \
129233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
130233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q2_r] "+r" (q2_r), [q1_r] "+r" (q1_r), [q0_r] "+r" (q0_r),   \
131233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_r] "+r" (p0_r), [p1_r] "+r" (p1_r), [p2_r] "+r" (p2_r)    \
132233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
133233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
134233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
135233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
136233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q2_r],     2(%[s3])           \n\t"                   \
137233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q1_r],     1(%[s3])           \n\t"                   \
138233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q0_r],     0(%[s3])           \n\t"                   \
139233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p0_r],    -1(%[s3])           \n\t"                   \
140233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p1_r],    -2(%[s3])           \n\t"                   \
141233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p2_r],    -3(%[s3])           \n\t"                   \
142233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
143233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
144233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q2_r] "r" (q2_r), [q1_r] "r" (q1_r), [q0_r] "r" (q0_r),      \
145233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_r] "r" (p0_r), [p1_r] "r" (p1_r), [p2_r] "r" (p2_r),      \
146233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [s3] "r" (s3)                                                 \
147233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
148233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
149233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
150233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q2_l],     2(%[s2])           \n\t"                   \
151233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q1_l],     1(%[s2])           \n\t"                   \
152233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q0_l],     0(%[s2])           \n\t"                   \
153233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p0_l],    -1(%[s2])           \n\t"                   \
154233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p1_l],    -2(%[s2])           \n\t"                   \
155233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p2_l],    -3(%[s2])           \n\t"                   \
156233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
157233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
158233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q2_l] "r" (q2_l), [q1_l] "r" (q1_l), [q0_l] "r" (q0_l),      \
159233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_l] "r" (p0_l), [p1_l] "r" (p1_l), [p2_l] "r" (p2_l),      \
160233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [s2] "r" (s2)                                                 \
161233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
162233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
163233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
164233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q2_l],    %[q2_l],    16      \n\t"                   \
165233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q1_l],    %[q1_l],    16      \n\t"                   \
166233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q0_l],    %[q0_l],    16      \n\t"                   \
167233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p0_l],    %[p0_l],    16      \n\t"                   \
168233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p1_l],    %[p1_l],    16      \n\t"                   \
169233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p2_l],    %[p2_l],    16      \n\t"                   \
170233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
171233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q2_l] "+r" (q2_l), [q1_l] "+r" (q1_l), [q0_l] "+r" (q0_l),   \
172233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_l] "+r" (p0_l), [p1_l] "+r" (p1_l), [p2_l] "+r" (p2_l)    \
173233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
174233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
175233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
176233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
177233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q2_l],     2(%[s1])           \n\t"                   \
178233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q1_l],     1(%[s1])           \n\t"                   \
179233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q0_l],     0(%[s1])           \n\t"                   \
180233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p0_l],    -1(%[s1])           \n\t"                   \
181233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p1_l],    -2(%[s1])           \n\t"                   \
182233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p2_l],    -3(%[s1])           \n\t"                   \
183233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
184233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
185233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q2_l] "r" (q2_l), [q1_l] "r" (q1_l), [q0_l] "r" (q0_l),      \
186233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_l] "r" (p0_l), [p1_l] "r" (p1_l), [p2_l] "r" (p2_l),      \
187233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [s1] "r" (s1)                                                 \
188233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
189233d2500723e5594f3e7c70896ffeeef32b9c950ywan}
190233d2500723e5594f3e7c70896ffeeef32b9c950ywan
191233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define STORE_F2() {                                                    \
192233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
193233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q6_r],     6(%[s4])           \n\t"                   \
194233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q5_r],     5(%[s4])           \n\t"                   \
195233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q4_r],     4(%[s4])           \n\t"                   \
196233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q3_r],     3(%[s4])           \n\t"                   \
197233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q2_r],     2(%[s4])           \n\t"                   \
198233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q1_r],     1(%[s4])           \n\t"                   \
199233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q0_r],     0(%[s4])           \n\t"                   \
200233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p0_r],    -1(%[s4])           \n\t"                   \
201233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p1_r],    -2(%[s4])           \n\t"                   \
202233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p2_r],    -3(%[s4])           \n\t"                   \
203233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p3_r],    -4(%[s4])           \n\t"                   \
204233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p4_r],    -5(%[s4])           \n\t"                   \
205233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p5_r],    -6(%[s4])           \n\t"                   \
206233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p6_r],    -7(%[s4])           \n\t"                   \
207233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
208233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
209233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q6_r] "r" (q6_r), [q5_r] "r" (q5_r), [q4_r] "r" (q4_r),      \
210233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q3_r] "r" (q3_r), [q2_r] "r" (q2_r), [q1_r] "r" (q1_r),      \
211233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q0_r] "r" (q0_r),                                            \
212233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_r] "r" (p0_r), [p1_r] "r" (p1_r), [p2_r] "r" (p2_r),      \
213233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p3_r] "r" (p3_r), [p4_r] "r" (p4_r), [p5_r] "r" (p5_r),      \
214233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p6_r] "r" (p6_r),                                            \
215233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [s4] "r" (s4)                                                 \
216233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
217233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
218233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
219233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q6_r],    %[q6_r],    16      \n\t"                   \
220233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q5_r],    %[q5_r],    16      \n\t"                   \
221233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q4_r],    %[q4_r],    16      \n\t"                   \
222233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q3_r],    %[q3_r],    16      \n\t"                   \
223233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q2_r],    %[q2_r],    16      \n\t"                   \
224233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q1_r],    %[q1_r],    16      \n\t"                   \
225233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q0_r],    %[q0_r],    16      \n\t"                   \
226233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p0_r],    %[p0_r],    16      \n\t"                   \
227233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p1_r],    %[p1_r],    16      \n\t"                   \
228233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p2_r],    %[p2_r],    16      \n\t"                   \
229233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p3_r],    %[p3_r],    16      \n\t"                   \
230233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p4_r],    %[p4_r],    16      \n\t"                   \
231233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p5_r],    %[p5_r],    16      \n\t"                   \
232233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p6_r],    %[p6_r],    16      \n\t"                   \
233233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
234233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q6_r] "+r" (q6_r), [q5_r] "+r" (q5_r), [q4_r] "+r" (q4_r),   \
235233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q3_r] "+r" (q3_r), [q2_r] "+r" (q2_r), [q1_r] "+r" (q1_r),   \
236233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q0_r] "+r" (q0_r),                                           \
237233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_r] "+r" (p0_r), [p1_r] "+r" (p1_r), [p2_r] "+r" (p2_r),   \
238233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p3_r] "+r" (p3_r), [p4_r] "+r" (p4_r), [p5_r] "+r" (p5_r),   \
239233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p6_r] "+r" (p6_r)                                            \
240233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
241233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
242233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
243233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
244233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q6_r],     6(%[s3])           \n\t"                   \
245233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q5_r],     5(%[s3])           \n\t"                   \
246233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q4_r],     4(%[s3])           \n\t"                   \
247233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q3_r],     3(%[s3])           \n\t"                   \
248233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q2_r],     2(%[s3])           \n\t"                   \
249233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q1_r],     1(%[s3])           \n\t"                   \
250233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q0_r],     0(%[s3])           \n\t"                   \
251233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p0_r],    -1(%[s3])           \n\t"                   \
252233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p1_r],    -2(%[s3])           \n\t"                   \
253233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p2_r],    -3(%[s3])           \n\t"                   \
254233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p3_r],    -4(%[s3])           \n\t"                   \
255233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p4_r],    -5(%[s3])           \n\t"                   \
256233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p5_r],    -6(%[s3])           \n\t"                   \
257233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p6_r],    -7(%[s3])           \n\t"                   \
258233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
259233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
260233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q6_r] "r" (q6_r), [q5_r] "r" (q5_r), [q4_r] "r" (q4_r),      \
261233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q3_r] "r" (q3_r), [q2_r] "r" (q2_r), [q1_r] "r" (q1_r),      \
262233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q0_r] "r" (q0_r),                                            \
263233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_r] "r" (p0_r), [p1_r] "r" (p1_r), [p2_r] "r" (p2_r),      \
264233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p3_r] "r" (p3_r), [p4_r] "r" (p4_r), [p5_r] "r" (p5_r),      \
265233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p6_r] "r" (p6_r),                                            \
266233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [s3] "r" (s3)                                                 \
267233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
268233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
269233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
270233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q6_l],     6(%[s2])           \n\t"                   \
271233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q5_l],     5(%[s2])           \n\t"                   \
272233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q4_l],     4(%[s2])           \n\t"                   \
273233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q3_l],     3(%[s2])           \n\t"                   \
274233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q2_l],     2(%[s2])           \n\t"                   \
275233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q1_l],     1(%[s2])           \n\t"                   \
276233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q0_l],     0(%[s2])           \n\t"                   \
277233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p0_l],    -1(%[s2])           \n\t"                   \
278233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p1_l],    -2(%[s2])           \n\t"                   \
279233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p2_l],    -3(%[s2])           \n\t"                   \
280233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p3_l],    -4(%[s2])           \n\t"                   \
281233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p4_l],    -5(%[s2])           \n\t"                   \
282233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p5_l],    -6(%[s2])           \n\t"                   \
283233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p6_l],    -7(%[s2])           \n\t"                   \
284233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
285233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
286233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q6_l] "r" (q6_l), [q5_l] "r" (q5_l), [q4_l] "r" (q4_l),      \
287233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q3_l] "r" (q3_l), [q2_l] "r" (q2_l), [q1_l] "r" (q1_l),      \
288233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q0_l] "r" (q0_l),                                            \
289233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_l] "r" (p0_l), [p1_l] "r" (p1_l), [p2_l] "r" (p2_l),      \
290233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p3_l] "r" (p3_l), [p4_l] "r" (p4_l), [p5_l] "r" (p5_l),      \
291233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p6_l] "r" (p6_l),                                            \
292233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [s2] "r" (s2)                                                 \
293233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
294233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
295233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
296233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q6_l],    %[q6_l],    16     \n\t"                    \
297233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q5_l],    %[q5_l],    16     \n\t"                    \
298233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q4_l],    %[q4_l],    16     \n\t"                    \
299233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q3_l],    %[q3_l],    16     \n\t"                    \
300233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q2_l],    %[q2_l],    16     \n\t"                    \
301233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q1_l],    %[q1_l],    16     \n\t"                    \
302233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[q0_l],    %[q0_l],    16     \n\t"                    \
303233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p0_l],    %[p0_l],    16     \n\t"                    \
304233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p1_l],    %[p1_l],    16     \n\t"                    \
305233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p2_l],    %[p2_l],    16     \n\t"                    \
306233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p3_l],    %[p3_l],    16     \n\t"                    \
307233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p4_l],    %[p4_l],    16     \n\t"                    \
308233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p5_l],    %[p5_l],    16     \n\t"                    \
309233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "srl    %[p6_l],    %[p6_l],    16     \n\t"                    \
310233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
311233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q6_l] "+r" (q6_l), [q5_l] "+r" (q5_l), [q4_l] "+r" (q4_l),   \
312233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q3_l] "+r" (q3_l), [q2_l] "+r" (q2_l), [q1_l] "+r" (q1_l),   \
313233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q0_l] "+r" (q0_l),                                           \
314233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_l] "+r" (p0_l), [p1_l] "+r" (p1_l), [p2_l] "+r" (p2_l),   \
315233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p3_l] "+r" (p3_l), [p4_l] "+r" (p4_l), [p5_l] "+r" (p5_l),   \
316233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p6_l] "+r" (p6_l)                                            \
317233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
318233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
319233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
320233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
321233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q6_l],     6(%[s1])           \n\t"                   \
322233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q5_l],     5(%[s1])           \n\t"                   \
323233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q4_l],     4(%[s1])           \n\t"                   \
324233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q3_l],     3(%[s1])           \n\t"                   \
325233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q2_l],     2(%[s1])           \n\t"                   \
326233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q1_l],     1(%[s1])           \n\t"                   \
327233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[q0_l],     0(%[s1])           \n\t"                   \
328233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p0_l],    -1(%[s1])           \n\t"                   \
329233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p1_l],    -2(%[s1])           \n\t"                   \
330233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p2_l],    -3(%[s1])           \n\t"                   \
331233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p3_l],    -4(%[s1])           \n\t"                   \
332233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p4_l],    -5(%[s1])           \n\t"                   \
333233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p5_l],    -6(%[s1])           \n\t"                   \
334233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "sb     %[p6_l],    -7(%[s1])           \n\t"                   \
335233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
336233d2500723e5594f3e7c70896ffeeef32b9c950ywan        :                                                               \
337233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [q6_l] "r" (q6_l), [q5_l] "r" (q5_l), [q4_l] "r" (q4_l),      \
338233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q3_l] "r" (q3_l), [q2_l] "r" (q2_l), [q1_l] "r" (q1_l),      \
339233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q0_l] "r" (q0_l),                                            \
340233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_l] "r" (p0_l), [p1_l] "r" (p1_l), [p2_l] "r" (p2_l),      \
341233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p3_l] "r" (p3_l), [p4_l] "r" (p4_l), [p5_l] "r" (p5_l),      \
342233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p6_l] "r" (p6_l),                                            \
343233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [s1] "r" (s1)                                                 \
344233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
345233d2500723e5594f3e7c70896ffeeef32b9c950ywan}
346233d2500723e5594f3e7c70896ffeeef32b9c950ywan
347233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define PACK_LEFT_0TO3() {                                              \
348233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
349233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[p3_l],   %[p3]   \n\t"                       \
350233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[p2_l],   %[p2]   \n\t"                       \
351233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[p1_l],   %[p1]   \n\t"                       \
352233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[p0_l],   %[p0]   \n\t"                       \
353233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[q0_l],   %[q0]   \n\t"                       \
354233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[q1_l],   %[q1]   \n\t"                       \
355233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[q2_l],   %[q2]   \n\t"                       \
356233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[q3_l],   %[q3]   \n\t"                       \
357233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
358233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p3_l] "=&r" (p3_l), [p2_l] "=&r" (p2_l),                     \
359233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p1_l] "=&r" (p1_l), [p0_l] "=&r" (p0_l),                     \
360233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q0_l] "=&r" (q0_l), [q1_l] "=&r" (q1_l),                     \
361233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q2_l] "=&r" (q2_l), [q3_l] "=&r" (q3_l)                      \
362233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p3] "r" (p3), [p2] "r" (p2), [p1] "r" (p1), [p0] "r" (p0),   \
363233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q0] "r" (q0), [q1] "r" (q1), [q2] "r" (q2), [q3] "r" (q3)    \
364233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
365233d2500723e5594f3e7c70896ffeeef32b9c950ywan}
366233d2500723e5594f3e7c70896ffeeef32b9c950ywan
367233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define PACK_LEFT_4TO7() {                                              \
368233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
369233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[p7_l],   %[p7]   \n\t"                       \
370233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[p6_l],   %[p6]   \n\t"                       \
371233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[p5_l],   %[p5]   \n\t"                       \
372233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[p4_l],   %[p4]   \n\t"                       \
373233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[q4_l],   %[q4]   \n\t"                       \
374233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[q5_l],   %[q5]   \n\t"                       \
375233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[q6_l],   %[q6]   \n\t"                       \
376233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbl   %[q7_l],   %[q7]   \n\t"                       \
377233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
378233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p7_l] "=&r" (p7_l), [p6_l] "=&r" (p6_l),                     \
379233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p5_l] "=&r" (p5_l), [p4_l] "=&r" (p4_l),                     \
380233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q4_l] "=&r" (q4_l), [q5_l] "=&r" (q5_l),                     \
381233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q6_l] "=&r" (q6_l), [q7_l] "=&r" (q7_l)                      \
382233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p7] "r" (p7), [p6] "r" (p6), [p5] "r" (p5), [p4] "r" (p4),   \
383233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q4] "r" (q4), [q5] "r" (q5), [q6] "r" (q6), [q7] "r" (q7)    \
384233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
385233d2500723e5594f3e7c70896ffeeef32b9c950ywan}
386233d2500723e5594f3e7c70896ffeeef32b9c950ywan
387233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define PACK_RIGHT_0TO3() {                                             \
388233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
389233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[p3_r],   %[p3]  \n\t"                        \
390233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[p2_r],   %[p2]   \n\t"                       \
391233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[p1_r],   %[p1]   \n\t"                       \
392233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[p0_r],   %[p0]   \n\t"                       \
393233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[q0_r],   %[q0]   \n\t"                       \
394233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[q1_r],   %[q1]   \n\t"                       \
395233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[q2_r],   %[q2]   \n\t"                       \
396233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[q3_r],   %[q3]   \n\t"                       \
397233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
398233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p3_r] "=&r" (p3_r), [p2_r] "=&r" (p2_r),                     \
399233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p1_r] "=&r" (p1_r), [p0_r] "=&r" (p0_r),                     \
400233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q0_r] "=&r" (q0_r), [q1_r] "=&r" (q1_r),                     \
401233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q2_r] "=&r" (q2_r), [q3_r] "=&r" (q3_r)                      \
402233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p3] "r" (p3), [p2] "r" (p2), [p1] "r" (p1), [p0] "r" (p0),   \
403233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q0] "r" (q0), [q1] "r" (q1), [q2] "r" (q2), [q3] "r" (q3)    \
404233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
405233d2500723e5594f3e7c70896ffeeef32b9c950ywan}
406233d2500723e5594f3e7c70896ffeeef32b9c950ywan
407233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define PACK_RIGHT_4TO7() {                                             \
408233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
409233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[p7_r],   %[p7]   \n\t"                       \
410233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[p6_r],   %[p6]   \n\t"                       \
411233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[p5_r],   %[p5]   \n\t"                       \
412233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[p4_r],   %[p4]   \n\t"                       \
413233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[q4_r],   %[q4]   \n\t"                       \
414233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[q5_r],   %[q5]   \n\t"                       \
415233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[q6_r],   %[q6]   \n\t"                       \
416233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "preceu.ph.qbr   %[q7_r],   %[q7]   \n\t"                       \
417233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
418233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p7_r] "=&r" (p7_r), [p6_r] "=&r" (p6_r),                     \
419233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p5_r] "=&r" (p5_r), [p4_r] "=&r" (p4_r),                     \
420233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q4_r] "=&r" (q4_r), [q5_r] "=&r" (q5_r),                     \
421233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q6_r] "=&r" (q6_r), [q7_r] "=&r" (q7_r)                      \
422233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p7] "r" (p7), [p6] "r" (p6), [p5] "r" (p5), [p4] "r" (p4),   \
423233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q4] "r" (q4), [q5] "r" (q5), [q6] "r" (q6), [q7] "r" (q7)    \
424233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
425233d2500723e5594f3e7c70896ffeeef32b9c950ywan}
426233d2500723e5594f3e7c70896ffeeef32b9c950ywan
427233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define COMBINE_LEFT_RIGHT_0TO2() {                                     \
428233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
429233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[p2],  %[p2_l],    %[p2_r]    \n\t"            \
430233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[p1],  %[p1_l],    %[p1_r]    \n\t"            \
431233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[p0],  %[p0_l],    %[p0_r]    \n\t"            \
432233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[q0],  %[q0_l],    %[q0_r]    \n\t"            \
433233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[q1],  %[q1_l],    %[q1_r]    \n\t"            \
434233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[q2],  %[q2_l],    %[q2_r]    \n\t"            \
435233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
436233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p2] "=&r" (p2), [p1] "=&r" (p1), [p0] "=&r" (p0),            \
437233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q0] "=&r" (q0), [q1] "=&r" (q1), [q2] "=&r" (q2)             \
438233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p2_l] "r" (p2_l), [p2_r] "r" (p2_r),                         \
439233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p1_l] "r" (p1_l), [p1_r] "r" (p1_r),                         \
440233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p0_l] "r" (p0_l), [p0_r] "r" (p0_r),                         \
441233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q0_l] "r" (q0_l), [q0_r] "r" (q0_r),                         \
442233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q1_l] "r" (q1_l), [q1_r] "r" (q1_r),                         \
443233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q2_l] "r" (q2_l), [q2_r] "r" (q2_r)                          \
444233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
445233d2500723e5594f3e7c70896ffeeef32b9c950ywan}
446233d2500723e5594f3e7c70896ffeeef32b9c950ywan
447233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define COMBINE_LEFT_RIGHT_3TO6() {                                     \
448233d2500723e5594f3e7c70896ffeeef32b9c950ywan    __asm__ __volatile__ (                                              \
449233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[p6],  %[p6_l],    %[p6_r]    \n\t"            \
450233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[p5],  %[p5_l],    %[p5_r]    \n\t"            \
451233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[p4],  %[p4_l],    %[p4_r]    \n\t"            \
452233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[p3],  %[p3_l],    %[p3_r]    \n\t"            \
453233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[q3],  %[q3_l],    %[q3_r]    \n\t"            \
454233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[q4],  %[q4_l],    %[q4_r]    \n\t"            \
455233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[q5],  %[q5_l],    %[q5_r]    \n\t"            \
456233d2500723e5594f3e7c70896ffeeef32b9c950ywan        "precr.qb.ph    %[q6],  %[q6_l],    %[q6_r]    \n\t"            \
457233d2500723e5594f3e7c70896ffeeef32b9c950ywan                                                                        \
458233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p6] "=&r" (p6),[p5] "=&r" (p5),                              \
459233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p4] "=&r" (p4),[p3] "=&r" (p3),                              \
460233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q3] "=&r" (q3),[q4] "=&r" (q4),                              \
461233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q5] "=&r" (q5),[q6] "=&r" (q6)                               \
462233d2500723e5594f3e7c70896ffeeef32b9c950ywan        : [p6_l] "r" (p6_l), [p5_l] "r" (p5_l),                         \
463233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p4_l] "r" (p4_l), [p3_l] "r" (p3_l),                         \
464233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p6_r] "r" (p6_r), [p5_r] "r" (p5_r),                         \
465233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [p4_r] "r" (p4_r), [p3_r] "r" (p3_r),                         \
466233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q3_l] "r" (q3_l), [q4_l] "r" (q4_l),                         \
467233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q5_l] "r" (q5_l), [q6_l] "r" (q6_l),                         \
468233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q3_r] "r" (q3_r), [q4_r] "r" (q4_r),                         \
469233d2500723e5594f3e7c70896ffeeef32b9c950ywan          [q5_r] "r" (q5_r), [q6_r] "r" (q6_r)                          \
470233d2500723e5594f3e7c70896ffeeef32b9c950ywan    );                                                                  \
471233d2500723e5594f3e7c70896ffeeef32b9c950ywan}
472233d2500723e5594f3e7c70896ffeeef32b9c950ywan
473233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif  // #if HAVE_DSPR2
474233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus
475233d2500723e5594f3e7c70896ffeeef32b9c950ywan}  // extern "C"
476233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif
477233d2500723e5594f3e7c70896ffeeef32b9c950ywan
478233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif  // VP9_COMMON_MIPS_DSPR2_VP9_LOOPFILTER_MACROS_DSPR2_H_
479