📄 jfdctint.txt
字号:
;;;214 * We remove the PASS1_BITS scaling, but leave the results scaled up
;;;215 * by an overall factor of 8.
;;;216 */
;;;217
;;;218 dataptr = data;
;;;219 for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
000130 f8dde004 LDR lr,[sp,#4]
000134 f04f0b07 MOV r11,#7
|L1.312|
;;;220 tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
;;;221 tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
000138 f8de10e0 LDR r1,[lr,#0xe0]
00013c f8de0000 LDR r0,[lr,#0]
;;;222 tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
;;;223 tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
;;;224 tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
;;;225 tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
000140 f8de50a0 LDR r5,[lr,#0xa0]
000144 f8de4040 LDR r4,[lr,#0x40]
;;;226 tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
;;;227 tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
000148 f8de7080 LDR r7,[lr,#0x80]
00014c f8de6060 LDR r6,[lr,#0x60]
000150 eba00a01 SUB r10,r0,r1 ;221
000154 f8de30c0 LDR r3,[lr,#0xc0] ;223
000158 f8de2020 LDR r2,[lr,#0x20] ;223
00015c eba40805 SUB r8,r4,r5 ;225
000160 4408 ADD r0,r0,r1 ;220
000162 19f1 ADDS r1,r6,r7 ;226
000164 eba20903 SUB r9,r2,r3 ;223
000168 442c ADD r4,r4,r5 ;224
;;;228
;;;229 /* Even part per LL&M figure 1 --- note that published figure is faulty;
;;;230 * rotator "sqrt(2)*c1" should be "sqrt(2)*c6".
;;;231 */
;;;232
;;;233 tmp10 = tmp0 + tmp3;
00016a 1845 ADDS r5,r0,r1
;;;234 tmp13 = tmp0 - tmp3;
00016c 1a40 SUBS r0,r0,r1
00016e 441a ADD r2,r2,r3 ;222
;;;235 tmp11 = tmp1 + tmp2;
000170 1911 ADDS r1,r2,r4
;;;236 tmp12 = tmp1 - tmp2;
;;;237
;;;238 dataptr[DCTSIZE*0] = (DCTELEM) DESCALE(tmp10 + tmp11, PASS1_BITS);
000172 186b ADDS r3,r5,r1
000174 1c9b ADDS r3,r3,#2
;;;239 dataptr[DCTSIZE*4] = (DCTELEM) DESCALE(tmp10 - tmp11, PASS1_BITS);
000176 1a69 SUBS r1,r5,r1
000178 109b ASRS r3,r3,#2 ;238
00017a 1c89 ADDS r1,r1,#2
;;;240
;;;241 z1 = MULTIPLY(tmp12 + tmp13, FIX_0_541196100);
00017c f8ce3000 STR r3,[lr,#0]
000180 1b12 SUBS r2,r2,r4 ;236
000182 1089 ASRS r1,r1,#2 ;239
000184 f8ce1080 STR r1,[lr,#0x80]
000188 1811 ADDS r1,r2,r0
00018a f2411351 MOV r3,#0x1151
00018e 4359 MULS r1,r3,r1
;;;242 dataptr[DCTSIZE*2] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp13, FIX_0_765366865),
000190 f640433f MOV r3,#0xc3f
000194 4358 MULS r0,r3,r0
000196 eb010040 ADD r0,r1,r0,LSL #1
00019a f5004080 ADD r0,r0,#0x4000
00019e 13c0 ASRS r0,r0,#15
;;;243 CONST_BITS+PASS1_BITS);
;;;244 dataptr[DCTSIZE*6] = (DCTELEM) DESCALE(z1 + MULTIPLY(tmp12, - FIX_1_847759065),
0001a0 f8ce0040 STR r0,[lr,#0x40]
0001a4 482f LDR r0,|L1.612|
0001a6 eba60c07 SUB r12,r6,r7 ;227
0001aa fb001002 MLA r0,r0,r2,r1
0001ae f5004080 ADD r0,r0,#0x4000
0001b2 13c0 ASRS r0,r0,#15
;;;245 CONST_BITS+PASS1_BITS);
;;;246
;;;247 /* Odd part per figure 8 --- note paper omits factor of sqrt(2).
;;;248 * cK represents cos(K*pi/16).
;;;249 * i0..i3 in the paper are tmp4..tmp7 here.
;;;250 */
;;;251
;;;252 z1 = tmp4 + tmp7;
;;;253 z2 = tmp5 + tmp6;
0001b4 f8ce00c0 STR r0,[lr,#0xc0]
;;;254 z3 = tmp4 + tmp6;
0001b8 eb0c0009 ADD r0,r12,r9
;;;255 z4 = tmp5 + tmp7;
0001bc eb08010a ADD r1,r8,r10
;;;256 z5 = MULTIPLY(z3 + z4, FIX_1_175875602); /* sqrt(2) * c3 */
0001c0 1842 ADDS r2,r0,r1
0001c2 f24254a1 MOV r4,#0x25a1
0001c6 4362 MULS r2,r4,r2
0001c8 eb0c030a ADD r3,r12,r10 ;252
;;;257
;;;258 tmp4 = MULTIPLY(tmp4, FIX_0_298631336); /* sqrt(2) * (-c1+c3+c5-c7) */
0001cc f640148e MOV r4,#0x98e
0001d0 fb0cfc04 MUL r12,r12,r4
;;;259 tmp5 = MULTIPLY(tmp5, FIX_2_053119869); /* sqrt(2) * ( c1+c3-c5+c7) */
0001d4 f24414b3 MOV r4,#0x41b3
0001d8 fb08f604 MUL r6,r8,r4
0001dc eb080709 ADD r7,r8,r9 ;253
;;;260 tmp6 = MULTIPLY(tmp6, FIX_3_072711026); /* sqrt(2) * ( c1+c3+c5-c7) */
0001e0 f2462554 MOV r5,#0x6254
;;;261 tmp7 = MULTIPLY(tmp7, FIX_1_501321110); /* sqrt(2) * ( c1+c3-c5-c7) */
0001e4 9700 STR r7,[sp,#0]
;;;262 z1 = MULTIPLY(z1, - FIX_0_899976223); /* sqrt(2) * (c7-c3) */
0001e6 4c20 LDR r4,|L1.616|
0001e8 fb09f805 MUL r8,r9,r5 ;260
0001ec f243070b MOV r7,#0x300b ;261
0001f0 fb0af507 MUL r5,r10,r7 ;261
0001f4 4363 MULS r3,r4,r3
;;;263 z2 = MULTIPLY(z2, - FIX_2_562915447); /* sqrt(2) * (-c1-c3) */
0001f6 4c1d LDR r4,|L1.620|
0001f8 9f00 LDR r7,[sp,#0]
0001fa 4367 MULS r7,r4,r7
;;;264 z3 = MULTIPLY(z3, - FIX_1_961570560); /* sqrt(2) * (-c3-c5) */
0001fc eba02400 SUB r4,r0,r0,LSL #8
000200 ebc41484 RSB r4,r4,r4,LSL #6
000204 eba40080 SUB r0,r4,r0,LSL #2
;;;265 z4 = MULTIPLY(z4, - FIX_0_390180644); /* sqrt(2) * (c5-c3) */
000208 4c19 LDR r4,|L1.624|
;;;266
;;;267 z3 += z5;
00020a 4410 ADD r0,r0,r2
;;;268 z4 += z5;
00020c fb012104 MLA r1,r1,r4,r2
;;;269
;;;270 dataptr[DCTSIZE*7] = (DCTELEM) DESCALE(tmp4 + z1 + z3,
000210 eb0c0203 ADD r2,r12,r3
000214 4402 ADD r2,r2,r0
000216 f5024280 ADD r2,r2,#0x4000
00021a ea4f32e2 ASR r2,r2,#15
;;;271 CONST_BITS+PASS1_BITS);
;;;272 dataptr[DCTSIZE*5] = (DCTELEM) DESCALE(tmp5 + z2 + z4,
00021e f8ce20e0 STR r2,[lr,#0xe0]
000222 19f2 ADDS r2,r6,r7
000224 440a ADD r2,r2,r1
000226 f5024280 ADD r2,r2,#0x4000
00022a ea4f32e2 ASR r2,r2,#15
;;;273 CONST_BITS+PASS1_BITS);
;;;274 dataptr[DCTSIZE*3] = (DCTELEM) DESCALE(tmp6 + z2 + z3,
00022e f8ce20a0 STR r2,[lr,#0xa0]
000232 eb080207 ADD r2,r8,r7
000236 4410 ADD r0,r0,r2
000238 f5004080 ADD r0,r0,#0x4000
00023c ea4f30e0 ASR r0,r0,#15
;;;275 CONST_BITS+PASS1_BITS);
;;;276 dataptr[DCTSIZE*1] = (DCTELEM) DESCALE(tmp7 + z1 + z4,
000240 f8ce0060 STR r0,[lr,#0x60]
000244 18e8 ADDS r0,r5,r3
000246 4408 ADD r0,r0,r1
000248 f5004080 ADD r0,r0,#0x4000
00024c ea4f30e0 ASR r0,r0,#15
;;;277 CONST_BITS+PASS1_BITS);
;;;278
;;;279 dataptr++; /* advance pointer to next column */
000250 f8ce0020 STR r0,[lr,#0x20]
000254 f10e0e04 ADD lr,lr,#4
000258 f1bb0b01 SUBS r11,r11,#1 ;219
00025c f57faf6c BPL |L1.312|
;;;280 }
;;;281 }
000260 e8bd8ffc POP {r2-r11,pc}
;;;282
ENDP
|L1.612|
DCD 0xffffc4df
|L1.616|
DCD 0xffffe333
|L1.620|
DCD 0xffffadfd
|L1.624|
DCD 0xfffff384
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -