📄 jdtrans.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\jdtrans.o --depend=.\Obj\jdtrans.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\jdtrans.c]
THUMB
AREA ||i.jpeg_read_coefficients||, CODE, READONLY, ALIGN=1
jpeg_read_coefficients PROC
;;;44 GLOBAL(jvirt_barray_ptr *)
;;;45 jpeg_read_coefficients (j_decompress_ptr cinfo)
000000 b510 PUSH {r4,lr}
;;;46 {
000002 4604 MOV r4,r0
;;;47 if (cinfo->global_state == DSTATE_READY) {
000004 6940 LDR r0,[r0,#0x14]
000006 28ca CMP r0,#0xca
000008 d105 BNE |L1.22|
;;;48 /* First call: initialize active modules */
;;;49 transdecode_master_selection(cinfo);
00000a 4620 MOV r0,r4
00000c f7fffffe BL transdecode_master_selection
;;;50 cinfo->global_state = DSTATE_RDCOEFS;
000010 20d1 MOVS r0,#0xd1
000012 6160 STR r0,[r4,#0x14]
000014 e001 B |L1.26|
|L1.22|
;;;51 }
;;;52 if (cinfo->global_state == DSTATE_RDCOEFS) {
000016 28d1 CMP r0,#0xd1
000018 d124 BNE |L1.100|
|L1.26|
;;;53 /* Absorb whole file into the coef buffer */
;;;54 while(1) {
;;;55 int retcode;
;;;56 /* Call progress monitor hook if present */
;;;57 if (cinfo->progress != NULL)
00001a 68a0 LDR r0,[r4,#8]
00001c b110 CBZ r0,|L1.36|
;;;58 (*cinfo->progress->progress_monitor) ((j_common_ptr) cinfo);
00001e 6801 LDR r1,[r0,#0]
000020 4620 MOV r0,r4
000022 4788 BLX r1
|L1.36|
;;;59 /* Absorb some more input */
;;;60 retcode = (*cinfo->inputctl->consume_input) (cinfo);
000024 f8d401b4 LDR r0,[r4,#0x1b4]
000028 6801 LDR r1,[r0,#0]
00002a 4620 MOV r0,r4
00002c 4788 BLX r1
;;;61 if (retcode == JPEG_SUSPENDED)
00002e b908 CBNZ r0,|L1.52|
|L1.48|
;;;62 return NULL;
000030 2000 MOVS r0,#0
;;;63 if (retcode == JPEG_REACHED_EOI)
;;;64 break;
;;;65 /* Advance progress counter if appropriate */
;;;66 if (cinfo->progress != NULL &&
;;;67 (retcode == JPEG_ROW_COMPLETED || retcode == JPEG_REACHED_SOS)) {
;;;68 if (++cinfo->progress->pass_counter >= cinfo->progress->pass_limit) {
;;;69 /* startup underestimated number of scans; ratchet up one scan */
;;;70 cinfo->progress->pass_limit += (long) cinfo->total_iMCU_rows;
;;;71 }
;;;72 }
;;;73 }
;;;74 /* Set state so that jpeg_finish_decompress does the right thing */
;;;75 cinfo->global_state = DSTATE_STOPPING;
;;;76 }
;;;77 /* At this point we should be in state DSTATE_STOPPING if being used
;;;78 * standalone, or in state DSTATE_BUFIMAGE if being invoked to get access
;;;79 * to the coefficients during a full buffered-image-mode decompression.
;;;80 */
;;;81 if ((cinfo->global_state == DSTATE_STOPPING ||
;;;82 cinfo->global_state == DSTATE_BUFIMAGE) && cinfo->buffered_image) {
;;;83 return cinfo->coef->coef_arrays;
;;;84 }
;;;85 /* Oops, improper usage */
;;;86 ERREXIT1(cinfo, JERR_BAD_STATE, cinfo->global_state);
;;;87 return NULL; /* keep compiler happy */
;;;88 }
000032 bd10 POP {r4,pc}
|L1.52|
000034 2802 CMP r0,#2 ;63
000036 d102 BNE |L1.62|
000038 20d2 MOVS r0,#0xd2 ;75
00003a 6160 STR r0,[r4,#0x14] ;75
00003c e016 B |L1.108|
|L1.62|
00003e 68a1 LDR r1,[r4,#8] ;66
000040 2900 CMP r1,#0 ;66
000042 d0ea BEQ |L1.26|
000044 2803 CMP r0,#3 ;67
000046 d001 BEQ |L1.76|
000048 2801 CMP r0,#1 ;67
00004a d1e6 BNE |L1.26|
|L1.76|
00004c 684a LDR r2,[r1,#4] ;68
00004e 1c52 ADDS r2,r2,#1 ;68
000050 604a STR r2,[r1,#4] ;68
000052 68a0 LDR r0,[r4,#8] ;68
000054 6881 LDR r1,[r0,#8] ;68
000056 428a CMP r2,r1 ;68
000058 dbdf BLT |L1.26|
00005a f8d42140 LDR r2,[r4,#0x140] ;70
00005e 4411 ADD r1,r1,r2 ;70
000060 6081 STR r1,[r0,#8] ;70
000062 e7da B |L1.26|
|L1.100|
000064 28d2 CMP r0,#0xd2 ;81
000066 d001 BEQ |L1.108|
000068 28cf CMP r0,#0xcf ;82
00006a d105 BNE |L1.120|
|L1.108|
00006c 6c20 LDR r0,[r4,#0x40] ;82
00006e b118 CBZ r0,|L1.120|
000070 f8d401ac LDR r0,[r4,#0x1ac] ;83
000074 6900 LDR r0,[r0,#0x10] ;83
000076 bd10 POP {r4,pc}
|L1.120|
000078 6821 LDR r1,[r4,#0] ;86
00007a 2014 MOVS r0,#0x14 ;86
00007c 6148 STR r0,[r1,#0x14] ;86
00007e 6821 LDR r1,[r4,#0] ;86
000080 6960 LDR r0,[r4,#0x14] ;86
000082 6188 STR r0,[r1,#0x18] ;86
000084 6820 LDR r0,[r4,#0] ;86
000086 6801 LDR r1,[r0,#0] ;86
000088 4620 MOV r0,r4 ;86
00008a 4788 BLX r1 ;86
00008c e7d0 B |L1.48|
;;;89
ENDP
AREA ||i.transdecode_master_selection||, CODE, READONLY, ALIGN=1
transdecode_master_selection PROC
;;;96 LOCAL(void)
;;;97 transdecode_master_selection (j_decompress_ptr cinfo)
000000 b570 PUSH {r4-r6,lr}
;;;98 {
;;;99 /* This is effectively a buffered-image operation. */
;;;100 cinfo->buffered_image = TRUE;
000002 2501 MOVS r5,#1
000004 4604 MOV r4,r0 ;98
;;;101
;;;102 /* Entropy decoding: either Huffman or arithmetic coding. */
;;;103 if (cinfo->arith_code) {
000006 6405 STR r5,[r0,#0x40]
000008 f8d000e0 LDR r0,[r0,#0xe0]
00000c b130 CBZ r0,|L2.28|
;;;104 ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
00000e 6820 LDR r0,[r4,#0]
000010 6145 STR r5,[r0,#0x14]
000012 6820 LDR r0,[r4,#0]
000014 6801 LDR r1,[r0,#0]
000016 4620 MOV r0,r4
000018 4788 BLX r1
00001a e009 B |L2.48|
|L2.28|
;;;105 } else {
;;;106 if (cinfo->progressive_mode) {
00001c f8d400dc LDR r0,[r4,#0xdc]
000020 2800 CMP r0,#0
;;;107 #ifdef D_PROGRESSIVE_SUPPORTED
;;;108 jinit_phuff_decoder(cinfo);
000022 4620 MOV r0,r4
000024 d002 BEQ |L2.44|
000026 f7fffffe BL jinit_phuff_decoder
00002a e001 B |L2.48|
|L2.44|
;;;109 #else
;;;110 ERREXIT(cinfo, JERR_NOT_COMPILED);
;;;111 #endif
;;;112 } else
;;;113 jinit_huff_decoder(cinfo);
00002c f7fffffe BL jinit_huff_decoder
|L2.48|
;;;114 }
;;;115
;;;116 /* Always get a full-image coefficient buffer. */
;;;117 jinit_d_coef_controller(cinfo, TRUE);
000030 2101 MOVS r1,#1
000032 4620 MOV r0,r4
000034 f7fffffe BL jinit_d_coef_controller
;;;118
;;;119 /* We can now tell the memory manager to allocate virtual arrays. */
;;;120 (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
000038 6860 LDR r0,[r4,#4]
00003a 6981 LDR r1,[r0,#0x18]
00003c 4620 MOV r0,r4
00003e 4788 BLX r1
;;;121
;;;122 /* Initialize input side of decompressor to consume first scan. */
;;;123 (*cinfo->inputctl->start_input_pass) (cinfo);
000040 f8d401b4 LDR r0,[r4,#0x1b4]
000044 6881 LDR r1,[r0,#8]
000046 4620 MOV r0,r4
000048 4788 BLX r1
;;;124
;;;125 /* Initialize progress monitoring. */
;;;126 if (cinfo->progress != NULL) {
00004a 68a1 LDR r1,[r4,#8]
00004c 2900 CMP r1,#0
00004e d019 BEQ |L2.132|
;;;127 int nscans;
;;;128 /* Estimate number of scans to set pass_limit. */
;;;129 if (cinfo->progressive_mode) {
000050 f8d400dc LDR r0,[r4,#0xdc]
000054 b120 CBZ r0,|L2.96|
;;;130 /* Arbitrarily estimate 2 interleaved DC scans + 3 AC scans/component. */
;;;131 nscans = 2 + 3 * cinfo->num_components;
000056 6a60 LDR r0,[r4,#0x24]
000058 eb000040 ADD r0,r0,r0,LSL #1
00005c 1c80 ADDS r0,r0,#2
00005e e006 B |L2.110|
|L2.96|
;;;132 } else if (cinfo->inputctl->has_multiple_scans) {
000060 f8d401b4 LDR r0,[r4,#0x1b4]
000064 6900 LDR r0,[r0,#0x10]
000066 b108 CBZ r0,|L2.108|
;;;133 /* For a nonprogressive multiscan file, estimate 1 scan per component. */
;;;134 nscans = cinfo->num_components;
000068 6a60 LDR r0,[r4,#0x24]
00006a e000 B |L2.110|
|L2.108|
;;;135 } else {
;;;136 nscans = 1;
00006c 2001 MOVS r0,#1
|L2.110|
;;;137 }
;;;138 cinfo->progress->pass_counter = 0L;
00006e 2200 MOVS r2,#0
;;;139 cinfo->progress->pass_limit = (long) cinfo->total_iMCU_rows * nscans;
000070 604a STR r2,[r1,#4]
000072 f8d41140 LDR r1,[r4,#0x140]
000076 68a3 LDR r3,[r4,#8]
000078 4341 MULS r1,r0,r1
;;;140 cinfo->progress->completed_passes = 0;
00007a 6099 STR r1,[r3,#8]
00007c 68a0 LDR r0,[r4,#8]
;;;141 cinfo->progress->total_passes = 1;
00007e 60c2 STR r2,[r0,#0xc]
000080 68a0 LDR r0,[r4,#8]
;;;142 }
000082 6105 STR r5,[r0,#0x10]
|L2.132|
;;;143 }
000084 bd70 POP {r4-r6,pc}
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -