📄 jidctfst.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\jidctfst.o --depend=.\Obj\jidctfst.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\jidctfst.c]
THUMB
AREA ||i.jpeg_idct_ifast||, CODE, READONLY, ALIGN=2
jpeg_idct_ifast PROC
;;;167 GLOBAL(void)
;;;168 jpeg_idct_ifast (j_decompress_ptr cinfo, jpeg_component_info * compptr,
000000 e92d4fff PUSH {r0-r11,lr}
;;;169 JCOEFPTR coef_block,
;;;170 JSAMPARRAY output_buf, JDIMENSION output_col)
;;;171 {
;;;172 DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
;;;173 DCTELEM tmp10, tmp11, tmp12, tmp13;
;;;174 DCTELEM z5, z10, z11, z12, z13;
;;;175 JCOEFPTR inptr;
;;;176 IFAST_MULT_TYPE * quantptr;
;;;177 int * wsptr;
;;;178 JSAMPROW outptr;
;;;179 JSAMPLE *range_limit = IDCT_range_limit(cinfo);
;;;180 int ctr;
;;;181 int workspace[DCTSIZE2]; /* buffers data between passes */
;;;182 SHIFT_TEMPS /* for DESCALE */
;;;183 ISHIFT_TEMPS /* for IDESCALE */
;;;184
;;;185 /* Pass 1: process columns from input, store into work array. */
;;;186
;;;187 inptr = coef_block;
;;;188 quantptr = (IFAST_MULT_TYPE *) compptr->dct_table;
000004 f8d0c144 LDR r12,[r0,#0x144]
000008 b0c3 SUB sp,sp,#0x10c ;171
00000a 6d09 LDR r1,[r1,#0x50]
;;;189 wsptr = workspace;
00000c 4668 MOV r0,sp
00000e f10c0c80 ADD r12,r12,#0x80 ;179
;;;190 for (ctr = DCTSIZE; ctr > 0; ctr--) {
000012 f04f0808 MOV r8,#8
;;;191 /* Due to quantization, we will usually find that many of the input
;;;192 * coefficients are zero, especially the AC terms. We can exploit this
;;;193 * by short-circuiting the IDCT calculation for any column in which all
;;;194 * the AC terms are zero. In that case each output is equal to the
;;;195 * DC coefficient (with scale factor as needed).
;;;196 * With typical images and quantization tables, half or more of the
;;;197 * column DCT calculations can be simplified this way.
;;;198 */
;;;199
;;;200 if (inptr[DCTSIZE*1] == 0 && inptr[DCTSIZE*2] == 0 &&
000016 bf00 NOP
|L1.24|
000018 f9b23010 LDRSH r3,[r2,#0x10]
00001c 9342 STR r3,[sp,#0x108]
00001e bb03 CBNZ r3,|L1.98|
000020 8c13 LDRH r3,[r2,#0x20]
000022 b9f3 CBNZ r3,|L1.98|
;;;201 inptr[DCTSIZE*3] == 0 && inptr[DCTSIZE*4] == 0 &&
000024 8e13 LDRH r3,[r2,#0x30]
000026 b9e3 CBNZ r3,|L1.98|
000028 f8b23040 LDRH r3,[r2,#0x40]
00002c b9cb CBNZ r3,|L1.98|
;;;202 inptr[DCTSIZE*5] == 0 && inptr[DCTSIZE*6] == 0 &&
00002e f8b23050 LDRH r3,[r2,#0x50]
000032 b9b3 CBNZ r3,|L1.98|
000034 f8b23060 LDRH r3,[r2,#0x60]
000038 b99b CBNZ r3,|L1.98|
;;;203 inptr[DCTSIZE*7] == 0) {
00003a f8b23070 LDRH r3,[r2,#0x70]
00003e b983 CBNZ r3,|L1.98|
;;;204 /* AC terms all zero */
;;;205 int dcval = (int) DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
000040 f9b23000 LDRSH r3,[r2,#0]
000044 680c LDR r4,[r1,#0]
000046 4363 MULS r3,r4,r3
;;;206
;;;207 wsptr[DCTSIZE*0] = dcval;
;;;208 wsptr[DCTSIZE*1] = dcval;
000048 6003 STR r3,[r0,#0]
;;;209 wsptr[DCTSIZE*2] = dcval;
00004a 6203 STR r3,[r0,#0x20]
;;;210 wsptr[DCTSIZE*3] = dcval;
00004c 6403 STR r3,[r0,#0x40]
;;;211 wsptr[DCTSIZE*4] = dcval;
00004e 6603 STR r3,[r0,#0x60]
;;;212 wsptr[DCTSIZE*5] = dcval;
000050 f8c03080 STR r3,[r0,#0x80]
;;;213 wsptr[DCTSIZE*6] = dcval;
000054 f8c030a0 STR r3,[r0,#0xa0]
;;;214 wsptr[DCTSIZE*7] = dcval;
000058 f8c030c0 STR r3,[r0,#0xc0]
;;;215
;;;216 inptr++; /* advance pointers to next column */
;;;217 quantptr++;
;;;218 wsptr++;
;;;219 continue;
00005c f8c030e0 STR r3,[r0,#0xe0]
000060 e074 B |L1.332|
|L1.98|
;;;220 }
;;;221
;;;222 /* Even part */
;;;223
;;;224 tmp0 = DEQUANTIZE(inptr[DCTSIZE*0], quantptr[DCTSIZE*0]);
000062 f9b26000 LDRSH r6,[r2,#0]
000066 680c LDR r4,[r1,#0]
;;;225 tmp1 = DEQUANTIZE(inptr[DCTSIZE*2], quantptr[DCTSIZE*2]);
000068 f9b2e020 LDRSH lr,[r2,#0x20]
00006c 6c0b LDR r3,[r1,#0x40]
00006e 4366 MULS r6,r4,r6 ;224
;;;226 tmp2 = DEQUANTIZE(inptr[DCTSIZE*4], quantptr[DCTSIZE*4]);
000070 f9b25040 LDRSH r5,[r2,#0x40]
000074 fb0efe03 MUL lr,lr,r3 ;225
000078 f8d17080 LDR r7,[r1,#0x80]
;;;227 tmp3 = DEQUANTIZE(inptr[DCTSIZE*6], quantptr[DCTSIZE*6]);
00007c f9b23060 LDRSH r3,[r2,#0x60]
000080 f8d140c0 LDR r4,[r1,#0xc0]
000084 437d MULS r5,r7,r5 ;226
;;;228
;;;229 tmp10 = tmp0 + tmp2; /* phase 3 */
000086 1977 ADDS r7,r6,r5
000088 4363 MULS r3,r4,r3 ;227
;;;230 tmp11 = tmp0 - tmp2;
00008a 1b76 SUBS r6,r6,r5
;;;231
;;;232 tmp13 = tmp1 + tmp3; /* phases 5-3 */
00008c eb0e0403 ADD r4,lr,r3
;;;233 tmp12 = MULTIPLY(tmp1 - tmp3, FIX_1_414213562) - tmp13; /* 2*c4 */
000090 ebae0503 SUB r5,lr,r3
000094 f44f73b5 MOV r3,#0x16a
000098 435d MULS r5,r3,r5
;;;234
;;;235 tmp0 = tmp10 + tmp13; /* phase 2 */
;;;236 tmp3 = tmp10 - tmp13;
00009a 1b3b SUBS r3,r7,r4
00009c ebc42525 RSB r5,r4,r5,ASR #8 ;233
;;;237 tmp1 = tmp11 + tmp12;
;;;238 tmp2 = tmp11 - tmp12;
0000a0 9341 STR r3,[sp,#0x104]
0000a2 eb070904 ADD r9,r7,r4 ;235
0000a6 eb060a05 ADD r10,r6,r5 ;237
0000aa eba60b05 SUB r11,r6,r5
;;;239
;;;240 /* Odd part */
;;;241
;;;242 tmp4 = DEQUANTIZE(inptr[DCTSIZE*1], quantptr[DCTSIZE*1]);
0000ae 9f42 LDR r7,[sp,#0x108]
0000b0 6a0c LDR r4,[r1,#0x20]
;;;243 tmp5 = DEQUANTIZE(inptr[DCTSIZE*3], quantptr[DCTSIZE*3]);
0000b2 f9b26030 LDRSH r6,[r2,#0x30]
0000b6 4367 MULS r7,r4,r7 ;242
;;;244 tmp6 = DEQUANTIZE(inptr[DCTSIZE*5], quantptr[DCTSIZE*5]);
0000b8 f9b25050 LDRSH r5,[r2,#0x50]
0000bc 6e0b LDR r3,[r1,#0x60] ;243
0000be f8d140a0 LDR r4,[r1,#0xa0]
0000c2 435e MULS r6,r3,r6 ;243
0000c4 4365 MULS r5,r4,r5
;;;245 tmp7 = DEQUANTIZE(inptr[DCTSIZE*7], quantptr[DCTSIZE*7]);
0000c6 f9b23070 LDRSH r3,[r2,#0x70]
0000ca f8d140e0 LDR r4,[r1,#0xe0]
;;;246
;;;247 z13 = tmp6 + tmp5; /* phase 6 */
0000ce eb050e06 ADD lr,r5,r6
0000d2 4363 MULS r3,r4,r3 ;245
;;;248 z10 = tmp6 - tmp5;
;;;249 z11 = tmp4 + tmp7;
0000d4 18fc ADDS r4,r7,r3
0000d6 1bad SUBS r5,r5,r6 ;248
;;;250 z12 = tmp4 - tmp7;
0000d8 1afb SUBS r3,r7,r3
;;;251
;;;252 tmp7 = z11 + z13; /* phase 5 */
0000da eb04070e ADD r7,r4,lr
;;;253 tmp11 = MULTIPLY(z11 - z13, FIX_1_414213562); /* 2*c4 */
0000de eba4060e SUB r6,r4,lr
0000e2 f44f74b5 MOV r4,#0x16a
0000e6 4366 MULS r6,r4,r6
0000e8 1236 ASRS r6,r6,#8
;;;254
;;;255 z5 = MULTIPLY(z10 + z12, FIX_1_847759065); /* 2*c2 */
0000ea 9640 STR r6,[sp,#0x100]
0000ec 18ec ADDS r4,r5,r3
0000ee f24016d9 MOV r6,#0x1d9
0000f2 4374 MULS r4,r6,r4
;;;256 tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */
0000f4 f2401615 MOV r6,#0x115
0000f8 4373 MULS r3,r6,r3
;;;257 tmp12 = MULTIPLY(z10, - FIX_2_613125930) + z5; /* -2*(c2+c6) */
0000fa f46f7627 MVN r6,#0x29c
0000fe 1224 ASRS r4,r4,#8 ;255
000100 4375 MULS r5,r6,r5
000102 ebc42e23 RSB lr,r4,r3,ASR #8 ;256
000106 eb042325 ADD r3,r4,r5,ASR #8
;;;258
;;;259 tmp6 = tmp12 - tmp7; /* phase 2 */
00010a 1bdc SUBS r4,r3,r7
;;;260 tmp5 = tmp11 - tmp6;
00010c 9e40 LDR r6,[sp,#0x100]
;;;261 tmp4 = tmp10 + tmp5;
;;;262
;;;263 wsptr[DCTSIZE*0] = (int) (tmp0 + tmp7);
00010e eb090307 ADD r3,r9,r7
;;;264 wsptr[DCTSIZE*7] = (int) (tmp0 - tmp7);
000112 6003 STR r3,[r0,#0]
000114 eba90307 SUB r3,r9,r7
;;;265 wsptr[DCTSIZE*1] = (int) (tmp1 + tmp6);
000118 f8c030e0 STR r3,[r0,#0xe0]
00011c eb0a0304 ADD r3,r10,r4
;;;266 wsptr[DCTSIZE*6] = (int) (tmp1 - tmp6);
000120 6203 STR r3,[r0,#0x20]
000122 ebaa0304 SUB r3,r10,r4
000126 1b35 SUBS r5,r6,r4 ;260
;;;267 wsptr[DCTSIZE*2] = (int) (tmp2 + tmp5);
000128 f8c030c0 STR r3,[r0,#0xc0]
00012c eb0b0305 ADD r3,r11,r5
;;;268 wsptr[DCTSIZE*5] = (int) (tmp2 - tmp5);
000130 6403 STR r3,[r0,#0x40]
000132 ebab0305 SUB r3,r11,r5
;;;269 wsptr[DCTSIZE*4] = (int) (tmp3 + tmp4);
000136 f8c030a0 STR r3,[r0,#0xa0]
00013a 9b41 LDR r3,[sp,#0x104]
00013c eb0e0605 ADD r6,lr,r5 ;261
000140 4433 ADD r3,r3,r6
;;;270 wsptr[DCTSIZE*3] = (int) (tmp3 - tmp4);
000142 f8c03080 STR r3,[r0,#0x80]
000146 9b41 LDR r3,[sp,#0x104]
000148 1b9b SUBS r3,r3,r6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -