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