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

📄 init_tss.asm

📁 这是视频压缩方面三步搜索算法的汇编和c语言的混合编写
💻 ASM
字号:
/*******************************************************************************
Copyright(c) 2000 - 2002 Analog Devices. All Rights Reserved.
Developed by Joint Development Software Application Team, IPDC, Bangalore, India
for Blackfin DSPs  ( Micro Signal Architecture 1.0 specification).

By using this module you agree to the terms of the Analog Devices License
Agreement for DSP Software. 
********************************************************************************
Module Name     : init_tss.asm
Label Name      : __init_tss
Version         :   1.0
Change History  :

                Version     Date          Author            Comments
                1.0         04/12/2001    Vijay             Original 

Description     : This routine initializes the tss_struct structure, which is
                  used by the TSS motion vector estimation code. The 
                  initialization is done as follows:

                  tss_struct tss;
                  tss.hmv[9] = {0, -SS, 0, SS, -SS, SS, -SS, 0, SS};
                  tss.vmv[9] = {0, -SS, -SS, -SS, 0,0, SS, SS, SS};
                  tss.modifier[0] = 0;
                  for(i=1;i<9;i++)
                  {
                    tss.modifier[i]   = tss.vmv[i]*WINWIDTH+tss.hmv[i];
                    tss.modifier[i+8] = (tss.vmv[i]/2)*WINWIDTH+(tss.hmv[i]/2); 
                    tss.modifier[i+16] = (tss.vmv[i]/4)*WINWIDTH+(tss.hmv[i]/4);
                  }
                  where SS is the initial step size
                  WINWIDTH is the width of the reference window
                  The / operator represents an integer division

Prototype       : void _init_tss(tss_struct *ptr_tss, int WINWIDTH, int SS); 

Registers used  : R0-R3, I0-I3, M0, M1, L0-L3, P0, P1.

Performance     :
                Code size   : 192 Bytes.
                Cycle count : 154 Cycles.
*******************************************************************************/
.section L1_code;
.align 8;
.global __init_tss;
.extern _vhpel;
.extern _hhpel;

__init_tss:

    L0 = 0;
    L1 = 0;
    L2 = 0;
    L3 = 0;
    I2 = R0;
    I3 = R0;
    P1 = R0;
    I0.L = _vhpel;
    I0.H = _vhpel;
    I1.L = _hhpel;
    I1.H = _hhpel;
    M0 = 18;
    M1 = 16;
    P0 = 9;
    P1 += 36;

    LSETUP(ST_MOD_STEP1, END_MOD_STEP1) LC0 = P0;
    I3 += M0 || R0.L = W[I0++]; 
ST_MOD_STEP1:
        R0.L = R2.L*R0.L (IS) || R3.L = W[I1++];    
        R3.L = R2.L*R3.L (IS) || W[I2++] = R0.L;
                            // Store vmv[i] 
        R0.L = R1.L*R0.L (IS) || W[I3++] = R3.L;
                            // Store hmv[i] 
        R3.L = R0.L + R3.L (S) || R0.L = W[I0++];   
END_MOD_STEP1:
        W[P1++] = R3;       // Store modifier[i]
    P0 = 8;
    R2 = R2 >> 1 || I0 -= M0;
    I1 -= M1 || R0.L = W[I0++];

    LSETUP(ST_MOD_STEP2, END_MOD_STEP2) LC0 = P0;               
ST_MOD_STEP2:
        R0.L = R2.L*R0.L (IS) || R3.L = W[I1++];    
        R3.L = R2.L*R3.L (IS);
        R0.L = R1.L*R0.L (IS);
        R3.L = R0.L + R3.L (S) || R0.L = W[I0++];
END_MOD_STEP2:
        W[P1++] = R3;       // Store modifier[i]
    R2 = R2 >> 1 || I0 -= M0;
    I1 -= M1 || R0.L = W[I0++];

    LSETUP(ST_MOD_STEP3, END_MOD_STEP3) LC0 = P0;
ST_MOD_STEP3:
        R0.L = R2.L*R0.L (IS) || R3.L = W[I1++];    
        R3.L = R2.L*R3.L (IS);
        R0.L = R1.L*R0.L (IS);
        R3.L = R0.L + R3.L (S) || R0.L = W[I0++];   
END_MOD_STEP3:
        W[P1++] = R3;       // Store modifier[i]
    RTS;
__init_tss.end:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -