www.pudn.com > scaling.rar > pix_expand_h.h


/* ======================================================================== */ 
/*  TEXAS INSTRUMENTS, INC.                                                 */ 
/*                                                                          */ 
/*  NAME                                                                    */ 
/*      pix_expand                                                          */ 
/*S                                                                        S*/ 
/*S REVISION HISTORY                                                       S*/ 
/*S     15-Oct-2000 Rewrote from scratch . . . . . . . . .  J. Zbiciak     S*/ 
/*                                                                          */ 
/*  USAGE                                                                   */ 
/*      This routine is C-callable and can be called as:                    */ 
/*                                                                          */ 
/*      void pix_expand_asm                                                 */ 
/*      (                                                                   */ 
/*          int n,                                    // # of elements //   */ 
/*          const unsigned char *restrict in_data,    // Input data    //   */ 
/*          short               *restrict out_data    // Output data   //   */ 
/*      )                                                                   */ 
/*                                                                          */ 
/*                                                                          */ 
/*  DESCRIPTION                                                             */ 
/*      The code takes an array of bytes and promotes them to half-words    */ 
/*      by zero-extension.                                                  */ 
/*                                                                          */ 
/*      This is the C equivalent of the assembly code, without              */ 
/*      restrictions.  The assembly code has restrictions, as noted below.  */ 
/*                                                                          */ 
/*      void pix_expand                                                     */ 
/*      (                                                                   */ 
/*          int n,                                                          */ 
/*          const unsigned char *restrict in_data,                          */ 
/*          short               *restrict out_data                          */ 
/*      )                                                                   */ 
/*      {                                                                   */ 
/*          int i;                                                          */ 
/*                                                                          */ 
/*          for (i = 0; i < n; i++)                                         */ 
/*              out_data[i] =  in_data[i];                                  */ 
/*      }                                                                   */ 
/*                                                                          */ 
/*  ASSUMPTIONS                                                             */ 
/*      Input and output arrays must be double-word (8-byte) aligned.       */ 
/*                                                                          */ 
/*      The input must be at least 16 elements long and contain a           */ 
/*      multiple of 16 elements.                                            */ 
/*                                                                          */ 
/*  NOTE                                                                    */ 
/*      Interrupts are masked during the entire duration of this            */ 
/*      function, as the entire function occurs within branch delay slots.  */ 
/*                                                                          */ 
/*  MEMORY NOTE                                                             */ 
/*      No bank conflicts occur.  This is a LITTLE ENDIAN implementation.   */ 
/*                                                                          */ 
/*  TECHNIQUES                                                              */ 
/*      The loop is unrolled 16 times, loading bytes with LDDW.  It uses    */ 
/*      UNPKHU4 and UNPKLU4 to unpack the data and store the results with   */ 
/*      STDW.                                                               */ 
/*                                                                          */ 
/*      To shave a few extra cycles from the function, the return branch    */ 
/*      is issued from within the kernel.                                   */ 
/*                                                                          */ 
/*                                                                          */ 
/*  CYCLES                                                                  */ 
/*      cycles = 3 * (n / 16) + 15.                                         */ 
/*      For n = 1072, cycles = 216.                                         */ 
/*                                                                          */ 
/*  CODESIZE                                                                */ 
/*      100 bytes.                                                          */ 
/*                                                                          */ 
/* ------------------------------------------------------------------------ */ 
/*            Copyright (c) 2000 Texas Instruments, Incorporated.           */ 
/*                           All Rights Reserved.                           */ 
/* ======================================================================== */ 
#ifndef _PIX_EXPAND_H_H 
#define _PIX_EXPAND_H_H 1 
 
void pix_expand_asm 
(    
    int n, 
    const unsigned char *restrict in_data, 
    short               *restrict out_data 
); 
 
#endif 
/* ======================================================================== */ 
/*  End of file:  pix_expand_h.h                                            */ 
/* ------------------------------------------------------------------------ */ 
/*            Copyright (c) 2000 Texas Instruments, Incorporated.           */ 
/*                           All Rights Reserved.                           */ 
/* ======================================================================== */