171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# 271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# Copyright (C) 2011 The Android Open Source Project 371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# 471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# Licensed under the Apache License, Version 2.0 (the "License"); 571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# you may not use this file except in compliance with the License. 671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# You may obtain a copy of the License at 771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# 871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# http://www.apache.org/licenses/LICENSE-2.0 971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# 1071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# Unless required by applicable law or agreed to in writing, software 1171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# distributed under the License is distributed on an "AS IS" BASIS, 1271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# See the License for the specific language governing permissions and 1471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# limitations under the License. 1571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 1671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 1771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# IDCT implementation using the MIPS DSP ASE (little endian version) 1871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# 1971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# See MIPS Technologies Inc documents: 2071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# "JPEG Decoder Optimization for MIPS32(R) Cores" MD00483 2171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# 2271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# "MIPS32(R) Architecture for Programmers Volume IV-e: The MIPS(R) DSP 2371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# Application Specifice Extension to the MIPS32(R) Architecture" MD00374 2471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# 2571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 2671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham .set noreorder 2771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham .set nomacro 2871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham .set noat 2971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 3071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# This table has been moved to mips_jidctfst.c to avoid having to mess 3171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# with the global pointer to make this code PIC. 3271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# .rdata 3371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# 3471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# mips_idct_coefs: 3571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# # Constant table of scaled IDCT coefficients. 3671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# 3771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# .word 0x45464546 # FIX( 1.082392200 / 2) = 17734 = 0x4546 3871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# .word 0x5A825A82 # FIX( 1.414213562 / 2) = 23170 = 0x5A82 3971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# .word 0x76427642 # FIX( 1.847759065 / 2) = 30274 = 0x7642 4071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# .word 0xAC61AC61 # FIX(-2.613125930 / 4) = -21407 = 0xAC61 4171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 4271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham .text 4371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 4471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham .global mips_idct_columns 4571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham .ent mips_idct_columns 4671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 4771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# void mips_idct_columns(JCOEF * inptr, IFAST_MULT_TYPE * quantptr, 4871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# DCTELEM * wsptr, const int * mips_idct_coefs); 4971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 5071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandhammips_idct_columns: 5171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 5271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $a0 - inptr 5371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $a1 - quantptr 5471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $a2 - wsptr 5571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $a3, $at - mips_idct_coefs 5671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $t0:7 - simd data 5771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $t8 - coefficients, temp 5871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $t9 - loop end address 5971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $s0:3 - simd quantization factors 6071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $s4:7 - temp results 6171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $v0:1 - temp results 6271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 6371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $sp, $sp, -32 # reserve stack space for s0-s7 6471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 6571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s0, 28($sp) 6671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s1, 24($sp) 6771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s2, 20($sp) 6871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s3, 16($sp) 6971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s4, 12($sp) 7071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s5, 8($sp) 7171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s6, 4($sp) 7271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s7, 0($sp) 7371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 7471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $t9, $a0, 16 # end address 7571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 7671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham #lui $at, %hi(mips_idct_coefs) 7771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham #ori $at, %lo(mips_idct_coefs) 7871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham # move mips_idct_coefs address from $a3 into $at where the rest of this code expects it 7971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham or $at, $a3, $zero 8071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 8171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandhamloop_columns: 8271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 8371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s0, 0($a1) # quantptr[DCTSIZE*0] 8471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 8571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t0, 0($a0) # inptr[DCTSIZE*0] 8671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t1, 16($a0) # inptr[DCTSIZE*1] 8771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 8871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phl $v0, $t0, $s0 # tmp0 ... 8971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 9071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t2, 32($a0) # inptr[DCTSIZE*2] 9171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t3, 48($a0) # inptr[DCTSIZE*3] 9271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t4, 64($a0) # inptr[DCTSIZE*4] 9371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t5, 80($a0) # inptr[DCTSIZE*5] 9471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 9571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phr $t0, $t0, $s0 # ... tmp0 ... 9671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 9771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t6, 96($a0) # inptr[DCTSIZE*6] 9871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t7, 112($a0) # inptr[DCTSIZE*7] 9971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 10071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham or $s4, $t1, $t2 10171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham or $s5, $t3, $t4 10271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 10371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham bnez $s4, full_column 10471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $t0, $v0, 16, 16 # ... tmp0 10571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 10671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham bnez $s5, full_column 10771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham or $s6, $t5, $t6 10871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham or $s6, $s6, $t7 10971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham bnez $s6, full_column 11071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 11171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $t0, 0($a2) # wsptr[DCTSIZE*0] 11271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $t0, 16($a2) # wsptr[DCTSIZE*1] 11371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $t0, 32($a2) # wsptr[DCTSIZE*2] 11471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $t0, 48($a2) # wsptr[DCTSIZE*3] 11571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $t0, 64($a2) # wsptr[DCTSIZE*4] 11671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $t0, 80($a2) # wsptr[DCTSIZE*5] 11771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $t0, 96($a2) # wsptr[DCTSIZE*6] 11871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $t0, 112($a2) # wsptr[DCTSIZE*7] 11971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 12071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $a0, $a0, 4 12171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 12271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham b continue_columns 12371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $a1, $a1, 4 12471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 12571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 12671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandhamfull_column: 12771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 12871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s1, 32($a1) # quantptr[DCTSIZE*2] 12971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s2, 64($a1) # quantptr[DCTSIZE*4] 13071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 13171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phl $v0, $t2, $s1 # tmp1 ... 13271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phr $t2, $t2, $s1 # ... tmp1 ... 13371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 13471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s0, 16($a1) # quantptr[DCTSIZE*1] 13571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s1, 48($a1) # quantptr[DCTSIZE*3] 13671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s3, 96($a1) # quantptr[DCTSIZE*6] 13771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 13871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phl $v1, $t4, $s2 # tmp2 ... 13971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phr $t4, $t4, $s2 # ... tmp2 ... 14071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 14171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s2, 80($a1) # quantptr[DCTSIZE*5] 14271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t8, 4($at) # FIX(1.414213562) 14371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $t2, $v0, 16, 16 # ... tmp1 14471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 14571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phl $v0, $t6, $s3 # tmp3 ... 14671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phr $t6, $t6, $s3 # ... tmp3 ... 14771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 14871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $t4, $v1, 16, 16 # ... tmp2 14971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 15071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s4, $t0, $t4 # tmp10 15171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s5, $t0, $t4 # tmp11 15271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 15371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $t6, $v0, 16, 16 # ... tmp3 15471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 15571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s6, $t2, $t6 # tmp12 ... 15671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s7, $t2, $t6 # tmp13 15771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 15871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham mulq_rs.ph $s6, $s6, $t8 # ... tmp12 ... 15971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 16071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $t0, $s4, $s7 # tmp0 16171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $t6, $s4, $s7 # tmp3 16271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 16371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham################ 16471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 16571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phl $v0, $t1, $s0 # tmp4 ... 16671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phr $t1, $t1, $s0 # ... tmp4 ... 16771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 16871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s6, $s6, 1 # x2 16971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 17071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s3, 112($a1) # quantptr[DCTSIZE*7] 17171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 17271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s6, $s6, $s7 # ... tmp12 17371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 17471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phl $v1, $t7, $s3 # tmp7 ... 17571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phr $t7, $t7, $s3 # ... tmp7 ... 17671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 17771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $t1, $v0, 16, 16 # ... tmp4 17871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 17971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $t2, $s5, $s6 # tmp1 18071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $t4, $s5, $s6 # tmp2 18171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 18271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phl $v0, $t5, $s2 # tmp6 ... 18371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phr $t5, $t5, $s2 # ... tmp6 ... 18471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 18571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $t7, $v1, 16, 16 # ... tmp7 18671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 18771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s5, $t1, $t7 # z11 18871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s6, $t1, $t7 # z12 18971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 19071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phl $v1, $t3, $s1 # tmp5 ... 19171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham muleq_s.w.phr $t3, $t3, $s1 # ... tmp5 ... 19271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 19371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $t5, $v0, 16, 16 # ... tmp6 19471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 19571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# stalls 19671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 19771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $t3, $v1, 16, 16 # ... tmp5 19871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 19971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 20071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s7, $t5, $t3 # z13 20171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $v0, $t5, $t3 # z10 20271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 20371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $t7, $s5, $s7 # tmp7 20471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s5, $s5, $s7 # tmp11 ... 20571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 20671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $v1, $v0, $s6 # z5 ... 20771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 20871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham mulq_rs.ph $s5, $s5, $t8 # ... tmp11 20971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 21071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t8, 8($at) # FIX(1.847759065) 21171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s4, 0($at) # FIX(1.082392200) 21271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 21371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s0, $t0, $t7 21471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s1, $t0, $t7 21571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 21671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham mulq_rs.ph $v1, $v1, $t8 # ... z5 21771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 21871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s5, $s5, 1 # x2 21971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 22071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t8, 12($at) # FIX(-2.613125930) 22171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s0, 0($a2) # wsptr[DCTSIZE*0] 22271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 22371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham mulq_rs.ph $v0, $v0, $t8 # tmp12 ... 22471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham mulq_rs.ph $s4, $s6, $s4 # tmp10 ... 22571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 22671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $v1, $v1, 1 # x2 22771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 22871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $a0, $a0, 4 22971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $a1, $a1, 4 23071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 23171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s1, 112($a2) # wsptr[DCTSIZE*7] 23271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 23371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s6, $v0, 2 # x4 23471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s4, $s4, 1 # x2 23571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s6, $s6, $v1 # ... tmp12 23671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 23771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $t5, $s6, $t7 # tmp6 23871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s4, $s4, $v1 # ... tmp10 23971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $t3, $s5, $t5 # tmp5 24071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s2, $t2, $t5 24171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $t1, $s4, $t3 # tmp4 24271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s3, $t2, $t5 24371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 24471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s2, 16($a2) # wsptr[DCTSIZE*1] 24571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s3, 96($a2) # wsptr[DCTSIZE*6] 24671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 24771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $v0, $t4, $t3 24871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $v1, $t4, $t3 24971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 25071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $v0, 32($a2) # wsptr[DCTSIZE*2] 25171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $v1, 80($a2) # wsptr[DCTSIZE*5] 25271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 25371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $v0, $t6, $t1 25471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $v1, $t6, $t1 25571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 25671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $v0, 64($a2) # wsptr[DCTSIZE*4] 25771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $v1, 48($a2) # wsptr[DCTSIZE*3] 25871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 25971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandhamcontinue_columns: 26071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 26171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham bne $a0, $t9, loop_columns 26271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $a2, $a2, 4 26371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 26471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 26571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s0, 28($sp) 26671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s1, 24($sp) 26771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s2, 20($sp) 26871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s3, 16($sp) 26971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s4, 12($sp) 27071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s5, 8($sp) 27171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s6, 4($sp) 27271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s7, 0($sp) 27371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 27471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham jr $ra 27571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $sp, $sp, 32 27671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 27771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 27871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham .end mips_idct_columns 27971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 28071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 28171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham################################################################## 28271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 28371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 28471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham .global mips_idct_rows 28571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham .ent mips_idct_rows 28671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 28771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# void mips_idct_rows(DCTELEM * wsptr, JSAMPARRAY output_buf, 28871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# JDIMENSION output_col, const int * mips_idct_coefs); 28971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 29071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandhammips_idct_rows: 29171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 29271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $a0 - wsptr 29371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $a1 - output_buf 29471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $a2 - output_col 29571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $a3 - outptr 29671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $a3, $at - mips_idct_coefs 29771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $t0:7 - simd data 29871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $t8 - coefficients, temp 29971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $t9 - loop end address 30071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $s0:3 - simd quantization factors 30171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $s4:7 - temp results 30271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# s8 - const 0x80808080 30371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham# $v0:1 - temp results 30471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 30571ee859f6d3b654092fe1cba126d2c176a201196Raghu GandhamSHIFT = 2 30671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 30771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $sp, $sp, -48 # reserve stack space for s0-s8 30871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 30971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham # save $a3 (mips_idct_coefs) because it might get clobbered below 31071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $a3, 36($sp) 31171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 31271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s0, 32($sp) 31371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s1, 28($sp) 31471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s2, 24($sp) 31571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s3, 20($sp) 31671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s4, 16($sp) 31771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s5, 12($sp) 31871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s6, 8($sp) 31971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s7, 4($sp) 32071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s8, 0($sp) 32171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 32271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $t9, $a0, 128 # end address 32371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 32471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lui $s8, 0x8080 32571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ori $s8, $s8, 0x8080 32671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 32771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandhamloop_rows: 32871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 32971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $at, 36($sp) # restore saved $a3 (mips_idct_coefs) 33071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 33171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t0, 0+0($a0) # wsptr[DCTSIZE*0+0/1] b a 33271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s0, 16+0($a0) # wsptr[DCTSIZE*1+0/1] B A 33371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t2, 0+4($a0) # wsptr[DCTSIZE*0+2/3] d c 33471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s2, 16+4($a0) # wsptr[DCTSIZE*1+2/3] D C 33571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t4, 0+8($a0) # wsptr[DCTSIZE*0+4/5] f e 33671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s4, 16+8($a0) # wsptr[DCTSIZE*1+4/5] F E 33771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t6, 0+12($a0) # wsptr[DCTSIZE*0+6/7] h g 33871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s6, 16+12($a0) # wsptr[DCTSIZE*1+6/7] H G 33971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 34071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.ph.w $t1, $s0, $t0 # B b 34171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $t0, $s0, 16, 16 # A a 34271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 34371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham bnez $t1, full_row 34471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham or $s0, $t2, $s2 34571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham bnez $s0, full_row 34671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham or $s0, $t4, $s4 34771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham bnez $s0, full_row 34871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham or $s0, $t6, $s6 34971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham bnez $s0, full_row 35071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 35171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s0, $t0, SHIFT # A a 35271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 35371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $a3, 0($a1) 35471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $at, 4($a1) 35571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 35671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.ph.w $t0, $s0, $s0 # A A 35771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $s0, $s0, 16, 16 # a a 35871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 35971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addu $a3, $a3, $a2 36071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addu $at, $at, $a2 36171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 36271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.qb.ph $t0, $t0, $t0 # A A A A 36371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.qb.ph $s0, $s0, $s0 # a a a a 36471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 36571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 36671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addu.qb $s0, $s0, $s8 36771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addu.qb $t0, $t0, $s8 36871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 36971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 37071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s0, 0($a3) 37171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s0, 4($a3) 37271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 37371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $t0, 0($at) 37471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $t0, 4($at) 37571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 37671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 37771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $a0, $a0, 32 37871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 37971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham bne $a0, $t9, loop_rows 38071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $a1, $a1, 8 38171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 38271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham b exit_rows 38371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham nop 38471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 38571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 38671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandhamfull_row: 38771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 38871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.ph.w $t3, $s2, $t2 38971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $t2, $s2, 16, 16 39071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 39171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.ph.w $t5, $s4, $t4 39271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $t4, $s4, 16, 16 39371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 39471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.ph.w $t7, $s6, $t6 39571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $t6, $s6, 16, 16 39671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 39771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 39871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t8, 4($at) # FIX(1.414213562) 39971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 40071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s4, $t0, $t4 # tmp10 40171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s5, $t0, $t4 # tmp11 40271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 40371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s6, $t2, $t6 # tmp12 ... 40471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s7, $t2, $t6 # tmp13 40571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 40671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham mulq_rs.ph $s6, $s6, $t8 # ... tmp12 ... 40771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 40871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $t0, $s4, $s7 # tmp0 40971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $t6, $s4, $s7 # tmp3 41071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 41171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s6, $s6, 1 # x2 41271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 41371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s6, $s6, $s7 # ... tmp12 41471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 41571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $t2, $s5, $s6 # tmp1 41671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $t4, $s5, $s6 # tmp2 41771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 41871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham################ 41971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 42071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s5, $t1, $t7 # z11 42171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s6, $t1, $t7 # z12 42271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 42371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s7, $t5, $t3 # z13 42471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $v0, $t5, $t3 # z10 42571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 42671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $t7, $s5, $s7 # tmp7 42771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s5, $s5, $s7 # tmp11 ... 42871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 42971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $v1, $v0, $s6 # z5 ... 43071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 43171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham mulq_rs.ph $s5, $s5, $t8 # ... tmp11 43271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 43371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t8, 8($at) # FIX(1.847759065) 43471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s4, 0($at) # FIX(1.082392200) 43571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 43671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s0, $t0, $t7 # tmp0 + tmp7 43771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s7, $t0, $t7 # tmp0 - tmp7 43871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 43971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham mulq_rs.ph $v1, $v1, $t8 # ... z5 44071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 44171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $a3, 0($a1) 44271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $t8, 12($at) # FIX(-2.613125930) 44371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 44471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s5, $s5, 1 # x2 44571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 44671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addu $a3, $a3, $a2 44771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 44871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham mulq_rs.ph $v0, $v0, $t8 # tmp12 ... 44971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham mulq_rs.ph $s4, $s6, $s4 # tmp10 ... 45071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 45171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $v1, $v1, 1 # x2 45271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 45371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $a0, $a0, 32 45471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $a1, $a1, 8 45571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 45671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 45771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s6, $v0, 2 # x4 45871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s4, $s4, 1 # x2 45971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s6, $s6, $v1 # ... tmp12 46071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 46171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s0, $s0, SHIFT 46271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 46371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $t5, $s6, $t7 # tmp6 46471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s4, $s4, $v1 # ... tmp10 46571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $t3, $s5, $t5 # tmp5 46671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 46771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s7, $s7, SHIFT 46871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 46971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $t1, $s4, $t3 # tmp4 47071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 47171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 47271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s1, $t2, $t5 # tmp1 + tmp6 47371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s6, $t2, $t5 # tmp1 - tmp6 47471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 47571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s2, $t4, $t3 # tmp2 + tmp5 47671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s5, $t4, $t3 # tmp2 - tmp5 47771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 47871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addq.ph $s4, $t6, $t1 # tmp3 + tmp4 47971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham subq.ph $s3, $t6, $t1 # tmp3 - tmp4 48071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 48171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 48271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s1, $s1, SHIFT 48371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s2, $s2, SHIFT 48471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s3, $s3, SHIFT 48571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s4, $s4, SHIFT 48671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s5, $s5, SHIFT 48771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham shll_s.ph $s6, $s6, SHIFT 48871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 48971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 49071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.ph.w $t0, $s1, $s0 # B A 49171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $s0, $s1, 16, 16 # b a 49271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 49371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.ph.w $t2, $s3, $s2 # D C 49471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $s2, $s3, 16, 16 # d c 49571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 49671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.ph.w $t4, $s5, $s4 # F E 49771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $s4, $s5, 16, 16 # f e 49871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 49971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.ph.w $t6, $s7, $s6 # H G 50071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham ins $s6, $s7, 16, 16 # h g 50171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 50271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.qb.ph $t0, $t2, $t0 # D C B A 50371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.qb.ph $s0, $s2, $s0 # d c b a 50471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 50571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.qb.ph $t4, $t6, $t4 # H G F E 50671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham precrq.qb.ph $s4, $s6, $s4 # h g f e 50771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 50871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 50971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addu.qb $s0, $s0, $s8 51071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addu.qb $s4, $s4, $s8 51171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 51271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 51371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s0, 0($a3) # outptr[0/1/2/3] d c b a 51471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $s4, 4($a3) # outptr[4/5/6/7] h g f e 51571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 51671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $a3, -4($a1) 51771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 51871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addu.qb $t0, $t0, $s8 51971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 52071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addu $a3, $a3, $a2 52171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 52271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addu.qb $t4, $t4, $s8 52371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 52471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 52571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $t0, 0($a3) # outptr[0/1/2/3] D C B A 52671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 52771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham bne $a0, $t9, loop_rows 52871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham sw $t4, 4($a3) # outptr[4/5/6/7] H G F E 52971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 53071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 53171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandhamexit_rows: 53271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 53371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s0, 32($sp) 53471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s1, 28($sp) 53571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s2, 24($sp) 53671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s3, 20($sp) 53771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s4, 16($sp) 53871ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s5, 12($sp) 53971ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s6, 8($sp) 54071ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s7, 4($sp) 54171ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham lw $s8, 0($sp) 54271ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 54371ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham jr $ra 54471ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham addiu $sp, $sp, 48 54571ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 54671ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham 54771ee859f6d3b654092fe1cba126d2c176a201196Raghu Gandham .end mips_idct_rows 548