📄 jfdctint.txt
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\jfdctint.o --depend=.\Obj\jfdctint.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\jfdctint.c]
THUMB
AREA ||i.jpeg_fdct_islow||, CODE, READONLY, ALIGN=2
jpeg_fdct_islow PROC
;;;139 GLOBAL(void)
;;;140 jpeg_fdct_islow (DCTELEM * data)
000000 e92d4ff1 PUSH {r0,r4-r11,lr}
;;;141 {
000004 b081 SUB sp,sp,#4
;;;142 INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
;;;143 INT32 tmp10, tmp11, tmp12, tmp13;
;;;144 INT32 z1, z2, z3, z4, z5;
;;;145 DCTELEM *dataptr;
;;;146 int ctr;
;;;147 SHIFT_TEMPS
;;;148
;;;149 /* Pass 1: process rows. */
;;;150 /* Note results are scaled up by sqrt(8) compared to a true DCT; */
;;;151 /* furthermore, we scale the results by 2**PASS1_BITS. */
;;;152
;;;153 dataptr = data;
;;;154 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
000006 f8dde004 LDR lr,[sp,#4]
00000a f04f0b07 MOV r11,#7
;;;155 tmp0 = dataptr[0] + dataptr[7];
;;;156 tmp7 = dataptr[0] - dataptr[7];
00000e bf00 NOP
|L1.16|
000010 f8de101c LDR r1,[lr,#0x1c]
000014 f8de0000 LDR r0,[lr,#0]
;;;157 tmp1 = dataptr[1] + dataptr[6];
;;;158 tmp6 = dataptr[1] - dataptr[6];
000018 f8de3018 LDR r3,[lr,#0x18]
00001c f8de2004 LDR r2,[lr,#4]
;;;159 tmp2 = dataptr[2] + dataptr[5];
;;;160 tmp5 = dataptr[2] - dataptr[5];
000020 f8de5014 LDR r5,[lr,#0x14]
000024 f8de4008 LDR r4,[lr,#8]
;;;161 tmp3 = dataptr[3] + dataptr[4];
;;;162 tmp4 = dataptr[3] - dataptr[4];
000028 e9de6703 LDRD r6,r7,[lr,#0xc]
00002c eba00a01 SUB r10,r0,r1 ;156
000030 4408 ADD r0,r0,r1 ;155
000032 eba40805 SUB r8,r4,r5 ;160
000036 19f1 ADDS r1,r6,r7 ;161
000038 442c ADD r4,r4,r5 ;159
00003a eba20903 SUB r9,r2,r3 ;158
;;;163
;;;164 /* Even part per LL&M figure 1 --- note that published figure is faulty;
;;;165 * rotator "sqrt(2)*c1" should be "sqrt(2)*c6".
;;;166 */
;;;167
;;;168 tmp10 = tmp0 + tmp3;
00003e 1845 ADDS r5,r0,r1
;;;169 tmp13 = tmp0 - tmp3;
000040 1a40 SUBS r0,r0,r1
000042 441a ADD r2,r2,r3 ;157
;;;170 tmp11 = tmp1 + tmp2;
000044 1911 ADDS r1,r2,r4
;;;171 tmp12 = tmp1 - tmp2;
;;;172
;;;173 dataptr[0] = (DCTELEM) ((tmp10 + tmp11) << PASS1_BITS);
000046 186b ADDS r3,r5,r1
000048 009b LSLS r3,r3,#2
;;;174 dataptr[4] = (DCTELEM) ((tmp10 - tmp11) << PASS1_BITS);
00004a 1a69 SUBS r1,r5,r1
;;;175
;;;176 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
00004c f8ce3000 STR r3,[lr,#0]
000050 0089 LSLS r1,r1,#2 ;174
000052 1b12 SUBS r2,r2,r4 ;171
000054 f8ce1010 STR r1,[lr,#0x10]
000058 1811 ADDS r1,r2,r0
00005a f2411351 MOV r3,#0x1151
00005e 4359 MULS r1,r3,r1
;;;177 dataptr[2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
000060 f640433f MOV r3,#0xc3f
000064 4358 MULS r0,r3,r0
000066 eb010040 ADD r0,r1,r0,LSL #1
00006a f5006080 ADD r0,r0,#0x400
00006e 12c0 ASRS r0,r0,#11
;;;178 CONST_BITS-PASS1_BITS);
;;;179 dataptr[6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
000070 f8ce0008 STR r0,[lr,#8]
000074 487b LDR r0,|L1.612|
000076 eba60c07 SUB r12,r6,r7 ;162
00007a fb001002 MLA r0,r0,r2,r1
00007e f5006080 ADD r0,r0,#0x400
000082 12c0 ASRS r0,r0,#11
;;;180 CONST_BITS-PASS1_BITS);
;;;181
;;;182 /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
;;;183 * cK represents cos(K*pi/16).
;;;184 * i0..i3 in the paper are tmp4..tmp7 here.
;;;185 */
;;;186
;;;187 z1 = tmp4 + tmp7;
;;;188 z2 = tmp5 + tmp6;
000084 f8ce0018 STR r0,[lr,#0x18]
000088 eb080309 ADD r3,r8,r9
;;;189 z3 = tmp4 + tmp6;
00008c eb0c0009 ADD r0,r12,r9
;;;190 z4 = tmp5 + tmp7;
000090 eb08010a ADD r1,r8,r10
;;;191 z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
000094 9300 STR r3,[sp,#0]
000096 1842 ADDS r2,r0,r1
000098 f24253a1 MOV r3,#0x25a1
00009c 435a MULS r2,r3,r2
00009e eb0c070a ADD r7,r12,r10 ;187
;;;192
;;;193 tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
0000a2 f640138e MOV r3,#0x98e
0000a6 fb0cfc03 MUL r12,r12,r3
;;;194 tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
0000aa f24413b3 MOV r3,#0x41b3
0000ae fb08f603 MUL r6,r8,r3
;;;195 tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
;;;196 tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
0000b2 f243050b MOV r5,#0x300b
0000b6 fb0af805 MUL r8,r10,r5
;;;197 z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */
0000ba 4d6b LDR r5,|L1.616|
0000bc f2462354 MOV r3,#0x6254 ;195
0000c0 fb09f403 MUL r4,r9,r3 ;195
0000c4 436f MULS r7,r5,r7
;;;198 z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
0000c6 4d69 LDR r5,|L1.620|
0000c8 9b00 LDR r3,[sp,#0]
0000ca 436b MULS r3,r5,r3
;;;199 z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
0000cc eba02500 SUB r5,r0,r0,LSL #8
0000d0 ebc51585 RSB r5,r5,r5,LSL #6
0000d4 eba50080 SUB r0,r5,r0,LSL #2
;;;200 z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */
0000d8 4d65 LDR r5,|L1.624|
;;;201
;;;202 z3 += z5;
0000da 4410 ADD r0,r0,r2
;;;203 z4 += z5;
0000dc fb012105 MLA r1,r1,r5,r2
;;;204
;;;205 dataptr[7] = (DCTELEM) DESCALE(tmp4 + z1 + z3, CONST_BITS-PASS1_BITS);
0000e0 eb0c0207 ADD r2,r12,r7
0000e4 4402 ADD r2,r2,r0
0000e6 f5026280 ADD r2,r2,#0x400
0000ea ea4f22e2 ASR r2,r2,#11
;;;206 dataptr[5] = (DCTELEM) DESCALE(tmp5 + z2 + z4, CONST_BITS-PASS1_BITS);
0000ee f8ce201c STR r2,[lr,#0x1c]
0000f2 18f2 ADDS r2,r6,r3
0000f4 440a ADD r2,r2,r1
0000f6 f5026280 ADD r2,r2,#0x400
0000fa ea4f22e2 ASR r2,r2,#11
;;;207 dataptr[3] = (DCTELEM) DESCALE(tmp6 + z2 + z3, CONST_BITS-PASS1_BITS);
0000fe f8ce2014 STR r2,[lr,#0x14]
000102 18e2 ADDS r2,r4,r3
000104 4410 ADD r0,r0,r2
000106 f5006080 ADD r0,r0,#0x400
00010a ea4f20e0 ASR r0,r0,#11
;;;208 dataptr[1] = (DCTELEM) DESCALE(tmp7 + z1 + z4, CONST_BITS-PASS1_BITS);
00010e f8ce000c STR r0,[lr,#0xc]
000112 eb080007 ADD r0,r8,r7
000116 4408 ADD r0,r0,r1
000118 f5006080 ADD r0,r0,#0x400
00011c ea4f20e0 ASR r0,r0,#11
;;;209
;;;210 dataptr += DCTSIZE; /* advance pointer to next row */
000120 f8ce0004 STR r0,[lr,#4]
000124 f10e0e20 ADD lr,lr,#0x20
000128 f1bb0b01 SUBS r11,r11,#1 ;154
00012c f57faf70 BPL |L1.16|
;;;211 }
;;;212
;;;213 /* Pass 2: process columns.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -