1/* 2 * Copyright (c) 2013 The WebM project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10#include <stdlib.h> 11 12#include "./vp9_rtcd.h" 13#include "vp9/common/vp9_common.h" 14#include "vp9/common/mips/dspr2/vp9_common_dspr2.h" 15 16#if HAVE_DSPR2 17void vp9_h_predictor_8x8_dspr2(uint8_t *dst, ptrdiff_t stride, 18 const uint8_t *above, const uint8_t *left) { 19 int32_t tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8; 20 21 __asm__ __volatile__ ( 22 "lb %[tmp1], (%[left]) \n\t" 23 "lb %[tmp2], 1(%[left]) \n\t" 24 "lb %[tmp3], 2(%[left]) \n\t" 25 "lb %[tmp4], 3(%[left]) \n\t" 26 "lb %[tmp5], 4(%[left]) \n\t" 27 "lb %[tmp6], 5(%[left]) \n\t" 28 "lb %[tmp7], 6(%[left]) \n\t" 29 "lb %[tmp8], 7(%[left]) \n\t" 30 31 "replv.qb %[tmp1], %[tmp1] \n\t" 32 "replv.qb %[tmp2], %[tmp2] \n\t" 33 "replv.qb %[tmp3], %[tmp3] \n\t" 34 "replv.qb %[tmp4], %[tmp4] \n\t" 35 "replv.qb %[tmp5], %[tmp5] \n\t" 36 "replv.qb %[tmp6], %[tmp6] \n\t" 37 "replv.qb %[tmp7], %[tmp7] \n\t" 38 "replv.qb %[tmp8], %[tmp8] \n\t" 39 40 "sw %[tmp1], (%[dst]) \n\t" 41 "sw %[tmp1], 4(%[dst]) \n\t" 42 "add %[dst], %[dst], %[stride] \n\t" 43 "sw %[tmp2], (%[dst]) \n\t" 44 "sw %[tmp2], 4(%[dst]) \n\t" 45 "add %[dst], %[dst], %[stride] \n\t" 46 "sw %[tmp3], (%[dst]) \n\t" 47 "sw %[tmp3], 4(%[dst]) \n\t" 48 "add %[dst], %[dst], %[stride] \n\t" 49 "sw %[tmp4], (%[dst]) \n\t" 50 "sw %[tmp4], 4(%[dst]) \n\t" 51 "add %[dst], %[dst], %[stride] \n\t" 52 "sw %[tmp5], (%[dst]) \n\t" 53 "sw %[tmp5], 4(%[dst]) \n\t" 54 "add %[dst], %[dst], %[stride] \n\t" 55 "sw %[tmp6], (%[dst]) \n\t" 56 "sw %[tmp6], 4(%[dst]) \n\t" 57 "add %[dst], %[dst], %[stride] \n\t" 58 "sw %[tmp7], (%[dst]) \n\t" 59 "sw %[tmp7], 4(%[dst]) \n\t" 60 "add %[dst], %[dst], %[stride] \n\t" 61 "sw %[tmp8], (%[dst]) \n\t" 62 "sw %[tmp8], 4(%[dst]) \n\t" 63 64 : [tmp1] "=&r" (tmp1), [tmp2] "=&r" (tmp2), 65 [tmp3] "=&r" (tmp3), [tmp4] "=&r" (tmp4), 66 [tmp5] "=&r" (tmp5), [tmp7] "=&r" (tmp7), 67 [tmp6] "=&r" (tmp6), [tmp8] "=&r" (tmp8) 68 : [left] "r" (left), [dst] "r" (dst), 69 [stride] "r" (stride) 70 ); 71} 72 73void vp9_dc_predictor_8x8_dspr2(uint8_t *dst, ptrdiff_t stride, 74 const uint8_t *above, const uint8_t *left) { 75 int32_t expected_dc; 76 int32_t average; 77 int32_t tmp, above1, above_l1, above_r1, left1, left_r1, left_l1; 78 int32_t above2, above_l2, above_r2, left2, left_r2, left_l2; 79 80 __asm__ __volatile__ ( 81 "lw %[above1], (%[above]) \n\t" 82 "lw %[above2], 4(%[above]) \n\t" 83 "lw %[left1], (%[left]) \n\t" 84 "lw %[left2], 4(%[left]) \n\t" 85 86 "preceu.ph.qbl %[above_l1], %[above1] \n\t" 87 "preceu.ph.qbr %[above_r1], %[above1] \n\t" 88 "preceu.ph.qbl %[left_l1], %[left1] \n\t" 89 "preceu.ph.qbr %[left_r1], %[left1] \n\t" 90 91 "preceu.ph.qbl %[above_l2], %[above2] \n\t" 92 "preceu.ph.qbr %[above_r2], %[above2] \n\t" 93 "preceu.ph.qbl %[left_l2], %[left2] \n\t" 94 "preceu.ph.qbr %[left_r2], %[left2] \n\t" 95 96 "addu.ph %[average], %[above_r1], %[above_l1] \n\t" 97 "addu.ph %[average], %[average], %[left_l1] \n\t" 98 "addu.ph %[average], %[average], %[left_r1] \n\t" 99 100 "addu.ph %[average], %[average], %[above_l2] \n\t" 101 "addu.ph %[average], %[average], %[above_r2] \n\t" 102 "addu.ph %[average], %[average], %[left_l2] \n\t" 103 "addu.ph %[average], %[average], %[left_r2] \n\t" 104 105 "addiu %[average], %[average], 8 \n\t" 106 107 "srl %[tmp], %[average], 16 \n\t" 108 "addu.ph %[average], %[tmp], %[average] \n\t" 109 "srl %[expected_dc], %[average], 4 \n\t" 110 "replv.qb %[expected_dc], %[expected_dc] \n\t" 111 112 "sw %[expected_dc], (%[dst]) \n\t" 113 "sw %[expected_dc], 4(%[dst]) \n\t" 114 115 "add %[dst], %[dst], %[stride] \n\t" 116 "sw %[expected_dc], (%[dst]) \n\t" 117 "sw %[expected_dc], 4(%[dst]) \n\t" 118 119 "add %[dst], %[dst], %[stride] \n\t" 120 "sw %[expected_dc], (%[dst]) \n\t" 121 "sw %[expected_dc], 4(%[dst]) \n\t" 122 123 "add %[dst], %[dst], %[stride] \n\t" 124 "sw %[expected_dc], (%[dst]) \n\t" 125 "sw %[expected_dc], 4(%[dst]) \n\t" 126 127 "add %[dst], %[dst], %[stride] \n\t" 128 "sw %[expected_dc], (%[dst]) \n\t" 129 "sw %[expected_dc], 4(%[dst]) \n\t" 130 131 "add %[dst], %[dst], %[stride] \n\t" 132 "sw %[expected_dc], (%[dst]) \n\t" 133 "sw %[expected_dc], 4(%[dst]) \n\t" 134 135 "add %[dst], %[dst], %[stride] \n\t" 136 "sw %[expected_dc], (%[dst]) \n\t" 137 "sw %[expected_dc], 4(%[dst]) \n\t" 138 139 "add %[dst], %[dst], %[stride] \n\t" 140 "sw %[expected_dc], (%[dst]) \n\t" 141 "sw %[expected_dc], 4(%[dst]) \n\t" 142 143 : [above1] "=&r" (above1), [above_l1] "=&r" (above_l1), 144 [above_r1] "=&r" (above_r1), [left1] "=&r" (left1), 145 [left_l1] "=&r" (left_l1), [left_r1] "=&r" (left_r1), 146 [above2] "=&r" (above2), [above_l2] "=&r" (above_l2), 147 [above_r2] "=&r" (above_r2), [left2] "=&r" (left2), 148 [left_l2] "=&r" (left_l2), [left_r2] "=&r" (left_r2), 149 [average] "=&r" (average), [tmp] "=&r" (tmp), 150 [expected_dc] "=&r" (expected_dc) 151 : [above] "r" (above), [left] "r" (left), [dst] "r" (dst), 152 [stride] "r" (stride) 153 ); 154} 155 156void vp9_tm_predictor_8x8_dspr2(uint8_t *dst, ptrdiff_t stride, 157 const uint8_t *above, const uint8_t *left) { 158 int32_t abovel, abover; 159 int32_t abovel_1, abover_1; 160 int32_t left0; 161 int32_t res0, res1, res2, res3; 162 int32_t reshw; 163 int32_t top_left; 164 uint8_t *cm = vp9_ff_cropTbl; 165 166 __asm__ __volatile__ ( 167 "ulw %[reshw], (%[above]) \n\t" 168 "ulw %[top_left], 4(%[above]) \n\t" 169 170 "lbu %[left0], (%[left]) \n\t" 171 172 "preceu.ph.qbl %[abovel], %[reshw] \n\t" 173 "preceu.ph.qbr %[abover], %[reshw] \n\t" 174 "preceu.ph.qbl %[abovel_1], %[top_left] \n\t" 175 "preceu.ph.qbr %[abover_1], %[top_left] \n\t" 176 177 "lbu %[top_left], -1(%[above]) \n\t" 178 "replv.ph %[left0], %[left0] \n\t" 179 180 "replv.ph %[top_left], %[top_left] \n\t" 181 182 "addu.ph %[reshw], %[abovel], %[left0] \n\t" 183 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 184 185 "sll %[res2], %[reshw], 16 \n\t" 186 "sra %[res2], %[res2], 16 \n\t" 187 "sra %[res3], %[reshw], 16 \n\t" 188 189 "addu.ph %[reshw], %[abover], %[left0] \n\t" 190 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 191 192 "sll %[res0], %[reshw], 16 \n\t" 193 "sra %[res0], %[res0], 16 \n\t" 194 "sra %[res1], %[reshw], 16 \n\t" 195 196 "lbux %[res0], %[res0](%[cm]) \n\t" 197 "lbux %[res1], %[res1](%[cm]) \n\t" 198 "lbux %[res2], %[res2](%[cm]) \n\t" 199 "lbux %[res3], %[res3](%[cm]) \n\t" 200 201 "sb %[res0], (%[dst]) \n\t" 202 "sb %[res1], 1(%[dst]) \n\t" 203 "sb %[res2], 2(%[dst]) \n\t" 204 "sb %[res3], 3(%[dst]) \n\t" 205 206 "addu.ph %[reshw], %[abovel_1], %[left0] \n\t" 207 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 208 209 "sll %[res2], %[reshw], 16 \n\t" 210 "sra %[res2], %[res2], 16 \n\t" 211 "sra %[res3], %[reshw], 16 \n\t" 212 213 "addu.ph %[reshw], %[abover_1], %[left0] \n\t" 214 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 215 216 "sll %[res0], %[reshw], 16 \n\t" 217 "sra %[res0], %[res0], 16 \n\t" 218 "sra %[res1], %[reshw], 16 \n\t" 219 220 "lbu %[left0], 1(%[left]) \n\t" 221 222 "lbux %[res0], %[res0](%[cm]) \n\t" 223 "lbux %[res1], %[res1](%[cm]) \n\t" 224 "lbux %[res2], %[res2](%[cm]) \n\t" 225 "lbux %[res3], %[res3](%[cm]) \n\t" 226 227 "sb %[res0], 4(%[dst]) \n\t" 228 "sb %[res1], 5(%[dst]) \n\t" 229 "sb %[res2], 6(%[dst]) \n\t" 230 "sb %[res3], 7(%[dst]) \n\t" 231 232 "replv.ph %[left0], %[left0] \n\t" 233 "add %[dst], %[dst], %[stride] \n\t" 234 235 "addu.ph %[reshw], %[abovel], %[left0] \n\t" 236 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 237 238 "sll %[res2], %[reshw], 16 \n\t" 239 "sra %[res2], %[res2], 16 \n\t" 240 "sra %[res3], %[reshw], 16 \n\t" 241 242 "addu.ph %[reshw], %[abover], %[left0] \n\t" 243 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 244 245 "sll %[res0], %[reshw], 16 \n\t" 246 "sra %[res0], %[res0], 16 \n\t" 247 "sra %[res1], %[reshw], 16 \n\t" 248 249 "lbux %[res0], %[res0](%[cm]) \n\t" 250 "lbux %[res1], %[res1](%[cm]) \n\t" 251 "lbux %[res2], %[res2](%[cm]) \n\t" 252 "lbux %[res3], %[res3](%[cm]) \n\t" 253 254 "sb %[res0], (%[dst]) \n\t" 255 "sb %[res1], 1(%[dst]) \n\t" 256 "sb %[res2], 2(%[dst]) \n\t" 257 "sb %[res3], 3(%[dst]) \n\t" 258 259 "addu.ph %[reshw], %[abovel_1], %[left0] \n\t" 260 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 261 262 "sll %[res2], %[reshw], 16 \n\t" 263 "sra %[res2], %[res2], 16 \n\t" 264 "sra %[res3], %[reshw], 16 \n\t" 265 266 "addu.ph %[reshw], %[abover_1], %[left0] \n\t" 267 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 268 269 "sll %[res0], %[reshw], 16 \n\t" 270 "sra %[res0], %[res0], 16 \n\t" 271 "sra %[res1], %[reshw], 16 \n\t" 272 273 "lbu %[left0], 2(%[left]) \n\t" 274 275 "lbux %[res0], %[res0](%[cm]) \n\t" 276 "lbux %[res1], %[res1](%[cm]) \n\t" 277 "lbux %[res2], %[res2](%[cm]) \n\t" 278 "lbux %[res3], %[res3](%[cm]) \n\t" 279 280 "sb %[res0], 4(%[dst]) \n\t" 281 "sb %[res1], 5(%[dst]) \n\t" 282 "sb %[res2], 6(%[dst]) \n\t" 283 "sb %[res3], 7(%[dst]) \n\t" 284 285 "replv.ph %[left0], %[left0] \n\t" 286 "add %[dst], %[dst], %[stride] \n\t" 287 288 "addu.ph %[reshw], %[abovel], %[left0] \n\t" 289 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 290 291 "sll %[res2], %[reshw], 16 \n\t" 292 "sra %[res2], %[res2], 16 \n\t" 293 "sra %[res3], %[reshw], 16 \n\t" 294 295 "addu.ph %[reshw], %[abover], %[left0] \n\t" 296 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 297 298 "sll %[res0], %[reshw], 16 \n\t" 299 "sra %[res0], %[res0], 16 \n\t" 300 "sra %[res1], %[reshw], 16 \n\t" 301 302 "lbux %[res0], %[res0](%[cm]) \n\t" 303 "lbux %[res1], %[res1](%[cm]) \n\t" 304 "lbux %[res2], %[res2](%[cm]) \n\t" 305 "lbux %[res3], %[res3](%[cm]) \n\t" 306 307 "sb %[res0], (%[dst]) \n\t" 308 "sb %[res1], 1(%[dst]) \n\t" 309 "sb %[res2], 2(%[dst]) \n\t" 310 "sb %[res3], 3(%[dst]) \n\t" 311 312 "addu.ph %[reshw], %[abovel_1], %[left0] \n\t" 313 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 314 315 "sll %[res2], %[reshw], 16 \n\t" 316 "sra %[res2], %[res2], 16 \n\t" 317 "sra %[res3], %[reshw], 16 \n\t" 318 319 "addu.ph %[reshw], %[abover_1], %[left0] \n\t" 320 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 321 322 "sll %[res0], %[reshw], 16 \n\t" 323 "sra %[res0], %[res0], 16 \n\t" 324 "sra %[res1], %[reshw], 16 \n\t" 325 326 "lbu %[left0], 3(%[left]) \n\t" 327 328 "lbux %[res0], %[res0](%[cm]) \n\t" 329 "lbux %[res1], %[res1](%[cm]) \n\t" 330 "lbux %[res2], %[res2](%[cm]) \n\t" 331 "lbux %[res3], %[res3](%[cm]) \n\t" 332 333 "sb %[res0], 4(%[dst]) \n\t" 334 "sb %[res1], 5(%[dst]) \n\t" 335 "sb %[res2], 6(%[dst]) \n\t" 336 "sb %[res3], 7(%[dst]) \n\t" 337 338 "replv.ph %[left0], %[left0] \n\t" 339 "add %[dst], %[dst], %[stride] \n\t" 340 341 "addu.ph %[reshw], %[abovel], %[left0] \n\t" 342 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 343 344 "sll %[res2], %[reshw], 16 \n\t" 345 "sra %[res2], %[res2], 16 \n\t" 346 "sra %[res3], %[reshw], 16 \n\t" 347 348 "addu.ph %[reshw], %[abover], %[left0] \n\t" 349 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 350 351 "sll %[res0], %[reshw], 16 \n\t" 352 "sra %[res0], %[res0], 16 \n\t" 353 "sra %[res1], %[reshw], 16 \n\t" 354 355 "lbux %[res0], %[res0](%[cm]) \n\t" 356 "lbux %[res1], %[res1](%[cm]) \n\t" 357 "lbux %[res2], %[res2](%[cm]) \n\t" 358 "lbux %[res3], %[res3](%[cm]) \n\t" 359 360 "sb %[res0], (%[dst]) \n\t" 361 "sb %[res1], 1(%[dst]) \n\t" 362 "sb %[res2], 2(%[dst]) \n\t" 363 "sb %[res3], 3(%[dst]) \n\t" 364 365 "addu.ph %[reshw], %[abovel_1], %[left0] \n\t" 366 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 367 368 "sll %[res2], %[reshw], 16 \n\t" 369 "sra %[res2], %[res2], 16 \n\t" 370 "sra %[res3], %[reshw], 16 \n\t" 371 372 "addu.ph %[reshw], %[abover_1], %[left0] \n\t" 373 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 374 375 "sll %[res0], %[reshw], 16 \n\t" 376 "sra %[res0], %[res0], 16 \n\t" 377 "sra %[res1], %[reshw], 16 \n\t" 378 379 "lbu %[left0], 4(%[left]) \n\t" 380 381 "lbux %[res0], %[res0](%[cm]) \n\t" 382 "lbux %[res1], %[res1](%[cm]) \n\t" 383 "lbux %[res2], %[res2](%[cm]) \n\t" 384 "lbux %[res3], %[res3](%[cm]) \n\t" 385 386 "sb %[res0], 4(%[dst]) \n\t" 387 "sb %[res1], 5(%[dst]) \n\t" 388 "sb %[res2], 6(%[dst]) \n\t" 389 "sb %[res3], 7(%[dst]) \n\t" 390 391 "replv.ph %[left0], %[left0] \n\t" 392 "add %[dst], %[dst], %[stride] \n\t" 393 394 "addu.ph %[reshw], %[abovel], %[left0] \n\t" 395 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 396 397 "sll %[res2], %[reshw], 16 \n\t" 398 "sra %[res2], %[res2], 16 \n\t" 399 "sra %[res3], %[reshw], 16 \n\t" 400 401 "addu.ph %[reshw], %[abover], %[left0] \n\t" 402 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 403 404 "sll %[res0], %[reshw], 16 \n\t" 405 "sra %[res0], %[res0], 16 \n\t" 406 "sra %[res1], %[reshw], 16 \n\t" 407 408 "lbux %[res0], %[res0](%[cm]) \n\t" 409 "lbux %[res1], %[res1](%[cm]) \n\t" 410 "lbux %[res2], %[res2](%[cm]) \n\t" 411 "lbux %[res3], %[res3](%[cm]) \n\t" 412 413 "sb %[res0], (%[dst]) \n\t" 414 "sb %[res1], 1(%[dst]) \n\t" 415 "sb %[res2], 2(%[dst]) \n\t" 416 "sb %[res3], 3(%[dst]) \n\t" 417 418 "addu.ph %[reshw], %[abovel_1], %[left0] \n\t" 419 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 420 421 "sll %[res2], %[reshw], 16 \n\t" 422 "sra %[res2], %[res2], 16 \n\t" 423 "sra %[res3], %[reshw], 16 \n\t" 424 425 "addu.ph %[reshw], %[abover_1], %[left0] \n\t" 426 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 427 428 "sll %[res0], %[reshw], 16 \n\t" 429 "sra %[res0], %[res0], 16 \n\t" 430 "sra %[res1], %[reshw], 16 \n\t" 431 432 "lbu %[left0], 5(%[left]) \n\t" 433 434 "lbux %[res0], %[res0](%[cm]) \n\t" 435 "lbux %[res1], %[res1](%[cm]) \n\t" 436 "lbux %[res2], %[res2](%[cm]) \n\t" 437 "lbux %[res3], %[res3](%[cm]) \n\t" 438 439 "sb %[res0], 4(%[dst]) \n\t" 440 "sb %[res1], 5(%[dst]) \n\t" 441 "sb %[res2], 6(%[dst]) \n\t" 442 "sb %[res3], 7(%[dst]) \n\t" 443 444 "replv.ph %[left0], %[left0] \n\t" 445 "add %[dst], %[dst], %[stride] \n\t" 446 447 "addu.ph %[reshw], %[abovel], %[left0] \n\t" 448 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 449 450 "sll %[res2], %[reshw], 16 \n\t" 451 "sra %[res2], %[res2], 16 \n\t" 452 "sra %[res3], %[reshw], 16 \n\t" 453 454 "addu.ph %[reshw], %[abover], %[left0] \n\t" 455 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 456 457 "sll %[res0], %[reshw], 16 \n\t" 458 "sra %[res0], %[res0], 16 \n\t" 459 "sra %[res1], %[reshw], 16 \n\t" 460 461 "lbux %[res0], %[res0](%[cm]) \n\t" 462 "lbux %[res1], %[res1](%[cm]) \n\t" 463 "lbux %[res2], %[res2](%[cm]) \n\t" 464 "lbux %[res3], %[res3](%[cm]) \n\t" 465 466 "sb %[res0], (%[dst]) \n\t" 467 "sb %[res1], 1(%[dst]) \n\t" 468 "sb %[res2], 2(%[dst]) \n\t" 469 "sb %[res3], 3(%[dst]) \n\t" 470 471 "addu.ph %[reshw], %[abovel_1], %[left0] \n\t" 472 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 473 474 "sll %[res2], %[reshw], 16 \n\t" 475 "sra %[res2], %[res2], 16 \n\t" 476 "sra %[res3], %[reshw], 16 \n\t" 477 478 "addu.ph %[reshw], %[abover_1], %[left0] \n\t" 479 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 480 481 "sll %[res0], %[reshw], 16 \n\t" 482 "sra %[res0], %[res0], 16 \n\t" 483 "sra %[res1], %[reshw], 16 \n\t" 484 485 "lbu %[left0], 6(%[left]) \n\t" 486 487 "lbux %[res0], %[res0](%[cm]) \n\t" 488 "lbux %[res1], %[res1](%[cm]) \n\t" 489 "lbux %[res2], %[res2](%[cm]) \n\t" 490 "lbux %[res3], %[res3](%[cm]) \n\t" 491 492 "sb %[res0], 4(%[dst]) \n\t" 493 "sb %[res1], 5(%[dst]) \n\t" 494 "sb %[res2], 6(%[dst]) \n\t" 495 "sb %[res3], 7(%[dst]) \n\t" 496 497 "replv.ph %[left0], %[left0] \n\t" 498 "add %[dst], %[dst], %[stride] \n\t" 499 500 "addu.ph %[reshw], %[abovel], %[left0] \n\t" 501 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 502 503 "sll %[res2], %[reshw], 16 \n\t" 504 "sra %[res2], %[res2], 16 \n\t" 505 "sra %[res3], %[reshw], 16 \n\t" 506 507 "addu.ph %[reshw], %[abover], %[left0] \n\t" 508 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 509 510 "sll %[res0], %[reshw], 16 \n\t" 511 "sra %[res0], %[res0], 16 \n\t" 512 "sra %[res1], %[reshw], 16 \n\t" 513 514 "lbux %[res0], %[res0](%[cm]) \n\t" 515 "lbux %[res1], %[res1](%[cm]) \n\t" 516 "lbux %[res2], %[res2](%[cm]) \n\t" 517 "lbux %[res3], %[res3](%[cm]) \n\t" 518 519 "sb %[res0], (%[dst]) \n\t" 520 "sb %[res1], 1(%[dst]) \n\t" 521 "sb %[res2], 2(%[dst]) \n\t" 522 "sb %[res3], 3(%[dst]) \n\t" 523 524 "addu.ph %[reshw], %[abovel_1], %[left0] \n\t" 525 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 526 527 "sll %[res2], %[reshw], 16 \n\t" 528 "sra %[res2], %[res2], 16 \n\t" 529 "sra %[res3], %[reshw], 16 \n\t" 530 531 "addu.ph %[reshw], %[abover_1], %[left0] \n\t" 532 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 533 534 "sll %[res0], %[reshw], 16 \n\t" 535 "sra %[res0], %[res0], 16 \n\t" 536 "sra %[res1], %[reshw], 16 \n\t" 537 538 "lbu %[left0], 7(%[left]) \n\t" 539 540 "lbux %[res0], %[res0](%[cm]) \n\t" 541 "lbux %[res1], %[res1](%[cm]) \n\t" 542 "lbux %[res2], %[res2](%[cm]) \n\t" 543 "lbux %[res3], %[res3](%[cm]) \n\t" 544 545 "sb %[res0], 4(%[dst]) \n\t" 546 "sb %[res1], 5(%[dst]) \n\t" 547 "sb %[res2], 6(%[dst]) \n\t" 548 "sb %[res3], 7(%[dst]) \n\t" 549 550 "replv.ph %[left0], %[left0] \n\t" 551 "add %[dst], %[dst], %[stride] \n\t" 552 553 "addu.ph %[reshw], %[abovel], %[left0] \n\t" 554 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 555 556 "sll %[res2], %[reshw], 16 \n\t" 557 "sra %[res2], %[res2], 16 \n\t" 558 "sra %[res3], %[reshw], 16 \n\t" 559 560 "addu.ph %[reshw], %[abover], %[left0] \n\t" 561 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 562 563 "sll %[res0], %[reshw], 16 \n\t" 564 "sra %[res0], %[res0], 16 \n\t" 565 "sra %[res1], %[reshw], 16 \n\t" 566 567 "lbux %[res0], %[res0](%[cm]) \n\t" 568 "lbux %[res1], %[res1](%[cm]) \n\t" 569 "lbux %[res2], %[res2](%[cm]) \n\t" 570 "lbux %[res3], %[res3](%[cm]) \n\t" 571 572 "sb %[res0], (%[dst]) \n\t" 573 "sb %[res1], 1(%[dst]) \n\t" 574 "sb %[res2], 2(%[dst]) \n\t" 575 "sb %[res3], 3(%[dst]) \n\t" 576 577 "addu.ph %[reshw], %[abovel_1], %[left0] \n\t" 578 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 579 580 "sll %[res2], %[reshw], 16 \n\t" 581 "sra %[res2], %[res2], 16 \n\t" 582 "sra %[res3], %[reshw], 16 \n\t" 583 584 "addu.ph %[reshw], %[abover_1], %[left0] \n\t" 585 "subu.ph %[reshw], %[reshw], %[top_left] \n\t" 586 587 "sll %[res0], %[reshw], 16 \n\t" 588 "sra %[res0], %[res0], 16 \n\t" 589 "sra %[res1], %[reshw], 16 \n\t" 590 591 "lbux %[res0], %[res0](%[cm]) \n\t" 592 "lbux %[res1], %[res1](%[cm]) \n\t" 593 "lbux %[res2], %[res2](%[cm]) \n\t" 594 "lbux %[res3], %[res3](%[cm]) \n\t" 595 596 "sb %[res0], 4(%[dst]) \n\t" 597 "sb %[res1], 5(%[dst]) \n\t" 598 "sb %[res2], 6(%[dst]) \n\t" 599 "sb %[res3], 7(%[dst]) \n\t" 600 601 : [abovel] "=&r" (abovel), [abover] "=&r" (abover), 602 [abovel_1] "=&r" (abovel_1), [abover_1] "=&r" (abover_1), 603 [left0] "=&r" (left0), [res2] "=&r" (res2), [res3] "=&r" (res3), 604 [res0] "=&r" (res0), [res1] "=&r" (res1), 605 [reshw] "=&r" (reshw), [top_left] "=&r" (top_left) 606 : [above] "r" (above), [left] "r" (left), 607 [dst] "r" (dst), [stride] "r" (stride), [cm] "r" (cm) 608 ); 609} 610#endif // #if HAVE_DSPR2 611