jfdctfst.txt
来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 250 行
TXT
250 行
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\jfdctfst.o --depend=.\Obj\jfdctfst.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\jfdctfst.c]
THUMB
AREA ||i.jpeg_fdct_ifast||, CODE, READONLY, ALIGN=1
jpeg_fdct_ifast PROC
;;;113 GLOBAL(void)
;;;114 jpeg_fdct_ifast (DCTELEM * data)
000000 e92d4ff1 PUSH {r0,r4-r11,lr}
;;;115 {
;;;116 DCTELEM tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
;;;117 DCTELEM tmp10, tmp11, tmp12, tmp13;
;;;118 DCTELEM z1, z2, z3, z4, z5, z11, z13;
;;;119 DCTELEM *dataptr;
;;;120 int ctr;
;;;121 SHIFT_TEMPS
;;;122
;;;123 /* Pass 1: process rows. */
;;;124
;;;125 dataptr = data;
;;;126 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
000004 f8dde000 LDR lr,[sp,#0]
000008 f04f0907 MOV r9,#7
|L1.12|
;;;127 tmp0 = dataptr[0] + dataptr[7];
;;;128 tmp7 = dataptr[0] - dataptr[7];
00000c f8de101c LDR r1,[lr,#0x1c]
000010 f8de0000 LDR r0,[lr,#0]
;;;129 tmp1 = dataptr[1] + dataptr[6];
;;;130 tmp6 = dataptr[1] - dataptr[6];
000014 f8de3018 LDR r3,[lr,#0x18]
000018 f8de2004 LDR r2,[lr,#4]
;;;131 tmp2 = dataptr[2] + dataptr[5];
;;;132 tmp5 = dataptr[2] - dataptr[5];
00001c f8de5014 LDR r5,[lr,#0x14]
000020 f8de4008 LDR r4,[lr,#8]
;;;133 tmp3 = dataptr[3] + dataptr[4];
;;;134 tmp4 = dataptr[3] - dataptr[4];
000024 e9de6703 LDRD r6,r7,[lr,#0xc]
000028 eba00801 SUB r8,r0,r1 ;128
00002c eba40a05 SUB r10,r4,r5 ;132
000030 4408 ADD r0,r0,r1 ;127
000032 19f1 ADDS r1,r6,r7 ;133
000034 442c ADD r4,r4,r5 ;131
000036 eba20b03 SUB r11,r2,r3 ;130
;;;135
;;;136 /* Even part */
;;;137
;;;138 tmp10 = tmp0 + tmp3; /* phase 2 */
00003a 1845 ADDS r5,r0,r1
;;;139 tmp13 = tmp0 - tmp3;
00003c 1a40 SUBS r0,r0,r1
00003e 441a ADD r2,r2,r3 ;129
;;;140 tmp11 = tmp1 + tmp2;
000040 1911 ADDS r1,r2,r4
;;;141 tmp12 = tmp1 - tmp2;
;;;142
;;;143 dataptr[0] = tmp10 + tmp11; /* phase 3 */
000042 186b ADDS r3,r5,r1
;;;144 dataptr[4] = tmp10 - tmp11;
;;;145
;;;146 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */
000044 f8ce3000 STR r3,[lr,#0]
000048 1b12 SUBS r2,r2,r4 ;141
00004a 1a69 SUBS r1,r5,r1 ;144
00004c f8ce1010 STR r1,[lr,#0x10]
000050 1811 ADDS r1,r2,r0
000052 22b5 MOVS r2,#0xb5
000054 4351 MULS r1,r2,r1
000056 1209 ASRS r1,r1,#8
;;;147 dataptr[2] = tmp13 + z1; /* phase 5 */
000058 1842 ADDS r2,r0,r1
;;;148 dataptr[6] = tmp13 - z1;
00005a 1a40 SUBS r0,r0,r1
;;;149
;;;150 /* Odd part */
;;;151
;;;152 tmp10 = tmp4 + tmp5; /* phase 2 */
00005c f8ce2008 STR r2,[lr,#8]
000060 eba60c07 SUB r12,r6,r7 ;134
000064 f8ce0018 STR r0,[lr,#0x18]
000068 eb0c000a ADD r0,r12,r10
;;;153 tmp11 = tmp5 + tmp6;
;;;154 tmp12 = tmp6 + tmp7;
00006c eb0b0108 ADD r1,r11,r8
;;;155
;;;156 /* The rotator is modified from fig 4-8 to avoid extra negations. */
;;;157 z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */
000070 1a42 SUBS r2,r0,r1
000072 2462 MOVS r4,#0x62
000074 4362 MULS r2,r4,r2
;;;158 z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */
000076 248b MOVS r4,#0x8b
000078 4360 MULS r0,r4,r0
;;;159 z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */
00007a f44f74a7 MOV r4,#0x14e
00007e 4361 MULS r1,r4,r1
000080 eb0a030b ADD r3,r10,r11 ;153
;;;160 z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */
000084 24b5 MOVS r4,#0xb5
000086 1212 ASRS r2,r2,#8 ;157
000088 4363 MULS r3,r4,r3
00008a ea4f2323 ASR r3,r3,#8
00008e eb022020 ADD r0,r2,r0,ASR #8 ;158
000092 eb022121 ADD r1,r2,r1,ASR #8 ;159
;;;161
;;;162 z11 = tmp7 + z3; /* phase 5 */
000096 eb080403 ADD r4,r8,r3
;;;163 z13 = tmp7 - z3;
00009a eba80203 SUB r2,r8,r3
;;;164
;;;165 dataptr[5] = z13 + z2; /* phase 6 */
00009e 1813 ADDS r3,r2,r0
;;;166 dataptr[3] = z13 - z2;
0000a0 1a10 SUBS r0,r2,r0
;;;167 dataptr[1] = z11 + z4;
0000a2 f8ce3014 STR r3,[lr,#0x14]
0000a6 f8ce000c STR r0,[lr,#0xc]
0000aa 1860 ADDS r0,r4,r1
;;;168 dataptr[7] = z11 - z4;
0000ac f8ce0004 STR r0,[lr,#4]
0000b0 1a60 SUBS r0,r4,r1
;;;169
;;;170 dataptr += DCTSIZE; /* advance pointer to next row */
0000b2 f8ce001c STR r0,[lr,#0x1c]
0000b6 f10e0e20 ADD lr,lr,#0x20
0000ba f1b90901 SUBS r9,r9,#1 ;126
0000be d5a5 BPL |L1.12|
;;;171 }
;;;172
;;;173 /* Pass 2: process columns. */
;;;174
;;;175 dataptr = data;
;;;176 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
0000c0 f8dde000 LDR lr,[sp,#0]
0000c4 f04f0907 MOV r9,#7
|L1.200|
;;;177 tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
;;;178 tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
0000c8 f8de10e0 LDR r1,[lr,#0xe0]
0000cc f8de0000 LDR r0,[lr,#0]
;;;179 tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
;;;180 tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
;;;181 tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
;;;182 tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
0000d0 f8de50a0 LDR r5,[lr,#0xa0]
0000d4 f8de4040 LDR r4,[lr,#0x40]
;;;183 tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
;;;184 tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
0000d8 f8de7080 LDR r7,[lr,#0x80]
0000dc f8de6060 LDR r6,[lr,#0x60]
0000e0 eba00801 SUB r8,r0,r1 ;178
0000e4 f8de30c0 LDR r3,[lr,#0xc0] ;180
0000e8 f8de2020 LDR r2,[lr,#0x20] ;180
0000ec eba40a05 SUB r10,r4,r5 ;182
0000f0 4408 ADD r0,r0,r1 ;177
0000f2 19f1 ADDS r1,r6,r7 ;183
0000f4 442c ADD r4,r4,r5 ;181
0000f6 eba20b03 SUB r11,r2,r3 ;180
;;;185
;;;186 /* Even part */
;;;187
;;;188 tmp10 = tmp0 + tmp3; /* phase 2 */
0000fa 1845 ADDS r5,r0,r1
;;;189 tmp13 = tmp0 - tmp3;
0000fc 1a40 SUBS r0,r0,r1
0000fe 441a ADD r2,r2,r3 ;179
;;;190 tmp11 = tmp1 + tmp2;
000100 1911 ADDS r1,r2,r4
;;;191 tmp12 = tmp1 - tmp2;
;;;192
;;;193 dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */
000102 186b ADDS r3,r5,r1
;;;194 dataptr[DCTSIZE*4] = tmp10 - tmp11;
000104 1a69 SUBS r1,r5,r1
;;;195
;;;196 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_707106781); /* c4 */
000106 f8ce3000 STR r3,[lr,#0]
00010a 1b12 SUBS r2,r2,r4 ;191
00010c f8ce1080 STR r1,[lr,#0x80]
000110 1811 ADDS r1,r2,r0
000112 22b5 MOVS r2,#0xb5
000114 4351 MULS r1,r2,r1
000116 1209 ASRS r1,r1,#8
;;;197 dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */
000118 1842 ADDS r2,r0,r1
;;;198 dataptr[DCTSIZE*6] = tmp13 - z1;
00011a 1a40 SUBS r0,r0,r1
;;;199
;;;200 /* Odd part */
;;;201
;;;202 tmp10 = tmp4 + tmp5; /* phase 2 */
00011c f8ce2040 STR r2,[lr,#0x40]
000120 eba60c07 SUB r12,r6,r7 ;184
000124 f8ce00c0 STR r0,[lr,#0xc0]
000128 eb0c020a ADD r2,r12,r10
;;;203 tmp11 = tmp5 + tmp6;
;;;204 tmp12 = tmp6 + tmp7;
00012c eb0b0108 ADD r1,r11,r8
;;;205
;;;206 /* The rotator is modified from fig 4-8 to avoid extra negations. */
;;;207 z5 = MULTIPLY(tmp10 - tmp12, FIX_0_382683433); /* c6 */
000130 1a50 SUBS r0,r2,r1
000132 2362 MOVS r3,#0x62
000134 4358 MULS r0,r3,r0
;;;208 z2 = MULTIPLY(tmp10, FIX_0_541196100) + z5; /* c2-c6 */
000136 238b MOVS r3,#0x8b
000138 435a MULS r2,r3,r2
;;;209 z4 = MULTIPLY(tmp12, FIX_1_306562965) + z5; /* c2+c6 */
00013a f44f73a7 MOV r3,#0x14e
00013e 4359 MULS r1,r3,r1
000140 ea4f2020 ASR r0,r0,#8 ;207
000144 eb0a050b ADD r5,r10,r11 ;203
;;;210 z3 = MULTIPLY(tmp11, FIX_0_707106781); /* c4 */
000148 23b5 MOVS r3,#0xb5
00014a eb002222 ADD r2,r0,r2,ASR #8 ;208
00014e eb002121 ADD r1,r0,r1,ASR #8 ;209
000152 435d MULS r5,r3,r5
000154 ea4f2025 ASR r0,r5,#8
;;;211
;;;212 z11 = tmp7 + z3; /* phase 5 */
000158 eb080400 ADD r4,r8,r0
;;;213 z13 = tmp7 - z3;
00015c eba80000 SUB r0,r8,r0
;;;214
;;;215 dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */
000160 1883 ADDS r3,r0,r2
;;;216 dataptr[DCTSIZE*3] = z13 - z2;
000162 1a80 SUBS r0,r0,r2
;;;217 dataptr[DCTSIZE*1] = z11 + z4;
000164 f8ce30a0 STR r3,[lr,#0xa0]
000168 f8ce0060 STR r0,[lr,#0x60]
00016c 1860 ADDS r0,r4,r1
;;;218 dataptr[DCTSIZE*7] = z11 - z4;
00016e f8ce0020 STR r0,[lr,#0x20]
000172 1a60 SUBS r0,r4,r1
;;;219
;;;220 dataptr++; /* advance pointer to next column */
000174 f8ce00e0 STR r0,[lr,#0xe0]
000178 f10e0e04 ADD lr,lr,#4
00017c f1b90901 SUBS r9,r9,#1 ;176
000180 d5a2 BPL |L1.200|
;;;221 }
;;;222 }
000182 e8bd8ff8 POP {r3-r11,pc}
;;;223
ENDP
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?