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 + -
显示快捷键?