1/* 2** Copyright 2015, The Android Open Source Project 3** 4** Licensed under the Apache License, Version 2.0 (the "License"); 5** you may not use this file except in compliance with the License. 6** You may obtain a copy of the License at 7** 8** http://www.apache.org/licenses/LICENSE-2.0 9** 10** Unless required by applicable law or agreed to in writing, software 11** distributed under the License is distributed on an "AS IS" BASIS, 12** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13** See the License for the specific language governing permissions and 14** limitations under the License. 15*/ 16 17 .macro pixel dreg src f sR sG sB shift 18 19 /* extract red */ 20.if \shift < 32 21 dext $t0,\src,\shift+11,5 22.else 23 dextu $t0,\src,\shift+11,5 24.endif 25 mul $t0,$t0,\f 26 27 /* extract green */ 28.if \shift < 32 29 dext $t1,\src,\shift+5,6 30.else 31 dextu $t1,\src,\shift+5,6 32.endif 33 mul $t1,$t1,\f 34 35 /* extract blue */ 36.if \shift < 32 37 dext $t2,\src,\shift,5 38.else 39 dextu $t2,\src,\shift,5 40.endif 41 mul $t2,$t2,\f 42 43 srl $t0,$t0,8 44 srl $t1,$t1,8 45 srl $t2,$t2,8 46 addu $t0,$t0,\sR 47 addu $t1,$t1,\sG 48 addu \dreg,$t2,\sB 49 sll $t0,$t0,11 50 sll $t1,$t1,5 51 or \dreg,\dreg,$t0 52 or \dreg,\dreg,$t1 53 .endm 54 55 .text 56 .align 57 58 .global scanline_col32cb16blend_mips64 59 .ent scanline_col32cb16blend_mips64 60scanline_col32cb16blend_mips64: 61 62 /* check if count is zero */ 63 srl $v0,$a1,24 /* sA */ 64 beqz $a2,done 65 li $t0, 0x100 66 srl $v1,$v0,7 67 addu $v0,$v1,$v0 68 subu $v0,$t0,$v0 /* f */ 69 ext $a3,$a1,3,5 /* sR */ 70 ext $a4,$a1,10,6 /* sG */ 71 ext $a5,$a1,19,5 /* sB */ 72 73 /* check if cnt is at least 4 */ 74 addiu $a2,$a2,-4 75 bltz $a2,tail 76 77loop_4pixels: 78 ld $t3,0($a0) 79 daddiu $a0,$a0,8 80 addiu $a2,$a2,-4 81 pixel $a6 $t3 $v0 $a3 $a4 $a5 0 82 pixel $a7 $t3 $v0 $a3 $a4 $a5 16 83 pixel $t8 $t3 $v0 $a3 $a4 $a5 32 84 pixel $t9 $t3 $v0 $a3 $a4 $a5 48 85 dins $a6,$a7,16,16 86 dinsu $a6,$t8,32,16 87 dinsu $a6,$t9,48,16 88 sd $a6,-8($a0) 89 bgez $a2, loop_4pixels 90 91tail: 92 /* the pixel count underran, restore it now */ 93 addiu $a2,$a2,4 94 95 /* handle the last 0..3 pixels */ 96 beqz $a2,done 97 98loop_1pixel: 99 lhu $t3,0($a0) 100 daddiu $a0,$a0,2 101 addiu $a2,$a2,-1 102 pixel $a6 $t3 $v0 $a3 $a4 $a5 0 103 sh $a6, -2($a0) 104 bnez $a2,loop_1pixel 105 106done: 107 j $ra 108 .end scanline_col32cb16blend_mips64 109