📄 jdcolor.txt
字号:
000046 f1a80001 SUB r0,r8,#1 ;179
00004a f1b00800 SUBS r8,r0,#0 ;179
00004e dae0 BGE |L5.18|
;;;190 }
;;;191 }
000050 e8bd83f0 POP {r4-r9,pc}
;;;192
ENDP
AREA ||i.start_pass_dcolor||, CODE, READONLY, ALIGN=1
start_pass_dcolor PROC
;;;292 METHODDEF(void)
;;;293 start_pass_dcolor (j_decompress_ptr cinfo)
000000 4770 BX lr
;;;294 {
;;;295 GUI_USE_PARA(cinfo);
;;;296 /* no work needed */
;;;297 }
;;;298
ENDP
AREA ||i.ycc_rgb_convert||, CODE, READONLY, ALIGN=2
ycc_rgb_convert PROC
;;;119 METHODDEF(void)
;;;120 ycc_rgb_convert (j_decompress_ptr cinfo,
000000 e92d4ff0 PUSH {r4-r11,lr}
;;;121 JSAMPIMAGE input_buf, JDIMENSION input_row,
;;;122 JSAMPARRAY output_buf, int num_rows)
;;;123 {
000004 4689 MOV r9,r1
000006 4698 MOV r8,r3
;;;124 my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
;;;125 register int y, cb, cr;
;;;126 register JSAMPROW outptr;
;;;127 register JSAMPROW inptr0, inptr1, inptr2;
;;;128 register JDIMENSION col;
;;;129 JDIMENSION num_cols = cinfo->output_width;
;;;130 /* copy these pointers into registers if possible */
;;;131 register JSAMPLE * range_limit = cinfo->sample_range_limit;
;;;132 register int * Crrtab = cconvert->Cr_r_tab;
000008 f8d011c8 LDR r1,[r0,#0x1c8]
00000c f8d0e144 LDR lr,[r0,#0x144]
000010 6f03 LDR r3,[r0,#0x70]
000012 b085 SUB sp,sp,#0x14 ;123
000014 6888 LDR r0,[r1,#8] ;129
;;;133 register int * Cbbtab = cconvert->Cb_b_tab;
000016 9303 STR r3,[sp,#0xc]
000018 e9d13c03 LDRD r3,r12,[r1,#0xc] ;132
;;;134 register INT32 * Crgtab = cconvert->Cr_g_tab;
;;;135 register INT32 * Cbgtab = cconvert->Cb_g_tab;
00001c 9002 STR r0,[sp,#8]
00001e 6948 LDR r0,[r1,#0x14] ;133
;;;136 SHIFT_TEMPS
;;;137
;;;138 while (--num_rows >= 0) {
000020 e9cd0300 STRD r0,r3,[sp,#0]
000024 e034 B |L7.144|
;;;139 inptr0 = input_buf[0][input_row];
;;;140 inptr1 = input_buf[1][input_row];
;;;141 inptr2 = input_buf[2][input_row];
000026 bf00 NOP
|L7.40|
000028 e9d90300 LDRD r0,r3,[r9,#0] ;139
00002c f850a022 LDR r10,[r0,r2,LSL #2] ;139
000030 f8530022 LDR r0,[r3,r2,LSL #2] ;140
000034 f8d91008 LDR r1,[r9,#8] ;140
;;;142 input_row++;
000038 9004 STR r0,[sp,#0x10]
00003a f851b022 LDR r11,[r1,r2,LSL #2] ;141
00003e 1c50 ADDS r0,r2,#1
000040 4602 MOV r2,r0
;;;143 outptr = *output_buf++;
000042 f8581b04 LDR r1,[r8],#4
;;;144 for (col = 0; col < num_cols; col++) {
000046 2000 MOVS r0,#0
000048 e01f B |L7.138|
;;;145 y = GETJSAMPLE(inptr0[col]);
00004a bf00 NOP
|L7.76|
;;;146 cb = GETJSAMPLE(inptr1[col]);
;;;147 cr = GETJSAMPLE(inptr2[col]);
00004c f81b5000 LDRB r5,[r11,r0]
;;;148 /* Range-limiting is essential due to noise introduced by DCT losses. */
;;;149 outptr[RGB_RED] = range_limit[y + Crrtab[cr]];
000050 9e02 LDR r6,[sp,#8]
000052 f81a3000 LDRB r3,[r10,r0] ;145
000056 9c04 LDR r4,[sp,#0x10] ;146
000058 f8567025 LDR r7,[r6,r5,LSL #2]
00005c eb0e0603 ADD r6,lr,r3
000060 5c24 LDRB r4,[r4,r0] ;146
000062 5dbf LDRB r7,[r7,r6]
000064 700f STRB r7,[r1,#0]
;;;150 outptr[RGB_GREEN] = range_limit[y +
000066 9f00 LDR r7,[sp,#0]
000068 f85c5025 LDR r5,[r12,r5,LSL #2]
00006c f8577024 LDR r7,[r7,r4,LSL #2]
000070 443d ADD r5,r5,r7
000072 eb034325 ADD r3,r3,r5,ASR #16
000076 f81e3003 LDRB r3,[lr,r3]
00007a 704b STRB r3,[r1,#1]
;;;151 ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
;;;152 SCALEBITS))];
;;;153 outptr[RGB_BLUE] = range_limit[y + Cbbtab[cb]];
00007c 9b01 LDR r3,[sp,#4]
00007e f8533024 LDR r3,[r3,r4,LSL #2]
000082 5d9b LDRB r3,[r3,r6]
000084 708b STRB r3,[r1,#2]
;;;154 outptr += RGB_PIXELSIZE;
000086 1cc9 ADDS r1,r1,#3
000088 1c40 ADDS r0,r0,#1 ;144
|L7.138|
00008a 9b03 LDR r3,[sp,#0xc] ;144
00008c 4298 CMP r0,r3 ;144
00008e d3dd BCC |L7.76|
|L7.144|
000090 980e LDR r0,[sp,#0x38] ;138
000092 1e40 SUBS r0,r0,#1 ;138
000094 900e STR r0,[sp,#0x38] ;138
000096 d5c7 BPL |L7.40|
;;;155 }
;;;156 }
;;;157 }
000098 b005 ADD sp,sp,#0x14
00009a e8bd8ff0 POP {r4-r11,pc}
;;;158
ENDP
AREA ||i.ycck_cmyk_convert||, CODE, READONLY, ALIGN=2
ycck_cmyk_convert PROC
;;;244 METHODDEF(void)
;;;245 ycck_cmyk_convert (j_decompress_ptr cinfo,
000000 e92d4ff0 PUSH {r4-r11,lr}
;;;246 JSAMPIMAGE input_buf, JDIMENSION input_row,
;;;247 JSAMPARRAY output_buf, int num_rows)
;;;248 {
000004 468e MOV lr,r1
000006 4698 MOV r8,r3
;;;249 my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
;;;250 register int y, cb, cr;
;;;251 register JSAMPROW outptr;
;;;252 register JSAMPROW inptr0, inptr1, inptr2, inptr3;
;;;253 register JDIMENSION col;
;;;254 JDIMENSION num_cols = cinfo->output_width;
;;;255 /* copy these pointers into registers if possible */
;;;256 register JSAMPLE * range_limit = cinfo->sample_range_limit;
;;;257 register int * Crrtab = cconvert->Cr_r_tab;
000008 f8d011c8 LDR r1,[r0,#0x1c8]
00000c f8d04144 LDR r4,[r0,#0x144]
000010 6f03 LDR r3,[r0,#0x70]
000012 b085 SUB sp,sp,#0x14 ;248
000014 6888 LDR r0,[r1,#8] ;254
;;;258 register int * Cbbtab = cconvert->Cb_b_tab;
000016 9303 STR r3,[sp,#0xc]
000018 e9d13703 LDRD r3,r7,[r1,#0xc] ;257
;;;259 register INT32 * Crgtab = cconvert->Cr_g_tab;
;;;260 register INT32 * Cbgtab = cconvert->Cb_g_tab;
00001c 9002 STR r0,[sp,#8]
00001e 6948 LDR r0,[r1,#0x14] ;258
;;;261 SHIFT_TEMPS
;;;262
;;;263 while (--num_rows >= 0) {
000020 e9cd0300 STRD r0,r3,[sp,#0]
000024 e03f B |L8.166|
;;;264 inptr0 = input_buf[0][input_row];
;;;265 inptr1 = input_buf[1][input_row];
;;;266 inptr2 = input_buf[2][input_row];
000026 bf00 NOP
|L8.40|
000028 e89e000b LDM lr,{r0,r1,r3} ;264
00002c f8509022 LDR r9,[r0,r2,LSL #2] ;264
000030 f8510022 LDR r0,[r1,r2,LSL #2] ;265
;;;267 inptr3 = input_buf[3][input_row];
000034 9004 STR r0,[sp,#0x10]
000036 f8de100c LDR r1,[lr,#0xc]
00003a f853b022 LDR r11,[r3,r2,LSL #2] ;266
00003e f851a022 LDR r10,[r1,r2,LSL #2]
;;;268 input_row++;
000042 1c50 ADDS r0,r2,#1
000044 4602 MOV r2,r0
;;;269 outptr = *output_buf++;
000046 f8581b04 LDR r1,[r8],#4
;;;270 for (col = 0; col < num_cols; col++) {
00004a 2000 MOVS r0,#0
00004c e028 B |L8.160|
;;;271 y = GETJSAMPLE(inptr0[col]);
00004e bf00 NOP
|L8.80|
;;;272 cb = GETJSAMPLE(inptr1[col]);
000050 9d04 LDR r5,[sp,#0x10]
;;;273 cr = GETJSAMPLE(inptr2[col]);
;;;274 /* Range-limiting is essential due to noise introduced by DCT losses. */
;;;275 outptr[0] = range_limit[MAXJSAMPLE - (y + Crrtab[cr])]; /* red */
000052 9e02 LDR r6,[sp,#8]
000054 f815c000 LDRB r12,[r5,r0] ;272
000058 f81b5000 LDRB r5,[r11,r0] ;273
00005c f8193000 LDRB r3,[r9,r0] ;271
000060 f8566025 LDR r6,[r6,r5,LSL #2]
000064 441e ADD r6,r6,r3
000066 f1c606ff RSB r6,r6,#0xff
00006a 5da6 LDRB r6,[r4,r6]
00006c 700e STRB r6,[r1,#0]
;;;276 outptr[1] = range_limit[MAXJSAMPLE - (y + /* green */
00006e 9e00 LDR r6,[sp,#0]
000070 f8575025 LDR r5,[r7,r5,LSL #2]
000074 f856602c LDR r6,[r6,r12,LSL #2]
000078 4435 ADD r5,r5,r6
00007a eb034525 ADD r5,r3,r5,ASR #16
00007e f1c505ff RSB r5,r5,#0xff
000082 5d65 LDRB r5,[r4,r5]
000084 704d STRB r5,[r1,#1]
;;;277 ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
;;;278 SCALEBITS)))];
;;;279 outptr[2] = range_limit[MAXJSAMPLE - (y + Cbbtab[cb])]; /* blue */
000086 9d01 LDR r5,[sp,#4]
000088 f855502c LDR r5,[r5,r12,LSL #2]
00008c 442b ADD r3,r3,r5
00008e f1c303ff RSB r3,r3,#0xff
000092 5ce3 LDRB r3,[r4,r3]
000094 708b STRB r3,[r1,#2]
;;;280 /* K passes through unchanged */
;;;281 outptr[3] = inptr3[col]; /* don't need GETJSAMPLE here */
000096 f81a3000 LDRB r3,[r10,r0]
00009a 70cb STRB r3,[r1,#3]
;;;282 outptr += 4;
00009c 1d09 ADDS r1,r1,#4
00009e 1c40 ADDS r0,r0,#1 ;270
|L8.160|
0000a0 9b03 LDR r3,[sp,#0xc] ;270
0000a2 4298 CMP r0,r3 ;270
0000a4 d3d4 BCC |L8.80|
|L8.166|
0000a6 980e LDR r0,[sp,#0x38] ;263
0000a8 1e40 SUBS r0,r0,#1 ;263
0000aa 900e STR r0,[sp,#0x38] ;263
0000ac d5bc BPL |L8.40|
;;;283 }
;;;284 }
;;;285 }
0000ae b005 ADD sp,sp,#0x14
0000b0 e8bd8ff0 POP {r4-r11,pc}
;;;286
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -