Make QRegion not need to be friends with QVector
[profile/ivi/qtbase.git] / src / gui / painting / qdrawhelper_mips_dspr2_asm.S
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 MIPS Technologies, www.mips.com, author Damir Tatalovic <dtatalovic@mips.com>
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the QtGui module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16 **
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
20 **
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
28 **
29 ** Other Usage
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 #include "qt_mips_asm_dsp.h"
43
44 LEAF_MIPS_DSPR2(INTERPOLATE_PIXEL_255_asm_mips_dspr2)
45 /*
46  * a0 - uint x (First value to multiply)
47  * a1 - uint a (Multiplicator byte for first value)
48  * a2 - uint y (Second value to multiply)
49  * a3 - uint b (Multiplicator byte for second value)
50  */
51
52     .set reorder
53     replv.ph          a1, a1
54     replv.ph          a3, a3
55     li                t8, 8388736
56     muleu_s.ph.qbl    t0, a0, a1
57     muleu_s.ph.qbl    t1, a2, a3
58     muleu_s.ph.qbr    t2, a0, a1
59     muleu_s.ph.qbr    t3, a2, a3
60     addu.ph           t4, t0, t1
61     addu.ph           t5, t2, t3
62     preceu.ph.qbla    t0, t4
63     addu              t1, t0, t8
64     addu              t1, t4, t1
65     preceu.ph.qbla    t6, t5
66     addu              t7, t6, t8
67     addu              t7, t5, t7
68     precrq.qb.ph      t2, t1, t7
69     move              v0, t2
70     j                 ra
71
72 END(INTERPOLATE_PIXEL_255_asm_mips_dspr2)
73
74 LEAF_MIPS_DSPR2(BYTE_MUL_asm_mips_dspr2)
75 /*
76  * a0 - uint x (Value to multiply)
77  * a1 - uint a (Multiplicator byte)
78  */
79
80     .set reorder
81     replv.ph          a1, a1              /* a1 = 0x00a00a */
82     li                t4, 8388736         /* t4 = 0x800080 */
83     muleu_s.ph.qbl    t0, a0, a1
84     muleu_s.ph.qbr    t2, a0, a1
85     preceu.ph.qbla    t1, t0
86     addu              t0, t0, t1
87     addu              t0, t0, t4
88     preceu.ph.qbla    t3, t2
89     addu              t2, t2, t3
90     addu              t2, t2, t4
91     precrq.qb.ph      t4, t0, t2
92     move              v0, t4
93     j                 ra
94
95 END(BYTE_MUL_asm_mips_dspr2)
96
97 LEAF_MIPS_DSPR2(qConvertRgb16To32_asm_mips_dspr2)
98 /*
99  * a0 - dst (a8r8g8b8)
100  * a1 - src (r5g6b5)
101  * a2 - w
102  */
103
104     beqz              a2, 3f
105      nop
106     addiu             t1, a2, -1
107     beqz              t1, 2f
108      nop
109     li                t4, 0x07e007e0
110     li                t5, 0x001F001F
111 /* Convert two pixels at time (2 x rgb565 -> 2 x rgb8888) */
112 1:
113     lhu               t0, 0(a1)
114     lhu               t1, 2(a1)
115     addiu             a1, a1, 4
116     addiu             a2, a2, -2
117
118     sll               t6, t0, 16
119     or                t6, t6, t1          /* t6 = R1 G1 B1 | R2 G2 B2 */
120     lui               t3, 0xff00
121     ori               t3, t3, 0xff00      /* t3 = FF 00 | FF 00 (in place) */
122     shrl.ph           t7, t6, 11          /* t7 = 0 R1 | 0 R2 */
123     and               t8, t6, t4          /* t8 = 0 G1 0 | 0 G2 0 */
124     shra.ph           t9, t7, 2           /* t9 = 0 R1 | 0 R2   (lower) */
125     shll.ph           t7, t7, 3           /* t7 = 0 R1 | 0 R2   (higher) */
126     shll.ph           t8, t8, 5           /* t8 = G1 0 | G2 0   (higher) */
127     or                t7, t7, t9          /* t7 = 0 R1 | 0 R2   (in place) */
128     shrl.qb           t9, t8, 6           /* t9 = G1 0 | G2 0   (lower) */
129     or                t3, t3, t7          /* t3 = FF R1 | FF R2 (in place) */
130     or                t8, t8, t9          /* t8 = G1 0 | G2 0   (in place) */
131     and               t6, t6, t5          /* t6 = 0 B1 | 0 B2 */
132     shll.ph           t7, t6, 3           /* t7 = 0 B1 | 0 B2   (higher) */
133     shra.ph           t9, t6, 2           /* t9 = 0 B1 | 0 B2   (lower) */
134     or                t7, t7, t9          /* t7 = 0 B1 | 0 B2   (in place) */
135     or                t8, t7, t8          /* t8 = G1 B1 | G2 B2 (in place) */
136     precrq.ph.w       t2, t3, t8          /* t2 = FF R1 G1 B1   (in place) */
137     precr_sra.ph.w    t3, t8, 0           /* t3 = FF R2 G2 B2   (in place) */
138
139     sw                t2, 0(a0)
140     sw                t3, 4(a0)
141
142     addiu             t2, a2, -1
143     bgtz              t2, 1b
144      addiu            a0, a0, 8
145 2:
146     beqz              a2, 3f
147      nop
148     lhu               t0, 0(a1)
149
150 /* Remaining pixel conversion (rgb565 -> rgb8888) */
151     lui               t1, 0xff00
152     sll               t2, t0, 0x3
153     andi              t3, t2, 0xff
154     ext               t2, t0, 0x2, 0x3
155     or                t2, t3, t2
156     or                t1, t1, t2
157
158     sll               t2, t0, 0x5
159     andi              t2, t2, 0xfc00
160     srl               t3, t0, 0x1
161     andi              t3, t3, 0x300
162     or                t3, t2, t3
163     or                t1, t1, t3
164
165     andi              t2, t0, 0xf800
166     srl               t3, t2, 0x5
167     andi              t3, t3, 0xff00
168     or                t2, t2, t3
169     sll               t2, t2, 0x8
170     or                t1, t1, t2
171
172     sw                t1, 0(a0)
173 3:
174     j                 ra
175      nop
176
177 END(qConvertRgb16To32_asm_mips_dspr2)