📄 fdct_8x8.asm
字号:
* NOTES *
* This function is fully interruptible. *
* This function is a LITTLE ENDIAN implementation. *
* *
* CYCLES *
* num_dcts * 52 + 56 *
* *
* For num_dcts = 6, cycles = 368 *
* *
* CODESIZE *
* 608 bytes *
* *
* ------------------------------------------------------------------------- *
* Copyright (c) 2005 Texas Instruments, Incorporated. *
* All Rights Reserved. *
* ========================================================================= *
.text .global _fdct_8x8_fdct_8x8:
.asg A4, A_dct_data ; short dct_data[],
.asg B4, B_count ; unsigned num_dcts
.asg 0x7D8A, cst_C1
.asg 0x7642, cst_C2
.asg 0x6A6E, cst_C3
.asg 0x5A82, cst_C4
.asg 0x471D, cst_C5
.asg 0x30FC, cst_C6
.asg 0x18F9, cst_C7
.asg 0x8276, cst_nC1
.asg 0x89BE, cst_nC2
.asg 0x9592, cst_nC3
.asg 0xA57E, cst_nC4
.asg 0xB8E3, cst_nC5
.asg 0xCF04, cst_nC6
.asg 0xE707, cst_nC7
.asg 0x7D8A>>1, cst_D1
.asg 0x7642>>1, cst_D2
.asg 0x6A6E>>1, cst_D3
.asg 0x5A82>>1, cst_D4
.asg 0x471D>>1, cst_D5
.asg 0x30FC>>1, cst_D6
.asg 0x18F9>>1, cst_D7
* ===================== SYMBOLIC REGISTER ASSIGNMENTS ===================== *
.asg A18, A_i_ptr
.asg B9, B_o_ptr
.asg B5, B_fix
.asg A19, A_fix
.asg B7, B_C4nC4
.asg A20, A_C4nC4
.asg A21, A_C6C2
.asg B8, B_C7C1
.asg B6, B_nC3nC5
.asg A31, A_fix_
.asg B27, B_fix_
.asg A16, A_f0f0
.asg B23, B_f1f1
.asg A27, A_f2f2
.asg A17, A_f4f4
.asg B29, B_f5f5
.asg A9, A_f6f6
.asg B26, B_f7f7
.asg B28, B_f3f3
.asg A25, A_f3f3
.asg B28, B_f2f2
.asg A23, A_g0g0
.asg A22, A_h2h2
.asg B21, B_g1g1
.asg B20, B_h3h3
.asg B29, B_h1h1
.asg B28, B_g3g3
.asg A29, A_h0h0
.asg A28, A_g2g2
.asg A23, A_p0p0
.asg A22, A_r0r0
.asg B19, B_p1p1
.asg B18, B_r1r1
.asg B23, B_g3h3
.asg B22, B_g3h3x
.asg A25, A_s1q1
.asg A24, A_s1q1x
.asg B16, B_s0q0
.asg A9, A_s0q0x
.asg B17, B_S1Q1
.asg B16, B_nS0nQ0
.asg A27, A_S1Q1x
.asg A26, A_nS0nQ0x
.asg B25, B_p1p0
.asg B24, B_p1p0x
.asg A27, A_r0r1
.asg A26, A_r0r1x
.asg A24, A_P0P1
.asg A30, A_P0P1x
.asg A27, A_R0R1
.asg A28, A_R0R1x
.asg B26, B_F7F1
.asg B30, B_F7F1x
.asg B2, B_F3F5
.asg B31, B_F3F5x
.asg B27, B_F7F7
.asg B26, B_F1F1
.asg B31, B_F3F3
.asg B30, B_F5F5
.asg A31, A_F0F0
.asg A30, A_F4F4
.asg A29, A_F6F6
.asg A28, A_F2F2
.asg A2, A_f
* ========================================================================= *
SHL .S2 B_count, 2, B_count
|| ADDAW .D1 A_dct_data, 12, A_i_ptr
|| MVKL .S1 cst_C2, A_C6C2
SUB B_count, 1, B_count
|| MV A_i_ptr, B_o_ptr
|| MVKL .S2 0x0101011D, B_fix
|| MVKLH .S1 cst_C6, A_C6C2
SPLOOPD 8
|| ZERO A_f
|| MVC B_count, ILC
; stage 0
SPMASK
|| LDW .D1T2 *-A_i_ptr[8], B_f1f1 ;[ 1,1]
||^ MVKH .S2 0x0101011D, B_fix
SPMASK
|| LDW .D1T1 *-A_i_ptr[4], A_f2f2 ;[ 2,1]
||^ MV .L1X B_fix, A_fix
||^ MVKL .S1 cst_nC4, A_C4nC4
||^ MVKL .S2 cst_nC5, B_nC3nC5
SPMASK
|| LDW .D1T1 *+A_i_ptr[12], A_f6f6 ;[ 3,1]
||^ MVKLH .S1 cst_C4, A_C4nC4
||^ MVKLH .S2 cst_nC3, B_nC3nC5
SPMASK
|| LDW .D1T1 *-A_i_ptr[12], A_f0f0 ;[ 4,1]
||^ MV .L2X A_C4nC4, B_C4nC4
||^ MVKL .S2 cst_C1, B_C7C1
SPMASK
|| LDW .D1T2 *+A_i_ptr[8], B_f5f5 ;[ 5,1]
|| ROTL .M1 A_fix, 8, A_fix ;[ 5,1]
||^ MVKLH .S2 cst_C7, B_C7C1
LDW .D1T2 *+A_i_ptr[16], B_f7f7 ;[ 6,1]
|| SHR .S1 A_fix, 24, A_fix_ ;[ 6,1]
MV .S2X A_f2f2, B_f2f2 ;[ 7,1]
|| LDW .D1T1 *+A_i_ptr[4], A_f4f4 ;[ 7,1]
LDW .D1T2 *A_i_ptr++[A_fix_], B_f3f3 ;[ 8,1]
; stage 1
NOP 1
ADDSUB2 .L2 B_f2f2, B_f5f5, B_h1h1:B_g3g3 ;[10,1]
ADDSUB2 .L2X B_f1f1, A_f6f6, B_g1g1:B_h3h3 ;[11,1]
DPACK2 .L2 B_g3g3, B_h3h3, B_g3h3:B_g3h3x ;[12,1]
CMPYR1 .M2 B_C4nC4, B_g3h3, B_s0q0 ;[13,1]
ADDSUB2 .L1X A_f0f0, B_f7f7, A_g0g0:A_h2h2 ;[14,1]
MV .S1X B_f3f3, A_f3f3 ;[15,1]
; stage 2
CMPYR1 .M1X A_C4nC4, B_g3h3x, A_s0q0x ;[16,1]
ADDSUB2 .L2 B_g1g1, B_h1h1, B_p1p1:B_r1r1 ;[17,1]
|| ADDSUB2 .L1 A_f3f3, A_f4f4, A_h0h0:A_g2g2 ;[17,1]
DPACK2 .L1 A_h2h2, A_g2g2, A_s1q1:A_s1q1x ;[18,1]
ADDSUB2 .L1 A_g0g0, A_h0h0, A_p0p0:A_r0r0 ;[19,1]
NOP 1
DPACK2 .L1X A_r0r0, B_r1r1, A_r0r1:A_r0r1x ;[21,1]
|| ADDSUB2 .L2X B_s0q0, A_s1q1, B_S1Q1:B_nS0nQ0 ;[21,1]
DPACK2 .L2X B_p1p1, A_p0p0, B_p1p0:B_p1p0x ;[22,1]
|| CMPYR1 .M1 A_r0r1, A_C6C2, A_R0R1 ;[22,1]
ADDSUB2 .L1 A_s0q0x, A_s1q1x, A_S1Q1x:A_nS0nQ0x;[23,1]
|| CMPYR1 .M2 B_nC3nC5, B_nS0nQ0, B_F3F5 ;[23,1]
|| CMPYR1 .M1 A_r0r1x, A_C6C2, A_R0R1x ;[23,1]
; stage 3
NOP 1
CMPYR1 .M2X B_C7C1, A_S1Q1x, B_F7F1x ;[25,1]
CMPYR1 .M1X A_C4nC4, B_p1p0x, A_P0P1x ;[26,1]
CMPYR1 .M2 B_C7C1, B_S1Q1, B_F7F1 ;[27,1]
DPACK2 .L1 A_R0R1, A_R0R1x, A_F6F6:A_F2F2 ;[28,1]
|| CMPYR1 .M2X B_nC3nC5, A_nS0nQ0x, B_F3F5x ;[28,1]
|| CMPYR1 .M1X A_C4nC4, B_p1p0, A_P0P1 ;[28,1]
[!A_f] SWAP2 .S1 A_F6F6, A_F6F6 ;[29,1]
NOP 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -