📄 aan.s
字号:
;//************************************
;//File Name: idct.s
;//Author: Anna
;//Date:
;//************************************
C2 EQU 118
C4 EQU 91
C6 EQU 49
Q EQU 69
R EQU 167
AREA IDCT,CODE,READONLY
EXPORT AAN_INT
CODE32
AAN_INT
STMFD SP!,{R4-R12,LR}
;//vertical idct
LDR R12,=dct_dft_matrix
MOV R1,#8
LOOP1
LDRSH R2,[R0] ;//dct_buf[0][j]
LDR R11,[R12]
B VER_IDCT
RE_VER
LDRSH R2,[R0,#2]!
LDR R11,[R12,#4]!
SUBS R1,R1,#1
BNE LOOP1
;//horizontal idct
MOV R1,#8
MOV R3,#16
SUB R0,R0,R3
LOOP2
LDRSH R2,[R0] ;//dct_buf[j][0]
B HOR_IDCT
RE_HOR
LDRSH R2,[R0,#16]!
SUBS R1,R1,#1
BNE LOOP2
LDMFD SP!,{R4-R12,LR}
MOV PC,LR ;//return
VER_IDCT
MUL R2,R11,R2
MOV R2,R2,ASR#12
LDRSH R3,[R0,#16] ;//dct_buf[1][j]
LDR R11,[R12,#32]
MUL R3,R11,R3
MOV R3,R3,ASR#12
LDRSH R4,[R0,#32] ;//dct_buf[2][j]
LDR R11,[R12,#64]
MUL R4,R11,R4
MOV R4,R4,ASR#12
LDRSH R5,[R0,#48] ;//dct_buf[3][j]
LDR R11,[R12,#96]
MUL R5,R11,R5
MOV R5,R5,ASR#12
LDRSH R6,[R0,#64] ;//dct_buf[4][j]
LDR R11,[R12,#128]
MUL R6,R11,R6
MOV R6,R6,ASR#12
LDRSH R7,[R0,#80] ;//dct_buf[5][j]
LDR R11,[R12,#160]
MUL R7,R11,R7
MOV R7,R7,ASR#12
LDRSH R8,[R0,#96] ;//dct_buf[6][j]
LDR R11,[R12,#192]
MUL R8,R11,R8
MOV R8,R8,ASR#12
LDRSH R9,[R0,#112] ;//dct_buf[7][j]
LDR R11,[R12,#224]
MUL R9,R11,R9
MOV R9,R9,ASR#12
;//step 1
MOV R2,R2,ASR#1 ;//a0
;// MOV R6,R6,LSL#1 ;//a1
SUB R4,R4,R8
ADD R8,R4,R8,LSL#1
;//MOV R4,R4,LSL#1 ;//a2
;// MOV R8,R8,LSL#1 ;//a3
SUB R7,R7,R5
ADD R5,R7,R5,LSL#1
;//MOV R7,R7,LSL#1 ;//a4
;// MOV R5,R5,LSL#1 ;//temp2
ADD R3,R3,R9
SUB R9,R3,R9,LSL#1
;// MOV R3,R3,LSL#1 ;//temp1
;// MOV R9,R9,LSL#1 ;//a6
SUB R3,R3,R5 ;//a5
ADD R5,R3,R5,LSL#1 ;//a7
LDR R10,=C6
ADD R11,R7,R9
MUL R10,R11,R10
MOV R10,R10,ASR#6 ;//tmp4
;//step2
LDR R11,=C4
MUL R4,R11,R4
MOV R4,R4,ASR#6 ;//a2
MUL R3,R11,R3
MOV R3,R3,ASR#6 ;//a5
LDR R11,=Q
MUL R7,R11,R7
;//MOV R7,R7,ASR#6
ADD R7,R10,R7,ASR#6
RSB R7,R7,#0
;//SUB R7,R7,R10 ;//a4
LDR R11,=R
MUL R9,R11,R9
;// MOV R9,R9,ASR#6
;// SUB R9,R9,R10 ;//a6
RSB R9,R10,R9,ASR#6
;//step3
SUB R10,R9,R5 ;//temp3
MOV R9,R8 ;//a6
SUB R4,R4,R8 ;//a2
ADD R8,R2,R6 ;//a3
SUB R6,R2,R6 ;//a1
SUB R2,R10,R3 ;//a0
MOV R3,R7 ;//a5
MOV R7,R10 ;//a4
;//step4
MOV R10,R2 ;//temp1
MOV R11,R7 ;//temp2
MOV R2,R5 ;//a0
ADD R7,R8,R9 ;//a4
SUB R9,R8,R9 ;//a6
SUB R5,R3,R10 ;//a7
ADD R8,R6,R4 ;//a3
SUB R3,R6,R4 ;//a5
MOV R4,R11 ;//a2
MOV R6,R10 ;//a1
;//step5
ADD R10,R7,R2
STRH R10,[R0] ;//dct_buf[0][j]
ADD R10,R8,R4
STRH R10,[R0,#16] ;//dct_buf[1][j]
SUB R10,R3,R6
STRH R10,[R0,#32] ;//dct_buf[2][j]
SUB R10,R9,R5
STRH R10,[R0,#48] ;//dct_buf[3][j]
ADD R10,R9,R5
STRH R10,[R0,#64] ;//dct_buf[4][j]
ADD R10,R3,R6
STRH R10,[R0,#80] ;//dct_buf[5][j]
SUB R10,R8,R4
STRH R10,[R0,#96] ;//dct_buf[6][j]
SUB R10,R7,R2
STRH R10,[R0,#112] ;//dct_buf[7][j]
B RE_VER
HOR_IDCT
LDRSH R3,[R0,#2] ;//dct_buf[j][1]
LDRSH R4,[R0,#4] ;//dct_buf[j][2]
LDRSH R5,[R0,#6] ;//dct_buf[j][3]
LDRSH R6,[R0,#8] ;//dct_buf[j][4]
LDRSH R7,[R0,#10] ;//dct_buf[j][5]
LDRSH R8,[R0,#12] ;//dct_buf[j][6]
LDRSH R9,[R0,#14] ;//dct_buf[j][7]
;//step 1
MOV R2,R2,ASR#1 ;//a0
;// MOV R6,R6,LSL#1 ;//a1
SUB R4,R4,R8
ADD R8,R4,R8,LSL#1
;// MOV R4,R4,LSL#1 ;//a2
;// MOV R8,R8,LSL#1 ;//a3
SUB R7,R7,R5
ADD R5,R7,R5,LSL#1
;// MOV R7,R7,LSL#1 ;//a4
;// MOV R5,R5,LSL#1 ;//temp2
ADD R3,R3,R9
SUB R9,R3,R9,LSL#1
;// MOV R3,R3,LSL#1 ;//temp1
;// MOV R9,R9,LSL#1 ;//a6
SUB R3,R3,R5 ;//a5
ADD R5,R3,R5,LSL#1 ;//a7
LDR R10,=C6
ADD R11,R7,R9
MUL R10,R11,R10 ;//tmp4
MOV R10,R10,ASR#6
;//step2
LDR R11,=C4
MUL R4,R11,R4
MOV R4,R4,ASR#6 ;//a2
MUL R3,R11,R3
MOV R3,R3,ASR#6 ;//a5
LDR R11,=Q
MUL R7,R11,R7
;//MOV R7,R7,ASR#6
ADD R7,R10,R7,ASR#6
RSB R7,R7,#0
;//SUB R7,R7,R10 ;//a4
LDR R11,=R
MUL R9,R11,R9
;// MOV R9,R9,ASR#6
;// SUB R9,R9,R10 ;//a6
RSB R9,R10,R9,ASR#6
;//step3
SUB R10,R9,R5 ;//temp3
MOV R9,R8 ;//a6
SUB R4,R4,R8 ;//a2
ADD R8,R2,R6 ;//a3
SUB R6,R2,R6 ;//a1
SUB R2,R10,R3 ;//a0
MOV R3,R7 ;//a5
MOV R7,R10 ;//a4
;//step4
MOV R10,R2 ;//temp1
MOV R11,R7 ;//temp2
MOV R2,R5 ;//a0
ADD R7,R8,R9 ;//a4
SUB R9,R8,R9 ;//a6
SUB R5,R3,R10 ;//a7
ADD R8,R6,R4 ;//a3
SUB R3,R6,R4 ;//a5
MOV R4,R11 ;//a2
MOV R6,R10 ;//a1
;//step5
ADD R10,R7,R2
ADD R10,R10,#32
MOV R10,R10,LSR#6
STRH R10,[R0] ;//dct_buf[j][0]
LDRSH R10,[R0]
ADD R10,R8,R4
ADD R10,R10,#32
MOV R10,R10,LSR#6
STRH R10,[R0,#2] ;//dct_buf[j][1]
SUB R10,R3,R6
ADD R10,R10,#32
MOV R10,R10,LSR#6
STRH R10,[R0,#4] ;//dct_buf[j][2]
SUB R10,R9,R5
ADD R10,R10,#32
MOV R10,R10,LSR#6
STRH R10,[R0,#6] ;//dct_buf[j][3]
ADD R10,R9,R5
ADD R10,R10,#32
MOV R10,R10,LSR#6
STRH R10,[R0,#8] ;//dct_buf[j][4]
ADD R10,R3,R6
ADD R10,R10,#32
MOV R10,R10,LSR#6
STRH R10,[R0,#10] ;//dct_buf[j][5]
SUB R10,R8,R4
ADD R10,R10,#32
MOV R10,R10,LSR#6
STRH R10,[R0,#12] ;//dct_buf[j][6]
SUB R10,R7,R2
ADD R10,R10,#32
MOV R10,R10,LSR#6
STRH R10,[R0,#14] ;//dct_buf[j][7]
B RE_HOR
dct_dft_matrix DCD 131044,90862,85749,77106,65522,51404,35476,18100
DCD 90862,63001,59487,53463,45431,35642,24589,12550
DCD 85794,59487,56169,50481,42897,33654,23226,11850
DCD 77106,53463,50481,45369,38553,30246,20874,10650
DCD 65522,45431,42897,38553,32761,25702,17738,9050
DCD 51404,35642,33654,30246,25702,20164,13916,7100
DCD 35476,24598,23226,20874,17738,13916,9604,4900
DCD 18100,12550,11850,10650,9050,7100,4900,2500
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -