15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 Google Inc. All Rights Reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// that can be found in the COPYING file in the root of the source 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// tree. An additional intellectual property rights grant can be found 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// in the file PATENTS. All contributing project authors may 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// be found in the AUTHORS file in the root of the source tree. 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// ----------------------------------------------------------------------------- 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// MIPS version of dsp functions 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Author(s): Djordje Pesut (djordje.pesut@imgtec.com) 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Jovan Zelincevic (jovan.zelincevic@imgtec.com) 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "./dsp.h" 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(WEBP_USE_MIPS32) 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static const int kC1 = 20091 + (1 << 16); 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static const int kC2 = 35468; 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static WEBP_INLINE int abs_mips32(int x) { 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int sign = x >> 31; 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (x ^ sign) - sign; 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// 4 pixels in, 2 pixels out 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static WEBP_INLINE void do_filter2(uint8_t* p, int step) { 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step]; 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int a = 3 * (q0 - p0) + VP8ksclip1[p1 - q1]; 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int a1 = VP8ksclip2[(a + 4) >> 3]; 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int a2 = VP8ksclip2[(a + 3) >> 3]; 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p[-step] = VP8kclip1[p0 + a2]; 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p[ 0] = VP8kclip1[q0 - a1]; 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// 4 pixels in, 4 pixels out 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static WEBP_INLINE void do_filter4(uint8_t* p, int step) { 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step]; 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int a = 3 * (q0 - p0); 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int a1 = VP8ksclip2[(a + 4) >> 3]; 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int a2 = VP8ksclip2[(a + 3) >> 3]; 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int a3 = (a1 + 1) >> 1; 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p[-2 * step] = VP8kclip1[p1 + a3]; 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p[- step] = VP8kclip1[p0 + a2]; 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p[ 0] = VP8kclip1[q0 - a1]; 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p[ step] = VP8kclip1[q1 - a3]; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// 6 pixels in, 6 pixels out 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static WEBP_INLINE void do_filter6(uint8_t* p, int step) { 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int p2 = p[-3 * step], p1 = p[-2 * step], p0 = p[-step]; 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int q0 = p[0], q1 = p[step], q2 = p[2 * step]; 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int a = VP8ksclip1[3 * (q0 - p0) + VP8ksclip1[p1 - q1]]; 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int a1 = (27 * a + 63) >> 7; // eq. to ((3 * a + 7) * 9) >> 7 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int a2 = (18 * a + 63) >> 7; // eq. to ((2 * a + 7) * 9) >> 7 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int a3 = (9 * a + 63) >> 7; // eq. to ((1 * a + 7) * 9) >> 7 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p[-3 * step] = VP8kclip1[p2 + a3]; 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p[-2 * step] = VP8kclip1[p1 + a2]; 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p[- step] = VP8kclip1[p0 + a1]; 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p[ 0] = VP8kclip1[q0 - a1]; 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p[ step] = VP8kclip1[q1 - a2]; 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p[ 2 * step] = VP8kclip1[q2 - a3]; 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static WEBP_INLINE int hev(const uint8_t* p, int step, int thresh) { 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step]; 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return (abs_mips32(p1 - p0) > thresh) || (abs_mips32(q1 - q0) > thresh); 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static WEBP_INLINE int needs_filter(const uint8_t* p, int step, int thresh) { 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int p1 = p[-2 * step], p0 = p[-step], q0 = p[0], q1 = p[step]; 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return ((2 * abs_mips32(p0 - q0) + (abs_mips32(p1 - q1) >> 1)) <= thresh); 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static WEBP_INLINE int needs_filter2(const uint8_t* p, 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int step, int t, int it) { 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int p3 = p[-4 * step], p2 = p[-3 * step]; 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int p1 = p[-2 * step], p0 = p[-step]; 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int q0 = p[0], q1 = p[step], q2 = p[2 * step], q3 = p[3 * step]; 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((2 * abs_mips32(p0 - q0) + (abs_mips32(p1 - q1) >> 1)) > t) { 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return 0; 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return abs_mips32(p3 - p2) <= it && abs_mips32(p2 - p1) <= it && 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) abs_mips32(p1 - p0) <= it && abs_mips32(q3 - q2) <= it && 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) abs_mips32(q2 - q1) <= it && abs_mips32(q1 - q0) <= it; 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static WEBP_INLINE void FilterLoop26(uint8_t* p, 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int hstride, int vstride, int size, 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int thresh, int ithresh, int hev_thresh) { 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) while (size-- > 0) { 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (needs_filter2(p, hstride, thresh, ithresh)) { 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (hev(p, hstride, hev_thresh)) { 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) do_filter2(p, hstride); 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) do_filter6(p, hstride); 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p += vstride; 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static WEBP_INLINE void FilterLoop24(uint8_t* p, 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int hstride, int vstride, int size, 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int thresh, int ithresh, int hev_thresh) { 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) while (size-- > 0) { 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (needs_filter2(p, hstride, thresh, ithresh)) { 1095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (hev(p, hstride, hev_thresh)) { 1105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) do_filter2(p, hstride); 1115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) do_filter4(p, hstride); 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p += vstride; 1165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// on macroblock edges 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void VFilter16(uint8_t* p, int stride, 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int thresh, int ithresh, int hev_thresh) { 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FilterLoop26(p, stride, 1, 16, thresh, ithresh, hev_thresh); 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void HFilter16(uint8_t* p, int stride, 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int thresh, int ithresh, int hev_thresh) { 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FilterLoop26(p, 1, stride, 16, thresh, ithresh, hev_thresh); 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// 8-pixels wide variant, for chroma filtering 1315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void VFilter8(uint8_t* u, uint8_t* v, int stride, 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int thresh, int ithresh, int hev_thresh) { 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FilterLoop26(u, stride, 1, 8, thresh, ithresh, hev_thresh); 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FilterLoop26(v, stride, 1, 8, thresh, ithresh, hev_thresh); 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void HFilter8(uint8_t* u, uint8_t* v, int stride, 1385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int thresh, int ithresh, int hev_thresh) { 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FilterLoop26(u, 1, stride, 8, thresh, ithresh, hev_thresh); 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FilterLoop26(v, 1, stride, 8, thresh, ithresh, hev_thresh); 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void VFilter8i(uint8_t* u, uint8_t* v, int stride, 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int thresh, int ithresh, int hev_thresh) { 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FilterLoop24(u + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh); 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FilterLoop24(v + 4 * stride, stride, 1, 8, thresh, ithresh, hev_thresh); 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void HFilter8i(uint8_t* u, uint8_t* v, int stride, 1505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int thresh, int ithresh, int hev_thresh) { 1515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FilterLoop24(u + 4, 1, stride, 8, thresh, ithresh, hev_thresh); 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FilterLoop24(v + 4, 1, stride, 8, thresh, ithresh, hev_thresh); 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// on three inner edges 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void VFilter16i(uint8_t* p, int stride, 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int thresh, int ithresh, int hev_thresh) { 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int k; 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (k = 3; k > 0; --k) { 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p += 4 * stride; 1615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FilterLoop24(p, stride, 1, 16, thresh, ithresh, hev_thresh); 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void HFilter16i(uint8_t* p, int stride, 1665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int thresh, int ithresh, int hev_thresh) { 1675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int k; 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (k = 3; k > 0; --k) { 1695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p += 4; 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) FilterLoop24(p, 1, stride, 16, thresh, ithresh, hev_thresh); 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//------------------------------------------------------------------------------ 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Simple In-loop filtering (Paragraph 15.2) 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void SimpleVFilter16(uint8_t* p, int stride, int thresh) { 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int i; 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (i = 0; i < 16; ++i) { 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (needs_filter(p + i, stride, thresh)) { 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) do_filter2(p + i, stride); 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void SimpleHFilter16(uint8_t* p, int stride, int thresh) { 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int i; 1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (i = 0; i < 16; ++i) { 1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (needs_filter(p + i * stride, 1, thresh)) { 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) do_filter2(p + i * stride, 1); 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void SimpleVFilter16i(uint8_t* p, int stride, int thresh) { 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int k; 1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (k = 3; k > 0; --k) { 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p += 4 * stride; 1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SimpleVFilter16(p, stride, thresh); 2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void SimpleHFilter16i(uint8_t* p, int stride, int thresh) { 2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int k; 2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (k = 3; k > 0; --k) { 2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) p += 4; 2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SimpleHFilter16(p, stride, thresh); 2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void TransformOne(const int16_t* in, uint8_t* dst) { 2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int temp0, temp1, temp2, temp3, temp4; 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int temp5, temp6, temp7, temp8, temp9; 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int temp10, temp11, temp12, temp13, temp14; 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int temp15, temp16, temp17, temp18; 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int16_t* p_in = (int16_t*)in; 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // loops unrolled and merged to avoid usage of tmp buffer 2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // and to reduce number of stalls. MUL macro is written 2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // in assembler and inlined 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) __asm__ volatile( 2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp0], 0(%[in]) \n\t" 2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp8], 16(%[in]) \n\t" 2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp4], 8(%[in]) \n\t" 2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp12], 24(%[in]) \n\t" 2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp16], %[temp0], %[temp8] \n\t" 2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp0], %[temp0], %[temp8] \n\t" 2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp8], %[temp4], %[kC2] \n\t" 2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp17], %[temp12], %[kC1] \n\t" 2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp4], %[temp4], %[kC1] \n\t" 2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp12], %[temp12], %[kC2] \n\t" 2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp1], 2(%[in]) \n\t" 2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp5], 10(%[in]) \n\t" 2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp9], 18(%[in]) \n\t" 2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp13], 26(%[in]) \n\t" 2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp8], %[temp8], 16 \n\t" 2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp17], %[temp17], 16 \n\t" 2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp4], %[temp4], 16 \n\t" 2395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp12], %[temp12], 16 \n\t" 2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp2], 4(%[in]) \n\t" 2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp6], 12(%[in]) \n\t" 2425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp10], 20(%[in]) \n\t" 2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp14], 28(%[in]) \n\t" 2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp17], %[temp8], %[temp17] \n\t" 2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp4], %[temp4], %[temp12] \n\t" 2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp8], %[temp16], %[temp4] \n\t" 2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp4], %[temp16], %[temp4] \n\t" 2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp16], %[temp1], %[temp9] \n\t" 2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp1], %[temp1], %[temp9] \n\t" 2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp3], 6(%[in]) \n\t" 2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp7], 14(%[in]) \n\t" 2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp11], 22(%[in]) \n\t" 2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lh %[temp15], 30(%[in]) \n\t" 2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp12], %[temp0], %[temp17] \n\t" 2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp0], %[temp0], %[temp17] \n\t" 2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp9], %[temp5], %[kC2] \n\t" 2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp17], %[temp13], %[kC1] \n\t" 2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp5], %[temp5], %[kC1] \n\t" 2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp13], %[temp13], %[kC2] \n\t" 2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp9], %[temp9], 16 \n\t" 2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp17], %[temp17], 16 \n\t" 2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp17], %[temp9], %[temp17] \n\t" 2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp5], %[temp5], 16 \n\t" 2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp13], %[temp13], 16 \n\t" 2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp5], %[temp5], %[temp13] \n\t" 2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp13], %[temp1], %[temp17] \n\t" 2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp1], %[temp1], %[temp17] \n\t" 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp17], %[temp14], %[kC1] \n\t" 2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp14], %[temp14], %[kC2] \n\t" 2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp9], %[temp16], %[temp5] \n\t" 2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp5], %[temp16], %[temp5] \n\t" 2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp16], %[temp2], %[temp10] \n\t" 2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp2], %[temp2], %[temp10] \n\t" 2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp10], %[temp6], %[kC2] \n\t" 2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp6], %[temp6], %[kC1] \n\t" 2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp17], %[temp17], 16 \n\t" 2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp14], %[temp14], 16 \n\t" 2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp10], %[temp10], 16 \n\t" 2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp6], %[temp6], 16 \n\t" 2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp17], %[temp10], %[temp17] \n\t" 2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp6], %[temp6], %[temp14] \n\t" 2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp10], %[temp16], %[temp6] \n\t" 2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp6], %[temp16], %[temp6] \n\t" 2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp14], %[temp2], %[temp17] \n\t" 2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp2], %[temp2], %[temp17] \n\t" 2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp17], %[temp15], %[kC1] \n\t" 2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp15], %[temp15], %[kC2] \n\t" 2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp16], %[temp3], %[temp11] \n\t" 2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp3], %[temp3], %[temp11] \n\t" 2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp11], %[temp7], %[kC2] \n\t" 2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp7], %[temp7], %[kC1] \n\t" 2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addiu %[temp8], %[temp8], 4 \n\t" 2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addiu %[temp12], %[temp12], 4 \n\t" 2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addiu %[temp0], %[temp0], 4 \n\t" 2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addiu %[temp4], %[temp4], 4 \n\t" 2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp17], %[temp17], 16 \n\t" 2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp15], %[temp15], 16 \n\t" 2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp11], %[temp11], 16 \n\t" 2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp7], %[temp7], 16 \n\t" 3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp17], %[temp11], %[temp17] \n\t" 3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp7], %[temp7], %[temp15] \n\t" 3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp15], %[temp3], %[temp17] \n\t" 3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp3], %[temp3], %[temp17] \n\t" 3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp11], %[temp16], %[temp7] \n\t" 3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp7], %[temp16], %[temp7] \n\t" 3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp16], %[temp8], %[temp10] \n\t" 3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp8], %[temp8], %[temp10] \n\t" 3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp10], %[temp9], %[kC2] \n\t" 3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp17], %[temp11], %[kC1] \n\t" 3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp9], %[temp9], %[kC1] \n\t" 3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp11], %[temp11], %[kC2] \n\t" 3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp10], %[temp10], 16 \n\t" 3135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp17], %[temp17], 16 \n\t" 3145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp9], %[temp9], 16 \n\t" 3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp11], %[temp11], 16 \n\t" 3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp17], %[temp10], %[temp17] \n\t" 3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp11], %[temp9], %[temp11] \n\t" 3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp10], %[temp12], %[temp14] \n\t" 3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp12], %[temp12], %[temp14] \n\t" 3205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp14], %[temp13], %[kC2] \n\t" 3215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp9], %[temp15], %[kC1] \n\t" 3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp13], %[temp13], %[kC1] \n\t" 3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp15], %[temp15], %[kC2] \n\t" 3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp14], %[temp14], 16 \n\t" 3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp9], %[temp9], 16 \n\t" 3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp13], %[temp13], 16 \n\t" 3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp15], %[temp15], 16 \n\t" 3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp9], %[temp14], %[temp9] \n\t" 3295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp15], %[temp13], %[temp15] \n\t" 3305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp14], %[temp0], %[temp2] \n\t" 3315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp0], %[temp0], %[temp2] \n\t" 3325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp2], %[temp1], %[kC2] \n\t" 3335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp13], %[temp3], %[kC1] \n\t" 3345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp1], %[temp1], %[kC1] \n\t" 3355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp3], %[temp3], %[kC2] \n\t" 3365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp2], %[temp2], 16 \n\t" 3375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp13], %[temp13], 16 \n\t" 3385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp1], %[temp1], 16 \n\t" 3395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp3], %[temp3], 16 \n\t" 3405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp13], %[temp2], %[temp13] \n\t" 3415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp3], %[temp1], %[temp3] \n\t" 3425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp2], %[temp4], %[temp6] \n\t" 3435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp4], %[temp4], %[temp6] \n\t" 3445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp6], %[temp5], %[kC2] \n\t" 3455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp1], %[temp7], %[kC1] \n\t" 3465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp5], %[temp5], %[kC1] \n\t" 3475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "mul %[temp7], %[temp7], %[kC2] \n\t" 3485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp6], %[temp6], 16 \n\t" 3495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp1], %[temp1], 16 \n\t" 3505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp5], %[temp5], 16 \n\t" 3515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp7], %[temp7], 16 \n\t" 3525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp1], %[temp6], %[temp1] \n\t" 3535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp7], %[temp5], %[temp7] \n\t" 3545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp5], %[temp16], %[temp11] \n\t" 3555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp16], %[temp16], %[temp11] \n\t" 3565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp11], %[temp8], %[temp17] \n\t" 3575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp8], %[temp8], %[temp17] \n\t" 3585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp5], %[temp5], 3 \n\t" 3595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp16], %[temp16], 3 \n\t" 3605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp11], %[temp11], 3 \n\t" 3615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp8], %[temp8], 3 \n\t" 3625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp17], %[temp10], %[temp15] \n\t" 3635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp10], %[temp10], %[temp15] \n\t" 3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp15], %[temp12], %[temp9] \n\t" 3655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp12], %[temp12], %[temp9] \n\t" 3665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp17], %[temp17], 3 \n\t" 3675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp10], %[temp10], 3 \n\t" 3685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp15], %[temp15], 3 \n\t" 3695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp12], %[temp12], 3 \n\t" 3705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp9], %[temp14], %[temp3] \n\t" 3715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp14], %[temp14], %[temp3] \n\t" 3725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp3], %[temp0], %[temp13] \n\t" 3735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp0], %[temp0], %[temp13] \n\t" 3745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp9], %[temp9], 3 \n\t" 3755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp14], %[temp14], 3 \n\t" 3765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp3], %[temp3], 3 \n\t" 3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp0], %[temp0], 3 \n\t" 3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp13], %[temp2], %[temp7] \n\t" 3795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp2], %[temp2], %[temp7] \n\t" 3805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp7], %[temp4], %[temp1] \n\t" 3815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "subu %[temp4], %[temp4], %[temp1] \n\t" 3825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp13], %[temp13], 3 \n\t" 3835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp2], %[temp2], 3 \n\t" 3845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp7], %[temp7], 3 \n\t" 3855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp4], %[temp4], 3 \n\t" 3865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addiu %[temp6], $zero, 255 \n\t" 3875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp1], 0(%[dst]) \n\t" 3885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp1], %[temp1], %[temp5] \n\t" 3895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp5], %[temp1], 8 \n\t" 3905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp18], %[temp1], 31 \n\t" 3915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp5], 1f \n\t" 3925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp1], %[temp1], %[temp1] \n\t" 3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp1], %[temp6], %[temp18] \n\t" 3945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "1: \n\t" 3955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp18], 1(%[dst]) \n\t" 3965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp1], 0(%[dst]) \n\t" 3975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp18], %[temp18], %[temp11] \n\t" 3985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp11], %[temp18], 8 \n\t" 3995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp1], %[temp18], 31 \n\t" 4005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp11], 2f \n\t" 4015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp18], %[temp18], %[temp18] \n\t" 4025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp18], %[temp6], %[temp1] \n\t" 4035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "2: \n\t" 4045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp1], 2(%[dst]) \n\t" 4055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp18], 1(%[dst]) \n\t" 4065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp1], %[temp1], %[temp8] \n\t" 4075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp8], %[temp1], 8 \n\t" 4085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp18], %[temp1], 31 \n\t" 4095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp8], 3f \n\t" 4105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp1], %[temp1], %[temp1] \n\t" 4115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp1], %[temp6], %[temp18] \n\t" 4125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "3: \n\t" 4135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp18], 3(%[dst]) \n\t" 4145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp1], 2(%[dst]) \n\t" 4155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp18], %[temp18], %[temp16] \n\t" 4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp16], %[temp18], 8 \n\t" 4175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp1], %[temp18], 31 \n\t" 4185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp16], 4f \n\t" 4195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp18], %[temp18], %[temp18] \n\t" 4205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp18], %[temp6], %[temp1] \n\t" 4215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "4: \n\t" 4225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp18], 3(%[dst]) \n\t" 4235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp5], 32(%[dst]) \n\t" 4245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp8], 33(%[dst]) \n\t" 4255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp11], 34(%[dst]) \n\t" 4265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp16], 35(%[dst]) \n\t" 4275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp5], %[temp5], %[temp17] \n\t" 4285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp8], %[temp8], %[temp15] \n\t" 4295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp11], %[temp11], %[temp12] \n\t" 4305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp16], %[temp16], %[temp10] \n\t" 4315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp18], %[temp5], 8 \n\t" 4325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp1], %[temp5], 31 \n\t" 4335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp18], 5f \n\t" 4345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp5], %[temp5], %[temp5] \n\t" 4355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp5], %[temp6], %[temp1] \n\t" 4365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "5: \n\t" 4375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp18], %[temp8], 8 \n\t" 4385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp1], %[temp8], 31 \n\t" 4395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp18], 6f \n\t" 4405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp8], %[temp8], %[temp8] \n\t" 4415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp8], %[temp6], %[temp1] \n\t" 4425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "6: \n\t" 4435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp18], %[temp11], 8 \n\t" 4445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp1], %[temp11], 31 \n\t" 4455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp17], %[temp16], 8 \n\t" 4465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp15], %[temp16], 31 \n\t" 4475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp18], 7f \n\t" 4485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp11], %[temp11], %[temp11] \n\t" 4495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp11], %[temp6], %[temp1] \n\t" 4505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "7: \n\t" 4515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp17], 8f \n\t" 4525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp16], %[temp16], %[temp16] \n\t" 4535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp16], %[temp6], %[temp15] \n\t" 4545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "8: \n\t" 4555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp5], 32(%[dst]) \n\t" 4565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp8], 33(%[dst]) \n\t" 4575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp11], 34(%[dst]) \n\t" 4585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp16], 35(%[dst]) \n\t" 4595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp5], 64(%[dst]) \n\t" 4605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp8], 65(%[dst]) \n\t" 4615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp11], 66(%[dst]) \n\t" 4625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp16], 67(%[dst]) \n\t" 4635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp5], %[temp5], %[temp9] \n\t" 4645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp8], %[temp8], %[temp3] \n\t" 4655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp11], %[temp11], %[temp0] \n\t" 4665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp16], %[temp16], %[temp14] \n\t" 4675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp18], %[temp5], 8 \n\t" 4685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp1], %[temp5], 31 \n\t" 4695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp17], %[temp8], 8 \n\t" 4705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp15], %[temp8], 31 \n\t" 4715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp12], %[temp11], 8 \n\t" 4725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp10], %[temp11], 31 \n\t" 4735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp9], %[temp16], 8 \n\t" 4745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp3], %[temp16], 31 \n\t" 4755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp18], 9f \n\t" 4765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp5], %[temp5], %[temp5] \n\t" 4775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp5], %[temp6], %[temp1] \n\t" 4785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "9: \n\t" 4795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp17], 10f \n\t" 4805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp8], %[temp8], %[temp8] \n\t" 4815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp8], %[temp6], %[temp15] \n\t" 4825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "10: \n\t" 4835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp12], 11f \n\t" 4845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp11], %[temp11], %[temp11] \n\t" 4855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp11], %[temp6], %[temp10] \n\t" 4865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "11: \n\t" 4875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp9], 12f \n\t" 4885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp16], %[temp16], %[temp16] \n\t" 4895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp16], %[temp6], %[temp3] \n\t" 4905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "12: \n\t" 4915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp5], 64(%[dst]) \n\t" 4925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp8], 65(%[dst]) \n\t" 4935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp11], 66(%[dst]) \n\t" 4945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp16], 67(%[dst]) \n\t" 4955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp5], 96(%[dst]) \n\t" 4965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp8], 97(%[dst]) \n\t" 4975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp11], 98(%[dst]) \n\t" 4985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "lbu %[temp16], 99(%[dst]) \n\t" 4995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp5], %[temp5], %[temp13] \n\t" 5005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp8], %[temp8], %[temp7] \n\t" 5015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp11], %[temp11], %[temp4] \n\t" 5025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "addu %[temp16], %[temp16], %[temp2] \n\t" 5035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp18], %[temp5], 8 \n\t" 5045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp1], %[temp5], 31 \n\t" 5055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp17], %[temp8], 8 \n\t" 5065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp15], %[temp8], 31 \n\t" 5075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp12], %[temp11], 8 \n\t" 5085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp10], %[temp11], 31 \n\t" 5095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp9], %[temp16], 8 \n\t" 5105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sra %[temp3], %[temp16], 31 \n\t" 5115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp18], 13f \n\t" 5125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp5], %[temp5], %[temp5] \n\t" 5135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp5], %[temp6], %[temp1] \n\t" 5145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "13: \n\t" 5155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp17], 14f \n\t" 5165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp8], %[temp8], %[temp8] \n\t" 5175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp8], %[temp6], %[temp15] \n\t" 5185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "14: \n\t" 5195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp12], 15f \n\t" 5205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp11], %[temp11], %[temp11] \n\t" 5215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp11], %[temp6], %[temp10] \n\t" 5225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "15: \n\t" 5235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "beqz %[temp9], 16f \n\t" 5245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "xor %[temp16], %[temp16], %[temp16] \n\t" 5255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "movz %[temp16], %[temp6], %[temp3] \n\t" 5265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "16: \n\t" 5275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp5], 96(%[dst]) \n\t" 5285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp8], 97(%[dst]) \n\t" 5295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp11], 98(%[dst]) \n\t" 5305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "sb %[temp16], 99(%[dst]) \n\t" 5315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), [temp2]"=&r"(temp2), 5335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [temp3]"=&r"(temp3), [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), 5345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), [temp8]"=&r"(temp8), 5355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [temp9]"=&r"(temp9), [temp10]"=&r"(temp10), [temp11]"=&r"(temp11), 5365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [temp12]"=&r"(temp12), [temp13]"=&r"(temp13), [temp14]"=&r"(temp14), 5375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [temp15]"=&r"(temp15), [temp16]"=&r"(temp16), [temp17]"=&r"(temp17), 5385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) [temp18]"=&r"(temp18) 5395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : [in]"r"(p_in), [kC1]"r"(kC1), [kC2]"r"(kC2), [dst]"r"(dst) 5405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : "memory", "hi", "lo" 5415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ); 5425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 5435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static void TransformTwo(const int16_t* in, uint8_t* dst, int do_two) { 5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TransformOne(in, dst); 5465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (do_two) { 5475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TransformOne(in + 16, dst + 4); 5485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 5505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif // WEBP_USE_MIPS32 5525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)//------------------------------------------------------------------------------ 5545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Entry point 5555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)extern void VP8DspInitMIPS32(void); 5575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void VP8DspInitMIPS32(void) { 5595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(WEBP_USE_MIPS32) 5605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8InitClipTables(); 5615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8Transform = TransformTwo; 5635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8VFilter16 = VFilter16; 5655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8HFilter16 = HFilter16; 5665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8VFilter8 = VFilter8; 5675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8HFilter8 = HFilter8; 5685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8VFilter16i = VFilter16i; 5695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8HFilter16i = HFilter16i; 5705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8VFilter8i = VFilter8i; 5715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8HFilter8i = HFilter8i; 5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8SimpleVFilter16 = SimpleVFilter16; 5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8SimpleHFilter16 = SimpleHFilter16; 5755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8SimpleVFilter16i = SimpleVFilter16i; 5765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) VP8SimpleHFilter16i = SimpleHFilter16i; 5775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif // WEBP_USE_MIPS32 5785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 579