📄 jdcoefct.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\jdcoefct.o --depend=.\Obj\jdcoefct.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\GUI\JPEG\jdcoefct.c]
THUMB
AREA ||i.consume_data||, CODE, READONLY, ALIGN=1
consume_data PROC
;;;244 METHODDEF(int)
;;;245 consume_data (j_decompress_ptr cinfo)
000000 e92d47f0 PUSH {r4-r10,lr}
;;;246 {
000004 b086 SUB sp,sp,#0x18
000006 4604 MOV r4,r0
;;;247 my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
;;;248 JDIMENSION MCU_col_num; /* index of current MCU within row */
;;;249 int blkn, ci, xindex, yindex, yoffset;
;;;250 JDIMENSION start_col;
;;;251 JBLOCKARRAY buffer[MAX_COMPS_IN_SCAN];
;;;252 JBLOCKROW buffer_ptr;
;;;253 jpeg_component_info *compptr;
;;;254
;;;255 /* Align the virtual buffers for the components used in this scan. */
;;;256 for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
000008 2600 MOVS r6,#0
00000a f10d0a08 ADD r10,sp,#8 ;251
00000e f8d051ac LDR r5,[r0,#0x1ac]
000012 e014 B |L1.62|
|L1.20|
;;;257 compptr = cinfo->cur_comp_info[ci];
000014 eb040086 ADD r0,r4,r6,LSL #2
000018 f8d0014c LDR r0,[r0,#0x14c]
;;;258 buffer[ci] = (*cinfo->mem->access_virt_barray)
00001c 2301 MOVS r3,#1
00001e 9300 STR r3,[sp,#0]
000020 68c3 LDR r3,[r0,#0xc]
000022 6840 LDR r0,[r0,#4]
000024 f8d42094 LDR r2,[r4,#0x94]
000028 eb050080 ADD r0,r5,r0,LSL #2
00002c 6c81 LDR r1,[r0,#0x48]
00002e 6860 LDR r0,[r4,#4]
000030 435a MULS r2,r3,r2
000032 6a07 LDR r7,[r0,#0x20]
000034 4620 MOV r0,r4
000036 47b8 BLX r7
000038 f84a0026 STR r0,[r10,r6,LSL #2]
00003c 1c76 ADDS r6,r6,#1 ;256
|L1.62|
00003e f8d40148 LDR r0,[r4,#0x148] ;256
000042 42b0 CMP r0,r6 ;256
000044 dce6 BGT |L1.20|
;;;259 ((j_common_ptr) cinfo, coef->whole_image[compptr->component_index],
;;;260 cinfo->input_iMCU_row * compptr->v_samp_factor,
;;;261 (JDIMENSION) compptr->v_samp_factor, TRUE);
;;;262 /* Note: entropy decoder expects buffer to be zeroed,
;;;263 * but this is handled automatically by the memory manager
;;;264 * because we requested a pre-zeroed array.
;;;265 */
;;;266 }
;;;267
;;;268 /* Loop to process one whole iMCU row */
;;;269 for (yoffset = coef->MCU_vert_offset; yoffset < coef->MCU_rows_per_iMCU_row;
000046 69a8 LDR r0,[r5,#0x18]
000048 e045 B |L1.214|
|L1.74|
;;;270 yoffset++) {
;;;271 for (MCU_col_num = coef->MCU_ctr; MCU_col_num < cinfo->MCUs_per_row;
00004a 6968 LDR r0,[r5,#0x14]
00004c e03a B |L1.196|
|L1.78|
;;;272 MCU_col_num++) {
;;;273 /* Construct list of pointers to DCT blocks belonging to this MCU */
;;;274 blkn = 0; /* index of current DCT block within MCU */
00004e 2600 MOVS r6,#0
;;;275 for (ci = 0; ci < cinfo->comps_in_scan; ci++) {
000050 4632 MOV r2,r6
000052 e023 B |L1.156|
|L1.84|
;;;276 compptr = cinfo->cur_comp_info[ci];
000054 eb040082 ADD r0,r4,r2,LSL #2
;;;277 start_col = MCU_col_num * compptr->MCU_width;
000058 f8d0c14c LDR r12,[r0,#0x14c]
;;;278 for (yindex = 0; yindex < compptr->MCU_height; yindex++) {
00005c 2000 MOVS r0,#0
00005e f8dce034 LDR lr,[r12,#0x34] ;277
000062 fb0efe08 MUL lr,lr,r8 ;277
000066 e014 B |L1.146|
|L1.104|
;;;279 buffer_ptr = buffer[ci][yindex+yoffset] + start_col;
000068 f85a1022 LDR r1,[r10,r2,LSL #2]
00006c eb000309 ADD r3,r0,r9
000070 f8511023 LDR r1,[r1,r3,LSL #2]
000074 eb0113ce ADD r3,r1,lr,LSL #7
;;;280 for (xindex = 0; xindex < compptr->MCU_width; xindex++) {
000078 2100 MOVS r1,#0
00007a e005 B |L1.136|
|L1.124|
;;;281 coef->MCU_buffer[blkn++] = buffer_ptr++;
00007c eb050786 ADD r7,r5,r6,LSL #2
000080 623b STR r3,[r7,#0x20]
000082 3380 ADDS r3,r3,#0x80
000084 1c76 ADDS r6,r6,#1
000086 1c49 ADDS r1,r1,#1 ;280
|L1.136|
000088 f8dc7034 LDR r7,[r12,#0x34] ;280
00008c 428f CMP r7,r1 ;280
00008e dcf5 BGT |L1.124|
000090 1c40 ADDS r0,r0,#1 ;278
|L1.146|
000092 f8dc1038 LDR r1,[r12,#0x38] ;278
000096 4281 CMP r1,r0 ;278
000098 dce6 BGT |L1.104|
00009a 1c52 ADDS r2,r2,#1 ;275
|L1.156|
00009c f8d40148 LDR r0,[r4,#0x148] ;275
0000a0 4290 CMP r0,r2 ;275
0000a2 dcd7 BGT |L1.84|
;;;282 }
;;;283 }
;;;284 }
;;;285 /* Try to fetch the MCU. */
;;;286 if (! (*cinfo->entropy->decode_mcu) (cinfo, coef->MCU_buffer)) {
0000a4 f8d401bc LDR r0,[r4,#0x1bc]
0000a8 f1050120 ADD r1,r5,#0x20
0000ac 6842 LDR r2,[r0,#4]
0000ae 4620 MOV r0,r4
0000b0 4790 BLX r2
0000b2 b928 CBNZ r0,|L1.192|
;;;287 /* Suspension forced; update state counters and exit */
;;;288 coef->MCU_vert_offset = yoffset;
;;;289 coef->MCU_ctr = MCU_col_num;
;;;290 return JPEG_SUSPENDED;
0000b4 2000 MOVS r0,#0
0000b6 e9c58905 STRD r8,r9,[r5,#0x14]
|L1.186|
;;;291 }
;;;292 }
;;;293 /* Completed an MCU row, but perhaps not an iMCU row */
;;;294 coef->MCU_ctr = 0;
;;;295 }
;;;296 /* Completed the iMCU row, advance counters for next one */
;;;297 if (++(cinfo->input_iMCU_row) < cinfo->total_iMCU_rows) {
;;;298 start_iMCU_row(cinfo);
;;;299 return JPEG_ROW_COMPLETED;
;;;300 }
;;;301 /* Completed the scan */
;;;302 (*cinfo->inputctl->finish_input_pass) (cinfo);
;;;303 return JPEG_SCAN_COMPLETED;
;;;304 }
0000ba b006 ADD sp,sp,#0x18
0000bc e8bd87f0 POP {r4-r10,pc}
|L1.192|
0000c0 f1080001 ADD r0,r8,#1 ;272
|L1.196|
0000c4 4680 MOV r8,r0 ;271
0000c6 f8d4015c LDR r0,[r4,#0x15c] ;271
0000ca 4540 CMP r0,r8 ;271
0000cc d8bf BHI |L1.78|
0000ce 2000 MOVS r0,#0 ;294
0000d0 6168 STR r0,[r5,#0x14] ;270
0000d2 f1090001 ADD r0,r9,#1 ;270
|L1.214|
0000d6 69e9 LDR r1,[r5,#0x1c] ;269
0000d8 4681 MOV r9,r0 ;269
0000da 4281 CMP r1,r0 ;269
0000dc dcb5 BGT |L1.74|
0000de f8d40094 LDR r0,[r4,#0x94] ;297
0000e2 1c40 ADDS r0,r0,#1 ;297
0000e4 f8c40094 STR r0,[r4,#0x94] ;297
0000e8 f8d41140 LDR r1,[r4,#0x140] ;297
0000ec 4288 CMP r0,r1 ;297
0000ee d204 BCS |L1.250|
0000f0 4620 MOV r0,r4 ;298
0000f2 f7fffffe BL start_iMCU_row
0000f6 2003 MOVS r0,#3 ;299
0000f8 e7df B |L1.186|
|L1.250|
0000fa f8d401b4 LDR r0,[r4,#0x1b4] ;302
0000fe 68c1 LDR r1,[r0,#0xc] ;302
000100 4620 MOV r0,r4 ;302
000102 4788 BLX r1 ;302
000104 2004 MOVS r0,#4 ;303
000106 e7d8 B |L1.186|
;;;305
ENDP
AREA ||i.decompress_data||, CODE, READONLY, ALIGN=1
decompress_data PROC
;;;315 METHODDEF(int)
;;;316 decompress_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
000000 e92d4ff3 PUSH {r0,r1,r4-r11,lr}
;;;317 {
000004 4604 MOV r4,r0
;;;318 my_coef_ptr coef = (my_coef_ptr) cinfo->coef;
;;;319 JDIMENSION last_iMCU_row = cinfo->total_iMCU_rows - 1;
000006 f8d011ac LDR r1,[r0,#0x1ac]
00000a f8d00140 LDR r0,[r0,#0x140]
00000e b087 SUB sp,sp,#0x1c ;317
000010 1e40 SUBS r0,r0,#1
;;;320 JDIMENSION block_num;
;;;321 int ci, block_row, block_rows;
;;;322 JBLOCKARRAY buffer;
;;;323 JBLOCKROW buffer_ptr;
;;;324 JSAMPARRAY output_ptr;
;;;325 JDIMENSION output_col;
;;;326 jpeg_component_info *compptr;
;;;327 inverse_DCT_method_ptr inverse_DCT;
;;;328
;;;329 /* Force some input to be done if we are getting ahead of the input. */
;;;330 while (cinfo->input_scan_number < cinfo->output_scan_number ||
000012 e9cd0105 STRD r0,r1,[sp,#0x14]
000016 e006 B |L2.38|
|L2.24|
;;;331 (cinfo->input_scan_number == cinfo->output_scan_number &&
;;;332 cinfo->input_iMCU_row <= cinfo->output_iMCU_row)) {
;;;333 if ((*cinfo->inputctl->consume_input)(cinfo) == JPEG_SUSPENDED)
000018 f8d401b4 LDR r0,[r4,#0x1b4]
00001c 6801 LDR r1,[r0,#0]
00001e 4620 MOV r0,r4
000020 4788 BLX r1
000022 2800 CMP r0,#0
000024 d06f BEQ |L2.262|
|L2.38|
000026 f8d41098 LDR r1,[r4,#0x98] ;330
00002a f8d40090 LDR r0,[r4,#0x90] ;330
00002e 4288 CMP r0,r1 ;330
000030 dbf2 BLT |L2.24|
000032 d105 BNE |L2.64|
000034 f8d4109c LDR r1,[r4,#0x9c] ;332
000038 f8d40094 LDR r0,[r4,#0x94] ;332
00003c 4288 CMP r0,r1 ;332
00003e d9eb BLS |L2.24|
|L2.64|
;;;334 return JPEG_SUSPENDED;
;;;335 }
;;;336
;;;337 /* OK, output from the virtual arrays. */
;;;338 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
000040 f04f0900 MOV r9,#0
000044 f8d450d8 LDR r5,[r4,#0xd8]
000048 e051 B |L2.238|
|L2.74|
;;;339 ci++, compptr++) {
;;;340 /* Don't bother to IDCT an uninteresting component. */
;;;341 if (! compptr->component_needed)
00004a 6b28 LDR r0,[r5,#0x30]
00004c 2800 CMP r0,#0
00004e d04b BEQ |L2.232|
;;;342 continue;
;;;343 /* Align the virtual buffer for this component. */
;;;344 buffer = (*cinfo->mem->access_virt_barray)
000050 2300 MOVS r3,#0
000052 9300 STR r3,[sp,#0]
000054 9806 LDR r0,[sp,#0x18]
000056 f8d4209c LDR r2,[r4,#0x9c]
00005a eb000089 ADD r0,r0,r9,LSL #2
00005e 6c81 LDR r1,[r0,#0x48]
000060 6860 LDR r0,[r4,#4]
000062 68eb LDR r3,[r5,#0xc]
000064 6a06 LDR r6,[r0,#0x20]
000066 435a MULS r2,r3,r2
000068 4620 MOV r0,r4
00006a 47b0 BLX r6
;;;345 ((j_common_ptr) cinfo, coef->whole_image[ci],
;;;346 cinfo->output_iMCU_row * compptr->v_samp_factor,
;;;347 (JDIMENSION) compptr->v_samp_factor, FALSE);
;;;348 /* Count non-dummy DCT block rows in this iMCU row. */
;;;349 if (cinfo->output_iMCU_row < last_iMCU_row)
00006c 9003 STR r0,[sp,#0xc]
00006e f8d4009c LDR r0,[r4,#0x9c]
000072 9905 LDR r1,[sp,#0x14]
000074 4288 CMP r0,r1
000076 d201 BCS |L2.124|
;;;350 block_rows = compptr->v_samp_factor;
000078 68e8 LDR r0,[r5,#0xc]
00007a e007 B |L2.140|
|L2.124|
;;;351 else {
;;;352 /* NB: can't use last_row_height here; it is input-side-dependent! */
;;;353 block_rows = (int) (compptr->height_in_blocks % compptr->v_samp_factor);
00007c 6a29 LDR r1,[r5,#0x20]
00007e 68e8 LDR r0,[r5,#0xc]
000080 fbb1f2f0 UDIV r2,r1,r0
000084 fb001112 MLS r1,r0,r2,r1
;;;354 if (block_rows == 0) block_rows = compptr->v_samp_factor;
000088 9104 STR r1,[sp,#0x10]
00008a b901 CBNZ r1,|L2.142|
|L2.140|
00008c 9004 STR r0,[sp,#0x10]
|L2.142|
;;;355 }
;;;356 inverse_DCT = cinfo->idct->inverse_DCT[ci];
00008e 2204 MOVS r2,#4
000090 f8d411c0 LDR r1,[r4,#0x1c0]
000094 eb020089 ADD r0,r2,r9,LSL #2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -