📄 jddctmgr.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\jddctmgr.o --depend=.\Obj\jddctmgr.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\jddctmgr.c]
THUMB
AREA ||i.jinit_inverse_dct||, CODE, READONLY, ALIGN=2
jinit_inverse_dct PROC
;;;243 GLOBAL(void)
;;;244 jinit_inverse_dct (j_decompress_ptr cinfo)
000000 e92d47f0 PUSH {r4-r10,lr}
;;;245 {
000004 4605 MOV r5,r0
;;;246 my_idct_ptr idct;
;;;247 int ci;
;;;248 jpeg_component_info *compptr;
;;;249
;;;250 idct = (my_idct_ptr)
000006 6840 LDR r0,[r0,#4]
000008 2224 MOVS r2,#0x24
00000a 6803 LDR r3,[r0,#0]
00000c 2101 MOVS r1,#1
00000e 4628 MOV r0,r5
000010 4798 BLX r3
;;;251 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
;;;252 SIZEOF(my_idct_controller));
;;;253 cinfo->idct = (struct jpeg_inverse_dct *) idct;
;;;254 idct->pub.start_pass = start_pass;
000012 4911 LDR r1,|L1.88|
000014 f8c501c0 STR r0,[r5,#0x1c0]
;;;255
;;;256 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components;
000018 6001 STR r1,[r0,#0]
00001a 4607 MOV r7,r0 ;250
00001c 2400 MOVS r4,#0
;;;257 ci++, compptr++) {
;;;258 /* Allocate and pre-zero a multiplier table for each component */
;;;259 compptr->dct_table =
00001e f44f7880 MOV r8,#0x100
;;;260 (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
;;;261 SIZEOF(multiplier_table));
;;;262 MEMZERO(compptr->dct_table, SIZEOF(multiplier_table));
;;;263 /* Mark multiplier table not yet set up for any method */
;;;264 idct->cur_method[ci] = -1;
000022 f04f39ff MOV r9,#0xffffffff
000026 f8d560d8 LDR r6,[r5,#0xd8] ;257
00002a e00f B |L1.76|
|L1.44|
00002c 6868 LDR r0,[r5,#4] ;259
00002e 4642 MOV r2,r8 ;259
000030 6803 LDR r3,[r0,#0] ;259
000032 2101 MOVS r1,#1 ;259
000034 4628 MOV r0,r5 ;259
000036 4798 BLX r3 ;259
000038 4641 MOV r1,r8 ;262
00003a 6530 STR r0,[r6,#0x50] ;262
00003c f7fffffe BL __aeabi_memclr
000040 eb070184 ADD r1,r7,r4,LSL #2
000044 1c64 ADDS r4,r4,#1 ;257
000046 3654 ADDS r6,r6,#0x54 ;257
000048 f8c19014 STR r9,[r1,#0x14] ;257
|L1.76|
00004c 6a68 LDR r0,[r5,#0x24] ;256
00004e 42a0 CMP r0,r4 ;256
000050 dcec BGT |L1.44|
;;;265 }
;;;266 }
000052 e8bd87f0 POP {r4-r10,pc}
ENDP
000056 0000 DCW 0x0000
|L1.88|
DCD start_pass
AREA ||i.start_pass||, CODE, READONLY, ALIGN=2
start_pass PROC
;;;87
;;;88 METHODDEF(void) start_pass (j_decompress_ptr cinfo) {
000000 e92d47f0 PUSH {r4-r10,lr}
;;;89 my_idct_ptr idct = (my_idct_ptr) cinfo->idct;
;;;90 int ci, i;
;;;91 jpeg_component_info *compptr;
;;;92 int method = 0;
000004 2600 MOVS r6,#0
000006 4604 MOV r4,r0 ;88
;;;93 inverse_DCT_method_ptr method_ptr = NULL;
000008 46b0 MOV r8,r6
;;;94 JQUANT_TBL * qtbl;
;;;95
;;;96 for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; ci++, compptr++) {
00000a 4637 MOV r7,r6
;;;97 /* Select the proper IDCT routine for this component's scaling */
;;;98 switch (compptr->DCT_scaled_size) {
;;;99 #ifdef IDCT_SCALING_SUPPORTED
;;;100 case 1:
;;;101 method_ptr = jpeg_idct_1x1;
;;;102 method = JDCT_ISLOW; /* jidctred uses islow-style table */
;;;103 break;
;;;104 case 2:
;;;105 method_ptr = jpeg_idct_2x2;
;;;106 method = JDCT_ISLOW; /* jidctred uses islow-style table */
;;;107 break;
;;;108 case 4:
;;;109 method_ptr = jpeg_idct_4x4;
;;;110 method = JDCT_ISLOW; /* jidctred uses islow-style table */
;;;111 break;
;;;112 #endif
;;;113 case DCTSIZE:
;;;114 switch (cinfo->dct_method) {
;;;115 #ifdef DCT_ISLOW_SUPPORTED
;;;116 case JDCT_ISLOW:
;;;117 method_ptr = jpeg_idct_islow;
;;;118 method = JDCT_ISLOW;
;;;119 break;
;;;120 #endif
;;;121 #ifdef DCT_IFAST_SUPPORTED
;;;122 case JDCT_IFAST:
;;;123 method_ptr = jpeg_idct_ifast;
;;;124 method = JDCT_IFAST;
;;;125 break;
;;;126 #endif
;;;127 #ifdef DCT_FLOAT_SUPPORTED
;;;128 case JDCT_FLOAT:
;;;129 method_ptr = jpeg_idct_float;
;;;130 method = JDCT_FLOAT;
;;;131 break;
;;;132 #endif
;;;133 default:
;;;134 ERREXIT(cinfo, JERR_NOT_COMPILED);
00000c f04f0a30 MOV r10,#0x30
000010 f8d091c0 LDR r9,[r0,#0x1c0] ;96
000014 f8d050d8 LDR r5,[r0,#0xd8] ;96
000018 e054 B |L2.196|
|L2.26|
00001a 6a68 LDR r0,[r5,#0x24] ;98
00001c 2808 CMP r0,#8 ;98
00001e d114 BNE |L2.74|
000020 f8940048 LDRB r0,[r4,#0x48] ;114
000024 b128 CBZ r0,|L2.50|
000026 2801 CMP r0,#1 ;114
000028 d107 BNE |L2.58|
00002a f8df80a4 LDR r8,|L2.208|
00002e 2601 MOVS r6,#1 ;124
000030 e012 B |L2.88|
|L2.50|
000032 f8df80a0 LDR r8,|L2.212|
000036 2600 MOVS r6,#0 ;118
000038 e00e B |L2.88|
|L2.58|
00003a 6821 LDR r1,[r4,#0]
00003c f8c1a014 STR r10,[r1,#0x14]
|L2.64|
000040 6820 LDR r0,[r4,#0]
000042 6801 LDR r1,[r0,#0]
000044 4620 MOV r0,r4
000046 4788 BLX r1
000048 e006 B |L2.88|
|L2.74|
;;;135 break;
;;;136 }
;;;137 break;
;;;138 default:
;;;139 ERREXIT1(cinfo, JERR_BAD_DCTSIZE, compptr->DCT_scaled_size);
00004a 6821 LDR r1,[r4,#0]
00004c 2007 MOVS r0,#7
00004e 6148 STR r0,[r1,#0x14]
000050 6821 LDR r1,[r4,#0]
000052 6a68 LDR r0,[r5,#0x24]
;;;140 break;
000054 6188 STR r0,[r1,#0x18]
000056 e7f3 B |L2.64|
|L2.88|
;;;141 }
;;;142 idct->pub.inverse_DCT[ci] = method_ptr;
000058 eb090087 ADD r0,r9,r7,LSL #2
;;;143 /* Create multiplier table from quant table.
;;;144 * However, we can skip this if the component is uninteresting
;;;145 * or if we already built the table. Also, if no quant table
;;;146 * has yet been saved for the component, we leave the
;;;147 * multiplier table all-zero; we'll be reading zeroes from the
;;;148 * coefficient controller's buffer anyway.
;;;149 */
;;;150 if (! compptr->component_needed || idct->cur_method[ci] == method)
00005c f8c08004 STR r8,[r0,#4]
000060 6b29 LDR r1,[r5,#0x30]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -