⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fdct_8x8.asm

📁 davinci技术 源码 视频监控汇编源码
💻 ASM
📖 第 1 页 / 共 3 页
字号:
*   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 + -