OLD | NEW |
1 // Copyright 2014 Google Inc. All Rights Reserved. | 1 // Copyright 2014 Google Inc. All Rights Reserved. |
2 // | 2 // |
3 // Use of this source code is governed by a BSD-style license | 3 // Use of this source code is governed by a BSD-style license |
4 // that can be found in the COPYING file in the root of the source | 4 // that can be found in the COPYING file in the root of the source |
5 // tree. An additional intellectual property rights grant can be found | 5 // tree. An additional intellectual property rights grant can be found |
6 // in the file PATENTS. All contributing project authors may | 6 // in the file PATENTS. All contributing project authors may |
7 // be found in the AUTHORS file in the root of the source tree. | 7 // be found in the AUTHORS file in the root of the source tree. |
8 // ----------------------------------------------------------------------------- | 8 // ----------------------------------------------------------------------------- |
9 // | 9 // |
10 // MIPS version of lossless functions | 10 // MIPS version of lossless functions |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 ".set macro \n\t" \ | 278 ".set macro \n\t" \ |
279 "1: \n\t" | 279 "1: \n\t" |
280 | 280 |
281 // P2 = P0 + P1 | 281 // P2 = P0 + P1 |
282 // A..D - offsets | 282 // A..D - offsets |
283 // E - temp variable to tell macro | 283 // E - temp variable to tell macro |
284 // if pointer should be incremented | 284 // if pointer should be incremented |
285 // literal_ and successive histograms could be unaligned | 285 // literal_ and successive histograms could be unaligned |
286 // so we must use ulw and usw | 286 // so we must use ulw and usw |
287 #define ADD_TO_OUT(A, B, C, D, E, P0, P1, P2) \ | 287 #define ADD_TO_OUT(A, B, C, D, E, P0, P1, P2) \ |
288 "ulw %[temp0], "#A"(%["#P0"]) \n\t" \ | 288 "ulw %[temp0], " #A "(%[" #P0 "]) \n\t" \ |
289 "ulw %[temp1], "#B"(%["#P0"]) \n\t" \ | 289 "ulw %[temp1], " #B "(%[" #P0 "]) \n\t" \ |
290 "ulw %[temp2], "#C"(%["#P0"]) \n\t" \ | 290 "ulw %[temp2], " #C "(%[" #P0 "]) \n\t" \ |
291 "ulw %[temp3], "#D"(%["#P0"]) \n\t" \ | 291 "ulw %[temp3], " #D "(%[" #P0 "]) \n\t" \ |
292 "ulw %[temp4], "#A"(%["#P1"]) \n\t" \ | 292 "ulw %[temp4], " #A "(%[" #P1 "]) \n\t" \ |
293 "ulw %[temp5], "#B"(%["#P1"]) \n\t" \ | 293 "ulw %[temp5], " #B "(%[" #P1 "]) \n\t" \ |
294 "ulw %[temp6], "#C"(%["#P1"]) \n\t" \ | 294 "ulw %[temp6], " #C "(%[" #P1 "]) \n\t" \ |
295 "ulw %[temp7], "#D"(%["#P1"]) \n\t" \ | 295 "ulw %[temp7], " #D "(%[" #P1 "]) \n\t" \ |
296 "addu %[temp4], %[temp4], %[temp0] \n\t" \ | 296 "addu %[temp4], %[temp4], %[temp0] \n\t" \ |
297 "addu %[temp5], %[temp5], %[temp1] \n\t" \ | 297 "addu %[temp5], %[temp5], %[temp1] \n\t" \ |
298 "addu %[temp6], %[temp6], %[temp2] \n\t" \ | 298 "addu %[temp6], %[temp6], %[temp2] \n\t" \ |
299 "addu %[temp7], %[temp7], %[temp3] \n\t" \ | 299 "addu %[temp7], %[temp7], %[temp3] \n\t" \ |
300 "addiu %["#P0"], %["#P0"], 16 \n\t" \ | 300 "addiu %[" #P0 "], %[" #P0 "], 16 \n\t" \ |
301 ".if "#E" == 1 \n\t" \ | 301 ".if " #E " == 1 \n\t" \ |
302 "addiu %["#P1"], %["#P1"], 16 \n\t" \ | 302 "addiu %[" #P1 "], %[" #P1 "], 16 \n\t" \ |
303 ".endif \n\t" \ | 303 ".endif \n\t" \ |
304 "usw %[temp4], "#A"(%["#P2"]) \n\t" \ | 304 "usw %[temp4], " #A "(%[" #P2 "]) \n\t" \ |
305 "usw %[temp5], "#B"(%["#P2"]) \n\t" \ | 305 "usw %[temp5], " #B "(%[" #P2 "]) \n\t" \ |
306 "usw %[temp6], "#C"(%["#P2"]) \n\t" \ | 306 "usw %[temp6], " #C "(%[" #P2 "]) \n\t" \ |
307 "usw %[temp7], "#D"(%["#P2"]) \n\t" \ | 307 "usw %[temp7], " #D "(%[" #P2 "]) \n\t" \ |
308 "addiu %["#P2"], %["#P2"], 16 \n\t" \ | 308 "addiu %[" #P2 "], %[" #P2 "], 16 \n\t" \ |
309 "bne %["#P0"], %[LoopEnd], 1b \n\t" \ | 309 "bne %[" #P0 "], %[LoopEnd], 1b \n\t" \ |
310 ".set pop \n\t" \ | 310 ".set pop \n\t" \ |
311 | 311 |
312 #define ASM_END_COMMON_0 \ | 312 #define ASM_END_COMMON_0 \ |
313 : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), \ | 313 : [temp0]"=&r"(temp0), [temp1]"=&r"(temp1), \ |
314 [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), \ | 314 [temp2]"=&r"(temp2), [temp3]"=&r"(temp3), \ |
315 [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), \ | 315 [temp4]"=&r"(temp4), [temp5]"=&r"(temp5), \ |
316 [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), \ | 316 [temp6]"=&r"(temp6), [temp7]"=&r"(temp7), \ |
317 [pa]"+r"(pa), [pout]"+r"(pout) | 317 [pa]"+r"(pa), [pout]"+r"(pout) |
318 | 318 |
319 #define ASM_END_COMMON_1 \ | 319 #define ASM_END_COMMON_1 \ |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 #if defined(WEBP_USE_MIPS32) | 407 #if defined(WEBP_USE_MIPS32) |
408 VP8LFastSLog2Slow = FastSLog2Slow; | 408 VP8LFastSLog2Slow = FastSLog2Slow; |
409 VP8LFastLog2Slow = FastLog2Slow; | 409 VP8LFastLog2Slow = FastLog2Slow; |
410 VP8LExtraCost = ExtraCost; | 410 VP8LExtraCost = ExtraCost; |
411 VP8LExtraCostCombined = ExtraCostCombined; | 411 VP8LExtraCostCombined = ExtraCostCombined; |
412 VP8LHuffmanCostCount = HuffmanCostCount; | 412 VP8LHuffmanCostCount = HuffmanCostCount; |
413 VP8LHuffmanCostCombinedCount = HuffmanCostCombinedCount; | 413 VP8LHuffmanCostCombinedCount = HuffmanCostCombinedCount; |
414 VP8LHistogramAdd = HistogramAdd; | 414 VP8LHistogramAdd = HistogramAdd; |
415 #endif // WEBP_USE_MIPS32 | 415 #endif // WEBP_USE_MIPS32 |
416 } | 416 } |
OLD | NEW |