/********************************************************************************
 * Marvell GPL License Option
 *
 * If you received this File from Marvell, you may opt to use, redistribute and/or
 * modify this File in accordance with the terms and conditions of the General
 * Public License Version 2, June 1991 (the "GPL License"), a copy of which is
 * available along with the File in the license.txt file or by writing to the Free
 * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
 * on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
 *
 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
 * DISCLAIMED.  The GPL License provides additional details about this warranty
 * disclaimer.
 ******************************************************************************/

//////
/// don't edit! auto-generated by docc: vcache_spec.h
////////////////////////////////////////////////////////////
#ifndef vcache_spec_h
#define vcache_spec_h (){}


#include "ctypes.h"

#pragma pack(1)
#ifdef __cplusplus
  extern "C" {
#endif

#ifndef _DOCC_H_BITOPS_
#define _DOCC_H_BITOPS_ (){}

    #define _bSETMASK_(b)                                      ((b)<32 ? (1<<((b)&31)) : 0)
    #define _NSETMASK_(msb,lsb)                                (_bSETMASK_((msb)+1)-_bSETMASK_(lsb))
    #define _bCLRMASK_(b)                                      (~_bSETMASK_(b))
    #define _NCLRMASK_(msb,lsb)                                (~_NSETMASK_(msb,lsb))
    #define _BFGET_(r,msb,lsb)                                 (_NSETMASK_((msb)-(lsb),0)&((r)>>(lsb)))
    #define _BFSET_(r,msb,lsb,v)                               do{ (r)&=_NCLRMASK_(msb,lsb); (r)|=_NSETMASK_(msb,lsb)&((v)<<(lsb)); }while(0)

#endif



//////
/// 
/// $INTERFACE vcMsgMV                 biu              (4,4)
///     ###
///     * 8-bit vcMsg return data when ID = F0A64_vcMsgMv
///     * [0:7]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 3  mvX                       
///                                    ###
///                                    * Index of the 4x4 block @ upper-left corner of partition
///                                    ###
///               %unsigned 2  mvYL                      
///                                    ###
///                                    * Block / macroblock partition info
///                                    ###
///               %unsigned 3  mvYC                      
///                                    ###
///                                    * 0: partition is at macroblock level
///                                    * 1: partition is at 8x8 block level
///                                    ###
///               %unsigned 3  mv1X                      
///               %unsigned 2  mv1YL                     
///               %unsigned 3  mv1YC                     
///               %unsigned 3  mv2X                      
///               %unsigned 2  mv2YL                     
///               %unsigned 3  mv2YC                     
///               %unsigned 3  mv3X                      
///               %unsigned 2  mv3YL                     
///               %unsigned 3  mv3YC                     
///                                    ###
///                                    * End vcMsgMV
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      32b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_vcMsgMV
#define h_vcMsgMV (){}

    #define     BA_vcMsgMV_mvX                                 0x0000
    #define     B16vcMsgMV_mvX                                 0x0000
    #define   LSb32vcMsgMV_mvX                                    0
    #define   LSb16vcMsgMV_mvX                                    0
    #define       bvcMsgMV_mvX                                 3
    #define   MSK32vcMsgMV_mvX                                    0x00000007

    #define     BA_vcMsgMV_mvYL                                0x0000
    #define     B16vcMsgMV_mvYL                                0x0000
    #define   LSb32vcMsgMV_mvYL                                   3
    #define   LSb16vcMsgMV_mvYL                                   3
    #define       bvcMsgMV_mvYL                                2
    #define   MSK32vcMsgMV_mvYL                                   0x00000018

    #define     BA_vcMsgMV_mvYC                                0x0000
    #define     B16vcMsgMV_mvYC                                0x0000
    #define   LSb32vcMsgMV_mvYC                                   5
    #define   LSb16vcMsgMV_mvYC                                   5
    #define       bvcMsgMV_mvYC                                3
    #define   MSK32vcMsgMV_mvYC                                   0x000000E0

    #define     BA_vcMsgMV_mv1X                                0x0001
    #define     B16vcMsgMV_mv1X                                0x0000
    #define   LSb32vcMsgMV_mv1X                                   8
    #define   LSb16vcMsgMV_mv1X                                   8
    #define       bvcMsgMV_mv1X                                3
    #define   MSK32vcMsgMV_mv1X                                   0x00000700

    #define     BA_vcMsgMV_mv1YL                               0x0001
    #define     B16vcMsgMV_mv1YL                               0x0000
    #define   LSb32vcMsgMV_mv1YL                                  11
    #define   LSb16vcMsgMV_mv1YL                                  11
    #define       bvcMsgMV_mv1YL                               2
    #define   MSK32vcMsgMV_mv1YL                                  0x00001800

    #define     BA_vcMsgMV_mv1YC                               0x0001
    #define     B16vcMsgMV_mv1YC                               0x0000
    #define   LSb32vcMsgMV_mv1YC                                  13
    #define   LSb16vcMsgMV_mv1YC                                  13
    #define       bvcMsgMV_mv1YC                               3
    #define   MSK32vcMsgMV_mv1YC                                  0x0000E000

    #define     BA_vcMsgMV_mv2X                                0x0002
    #define     B16vcMsgMV_mv2X                                0x0002
    #define   LSb32vcMsgMV_mv2X                                   16
    #define   LSb16vcMsgMV_mv2X                                   0
    #define       bvcMsgMV_mv2X                                3
    #define   MSK32vcMsgMV_mv2X                                   0x00070000

    #define     BA_vcMsgMV_mv2YL                               0x0002
    #define     B16vcMsgMV_mv2YL                               0x0002
    #define   LSb32vcMsgMV_mv2YL                                  19
    #define   LSb16vcMsgMV_mv2YL                                  3
    #define       bvcMsgMV_mv2YL                               2
    #define   MSK32vcMsgMV_mv2YL                                  0x00180000

    #define     BA_vcMsgMV_mv2YC                               0x0002
    #define     B16vcMsgMV_mv2YC                               0x0002
    #define   LSb32vcMsgMV_mv2YC                                  21
    #define   LSb16vcMsgMV_mv2YC                                  5
    #define       bvcMsgMV_mv2YC                               3
    #define   MSK32vcMsgMV_mv2YC                                  0x00E00000

    #define     BA_vcMsgMV_mv3X                                0x0003
    #define     B16vcMsgMV_mv3X                                0x0002
    #define   LSb32vcMsgMV_mv3X                                   24
    #define   LSb16vcMsgMV_mv3X                                   8
    #define       bvcMsgMV_mv3X                                3
    #define   MSK32vcMsgMV_mv3X                                   0x07000000

    #define     BA_vcMsgMV_mv3YL                               0x0003
    #define     B16vcMsgMV_mv3YL                               0x0002
    #define   LSb32vcMsgMV_mv3YL                                  27
    #define   LSb16vcMsgMV_mv3YL                                  11
    #define       bvcMsgMV_mv3YL                               2
    #define   MSK32vcMsgMV_mv3YL                                  0x18000000

    #define     BA_vcMsgMV_mv3YC                               0x0003
    #define     B16vcMsgMV_mv3YC                               0x0002
    #define   LSb32vcMsgMV_mv3YC                                  29
    #define   LSb16vcMsgMV_mv3YC                                  13
    #define       bvcMsgMV_mv3YC                               3
    #define   MSK32vcMsgMV_mv3YC                                  0xE0000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_vcMsgMV {
    ///////////////////////////////////////////////////////////
    #define   GET32vcMsgMV_mvX(r32)                            _BFGET_(r32, 2, 0)
    #define   SET32vcMsgMV_mvX(r32,v)                          _BFSET_(r32, 2, 0,v)
    #define   GET16vcMsgMV_mvX(r16)                            _BFGET_(r16, 2, 0)
    #define   SET16vcMsgMV_mvX(r16,v)                          _BFSET_(r16, 2, 0,v)

    #define   GET32vcMsgMV_mvYL(r32)                           _BFGET_(r32, 4, 3)
    #define   SET32vcMsgMV_mvYL(r32,v)                         _BFSET_(r32, 4, 3,v)
    #define   GET16vcMsgMV_mvYL(r16)                           _BFGET_(r16, 4, 3)
    #define   SET16vcMsgMV_mvYL(r16,v)                         _BFSET_(r16, 4, 3,v)

    #define   GET32vcMsgMV_mvYC(r32)                           _BFGET_(r32, 7, 5)
    #define   SET32vcMsgMV_mvYC(r32,v)                         _BFSET_(r32, 7, 5,v)
    #define   GET16vcMsgMV_mvYC(r16)                           _BFGET_(r16, 7, 5)
    #define   SET16vcMsgMV_mvYC(r16,v)                         _BFSET_(r16, 7, 5,v)

    #define   GET32vcMsgMV_mv1X(r32)                           _BFGET_(r32,10, 8)
    #define   SET32vcMsgMV_mv1X(r32,v)                         _BFSET_(r32,10, 8,v)
    #define   GET16vcMsgMV_mv1X(r16)                           _BFGET_(r16,10, 8)
    #define   SET16vcMsgMV_mv1X(r16,v)                         _BFSET_(r16,10, 8,v)

    #define   GET32vcMsgMV_mv1YL(r32)                          _BFGET_(r32,12,11)
    #define   SET32vcMsgMV_mv1YL(r32,v)                        _BFSET_(r32,12,11,v)
    #define   GET16vcMsgMV_mv1YL(r16)                          _BFGET_(r16,12,11)
    #define   SET16vcMsgMV_mv1YL(r16,v)                        _BFSET_(r16,12,11,v)

    #define   GET32vcMsgMV_mv1YC(r32)                          _BFGET_(r32,15,13)
    #define   SET32vcMsgMV_mv1YC(r32,v)                        _BFSET_(r32,15,13,v)
    #define   GET16vcMsgMV_mv1YC(r16)                          _BFGET_(r16,15,13)
    #define   SET16vcMsgMV_mv1YC(r16,v)                        _BFSET_(r16,15,13,v)

    #define   GET32vcMsgMV_mv2X(r32)                           _BFGET_(r32,18,16)
    #define   SET32vcMsgMV_mv2X(r32,v)                         _BFSET_(r32,18,16,v)
    #define   GET16vcMsgMV_mv2X(r16)                           _BFGET_(r16, 2, 0)
    #define   SET16vcMsgMV_mv2X(r16,v)                         _BFSET_(r16, 2, 0,v)

    #define   GET32vcMsgMV_mv2YL(r32)                          _BFGET_(r32,20,19)
    #define   SET32vcMsgMV_mv2YL(r32,v)                        _BFSET_(r32,20,19,v)
    #define   GET16vcMsgMV_mv2YL(r16)                          _BFGET_(r16, 4, 3)
    #define   SET16vcMsgMV_mv2YL(r16,v)                        _BFSET_(r16, 4, 3,v)

    #define   GET32vcMsgMV_mv2YC(r32)                          _BFGET_(r32,23,21)
    #define   SET32vcMsgMV_mv2YC(r32,v)                        _BFSET_(r32,23,21,v)
    #define   GET16vcMsgMV_mv2YC(r16)                          _BFGET_(r16, 7, 5)
    #define   SET16vcMsgMV_mv2YC(r16,v)                        _BFSET_(r16, 7, 5,v)

    #define   GET32vcMsgMV_mv3X(r32)                           _BFGET_(r32,26,24)
    #define   SET32vcMsgMV_mv3X(r32,v)                         _BFSET_(r32,26,24,v)
    #define   GET16vcMsgMV_mv3X(r16)                           _BFGET_(r16,10, 8)
    #define   SET16vcMsgMV_mv3X(r16,v)                         _BFSET_(r16,10, 8,v)

    #define   GET32vcMsgMV_mv3YL(r32)                          _BFGET_(r32,28,27)
    #define   SET32vcMsgMV_mv3YL(r32,v)                        _BFSET_(r32,28,27,v)
    #define   GET16vcMsgMV_mv3YL(r16)                          _BFGET_(r16,12,11)
    #define   SET16vcMsgMV_mv3YL(r16,v)                        _BFSET_(r16,12,11,v)

    #define   GET32vcMsgMV_mv3YC(r32)                          _BFGET_(r32,31,29)
    #define   SET32vcMsgMV_mv3YC(r32,v)                        _BFSET_(r32,31,29,v)
    #define   GET16vcMsgMV_mv3YC(r16)                          _BFGET_(r16,15,13)
    #define   SET16vcMsgMV_mv3YC(r16,v)                        _BFSET_(r16,15,13,v)

            UNSG32 u_mvX                                       :  3;
            UNSG32 u_mvYL                                      :  2;
            UNSG32 u_mvYC                                      :  3;
            UNSG32 u_mv1X                                      :  3;
            UNSG32 u_mv1YL                                     :  2;
            UNSG32 u_mv1YC                                     :  3;
            UNSG32 u_mv2X                                      :  3;
            UNSG32 u_mv2YL                                     :  2;
            UNSG32 u_mv2YC                                     :  3;
            UNSG32 u_mv3X                                      :  3;
            UNSG32 u_mv3YL                                     :  2;
            UNSG32 u_mv3YC                                     :  3;
    ///////////////////////////////////////////////////////////
    } SIE_vcMsgMV;

    ///////////////////////////////////////////////////////////
     SIGN32 vcMsgMV_drvrd(SIE_vcMsgMV *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 vcMsgMV_drvwr(SIE_vcMsgMV *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void vcMsgMV_reset(SIE_vcMsgMV *p);
     SIGN32 vcMsgMV_cmp  (SIE_vcMsgMV *p, SIE_vcMsgMV *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define vcMsgMV_check(p,pie,pfx,hLOG) vcMsgMV_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define vcMsgMV_print(p,    pfx,hLOG) vcMsgMV_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: vcMsgMV
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE vcMsgCMD                biu              (4,4)
///     ###
///     * 16-bit vcMsg command parameter
///     * [0:31]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  BLK                       
///                                    ###
///                                    * Index of the 4x4 block @ upper-left corner of partition
///                                    ###
///               %unsigned 2  partition                 
///                                    : 1mv                       0x0
///                                    : 2mvLR                     0x1
///                                    : 2mvTB                     0x2
///                                    : 4mv                       0x3
///                                                 ###
///                                                 * Block / macroblock partition info
///                                                 ###
///               %unsigned 1  level                     
///                                    : mb                        0x0
///                                    : blk8x8                    0x1
///                                                 ###
///                                                 * 0: partition is at macroblock level
///                                                 * 1: partition is at 8x8 block level
///                                                 ###
///               %unsigned 1  RSVD                      0x1
///                                    ###
///                                    * To ensure same defines as in Nloc.category
///                                    * End vcMsgCMD
///                                    ###
///               %%        24         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:       8b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_vcMsgCMD
#define h_vcMsgCMD (){}

    #define     BA_vcMsgCMD_BLK                                0x0000
    #define     B16vcMsgCMD_BLK                                0x0000
    #define   LSb32vcMsgCMD_BLK                                   0
    #define   LSb16vcMsgCMD_BLK                                   0
    #define       bvcMsgCMD_BLK                                4
    #define   MSK32vcMsgCMD_BLK                                   0x0000000F

    #define     BA_vcMsgCMD_partition                          0x0000
    #define     B16vcMsgCMD_partition                          0x0000
    #define   LSb32vcMsgCMD_partition                             4
    #define   LSb16vcMsgCMD_partition                             4
    #define       bvcMsgCMD_partition                          2
    #define   MSK32vcMsgCMD_partition                             0x00000030
    #define        vcMsgCMD_partition_1mv                                   0x0
    #define        vcMsgCMD_partition_2mvLR                                 0x1
    #define        vcMsgCMD_partition_2mvTB                                 0x2
    #define        vcMsgCMD_partition_4mv                                   0x3

    #define     BA_vcMsgCMD_level                              0x0000
    #define     B16vcMsgCMD_level                              0x0000
    #define   LSb32vcMsgCMD_level                                 6
    #define   LSb16vcMsgCMD_level                                 6
    #define       bvcMsgCMD_level                              1
    #define   MSK32vcMsgCMD_level                                 0x00000040
    #define        vcMsgCMD_level_mb                                        0x0
    #define        vcMsgCMD_level_blk8x8                                    0x1

    #define     BA_vcMsgCMD_RSVD                               0x0000
    #define     B16vcMsgCMD_RSVD                               0x0000
    #define   LSb32vcMsgCMD_RSVD                                  7
    #define   LSb16vcMsgCMD_RSVD                                  7
    #define       bvcMsgCMD_RSVD                               1
    #define   MSK32vcMsgCMD_RSVD                                  0x00000080
    ///////////////////////////////////////////////////////////

    typedef struct SIE_vcMsgCMD {
    ///////////////////////////////////////////////////////////
    #define   GET32vcMsgCMD_BLK(r32)                           _BFGET_(r32, 3, 0)
    #define   SET32vcMsgCMD_BLK(r32,v)                         _BFSET_(r32, 3, 0,v)
    #define   GET16vcMsgCMD_BLK(r16)                           _BFGET_(r16, 3, 0)
    #define   SET16vcMsgCMD_BLK(r16,v)                         _BFSET_(r16, 3, 0,v)

    #define   GET32vcMsgCMD_partition(r32)                     _BFGET_(r32, 5, 4)
    #define   SET32vcMsgCMD_partition(r32,v)                   _BFSET_(r32, 5, 4,v)
    #define   GET16vcMsgCMD_partition(r16)                     _BFGET_(r16, 5, 4)
    #define   SET16vcMsgCMD_partition(r16,v)                   _BFSET_(r16, 5, 4,v)

    #define   GET32vcMsgCMD_level(r32)                         _BFGET_(r32, 6, 6)
    #define   SET32vcMsgCMD_level(r32,v)                       _BFSET_(r32, 6, 6,v)
    #define   GET16vcMsgCMD_level(r16)                         _BFGET_(r16, 6, 6)
    #define   SET16vcMsgCMD_level(r16,v)                       _BFSET_(r16, 6, 6,v)

    #define   GET32vcMsgCMD_RSVD(r32)                          _BFGET_(r32, 7, 7)
    #define   SET32vcMsgCMD_RSVD(r32,v)                        _BFSET_(r32, 7, 7,v)
    #define   GET16vcMsgCMD_RSVD(r16)                          _BFGET_(r16, 7, 7)
    #define   SET16vcMsgCMD_RSVD(r16,v)                        _BFSET_(r16, 7, 7,v)

            UNSG32 u_BLK                                       :  4;
            UNSG32 u_partition                                 :  2;
            UNSG32 u_level                                     :  1;
            UNSG32 u_RSVD                                      :  1;
            UNSG32 RSVDx0_b8                                   : 24;
    ///////////////////////////////////////////////////////////
    } SIE_vcMsgCMD;

    ///////////////////////////////////////////////////////////
     SIGN32 vcMsgCMD_drvrd(SIE_vcMsgCMD *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 vcMsgCMD_drvwr(SIE_vcMsgCMD *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void vcMsgCMD_reset(SIE_vcMsgCMD *p);
     SIGN32 vcMsgCMD_cmp  (SIE_vcMsgCMD *p, SIE_vcMsgCMD *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define vcMsgCMD_check(p,pie,pfx,hLOG) vcMsgCMD_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define vcMsgCMD_print(p,    pfx,hLOG) vcMsgCMD_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: vcMsgCMD
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE CacheMSG                                 (4,4)
///     ###
///     * Message to setup vCache prefetching.
///     * [00:31]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 11 xLoc                      
///                                    ###
///                                    * Exact reference region horizontal location (in pixel)
///                                    ###
///               %unsigned 5  xPix                      
///                                    ###
///                                    * Exact reference region horizontal size (in pixel)
///                                    * 0 represents 32
///                                    ###
///               %unsigned 11 yLoc                      
///                                    ###
///                                    * Exact reference region vertical location (in pixel)
///                                    ###
///               %unsigned 5  yPix                      
///                                    ###
///                                    * Exact reference region vertical size (in pixel)
///                                    * 0 represents 32
///                                    * [32:63]
///                                    ###
///     @ 0x00004                      (P)
///               %unsigned 5  xLocExp                   
///                                    ###
///                                    * Expansion horizontal offset (in pixel)
///                                    ###
///               %unsigned 3  xPixExp                   
///                                    ###
///                                    * Expansion horizontal size (in 4-pixel unit)
///                                    * 0 represents 8
///                                    ###
///               %unsigned 5  yLocExp                   
///                                    ###
///                                    * Expansion vertical offset (in pixel)
///                                    ###
///               %unsigned 3  yPixExp                   
///                                    ###
///                                    * Expansion vertical size (in 4-pixel unit)0 represents 8
///                                    ###
///               %unsigned 6  rBID                      
///                                    ###
///                                    * Reference buffer ID, last 1b indicates access mode:
///                                    * 0: frame/progressive or top field
///                                    * 1: bottom field
///                                    ###
///               %unsigned 1  uv                        
///                                    ###
///                                    * 0/1 for Y or UV reference region
///                                    ###
///               %unsigned 1  fldMB                     
///                                    ###
///                                    * 0/1 for frame or field MB(-pair)
///                                    ###
///               %unsigned 2  hint                      
///                                    : bypass                    0x0
///                                                 ###
///                                                 * Force to bypass cache
///                                                 ###
///                                    : FrmX                      0x1
///                                                 ###
///                                                 * Use FID & xLoc to decide cache way
///                                                 ###
///                                    : FrmY                      0x2
///                                                 ###
///                                                 * Use FID & yLoc to decide cache way
///                                                 ###
///                                    : XY                        0x3
///                                                 ###
///                                                 * Use xLoc & yLoc to decide cache way
///                                                 ###
///               %unsigned 6  descID                    
///                                    ###
///                                    * Output transfer descriptor ID
///                                    * A descriptor shall have a (non-zero) semaphore ID to check not full before transfer, destination address and stride (in 4x4)
///                                    ###
///                                    : CFG                      0x3F
///                                                 ###
///                                                 * vCache configuration message
///                                                 * End of CacheMSG
///                                                 ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_CacheMSG
#define h_CacheMSG (){}

    #define     BA_CacheMSG_xLoc                               0x0000
    #define     B16CacheMSG_xLoc                               0x0000
    #define   LSb32CacheMSG_xLoc                                  0
    #define   LSb16CacheMSG_xLoc                                  0
    #define       bCacheMSG_xLoc                               11
    #define   MSK32CacheMSG_xLoc                                  0x000007FF

    #define     BA_CacheMSG_xPix                               0x0001
    #define     B16CacheMSG_xPix                               0x0000
    #define   LSb32CacheMSG_xPix                                  11
    #define   LSb16CacheMSG_xPix                                  11
    #define       bCacheMSG_xPix                               5
    #define   MSK32CacheMSG_xPix                                  0x0000F800

    #define     BA_CacheMSG_yLoc                               0x0002
    #define     B16CacheMSG_yLoc                               0x0002
    #define   LSb32CacheMSG_yLoc                                  16
    #define   LSb16CacheMSG_yLoc                                  0
    #define       bCacheMSG_yLoc                               11
    #define   MSK32CacheMSG_yLoc                                  0x07FF0000

    #define     BA_CacheMSG_yPix                               0x0003
    #define     B16CacheMSG_yPix                               0x0002
    #define   LSb32CacheMSG_yPix                                  27
    #define   LSb16CacheMSG_yPix                                  11
    #define       bCacheMSG_yPix                               5
    #define   MSK32CacheMSG_yPix                                  0xF8000000
    ///////////////////////////////////////////////////////////

    #define     BA_CacheMSG_xLocExp                            0x0004
    #define     B16CacheMSG_xLocExp                            0x0004
    #define   LSb32CacheMSG_xLocExp                               0
    #define   LSb16CacheMSG_xLocExp                               0
    #define       bCacheMSG_xLocExp                            5
    #define   MSK32CacheMSG_xLocExp                               0x0000001F

    #define     BA_CacheMSG_xPixExp                            0x0004
    #define     B16CacheMSG_xPixExp                            0x0004
    #define   LSb32CacheMSG_xPixExp                               5
    #define   LSb16CacheMSG_xPixExp                               5
    #define       bCacheMSG_xPixExp                            3
    #define   MSK32CacheMSG_xPixExp                               0x000000E0

    #define     BA_CacheMSG_yLocExp                            0x0005
    #define     B16CacheMSG_yLocExp                            0x0004
    #define   LSb32CacheMSG_yLocExp                               8
    #define   LSb16CacheMSG_yLocExp                               8
    #define       bCacheMSG_yLocExp                            5
    #define   MSK32CacheMSG_yLocExp                               0x00001F00

    #define     BA_CacheMSG_yPixExp                            0x0005
    #define     B16CacheMSG_yPixExp                            0x0004
    #define   LSb32CacheMSG_yPixExp                               13
    #define   LSb16CacheMSG_yPixExp                               13
    #define       bCacheMSG_yPixExp                            3
    #define   MSK32CacheMSG_yPixExp                               0x0000E000

    #define     BA_CacheMSG_rBID                               0x0006
    #define     B16CacheMSG_rBID                               0x0006
    #define   LSb32CacheMSG_rBID                                  16
    #define   LSb16CacheMSG_rBID                                  0
    #define       bCacheMSG_rBID                               6
    #define   MSK32CacheMSG_rBID                                  0x003F0000

    #define     BA_CacheMSG_uv                                 0x0006
    #define     B16CacheMSG_uv                                 0x0006
    #define   LSb32CacheMSG_uv                                    22
    #define   LSb16CacheMSG_uv                                    6
    #define       bCacheMSG_uv                                 1
    #define   MSK32CacheMSG_uv                                    0x00400000

    #define     BA_CacheMSG_fldMB                              0x0006
    #define     B16CacheMSG_fldMB                              0x0006
    #define   LSb32CacheMSG_fldMB                                 23
    #define   LSb16CacheMSG_fldMB                                 7
    #define       bCacheMSG_fldMB                              1
    #define   MSK32CacheMSG_fldMB                                 0x00800000

    #define     BA_CacheMSG_hint                               0x0007
    #define     B16CacheMSG_hint                               0x0006
    #define   LSb32CacheMSG_hint                                  24
    #define   LSb16CacheMSG_hint                                  8
    #define       bCacheMSG_hint                               2
    #define   MSK32CacheMSG_hint                                  0x03000000
    #define        CacheMSG_hint_bypass                                     0x0
    #define        CacheMSG_hint_FrmX                                       0x1
    #define        CacheMSG_hint_FrmY                                       0x2
    #define        CacheMSG_hint_XY                                         0x3

    #define     BA_CacheMSG_descID                             0x0007
    #define     B16CacheMSG_descID                             0x0006
    #define   LSb32CacheMSG_descID                                26
    #define   LSb16CacheMSG_descID                                10
    #define       bCacheMSG_descID                             6
    #define   MSK32CacheMSG_descID                                0xFC000000
    #define        CacheMSG_descID_CFG                                      0x3F
    ///////////////////////////////////////////////////////////

    typedef struct SIE_CacheMSG {
    ///////////////////////////////////////////////////////////
    #define   GET32CacheMSG_xLoc(r32)                          _BFGET_(r32,10, 0)
    #define   SET32CacheMSG_xLoc(r32,v)                        _BFSET_(r32,10, 0,v)
    #define   GET16CacheMSG_xLoc(r16)                          _BFGET_(r16,10, 0)
    #define   SET16CacheMSG_xLoc(r16,v)                        _BFSET_(r16,10, 0,v)

    #define   GET32CacheMSG_xPix(r32)                          _BFGET_(r32,15,11)
    #define   SET32CacheMSG_xPix(r32,v)                        _BFSET_(r32,15,11,v)
    #define   GET16CacheMSG_xPix(r16)                          _BFGET_(r16,15,11)
    #define   SET16CacheMSG_xPix(r16,v)                        _BFSET_(r16,15,11,v)

    #define   GET32CacheMSG_yLoc(r32)                          _BFGET_(r32,26,16)
    #define   SET32CacheMSG_yLoc(r32,v)                        _BFSET_(r32,26,16,v)
    #define   GET16CacheMSG_yLoc(r16)                          _BFGET_(r16,10, 0)
    #define   SET16CacheMSG_yLoc(r16,v)                        _BFSET_(r16,10, 0,v)

    #define   GET32CacheMSG_yPix(r32)                          _BFGET_(r32,31,27)
    #define   SET32CacheMSG_yPix(r32,v)                        _BFSET_(r32,31,27,v)
    #define   GET16CacheMSG_yPix(r16)                          _BFGET_(r16,15,11)
    #define   SET16CacheMSG_yPix(r16,v)                        _BFSET_(r16,15,11,v)

            UNSG32 u_xLoc                                      : 11;
            UNSG32 u_xPix                                      :  5;
            UNSG32 u_yLoc                                      : 11;
            UNSG32 u_yPix                                      :  5;
    ///////////////////////////////////////////////////////////
    #define   GET32CacheMSG_xLocExp(r32)                       _BFGET_(r32, 4, 0)
    #define   SET32CacheMSG_xLocExp(r32,v)                     _BFSET_(r32, 4, 0,v)
    #define   GET16CacheMSG_xLocExp(r16)                       _BFGET_(r16, 4, 0)
    #define   SET16CacheMSG_xLocExp(r16,v)                     _BFSET_(r16, 4, 0,v)

    #define   GET32CacheMSG_xPixExp(r32)                       _BFGET_(r32, 7, 5)
    #define   SET32CacheMSG_xPixExp(r32,v)                     _BFSET_(r32, 7, 5,v)
    #define   GET16CacheMSG_xPixExp(r16)                       _BFGET_(r16, 7, 5)
    #define   SET16CacheMSG_xPixExp(r16,v)                     _BFSET_(r16, 7, 5,v)

    #define   GET32CacheMSG_yLocExp(r32)                       _BFGET_(r32,12, 8)
    #define   SET32CacheMSG_yLocExp(r32,v)                     _BFSET_(r32,12, 8,v)
    #define   GET16CacheMSG_yLocExp(r16)                       _BFGET_(r16,12, 8)
    #define   SET16CacheMSG_yLocExp(r16,v)                     _BFSET_(r16,12, 8,v)

    #define   GET32CacheMSG_yPixExp(r32)                       _BFGET_(r32,15,13)
    #define   SET32CacheMSG_yPixExp(r32,v)                     _BFSET_(r32,15,13,v)
    #define   GET16CacheMSG_yPixExp(r16)                       _BFGET_(r16,15,13)
    #define   SET16CacheMSG_yPixExp(r16,v)                     _BFSET_(r16,15,13,v)

    #define   GET32CacheMSG_rBID(r32)                          _BFGET_(r32,21,16)
    #define   SET32CacheMSG_rBID(r32,v)                        _BFSET_(r32,21,16,v)
    #define   GET16CacheMSG_rBID(r16)                          _BFGET_(r16, 5, 0)
    #define   SET16CacheMSG_rBID(r16,v)                        _BFSET_(r16, 5, 0,v)

    #define   GET32CacheMSG_uv(r32)                            _BFGET_(r32,22,22)
    #define   SET32CacheMSG_uv(r32,v)                          _BFSET_(r32,22,22,v)
    #define   GET16CacheMSG_uv(r16)                            _BFGET_(r16, 6, 6)
    #define   SET16CacheMSG_uv(r16,v)                          _BFSET_(r16, 6, 6,v)

    #define   GET32CacheMSG_fldMB(r32)                         _BFGET_(r32,23,23)
    #define   SET32CacheMSG_fldMB(r32,v)                       _BFSET_(r32,23,23,v)
    #define   GET16CacheMSG_fldMB(r16)                         _BFGET_(r16, 7, 7)
    #define   SET16CacheMSG_fldMB(r16,v)                       _BFSET_(r16, 7, 7,v)

    #define   GET32CacheMSG_hint(r32)                          _BFGET_(r32,25,24)
    #define   SET32CacheMSG_hint(r32,v)                        _BFSET_(r32,25,24,v)
    #define   GET16CacheMSG_hint(r16)                          _BFGET_(r16, 9, 8)
    #define   SET16CacheMSG_hint(r16,v)                        _BFSET_(r16, 9, 8,v)

    #define   GET32CacheMSG_descID(r32)                        _BFGET_(r32,31,26)
    #define   SET32CacheMSG_descID(r32,v)                      _BFSET_(r32,31,26,v)
    #define   GET16CacheMSG_descID(r16)                        _BFGET_(r16,15,10)
    #define   SET16CacheMSG_descID(r16,v)                      _BFSET_(r16,15,10,v)

            UNSG32 u_xLocExp                                   :  5;
            UNSG32 u_xPixExp                                   :  3;
            UNSG32 u_yLocExp                                   :  5;
            UNSG32 u_yPixExp                                   :  3;
            UNSG32 u_rBID                                      :  6;
            UNSG32 u_uv                                        :  1;
            UNSG32 u_fldMB                                     :  1;
            UNSG32 u_hint                                      :  2;
            UNSG32 u_descID                                    :  6;
    ///////////////////////////////////////////////////////////
    } SIE_CacheMSG;

    ///////////////////////////////////////////////////////////
     SIGN32 CacheMSG_drvrd(SIE_CacheMSG *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 CacheMSG_drvwr(SIE_CacheMSG *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void CacheMSG_reset(SIE_CacheMSG *p);
     SIGN32 CacheMSG_cmp  (SIE_CacheMSG *p, SIE_CacheMSG *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define CacheMSG_check(p,pie,pfx,hLOG) CacheMSG_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define CacheMSG_print(p,    pfx,hLOG) CacheMSG_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: CacheMSG
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE dirMvScale              biu              (4,4)
///     ###
///     * Scaling factors for temporal direct MV calculation
///     * [0:31]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %signed   12 factor                    
///                                    ###
///                                    * = clip(-1024, 1023, (tb*tx+32)>>6)
///                                    ###
///               %unsigned 20 RSVD20                    
///                                    ###
///                                    * pad to 32 bits
///                                    * [32:63]
///                                    ###
///     @ 0x00004                      (P)
///               %unsigned 32 RSVD32                    
///                                    ###
///                                    * pad to 64 bits
///                                    * End dirMvScale
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_dirMvScale
#define h_dirMvScale (){}

    #define     BA_dirMvScale_factor                           0x0000
    #define     B16dirMvScale_factor                           0x0000
    #define   LSb32dirMvScale_factor                              0
    #define   LSb16dirMvScale_factor                              0
    #define       bdirMvScale_factor                           12
    #define   MSK32dirMvScale_factor                              0x00000FFF

    #define     BA_dirMvScale_RSVD20                           0x0001
    #define     B16dirMvScale_RSVD20                           0x0000
    #define   LSb32dirMvScale_RSVD20                              12
    #define   LSb16dirMvScale_RSVD20                              12
    #define       bdirMvScale_RSVD20                           20
    #define   MSK32dirMvScale_RSVD20                              0xFFFFF000
    ///////////////////////////////////////////////////////////

    #define     BA_dirMvScale_RSVD32                           0x0004
    #define     B16dirMvScale_RSVD32                           0x0004
    #define   LSb32dirMvScale_RSVD32                              0
    #define   LSb16dirMvScale_RSVD32                              0
    #define       bdirMvScale_RSVD32                           32
    #define   MSK32dirMvScale_RSVD32                              0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_dirMvScale {
    ///////////////////////////////////////////////////////////
    #define   GET32dirMvScale_factor(r32)                      _BFGET_(r32,11, 0)
    #define   SET32dirMvScale_factor(r32,v)                    _BFSET_(r32,11, 0,v)
    #define   GET16dirMvScale_factor(r16)                      _BFGET_(r16,11, 0)
    #define   SET16dirMvScale_factor(r16,v)                    _BFSET_(r16,11, 0,v)

    #define   GET32dirMvScale_RSVD20(r32)                      _BFGET_(r32,31,12)
    #define   SET32dirMvScale_RSVD20(r32,v)                    _BFSET_(r32,31,12,v)

            UNSG32 s_factor                                    : 12;
            UNSG32 u_RSVD20                                    : 20;
    ///////////////////////////////////////////////////////////
    #define   GET32dirMvScale_RSVD32(r32)                      _BFGET_(r32,31, 0)
    #define   SET32dirMvScale_RSVD32(r32,v)                    _BFSET_(r32,31, 0,v)

            UNSG32 u_RSVD32                                    : 32;
    ///////////////////////////////////////////////////////////
    } SIE_dirMvScale;

    ///////////////////////////////////////////////////////////
     SIGN32 dirMvScale_drvrd(SIE_dirMvScale *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 dirMvScale_drvwr(SIE_dirMvScale *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void dirMvScale_reset(SIE_dirMvScale *p);
     SIGN32 dirMvScale_cmp  (SIE_dirMvScale *p, SIE_dirMvScale *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define dirMvScale_check(p,pie,pfx,hLOG) dirMvScale_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define dirMvScale_print(p,    pfx,hLOG) dirMvScale_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: dirMvScale
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE avsDirMvScale           biu              (4,4)
///     ###
///     * Scaling factors for temporal direct MV calculation for AVS
///     * [0:31]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 16 BlockDistanceFw           
///                                    ###
///                                    * Block Distance between current block and forward reference block.
///                                    ###
///               %unsigned 16 BlockDistanceBw           
///                                    ###
///                                    * Block Distance between backward reference block and current block.
///                                    * [32:63]
///                                    ###
///     @ 0x00004                      (P)
///               %unsigned 16 invBlockDistanceRef       
///                                    ###
///                                    * 16384/BlockDistanceRef, where BlockDistanceRef is the block distance between backward reference block and reference block of the co-located block.
///                                    ###
///               %unsigned 16 RSVD16                    
///                                    ###
///                                    * pad to 64 bits
///                                    * End avsDirMvScale
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_avsDirMvScale
#define h_avsDirMvScale (){}

    #define     BA_avsDirMvScale_BlockDistanceFw               0x0000
    #define     B16avsDirMvScale_BlockDistanceFw               0x0000
    #define   LSb32avsDirMvScale_BlockDistanceFw                  0
    #define   LSb16avsDirMvScale_BlockDistanceFw                  0
    #define       bavsDirMvScale_BlockDistanceFw               16
    #define   MSK32avsDirMvScale_BlockDistanceFw                  0x0000FFFF

    #define     BA_avsDirMvScale_BlockDistanceBw               0x0002
    #define     B16avsDirMvScale_BlockDistanceBw               0x0002
    #define   LSb32avsDirMvScale_BlockDistanceBw                  16
    #define   LSb16avsDirMvScale_BlockDistanceBw                  0
    #define       bavsDirMvScale_BlockDistanceBw               16
    #define   MSK32avsDirMvScale_BlockDistanceBw                  0xFFFF0000
    ///////////////////////////////////////////////////////////

    #define     BA_avsDirMvScale_invBlockDistanceRef           0x0004
    #define     B16avsDirMvScale_invBlockDistanceRef           0x0004
    #define   LSb32avsDirMvScale_invBlockDistanceRef              0
    #define   LSb16avsDirMvScale_invBlockDistanceRef              0
    #define       bavsDirMvScale_invBlockDistanceRef           16
    #define   MSK32avsDirMvScale_invBlockDistanceRef              0x0000FFFF

    #define     BA_avsDirMvScale_RSVD16                        0x0006
    #define     B16avsDirMvScale_RSVD16                        0x0006
    #define   LSb32avsDirMvScale_RSVD16                           16
    #define   LSb16avsDirMvScale_RSVD16                           0
    #define       bavsDirMvScale_RSVD16                        16
    #define   MSK32avsDirMvScale_RSVD16                           0xFFFF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_avsDirMvScale {
    ///////////////////////////////////////////////////////////
    #define   GET32avsDirMvScale_BlockDistanceFw(r32)          _BFGET_(r32,15, 0)
    #define   SET32avsDirMvScale_BlockDistanceFw(r32,v)        _BFSET_(r32,15, 0,v)
    #define   GET16avsDirMvScale_BlockDistanceFw(r16)          _BFGET_(r16,15, 0)
    #define   SET16avsDirMvScale_BlockDistanceFw(r16,v)        _BFSET_(r16,15, 0,v)

    #define   GET32avsDirMvScale_BlockDistanceBw(r32)          _BFGET_(r32,31,16)
    #define   SET32avsDirMvScale_BlockDistanceBw(r32,v)        _BFSET_(r32,31,16,v)
    #define   GET16avsDirMvScale_BlockDistanceBw(r16)          _BFGET_(r16,15, 0)
    #define   SET16avsDirMvScale_BlockDistanceBw(r16,v)        _BFSET_(r16,15, 0,v)

            UNSG32 u_BlockDistanceFw                           : 16;
            UNSG32 u_BlockDistanceBw                           : 16;
    ///////////////////////////////////////////////////////////
    #define   GET32avsDirMvScale_invBlockDistanceRef(r32)      _BFGET_(r32,15, 0)
    #define   SET32avsDirMvScale_invBlockDistanceRef(r32,v)    _BFSET_(r32,15, 0,v)
    #define   GET16avsDirMvScale_invBlockDistanceRef(r16)      _BFGET_(r16,15, 0)
    #define   SET16avsDirMvScale_invBlockDistanceRef(r16,v)    _BFSET_(r16,15, 0,v)

    #define   GET32avsDirMvScale_RSVD16(r32)                   _BFGET_(r32,31,16)
    #define   SET32avsDirMvScale_RSVD16(r32,v)                 _BFSET_(r32,31,16,v)
    #define   GET16avsDirMvScale_RSVD16(r16)                   _BFGET_(r16,15, 0)
    #define   SET16avsDirMvScale_RSVD16(r16,v)                 _BFSET_(r16,15, 0,v)

            UNSG32 u_invBlockDistanceRef                       : 16;
            UNSG32 u_RSVD16                                    : 16;
    ///////////////////////////////////////////////////////////
    } SIE_avsDirMvScale;

    ///////////////////////////////////////////////////////////
     SIGN32 avsDirMvScale_drvrd(SIE_avsDirMvScale *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 avsDirMvScale_drvwr(SIE_avsDirMvScale *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void avsDirMvScale_reset(SIE_avsDirMvScale *p);
     SIGN32 avsDirMvScale_cmp  (SIE_avsDirMvScale *p, SIE_avsDirMvScale *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define avsDirMvScale_check(p,pie,pfx,hLOG) avsDirMvScale_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define avsDirMvScale_print(p,    pfx,hLOG) avsDirMvScale_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: avsDirMvScale
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE BitOpX4                 biu              (4,4)
///     ###
///     * Operator format for BitOp extension
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 6  idx                       
///                                    ###
///                                    * rS[idx] or xT[idx] is used as source bit
///                                    * In case src==rS, idx[5:4] specifies the operation mode:
///                                    * idx[5:4]==2'b0x: output is from rS
///                                    * idx[5:4]==2'b10: output bit is forced to 0
///                                    * idx[5:4]==2'b11: output bit is forced to 1
///                                    ###
///               %unsigned 1  src                       
///                                    : xT                        0x0
///                                    : rS                        0x1
///                                                 ###
///                                                 * If src=rS, the source is from 16-bit input
///                                                 * If src=xT, the source is from 64-bit input
///                                                 ###
///               %unsigned 1  mode                      
///                                    : copy                      0x0
///                                    : inv                       0x1
///                                                 ###
///                                                 * copy: target bit copied from source bit
///                                                 * inv: target bit copied from source bit then inverted
///                                                 * Not used when src==rS & idx[5]==1'b1
///                                                 ###
///               %unsigned 6  idx1                      
///               %unsigned 1  src1                      
///               %unsigned 1  mode1                     
///               %unsigned 6  idx2                      
///               %unsigned 1  src2                      
///               %unsigned 1  mode2                     
///               %unsigned 6  idx3                      
///               %unsigned 1  src3                      
///               %unsigned 1  mode3                     
///                                    ###
///                                    * End BitOpX4
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      32b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_BitOpX4
#define h_BitOpX4 (){}

    #define     BA_BitOpX4_idx                                 0x0000
    #define     B16BitOpX4_idx                                 0x0000
    #define   LSb32BitOpX4_idx                                    0
    #define   LSb16BitOpX4_idx                                    0
    #define       bBitOpX4_idx                                 6
    #define   MSK32BitOpX4_idx                                    0x0000003F

    #define     BA_BitOpX4_src                                 0x0000
    #define     B16BitOpX4_src                                 0x0000
    #define   LSb32BitOpX4_src                                    6
    #define   LSb16BitOpX4_src                                    6
    #define       bBitOpX4_src                                 1
    #define   MSK32BitOpX4_src                                    0x00000040
    #define        BitOpX4_src_xT                                           0x0
    #define        BitOpX4_src_rS                                           0x1

    #define     BA_BitOpX4_mode                                0x0000
    #define     B16BitOpX4_mode                                0x0000
    #define   LSb32BitOpX4_mode                                   7
    #define   LSb16BitOpX4_mode                                   7
    #define       bBitOpX4_mode                                1
    #define   MSK32BitOpX4_mode                                   0x00000080
    #define        BitOpX4_mode_copy                                        0x0
    #define        BitOpX4_mode_inv                                         0x1

    #define     BA_BitOpX4_idx1                                0x0001
    #define     B16BitOpX4_idx1                                0x0000
    #define   LSb32BitOpX4_idx1                                   8
    #define   LSb16BitOpX4_idx1                                   8
    #define       bBitOpX4_idx1                                6
    #define   MSK32BitOpX4_idx1                                   0x00003F00

    #define     BA_BitOpX4_src1                                0x0001
    #define     B16BitOpX4_src1                                0x0000
    #define   LSb32BitOpX4_src1                                   14
    #define   LSb16BitOpX4_src1                                   14
    #define       bBitOpX4_src1                                1
    #define   MSK32BitOpX4_src1                                   0x00004000

    #define     BA_BitOpX4_mode1                               0x0001
    #define     B16BitOpX4_mode1                               0x0000
    #define   LSb32BitOpX4_mode1                                  15
    #define   LSb16BitOpX4_mode1                                  15
    #define       bBitOpX4_mode1                               1
    #define   MSK32BitOpX4_mode1                                  0x00008000

    #define     BA_BitOpX4_idx2                                0x0002
    #define     B16BitOpX4_idx2                                0x0002
    #define   LSb32BitOpX4_idx2                                   16
    #define   LSb16BitOpX4_idx2                                   0
    #define       bBitOpX4_idx2                                6
    #define   MSK32BitOpX4_idx2                                   0x003F0000

    #define     BA_BitOpX4_src2                                0x0002
    #define     B16BitOpX4_src2                                0x0002
    #define   LSb32BitOpX4_src2                                   22
    #define   LSb16BitOpX4_src2                                   6
    #define       bBitOpX4_src2                                1
    #define   MSK32BitOpX4_src2                                   0x00400000

    #define     BA_BitOpX4_mode2                               0x0002
    #define     B16BitOpX4_mode2                               0x0002
    #define   LSb32BitOpX4_mode2                                  23
    #define   LSb16BitOpX4_mode2                                  7
    #define       bBitOpX4_mode2                               1
    #define   MSK32BitOpX4_mode2                                  0x00800000

    #define     BA_BitOpX4_idx3                                0x0003
    #define     B16BitOpX4_idx3                                0x0002
    #define   LSb32BitOpX4_idx3                                   24
    #define   LSb16BitOpX4_idx3                                   8
    #define       bBitOpX4_idx3                                6
    #define   MSK32BitOpX4_idx3                                   0x3F000000

    #define     BA_BitOpX4_src3                                0x0003
    #define     B16BitOpX4_src3                                0x0002
    #define   LSb32BitOpX4_src3                                   30
    #define   LSb16BitOpX4_src3                                   14
    #define       bBitOpX4_src3                                1
    #define   MSK32BitOpX4_src3                                   0x40000000

    #define     BA_BitOpX4_mode3                               0x0003
    #define     B16BitOpX4_mode3                               0x0002
    #define   LSb32BitOpX4_mode3                                  31
    #define   LSb16BitOpX4_mode3                                  15
    #define       bBitOpX4_mode3                               1
    #define   MSK32BitOpX4_mode3                                  0x80000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_BitOpX4 {
    ///////////////////////////////////////////////////////////
    #define   GET32BitOpX4_idx(r32)                            _BFGET_(r32, 5, 0)
    #define   SET32BitOpX4_idx(r32,v)                          _BFSET_(r32, 5, 0,v)
    #define   GET16BitOpX4_idx(r16)                            _BFGET_(r16, 5, 0)
    #define   SET16BitOpX4_idx(r16,v)                          _BFSET_(r16, 5, 0,v)

    #define   GET32BitOpX4_src(r32)                            _BFGET_(r32, 6, 6)
    #define   SET32BitOpX4_src(r32,v)                          _BFSET_(r32, 6, 6,v)
    #define   GET16BitOpX4_src(r16)                            _BFGET_(r16, 6, 6)
    #define   SET16BitOpX4_src(r16,v)                          _BFSET_(r16, 6, 6,v)

    #define   GET32BitOpX4_mode(r32)                           _BFGET_(r32, 7, 7)
    #define   SET32BitOpX4_mode(r32,v)                         _BFSET_(r32, 7, 7,v)
    #define   GET16BitOpX4_mode(r16)                           _BFGET_(r16, 7, 7)
    #define   SET16BitOpX4_mode(r16,v)                         _BFSET_(r16, 7, 7,v)

    #define   GET32BitOpX4_idx1(r32)                           _BFGET_(r32,13, 8)
    #define   SET32BitOpX4_idx1(r32,v)                         _BFSET_(r32,13, 8,v)
    #define   GET16BitOpX4_idx1(r16)                           _BFGET_(r16,13, 8)
    #define   SET16BitOpX4_idx1(r16,v)                         _BFSET_(r16,13, 8,v)

    #define   GET32BitOpX4_src1(r32)                           _BFGET_(r32,14,14)
    #define   SET32BitOpX4_src1(r32,v)                         _BFSET_(r32,14,14,v)
    #define   GET16BitOpX4_src1(r16)                           _BFGET_(r16,14,14)
    #define   SET16BitOpX4_src1(r16,v)                         _BFSET_(r16,14,14,v)

    #define   GET32BitOpX4_mode1(r32)                          _BFGET_(r32,15,15)
    #define   SET32BitOpX4_mode1(r32,v)                        _BFSET_(r32,15,15,v)
    #define   GET16BitOpX4_mode1(r16)                          _BFGET_(r16,15,15)
    #define   SET16BitOpX4_mode1(r16,v)                        _BFSET_(r16,15,15,v)

    #define   GET32BitOpX4_idx2(r32)                           _BFGET_(r32,21,16)
    #define   SET32BitOpX4_idx2(r32,v)                         _BFSET_(r32,21,16,v)
    #define   GET16BitOpX4_idx2(r16)                           _BFGET_(r16, 5, 0)
    #define   SET16BitOpX4_idx2(r16,v)                         _BFSET_(r16, 5, 0,v)

    #define   GET32BitOpX4_src2(r32)                           _BFGET_(r32,22,22)
    #define   SET32BitOpX4_src2(r32,v)                         _BFSET_(r32,22,22,v)
    #define   GET16BitOpX4_src2(r16)                           _BFGET_(r16, 6, 6)
    #define   SET16BitOpX4_src2(r16,v)                         _BFSET_(r16, 6, 6,v)

    #define   GET32BitOpX4_mode2(r32)                          _BFGET_(r32,23,23)
    #define   SET32BitOpX4_mode2(r32,v)                        _BFSET_(r32,23,23,v)
    #define   GET16BitOpX4_mode2(r16)                          _BFGET_(r16, 7, 7)
    #define   SET16BitOpX4_mode2(r16,v)                        _BFSET_(r16, 7, 7,v)

    #define   GET32BitOpX4_idx3(r32)                           _BFGET_(r32,29,24)
    #define   SET32BitOpX4_idx3(r32,v)                         _BFSET_(r32,29,24,v)
    #define   GET16BitOpX4_idx3(r16)                           _BFGET_(r16,13, 8)
    #define   SET16BitOpX4_idx3(r16,v)                         _BFSET_(r16,13, 8,v)

    #define   GET32BitOpX4_src3(r32)                           _BFGET_(r32,30,30)
    #define   SET32BitOpX4_src3(r32,v)                         _BFSET_(r32,30,30,v)
    #define   GET16BitOpX4_src3(r16)                           _BFGET_(r16,14,14)
    #define   SET16BitOpX4_src3(r16,v)                         _BFSET_(r16,14,14,v)

    #define   GET32BitOpX4_mode3(r32)                          _BFGET_(r32,31,31)
    #define   SET32BitOpX4_mode3(r32,v)                        _BFSET_(r32,31,31,v)
    #define   GET16BitOpX4_mode3(r16)                          _BFGET_(r16,15,15)
    #define   SET16BitOpX4_mode3(r16,v)                        _BFSET_(r16,15,15,v)

            UNSG32 u_idx                                       :  6;
            UNSG32 u_src                                       :  1;
            UNSG32 u_mode                                      :  1;
            UNSG32 u_idx1                                      :  6;
            UNSG32 u_src1                                      :  1;
            UNSG32 u_mode1                                     :  1;
            UNSG32 u_idx2                                      :  6;
            UNSG32 u_src2                                      :  1;
            UNSG32 u_mode2                                     :  1;
            UNSG32 u_idx3                                      :  6;
            UNSG32 u_src3                                      :  1;
            UNSG32 u_mode3                                     :  1;
    ///////////////////////////////////////////////////////////
    } SIE_BitOpX4;

    ///////////////////////////////////////////////////////////
     SIGN32 BitOpX4_drvrd(SIE_BitOpX4 *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 BitOpX4_drvwr(SIE_BitOpX4 *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void BitOpX4_reset(SIE_BitOpX4 *p);
     SIGN32 BitOpX4_cmp  (SIE_BitOpX4 *p, SIE_BitOpX4 *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define BitOpX4_check(p,pie,pfx,hLOG) BitOpX4_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define BitOpX4_print(p,    pfx,hLOG) BitOpX4_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: BitOpX4
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE BITOPRF64               biu              (4,4)
///     ###
///     * Operator format for BitOp extension
///     ###
///     # # ----------------------------------------------------------
///               : BitOp0             0x20
///               : BitOp1             0x21
///               : BitOp2             0x22
///               : BitOp3             0x23
///                            ###
///                            * extension ID definition; must be consistent with vScope_F0A64_BitOp0~3
///                            ###
///     @ 0x00000                      (P)
///     # 0x00000 cmd0                 
///               $BitOpX4             cmd0              REG       [4]
///     @ 0x00010                      (P)
///     # 0x00010 cmd1                 
///               $BitOpX4             cmd1              REG       [4]
///     @ 0x00020                      (P)
///     # 0x00020 cmd2                 
///               $BitOpX4             cmd2              REG       [4]
///     @ 0x00030                      (P)
///     # 0x00030 cmd3                 
///               $BitOpX4             cmd3              REG       [4]
///                                    ###
///                                    * Four BitOp commands, selected by extension ID
///                                    * End BitOpCtx
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      64B, bits:     512b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_BITOPRF64
#define h_BITOPRF64 (){}

    #define        BITOPRF64_BitOp0                            0x20
    #define        BITOPRF64_BitOp1                            0x21
    #define        BITOPRF64_BitOp2                            0x22
    #define        BITOPRF64_BitOp3                            0x23
    ///////////////////////////////////////////////////////////
    #define     RA_BITOPRF64_cmd0                              0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_BITOPRF64_cmd1                              0x0010
    ///////////////////////////////////////////////////////////
    #define     RA_BITOPRF64_cmd2                              0x0020
    ///////////////////////////////////////////////////////////
    #define     RA_BITOPRF64_cmd3                              0x0030
    ///////////////////////////////////////////////////////////

    typedef struct SIE_BITOPRF64 {
    ///////////////////////////////////////////////////////////
              SIE_BitOpX4                                      ie_cmd0[4];
    ///////////////////////////////////////////////////////////
              SIE_BitOpX4                                      ie_cmd1[4];
    ///////////////////////////////////////////////////////////
              SIE_BitOpX4                                      ie_cmd2[4];
    ///////////////////////////////////////////////////////////
              SIE_BitOpX4                                      ie_cmd3[4];
    ///////////////////////////////////////////////////////////
    } SIE_BITOPRF64;

    ///////////////////////////////////////////////////////////
     SIGN32 BITOPRF64_drvrd(SIE_BITOPRF64 *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 BITOPRF64_drvwr(SIE_BITOPRF64 *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void BITOPRF64_reset(SIE_BITOPRF64 *p);
     SIGN32 BITOPRF64_cmp  (SIE_BITOPRF64 *p, SIE_BITOPRF64 *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define BITOPRF64_check(p,pie,pfx,hLOG) BITOPRF64_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define BITOPRF64_print(p,    pfx,hLOG) BITOPRF64_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: BITOPRF64
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE LUT8b                                    (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 8  data                      
///                                    ###
///                                    * Any 8b data
///                                    ###
///               %unsigned 8  data1                     
///               %unsigned 8  data2                     
///               %unsigned 8  data3                     
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      32b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_LUT8b
#define h_LUT8b (){}

    #define     BA_LUT8b_data                                  0x0000
    #define     B16LUT8b_data                                  0x0000
    #define   LSb32LUT8b_data                                     0
    #define   LSb16LUT8b_data                                     0
    #define       bLUT8b_data                                  8
    #define   MSK32LUT8b_data                                     0x000000FF

    #define     BA_LUT8b_data1                                 0x0001
    #define     B16LUT8b_data1                                 0x0000
    #define   LSb32LUT8b_data1                                    8
    #define   LSb16LUT8b_data1                                    8
    #define       bLUT8b_data1                                 8
    #define   MSK32LUT8b_data1                                    0x0000FF00

    #define     BA_LUT8b_data2                                 0x0002
    #define     B16LUT8b_data2                                 0x0002
    #define   LSb32LUT8b_data2                                    16
    #define   LSb16LUT8b_data2                                    0
    #define       bLUT8b_data2                                 8
    #define   MSK32LUT8b_data2                                    0x00FF0000

    #define     BA_LUT8b_data3                                 0x0003
    #define     B16LUT8b_data3                                 0x0002
    #define   LSb32LUT8b_data3                                    24
    #define   LSb16LUT8b_data3                                    8
    #define       bLUT8b_data3                                 8
    #define   MSK32LUT8b_data3                                    0xFF000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_LUT8b {
    ///////////////////////////////////////////////////////////
    #define   GET32LUT8b_data(r32)                             _BFGET_(r32, 7, 0)
    #define   SET32LUT8b_data(r32,v)                           _BFSET_(r32, 7, 0,v)
    #define   GET16LUT8b_data(r16)                             _BFGET_(r16, 7, 0)
    #define   SET16LUT8b_data(r16,v)                           _BFSET_(r16, 7, 0,v)

    #define   GET32LUT8b_data1(r32)                            _BFGET_(r32,15, 8)
    #define   SET32LUT8b_data1(r32,v)                          _BFSET_(r32,15, 8,v)
    #define   GET16LUT8b_data1(r16)                            _BFGET_(r16,15, 8)
    #define   SET16LUT8b_data1(r16,v)                          _BFSET_(r16,15, 8,v)

    #define   GET32LUT8b_data2(r32)                            _BFGET_(r32,23,16)
    #define   SET32LUT8b_data2(r32,v)                          _BFSET_(r32,23,16,v)
    #define   GET16LUT8b_data2(r16)                            _BFGET_(r16, 7, 0)
    #define   SET16LUT8b_data2(r16,v)                          _BFSET_(r16, 7, 0,v)

    #define   GET32LUT8b_data3(r32)                            _BFGET_(r32,31,24)
    #define   SET32LUT8b_data3(r32,v)                          _BFSET_(r32,31,24,v)
    #define   GET16LUT8b_data3(r16)                            _BFGET_(r16,15, 8)
    #define   SET16LUT8b_data3(r16,v)                          _BFSET_(r16,15, 8,v)

            UNSG32 u_data                                      :  8;
            UNSG32 u_data1                                     :  8;
            UNSG32 u_data2                                     :  8;
            UNSG32 u_data3                                     :  8;
    ///////////////////////////////////////////////////////////
    } SIE_LUT8b;

    ///////////////////////////////////////////////////////////
     SIGN32 LUT8b_drvrd(SIE_LUT8b *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 LUT8b_drvwr(SIE_LUT8b *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void LUT8b_reset(SIE_LUT8b *p);
     SIGN32 LUT8b_cmp  (SIE_LUT8b *p, SIE_LUT8b *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define LUT8b_check(p,pie,pfx,hLOG) LUT8b_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define LUT8b_print(p,    pfx,hLOG) LUT8b_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: LUT8b
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE LUT64b                                   (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 32 data_0i                   
///               %unsigned 32 data_1i                   
///                                    ###
///                                    * Any 64b data
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_LUT64b
#define h_LUT64b (){}

    #define     BA_LUT64b_data_0i                              0x0000
    #define     B16LUT64b_data_0i                              0x0000
    #define   LSb32LUT64b_data_0i                                 0
    #define   LSb16LUT64b_data_0i                                 0
    #define       bLUT64b_data_0i                              32
    #define   MSK32LUT64b_data_0i                                 0xFFFFFFFF

    #define     BA_LUT64b_data_1i                              0x0004
    #define     B16LUT64b_data_1i                              0x0004
    #define   LSb32LUT64b_data_1i                                 0
    #define   LSb16LUT64b_data_1i                                 0
    #define       bLUT64b_data_1i                              32
    #define   MSK32LUT64b_data_1i                                 0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_LUT64b {
    ///////////////////////////////////////////////////////////
    #define   GET32LUT64b_data_0i(r32)                         _BFGET_(r32,31, 0)
    #define   SET32LUT64b_data_0i(r32,v)                       _BFSET_(r32,31, 0,v)

            UNSG32 u_data_0i                                   : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32LUT64b_data_1i(r32)                         _BFGET_(r32,31, 0)
    #define   SET32LUT64b_data_1i(r32,v)                       _BFSET_(r32,31, 0,v)

            UNSG32 u_data_1i                                   : 32;
    ///////////////////////////////////////////////////////////
    } SIE_LUT64b;

    ///////////////////////////////////////////////////////////
     SIGN32 LUT64b_drvrd(SIE_LUT64b *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 LUT64b_drvwr(SIE_LUT64b *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void LUT64b_reset(SIE_LUT64b *p);
     SIGN32 LUT64b_cmp  (SIE_LUT64b *p, SIE_LUT64b *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define LUT64b_check(p,pie,pfx,hLOG) LUT64b_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define LUT64b_print(p,    pfx,hLOG) LUT64b_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: LUT64b
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE NLoc                                     (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 4  BLK                       
///                                    ###
///                                    * Block index
///                                    ###
///               %unsigned 4  category                  
///                                    : 16x16                     0x8
///                                    : 8x16                      0x9
///                                    : 16x8                      0xA
///                                    : 4mv                       0xB
///                                    : 8x8                       0xC
///                                    : 4x8                       0xD
///                                    : 8x4                       0xE
///                                    : 4x4                       0xF
///                                                 ###
///                                                 * Consistent with vcMsg{RSVD,level,partition}
///                                                 * Valid cases for Neighbor:
///                                                 * 16x16=16x8
///                                                 * 8x16=4mv=8x8=8x4
///                                                 * 4x8=4x4=ACY
///                                                 * Valid cases for PMV:
///                                                 * 16x16=16x8
///                                                 * 8x16
///                                                 * 4mv=8x8=8x4
///                                                 * 4x8=4x4=ACY
///                                                 ###
///                                    : ACY                       0x0
///                                                 ###
///                                                 * Valid block index:
///                                                 * 0~15 (every 4x4 indexed by coding order)
///                                                 ###
///                                    : ACU                       0x2
///                                                 ###
///                                                 * Valid block index:
///                                                 * 0~3 (3rd 4x4 in every 8x8)
///                                                 ###
///                                    : ACV                       0x3
///                                                 ###
///                                                 * Valid block index:
///                                                 * 0~3 (4th 4x4 in every 8x8)
///                                                 ###
///                                    : I16AC                     0x4
///                                                 ###
///                                                 * Only used as category, should be converted to ACY for neighbor look-up
///                                                 ###
///                                    : DCI                       0x4
///                                                 ###
///                                                 * Valid block index:
///                                                 * 0 (3rd 4x4 in 4th 8x8 only)
///                                                 ###
///                                    : DCY                       0x5
///                                                 ###
///                                                 * Valid block index:
///                                                 * 0 (4th 4x4 in 4th 8x8 only)
///                                                 ###
///                                    : SDPMV                     0x5
///                                                 ###
///                                                 * Reuse DCY in PMV extension, for Spatial Direct mode rIDX recovery.
///                                                 ###
///                                    : DCU                       0x6
///                                                 ###
///                                                 * Valid block index:
///                                                 * 0 (3rd 4x4 in 3rd 8x8 only)
///                                                 ###
///                                    : DCV                       0x7
///                                                 ###
///                                                 * Valid block index:
///                                                 * 0 (4th 4x4 in 3rd 8x8 only)
///                                                 ###
///               %unsigned 1  parity                    
///                                    ###
///                                    * 0/1 as even/odd, only for loop-filter
///                                    ###
///               %unsigned 1  direct                    
///                                    ###
///                                    * FW use only: if direct mode
///                                    * AVS: use for sym mode in hardware.
///                                    ###
///               %unsigned 2  motion                    
///                                    ###
///                                    * FW use only: motion type
///                                    ###
///               %unsigned 1  A                         
///                                    ###
///                                    * Left macroblock/block availability
///                                    ###
///               %unsigned 1  B                         
///                                    ###
///                                    * Upper macroblock/block availability
///                                    ###
///               %unsigned 1  C                         
///                                    ###
///                                    * Upper-right macroblock/block availability
///                                    ###
///               %unsigned 1  D                         
///                                    ###
///                                    * Upper-left macroblock/block availability
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      16b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_NLoc
#define h_NLoc (){}

    #define     BA_NLoc_BLK                                    0x0000
    #define     B16NLoc_BLK                                    0x0000
    #define   LSb32NLoc_BLK                                       0
    #define   LSb16NLoc_BLK                                       0
    #define       bNLoc_BLK                                    4
    #define   MSK32NLoc_BLK                                       0x0000000F

    #define     BA_NLoc_category                               0x0000
    #define     B16NLoc_category                               0x0000
    #define   LSb32NLoc_category                                  4
    #define   LSb16NLoc_category                                  4
    #define       bNLoc_category                               4
    #define   MSK32NLoc_category                                  0x000000F0
    #define        NLoc_category_16x16                                      0x8
    #define        NLoc_category_8x16                                       0x9
    #define        NLoc_category_16x8                                       0xA
    #define        NLoc_category_4mv                                        0xB
    #define        NLoc_category_8x8                                        0xC
    #define        NLoc_category_4x8                                        0xD
    #define        NLoc_category_8x4                                        0xE
    #define        NLoc_category_4x4                                        0xF
    #define        NLoc_category_ACY                                        0x0
    #define        NLoc_category_ACU                                        0x2
    #define        NLoc_category_ACV                                        0x3
    #define        NLoc_category_I16AC                                      0x4
    #define        NLoc_category_DCI                                        0x4
    #define        NLoc_category_DCY                                        0x5
    #define        NLoc_category_SDPMV                                      0x5
    #define        NLoc_category_DCU                                        0x6
    #define        NLoc_category_DCV                                        0x7

    #define     BA_NLoc_parity                                 0x0001
    #define     B16NLoc_parity                                 0x0000
    #define   LSb32NLoc_parity                                    8
    #define   LSb16NLoc_parity                                    8
    #define       bNLoc_parity                                 1
    #define   MSK32NLoc_parity                                    0x00000100

    #define     BA_NLoc_direct                                 0x0001
    #define     B16NLoc_direct                                 0x0000
    #define   LSb32NLoc_direct                                    9
    #define   LSb16NLoc_direct                                    9
    #define       bNLoc_direct                                 1
    #define   MSK32NLoc_direct                                    0x00000200

    #define     BA_NLoc_motion                                 0x0001
    #define     B16NLoc_motion                                 0x0000
    #define   LSb32NLoc_motion                                    10
    #define   LSb16NLoc_motion                                    10
    #define       bNLoc_motion                                 2
    #define   MSK32NLoc_motion                                    0x00000C00

    #define     BA_NLoc_A                                      0x0001
    #define     B16NLoc_A                                      0x0000
    #define   LSb32NLoc_A                                         12
    #define   LSb16NLoc_A                                         12
    #define       bNLoc_A                                      1
    #define   MSK32NLoc_A                                         0x00001000

    #define     BA_NLoc_B                                      0x0001
    #define     B16NLoc_B                                      0x0000
    #define   LSb32NLoc_B                                         13
    #define   LSb16NLoc_B                                         13
    #define       bNLoc_B                                      1
    #define   MSK32NLoc_B                                         0x00002000

    #define     BA_NLoc_C                                      0x0001
    #define     B16NLoc_C                                      0x0000
    #define   LSb32NLoc_C                                         14
    #define   LSb16NLoc_C                                         14
    #define       bNLoc_C                                      1
    #define   MSK32NLoc_C                                         0x00004000

    #define     BA_NLoc_D                                      0x0001
    #define     B16NLoc_D                                      0x0000
    #define   LSb32NLoc_D                                         15
    #define   LSb16NLoc_D                                         15
    #define       bNLoc_D                                      1
    #define   MSK32NLoc_D                                         0x00008000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_NLoc {
    ///////////////////////////////////////////////////////////
    #define   GET32NLoc_BLK(r32)                               _BFGET_(r32, 3, 0)
    #define   SET32NLoc_BLK(r32,v)                             _BFSET_(r32, 3, 0,v)
    #define   GET16NLoc_BLK(r16)                               _BFGET_(r16, 3, 0)
    #define   SET16NLoc_BLK(r16,v)                             _BFSET_(r16, 3, 0,v)

    #define   GET32NLoc_category(r32)                          _BFGET_(r32, 7, 4)
    #define   SET32NLoc_category(r32,v)                        _BFSET_(r32, 7, 4,v)
    #define   GET16NLoc_category(r16)                          _BFGET_(r16, 7, 4)
    #define   SET16NLoc_category(r16,v)                        _BFSET_(r16, 7, 4,v)

    #define   GET32NLoc_parity(r32)                            _BFGET_(r32, 8, 8)
    #define   SET32NLoc_parity(r32,v)                          _BFSET_(r32, 8, 8,v)
    #define   GET16NLoc_parity(r16)                            _BFGET_(r16, 8, 8)
    #define   SET16NLoc_parity(r16,v)                          _BFSET_(r16, 8, 8,v)

    #define   GET32NLoc_direct(r32)                            _BFGET_(r32, 9, 9)
    #define   SET32NLoc_direct(r32,v)                          _BFSET_(r32, 9, 9,v)
    #define   GET16NLoc_direct(r16)                            _BFGET_(r16, 9, 9)
    #define   SET16NLoc_direct(r16,v)                          _BFSET_(r16, 9, 9,v)

    #define   GET32NLoc_motion(r32)                            _BFGET_(r32,11,10)
    #define   SET32NLoc_motion(r32,v)                          _BFSET_(r32,11,10,v)
    #define   GET16NLoc_motion(r16)                            _BFGET_(r16,11,10)
    #define   SET16NLoc_motion(r16,v)                          _BFSET_(r16,11,10,v)

    #define   GET32NLoc_A(r32)                                 _BFGET_(r32,12,12)
    #define   SET32NLoc_A(r32,v)                               _BFSET_(r32,12,12,v)
    #define   GET16NLoc_A(r16)                                 _BFGET_(r16,12,12)
    #define   SET16NLoc_A(r16,v)                               _BFSET_(r16,12,12,v)

    #define   GET32NLoc_B(r32)                                 _BFGET_(r32,13,13)
    #define   SET32NLoc_B(r32,v)                               _BFSET_(r32,13,13,v)
    #define   GET16NLoc_B(r16)                                 _BFGET_(r16,13,13)
    #define   SET16NLoc_B(r16,v)                               _BFSET_(r16,13,13,v)

    #define   GET32NLoc_C(r32)                                 _BFGET_(r32,14,14)
    #define   SET32NLoc_C(r32,v)                               _BFSET_(r32,14,14,v)
    #define   GET16NLoc_C(r16)                                 _BFGET_(r16,14,14)
    #define   SET16NLoc_C(r16,v)                               _BFSET_(r16,14,14,v)

    #define   GET32NLoc_D(r32)                                 _BFGET_(r32,15,15)
    #define   SET32NLoc_D(r32,v)                               _BFSET_(r32,15,15,v)
    #define   GET16NLoc_D(r16)                                 _BFGET_(r16,15,15)
    #define   SET16NLoc_D(r16,v)                               _BFSET_(r16,15,15,v)

            UNSG32 u_BLK                                       :  4;
            UNSG32 u_category                                  :  4;
            UNSG32 u_parity                                    :  1;
            UNSG32 u_direct                                    :  1;
            UNSG32 u_motion                                    :  2;
            UNSG32 u_A                                         :  1;
            UNSG32 u_B                                         :  1;
            UNSG32 u_C                                         :  1;
            UNSG32 u_D                                         :  1;
    ///////////////////////////////////////////////////////////
    } SIE_NLoc;

    ///////////////////////////////////////////////////////////
     SIGN32 NLoc_drvrd(SIE_NLoc *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 NLoc_drvwr(SIE_NLoc *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void NLoc_reset(SIE_NLoc *p);
     SIGN32 NLoc_cmp  (SIE_NLoc *p, SIE_NLoc *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define NLoc_check(p,pie,pfx,hLOG) NLoc_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define NLoc_print(p,    pfx,hLOG) NLoc_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: NLoc
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE BLK                                      (4,4)
///     # # ----------------------------------------------------------
///               : skip               0x0
///               : direct16x16        0x1
///               : 4BLK               0x2
///               : inter              0x3
///               : IPCM               0x4
///               : intra16x16         0x5
///               : intraNxN           0x6
///                            ###
///                            * Sub-set of mb_type
///                            * MPEG2: only skip, inter, intra (intra16x16)
///                            * MPEG4/VC-1: only 1 intra type (intra16x16)
///                            * AVS: skip, direct16x16, 4BLK, inter, intra16x16 (only 1 intra type)
///                            ###
///     @ 0x00000                      (P)
///               %unsigned 2  motion                    
///                                    : Intra                     0x0
///                                    : Forward                   0x1
///                                    : Backward                  0x2
///                                    : Bi                        0x3
///                                                 ###
///                                                 * Derived 8x8 block motion type
///                                                 * NOTE: direct mode uses 'Bi'
///                                                 ###
///               %unsigned 2  partition                 
///                                    : 1mv                       0x0
///                                    : 2mvLR                     0x1
///                                    : 2mvTB                     0x2
///                                                 ###
///                                                 * MPEG2: 2mvTB used for field prediction
///                                                 * VC-1: 2-field-mv
///                                                 ###
///                                    : 4mv                       0x3
///                                                 ###
///                                                 * Block/macroblock level partitioning
///                                                 * MPEG4: 1mv & 4mv
///                                                 ###
///                                    : 4mvFLD                    0x1
///                                                 ###
///                                                 * VC-1: 4-field-mv
///                                                 ###
///               %unsigned 1  direct                    
///                                    ###
///                                    * Direct mode flag
///                                    * MPEG2: dual-prime prediction
///                                    ###
///               %unsigned 3  mvs                       
///                                    ###
///                                    * Number of motion vectors: 0/1/2/4
///                                    ###
///               %unsigned 2  motion1                   
///               %unsigned 2  partition1                
///               %unsigned 1  direct1                   
///               %unsigned 3  mvs1                      
///               %unsigned 2  motion2                   
///               %unsigned 2  partition2                
///               %unsigned 1  direct2                   
///               %unsigned 3  mvs2                      
///               %unsigned 2  motion3                   
///               %unsigned 2  partition3                
///               %unsigned 1  direct3                   
///               %unsigned 3  mvs3                      
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      32b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_BLK
#define h_BLK (){}

    #define        BLK_skip                                    0x0
    #define        BLK_direct16x16                             0x1
    #define        BLK_4BLK                                    0x2
    #define        BLK_inter                                   0x3
    #define        BLK_IPCM                                    0x4
    #define        BLK_intra16x16                              0x5
    #define        BLK_intraNxN                                0x6
    ///////////////////////////////////////////////////////////

    #define     BA_BLK_motion                                  0x0000
    #define     B16BLK_motion                                  0x0000
    #define   LSb32BLK_motion                                     0
    #define   LSb16BLK_motion                                     0
    #define       bBLK_motion                                  2
    #define   MSK32BLK_motion                                     0x00000003
    #define        BLK_motion_Intra                                         0x0
    #define        BLK_motion_Forward                                       0x1
    #define        BLK_motion_Backward                                      0x2
    #define        BLK_motion_Bi                                            0x3

    #define     BA_BLK_partition                               0x0000
    #define     B16BLK_partition                               0x0000
    #define   LSb32BLK_partition                                  2
    #define   LSb16BLK_partition                                  2
    #define       bBLK_partition                               2
    #define   MSK32BLK_partition                                  0x0000000C
    #define        BLK_partition_1mv                                        0x0
    #define        BLK_partition_2mvLR                                      0x1
    #define        BLK_partition_2mvTB                                      0x2
    #define        BLK_partition_4mv                                        0x3
    #define        BLK_partition_4mvFLD                                     0x1

    #define     BA_BLK_direct                                  0x0000
    #define     B16BLK_direct                                  0x0000
    #define   LSb32BLK_direct                                     4
    #define   LSb16BLK_direct                                     4
    #define       bBLK_direct                                  1
    #define   MSK32BLK_direct                                     0x00000010

    #define     BA_BLK_mvs                                     0x0000
    #define     B16BLK_mvs                                     0x0000
    #define   LSb32BLK_mvs                                        5
    #define   LSb16BLK_mvs                                        5
    #define       bBLK_mvs                                     3
    #define   MSK32BLK_mvs                                        0x000000E0

    #define     BA_BLK_motion1                                 0x0001
    #define     B16BLK_motion1                                 0x0000
    #define   LSb32BLK_motion1                                    8
    #define   LSb16BLK_motion1                                    8
    #define       bBLK_motion1                                 2
    #define   MSK32BLK_motion1                                    0x00000300

    #define     BA_BLK_partition1                              0x0001
    #define     B16BLK_partition1                              0x0000
    #define   LSb32BLK_partition1                                 10
    #define   LSb16BLK_partition1                                 10
    #define       bBLK_partition1                              2
    #define   MSK32BLK_partition1                                 0x00000C00

    #define     BA_BLK_direct1                                 0x0001
    #define     B16BLK_direct1                                 0x0000
    #define   LSb32BLK_direct1                                    12
    #define   LSb16BLK_direct1                                    12
    #define       bBLK_direct1                                 1
    #define   MSK32BLK_direct1                                    0x00001000

    #define     BA_BLK_mvs1                                    0x0001
    #define     B16BLK_mvs1                                    0x0000
    #define   LSb32BLK_mvs1                                       13
    #define   LSb16BLK_mvs1                                       13
    #define       bBLK_mvs1                                    3
    #define   MSK32BLK_mvs1                                       0x0000E000

    #define     BA_BLK_motion2                                 0x0002
    #define     B16BLK_motion2                                 0x0002
    #define   LSb32BLK_motion2                                    16
    #define   LSb16BLK_motion2                                    0
    #define       bBLK_motion2                                 2
    #define   MSK32BLK_motion2                                    0x00030000

    #define     BA_BLK_partition2                              0x0002
    #define     B16BLK_partition2                              0x0002
    #define   LSb32BLK_partition2                                 18
    #define   LSb16BLK_partition2                                 2
    #define       bBLK_partition2                              2
    #define   MSK32BLK_partition2                                 0x000C0000

    #define     BA_BLK_direct2                                 0x0002
    #define     B16BLK_direct2                                 0x0002
    #define   LSb32BLK_direct2                                    20
    #define   LSb16BLK_direct2                                    4
    #define       bBLK_direct2                                 1
    #define   MSK32BLK_direct2                                    0x00100000

    #define     BA_BLK_mvs2                                    0x0002
    #define     B16BLK_mvs2                                    0x0002
    #define   LSb32BLK_mvs2                                       21
    #define   LSb16BLK_mvs2                                       5
    #define       bBLK_mvs2                                    3
    #define   MSK32BLK_mvs2                                       0x00E00000

    #define     BA_BLK_motion3                                 0x0003
    #define     B16BLK_motion3                                 0x0002
    #define   LSb32BLK_motion3                                    24
    #define   LSb16BLK_motion3                                    8
    #define       bBLK_motion3                                 2
    #define   MSK32BLK_motion3                                    0x03000000

    #define     BA_BLK_partition3                              0x0003
    #define     B16BLK_partition3                              0x0002
    #define   LSb32BLK_partition3                                 26
    #define   LSb16BLK_partition3                                 10
    #define       bBLK_partition3                              2
    #define   MSK32BLK_partition3                                 0x0C000000

    #define     BA_BLK_direct3                                 0x0003
    #define     B16BLK_direct3                                 0x0002
    #define   LSb32BLK_direct3                                    28
    #define   LSb16BLK_direct3                                    12
    #define       bBLK_direct3                                 1
    #define   MSK32BLK_direct3                                    0x10000000

    #define     BA_BLK_mvs3                                    0x0003
    #define     B16BLK_mvs3                                    0x0002
    #define   LSb32BLK_mvs3                                       29
    #define   LSb16BLK_mvs3                                       13
    #define       bBLK_mvs3                                    3
    #define   MSK32BLK_mvs3                                       0xE0000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_BLK {
    ///////////////////////////////////////////////////////////
    #define   GET32BLK_motion(r32)                             _BFGET_(r32, 1, 0)
    #define   SET32BLK_motion(r32,v)                           _BFSET_(r32, 1, 0,v)
    #define   GET16BLK_motion(r16)                             _BFGET_(r16, 1, 0)
    #define   SET16BLK_motion(r16,v)                           _BFSET_(r16, 1, 0,v)

    #define   GET32BLK_partition(r32)                          _BFGET_(r32, 3, 2)
    #define   SET32BLK_partition(r32,v)                        _BFSET_(r32, 3, 2,v)
    #define   GET16BLK_partition(r16)                          _BFGET_(r16, 3, 2)
    #define   SET16BLK_partition(r16,v)                        _BFSET_(r16, 3, 2,v)

    #define   GET32BLK_direct(r32)                             _BFGET_(r32, 4, 4)
    #define   SET32BLK_direct(r32,v)                           _BFSET_(r32, 4, 4,v)
    #define   GET16BLK_direct(r16)                             _BFGET_(r16, 4, 4)
    #define   SET16BLK_direct(r16,v)                           _BFSET_(r16, 4, 4,v)

    #define   GET32BLK_mvs(r32)                                _BFGET_(r32, 7, 5)
    #define   SET32BLK_mvs(r32,v)                              _BFSET_(r32, 7, 5,v)
    #define   GET16BLK_mvs(r16)                                _BFGET_(r16, 7, 5)
    #define   SET16BLK_mvs(r16,v)                              _BFSET_(r16, 7, 5,v)

    #define   GET32BLK_motion1(r32)                            _BFGET_(r32, 9, 8)
    #define   SET32BLK_motion1(r32,v)                          _BFSET_(r32, 9, 8,v)
    #define   GET16BLK_motion1(r16)                            _BFGET_(r16, 9, 8)
    #define   SET16BLK_motion1(r16,v)                          _BFSET_(r16, 9, 8,v)

    #define   GET32BLK_partition1(r32)                         _BFGET_(r32,11,10)
    #define   SET32BLK_partition1(r32,v)                       _BFSET_(r32,11,10,v)
    #define   GET16BLK_partition1(r16)                         _BFGET_(r16,11,10)
    #define   SET16BLK_partition1(r16,v)                       _BFSET_(r16,11,10,v)

    #define   GET32BLK_direct1(r32)                            _BFGET_(r32,12,12)
    #define   SET32BLK_direct1(r32,v)                          _BFSET_(r32,12,12,v)
    #define   GET16BLK_direct1(r16)                            _BFGET_(r16,12,12)
    #define   SET16BLK_direct1(r16,v)                          _BFSET_(r16,12,12,v)

    #define   GET32BLK_mvs1(r32)                               _BFGET_(r32,15,13)
    #define   SET32BLK_mvs1(r32,v)                             _BFSET_(r32,15,13,v)
    #define   GET16BLK_mvs1(r16)                               _BFGET_(r16,15,13)
    #define   SET16BLK_mvs1(r16,v)                             _BFSET_(r16,15,13,v)

    #define   GET32BLK_motion2(r32)                            _BFGET_(r32,17,16)
    #define   SET32BLK_motion2(r32,v)                          _BFSET_(r32,17,16,v)
    #define   GET16BLK_motion2(r16)                            _BFGET_(r16, 1, 0)
    #define   SET16BLK_motion2(r16,v)                          _BFSET_(r16, 1, 0,v)

    #define   GET32BLK_partition2(r32)                         _BFGET_(r32,19,18)
    #define   SET32BLK_partition2(r32,v)                       _BFSET_(r32,19,18,v)
    #define   GET16BLK_partition2(r16)                         _BFGET_(r16, 3, 2)
    #define   SET16BLK_partition2(r16,v)                       _BFSET_(r16, 3, 2,v)

    #define   GET32BLK_direct2(r32)                            _BFGET_(r32,20,20)
    #define   SET32BLK_direct2(r32,v)                          _BFSET_(r32,20,20,v)
    #define   GET16BLK_direct2(r16)                            _BFGET_(r16, 4, 4)
    #define   SET16BLK_direct2(r16,v)                          _BFSET_(r16, 4, 4,v)

    #define   GET32BLK_mvs2(r32)                               _BFGET_(r32,23,21)
    #define   SET32BLK_mvs2(r32,v)                             _BFSET_(r32,23,21,v)
    #define   GET16BLK_mvs2(r16)                               _BFGET_(r16, 7, 5)
    #define   SET16BLK_mvs2(r16,v)                             _BFSET_(r16, 7, 5,v)

    #define   GET32BLK_motion3(r32)                            _BFGET_(r32,25,24)
    #define   SET32BLK_motion3(r32,v)                          _BFSET_(r32,25,24,v)
    #define   GET16BLK_motion3(r16)                            _BFGET_(r16, 9, 8)
    #define   SET16BLK_motion3(r16,v)                          _BFSET_(r16, 9, 8,v)

    #define   GET32BLK_partition3(r32)                         _BFGET_(r32,27,26)
    #define   SET32BLK_partition3(r32,v)                       _BFSET_(r32,27,26,v)
    #define   GET16BLK_partition3(r16)                         _BFGET_(r16,11,10)
    #define   SET16BLK_partition3(r16,v)                       _BFSET_(r16,11,10,v)

    #define   GET32BLK_direct3(r32)                            _BFGET_(r32,28,28)
    #define   SET32BLK_direct3(r32,v)                          _BFSET_(r32,28,28,v)
    #define   GET16BLK_direct3(r16)                            _BFGET_(r16,12,12)
    #define   SET16BLK_direct3(r16,v)                          _BFSET_(r16,12,12,v)

    #define   GET32BLK_mvs3(r32)                               _BFGET_(r32,31,29)
    #define   SET32BLK_mvs3(r32,v)                             _BFSET_(r32,31,29,v)
    #define   GET16BLK_mvs3(r16)                               _BFGET_(r16,15,13)
    #define   SET16BLK_mvs3(r16,v)                             _BFSET_(r16,15,13,v)

            UNSG32 u_motion                                    :  2;
            UNSG32 u_partition                                 :  2;
            UNSG32 u_direct                                    :  1;
            UNSG32 u_mvs                                       :  3;
            UNSG32 u_motion1                                   :  2;
            UNSG32 u_partition1                                :  2;
            UNSG32 u_direct1                                   :  1;
            UNSG32 u_mvs1                                      :  3;
            UNSG32 u_motion2                                   :  2;
            UNSG32 u_partition2                                :  2;
            UNSG32 u_direct2                                   :  1;
            UNSG32 u_mvs2                                      :  3;
            UNSG32 u_motion3                                   :  2;
            UNSG32 u_partition3                                :  2;
            UNSG32 u_direct3                                   :  1;
            UNSG32 u_mvs3                                      :  3;
    ///////////////////////////////////////////////////////////
    } SIE_BLK;

    ///////////////////////////////////////////////////////////
     SIGN32 BLK_drvrd(SIE_BLK *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 BLK_drvwr(SIE_BLK *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void BLK_reset(SIE_BLK *p);
     SIGN32 BLK_cmp  (SIE_BLK *p, SIE_BLK *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define BLK_check(p,pie,pfx,hLOG) BLK_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define BLK_print(p,    pfx,hLOG) BLK_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: BLK
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE MV                                       (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 2  motion                    
///                                    ###
///                                    * Derived 8x8 block motion type (direct mode uses 'Bi'), see BLK.motion above
///                                    ###
///               %signed   14 X                         
///                                    ###
///                                    * Horizontal motion vector,
///                                    * Or MVD between parser & syntax processor
///                                    ###
///               %unsigned 3  type                      
///                                    ###
///                                    * Sub-set of mb_type, see MBPROP.type above
///                                    ###
///               %signed   13 Y                         
///                                    ###
///                                    * Vertical motion vector,
///                                    * Or MVD between parser & syntax processor
///                                    * End of MV
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      32b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_MV
#define h_MV (){}

    #define     BA_MV_motion                                   0x0000
    #define     B16MV_motion                                   0x0000
    #define   LSb32MV_motion                                      0
    #define   LSb16MV_motion                                      0
    #define       bMV_motion                                   2
    #define   MSK32MV_motion                                      0x00000003

    #define     BA_MV_X                                        0x0000
    #define     B16MV_X                                        0x0000
    #define   LSb32MV_X                                           2
    #define   LSb16MV_X                                           2
    #define       bMV_X                                        14
    #define   MSK32MV_X                                           0x0000FFFC

    #define     BA_MV_type                                     0x0002
    #define     B16MV_type                                     0x0002
    #define   LSb32MV_type                                        16
    #define   LSb16MV_type                                        0
    #define       bMV_type                                     3
    #define   MSK32MV_type                                        0x00070000

    #define     BA_MV_Y                                        0x0002
    #define     B16MV_Y                                        0x0002
    #define   LSb32MV_Y                                           19
    #define   LSb16MV_Y                                           3
    #define       bMV_Y                                        13
    #define   MSK32MV_Y                                           0xFFF80000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_MV {
    ///////////////////////////////////////////////////////////
    #define   GET32MV_motion(r32)                              _BFGET_(r32, 1, 0)
    #define   SET32MV_motion(r32,v)                            _BFSET_(r32, 1, 0,v)
    #define   GET16MV_motion(r16)                              _BFGET_(r16, 1, 0)
    #define   SET16MV_motion(r16,v)                            _BFSET_(r16, 1, 0,v)

    #define   GET32MV_X(r32)                                   _BFGET_(r32,15, 2)
    #define   SET32MV_X(r32,v)                                 _BFSET_(r32,15, 2,v)
    #define   GET16MV_X(r16)                                   _BFGET_(r16,15, 2)
    #define   SET16MV_X(r16,v)                                 _BFSET_(r16,15, 2,v)

    #define   GET32MV_type(r32)                                _BFGET_(r32,18,16)
    #define   SET32MV_type(r32,v)                              _BFSET_(r32,18,16,v)
    #define   GET16MV_type(r16)                                _BFGET_(r16, 2, 0)
    #define   SET16MV_type(r16,v)                              _BFSET_(r16, 2, 0,v)

    #define   GET32MV_Y(r32)                                   _BFGET_(r32,31,19)
    #define   SET32MV_Y(r32,v)                                 _BFSET_(r32,31,19,v)
    #define   GET16MV_Y(r16)                                   _BFGET_(r16,15, 3)
    #define   SET16MV_Y(r16,v)                                 _BFSET_(r16,15, 3,v)

            UNSG32 u_motion                                    :  2;
            UNSG32 s_X                                         : 14;
            UNSG32 u_type                                      :  3;
            UNSG32 s_Y                                         : 13;
    ///////////////////////////////////////////////////////////
    } SIE_MV;

    ///////////////////////////////////////////////////////////
     SIGN32 MV_drvrd(SIE_MV *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 MV_drvwr(SIE_MV *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void MV_reset(SIE_MV *p);
     SIGN32 MV_cmp  (SIE_MV *p, SIE_MV *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define MV_check(p,pie,pfx,hLOG) MV_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define MV_print(p,    pfx,hLOG) MV_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: MV
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE FCTX                    biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 6  rBID                      
///                                    ###
///                                    * Flatten 4x4s in each 8x8,
///                                    * 0 for intra (as well as direct mode between parser & syntax processor):
///                                    * Reference buffer ID, last 1b indicates access mode:
///                                    * 0: frame/progressive or top field
///                                    * 1: bottom field
///                                    ###
///               %unsigned 5  rIDX                      
///                                    ###
///                                    * Flatten 4x4s in each 8x8,
///                                    * 0 for intra (as well as P/B-skip & direct mode between parser & syntax processor):
///                                    * Syntax 'RefListIdx' directly decoded from bit stream (field information embedded)
///                                    ###
///               %unsigned 1  FLD                       
///                                    ###
///                                    * Flatten 4x4s in each 8x8:
///                                    * 1 for MBAFF field MB, 0 for otherwise
///                                    ###
///               %unsigned 1  equalpred                 
///                                    ###
///                                    * BLK property for CABAC only:
///                                    * Using block category ACV,
///                                    * (But flatten to all 4x4s in each 8x8s):
///                                    * = !Intra && !skipped && (bi-pred || fore-pred)
///                                    * NOTE: = 0 for direct mode
///                                    * VC-1:
///                                    * PMV output: for hybridPred
///                                    * PMV input: predictor_flag (0: use dominant PMV)
///                                    ###
///               %unsigned 1  transform                 
///                                    ###
///                                    * MB property (flatten in all 4x4s):
///                                    * H.264: if 8x8 transform
///                                    * Others: if field transform
///                                    ###
///               %unsigned 1  NCBPY                     
///                                    ###
///                                    * Loop-filter & CABAC use only:
///                                    * Luma using block category ACV (4th 4x4),
///                                    * (But flatten to all 4x4s in each 8x8s):
///                                    * = !(IPCM || cbp_luma)
///                                    ###
///               %unsigned 1  MixFLG                    
///                                    ###
///                                    * CABAC use only:
///                                    * CBP chroma using block category DCU/DCV,
///                                    * (Only at 3rd & 4th 4x4s in 3rd 8x8):
///                                    * bin[0]: IPCM || !(skipped || (cbp_chroma == 0))
///                                    * bin[1]: IPCM || !(skipped || (cbp_chroma != 2))
///                                    * Or:
///                                    * mb_type using block category DCY,
///                                    * (Only at 4th 4x4 in 4th 8x8):
///                                    * I_SLICE: = !I_NXN
///                                    * P_SLICE: = 0
///                                    * B_SLICE: = !skipped && !direct_16x16
///                                    * Or:
///                                    * intra-chroma_pred using block category DCI,
///                                    * (Only at 3rd 4x4 in 4th 8x8):
///                                    * = Intra && !IPCM && (intra_chroma_pred != 0)
///                                    * Or:
///                                    * Temporal context buffers for direct mode use
///                                    ###
///                                    : 8x8                       0x1
///                                                 ###
///                                                 * Only at 1st 4x4 in 1st 8x8:
///                                                 * = if MB contains no sub-8x8 partition
///                                                 ###
///                                    : 16x16                     0x1
///                                                 ###
///                                                 * Only at 1st 4x4 in 2nd 8x8:
///                                                 * = if MB contains only 1 partition (16x16)
///                                                 ###
///               %unsigned 1  CBFY                      
///                                    ###
///                                    * Loop-filter & CABAC use only:
///                                    * Using block category ACY (every 4x4s):
///                                    * = IPCM || cbf_luma_ac
///                                    ###
///               %unsigned 1  CBFUV                     
///                                    ###
///                                    * CABAC use only:
///                                    * Using block category ACU/ACV,
///                                    * (Only at 3rd & 4th 4x4 in each 8x8s):
///                                    * = IPCM || cbf_chroma_ac
///                                    ###
///               %unsigned 1  CBFDC                     
///                                    ###
///                                    * CABAC use only:
///                                    * LumaDC using block category DCY,
///                                    * (Only at 4th 4x4 in 4th 8x8):
///                                    * = IPCM || (I_16x16 && cbf_luma_dc)
///                                    * ChromaDC using block category DCU/DCV,
///                                    * (Only at 3rd 4x4 in 3rd & 4th 8x8):
///                                    * = IPCM || cbf_chroma_dc
///                                    ###
///               %unsigned 6  ABSMVDX                   
///                                    ###
///                                    * CABAC use only:
///                                    * MIN( ABS(MVD.x), 63 )
///                                    ###
///               %unsigned 7  ABSMVDY                   
///                                    ###
///                                    * CABAC use only:
///                                    * MIN( ABS(MVD.y), 127 )
///                                    ###
///     @ 0x00004                      (P)
///     # 0x00004 mv                   
///               $MV                  mv                REG          
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_FCTX
#define h_FCTX (){}

    #define     BA_FCTX_rBID                                   0x0000
    #define     B16FCTX_rBID                                   0x0000
    #define   LSb32FCTX_rBID                                      0
    #define   LSb16FCTX_rBID                                      0
    #define       bFCTX_rBID                                   6
    #define   MSK32FCTX_rBID                                      0x0000003F

    #define     BA_FCTX_rIDX                                   0x0000
    #define     B16FCTX_rIDX                                   0x0000
    #define   LSb32FCTX_rIDX                                      6
    #define   LSb16FCTX_rIDX                                      6
    #define       bFCTX_rIDX                                   5
    #define   MSK32FCTX_rIDX                                      0x000007C0

    #define     BA_FCTX_FLD                                    0x0001
    #define     B16FCTX_FLD                                    0x0000
    #define   LSb32FCTX_FLD                                       11
    #define   LSb16FCTX_FLD                                       11
    #define       bFCTX_FLD                                    1
    #define   MSK32FCTX_FLD                                       0x00000800

    #define     BA_FCTX_equalpred                              0x0001
    #define     B16FCTX_equalpred                              0x0000
    #define   LSb32FCTX_equalpred                                 12
    #define   LSb16FCTX_equalpred                                 12
    #define       bFCTX_equalpred                              1
    #define   MSK32FCTX_equalpred                                 0x00001000

    #define     BA_FCTX_transform                              0x0001
    #define     B16FCTX_transform                              0x0000
    #define   LSb32FCTX_transform                                 13
    #define   LSb16FCTX_transform                                 13
    #define       bFCTX_transform                              1
    #define   MSK32FCTX_transform                                 0x00002000

    #define     BA_FCTX_NCBPY                                  0x0001
    #define     B16FCTX_NCBPY                                  0x0000
    #define   LSb32FCTX_NCBPY                                     14
    #define   LSb16FCTX_NCBPY                                     14
    #define       bFCTX_NCBPY                                  1
    #define   MSK32FCTX_NCBPY                                     0x00004000

    #define     BA_FCTX_MixFLG                                 0x0001
    #define     B16FCTX_MixFLG                                 0x0000
    #define   LSb32FCTX_MixFLG                                    15
    #define   LSb16FCTX_MixFLG                                    15
    #define       bFCTX_MixFLG                                 1
    #define   MSK32FCTX_MixFLG                                    0x00008000
    #define        FCTX_MixFLG_8x8                                          0x1
    #define        FCTX_MixFLG_16x16                                        0x1

    #define     BA_FCTX_CBFY                                   0x0002
    #define     B16FCTX_CBFY                                   0x0002
    #define   LSb32FCTX_CBFY                                      16
    #define   LSb16FCTX_CBFY                                      0
    #define       bFCTX_CBFY                                   1
    #define   MSK32FCTX_CBFY                                      0x00010000

    #define     BA_FCTX_CBFUV                                  0x0002
    #define     B16FCTX_CBFUV                                  0x0002
    #define   LSb32FCTX_CBFUV                                     17
    #define   LSb16FCTX_CBFUV                                     1
    #define       bFCTX_CBFUV                                  1
    #define   MSK32FCTX_CBFUV                                     0x00020000

    #define     BA_FCTX_CBFDC                                  0x0002
    #define     B16FCTX_CBFDC                                  0x0002
    #define   LSb32FCTX_CBFDC                                     18
    #define   LSb16FCTX_CBFDC                                     2
    #define       bFCTX_CBFDC                                  1
    #define   MSK32FCTX_CBFDC                                     0x00040000

    #define     BA_FCTX_ABSMVDX                                0x0002
    #define     B16FCTX_ABSMVDX                                0x0002
    #define   LSb32FCTX_ABSMVDX                                   19
    #define   LSb16FCTX_ABSMVDX                                   3
    #define       bFCTX_ABSMVDX                                6
    #define   MSK32FCTX_ABSMVDX                                   0x01F80000

    #define     BA_FCTX_ABSMVDY                                0x0003
    #define     B16FCTX_ABSMVDY                                0x0002
    #define   LSb32FCTX_ABSMVDY                                   25
    #define   LSb16FCTX_ABSMVDY                                   9
    #define       bFCTX_ABSMVDY                                7
    #define   MSK32FCTX_ABSMVDY                                   0xFE000000
    ///////////////////////////////////////////////////////////
    #define     RA_FCTX_mv                                     0x0004
    ///////////////////////////////////////////////////////////

    typedef struct SIE_FCTX {
    ///////////////////////////////////////////////////////////
    #define   GET32FCTX_rBID(r32)                              _BFGET_(r32, 5, 0)
    #define   SET32FCTX_rBID(r32,v)                            _BFSET_(r32, 5, 0,v)
    #define   GET16FCTX_rBID(r16)                              _BFGET_(r16, 5, 0)
    #define   SET16FCTX_rBID(r16,v)                            _BFSET_(r16, 5, 0,v)

    #define   GET32FCTX_rIDX(r32)                              _BFGET_(r32,10, 6)
    #define   SET32FCTX_rIDX(r32,v)                            _BFSET_(r32,10, 6,v)
    #define   GET16FCTX_rIDX(r16)                              _BFGET_(r16,10, 6)
    #define   SET16FCTX_rIDX(r16,v)                            _BFSET_(r16,10, 6,v)

    #define   GET32FCTX_FLD(r32)                               _BFGET_(r32,11,11)
    #define   SET32FCTX_FLD(r32,v)                             _BFSET_(r32,11,11,v)
    #define   GET16FCTX_FLD(r16)                               _BFGET_(r16,11,11)
    #define   SET16FCTX_FLD(r16,v)                             _BFSET_(r16,11,11,v)

    #define   GET32FCTX_equalpred(r32)                         _BFGET_(r32,12,12)
    #define   SET32FCTX_equalpred(r32,v)                       _BFSET_(r32,12,12,v)
    #define   GET16FCTX_equalpred(r16)                         _BFGET_(r16,12,12)
    #define   SET16FCTX_equalpred(r16,v)                       _BFSET_(r16,12,12,v)

    #define   GET32FCTX_transform(r32)                         _BFGET_(r32,13,13)
    #define   SET32FCTX_transform(r32,v)                       _BFSET_(r32,13,13,v)
    #define   GET16FCTX_transform(r16)                         _BFGET_(r16,13,13)
    #define   SET16FCTX_transform(r16,v)                       _BFSET_(r16,13,13,v)

    #define   GET32FCTX_NCBPY(r32)                             _BFGET_(r32,14,14)
    #define   SET32FCTX_NCBPY(r32,v)                           _BFSET_(r32,14,14,v)
    #define   GET16FCTX_NCBPY(r16)                             _BFGET_(r16,14,14)
    #define   SET16FCTX_NCBPY(r16,v)                           _BFSET_(r16,14,14,v)

    #define   GET32FCTX_MixFLG(r32)                            _BFGET_(r32,15,15)
    #define   SET32FCTX_MixFLG(r32,v)                          _BFSET_(r32,15,15,v)
    #define   GET16FCTX_MixFLG(r16)                            _BFGET_(r16,15,15)
    #define   SET16FCTX_MixFLG(r16,v)                          _BFSET_(r16,15,15,v)

    #define   GET32FCTX_CBFY(r32)                              _BFGET_(r32,16,16)
    #define   SET32FCTX_CBFY(r32,v)                            _BFSET_(r32,16,16,v)
    #define   GET16FCTX_CBFY(r16)                              _BFGET_(r16, 0, 0)
    #define   SET16FCTX_CBFY(r16,v)                            _BFSET_(r16, 0, 0,v)

    #define   GET32FCTX_CBFUV(r32)                             _BFGET_(r32,17,17)
    #define   SET32FCTX_CBFUV(r32,v)                           _BFSET_(r32,17,17,v)
    #define   GET16FCTX_CBFUV(r16)                             _BFGET_(r16, 1, 1)
    #define   SET16FCTX_CBFUV(r16,v)                           _BFSET_(r16, 1, 1,v)

    #define   GET32FCTX_CBFDC(r32)                             _BFGET_(r32,18,18)
    #define   SET32FCTX_CBFDC(r32,v)                           _BFSET_(r32,18,18,v)
    #define   GET16FCTX_CBFDC(r16)                             _BFGET_(r16, 2, 2)
    #define   SET16FCTX_CBFDC(r16,v)                           _BFSET_(r16, 2, 2,v)

    #define   GET32FCTX_ABSMVDX(r32)                           _BFGET_(r32,24,19)
    #define   SET32FCTX_ABSMVDX(r32,v)                         _BFSET_(r32,24,19,v)
    #define   GET16FCTX_ABSMVDX(r16)                           _BFGET_(r16, 8, 3)
    #define   SET16FCTX_ABSMVDX(r16,v)                         _BFSET_(r16, 8, 3,v)

    #define   GET32FCTX_ABSMVDY(r32)                           _BFGET_(r32,31,25)
    #define   SET32FCTX_ABSMVDY(r32,v)                         _BFSET_(r32,31,25,v)
    #define   GET16FCTX_ABSMVDY(r16)                           _BFGET_(r16,15, 9)
    #define   SET16FCTX_ABSMVDY(r16,v)                         _BFSET_(r16,15, 9,v)

            UNSG32 u_rBID                                      :  6;
            UNSG32 u_rIDX                                      :  5;
            UNSG32 u_FLD                                       :  1;
            UNSG32 u_equalpred                                 :  1;
            UNSG32 u_transform                                 :  1;
            UNSG32 u_NCBPY                                     :  1;
            UNSG32 u_MixFLG                                    :  1;
            UNSG32 u_CBFY                                      :  1;
            UNSG32 u_CBFUV                                     :  1;
            UNSG32 u_CBFDC                                     :  1;
            UNSG32 u_ABSMVDX                                   :  6;
            UNSG32 u_ABSMVDY                                   :  7;
    ///////////////////////////////////////////////////////////
              SIE_MV                                           ie_mv;
    ///////////////////////////////////////////////////////////
    } SIE_FCTX;

    ///////////////////////////////////////////////////////////
     SIGN32 FCTX_drvrd(SIE_FCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 FCTX_drvwr(SIE_FCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void FCTX_reset(SIE_FCTX *p);
     SIGN32 FCTX_cmp  (SIE_FCTX *p, SIE_FCTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define FCTX_check(p,pie,pfx,hLOG) FCTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define FCTX_print(p,    pfx,hLOG) FCTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: FCTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE FCTX_VC1                biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 6  rBID                      
///                                    ###
///                                    * Flatten 4x4s in each 8x8,
///                                    * 0 for intra (as well as direct mode between parser & syntax processor):
///                                    * Reference buffer ID, last 1b indicates access mode:
///                                    * 0: frame/progressive or top field
///                                    * 1: bottom field
///                                    ###
///               %unsigned 5  rIDX                      
///                                    ###
///                                    * Flatten 4x4s in each 8x8,
///                                    * 0 for intra (as well as P/B-skip & direct mode between parser & syntax processor):
///                                    * Syntax 'RefListIdx' directly decoded from bit stream (field information embedded)
///                                    ###
///               %unsigned 1  FLD                       
///                                    ###
///                                    * Flatten 4x4s in each 8x8:
///                                    * 1 for MBAFF field MB, 0 for otherwise
///                                    ###
///               %unsigned 1  equalpred                 
///                                    ###
///                                    * BLK property for CABAC only:
///                                    * Using block category ACV,
///                                    * (But flatten to all 4x4s in each 8x8s):
///                                    * = !Intra && !skipped && (bi-pred || fore-pred)
///                                    * NOTE: = 0 for direct mode
///                                    * VC-1:
///                                    * PMV output: for hybridPred
///                                    * PMV input: predictor_flag (0: use dominant PMV)
///                                    ###
///               %unsigned 1  transform                 
///                                    ###
///                                    * MB property (flatten in all 4x4s):
///                                    * H.264: if 8x8 transform
///                                    * Others: if field transform
///                                    ###
///               %unsigned 1  NCBPY                     
///                                    ###
///                                    * Loop-filter & CABAC use only:
///                                    * Luma using block category ACV (4th 4x4),
///                                    * (But flatten to all 4x4s in each 8x8s):
///                                    * = !(IPCM || cbp_luma)
///                                    ###
///               %unsigned 1  MixFLG                    
///                                    ###
///                                    * CABAC use only:
///                                    * CBP chroma using block category DCU/DCV,
///                                    * (Only at 3rd & 4th 4x4s in 3rd 8x8):
///                                    * bin[0]: IPCM || !(skipped || (cbp_chroma == 0))
///                                    * bin[1]: IPCM || !(skipped || (cbp_chroma != 2))
///                                    * Or:
///                                    * mb_type using block category DCY,
///                                    * (Only at 4th 4x4 in 4th 8x8):
///                                    * I_SLICE: = !I_NXN
///                                    * P_SLICE: = 0
///                                    * B_SLICE: = !skipped && !direct_16x16
///                                    * Or:
///                                    * intra-chroma_pred using block category DCI,
///                                    * (Only at 3rd 4x4 in 4th 8x8):
///                                    * = Intra && !IPCM && (intra_chroma_pred != 0)
///                                    * Or:
///                                    * Temporal context buffers for direct mode use
///                                    ###
///                                    : 8x8                       0x1
///                                                 ###
///                                                 * Only at 1st 4x4 in 1st 8x8:
///                                                 * = if MB contains no sub-8x8 partition
///                                                 ###
///                                    : 16x16                     0x1
///                                                 ###
///                                                 * Only at 1st 4x4 in 2nd 8x8:
///                                                 * = if MB contains only 1 partition (16x16)
///                                                 ###
///               %unsigned 2  dctSelY                   
///                                    : 4x4                       0x0
///                                    : 8x8                       0x1
///                                    : 4x8                       0x2
///                                    : 8x4                       0x3
///                                                 ###
///                                                 * DCT transform type for Y, used for VC-1 Fop
///                                                 * flattened to all 4x4 blocks within transform block
///                                                 ###
///               %unsigned 1  CBFY                      
///                                    ###
///                                    * coded block (4x4) flag for Y, used for VC-1 Fop
///                                    ###
///               %unsigned 1  CBFY8x8                   
///                                    ###
///                                    * coded block (8x8) flag for Y, used for VC-1 MP Fop
///                                    ###
///               %unsigned 12 RSVD12                    
///     @ 0x00004                      (P)
///     # 0x00004 mv                   
///               $MV                  mv                REG          
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_FCTX_VC1
#define h_FCTX_VC1 (){}

    #define     BA_FCTX_VC1_rBID                               0x0000
    #define     B16FCTX_VC1_rBID                               0x0000
    #define   LSb32FCTX_VC1_rBID                                  0
    #define   LSb16FCTX_VC1_rBID                                  0
    #define       bFCTX_VC1_rBID                               6
    #define   MSK32FCTX_VC1_rBID                                  0x0000003F

    #define     BA_FCTX_VC1_rIDX                               0x0000
    #define     B16FCTX_VC1_rIDX                               0x0000
    #define   LSb32FCTX_VC1_rIDX                                  6
    #define   LSb16FCTX_VC1_rIDX                                  6
    #define       bFCTX_VC1_rIDX                               5
    #define   MSK32FCTX_VC1_rIDX                                  0x000007C0

    #define     BA_FCTX_VC1_FLD                                0x0001
    #define     B16FCTX_VC1_FLD                                0x0000
    #define   LSb32FCTX_VC1_FLD                                   11
    #define   LSb16FCTX_VC1_FLD                                   11
    #define       bFCTX_VC1_FLD                                1
    #define   MSK32FCTX_VC1_FLD                                   0x00000800

    #define     BA_FCTX_VC1_equalpred                          0x0001
    #define     B16FCTX_VC1_equalpred                          0x0000
    #define   LSb32FCTX_VC1_equalpred                             12
    #define   LSb16FCTX_VC1_equalpred                             12
    #define       bFCTX_VC1_equalpred                          1
    #define   MSK32FCTX_VC1_equalpred                             0x00001000

    #define     BA_FCTX_VC1_transform                          0x0001
    #define     B16FCTX_VC1_transform                          0x0000
    #define   LSb32FCTX_VC1_transform                             13
    #define   LSb16FCTX_VC1_transform                             13
    #define       bFCTX_VC1_transform                          1
    #define   MSK32FCTX_VC1_transform                             0x00002000

    #define     BA_FCTX_VC1_NCBPY                              0x0001
    #define     B16FCTX_VC1_NCBPY                              0x0000
    #define   LSb32FCTX_VC1_NCBPY                                 14
    #define   LSb16FCTX_VC1_NCBPY                                 14
    #define       bFCTX_VC1_NCBPY                              1
    #define   MSK32FCTX_VC1_NCBPY                                 0x00004000

    #define     BA_FCTX_VC1_MixFLG                             0x0001
    #define     B16FCTX_VC1_MixFLG                             0x0000
    #define   LSb32FCTX_VC1_MixFLG                                15
    #define   LSb16FCTX_VC1_MixFLG                                15
    #define       bFCTX_VC1_MixFLG                             1
    #define   MSK32FCTX_VC1_MixFLG                                0x00008000
    #define        FCTX_VC1_MixFLG_8x8                                      0x1
    #define        FCTX_VC1_MixFLG_16x16                                    0x1

    #define     BA_FCTX_VC1_dctSelY                            0x0002
    #define     B16FCTX_VC1_dctSelY                            0x0002
    #define   LSb32FCTX_VC1_dctSelY                               16
    #define   LSb16FCTX_VC1_dctSelY                               0
    #define       bFCTX_VC1_dctSelY                            2
    #define   MSK32FCTX_VC1_dctSelY                               0x00030000
    #define        FCTX_VC1_dctSelY_4x4                                     0x0
    #define        FCTX_VC1_dctSelY_8x8                                     0x1
    #define        FCTX_VC1_dctSelY_4x8                                     0x2
    #define        FCTX_VC1_dctSelY_8x4                                     0x3

    #define     BA_FCTX_VC1_CBFY                               0x0002
    #define     B16FCTX_VC1_CBFY                               0x0002
    #define   LSb32FCTX_VC1_CBFY                                  18
    #define   LSb16FCTX_VC1_CBFY                                  2
    #define       bFCTX_VC1_CBFY                               1
    #define   MSK32FCTX_VC1_CBFY                                  0x00040000

    #define     BA_FCTX_VC1_CBFY8x8                            0x0002
    #define     B16FCTX_VC1_CBFY8x8                            0x0002
    #define   LSb32FCTX_VC1_CBFY8x8                               19
    #define   LSb16FCTX_VC1_CBFY8x8                               3
    #define       bFCTX_VC1_CBFY8x8                            1
    #define   MSK32FCTX_VC1_CBFY8x8                               0x00080000

    #define     BA_FCTX_VC1_RSVD12                             0x0002
    #define     B16FCTX_VC1_RSVD12                             0x0002
    #define   LSb32FCTX_VC1_RSVD12                                20
    #define   LSb16FCTX_VC1_RSVD12                                4
    #define       bFCTX_VC1_RSVD12                             12
    #define   MSK32FCTX_VC1_RSVD12                                0xFFF00000
    ///////////////////////////////////////////////////////////
    #define     RA_FCTX_VC1_mv                                 0x0004
    ///////////////////////////////////////////////////////////

    typedef struct SIE_FCTX_VC1 {
    ///////////////////////////////////////////////////////////
    #define   GET32FCTX_VC1_rBID(r32)                          _BFGET_(r32, 5, 0)
    #define   SET32FCTX_VC1_rBID(r32,v)                        _BFSET_(r32, 5, 0,v)
    #define   GET16FCTX_VC1_rBID(r16)                          _BFGET_(r16, 5, 0)
    #define   SET16FCTX_VC1_rBID(r16,v)                        _BFSET_(r16, 5, 0,v)

    #define   GET32FCTX_VC1_rIDX(r32)                          _BFGET_(r32,10, 6)
    #define   SET32FCTX_VC1_rIDX(r32,v)                        _BFSET_(r32,10, 6,v)
    #define   GET16FCTX_VC1_rIDX(r16)                          _BFGET_(r16,10, 6)
    #define   SET16FCTX_VC1_rIDX(r16,v)                        _BFSET_(r16,10, 6,v)

    #define   GET32FCTX_VC1_FLD(r32)                           _BFGET_(r32,11,11)
    #define   SET32FCTX_VC1_FLD(r32,v)                         _BFSET_(r32,11,11,v)
    #define   GET16FCTX_VC1_FLD(r16)                           _BFGET_(r16,11,11)
    #define   SET16FCTX_VC1_FLD(r16,v)                         _BFSET_(r16,11,11,v)

    #define   GET32FCTX_VC1_equalpred(r32)                     _BFGET_(r32,12,12)
    #define   SET32FCTX_VC1_equalpred(r32,v)                   _BFSET_(r32,12,12,v)
    #define   GET16FCTX_VC1_equalpred(r16)                     _BFGET_(r16,12,12)
    #define   SET16FCTX_VC1_equalpred(r16,v)                   _BFSET_(r16,12,12,v)

    #define   GET32FCTX_VC1_transform(r32)                     _BFGET_(r32,13,13)
    #define   SET32FCTX_VC1_transform(r32,v)                   _BFSET_(r32,13,13,v)
    #define   GET16FCTX_VC1_transform(r16)                     _BFGET_(r16,13,13)
    #define   SET16FCTX_VC1_transform(r16,v)                   _BFSET_(r16,13,13,v)

    #define   GET32FCTX_VC1_NCBPY(r32)                         _BFGET_(r32,14,14)
    #define   SET32FCTX_VC1_NCBPY(r32,v)                       _BFSET_(r32,14,14,v)
    #define   GET16FCTX_VC1_NCBPY(r16)                         _BFGET_(r16,14,14)
    #define   SET16FCTX_VC1_NCBPY(r16,v)                       _BFSET_(r16,14,14,v)

    #define   GET32FCTX_VC1_MixFLG(r32)                        _BFGET_(r32,15,15)
    #define   SET32FCTX_VC1_MixFLG(r32,v)                      _BFSET_(r32,15,15,v)
    #define   GET16FCTX_VC1_MixFLG(r16)                        _BFGET_(r16,15,15)
    #define   SET16FCTX_VC1_MixFLG(r16,v)                      _BFSET_(r16,15,15,v)

    #define   GET32FCTX_VC1_dctSelY(r32)                       _BFGET_(r32,17,16)
    #define   SET32FCTX_VC1_dctSelY(r32,v)                     _BFSET_(r32,17,16,v)
    #define   GET16FCTX_VC1_dctSelY(r16)                       _BFGET_(r16, 1, 0)
    #define   SET16FCTX_VC1_dctSelY(r16,v)                     _BFSET_(r16, 1, 0,v)

    #define   GET32FCTX_VC1_CBFY(r32)                          _BFGET_(r32,18,18)
    #define   SET32FCTX_VC1_CBFY(r32,v)                        _BFSET_(r32,18,18,v)
    #define   GET16FCTX_VC1_CBFY(r16)                          _BFGET_(r16, 2, 2)
    #define   SET16FCTX_VC1_CBFY(r16,v)                        _BFSET_(r16, 2, 2,v)

    #define   GET32FCTX_VC1_CBFY8x8(r32)                       _BFGET_(r32,19,19)
    #define   SET32FCTX_VC1_CBFY8x8(r32,v)                     _BFSET_(r32,19,19,v)
    #define   GET16FCTX_VC1_CBFY8x8(r16)                       _BFGET_(r16, 3, 3)
    #define   SET16FCTX_VC1_CBFY8x8(r16,v)                     _BFSET_(r16, 3, 3,v)

    #define   GET32FCTX_VC1_RSVD12(r32)                        _BFGET_(r32,31,20)
    #define   SET32FCTX_VC1_RSVD12(r32,v)                      _BFSET_(r32,31,20,v)
    #define   GET16FCTX_VC1_RSVD12(r16)                        _BFGET_(r16,15, 4)
    #define   SET16FCTX_VC1_RSVD12(r16,v)                      _BFSET_(r16,15, 4,v)

            UNSG32 u_rBID                                      :  6;
            UNSG32 u_rIDX                                      :  5;
            UNSG32 u_FLD                                       :  1;
            UNSG32 u_equalpred                                 :  1;
            UNSG32 u_transform                                 :  1;
            UNSG32 u_NCBPY                                     :  1;
            UNSG32 u_MixFLG                                    :  1;
            UNSG32 u_dctSelY                                   :  2;
            UNSG32 u_CBFY                                      :  1;
            UNSG32 u_CBFY8x8                                   :  1;
            UNSG32 u_RSVD12                                    : 12;
    ///////////////////////////////////////////////////////////
              SIE_MV                                           ie_mv;
    ///////////////////////////////////////////////////////////
    } SIE_FCTX_VC1;

    ///////////////////////////////////////////////////////////
     SIGN32 FCTX_VC1_drvrd(SIE_FCTX_VC1 *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 FCTX_VC1_drvwr(SIE_FCTX_VC1 *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void FCTX_VC1_reset(SIE_FCTX_VC1 *p);
     SIGN32 FCTX_VC1_cmp  (SIE_FCTX_VC1 *p, SIE_FCTX_VC1 *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define FCTX_VC1_check(p,pie,pfx,hLOG) FCTX_VC1_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define FCTX_VC1_print(p,    pfx,hLOG) FCTX_VC1_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: FCTX_VC1
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE FCTX_RV9                biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 6  rBID                      
///                                    ###
///                                    * Flatten 4x4s in each 8x8,
///                                    * 0 for intra (as well as direct mode between parser & syntax processor):
///                                    * Reference buffer ID, last 1b indicates access mode:
///                                    * 0: frame/progressive or top field
///                                    * 1: bottom field
///                                    ###
///               %unsigned 5  rIDX                      
///                                    ###
///                                    * Flatten 4x4s in each 8x8,
///                                    * 0 for intra (as well as P/B-skip & direct mode between parser & syntax processor):
///                                    * Syntax 'RefListIdx' directly decoded from bit stream (field information embedded)
///                                    ###
///               %unsigned 1  FLD                       
///                                    ###
///                                    * Flatten 4x4s in each 8x8:
///                                    * 1 for MBAFF field MB, 0 for otherwise
///                                    ###
///               %unsigned 1  equalpred                 
///                                    ###
///                                    * BLK property for CABAC only:
///                                    * Using block category ACV,
///                                    * (But flatten to all 4x4s in each 8x8s):
///                                    * = !Intra && !skipped && (bi-pred || fore-pred)
///                                    * NOTE: = 0 for direct mode
///                                    * VC-1:
///                                    * PMV output: for hybridPred
///                                    * PMV input: predictor_flag (0: use dominant PMV)
///                                    ###
///               %unsigned 1  transform                 
///                                    ###
///                                    * MB property (flatten in all 4x4s):
///                                    * H.264: if 8x8 transform
///                                    * Others: if field transform
///                                    ###
///               %unsigned 1  NCBPY                     
///                                    ###
///                                    * Loop-filter & CABAC use only:
///                                    * Luma using block category ACV (4th 4x4),
///                                    * (But flatten to all 4x4s in each 8x8s):
///                                    * = !(IPCM || cbp_luma)
///                                    ###
///               %unsigned 1  MixFLG                    
///                                    ###
///                                    * CABAC use only:
///                                    * CBP chroma using block category DCU/DCV,
///                                    * (Only at 3rd & 4th 4x4s in 3rd 8x8):
///                                    * bin[0]: IPCM || !(skipped || (cbp_chroma == 0))
///                                    * bin[1]: IPCM || !(skipped || (cbp_chroma != 2))
///                                    * Or:
///                                    * mb_type using block category DCY,
///                                    * (Only at 4th 4x4 in 4th 8x8):
///                                    * I_SLICE: = !I_NXN
///                                    * P_SLICE: = 0
///                                    * B_SLICE: = !skipped && !direct_16x16
///                                    * Or:
///                                    * intra-chroma_pred using block category DCI,
///                                    * (Only at 3rd 4x4 in 4th 8x8):
///                                    * = Intra && !IPCM && (intra_chroma_pred != 0)
///                                    * Or:
///                                    * Temporal context buffers for direct mode use
///                                    ###
///                                    : 8x8                       0x1
///                                                 ###
///                                                 * Only at 1st 4x4 in 1st 8x8:
///                                                 * = if MB contains no sub-8x8 partition
///                                                 ###
///                                    : 16x16                     0x1
///                                                 ###
///                                                 * Only at 1st 4x4 in 2nd 8x8:
///                                                 * = if MB contains only 1 partition (16x16)
///                                                 ###
///               %unsigned 1  CBPY                      
///                                    ###
///                                    * CBP for Y
///                                    ###
///               %unsigned 1  CBPU                      
///                                    ###
///                                    * CBP for U
///                                    ###
///               %unsigned 1  CBPV                      
///                                    ###
///                                    * CBP for Y
///                                    ###
///               %unsigned 2  BsY                       
///                                    ###
///                                    * Block strength for Y
///                                    ###
///               %unsigned 2  BsU                       
///                                    ###
///                                    * Block strength for U
///                                    ###
///               %unsigned 2  BsV                       
///                                    ###
///                                    * Block strength for V
///                                    ###
///               %unsigned 7  Rsvd                      
///                                    ###
///                                    * Reserved
///                                    ###
///     @ 0x00004                      (P)
///     # 0x00004 mv                   
///               $MV                  mv                REG          
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_FCTX_RV9
#define h_FCTX_RV9 (){}

    #define     BA_FCTX_RV9_rBID                               0x0000
    #define     B16FCTX_RV9_rBID                               0x0000
    #define   LSb32FCTX_RV9_rBID                                  0
    #define   LSb16FCTX_RV9_rBID                                  0
    #define       bFCTX_RV9_rBID                               6
    #define   MSK32FCTX_RV9_rBID                                  0x0000003F

    #define     BA_FCTX_RV9_rIDX                               0x0000
    #define     B16FCTX_RV9_rIDX                               0x0000
    #define   LSb32FCTX_RV9_rIDX                                  6
    #define   LSb16FCTX_RV9_rIDX                                  6
    #define       bFCTX_RV9_rIDX                               5
    #define   MSK32FCTX_RV9_rIDX                                  0x000007C0

    #define     BA_FCTX_RV9_FLD                                0x0001
    #define     B16FCTX_RV9_FLD                                0x0000
    #define   LSb32FCTX_RV9_FLD                                   11
    #define   LSb16FCTX_RV9_FLD                                   11
    #define       bFCTX_RV9_FLD                                1
    #define   MSK32FCTX_RV9_FLD                                   0x00000800

    #define     BA_FCTX_RV9_equalpred                          0x0001
    #define     B16FCTX_RV9_equalpred                          0x0000
    #define   LSb32FCTX_RV9_equalpred                             12
    #define   LSb16FCTX_RV9_equalpred                             12
    #define       bFCTX_RV9_equalpred                          1
    #define   MSK32FCTX_RV9_equalpred                             0x00001000

    #define     BA_FCTX_RV9_transform                          0x0001
    #define     B16FCTX_RV9_transform                          0x0000
    #define   LSb32FCTX_RV9_transform                             13
    #define   LSb16FCTX_RV9_transform                             13
    #define       bFCTX_RV9_transform                          1
    #define   MSK32FCTX_RV9_transform                             0x00002000

    #define     BA_FCTX_RV9_NCBPY                              0x0001
    #define     B16FCTX_RV9_NCBPY                              0x0000
    #define   LSb32FCTX_RV9_NCBPY                                 14
    #define   LSb16FCTX_RV9_NCBPY                                 14
    #define       bFCTX_RV9_NCBPY                              1
    #define   MSK32FCTX_RV9_NCBPY                                 0x00004000

    #define     BA_FCTX_RV9_MixFLG                             0x0001
    #define     B16FCTX_RV9_MixFLG                             0x0000
    #define   LSb32FCTX_RV9_MixFLG                                15
    #define   LSb16FCTX_RV9_MixFLG                                15
    #define       bFCTX_RV9_MixFLG                             1
    #define   MSK32FCTX_RV9_MixFLG                                0x00008000
    #define        FCTX_RV9_MixFLG_8x8                                      0x1
    #define        FCTX_RV9_MixFLG_16x16                                    0x1

    #define     BA_FCTX_RV9_CBPY                               0x0002
    #define     B16FCTX_RV9_CBPY                               0x0002
    #define   LSb32FCTX_RV9_CBPY                                  16
    #define   LSb16FCTX_RV9_CBPY                                  0
    #define       bFCTX_RV9_CBPY                               1
    #define   MSK32FCTX_RV9_CBPY                                  0x00010000

    #define     BA_FCTX_RV9_CBPU                               0x0002
    #define     B16FCTX_RV9_CBPU                               0x0002
    #define   LSb32FCTX_RV9_CBPU                                  17
    #define   LSb16FCTX_RV9_CBPU                                  1
    #define       bFCTX_RV9_CBPU                               1
    #define   MSK32FCTX_RV9_CBPU                                  0x00020000

    #define     BA_FCTX_RV9_CBPV                               0x0002
    #define     B16FCTX_RV9_CBPV                               0x0002
    #define   LSb32FCTX_RV9_CBPV                                  18
    #define   LSb16FCTX_RV9_CBPV                                  2
    #define       bFCTX_RV9_CBPV                               1
    #define   MSK32FCTX_RV9_CBPV                                  0x00040000

    #define     BA_FCTX_RV9_BsY                                0x0002
    #define     B16FCTX_RV9_BsY                                0x0002
    #define   LSb32FCTX_RV9_BsY                                   19
    #define   LSb16FCTX_RV9_BsY                                   3
    #define       bFCTX_RV9_BsY                                2
    #define   MSK32FCTX_RV9_BsY                                   0x00180000

    #define     BA_FCTX_RV9_BsU                                0x0002
    #define     B16FCTX_RV9_BsU                                0x0002
    #define   LSb32FCTX_RV9_BsU                                   21
    #define   LSb16FCTX_RV9_BsU                                   5
    #define       bFCTX_RV9_BsU                                2
    #define   MSK32FCTX_RV9_BsU                                   0x00600000

    #define     BA_FCTX_RV9_BsV                                0x0002
    #define     B16FCTX_RV9_BsV                                0x0002
    #define   LSb32FCTX_RV9_BsV                                   23
    #define   LSb16FCTX_RV9_BsV                                   7
    #define       bFCTX_RV9_BsV                                2
    #define   MSK32FCTX_RV9_BsV                                   0x01800000

    #define     BA_FCTX_RV9_Rsvd                               0x0003
    #define     B16FCTX_RV9_Rsvd                               0x0002
    #define   LSb32FCTX_RV9_Rsvd                                  25
    #define   LSb16FCTX_RV9_Rsvd                                  9
    #define       bFCTX_RV9_Rsvd                               7
    #define   MSK32FCTX_RV9_Rsvd                                  0xFE000000
    ///////////////////////////////////////////////////////////
    #define     RA_FCTX_RV9_mv                                 0x0004
    ///////////////////////////////////////////////////////////

    typedef struct SIE_FCTX_RV9 {
    ///////////////////////////////////////////////////////////
    #define   GET32FCTX_RV9_rBID(r32)                          _BFGET_(r32, 5, 0)
    #define   SET32FCTX_RV9_rBID(r32,v)                        _BFSET_(r32, 5, 0,v)
    #define   GET16FCTX_RV9_rBID(r16)                          _BFGET_(r16, 5, 0)
    #define   SET16FCTX_RV9_rBID(r16,v)                        _BFSET_(r16, 5, 0,v)

    #define   GET32FCTX_RV9_rIDX(r32)                          _BFGET_(r32,10, 6)
    #define   SET32FCTX_RV9_rIDX(r32,v)                        _BFSET_(r32,10, 6,v)
    #define   GET16FCTX_RV9_rIDX(r16)                          _BFGET_(r16,10, 6)
    #define   SET16FCTX_RV9_rIDX(r16,v)                        _BFSET_(r16,10, 6,v)

    #define   GET32FCTX_RV9_FLD(r32)                           _BFGET_(r32,11,11)
    #define   SET32FCTX_RV9_FLD(r32,v)                         _BFSET_(r32,11,11,v)
    #define   GET16FCTX_RV9_FLD(r16)                           _BFGET_(r16,11,11)
    #define   SET16FCTX_RV9_FLD(r16,v)                         _BFSET_(r16,11,11,v)

    #define   GET32FCTX_RV9_equalpred(r32)                     _BFGET_(r32,12,12)
    #define   SET32FCTX_RV9_equalpred(r32,v)                   _BFSET_(r32,12,12,v)
    #define   GET16FCTX_RV9_equalpred(r16)                     _BFGET_(r16,12,12)
    #define   SET16FCTX_RV9_equalpred(r16,v)                   _BFSET_(r16,12,12,v)

    #define   GET32FCTX_RV9_transform(r32)                     _BFGET_(r32,13,13)
    #define   SET32FCTX_RV9_transform(r32,v)                   _BFSET_(r32,13,13,v)
    #define   GET16FCTX_RV9_transform(r16)                     _BFGET_(r16,13,13)
    #define   SET16FCTX_RV9_transform(r16,v)                   _BFSET_(r16,13,13,v)

    #define   GET32FCTX_RV9_NCBPY(r32)                         _BFGET_(r32,14,14)
    #define   SET32FCTX_RV9_NCBPY(r32,v)                       _BFSET_(r32,14,14,v)
    #define   GET16FCTX_RV9_NCBPY(r16)                         _BFGET_(r16,14,14)
    #define   SET16FCTX_RV9_NCBPY(r16,v)                       _BFSET_(r16,14,14,v)

    #define   GET32FCTX_RV9_MixFLG(r32)                        _BFGET_(r32,15,15)
    #define   SET32FCTX_RV9_MixFLG(r32,v)                      _BFSET_(r32,15,15,v)
    #define   GET16FCTX_RV9_MixFLG(r16)                        _BFGET_(r16,15,15)
    #define   SET16FCTX_RV9_MixFLG(r16,v)                      _BFSET_(r16,15,15,v)

    #define   GET32FCTX_RV9_CBPY(r32)                          _BFGET_(r32,16,16)
    #define   SET32FCTX_RV9_CBPY(r32,v)                        _BFSET_(r32,16,16,v)
    #define   GET16FCTX_RV9_CBPY(r16)                          _BFGET_(r16, 0, 0)
    #define   SET16FCTX_RV9_CBPY(r16,v)                        _BFSET_(r16, 0, 0,v)

    #define   GET32FCTX_RV9_CBPU(r32)                          _BFGET_(r32,17,17)
    #define   SET32FCTX_RV9_CBPU(r32,v)                        _BFSET_(r32,17,17,v)
    #define   GET16FCTX_RV9_CBPU(r16)                          _BFGET_(r16, 1, 1)
    #define   SET16FCTX_RV9_CBPU(r16,v)                        _BFSET_(r16, 1, 1,v)

    #define   GET32FCTX_RV9_CBPV(r32)                          _BFGET_(r32,18,18)
    #define   SET32FCTX_RV9_CBPV(r32,v)                        _BFSET_(r32,18,18,v)
    #define   GET16FCTX_RV9_CBPV(r16)                          _BFGET_(r16, 2, 2)
    #define   SET16FCTX_RV9_CBPV(r16,v)                        _BFSET_(r16, 2, 2,v)

    #define   GET32FCTX_RV9_BsY(r32)                           _BFGET_(r32,20,19)
    #define   SET32FCTX_RV9_BsY(r32,v)                         _BFSET_(r32,20,19,v)
    #define   GET16FCTX_RV9_BsY(r16)                           _BFGET_(r16, 4, 3)
    #define   SET16FCTX_RV9_BsY(r16,v)                         _BFSET_(r16, 4, 3,v)

    #define   GET32FCTX_RV9_BsU(r32)                           _BFGET_(r32,22,21)
    #define   SET32FCTX_RV9_BsU(r32,v)                         _BFSET_(r32,22,21,v)
    #define   GET16FCTX_RV9_BsU(r16)                           _BFGET_(r16, 6, 5)
    #define   SET16FCTX_RV9_BsU(r16,v)                         _BFSET_(r16, 6, 5,v)

    #define   GET32FCTX_RV9_BsV(r32)                           _BFGET_(r32,24,23)
    #define   SET32FCTX_RV9_BsV(r32,v)                         _BFSET_(r32,24,23,v)
    #define   GET16FCTX_RV9_BsV(r16)                           _BFGET_(r16, 8, 7)
    #define   SET16FCTX_RV9_BsV(r16,v)                         _BFSET_(r16, 8, 7,v)

    #define   GET32FCTX_RV9_Rsvd(r32)                          _BFGET_(r32,31,25)
    #define   SET32FCTX_RV9_Rsvd(r32,v)                        _BFSET_(r32,31,25,v)
    #define   GET16FCTX_RV9_Rsvd(r16)                          _BFGET_(r16,15, 9)
    #define   SET16FCTX_RV9_Rsvd(r16,v)                        _BFSET_(r16,15, 9,v)

            UNSG32 u_rBID                                      :  6;
            UNSG32 u_rIDX                                      :  5;
            UNSG32 u_FLD                                       :  1;
            UNSG32 u_equalpred                                 :  1;
            UNSG32 u_transform                                 :  1;
            UNSG32 u_NCBPY                                     :  1;
            UNSG32 u_MixFLG                                    :  1;
            UNSG32 u_CBPY                                      :  1;
            UNSG32 u_CBPU                                      :  1;
            UNSG32 u_CBPV                                      :  1;
            UNSG32 u_BsY                                       :  2;
            UNSG32 u_BsU                                       :  2;
            UNSG32 u_BsV                                       :  2;
            UNSG32 u_Rsvd                                      :  7;
    ///////////////////////////////////////////////////////////
              SIE_MV                                           ie_mv;
    ///////////////////////////////////////////////////////////
    } SIE_FCTX_RV9;

    ///////////////////////////////////////////////////////////
     SIGN32 FCTX_RV9_drvrd(SIE_FCTX_RV9 *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 FCTX_RV9_drvwr(SIE_FCTX_RV9 *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void FCTX_RV9_reset(SIE_FCTX_RV9 *p);
     SIGN32 FCTX_RV9_cmp  (SIE_FCTX_RV9 *p, SIE_FCTX_RV9 *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define FCTX_RV9_check(p,pie,pfx,hLOG) FCTX_RV9_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define FCTX_RV9_print(p,    pfx,hLOG) FCTX_RV9_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: FCTX_RV9
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE BCTX                    biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 6  rBID                      
///               %unsigned 5  rIDX                      
///               %unsigned 1  FLD                       
///               %unsigned 1  equalpred                 
///                                    ###
///                                    * BLK property for CABAC only:
///                                    * Using block category ACV,
///                                    * (Only at 4th 4x4 in each 8x8s):
///                                    * = !Intra && !skipped && (bi-pred || back-pred)
///                                    * NOTE: = 0 for direct mode
///                                    ###
///               %unsigned 3  RSVD                      
///                                    ###
///                                    * Reserved
///                                    ###
///               %unsigned 3  dctSel                    
///                                    : 8x8                       0x0
///                                    : 8x4                       0x1
///                                    : 4x8                       0x2
///                                    : 4x4                       0x3
///                                                 ###
///                                                 * VC-1 use only
///                                                 ###
///               %unsigned 6  ABSMVDX                   
///               %unsigned 7  ABSMVDY                   
///     @ 0x00004                      (P)
///     # 0x00004 mv                   
///               $MV                  mv                REG          
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_BCTX
#define h_BCTX (){}

    #define     BA_BCTX_rBID                                   0x0000
    #define     B16BCTX_rBID                                   0x0000
    #define   LSb32BCTX_rBID                                      0
    #define   LSb16BCTX_rBID                                      0
    #define       bBCTX_rBID                                   6
    #define   MSK32BCTX_rBID                                      0x0000003F

    #define     BA_BCTX_rIDX                                   0x0000
    #define     B16BCTX_rIDX                                   0x0000
    #define   LSb32BCTX_rIDX                                      6
    #define   LSb16BCTX_rIDX                                      6
    #define       bBCTX_rIDX                                   5
    #define   MSK32BCTX_rIDX                                      0x000007C0

    #define     BA_BCTX_FLD                                    0x0001
    #define     B16BCTX_FLD                                    0x0000
    #define   LSb32BCTX_FLD                                       11
    #define   LSb16BCTX_FLD                                       11
    #define       bBCTX_FLD                                    1
    #define   MSK32BCTX_FLD                                       0x00000800

    #define     BA_BCTX_equalpred                              0x0001
    #define     B16BCTX_equalpred                              0x0000
    #define   LSb32BCTX_equalpred                                 12
    #define   LSb16BCTX_equalpred                                 12
    #define       bBCTX_equalpred                              1
    #define   MSK32BCTX_equalpred                                 0x00001000

    #define     BA_BCTX_RSVD                                   0x0001
    #define     B16BCTX_RSVD                                   0x0000
    #define   LSb32BCTX_RSVD                                      13
    #define   LSb16BCTX_RSVD                                      13
    #define       bBCTX_RSVD                                   3
    #define   MSK32BCTX_RSVD                                      0x0000E000

    #define     BA_BCTX_dctSel                                 0x0002
    #define     B16BCTX_dctSel                                 0x0002
    #define   LSb32BCTX_dctSel                                    16
    #define   LSb16BCTX_dctSel                                    0
    #define       bBCTX_dctSel                                 3
    #define   MSK32BCTX_dctSel                                    0x00070000
    #define        BCTX_dctSel_8x8                                          0x0
    #define        BCTX_dctSel_8x4                                          0x1
    #define        BCTX_dctSel_4x8                                          0x2
    #define        BCTX_dctSel_4x4                                          0x3

    #define     BA_BCTX_ABSMVDX                                0x0002
    #define     B16BCTX_ABSMVDX                                0x0002
    #define   LSb32BCTX_ABSMVDX                                   19
    #define   LSb16BCTX_ABSMVDX                                   3
    #define       bBCTX_ABSMVDX                                6
    #define   MSK32BCTX_ABSMVDX                                   0x01F80000

    #define     BA_BCTX_ABSMVDY                                0x0003
    #define     B16BCTX_ABSMVDY                                0x0002
    #define   LSb32BCTX_ABSMVDY                                   25
    #define   LSb16BCTX_ABSMVDY                                   9
    #define       bBCTX_ABSMVDY                                7
    #define   MSK32BCTX_ABSMVDY                                   0xFE000000
    ///////////////////////////////////////////////////////////
    #define     RA_BCTX_mv                                     0x0004
    ///////////////////////////////////////////////////////////

    typedef struct SIE_BCTX {
    ///////////////////////////////////////////////////////////
    #define   GET32BCTX_rBID(r32)                              _BFGET_(r32, 5, 0)
    #define   SET32BCTX_rBID(r32,v)                            _BFSET_(r32, 5, 0,v)
    #define   GET16BCTX_rBID(r16)                              _BFGET_(r16, 5, 0)
    #define   SET16BCTX_rBID(r16,v)                            _BFSET_(r16, 5, 0,v)

    #define   GET32BCTX_rIDX(r32)                              _BFGET_(r32,10, 6)
    #define   SET32BCTX_rIDX(r32,v)                            _BFSET_(r32,10, 6,v)
    #define   GET16BCTX_rIDX(r16)                              _BFGET_(r16,10, 6)
    #define   SET16BCTX_rIDX(r16,v)                            _BFSET_(r16,10, 6,v)

    #define   GET32BCTX_FLD(r32)                               _BFGET_(r32,11,11)
    #define   SET32BCTX_FLD(r32,v)                             _BFSET_(r32,11,11,v)
    #define   GET16BCTX_FLD(r16)                               _BFGET_(r16,11,11)
    #define   SET16BCTX_FLD(r16,v)                             _BFSET_(r16,11,11,v)

    #define   GET32BCTX_equalpred(r32)                         _BFGET_(r32,12,12)
    #define   SET32BCTX_equalpred(r32,v)                       _BFSET_(r32,12,12,v)
    #define   GET16BCTX_equalpred(r16)                         _BFGET_(r16,12,12)
    #define   SET16BCTX_equalpred(r16,v)                       _BFSET_(r16,12,12,v)

    #define   GET32BCTX_RSVD(r32)                              _BFGET_(r32,15,13)
    #define   SET32BCTX_RSVD(r32,v)                            _BFSET_(r32,15,13,v)
    #define   GET16BCTX_RSVD(r16)                              _BFGET_(r16,15,13)
    #define   SET16BCTX_RSVD(r16,v)                            _BFSET_(r16,15,13,v)

    #define   GET32BCTX_dctSel(r32)                            _BFGET_(r32,18,16)
    #define   SET32BCTX_dctSel(r32,v)                          _BFSET_(r32,18,16,v)
    #define   GET16BCTX_dctSel(r16)                            _BFGET_(r16, 2, 0)
    #define   SET16BCTX_dctSel(r16,v)                          _BFSET_(r16, 2, 0,v)

    #define   GET32BCTX_ABSMVDX(r32)                           _BFGET_(r32,24,19)
    #define   SET32BCTX_ABSMVDX(r32,v)                         _BFSET_(r32,24,19,v)
    #define   GET16BCTX_ABSMVDX(r16)                           _BFGET_(r16, 8, 3)
    #define   SET16BCTX_ABSMVDX(r16,v)                         _BFSET_(r16, 8, 3,v)

    #define   GET32BCTX_ABSMVDY(r32)                           _BFGET_(r32,31,25)
    #define   SET32BCTX_ABSMVDY(r32,v)                         _BFSET_(r32,31,25,v)
    #define   GET16BCTX_ABSMVDY(r16)                           _BFGET_(r16,15, 9)
    #define   SET16BCTX_ABSMVDY(r16,v)                         _BFSET_(r16,15, 9,v)

            UNSG32 u_rBID                                      :  6;
            UNSG32 u_rIDX                                      :  5;
            UNSG32 u_FLD                                       :  1;
            UNSG32 u_equalpred                                 :  1;
            UNSG32 u_RSVD                                      :  3;
            UNSG32 u_dctSel                                    :  3;
            UNSG32 u_ABSMVDX                                   :  6;
            UNSG32 u_ABSMVDY                                   :  7;
    ///////////////////////////////////////////////////////////
              SIE_MV                                           ie_mv;
    ///////////////////////////////////////////////////////////
    } SIE_BCTX;

    ///////////////////////////////////////////////////////////
     SIGN32 BCTX_drvrd(SIE_BCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 BCTX_drvwr(SIE_BCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void BCTX_reset(SIE_BCTX *p);
     SIGN32 BCTX_cmp  (SIE_BCTX *p, SIE_BCTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define BCTX_check(p,pie,pfx,hLOG) BCTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define BCTX_print(p,    pfx,hLOG) BCTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: BCTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE BCTX_VC1                biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 6  rBID                      
///               %unsigned 5  rIDX                      
///               %unsigned 1  FLD                       
///               %unsigned 1  equalpred                 
///                                    ###
///                                    * BLK property for CABAC only:
///                                    * Using block category ACV,
///                                    * (Only at 4th 4x4 in each 8x8s):
///                                    * = !Intra && !skipped && (bi-pred || back-pred)
///                                    * NOTE: = 0 for direct mode
///                                    ###
///               %unsigned 3  RSVD                      
///                                    ###
///                                    * Reserved
///                                    ###
///               %unsigned 2  dctSelU                   
///                                    ###
///                                    * DCT transform type for U; used for VC-1 Fop
///                                    ###
///               %unsigned 2  dctSelV                   
///                                    ###
///                                    * DCT transform type for V; used for VC-1 Fop
///                                    ###
///               %unsigned 1  CBFU                      
///                                    ###
///                                    * coded block (4x4) flag for U; used for VC-1 Fop
///                                    ###
///               %unsigned 1  CBFV                      
///                                    ###
///                                    * coded block (4x4) flag for V; used for VC-1 Fop
///                                    ###
///               %unsigned 1  CBFU8x8                   
///                                    ###
///                                    * coded block (8x8) flag for U, used for VC-1 Fop
///                                    ###
///               %unsigned 1  CBFV8x8                   
///                                    ###
///                                    * coded block (8x8) flag for V, used for VC-1 Fop
///                                    ###
///               %unsigned 8  RSVD8                     
///     @ 0x00004                      (P)
///     # 0x00004 mv                   
///               $MV                  mv                REG          
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_BCTX_VC1
#define h_BCTX_VC1 (){}

    #define     BA_BCTX_VC1_rBID                               0x0000
    #define     B16BCTX_VC1_rBID                               0x0000
    #define   LSb32BCTX_VC1_rBID                                  0
    #define   LSb16BCTX_VC1_rBID                                  0
    #define       bBCTX_VC1_rBID                               6
    #define   MSK32BCTX_VC1_rBID                                  0x0000003F

    #define     BA_BCTX_VC1_rIDX                               0x0000
    #define     B16BCTX_VC1_rIDX                               0x0000
    #define   LSb32BCTX_VC1_rIDX                                  6
    #define   LSb16BCTX_VC1_rIDX                                  6
    #define       bBCTX_VC1_rIDX                               5
    #define   MSK32BCTX_VC1_rIDX                                  0x000007C0

    #define     BA_BCTX_VC1_FLD                                0x0001
    #define     B16BCTX_VC1_FLD                                0x0000
    #define   LSb32BCTX_VC1_FLD                                   11
    #define   LSb16BCTX_VC1_FLD                                   11
    #define       bBCTX_VC1_FLD                                1
    #define   MSK32BCTX_VC1_FLD                                   0x00000800

    #define     BA_BCTX_VC1_equalpred                          0x0001
    #define     B16BCTX_VC1_equalpred                          0x0000
    #define   LSb32BCTX_VC1_equalpred                             12
    #define   LSb16BCTX_VC1_equalpred                             12
    #define       bBCTX_VC1_equalpred                          1
    #define   MSK32BCTX_VC1_equalpred                             0x00001000

    #define     BA_BCTX_VC1_RSVD                               0x0001
    #define     B16BCTX_VC1_RSVD                               0x0000
    #define   LSb32BCTX_VC1_RSVD                                  13
    #define   LSb16BCTX_VC1_RSVD                                  13
    #define       bBCTX_VC1_RSVD                               3
    #define   MSK32BCTX_VC1_RSVD                                  0x0000E000

    #define     BA_BCTX_VC1_dctSelU                            0x0002
    #define     B16BCTX_VC1_dctSelU                            0x0002
    #define   LSb32BCTX_VC1_dctSelU                               16
    #define   LSb16BCTX_VC1_dctSelU                               0
    #define       bBCTX_VC1_dctSelU                            2
    #define   MSK32BCTX_VC1_dctSelU                               0x00030000

    #define     BA_BCTX_VC1_dctSelV                            0x0002
    #define     B16BCTX_VC1_dctSelV                            0x0002
    #define   LSb32BCTX_VC1_dctSelV                               18
    #define   LSb16BCTX_VC1_dctSelV                               2
    #define       bBCTX_VC1_dctSelV                            2
    #define   MSK32BCTX_VC1_dctSelV                               0x000C0000

    #define     BA_BCTX_VC1_CBFU                               0x0002
    #define     B16BCTX_VC1_CBFU                               0x0002
    #define   LSb32BCTX_VC1_CBFU                                  20
    #define   LSb16BCTX_VC1_CBFU                                  4
    #define       bBCTX_VC1_CBFU                               1
    #define   MSK32BCTX_VC1_CBFU                                  0x00100000

    #define     BA_BCTX_VC1_CBFV                               0x0002
    #define     B16BCTX_VC1_CBFV                               0x0002
    #define   LSb32BCTX_VC1_CBFV                                  21
    #define   LSb16BCTX_VC1_CBFV                                  5
    #define       bBCTX_VC1_CBFV                               1
    #define   MSK32BCTX_VC1_CBFV                                  0x00200000

    #define     BA_BCTX_VC1_CBFU8x8                            0x0002
    #define     B16BCTX_VC1_CBFU8x8                            0x0002
    #define   LSb32BCTX_VC1_CBFU8x8                               22
    #define   LSb16BCTX_VC1_CBFU8x8                               6
    #define       bBCTX_VC1_CBFU8x8                            1
    #define   MSK32BCTX_VC1_CBFU8x8                               0x00400000

    #define     BA_BCTX_VC1_CBFV8x8                            0x0002
    #define     B16BCTX_VC1_CBFV8x8                            0x0002
    #define   LSb32BCTX_VC1_CBFV8x8                               23
    #define   LSb16BCTX_VC1_CBFV8x8                               7
    #define       bBCTX_VC1_CBFV8x8                            1
    #define   MSK32BCTX_VC1_CBFV8x8                               0x00800000

    #define     BA_BCTX_VC1_RSVD8                              0x0003
    #define     B16BCTX_VC1_RSVD8                              0x0002
    #define   LSb32BCTX_VC1_RSVD8                                 24
    #define   LSb16BCTX_VC1_RSVD8                                 8
    #define       bBCTX_VC1_RSVD8                              8
    #define   MSK32BCTX_VC1_RSVD8                                 0xFF000000
    ///////////////////////////////////////////////////////////
    #define     RA_BCTX_VC1_mv                                 0x0004
    ///////////////////////////////////////////////////////////

    typedef struct SIE_BCTX_VC1 {
    ///////////////////////////////////////////////////////////
    #define   GET32BCTX_VC1_rBID(r32)                          _BFGET_(r32, 5, 0)
    #define   SET32BCTX_VC1_rBID(r32,v)                        _BFSET_(r32, 5, 0,v)
    #define   GET16BCTX_VC1_rBID(r16)                          _BFGET_(r16, 5, 0)
    #define   SET16BCTX_VC1_rBID(r16,v)                        _BFSET_(r16, 5, 0,v)

    #define   GET32BCTX_VC1_rIDX(r32)                          _BFGET_(r32,10, 6)
    #define   SET32BCTX_VC1_rIDX(r32,v)                        _BFSET_(r32,10, 6,v)
    #define   GET16BCTX_VC1_rIDX(r16)                          _BFGET_(r16,10, 6)
    #define   SET16BCTX_VC1_rIDX(r16,v)                        _BFSET_(r16,10, 6,v)

    #define   GET32BCTX_VC1_FLD(r32)                           _BFGET_(r32,11,11)
    #define   SET32BCTX_VC1_FLD(r32,v)                         _BFSET_(r32,11,11,v)
    #define   GET16BCTX_VC1_FLD(r16)                           _BFGET_(r16,11,11)
    #define   SET16BCTX_VC1_FLD(r16,v)                         _BFSET_(r16,11,11,v)

    #define   GET32BCTX_VC1_equalpred(r32)                     _BFGET_(r32,12,12)
    #define   SET32BCTX_VC1_equalpred(r32,v)                   _BFSET_(r32,12,12,v)
    #define   GET16BCTX_VC1_equalpred(r16)                     _BFGET_(r16,12,12)
    #define   SET16BCTX_VC1_equalpred(r16,v)                   _BFSET_(r16,12,12,v)

    #define   GET32BCTX_VC1_RSVD(r32)                          _BFGET_(r32,15,13)
    #define   SET32BCTX_VC1_RSVD(r32,v)                        _BFSET_(r32,15,13,v)
    #define   GET16BCTX_VC1_RSVD(r16)                          _BFGET_(r16,15,13)
    #define   SET16BCTX_VC1_RSVD(r16,v)                        _BFSET_(r16,15,13,v)

    #define   GET32BCTX_VC1_dctSelU(r32)                       _BFGET_(r32,17,16)
    #define   SET32BCTX_VC1_dctSelU(r32,v)                     _BFSET_(r32,17,16,v)
    #define   GET16BCTX_VC1_dctSelU(r16)                       _BFGET_(r16, 1, 0)
    #define   SET16BCTX_VC1_dctSelU(r16,v)                     _BFSET_(r16, 1, 0,v)

    #define   GET32BCTX_VC1_dctSelV(r32)                       _BFGET_(r32,19,18)
    #define   SET32BCTX_VC1_dctSelV(r32,v)                     _BFSET_(r32,19,18,v)
    #define   GET16BCTX_VC1_dctSelV(r16)                       _BFGET_(r16, 3, 2)
    #define   SET16BCTX_VC1_dctSelV(r16,v)                     _BFSET_(r16, 3, 2,v)

    #define   GET32BCTX_VC1_CBFU(r32)                          _BFGET_(r32,20,20)
    #define   SET32BCTX_VC1_CBFU(r32,v)                        _BFSET_(r32,20,20,v)
    #define   GET16BCTX_VC1_CBFU(r16)                          _BFGET_(r16, 4, 4)
    #define   SET16BCTX_VC1_CBFU(r16,v)                        _BFSET_(r16, 4, 4,v)

    #define   GET32BCTX_VC1_CBFV(r32)                          _BFGET_(r32,21,21)
    #define   SET32BCTX_VC1_CBFV(r32,v)                        _BFSET_(r32,21,21,v)
    #define   GET16BCTX_VC1_CBFV(r16)                          _BFGET_(r16, 5, 5)
    #define   SET16BCTX_VC1_CBFV(r16,v)                        _BFSET_(r16, 5, 5,v)

    #define   GET32BCTX_VC1_CBFU8x8(r32)                       _BFGET_(r32,22,22)
    #define   SET32BCTX_VC1_CBFU8x8(r32,v)                     _BFSET_(r32,22,22,v)
    #define   GET16BCTX_VC1_CBFU8x8(r16)                       _BFGET_(r16, 6, 6)
    #define   SET16BCTX_VC1_CBFU8x8(r16,v)                     _BFSET_(r16, 6, 6,v)

    #define   GET32BCTX_VC1_CBFV8x8(r32)                       _BFGET_(r32,23,23)
    #define   SET32BCTX_VC1_CBFV8x8(r32,v)                     _BFSET_(r32,23,23,v)
    #define   GET16BCTX_VC1_CBFV8x8(r16)                       _BFGET_(r16, 7, 7)
    #define   SET16BCTX_VC1_CBFV8x8(r16,v)                     _BFSET_(r16, 7, 7,v)

    #define   GET32BCTX_VC1_RSVD8(r32)                         _BFGET_(r32,31,24)
    #define   SET32BCTX_VC1_RSVD8(r32,v)                       _BFSET_(r32,31,24,v)
    #define   GET16BCTX_VC1_RSVD8(r16)                         _BFGET_(r16,15, 8)
    #define   SET16BCTX_VC1_RSVD8(r16,v)                       _BFSET_(r16,15, 8,v)

            UNSG32 u_rBID                                      :  6;
            UNSG32 u_rIDX                                      :  5;
            UNSG32 u_FLD                                       :  1;
            UNSG32 u_equalpred                                 :  1;
            UNSG32 u_RSVD                                      :  3;
            UNSG32 u_dctSelU                                   :  2;
            UNSG32 u_dctSelV                                   :  2;
            UNSG32 u_CBFU                                      :  1;
            UNSG32 u_CBFV                                      :  1;
            UNSG32 u_CBFU8x8                                   :  1;
            UNSG32 u_CBFV8x8                                   :  1;
            UNSG32 u_RSVD8                                     :  8;
    ///////////////////////////////////////////////////////////
              SIE_MV                                           ie_mv;
    ///////////////////////////////////////////////////////////
    } SIE_BCTX_VC1;

    ///////////////////////////////////////////////////////////
     SIGN32 BCTX_VC1_drvrd(SIE_BCTX_VC1 *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 BCTX_VC1_drvwr(SIE_BCTX_VC1 *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void BCTX_VC1_reset(SIE_BCTX_VC1 *p);
     SIGN32 BCTX_VC1_cmp  (SIE_BCTX_VC1 *p, SIE_BCTX_VC1 *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define BCTX_VC1_check(p,pie,pfx,hLOG) BCTX_VC1_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define BCTX_VC1_print(p,    pfx,hLOG) BCTX_VC1_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: BCTX_VC1
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE FCTXI                   biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 22 RSVD                      
///               %unsigned 5  NCUV                      
///                                    ###
///                                    * CAVLC use only:
///                                    * Using block category ACU/ACV: 0~15
///                                    ###
///               %unsigned 5  NCY                       
///                                    ###
///                                    * CAVLC use only:
///                                    * Using block category ACY (every 4x4s): 0~16
///                                    ###
///     @ 0x00004                      (P)
///               %unsigned 20 RSVD20                    
///               %unsigned 4  intraChroma               
///                                    ###
///                                    * For encoder: Intra prediction mode for chormablocks, see IntraChroma.mode above. Only appears in DCI, one per MB.
///                                    ###
///               %unsigned 8  intraLuma                 
///                                    ###
///                                    * Intra 16x16/NxN prediction mode for luma blocks, see IntraLuma.mode above
///                                    * =0 between parser & syntax processor
///                                    * End of FCTXI
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_FCTXI
#define h_FCTXI (){}

    #define     BA_FCTXI_RSVD                                  0x0000
    #define     B16FCTXI_RSVD                                  0x0000
    #define   LSb32FCTXI_RSVD                                     0
    #define   LSb16FCTXI_RSVD                                     0
    #define       bFCTXI_RSVD                                  22
    #define   MSK32FCTXI_RSVD                                     0x003FFFFF

    #define     BA_FCTXI_NCUV                                  0x0002
    #define     B16FCTXI_NCUV                                  0x0002
    #define   LSb32FCTXI_NCUV                                     22
    #define   LSb16FCTXI_NCUV                                     6
    #define       bFCTXI_NCUV                                  5
    #define   MSK32FCTXI_NCUV                                     0x07C00000

    #define     BA_FCTXI_NCY                                   0x0003
    #define     B16FCTXI_NCY                                   0x0002
    #define   LSb32FCTXI_NCY                                      27
    #define   LSb16FCTXI_NCY                                      11
    #define       bFCTXI_NCY                                   5
    #define   MSK32FCTXI_NCY                                      0xF8000000
    ///////////////////////////////////////////////////////////

    #define     BA_FCTXI_RSVD20                                0x0004
    #define     B16FCTXI_RSVD20                                0x0004
    #define   LSb32FCTXI_RSVD20                                   0
    #define   LSb16FCTXI_RSVD20                                   0
    #define       bFCTXI_RSVD20                                20
    #define   MSK32FCTXI_RSVD20                                   0x000FFFFF

    #define     BA_FCTXI_intraChroma                           0x0006
    #define     B16FCTXI_intraChroma                           0x0006
    #define   LSb32FCTXI_intraChroma                              20
    #define   LSb16FCTXI_intraChroma                              4
    #define       bFCTXI_intraChroma                           4
    #define   MSK32FCTXI_intraChroma                              0x00F00000

    #define     BA_FCTXI_intraLuma                             0x0007
    #define     B16FCTXI_intraLuma                             0x0006
    #define   LSb32FCTXI_intraLuma                                24
    #define   LSb16FCTXI_intraLuma                                8
    #define       bFCTXI_intraLuma                             8
    #define   MSK32FCTXI_intraLuma                                0xFF000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_FCTXI {
    ///////////////////////////////////////////////////////////
    #define   GET32FCTXI_RSVD(r32)                             _BFGET_(r32,21, 0)
    #define   SET32FCTXI_RSVD(r32,v)                           _BFSET_(r32,21, 0,v)

    #define   GET32FCTXI_NCUV(r32)                             _BFGET_(r32,26,22)
    #define   SET32FCTXI_NCUV(r32,v)                           _BFSET_(r32,26,22,v)
    #define   GET16FCTXI_NCUV(r16)                             _BFGET_(r16,10, 6)
    #define   SET16FCTXI_NCUV(r16,v)                           _BFSET_(r16,10, 6,v)

    #define   GET32FCTXI_NCY(r32)                              _BFGET_(r32,31,27)
    #define   SET32FCTXI_NCY(r32,v)                            _BFSET_(r32,31,27,v)
    #define   GET16FCTXI_NCY(r16)                              _BFGET_(r16,15,11)
    #define   SET16FCTXI_NCY(r16,v)                            _BFSET_(r16,15,11,v)

            UNSG32 u_RSVD                                      : 22;
            UNSG32 u_NCUV                                      :  5;
            UNSG32 u_NCY                                       :  5;
    ///////////////////////////////////////////////////////////
    #define   GET32FCTXI_RSVD20(r32)                           _BFGET_(r32,19, 0)
    #define   SET32FCTXI_RSVD20(r32,v)                         _BFSET_(r32,19, 0,v)

    #define   GET32FCTXI_intraChroma(r32)                      _BFGET_(r32,23,20)
    #define   SET32FCTXI_intraChroma(r32,v)                    _BFSET_(r32,23,20,v)
    #define   GET16FCTXI_intraChroma(r16)                      _BFGET_(r16, 7, 4)
    #define   SET16FCTXI_intraChroma(r16,v)                    _BFSET_(r16, 7, 4,v)

    #define   GET32FCTXI_intraLuma(r32)                        _BFGET_(r32,31,24)
    #define   SET32FCTXI_intraLuma(r32,v)                      _BFSET_(r32,31,24,v)
    #define   GET16FCTXI_intraLuma(r16)                        _BFGET_(r16,15, 8)
    #define   SET16FCTXI_intraLuma(r16,v)                      _BFSET_(r16,15, 8,v)

            UNSG32 u_RSVD20                                    : 20;
            UNSG32 u_intraChroma                               :  4;
            UNSG32 u_intraLuma                                 :  8;
    ///////////////////////////////////////////////////////////
    } SIE_FCTXI;

    ///////////////////////////////////////////////////////////
     SIGN32 FCTXI_drvrd(SIE_FCTXI *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 FCTXI_drvwr(SIE_FCTXI *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void FCTXI_reset(SIE_FCTXI *p);
     SIGN32 FCTXI_cmp  (SIE_FCTXI *p, SIE_FCTXI *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define FCTXI_check(p,pie,pfx,hLOG) FCTXI_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define FCTXI_print(p,    pfx,hLOG) FCTXI_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: FCTXI
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE HCTX4x4                 biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 fore                 
///               $FCTX                fore              REG          
///                                    ###
///                                    * Forward prediction
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 back                 
///               $BCTX                back              REG          
///                                    ###
///                                    * Backward prediction
///                                    * End of HCTX4x4
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      16B, bits:     128b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_HCTX4x4
#define h_HCTX4x4 (){}

    #define     RA_HCTX4x4_fore                                0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_HCTX4x4_back                                0x0008
    ///////////////////////////////////////////////////////////

    typedef struct SIE_HCTX4x4 {
    ///////////////////////////////////////////////////////////
              SIE_FCTX                                         ie_fore;
    ///////////////////////////////////////////////////////////
              SIE_BCTX                                         ie_back;
    ///////////////////////////////////////////////////////////
    } SIE_HCTX4x4;

    ///////////////////////////////////////////////////////////
     SIGN32 HCTX4x4_drvrd(SIE_HCTX4x4 *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 HCTX4x4_drvwr(SIE_HCTX4x4 *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void HCTX4x4_reset(SIE_HCTX4x4 *p);
     SIGN32 HCTX4x4_cmp  (SIE_HCTX4x4 *p, SIE_HCTX4x4 *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define HCTX4x4_check(p,pie,pfx,hLOG) HCTX4x4_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define HCTX4x4_print(p,    pfx,hLOG) HCTX4x4_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: HCTX4x4
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE CTXI                    biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %signed   16 AC0                       
///                                    ###
///                                    * DC or horizontal/vertical AC coefficient
///                                    ###
///               %signed   13 AC1                       
///                                    ###
///                                    * 2nd horizontal/vertical AC coefficient
///                                    ###
///               %unsigned 1  cbpcy                     
///                                    ###
///                                    * Flatten all 4x4s in a 8x8 block, coded or not
///                                    ###
///               %unsigned 2  mquantL                   
///                                    ###
///                                    * Low 2 bits of mquant, flatten all 4x4s in a macroblock
///                                    ###
///               %unsigned 3  mquantH                   
///                                    ###
///                                    * High 3 bits of mquant, flatten all 4x4s in a macroblock
///                                    ###
///               %signed   13 AC2                       
///                                    ###
///                                    * 3rd horizontal/vertical AC coefficient
///                                    ###
///               %unsigned 3  type                      
///                                    ###
///                                    * Sub-set of mb_type, see MBPROP.type above
///                                    * = intra16x16
///                                    ###
///               %signed   13 AC3                       
///                                    ###
///                                    * 4th horizontal/vertical AC coefficient
///                                    * End of CTXI
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_CTXI
#define h_CTXI (){}

    #define     BA_CTXI_AC0                                    0x0000
    #define     B16CTXI_AC0                                    0x0000
    #define   LSb32CTXI_AC0                                       0
    #define   LSb16CTXI_AC0                                       0
    #define       bCTXI_AC0                                    16
    #define   MSK32CTXI_AC0                                       0x0000FFFF

    #define     BA_CTXI_AC1                                    0x0002
    #define     B16CTXI_AC1                                    0x0002
    #define   LSb32CTXI_AC1                                       16
    #define   LSb16CTXI_AC1                                       0
    #define       bCTXI_AC1                                    13
    #define   MSK32CTXI_AC1                                       0x1FFF0000

    #define     BA_CTXI_cbpcy                                  0x0003
    #define     B16CTXI_cbpcy                                  0x0002
    #define   LSb32CTXI_cbpcy                                     29
    #define   LSb16CTXI_cbpcy                                     13
    #define       bCTXI_cbpcy                                  1
    #define   MSK32CTXI_cbpcy                                     0x20000000

    #define     BA_CTXI_mquantL                                0x0003
    #define     B16CTXI_mquantL                                0x0002
    #define   LSb32CTXI_mquantL                                   30
    #define   LSb16CTXI_mquantL                                   14
    #define       bCTXI_mquantL                                2
    #define   MSK32CTXI_mquantL                                   0xC0000000

    #define     BA_CTXI_mquantH                                0x0004
    #define     B16CTXI_mquantH                                0x0004
    #define   LSb32CTXI_mquantH                                   0
    #define   LSb16CTXI_mquantH                                   0
    #define       bCTXI_mquantH                                3
    #define   MSK32CTXI_mquantH                                   0x00000007

    #define     BA_CTXI_AC2                                    0x0004
    #define     B16CTXI_AC2                                    0x0004
    #define   LSb32CTXI_AC2                                       3
    #define   LSb16CTXI_AC2                                       3
    #define       bCTXI_AC2                                    13
    #define   MSK32CTXI_AC2                                       0x0000FFF8

    #define     BA_CTXI_type                                   0x0006
    #define     B16CTXI_type                                   0x0006
    #define   LSb32CTXI_type                                      16
    #define   LSb16CTXI_type                                      0
    #define       bCTXI_type                                   3
    #define   MSK32CTXI_type                                      0x00070000

    #define     BA_CTXI_AC3                                    0x0006
    #define     B16CTXI_AC3                                    0x0006
    #define   LSb32CTXI_AC3                                       19
    #define   LSb16CTXI_AC3                                       3
    #define       bCTXI_AC3                                    13
    #define   MSK32CTXI_AC3                                       0xFFF80000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_CTXI {
    ///////////////////////////////////////////////////////////
    #define   GET32CTXI_AC0(r32)                               _BFGET_(r32,15, 0)
    #define   SET32CTXI_AC0(r32,v)                             _BFSET_(r32,15, 0,v)
    #define   GET16CTXI_AC0(r16)                               _BFGET_(r16,15, 0)
    #define   SET16CTXI_AC0(r16,v)                             _BFSET_(r16,15, 0,v)

    #define   GET32CTXI_AC1(r32)                               _BFGET_(r32,28,16)
    #define   SET32CTXI_AC1(r32,v)                             _BFSET_(r32,28,16,v)
    #define   GET16CTXI_AC1(r16)                               _BFGET_(r16,12, 0)
    #define   SET16CTXI_AC1(r16,v)                             _BFSET_(r16,12, 0,v)

    #define   GET32CTXI_cbpcy(r32)                             _BFGET_(r32,29,29)
    #define   SET32CTXI_cbpcy(r32,v)                           _BFSET_(r32,29,29,v)
    #define   GET16CTXI_cbpcy(r16)                             _BFGET_(r16,13,13)
    #define   SET16CTXI_cbpcy(r16,v)                           _BFSET_(r16,13,13,v)

    #define   GET32CTXI_mquantL(r32)                           _BFGET_(r32,31,30)
    #define   SET32CTXI_mquantL(r32,v)                         _BFSET_(r32,31,30,v)
    #define   GET16CTXI_mquantL(r16)                           _BFGET_(r16,15,14)
    #define   SET16CTXI_mquantL(r16,v)                         _BFSET_(r16,15,14,v)

            UNSG32 s_AC0                                       : 16;
            UNSG32 s_AC1                                       : 13;
            UNSG32 u_cbpcy                                     :  1;
            UNSG32 u_mquantL                                   :  2;
    ///////////////////////////////////////////////////////////

    #define   GET32CTXI_mquantH(r32)                           _BFGET_(r32, 2, 0)
    #define   SET32CTXI_mquantH(r32,v)                         _BFSET_(r32, 2, 0,v)
    #define   GET16CTXI_mquantH(r16)                           _BFGET_(r16, 2, 0)
    #define   SET16CTXI_mquantH(r16,v)                         _BFSET_(r16, 2, 0,v)

    #define   GET32CTXI_AC2(r32)                               _BFGET_(r32,15, 3)
    #define   SET32CTXI_AC2(r32,v)                             _BFSET_(r32,15, 3,v)
    #define   GET16CTXI_AC2(r16)                               _BFGET_(r16,15, 3)
    #define   SET16CTXI_AC2(r16,v)                             _BFSET_(r16,15, 3,v)

    #define   GET32CTXI_type(r32)                              _BFGET_(r32,18,16)
    #define   SET32CTXI_type(r32,v)                            _BFSET_(r32,18,16,v)
    #define   GET16CTXI_type(r16)                              _BFGET_(r16, 2, 0)
    #define   SET16CTXI_type(r16,v)                            _BFSET_(r16, 2, 0,v)

    #define   GET32CTXI_AC3(r32)                               _BFGET_(r32,31,19)
    #define   SET32CTXI_AC3(r32,v)                             _BFSET_(r32,31,19,v)
    #define   GET16CTXI_AC3(r16)                               _BFGET_(r16,15, 3)
    #define   SET16CTXI_AC3(r16,v)                             _BFSET_(r16,15, 3,v)

            UNSG32 u_mquantH                                   :  3;
            UNSG32 s_AC2                                       : 13;
            UNSG32 u_type                                      :  3;
            UNSG32 s_AC3                                       : 13;
    ///////////////////////////////////////////////////////////
    } SIE_CTXI;

    ///////////////////////////////////////////////////////////
     SIGN32 CTXI_drvrd(SIE_CTXI *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 CTXI_drvwr(SIE_CTXI *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void CTXI_reset(SIE_CTXI *p);
     SIGN32 CTXI_cmp  (SIE_CTXI *p, SIE_CTXI *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define CTXI_check(p,pie,pfx,hLOG) CTXI_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define CTXI_print(p,    pfx,hLOG) CTXI_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: CTXI
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE CTXI4x4                                  (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 luma                 
///               $CTXI                luma              REG          
///                                    ###
///                                    * DC/AC for Y
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 chroma               
///               $CTXI                chroma            REG          
///                                    ###
///                                    * DC/AC for UV
///                                    * End of CTXI4x4
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      16B, bits:     128b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_CTXI4x4
#define h_CTXI4x4 (){}

    #define     RA_CTXI4x4_luma                                0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_CTXI4x4_chroma                              0x0008
    ///////////////////////////////////////////////////////////

    typedef struct SIE_CTXI4x4 {
    ///////////////////////////////////////////////////////////
              SIE_CTXI                                         ie_luma;
    ///////////////////////////////////////////////////////////
              SIE_CTXI                                         ie_chroma;
    ///////////////////////////////////////////////////////////
    } SIE_CTXI4x4;

    ///////////////////////////////////////////////////////////
     SIGN32 CTXI4x4_drvrd(SIE_CTXI4x4 *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 CTXI4x4_drvwr(SIE_CTXI4x4 *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void CTXI4x4_reset(SIE_CTXI4x4 *p);
     SIGN32 CTXI4x4_cmp  (SIE_CTXI4x4 *p, SIE_CTXI4x4 *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define CTXI4x4_check(p,pie,pfx,hLOG) CTXI4x4_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define CTXI4x4_print(p,    pfx,hLOG) CTXI4x4_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: CTXI4x4
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE IDX2BID                                  (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 frmIDX2BID           
///               $LUT8b               frmIDX2BID        REG      [16]
///                                    ###
///                                    * Cast to 8b rBID[32:rIDX][2:L0/L1]
///                                    * Note: field picture use this table (32 rIDX)!
///                                    ###
///     @ 0x00040                      (P)
///     # 0x00040 topIDX2BID           
///               $LUT8b               topIDX2BID        REG      [16]
///                                    ###
///                                    * Cast to 8b rBID[32:rIDX][2:L0/L1]
///                                    ###
///     @ 0x00080                      (P)
///     # 0x00080 btmIDX2BID           
///               $LUT8b               btmIDX2BID        REG      [16]
///                                    ###
///                                    * Cast to 8b rBID[32:rIDX][2:L0/L1]
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     192B, bits:    1536b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_IDX2BID
#define h_IDX2BID (){}

    #define     RA_IDX2BID_frmIDX2BID                          0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_IDX2BID_topIDX2BID                          0x0040
    ///////////////////////////////////////////////////////////
    #define     RA_IDX2BID_btmIDX2BID                          0x0080
    ///////////////////////////////////////////////////////////

    typedef struct SIE_IDX2BID {
    ///////////////////////////////////////////////////////////
              SIE_LUT8b                                        ie_frmIDX2BID[16];
    ///////////////////////////////////////////////////////////
              SIE_LUT8b                                        ie_topIDX2BID[16];
    ///////////////////////////////////////////////////////////
              SIE_LUT8b                                        ie_btmIDX2BID[16];
    ///////////////////////////////////////////////////////////
    } SIE_IDX2BID;

    ///////////////////////////////////////////////////////////
     SIGN32 IDX2BID_drvrd(SIE_IDX2BID *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 IDX2BID_drvwr(SIE_IDX2BID *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void IDX2BID_reset(SIE_IDX2BID *p);
     SIGN32 IDX2BID_cmp  (SIE_IDX2BID *p, SIE_IDX2BID *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define IDX2BID_check(p,pie,pfx,hLOG) IDX2BID_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define IDX2BID_print(p,    pfx,hLOG) IDX2BID_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: IDX2BID
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE BID2IDX                                  (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 frmBID2IDX           
///               $LUT8b               frmBID2IDX        REG      [10]
///                                    ###
///                                    * Cast to 8b L0.min.rIDX[34:rBID]
///                                    * Note: field picture use this table (32 rIDX)!
///                                    ###
///     @ 0x00028                      (P)
///     # 0x00028 topBID2IDX           
///               $LUT8b               topBID2IDX        REG      [10]
///                                    ###
///                                    * Cast to 8b L0.min.rIDX[34:rBID]
///                                    ###
///     @ 0x00050                      (P)
///     # 0x00050 btmBID2IDX           
///               $LUT8b               btmBID2IDX        REG      [10]
///                                    ###
///                                    * Cast to 8b L0.min.rIDX[34:rBID]
///                                    * Note: direct mode corner case
///                                    * Alternative method (not used) if not adjust rIDX:
///                                    * rBID = CoL.rBID | (CoL.Frm & Cur.Btm)
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     120B, bits:     960b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_BID2IDX
#define h_BID2IDX (){}

    #define     RA_BID2IDX_frmBID2IDX                          0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_BID2IDX_topBID2IDX                          0x0028
    ///////////////////////////////////////////////////////////
    #define     RA_BID2IDX_btmBID2IDX                          0x0050
    ///////////////////////////////////////////////////////////

    typedef struct SIE_BID2IDX {
    ///////////////////////////////////////////////////////////
              SIE_LUT8b                                        ie_frmBID2IDX[10];
    ///////////////////////////////////////////////////////////
              SIE_LUT8b                                        ie_topBID2IDX[10];
    ///////////////////////////////////////////////////////////
              SIE_LUT8b                                        ie_btmBID2IDX[10];
    ///////////////////////////////////////////////////////////
    } SIE_BID2IDX;

    ///////////////////////////////////////////////////////////
     SIGN32 BID2IDX_drvrd(SIE_BID2IDX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 BID2IDX_drvwr(SIE_BID2IDX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void BID2IDX_reset(SIE_BID2IDX *p);
     SIGN32 BID2IDX_cmp  (SIE_BID2IDX *p, SIE_BID2IDX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define BID2IDX_check(p,pie,pfx,hLOG) BID2IDX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define BID2IDX_print(p,    pfx,hLOG) BID2IDX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: BID2IDX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE ASPSET                  biu              (4,4)
///     ###
///     * [0:31]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 3  type                      
///                                    ###
///                                    * MB type
///                                    ###
///               %unsigned 2  chroma                    
///                                    ###
///                                    * Intra MB only: intra_chroma_pred
///                                    ###
///               %unsigned 1  t8x8                      
///                                    ###
///                                    * 8x8 transform; used by AspInit & residual.
///                                    * End of ASPSET
///                                    ###
///               %%        26         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:       6b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_ASPSET
#define h_ASPSET (){}

    #define     BA_ASPSET_type                                 0x0000
    #define     B16ASPSET_type                                 0x0000
    #define   LSb32ASPSET_type                                    0
    #define   LSb16ASPSET_type                                    0
    #define       bASPSET_type                                 3
    #define   MSK32ASPSET_type                                    0x00000007

    #define     BA_ASPSET_chroma                               0x0000
    #define     B16ASPSET_chroma                               0x0000
    #define   LSb32ASPSET_chroma                                  3
    #define   LSb16ASPSET_chroma                                  3
    #define       bASPSET_chroma                               2
    #define   MSK32ASPSET_chroma                                  0x00000018

    #define     BA_ASPSET_t8x8                                 0x0000
    #define     B16ASPSET_t8x8                                 0x0000
    #define   LSb32ASPSET_t8x8                                    5
    #define   LSb16ASPSET_t8x8                                    5
    #define       bASPSET_t8x8                                 1
    #define   MSK32ASPSET_t8x8                                    0x00000020
    ///////////////////////////////////////////////////////////

    typedef struct SIE_ASPSET {
    ///////////////////////////////////////////////////////////
    #define   GET32ASPSET_type(r32)                            _BFGET_(r32, 2, 0)
    #define   SET32ASPSET_type(r32,v)                          _BFSET_(r32, 2, 0,v)
    #define   GET16ASPSET_type(r16)                            _BFGET_(r16, 2, 0)
    #define   SET16ASPSET_type(r16,v)                          _BFSET_(r16, 2, 0,v)

    #define   GET32ASPSET_chroma(r32)                          _BFGET_(r32, 4, 3)
    #define   SET32ASPSET_chroma(r32,v)                        _BFSET_(r32, 4, 3,v)
    #define   GET16ASPSET_chroma(r16)                          _BFGET_(r16, 4, 3)
    #define   SET16ASPSET_chroma(r16,v)                        _BFSET_(r16, 4, 3,v)

    #define   GET32ASPSET_t8x8(r32)                            _BFGET_(r32, 5, 5)
    #define   SET32ASPSET_t8x8(r32,v)                          _BFSET_(r32, 5, 5,v)
    #define   GET16ASPSET_t8x8(r16)                            _BFGET_(r16, 5, 5)
    #define   SET16ASPSET_t8x8(r16,v)                          _BFSET_(r16, 5, 5,v)

            UNSG32 u_type                                      :  3;
            UNSG32 u_chroma                                    :  2;
            UNSG32 u_t8x8                                      :  1;
            UNSG32 RSVDx0_b6                                   : 26;
    ///////////////////////////////////////////////////////////
    } SIE_ASPSET;

    ///////////////////////////////////////////////////////////
     SIGN32 ASPSET_drvrd(SIE_ASPSET *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 ASPSET_drvwr(SIE_ASPSET *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void ASPSET_reset(SIE_ASPSET *p);
     SIGN32 ASPSET_cmp  (SIE_ASPSET *p, SIE_ASPSET *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define ASPSET_check(p,pie,pfx,hLOG) ASPSET_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define ASPSET_print(p,    pfx,hLOG) ASPSET_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: ASPSET
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE IntraPROP                                (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 3  type                      
///                                    ###
///                                    * See BLK.type above,
///                                    * LUT: IPCM or intraNxN or intra16x16
///                                    ###
///               %unsigned 1  8x8IDX0                   
///                                    ###
///                                    * LUT: 0 (P_8x8ref0)
///                                    ###
///               %unsigned 1  t8x8I                     
///                                    ###
///                                    * LUT: MB.transform8x8 & intraNxN
///                                    ###
///               %unsigned 1  t8x8PB                    
///                                    ###
///                                    * LUT: 0
///                                    ###
///               %unsigned 2  luma16x16                 
///                                    ###
///                                    * LUT: intra 16x16 prediction mode
///                                    ###
///               %unsigned 6  CBP                       
///                                    ###
///                                    * LUT: intra 16x16 coded block pattern
///                                    * MPEG4 LUT: Chroma cbp
///                                    * End of IntraPROP
///                                    ###
///               %%        18         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      14b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_IntraPROP
#define h_IntraPROP (){}

    #define     BA_IntraPROP_type                              0x0000
    #define     B16IntraPROP_type                              0x0000
    #define   LSb32IntraPROP_type                                 0
    #define   LSb16IntraPROP_type                                 0
    #define       bIntraPROP_type                              3
    #define   MSK32IntraPROP_type                                 0x00000007

    #define     BA_IntraPROP_8x8IDX0                           0x0000
    #define     B16IntraPROP_8x8IDX0                           0x0000
    #define   LSb32IntraPROP_8x8IDX0                              3
    #define   LSb16IntraPROP_8x8IDX0                              3
    #define       bIntraPROP_8x8IDX0                           1
    #define   MSK32IntraPROP_8x8IDX0                              0x00000008

    #define     BA_IntraPROP_t8x8I                             0x0000
    #define     B16IntraPROP_t8x8I                             0x0000
    #define   LSb32IntraPROP_t8x8I                                4
    #define   LSb16IntraPROP_t8x8I                                4
    #define       bIntraPROP_t8x8I                             1
    #define   MSK32IntraPROP_t8x8I                                0x00000010

    #define     BA_IntraPROP_t8x8PB                            0x0000
    #define     B16IntraPROP_t8x8PB                            0x0000
    #define   LSb32IntraPROP_t8x8PB                               5
    #define   LSb16IntraPROP_t8x8PB                               5
    #define       bIntraPROP_t8x8PB                            1
    #define   MSK32IntraPROP_t8x8PB                               0x00000020

    #define     BA_IntraPROP_luma16x16                         0x0000
    #define     B16IntraPROP_luma16x16                         0x0000
    #define   LSb32IntraPROP_luma16x16                            6
    #define   LSb16IntraPROP_luma16x16                            6
    #define       bIntraPROP_luma16x16                         2
    #define   MSK32IntraPROP_luma16x16                            0x000000C0

    #define     BA_IntraPROP_CBP                               0x0001
    #define     B16IntraPROP_CBP                               0x0000
    #define   LSb32IntraPROP_CBP                                  8
    #define   LSb16IntraPROP_CBP                                  8
    #define       bIntraPROP_CBP                               6
    #define   MSK32IntraPROP_CBP                                  0x00003F00
    ///////////////////////////////////////////////////////////

    typedef struct SIE_IntraPROP {
    ///////////////////////////////////////////////////////////
    #define   GET32IntraPROP_type(r32)                         _BFGET_(r32, 2, 0)
    #define   SET32IntraPROP_type(r32,v)                       _BFSET_(r32, 2, 0,v)
    #define   GET16IntraPROP_type(r16)                         _BFGET_(r16, 2, 0)
    #define   SET16IntraPROP_type(r16,v)                       _BFSET_(r16, 2, 0,v)

    #define   GET32IntraPROP_8x8IDX0(r32)                      _BFGET_(r32, 3, 3)
    #define   SET32IntraPROP_8x8IDX0(r32,v)                    _BFSET_(r32, 3, 3,v)
    #define   GET16IntraPROP_8x8IDX0(r16)                      _BFGET_(r16, 3, 3)
    #define   SET16IntraPROP_8x8IDX0(r16,v)                    _BFSET_(r16, 3, 3,v)

    #define   GET32IntraPROP_t8x8I(r32)                        _BFGET_(r32, 4, 4)
    #define   SET32IntraPROP_t8x8I(r32,v)                      _BFSET_(r32, 4, 4,v)
    #define   GET16IntraPROP_t8x8I(r16)                        _BFGET_(r16, 4, 4)
    #define   SET16IntraPROP_t8x8I(r16,v)                      _BFSET_(r16, 4, 4,v)

    #define   GET32IntraPROP_t8x8PB(r32)                       _BFGET_(r32, 5, 5)
    #define   SET32IntraPROP_t8x8PB(r32,v)                     _BFSET_(r32, 5, 5,v)
    #define   GET16IntraPROP_t8x8PB(r16)                       _BFGET_(r16, 5, 5)
    #define   SET16IntraPROP_t8x8PB(r16,v)                     _BFSET_(r16, 5, 5,v)

    #define   GET32IntraPROP_luma16x16(r32)                    _BFGET_(r32, 7, 6)
    #define   SET32IntraPROP_luma16x16(r32,v)                  _BFSET_(r32, 7, 6,v)
    #define   GET16IntraPROP_luma16x16(r16)                    _BFGET_(r16, 7, 6)
    #define   SET16IntraPROP_luma16x16(r16,v)                  _BFSET_(r16, 7, 6,v)

    #define   GET32IntraPROP_CBP(r32)                          _BFGET_(r32,13, 8)
    #define   SET32IntraPROP_CBP(r32,v)                        _BFSET_(r32,13, 8,v)
    #define   GET16IntraPROP_CBP(r16)                          _BFGET_(r16,13, 8)
    #define   SET16IntraPROP_CBP(r16,v)                        _BFSET_(r16,13, 8,v)

            UNSG32 u_type                                      :  3;
            UNSG32 u_8x8IDX0                                   :  1;
            UNSG32 u_t8x8I                                     :  1;
            UNSG32 u_t8x8PB                                    :  1;
            UNSG32 u_luma16x16                                 :  2;
            UNSG32 u_CBP                                       :  6;
            UNSG32 RSVDx0_b14                                  : 18;
    ///////////////////////////////////////////////////////////
    } SIE_IntraPROP;

    ///////////////////////////////////////////////////////////
     SIGN32 IntraPROP_drvrd(SIE_IntraPROP *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 IntraPROP_drvwr(SIE_IntraPROP *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void IntraPROP_reset(SIE_IntraPROP *p);
     SIGN32 IntraPROP_cmp  (SIE_IntraPROP *p, SIE_IntraPROP *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define IntraPROP_check(p,pie,pfx,hLOG) IntraPROP_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define IntraPROP_print(p,    pfx,hLOG) IntraPROP_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: IntraPROP
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE InterPROP                                (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 3  type                      
///                                    ###
///                                    * See MBPROP.type above,
///                                    * LUT: inter or 8x8PB or 8x8IDX0 or direct16x16
///                                    ###
///               %unsigned 1  8x8IDX0                   
///                                    ###
///                                    * LUT: P_8x8ref0
///                                    ###
///               %unsigned 1  t8x8I                     
///                                    ###
///                                    * LUT: 0
///                                    ###
///               %unsigned 1  t8x8PB                    
///                                    ###
///                                    * LUT: MB.transform8x8 & inter &
///                                    * (MB.direct8x8 | !direct16x16)
///                                    ###
///               %unsigned 2  partition                 
///                                    ###
///                                    * See MBPROP.partition above
///                                    ###
///               %unsigned 2  motion_0i                 
///               %unsigned 2  motion_1i                 
///                                    ###
///                                    * LUT: intra/forward/backward/bi, see BLK.motion above
///                                    ###
///               %unsigned 2  mvs_0i                    
///               %unsigned 2  mvs_1i                    
///                                    ###
///                                    * Number of motion vectors for each directions
///                                    * End of InterPROP
///                                    ###
///               %%        16         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      16b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_InterPROP
#define h_InterPROP (){}

    #define     BA_InterPROP_type                              0x0000
    #define     B16InterPROP_type                              0x0000
    #define   LSb32InterPROP_type                                 0
    #define   LSb16InterPROP_type                                 0
    #define       bInterPROP_type                              3
    #define   MSK32InterPROP_type                                 0x00000007

    #define     BA_InterPROP_8x8IDX0                           0x0000
    #define     B16InterPROP_8x8IDX0                           0x0000
    #define   LSb32InterPROP_8x8IDX0                              3
    #define   LSb16InterPROP_8x8IDX0                              3
    #define       bInterPROP_8x8IDX0                           1
    #define   MSK32InterPROP_8x8IDX0                              0x00000008

    #define     BA_InterPROP_t8x8I                             0x0000
    #define     B16InterPROP_t8x8I                             0x0000
    #define   LSb32InterPROP_t8x8I                                4
    #define   LSb16InterPROP_t8x8I                                4
    #define       bInterPROP_t8x8I                             1
    #define   MSK32InterPROP_t8x8I                                0x00000010

    #define     BA_InterPROP_t8x8PB                            0x0000
    #define     B16InterPROP_t8x8PB                            0x0000
    #define   LSb32InterPROP_t8x8PB                               5
    #define   LSb16InterPROP_t8x8PB                               5
    #define       bInterPROP_t8x8PB                            1
    #define   MSK32InterPROP_t8x8PB                               0x00000020

    #define     BA_InterPROP_partition                         0x0000
    #define     B16InterPROP_partition                         0x0000
    #define   LSb32InterPROP_partition                            6
    #define   LSb16InterPROP_partition                            6
    #define       bInterPROP_partition                         2
    #define   MSK32InterPROP_partition                            0x000000C0

    #define     BA_InterPROP_motion_0i                         0x0001
    #define     B16InterPROP_motion_0i                         0x0000
    #define   LSb32InterPROP_motion_0i                            8
    #define   LSb16InterPROP_motion_0i                            8
    #define       bInterPROP_motion_0i                         2
    #define   MSK32InterPROP_motion_0i                            0x00000300

    #define     BA_InterPROP_motion_1i                         0x0001
    #define     B16InterPROP_motion_1i                         0x0000
    #define   LSb32InterPROP_motion_1i                            10
    #define   LSb16InterPROP_motion_1i                            10
    #define       bInterPROP_motion_1i                         2
    #define   MSK32InterPROP_motion_1i                            0x00000C00

    #define     BA_InterPROP_mvs_0i                            0x0001
    #define     B16InterPROP_mvs_0i                            0x0000
    #define   LSb32InterPROP_mvs_0i                               12
    #define   LSb16InterPROP_mvs_0i                               12
    #define       bInterPROP_mvs_0i                            2
    #define   MSK32InterPROP_mvs_0i                               0x00003000

    #define     BA_InterPROP_mvs_1i                            0x0001
    #define     B16InterPROP_mvs_1i                            0x0000
    #define   LSb32InterPROP_mvs_1i                               14
    #define   LSb16InterPROP_mvs_1i                               14
    #define       bInterPROP_mvs_1i                            2
    #define   MSK32InterPROP_mvs_1i                               0x0000C000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_InterPROP {
    ///////////////////////////////////////////////////////////
    #define   GET32InterPROP_type(r32)                         _BFGET_(r32, 2, 0)
    #define   SET32InterPROP_type(r32,v)                       _BFSET_(r32, 2, 0,v)
    #define   GET16InterPROP_type(r16)                         _BFGET_(r16, 2, 0)
    #define   SET16InterPROP_type(r16,v)                       _BFSET_(r16, 2, 0,v)

    #define   GET32InterPROP_8x8IDX0(r32)                      _BFGET_(r32, 3, 3)
    #define   SET32InterPROP_8x8IDX0(r32,v)                    _BFSET_(r32, 3, 3,v)
    #define   GET16InterPROP_8x8IDX0(r16)                      _BFGET_(r16, 3, 3)
    #define   SET16InterPROP_8x8IDX0(r16,v)                    _BFSET_(r16, 3, 3,v)

    #define   GET32InterPROP_t8x8I(r32)                        _BFGET_(r32, 4, 4)
    #define   SET32InterPROP_t8x8I(r32,v)                      _BFSET_(r32, 4, 4,v)
    #define   GET16InterPROP_t8x8I(r16)                        _BFGET_(r16, 4, 4)
    #define   SET16InterPROP_t8x8I(r16,v)                      _BFSET_(r16, 4, 4,v)

    #define   GET32InterPROP_t8x8PB(r32)                       _BFGET_(r32, 5, 5)
    #define   SET32InterPROP_t8x8PB(r32,v)                     _BFSET_(r32, 5, 5,v)
    #define   GET16InterPROP_t8x8PB(r16)                       _BFGET_(r16, 5, 5)
    #define   SET16InterPROP_t8x8PB(r16,v)                     _BFSET_(r16, 5, 5,v)

    #define   GET32InterPROP_partition(r32)                    _BFGET_(r32, 7, 6)
    #define   SET32InterPROP_partition(r32,v)                  _BFSET_(r32, 7, 6,v)
    #define   GET16InterPROP_partition(r16)                    _BFGET_(r16, 7, 6)
    #define   SET16InterPROP_partition(r16,v)                  _BFSET_(r16, 7, 6,v)

    #define   GET32InterPROP_motion_0i(r32)                    _BFGET_(r32, 9, 8)
    #define   SET32InterPROP_motion_0i(r32,v)                  _BFSET_(r32, 9, 8,v)
    #define   GET16InterPROP_motion_0i(r16)                    _BFGET_(r16, 9, 8)
    #define   SET16InterPROP_motion_0i(r16,v)                  _BFSET_(r16, 9, 8,v)

    #define   GET32InterPROP_motion_1i(r32)                    _BFGET_(r32,11,10)
    #define   SET32InterPROP_motion_1i(r32,v)                  _BFSET_(r32,11,10,v)
    #define   GET16InterPROP_motion_1i(r16)                    _BFGET_(r16,11,10)
    #define   SET16InterPROP_motion_1i(r16,v)                  _BFSET_(r16,11,10,v)

    #define   GET32InterPROP_mvs_0i(r32)                       _BFGET_(r32,13,12)
    #define   SET32InterPROP_mvs_0i(r32,v)                     _BFSET_(r32,13,12,v)
    #define   GET16InterPROP_mvs_0i(r16)                       _BFGET_(r16,13,12)
    #define   SET16InterPROP_mvs_0i(r16,v)                     _BFSET_(r16,13,12,v)

    #define   GET32InterPROP_mvs_1i(r32)                       _BFGET_(r32,15,14)
    #define   SET32InterPROP_mvs_1i(r32,v)                     _BFSET_(r32,15,14,v)
    #define   GET16InterPROP_mvs_1i(r16)                       _BFGET_(r16,15,14)
    #define   SET16InterPROP_mvs_1i(r16,v)                     _BFSET_(r16,15,14,v)

            UNSG32 u_type                                      :  3;
            UNSG32 u_8x8IDX0                                   :  1;
            UNSG32 u_t8x8I                                     :  1;
            UNSG32 u_t8x8PB                                    :  1;
            UNSG32 u_partition                                 :  2;
            UNSG32 u_motion_0i                                 :  2;
            UNSG32 u_motion_1i                                 :  2;
            UNSG32 u_mvs_0i                                    :  2;
            UNSG32 u_mvs_1i                                    :  2;
            UNSG32 RSVDx0_b16                                  : 16;
    ///////////////////////////////////////////////////////////
    } SIE_InterPROP;

    ///////////////////////////////////////////////////////////
     SIGN32 InterPROP_drvrd(SIE_InterPROP *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 InterPROP_drvwr(SIE_InterPROP *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void InterPROP_reset(SIE_InterPROP *p);
     SIGN32 InterPROP_cmp  (SIE_InterPROP *p, SIE_InterPROP *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define InterPROP_check(p,pie,pfx,hLOG) InterPROP_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define InterPROP_print(p,    pfx,hLOG) InterPROP_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: InterPROP
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE ResPROP_VC1                              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 8  MaxNumCoeff               
///                                    ###
///                                    * Maximal number of coefficients to decode,
///                                    * The valid number is: 16, 32, 63, and 64
///                                    ###
///               %unsigned 3  eBlk                      
///                                    ###
///                                    * 8x8 Block index. 0~3 for Y, 4 for Cb, 5 for Cr
///                                    ###
///               %unsigned 1  IsIntra                   
///                                    ###
///                                    * 1: intra block
///                                    * 0: inter block
///                                    ###
///               %unsigned 2  SubBlkIdx                 
///                                    ###
///                                    * Sub-block index in 8x8 block. Unit is 4x4 regardless of transform type.
///                                    ###
///               %unsigned 2  TransTypeOrIpMode         
///                                    ###
///                                    * For inter block, this field contain transform type information.
///                                    ###
///                                    : TRANS_4x4                 0x0
///                                    : TRANS_4x8                 0x1
///                                    : TRANS_8x4                 0x2
///                                    : TRANS_8x8                 0x3
///                                                 ###
///                                                 * For intra block, this field is intra prediction mode.
///                                                 ###
///                                    : IP_NORMAL                 0x0
///                                    : IP_HORIZONTAL             0x1
///                                    : IP_VERTICAL               0x2
///               %%        16         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      16b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_ResPROP_VC1
#define h_ResPROP_VC1 (){}

    #define     BA_ResPROP_VC1_MaxNumCoeff                     0x0000
    #define     B16ResPROP_VC1_MaxNumCoeff                     0x0000
    #define   LSb32ResPROP_VC1_MaxNumCoeff                        0
    #define   LSb16ResPROP_VC1_MaxNumCoeff                        0
    #define       bResPROP_VC1_MaxNumCoeff                     8
    #define   MSK32ResPROP_VC1_MaxNumCoeff                        0x000000FF

    #define     BA_ResPROP_VC1_eBlk                            0x0001
    #define     B16ResPROP_VC1_eBlk                            0x0000
    #define   LSb32ResPROP_VC1_eBlk                               8
    #define   LSb16ResPROP_VC1_eBlk                               8
    #define       bResPROP_VC1_eBlk                            3
    #define   MSK32ResPROP_VC1_eBlk                               0x00000700

    #define     BA_ResPROP_VC1_IsIntra                         0x0001
    #define     B16ResPROP_VC1_IsIntra                         0x0000
    #define   LSb32ResPROP_VC1_IsIntra                            11
    #define   LSb16ResPROP_VC1_IsIntra                            11
    #define       bResPROP_VC1_IsIntra                         1
    #define   MSK32ResPROP_VC1_IsIntra                            0x00000800

    #define     BA_ResPROP_VC1_SubBlkIdx                       0x0001
    #define     B16ResPROP_VC1_SubBlkIdx                       0x0000
    #define   LSb32ResPROP_VC1_SubBlkIdx                          12
    #define   LSb16ResPROP_VC1_SubBlkIdx                          12
    #define       bResPROP_VC1_SubBlkIdx                       2
    #define   MSK32ResPROP_VC1_SubBlkIdx                          0x00003000

    #define     BA_ResPROP_VC1_TransTypeOrIpMode               0x0001
    #define     B16ResPROP_VC1_TransTypeOrIpMode               0x0000
    #define   LSb32ResPROP_VC1_TransTypeOrIpMode                  14
    #define   LSb16ResPROP_VC1_TransTypeOrIpMode                  14
    #define       bResPROP_VC1_TransTypeOrIpMode               2
    #define   MSK32ResPROP_VC1_TransTypeOrIpMode                  0x0000C000
    #define        ResPROP_VC1_TransTypeOrIpMode_TRANS_4x4                  0x0
    #define        ResPROP_VC1_TransTypeOrIpMode_TRANS_4x8                  0x1
    #define        ResPROP_VC1_TransTypeOrIpMode_TRANS_8x4                  0x2
    #define        ResPROP_VC1_TransTypeOrIpMode_TRANS_8x8                  0x3
    #define        ResPROP_VC1_TransTypeOrIpMode_IP_NORMAL                  0x0
    #define        ResPROP_VC1_TransTypeOrIpMode_IP_HORIZONTAL              0x1
    #define        ResPROP_VC1_TransTypeOrIpMode_IP_VERTICAL                0x2
    ///////////////////////////////////////////////////////////

    typedef struct SIE_ResPROP_VC1 {
    ///////////////////////////////////////////////////////////
    #define   GET32ResPROP_VC1_MaxNumCoeff(r32)                _BFGET_(r32, 7, 0)
    #define   SET32ResPROP_VC1_MaxNumCoeff(r32,v)              _BFSET_(r32, 7, 0,v)
    #define   GET16ResPROP_VC1_MaxNumCoeff(r16)                _BFGET_(r16, 7, 0)
    #define   SET16ResPROP_VC1_MaxNumCoeff(r16,v)              _BFSET_(r16, 7, 0,v)

    #define   GET32ResPROP_VC1_eBlk(r32)                       _BFGET_(r32,10, 8)
    #define   SET32ResPROP_VC1_eBlk(r32,v)                     _BFSET_(r32,10, 8,v)
    #define   GET16ResPROP_VC1_eBlk(r16)                       _BFGET_(r16,10, 8)
    #define   SET16ResPROP_VC1_eBlk(r16,v)                     _BFSET_(r16,10, 8,v)

    #define   GET32ResPROP_VC1_IsIntra(r32)                    _BFGET_(r32,11,11)
    #define   SET32ResPROP_VC1_IsIntra(r32,v)                  _BFSET_(r32,11,11,v)
    #define   GET16ResPROP_VC1_IsIntra(r16)                    _BFGET_(r16,11,11)
    #define   SET16ResPROP_VC1_IsIntra(r16,v)                  _BFSET_(r16,11,11,v)

    #define   GET32ResPROP_VC1_SubBlkIdx(r32)                  _BFGET_(r32,13,12)
    #define   SET32ResPROP_VC1_SubBlkIdx(r32,v)                _BFSET_(r32,13,12,v)
    #define   GET16ResPROP_VC1_SubBlkIdx(r16)                  _BFGET_(r16,13,12)
    #define   SET16ResPROP_VC1_SubBlkIdx(r16,v)                _BFSET_(r16,13,12,v)

    #define   GET32ResPROP_VC1_TransTypeOrIpMode(r32)          _BFGET_(r32,15,14)
    #define   SET32ResPROP_VC1_TransTypeOrIpMode(r32,v)        _BFSET_(r32,15,14,v)
    #define   GET16ResPROP_VC1_TransTypeOrIpMode(r16)          _BFGET_(r16,15,14)
    #define   SET16ResPROP_VC1_TransTypeOrIpMode(r16,v)        _BFSET_(r16,15,14,v)

            UNSG32 u_MaxNumCoeff                               :  8;
            UNSG32 u_eBlk                                      :  3;
            UNSG32 u_IsIntra                                   :  1;
            UNSG32 u_SubBlkIdx                                 :  2;
            UNSG32 u_TransTypeOrIpMode                         :  2;
            UNSG32 RSVDx0_b16                                  : 16;
    ///////////////////////////////////////////////////////////
    } SIE_ResPROP_VC1;

    ///////////////////////////////////////////////////////////
     SIGN32 ResPROP_VC1_drvrd(SIE_ResPROP_VC1 *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 ResPROP_VC1_drvwr(SIE_ResPROP_VC1 *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void ResPROP_VC1_reset(SIE_ResPROP_VC1 *p);
     SIGN32 ResPROP_VC1_cmp  (SIE_ResPROP_VC1 *p, SIE_ResPROP_VC1 *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define ResPROP_VC1_check(p,pie,pfx,hLOG) ResPROP_VC1_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define ResPROP_VC1_print(p,    pfx,hLOG) ResPROP_VC1_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: ResPROP_VC1
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE ResPROP_MPEG2                            (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 1  Intra_MB                  
///                                    : inter                     0x0
///                                    : intra                     0x1
///                                                 ###
///                                                 * Indicate current MB is inter-coded or intra-coded
///                                                 ###
///               %unsigned 1  CC                        
///                                    : luma                      0x0
///                                    : chroma                    0x1
///                                                 ###
///                                                 * Color component (to select VLC table)
///                                                 ###
///               %unsigned 1  intra_vlc_format          
///                                    ###
///                                    * Whether to use intra VLC DC table or inter table
///                                    * End of ResProp_MPEG2
///                                    ###
///               %%        29         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:       3b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_ResPROP_MPEG2
#define h_ResPROP_MPEG2 (){}

    #define     BA_ResPROP_MPEG2_Intra_MB                      0x0000
    #define     B16ResPROP_MPEG2_Intra_MB                      0x0000
    #define   LSb32ResPROP_MPEG2_Intra_MB                         0
    #define   LSb16ResPROP_MPEG2_Intra_MB                         0
    #define       bResPROP_MPEG2_Intra_MB                      1
    #define   MSK32ResPROP_MPEG2_Intra_MB                         0x00000001
    #define        ResPROP_MPEG2_Intra_MB_inter                             0x0
    #define        ResPROP_MPEG2_Intra_MB_intra                             0x1

    #define     BA_ResPROP_MPEG2_CC                            0x0000
    #define     B16ResPROP_MPEG2_CC                            0x0000
    #define   LSb32ResPROP_MPEG2_CC                               1
    #define   LSb16ResPROP_MPEG2_CC                               1
    #define       bResPROP_MPEG2_CC                            1
    #define   MSK32ResPROP_MPEG2_CC                               0x00000002
    #define        ResPROP_MPEG2_CC_luma                                    0x0
    #define        ResPROP_MPEG2_CC_chroma                                  0x1

    #define     BA_ResPROP_MPEG2_intra_vlc_format              0x0000
    #define     B16ResPROP_MPEG2_intra_vlc_format              0x0000
    #define   LSb32ResPROP_MPEG2_intra_vlc_format                 2
    #define   LSb16ResPROP_MPEG2_intra_vlc_format                 2
    #define       bResPROP_MPEG2_intra_vlc_format              1
    #define   MSK32ResPROP_MPEG2_intra_vlc_format                 0x00000004
    ///////////////////////////////////////////////////////////

    typedef struct SIE_ResPROP_MPEG2 {
    ///////////////////////////////////////////////////////////
    #define   GET32ResPROP_MPEG2_Intra_MB(r32)                 _BFGET_(r32, 0, 0)
    #define   SET32ResPROP_MPEG2_Intra_MB(r32,v)               _BFSET_(r32, 0, 0,v)
    #define   GET16ResPROP_MPEG2_Intra_MB(r16)                 _BFGET_(r16, 0, 0)
    #define   SET16ResPROP_MPEG2_Intra_MB(r16,v)               _BFSET_(r16, 0, 0,v)

    #define   GET32ResPROP_MPEG2_CC(r32)                       _BFGET_(r32, 1, 1)
    #define   SET32ResPROP_MPEG2_CC(r32,v)                     _BFSET_(r32, 1, 1,v)
    #define   GET16ResPROP_MPEG2_CC(r16)                       _BFGET_(r16, 1, 1)
    #define   SET16ResPROP_MPEG2_CC(r16,v)                     _BFSET_(r16, 1, 1,v)

    #define   GET32ResPROP_MPEG2_intra_vlc_format(r32)         _BFGET_(r32, 2, 2)
    #define   SET32ResPROP_MPEG2_intra_vlc_format(r32,v)       _BFSET_(r32, 2, 2,v)
    #define   GET16ResPROP_MPEG2_intra_vlc_format(r16)         _BFGET_(r16, 2, 2)
    #define   SET16ResPROP_MPEG2_intra_vlc_format(r16,v)       _BFSET_(r16, 2, 2,v)

            UNSG32 u_Intra_MB                                  :  1;
            UNSG32 u_CC                                        :  1;
            UNSG32 u_intra_vlc_format                          :  1;
            UNSG32 RSVDx0_b3                                   : 29;
    ///////////////////////////////////////////////////////////
    } SIE_ResPROP_MPEG2;

    ///////////////////////////////////////////////////////////
     SIGN32 ResPROP_MPEG2_drvrd(SIE_ResPROP_MPEG2 *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 ResPROP_MPEG2_drvwr(SIE_ResPROP_MPEG2 *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void ResPROP_MPEG2_reset(SIE_ResPROP_MPEG2 *p);
     SIGN32 ResPROP_MPEG2_cmp  (SIE_ResPROP_MPEG2 *p, SIE_ResPROP_MPEG2 *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define ResPROP_MPEG2_check(p,pie,pfx,hLOG) ResPROP_MPEG2_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define ResPROP_MPEG2_print(p,    pfx,hLOG) ResPROP_MPEG2_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: ResPROP_MPEG2
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE ResPROP_MPEG4                            (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 1  Intra_MB                  
///                                    : inter                     0x0
///                                    : intra                     0x1
///                                                 ###
///                                                 * Indicate current MB is inter-coded or intra-coded
///                                                 ###
///               %unsigned 1  CC                        
///                                    : luma                      0x0
///                                    : chroma                    0x1
///                                                 ###
///                                                 * Color component (to select VLC table)
///                                                 ###
///               %unsigned 1  use_intra_dc_vlc          
///                                    ###
///                                    * Whether to use intra VLC DC table or inter table
///                                    ###
///               %unsigned 1  pattern_code              
///                                    ###
///                                    * Indicate whether to encode AC coefficients
///                                    ###
///               %unsigned 2  scan_order                
///                                    : normal                    0x0
///                                    : horizontal                0x1
///                                    : vertical                  0x2
///                                                 ###
///                                                 * Indicate zigzag scan order of 8x8 coefficients
///                                                 * End of ResProp_MPEG4
///                                                 ###
///               %%        26         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:       6b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_ResPROP_MPEG4
#define h_ResPROP_MPEG4 (){}

    #define     BA_ResPROP_MPEG4_Intra_MB                      0x0000
    #define     B16ResPROP_MPEG4_Intra_MB                      0x0000
    #define   LSb32ResPROP_MPEG4_Intra_MB                         0
    #define   LSb16ResPROP_MPEG4_Intra_MB                         0
    #define       bResPROP_MPEG4_Intra_MB                      1
    #define   MSK32ResPROP_MPEG4_Intra_MB                         0x00000001
    #define        ResPROP_MPEG4_Intra_MB_inter                             0x0
    #define        ResPROP_MPEG4_Intra_MB_intra                             0x1

    #define     BA_ResPROP_MPEG4_CC                            0x0000
    #define     B16ResPROP_MPEG4_CC                            0x0000
    #define   LSb32ResPROP_MPEG4_CC                               1
    #define   LSb16ResPROP_MPEG4_CC                               1
    #define       bResPROP_MPEG4_CC                            1
    #define   MSK32ResPROP_MPEG4_CC                               0x00000002
    #define        ResPROP_MPEG4_CC_luma                                    0x0
    #define        ResPROP_MPEG4_CC_chroma                                  0x1

    #define     BA_ResPROP_MPEG4_use_intra_dc_vlc              0x0000
    #define     B16ResPROP_MPEG4_use_intra_dc_vlc              0x0000
    #define   LSb32ResPROP_MPEG4_use_intra_dc_vlc                 2
    #define   LSb16ResPROP_MPEG4_use_intra_dc_vlc                 2
    #define       bResPROP_MPEG4_use_intra_dc_vlc              1
    #define   MSK32ResPROP_MPEG4_use_intra_dc_vlc                 0x00000004

    #define     BA_ResPROP_MPEG4_pattern_code                  0x0000
    #define     B16ResPROP_MPEG4_pattern_code                  0x0000
    #define   LSb32ResPROP_MPEG4_pattern_code                     3
    #define   LSb16ResPROP_MPEG4_pattern_code                     3
    #define       bResPROP_MPEG4_pattern_code                  1
    #define   MSK32ResPROP_MPEG4_pattern_code                     0x00000008

    #define     BA_ResPROP_MPEG4_scan_order                    0x0000
    #define     B16ResPROP_MPEG4_scan_order                    0x0000
    #define   LSb32ResPROP_MPEG4_scan_order                       4
    #define   LSb16ResPROP_MPEG4_scan_order                       4
    #define       bResPROP_MPEG4_scan_order                    2
    #define   MSK32ResPROP_MPEG4_scan_order                       0x00000030
    #define        ResPROP_MPEG4_scan_order_normal                          0x0
    #define        ResPROP_MPEG4_scan_order_horizontal                      0x1
    #define        ResPROP_MPEG4_scan_order_vertical                        0x2
    ///////////////////////////////////////////////////////////

    typedef struct SIE_ResPROP_MPEG4 {
    ///////////////////////////////////////////////////////////
    #define   GET32ResPROP_MPEG4_Intra_MB(r32)                 _BFGET_(r32, 0, 0)
    #define   SET32ResPROP_MPEG4_Intra_MB(r32,v)               _BFSET_(r32, 0, 0,v)
    #define   GET16ResPROP_MPEG4_Intra_MB(r16)                 _BFGET_(r16, 0, 0)
    #define   SET16ResPROP_MPEG4_Intra_MB(r16,v)               _BFSET_(r16, 0, 0,v)

    #define   GET32ResPROP_MPEG4_CC(r32)                       _BFGET_(r32, 1, 1)
    #define   SET32ResPROP_MPEG4_CC(r32,v)                     _BFSET_(r32, 1, 1,v)
    #define   GET16ResPROP_MPEG4_CC(r16)                       _BFGET_(r16, 1, 1)
    #define   SET16ResPROP_MPEG4_CC(r16,v)                     _BFSET_(r16, 1, 1,v)

    #define   GET32ResPROP_MPEG4_use_intra_dc_vlc(r32)         _BFGET_(r32, 2, 2)
    #define   SET32ResPROP_MPEG4_use_intra_dc_vlc(r32,v)       _BFSET_(r32, 2, 2,v)
    #define   GET16ResPROP_MPEG4_use_intra_dc_vlc(r16)         _BFGET_(r16, 2, 2)
    #define   SET16ResPROP_MPEG4_use_intra_dc_vlc(r16,v)       _BFSET_(r16, 2, 2,v)

    #define   GET32ResPROP_MPEG4_pattern_code(r32)             _BFGET_(r32, 3, 3)
    #define   SET32ResPROP_MPEG4_pattern_code(r32,v)           _BFSET_(r32, 3, 3,v)
    #define   GET16ResPROP_MPEG4_pattern_code(r16)             _BFGET_(r16, 3, 3)
    #define   SET16ResPROP_MPEG4_pattern_code(r16,v)           _BFSET_(r16, 3, 3,v)

    #define   GET32ResPROP_MPEG4_scan_order(r32)               _BFGET_(r32, 5, 4)
    #define   SET32ResPROP_MPEG4_scan_order(r32,v)             _BFSET_(r32, 5, 4,v)
    #define   GET16ResPROP_MPEG4_scan_order(r16)               _BFGET_(r16, 5, 4)
    #define   SET16ResPROP_MPEG4_scan_order(r16,v)             _BFSET_(r16, 5, 4,v)

            UNSG32 u_Intra_MB                                  :  1;
            UNSG32 u_CC                                        :  1;
            UNSG32 u_use_intra_dc_vlc                          :  1;
            UNSG32 u_pattern_code                              :  1;
            UNSG32 u_scan_order                                :  2;
            UNSG32 RSVDx0_b6                                   : 26;
    ///////////////////////////////////////////////////////////
    } SIE_ResPROP_MPEG4;

    ///////////////////////////////////////////////////////////
     SIGN32 ResPROP_MPEG4_drvrd(SIE_ResPROP_MPEG4 *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 ResPROP_MPEG4_drvwr(SIE_ResPROP_MPEG4 *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void ResPROP_MPEG4_reset(SIE_ResPROP_MPEG4 *p);
     SIGN32 ResPROP_MPEG4_cmp  (SIE_ResPROP_MPEG4 *p, SIE_ResPROP_MPEG4 *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define ResPROP_MPEG4_check(p,pie,pfx,hLOG) ResPROP_MPEG4_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define ResPROP_MPEG4_print(p,    pfx,hLOG) ResPROP_MPEG4_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: ResPROP_MPEG4
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE ResPROP_JPEG                             (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 1  DCTblId                   
///                                    : luma                      0x0
///                                    : chroma                    0x1
///                                                 ###
///                                                 * Selects Huffman table used to decode or encode DC coefficients
///                                                 ###
///               %unsigned 1  ACTblId                   
///                                    : luma                      0x0
///                                    : chroma                    0x1
///                                                 ###
///                                                 * Selects Huffman table used to decode or encode AC coefficients
///                                                 * End of ResPROP_JPEG
///                                                 ###
///               %%        30         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:       2b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_ResPROP_JPEG
#define h_ResPROP_JPEG (){}

    #define     BA_ResPROP_JPEG_DCTblId                        0x0000
    #define     B16ResPROP_JPEG_DCTblId                        0x0000
    #define   LSb32ResPROP_JPEG_DCTblId                           0
    #define   LSb16ResPROP_JPEG_DCTblId                           0
    #define       bResPROP_JPEG_DCTblId                        1
    #define   MSK32ResPROP_JPEG_DCTblId                           0x00000001
    #define        ResPROP_JPEG_DCTblId_luma                                0x0
    #define        ResPROP_JPEG_DCTblId_chroma                              0x1

    #define     BA_ResPROP_JPEG_ACTblId                        0x0000
    #define     B16ResPROP_JPEG_ACTblId                        0x0000
    #define   LSb32ResPROP_JPEG_ACTblId                           1
    #define   LSb16ResPROP_JPEG_ACTblId                           1
    #define       bResPROP_JPEG_ACTblId                        1
    #define   MSK32ResPROP_JPEG_ACTblId                           0x00000002
    #define        ResPROP_JPEG_ACTblId_luma                                0x0
    #define        ResPROP_JPEG_ACTblId_chroma                              0x1
    ///////////////////////////////////////////////////////////

    typedef struct SIE_ResPROP_JPEG {
    ///////////////////////////////////////////////////////////
    #define   GET32ResPROP_JPEG_DCTblId(r32)                   _BFGET_(r32, 0, 0)
    #define   SET32ResPROP_JPEG_DCTblId(r32,v)                 _BFSET_(r32, 0, 0,v)
    #define   GET16ResPROP_JPEG_DCTblId(r16)                   _BFGET_(r16, 0, 0)
    #define   SET16ResPROP_JPEG_DCTblId(r16,v)                 _BFSET_(r16, 0, 0,v)

    #define   GET32ResPROP_JPEG_ACTblId(r32)                   _BFGET_(r32, 1, 1)
    #define   SET32ResPROP_JPEG_ACTblId(r32,v)                 _BFSET_(r32, 1, 1,v)
    #define   GET16ResPROP_JPEG_ACTblId(r16)                   _BFGET_(r16, 1, 1)
    #define   SET16ResPROP_JPEG_ACTblId(r16,v)                 _BFSET_(r16, 1, 1,v)

            UNSG32 u_DCTblId                                   :  1;
            UNSG32 u_ACTblId                                   :  1;
            UNSG32 RSVDx0_b2                                   : 30;
    ///////////////////////////////////////////////////////////
    } SIE_ResPROP_JPEG;

    ///////////////////////////////////////////////////////////
     SIGN32 ResPROP_JPEG_drvrd(SIE_ResPROP_JPEG *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 ResPROP_JPEG_drvwr(SIE_ResPROP_JPEG *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void ResPROP_JPEG_reset(SIE_ResPROP_JPEG *p);
     SIGN32 ResPROP_JPEG_cmp  (SIE_ResPROP_JPEG *p, SIE_ResPROP_JPEG *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define ResPROP_JPEG_check(p,pie,pfx,hLOG) ResPROP_JPEG_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define ResPROP_JPEG_print(p,    pfx,hLOG) ResPROP_JPEG_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: ResPROP_JPEG
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE TotalCoeff6                              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 5  nc_0i                     
///               %unsigned 5  nc_1i                     
///               %unsigned 5  nc_2i                     
///                                    ###
///                                    * The number of non-zero transform coefficients in a 4x4 Y or UV coefficient block. Totally 3 blocks are in order 0 ~ 2.
///                                    ###
///               %%        1          # Stuffing bits...
///               %unsigned 5  nc1_0i                    
///               %unsigned 5  nc1_1i                    
///               %unsigned 5  nc1_2i                    
///               %%        1          # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      30b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_TotalCoeff6
#define h_TotalCoeff6 (){}

    #define     BA_TotalCoeff6_nc_0i                           0x0000
    #define     B16TotalCoeff6_nc_0i                           0x0000
    #define   LSb32TotalCoeff6_nc_0i                              0
    #define   LSb16TotalCoeff6_nc_0i                              0
    #define       bTotalCoeff6_nc_0i                           5
    #define   MSK32TotalCoeff6_nc_0i                              0x0000001F

    #define     BA_TotalCoeff6_nc_1i                           0x0000
    #define     B16TotalCoeff6_nc_1i                           0x0000
    #define   LSb32TotalCoeff6_nc_1i                              5
    #define   LSb16TotalCoeff6_nc_1i                              5
    #define       bTotalCoeff6_nc_1i                           5
    #define   MSK32TotalCoeff6_nc_1i                              0x000003E0

    #define     BA_TotalCoeff6_nc_2i                           0x0001
    #define     B16TotalCoeff6_nc_2i                           0x0000
    #define   LSb32TotalCoeff6_nc_2i                              10
    #define   LSb16TotalCoeff6_nc_2i                              10
    #define       bTotalCoeff6_nc_2i                           5
    #define   MSK32TotalCoeff6_nc_2i                              0x00007C00

    #define     BA_TotalCoeff6_nc1_0i                          0x0002
    #define     B16TotalCoeff6_nc1_0i                          0x0002
    #define   LSb32TotalCoeff6_nc1_0i                             16
    #define   LSb16TotalCoeff6_nc1_0i                             0
    #define       bTotalCoeff6_nc1_0i                          5
    #define   MSK32TotalCoeff6_nc1_0i                             0x001F0000

    #define     BA_TotalCoeff6_nc1_1i                          0x0002
    #define     B16TotalCoeff6_nc1_1i                          0x0002
    #define   LSb32TotalCoeff6_nc1_1i                             21
    #define   LSb16TotalCoeff6_nc1_1i                             5
    #define       bTotalCoeff6_nc1_1i                          5
    #define   MSK32TotalCoeff6_nc1_1i                             0x03E00000

    #define     BA_TotalCoeff6_nc1_2i                          0x0003
    #define     B16TotalCoeff6_nc1_2i                          0x0002
    #define   LSb32TotalCoeff6_nc1_2i                             26
    #define   LSb16TotalCoeff6_nc1_2i                             10
    #define       bTotalCoeff6_nc1_2i                          5
    #define   MSK32TotalCoeff6_nc1_2i                             0x7C000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_TotalCoeff6 {
    ///////////////////////////////////////////////////////////
    #define   GET32TotalCoeff6_nc_0i(r32)                      _BFGET_(r32, 4, 0)
    #define   SET32TotalCoeff6_nc_0i(r32,v)                    _BFSET_(r32, 4, 0,v)
    #define   GET16TotalCoeff6_nc_0i(r16)                      _BFGET_(r16, 4, 0)
    #define   SET16TotalCoeff6_nc_0i(r16,v)                    _BFSET_(r16, 4, 0,v)

    #define   GET32TotalCoeff6_nc_1i(r32)                      _BFGET_(r32, 9, 5)
    #define   SET32TotalCoeff6_nc_1i(r32,v)                    _BFSET_(r32, 9, 5,v)
    #define   GET16TotalCoeff6_nc_1i(r16)                      _BFGET_(r16, 9, 5)
    #define   SET16TotalCoeff6_nc_1i(r16,v)                    _BFSET_(r16, 9, 5,v)

    #define   GET32TotalCoeff6_nc_2i(r32)                      _BFGET_(r32,14,10)
    #define   SET32TotalCoeff6_nc_2i(r32,v)                    _BFSET_(r32,14,10,v)
    #define   GET16TotalCoeff6_nc_2i(r16)                      _BFGET_(r16,14,10)
    #define   SET16TotalCoeff6_nc_2i(r16,v)                    _BFSET_(r16,14,10,v)

    #define   GET32TotalCoeff6_nc1_0i(r32)                     _BFGET_(r32,20,16)
    #define   SET32TotalCoeff6_nc1_0i(r32,v)                   _BFSET_(r32,20,16,v)
    #define   GET16TotalCoeff6_nc1_0i(r16)                     _BFGET_(r16, 4, 0)
    #define   SET16TotalCoeff6_nc1_0i(r16,v)                   _BFSET_(r16, 4, 0,v)

    #define   GET32TotalCoeff6_nc1_1i(r32)                     _BFGET_(r32,25,21)
    #define   SET32TotalCoeff6_nc1_1i(r32,v)                   _BFSET_(r32,25,21,v)
    #define   GET16TotalCoeff6_nc1_1i(r16)                     _BFGET_(r16, 9, 5)
    #define   SET16TotalCoeff6_nc1_1i(r16,v)                   _BFSET_(r16, 9, 5,v)

    #define   GET32TotalCoeff6_nc1_2i(r32)                     _BFGET_(r32,30,26)
    #define   SET32TotalCoeff6_nc1_2i(r32,v)                   _BFSET_(r32,30,26,v)
    #define   GET16TotalCoeff6_nc1_2i(r16)                     _BFGET_(r16,14,10)
    #define   SET16TotalCoeff6_nc1_2i(r16,v)                   _BFSET_(r16,14,10,v)

            UNSG32 u_nc_0i                                     :  5;
            UNSG32 u_nc_1i                                     :  5;
            UNSG32 u_nc_2i                                     :  5;
            UNSG32 RSVDx0_b15                                  :  1;
            UNSG32 u_nc1_0i                                    :  5;
            UNSG32 u_nc1_1i                                    :  5;
            UNSG32 u_nc1_2i                                    :  5;
            UNSG32 RSVDx0_b31                                  :  1;
    ///////////////////////////////////////////////////////////
    } SIE_TotalCoeff6;

    ///////////////////////////////////////////////////////////
     SIGN32 TotalCoeff6_drvrd(SIE_TotalCoeff6 *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 TotalCoeff6_drvwr(SIE_TotalCoeff6 *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void TotalCoeff6_reset(SIE_TotalCoeff6 *p);
     SIGN32 TotalCoeff6_cmp  (SIE_TotalCoeff6 *p, SIE_TotalCoeff6 *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define TotalCoeff6_check(p,pie,pfx,hLOG) TotalCoeff6_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define TotalCoeff6_print(p,    pfx,hLOG) TotalCoeff6_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: TotalCoeff6
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE ASEPopTotalCoeff                         (4,2)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 TotalCoeff           
///               $TotalCoeff6         TotalCoeff        REG       [2]
///                                    ###
///                                    * The number of non-zero transform coefficients in a 4x4 Y or UV coefficient block in 3 block group. Totally 12 blocks in 4 groups are in order 0 ~ 11.
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      60b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_ASEPopTotalCoeff
#define h_ASEPopTotalCoeff (){}

    #define     RA_ASEPopTotalCoeff_TotalCoeff                 0x0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_ASEPopTotalCoeff {
    ///////////////////////////////////////////////////////////
              SIE_TotalCoeff6                                  ie_TotalCoeff[2];
    ///////////////////////////////////////////////////////////
    } SIE_ASEPopTotalCoeff;

    ///////////////////////////////////////////////////////////
     SIGN32 ASEPopTotalCoeff_drvrd(SIE_ASEPopTotalCoeff *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 ASEPopTotalCoeff_drvwr(SIE_ASEPopTotalCoeff *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void ASEPopTotalCoeff_reset(SIE_ASEPopTotalCoeff *p);
     SIGN32 ASEPopTotalCoeff_cmp  (SIE_ASEPopTotalCoeff *p, SIE_ASEPopTotalCoeff *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define ASEPopTotalCoeff_check(p,pie,pfx,hLOG) ASEPopTotalCoeff_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define ASEPopTotalCoeff_print(p,    pfx,hLOG) ASEPopTotalCoeff_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: ASEPopTotalCoeff
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE RF64PIC                 biu              (4,4)
///     ###
///     * RF64 picture-level information for ALU64 extensions; padded to 64b. Used in placed of BIU register for efficiency. Parameters in this interface should only be updated at the slice boundary.
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 3  format                    
///                                    : h264                      0x0
///                                    : wmv                       0x1
///                                                 ###
///                                                 * VC-1 Main Profile
///                                                 ###
///                                    : mpg2                      0x2
///                                    : other                     0x3
///                                    : mpg4                      0x4
///                                    : vc1ap                     0x5
///                                                 ###
///                                                 * VC-1 Advanced Profile
///                                                 ###
///                                    : h263                      0x6
///                                    : avs                       0x7
///                                                 ###
///                                                 * Format of the current video stream
///                                                 ###
///               %unsigned 1  cabac                     
///                                    ###
///                                    * Whether current slice is coded in CABAC
///                                    ###
///               %unsigned 2  picType                   
///                                    : I                         0x0
///                                    : P                         0x1
///                                    : B                         0x2
///                                                 ###
///                                                 * Used by PMV to qualify between P_skip & B_skip
///                                                 ###
///               %unsigned 5  maxL0                     
///                                    ###
///                                    * H264: num_ref_idx_l0_active_minus1
///                                    ###
///               %unsigned 5  maxL1                     
///                                    ###
///                                    * H264: num_ref_idx_l1_active_minus1
///                                    ###
///               %unsigned 1  MbaffPic                  
///                                    ###
///                                    * Whether current picture is Mbaff pic or not; for FOP
///                                    * For VC-1:
///                                    * (~Mbaffpic && ~fieldPic) -> progressive
///                                    * (Mbaffpic && ~fieldPic) -> interlace frame
///                                    ###
///               %unsigned 1  fieldPic                  
///                                    ###
///                                    * Whether current picture is field coded or not; for FOP
///                                    * For VC-1:
///                                    * (~MbaffPic && fieldPic) -> interlace field, one ref;
///                                    * (MbaffPic && fieldPic) -> interlace field, two ref
///                                    ###
///               %unsigned 1  spatialPred               
///                                    ###
///                                    * Spatial direct prediction modee; for dirMV.
///                                    ###
///               %unsigned 1  colPicMbaff               
///                                    ###
///                                    * Whether colocated pic is Mbaff pic or not; for dirMV
///                                    ###
///               %unsigned 1  colPicField               
///                                    ###
///                                    * Whether colocated picture is field pic or not; for dirMV
///                                    ###
///               %unsigned 1  colPicST                  
///                                    ###
///                                    * Co-located picture is a long-term (0) or short-term (1) reference picture; for dirMV.
///                                    ###
///               %signed   5  AC0Offset                 
///                                    ###
///                                    * = slice_alpha_c0_offset_div2<<1, -12 ~ +12, inclusive, even numbers only. For FOP only.
///                                    ###
///               %signed   5  BetaOffset                
///                                    ###
///                                    * = slice_beta_offset_div2<<1, -12 ~ +12, inclusive, even numbers only. For FOP only.
///                                    ###
///     @ 0x00004                      (P)
///               %unsigned 16 dqAcLimit                 
///                                    ###
///                                    * Saturation limit for AC dequantization
///                                    * Also apply for universal dequantization
///                                    ###
///               %unsigned 14 dqDcLimit                 
///                                    ###
///                                    * Saturation limit for DC dequantization
///                                    ###
///               %unsigned 2  mismatch                  
///                                    : none                      0x0
///                                    : mpeg1                     0x1
///                                    : mpeg2                     0x2
///                                                 ###
///                                                 * mismatch control, for AC dequant only
///                                                 ###
///     @ 0x00008                      (P)
///               %unsigned 16 picW                      
///                                    ###
///                                    * Width of current picture; up to 2047
///                                    ###
///               %unsigned 13 picH                      
///                                    ###
///                                    * Height of current picture; up to 2047. For vcMsg only
///                                    ###
///               %unsigned 1  btmFldPic                 
///                                    ###
///                                    * H.264: Current picture is bottom field; for vcMsg. Valid only when fieldPic==1.
///                                    ###
///               %unsigned 2  hint                      
///                                    ###
///                                    * Same as CacheMsg.hint; for vcMsg only
///                                    ###
///     @ 0x0000C                      (P)
///               %unsigned 8  shiftLumaX                
///                                    ###
///                                    * (For vcMsg only) Shift amount lookup table for Luma X direction. 4 entries, 2-bit per entry, indexed by mvx[1:0] in little-endian format
///                                    ###
///               %unsigned 8  shiftLumaY                
///                                    ###
///                                    * (For vcMsg only) Shift amount lookup table for Luma Y direction. 4 entries, 2-bit per entry, indexed by mvy[1:0] in little-endian format
///                                    ###
///               %unsigned 8  shiftChromaX              
///                                    ###
///                                    * (For vcMsg only) Shift amount lookup table for Chroma X direction. 4 entries, 2-bit per entry, indexed by mvx[1:0] in little-endian format
///                                    ###
///               %unsigned 8  shiftChromaY              
///                                    ###
///                                    * (For vcMsg only) Shift amount lookup table for Chroma Y direction. 4 entries, 2-bit per entry, indexed by mvy[1:0] in little-endian format
///                                    ###
///     @ 0x00010                      (P)
///               %unsigned 4  fracTapDiv2Y              
///                                    ###
///                                    * (Tap size / 2) for luma fractional MV interpolation
///                                    ###
///               %unsigned 4  fracTapDiv2C              
///                                    ###
///                                    * (Tap size / 2) for chroma fractional MV interpolation
///                                    ###
///               %unsigned 6  IPCM_QPU                  
///                                    ###
///                                    * QPU for IPCM coded MBs; for H.264 FOP
///                                    ###
///               %unsigned 6  IPCM_QPV                  
///                                    ###
///                                    * QPV for IPCM coded MBs; for H.264 FOP
///                                    ###
///               %unsigned 12 RSVD12                    
///                                    ###
///                                    * padding to 32 bits
///                                    ###
///     @ 0x00014                      (P)
///               %unsigned 5  PQUANT                    
///                                    ###
///                                    * picture-level quantization factor
///                                    ###
///               %unsigned 2  FRFD                      
///                                    ###
///                                    * Forward reference picture distance, 0~3.
///                                    * Used by VC1 for interlace P field PMV, or for interlace B field forward PMV
///                                    ###
///               %unsigned 2  BRFD                      
///                                    ###
///                                    * Backward reference picture distance, 0~3.
///                                    * Used by VC1 for interlace B field backward PMV
///                                    ###
///               %unsigned 1  secondFld                 
///                                    ###
///                                    * Used by PMV for interlace field picture: whether current field is 1st field or 2nd field of display picture
///                                    ###
///               %unsigned 2  mvRange                   
///                                    ###
///                                    * 0~3; used to lookup range_x & range_y for PMV; see VC-1 spec table 75.
///                                    ###
///               %unsigned 1  hybridMvThres             
///                                    ###
///                                    * 0: threshold = 16; 1: threshold = 32
///                                    ###
///               %unsigned 1  firstMbIntra              
///                                    ###
///                                    * 0: first MB or block is inter coded; 1: intra coded; used for VC-1 Fop
///                                    ###
///               %unsigned 1  halfPixel                 
///                                    ###
///                                    * Half pixel flag, for VC-1 PMV interlace field mode.
///                                    ###
///               %unsigned 1  forwRefInterlace          
///                                    ###
///                                    * For VC-1 interlace frame picture in VCMSG extension forward reference is 0: progressive coded; 1: interlace coded
///                                    ###
///               %unsigned 1  backRefInterlace          
///                                    ###
///                                    * For VC-1 interlace frame picture in VCMSG extension backward reference is 0: progressive coded; 1: interlace coded
///                                    ###
///               %unsigned 2  FrmTransACSet             
///                                    ###
///                                    * For VC-1 frame-level transform AC coding set selection (for Cb and Cr block; and inter Y block).
///                                    * Valid values are 0, 1, and 2
///                                    ###
///               %unsigned 2  FrmTransACSet2            
///                                    ###
///                                    * For VC-1 frame-level transform AC table-2 index selection (for I-frame Y block)
///                                    * Valid values are 0, 1, and 2
///                                    ###
///               %unsigned 1  PQIndexGT8                
///                                    ###
///                                    * Indicator to represent whether Picture Quantized Index (PQIndexG8, defined in Table 36 in VC-1 spec) is greater than 8.
///                                    * 0: value of PQIndex is less than or equal to 8
///                                    * 1: value of PQIndex is greater than 8
///                                    ###
///               %unsigned 1  EscapeTBL                 
///                                    ###
///                                    * For VC-1 to select escape table in residual decoding
///                                    ###
///               %unsigned 4  format1                   
///                                    : RV9                       0x0
///                                    : RV8                       0x1
///                                    : vp8                       0x2
///                                    : jpeg                      0x3
///               %unsigned 1  noReorder                 
///                                    ###
///                                    * For ASE, disable coefficient reorder.
///                                    ###
///               %unsigned 1  iplusModeOn               
///                                    ###
///                                    * For ASE, IPLUS mode is on or not.
///                                    ###
///               %unsigned 3  RSVD3                     
///                                    ###
///                                    * padding to 32 bits
///                                    ###
///     @ 0x00018                      (P)
///     # 0x00018 RSVD                 
///               $LUT64b              RSVD              REG       [5]
///                                    ###
///                                    * Reserved for alignment
///                                    ###
///     @ 0x00040                      (P)
///     # 0x00040 rIDX2BID             
///               $IDX2BID             rIDX2BID          REG          
///                                    ###
///                                    * Defined in 'decHal_mbLvl.sxw.txt'
///                                    * End of RF64PIC
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     256B, bits:    2048b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_RF64PIC
#define h_RF64PIC (){}

    #define     BA_RF64PIC_format                              0x0000
    #define     B16RF64PIC_format                              0x0000
    #define   LSb32RF64PIC_format                                 0
    #define   LSb16RF64PIC_format                                 0
    #define       bRF64PIC_format                              3
    #define   MSK32RF64PIC_format                                 0x00000007
    #define        RF64PIC_format_h264                                      0x0
    #define        RF64PIC_format_wmv                                       0x1
    #define        RF64PIC_format_mpg2                                      0x2
    #define        RF64PIC_format_other                                     0x3
    #define        RF64PIC_format_mpg4                                      0x4
    #define        RF64PIC_format_vc1ap                                     0x5
    #define        RF64PIC_format_h263                                      0x6
    #define        RF64PIC_format_avs                                       0x7

    #define     BA_RF64PIC_cabac                               0x0000
    #define     B16RF64PIC_cabac                               0x0000
    #define   LSb32RF64PIC_cabac                                  3
    #define   LSb16RF64PIC_cabac                                  3
    #define       bRF64PIC_cabac                               1
    #define   MSK32RF64PIC_cabac                                  0x00000008

    #define     BA_RF64PIC_picType                             0x0000
    #define     B16RF64PIC_picType                             0x0000
    #define   LSb32RF64PIC_picType                                4
    #define   LSb16RF64PIC_picType                                4
    #define       bRF64PIC_picType                             2
    #define   MSK32RF64PIC_picType                                0x00000030
    #define        RF64PIC_picType_I                                        0x0
    #define        RF64PIC_picType_P                                        0x1
    #define        RF64PIC_picType_B                                        0x2

    #define     BA_RF64PIC_maxL0                               0x0000
    #define     B16RF64PIC_maxL0                               0x0000
    #define   LSb32RF64PIC_maxL0                                  6
    #define   LSb16RF64PIC_maxL0                                  6
    #define       bRF64PIC_maxL0                               5
    #define   MSK32RF64PIC_maxL0                                  0x000007C0

    #define     BA_RF64PIC_maxL1                               0x0001
    #define     B16RF64PIC_maxL1                               0x0000
    #define   LSb32RF64PIC_maxL1                                  11
    #define   LSb16RF64PIC_maxL1                                  11
    #define       bRF64PIC_maxL1                               5
    #define   MSK32RF64PIC_maxL1                                  0x0000F800

    #define     BA_RF64PIC_MbaffPic                            0x0002
    #define     B16RF64PIC_MbaffPic                            0x0002
    #define   LSb32RF64PIC_MbaffPic                               16
    #define   LSb16RF64PIC_MbaffPic                               0
    #define       bRF64PIC_MbaffPic                            1
    #define   MSK32RF64PIC_MbaffPic                               0x00010000

    #define     BA_RF64PIC_fieldPic                            0x0002
    #define     B16RF64PIC_fieldPic                            0x0002
    #define   LSb32RF64PIC_fieldPic                               17
    #define   LSb16RF64PIC_fieldPic                               1
    #define       bRF64PIC_fieldPic                            1
    #define   MSK32RF64PIC_fieldPic                               0x00020000

    #define     BA_RF64PIC_spatialPred                         0x0002
    #define     B16RF64PIC_spatialPred                         0x0002
    #define   LSb32RF64PIC_spatialPred                            18
    #define   LSb16RF64PIC_spatialPred                            2
    #define       bRF64PIC_spatialPred                         1
    #define   MSK32RF64PIC_spatialPred                            0x00040000

    #define     BA_RF64PIC_colPicMbaff                         0x0002
    #define     B16RF64PIC_colPicMbaff                         0x0002
    #define   LSb32RF64PIC_colPicMbaff                            19
    #define   LSb16RF64PIC_colPicMbaff                            3
    #define       bRF64PIC_colPicMbaff                         1
    #define   MSK32RF64PIC_colPicMbaff                            0x00080000

    #define     BA_RF64PIC_colPicField                         0x0002
    #define     B16RF64PIC_colPicField                         0x0002
    #define   LSb32RF64PIC_colPicField                            20
    #define   LSb16RF64PIC_colPicField                            4
    #define       bRF64PIC_colPicField                         1
    #define   MSK32RF64PIC_colPicField                            0x00100000

    #define     BA_RF64PIC_colPicST                            0x0002
    #define     B16RF64PIC_colPicST                            0x0002
    #define   LSb32RF64PIC_colPicST                               21
    #define   LSb16RF64PIC_colPicST                               5
    #define       bRF64PIC_colPicST                            1
    #define   MSK32RF64PIC_colPicST                               0x00200000

    #define     BA_RF64PIC_AC0Offset                           0x0002
    #define     B16RF64PIC_AC0Offset                           0x0002
    #define   LSb32RF64PIC_AC0Offset                              22
    #define   LSb16RF64PIC_AC0Offset                              6
    #define       bRF64PIC_AC0Offset                           5
    #define   MSK32RF64PIC_AC0Offset                              0x07C00000

    #define     BA_RF64PIC_BetaOffset                          0x0003
    #define     B16RF64PIC_BetaOffset                          0x0002
    #define   LSb32RF64PIC_BetaOffset                             27
    #define   LSb16RF64PIC_BetaOffset                             11
    #define       bRF64PIC_BetaOffset                          5
    #define   MSK32RF64PIC_BetaOffset                             0xF8000000
    ///////////////////////////////////////////////////////////

    #define     BA_RF64PIC_dqAcLimit                           0x0004
    #define     B16RF64PIC_dqAcLimit                           0x0004
    #define   LSb32RF64PIC_dqAcLimit                              0
    #define   LSb16RF64PIC_dqAcLimit                              0
    #define       bRF64PIC_dqAcLimit                           16
    #define   MSK32RF64PIC_dqAcLimit                              0x0000FFFF

    #define     BA_RF64PIC_dqDcLimit                           0x0006
    #define     B16RF64PIC_dqDcLimit                           0x0006
    #define   LSb32RF64PIC_dqDcLimit                              16
    #define   LSb16RF64PIC_dqDcLimit                              0
    #define       bRF64PIC_dqDcLimit                           14
    #define   MSK32RF64PIC_dqDcLimit                              0x3FFF0000

    #define     BA_RF64PIC_mismatch                            0x0007
    #define     B16RF64PIC_mismatch                            0x0006
    #define   LSb32RF64PIC_mismatch                               30
    #define   LSb16RF64PIC_mismatch                               14
    #define       bRF64PIC_mismatch                            2
    #define   MSK32RF64PIC_mismatch                               0xC0000000
    #define        RF64PIC_mismatch_none                                    0x0
    #define        RF64PIC_mismatch_mpeg1                                   0x1
    #define        RF64PIC_mismatch_mpeg2                                   0x2
    ///////////////////////////////////////////////////////////

    #define     BA_RF64PIC_picW                                0x0008
    #define     B16RF64PIC_picW                                0x0008
    #define   LSb32RF64PIC_picW                                   0
    #define   LSb16RF64PIC_picW                                   0
    #define       bRF64PIC_picW                                16
    #define   MSK32RF64PIC_picW                                   0x0000FFFF

    #define     BA_RF64PIC_picH                                0x000A
    #define     B16RF64PIC_picH                                0x000A
    #define   LSb32RF64PIC_picH                                   16
    #define   LSb16RF64PIC_picH                                   0
    #define       bRF64PIC_picH                                13
    #define   MSK32RF64PIC_picH                                   0x1FFF0000

    #define     BA_RF64PIC_btmFldPic                           0x000B
    #define     B16RF64PIC_btmFldPic                           0x000A
    #define   LSb32RF64PIC_btmFldPic                              29
    #define   LSb16RF64PIC_btmFldPic                              13
    #define       bRF64PIC_btmFldPic                           1
    #define   MSK32RF64PIC_btmFldPic                              0x20000000

    #define     BA_RF64PIC_hint                                0x000B
    #define     B16RF64PIC_hint                                0x000A
    #define   LSb32RF64PIC_hint                                   30
    #define   LSb16RF64PIC_hint                                   14
    #define       bRF64PIC_hint                                2
    #define   MSK32RF64PIC_hint                                   0xC0000000
    ///////////////////////////////////////////////////////////

    #define     BA_RF64PIC_shiftLumaX                          0x000C
    #define     B16RF64PIC_shiftLumaX                          0x000C
    #define   LSb32RF64PIC_shiftLumaX                             0
    #define   LSb16RF64PIC_shiftLumaX                             0
    #define       bRF64PIC_shiftLumaX                          8
    #define   MSK32RF64PIC_shiftLumaX                             0x000000FF

    #define     BA_RF64PIC_shiftLumaY                          0x000D
    #define     B16RF64PIC_shiftLumaY                          0x000C
    #define   LSb32RF64PIC_shiftLumaY                             8
    #define   LSb16RF64PIC_shiftLumaY                             8
    #define       bRF64PIC_shiftLumaY                          8
    #define   MSK32RF64PIC_shiftLumaY                             0x0000FF00

    #define     BA_RF64PIC_shiftChromaX                        0x000E
    #define     B16RF64PIC_shiftChromaX                        0x000E
    #define   LSb32RF64PIC_shiftChromaX                           16
    #define   LSb16RF64PIC_shiftChromaX                           0
    #define       bRF64PIC_shiftChromaX                        8
    #define   MSK32RF64PIC_shiftChromaX                           0x00FF0000

    #define     BA_RF64PIC_shiftChromaY                        0x000F
    #define     B16RF64PIC_shiftChromaY                        0x000E
    #define   LSb32RF64PIC_shiftChromaY                           24
    #define   LSb16RF64PIC_shiftChromaY                           8
    #define       bRF64PIC_shiftChromaY                        8
    #define   MSK32RF64PIC_shiftChromaY                           0xFF000000
    ///////////////////////////////////////////////////////////

    #define     BA_RF64PIC_fracTapDiv2Y                        0x0010
    #define     B16RF64PIC_fracTapDiv2Y                        0x0010
    #define   LSb32RF64PIC_fracTapDiv2Y                           0
    #define   LSb16RF64PIC_fracTapDiv2Y                           0
    #define       bRF64PIC_fracTapDiv2Y                        4
    #define   MSK32RF64PIC_fracTapDiv2Y                           0x0000000F

    #define     BA_RF64PIC_fracTapDiv2C                        0x0010
    #define     B16RF64PIC_fracTapDiv2C                        0x0010
    #define   LSb32RF64PIC_fracTapDiv2C                           4
    #define   LSb16RF64PIC_fracTapDiv2C                           4
    #define       bRF64PIC_fracTapDiv2C                        4
    #define   MSK32RF64PIC_fracTapDiv2C                           0x000000F0

    #define     BA_RF64PIC_IPCM_QPU                            0x0011
    #define     B16RF64PIC_IPCM_QPU                            0x0010
    #define   LSb32RF64PIC_IPCM_QPU                               8
    #define   LSb16RF64PIC_IPCM_QPU                               8
    #define       bRF64PIC_IPCM_QPU                            6
    #define   MSK32RF64PIC_IPCM_QPU                               0x00003F00

    #define     BA_RF64PIC_IPCM_QPV                            0x0011
    #define     B16RF64PIC_IPCM_QPV                            0x0010
    #define   LSb32RF64PIC_IPCM_QPV                               14
    #define   LSb16RF64PIC_IPCM_QPV                               14
    #define       bRF64PIC_IPCM_QPV                            6
    #define   MSK32RF64PIC_IPCM_QPV                               0x000FC000

    #define     BA_RF64PIC_RSVD12                              0x0012
    #define     B16RF64PIC_RSVD12                              0x0012
    #define   LSb32RF64PIC_RSVD12                                 20
    #define   LSb16RF64PIC_RSVD12                                 4
    #define       bRF64PIC_RSVD12                              12
    #define   MSK32RF64PIC_RSVD12                                 0xFFF00000
    ///////////////////////////////////////////////////////////

    #define     BA_RF64PIC_PQUANT                              0x0014
    #define     B16RF64PIC_PQUANT                              0x0014
    #define   LSb32RF64PIC_PQUANT                                 0
    #define   LSb16RF64PIC_PQUANT                                 0
    #define       bRF64PIC_PQUANT                              5
    #define   MSK32RF64PIC_PQUANT                                 0x0000001F

    #define     BA_RF64PIC_FRFD                                0x0014
    #define     B16RF64PIC_FRFD                                0x0014
    #define   LSb32RF64PIC_FRFD                                   5
    #define   LSb16RF64PIC_FRFD                                   5
    #define       bRF64PIC_FRFD                                2
    #define   MSK32RF64PIC_FRFD                                   0x00000060

    #define     BA_RF64PIC_BRFD                                0x0014
    #define     B16RF64PIC_BRFD                                0x0014
    #define   LSb32RF64PIC_BRFD                                   7
    #define   LSb16RF64PIC_BRFD                                   7
    #define       bRF64PIC_BRFD                                2
    #define   MSK32RF64PIC_BRFD                                   0x00000180

    #define     BA_RF64PIC_secondFld                           0x0015
    #define     B16RF64PIC_secondFld                           0x0014
    #define   LSb32RF64PIC_secondFld                              9
    #define   LSb16RF64PIC_secondFld                              9
    #define       bRF64PIC_secondFld                           1
    #define   MSK32RF64PIC_secondFld                              0x00000200

    #define     BA_RF64PIC_mvRange                             0x0015
    #define     B16RF64PIC_mvRange                             0x0014
    #define   LSb32RF64PIC_mvRange                                10
    #define   LSb16RF64PIC_mvRange                                10
    #define       bRF64PIC_mvRange                             2
    #define   MSK32RF64PIC_mvRange                                0x00000C00

    #define     BA_RF64PIC_hybridMvThres                       0x0015
    #define     B16RF64PIC_hybridMvThres                       0x0014
    #define   LSb32RF64PIC_hybridMvThres                          12
    #define   LSb16RF64PIC_hybridMvThres                          12
    #define       bRF64PIC_hybridMvThres                       1
    #define   MSK32RF64PIC_hybridMvThres                          0x00001000

    #define     BA_RF64PIC_firstMbIntra                        0x0015
    #define     B16RF64PIC_firstMbIntra                        0x0014
    #define   LSb32RF64PIC_firstMbIntra                           13
    #define   LSb16RF64PIC_firstMbIntra                           13
    #define       bRF64PIC_firstMbIntra                        1
    #define   MSK32RF64PIC_firstMbIntra                           0x00002000

    #define     BA_RF64PIC_halfPixel                           0x0015
    #define     B16RF64PIC_halfPixel                           0x0014
    #define   LSb32RF64PIC_halfPixel                              14
    #define   LSb16RF64PIC_halfPixel                              14
    #define       bRF64PIC_halfPixel                           1
    #define   MSK32RF64PIC_halfPixel                              0x00004000

    #define     BA_RF64PIC_forwRefInterlace                    0x0015
    #define     B16RF64PIC_forwRefInterlace                    0x0014
    #define   LSb32RF64PIC_forwRefInterlace                       15
    #define   LSb16RF64PIC_forwRefInterlace                       15
    #define       bRF64PIC_forwRefInterlace                    1
    #define   MSK32RF64PIC_forwRefInterlace                       0x00008000

    #define     BA_RF64PIC_backRefInterlace                    0x0016
    #define     B16RF64PIC_backRefInterlace                    0x0016
    #define   LSb32RF64PIC_backRefInterlace                       16
    #define   LSb16RF64PIC_backRefInterlace                       0
    #define       bRF64PIC_backRefInterlace                    1
    #define   MSK32RF64PIC_backRefInterlace                       0x00010000

    #define     BA_RF64PIC_FrmTransACSet                       0x0016
    #define     B16RF64PIC_FrmTransACSet                       0x0016
    #define   LSb32RF64PIC_FrmTransACSet                          17
    #define   LSb16RF64PIC_FrmTransACSet                          1
    #define       bRF64PIC_FrmTransACSet                       2
    #define   MSK32RF64PIC_FrmTransACSet                          0x00060000

    #define     BA_RF64PIC_FrmTransACSet2                      0x0016
    #define     B16RF64PIC_FrmTransACSet2                      0x0016
    #define   LSb32RF64PIC_FrmTransACSet2                         19
    #define   LSb16RF64PIC_FrmTransACSet2                         3
    #define       bRF64PIC_FrmTransACSet2                      2
    #define   MSK32RF64PIC_FrmTransACSet2                         0x00180000

    #define     BA_RF64PIC_PQIndexGT8                          0x0016
    #define     B16RF64PIC_PQIndexGT8                          0x0016
    #define   LSb32RF64PIC_PQIndexGT8                             21
    #define   LSb16RF64PIC_PQIndexGT8                             5
    #define       bRF64PIC_PQIndexGT8                          1
    #define   MSK32RF64PIC_PQIndexGT8                             0x00200000

    #define     BA_RF64PIC_EscapeTBL                           0x0016
    #define     B16RF64PIC_EscapeTBL                           0x0016
    #define   LSb32RF64PIC_EscapeTBL                              22
    #define   LSb16RF64PIC_EscapeTBL                              6
    #define       bRF64PIC_EscapeTBL                           1
    #define   MSK32RF64PIC_EscapeTBL                              0x00400000

    #define     BA_RF64PIC_format1                             0x0016
    #define     B16RF64PIC_format1                             0x0016
    #define   LSb32RF64PIC_format1                                23
    #define   LSb16RF64PIC_format1                                7
    #define       bRF64PIC_format1                             4
    #define   MSK32RF64PIC_format1                                0x07800000
    #define        RF64PIC_format1_RV9                                      0x0
    #define        RF64PIC_format1_RV8                                      0x1
    #define        RF64PIC_format1_vp8                                      0x2
    #define        RF64PIC_format1_jpeg                                     0x3

    #define     BA_RF64PIC_noReorder                           0x0017
    #define     B16RF64PIC_noReorder                           0x0016
    #define   LSb32RF64PIC_noReorder                              27
    #define   LSb16RF64PIC_noReorder                              11
    #define       bRF64PIC_noReorder                           1
    #define   MSK32RF64PIC_noReorder                              0x08000000

    #define     BA_RF64PIC_iplusModeOn                         0x0017
    #define     B16RF64PIC_iplusModeOn                         0x0016
    #define   LSb32RF64PIC_iplusModeOn                            28
    #define   LSb16RF64PIC_iplusModeOn                            12
    #define       bRF64PIC_iplusModeOn                         1
    #define   MSK32RF64PIC_iplusModeOn                            0x10000000

    #define     BA_RF64PIC_RSVD3                               0x0017
    #define     B16RF64PIC_RSVD3                               0x0016
    #define   LSb32RF64PIC_RSVD3                                  29
    #define   LSb16RF64PIC_RSVD3                                  13
    #define       bRF64PIC_RSVD3                               3
    #define   MSK32RF64PIC_RSVD3                                  0xE0000000
    ///////////////////////////////////////////////////////////
    #define     RA_RF64PIC_RSVD                                0x0018
    ///////////////////////////////////////////////////////////
    #define     RA_RF64PIC_rIDX2BID                            0x0040
    ///////////////////////////////////////////////////////////

    typedef struct SIE_RF64PIC {
    ///////////////////////////////////////////////////////////
    #define   GET32RF64PIC_format(r32)                         _BFGET_(r32, 2, 0)
    #define   SET32RF64PIC_format(r32,v)                       _BFSET_(r32, 2, 0,v)
    #define   GET16RF64PIC_format(r16)                         _BFGET_(r16, 2, 0)
    #define   SET16RF64PIC_format(r16,v)                       _BFSET_(r16, 2, 0,v)

    #define   GET32RF64PIC_cabac(r32)                          _BFGET_(r32, 3, 3)
    #define   SET32RF64PIC_cabac(r32,v)                        _BFSET_(r32, 3, 3,v)
    #define   GET16RF64PIC_cabac(r16)                          _BFGET_(r16, 3, 3)
    #define   SET16RF64PIC_cabac(r16,v)                        _BFSET_(r16, 3, 3,v)

    #define   GET32RF64PIC_picType(r32)                        _BFGET_(r32, 5, 4)
    #define   SET32RF64PIC_picType(r32,v)                      _BFSET_(r32, 5, 4,v)
    #define   GET16RF64PIC_picType(r16)                        _BFGET_(r16, 5, 4)
    #define   SET16RF64PIC_picType(r16,v)                      _BFSET_(r16, 5, 4,v)

    #define   GET32RF64PIC_maxL0(r32)                          _BFGET_(r32,10, 6)
    #define   SET32RF64PIC_maxL0(r32,v)                        _BFSET_(r32,10, 6,v)
    #define   GET16RF64PIC_maxL0(r16)                          _BFGET_(r16,10, 6)
    #define   SET16RF64PIC_maxL0(r16,v)                        _BFSET_(r16,10, 6,v)

    #define   GET32RF64PIC_maxL1(r32)                          _BFGET_(r32,15,11)
    #define   SET32RF64PIC_maxL1(r32,v)                        _BFSET_(r32,15,11,v)
    #define   GET16RF64PIC_maxL1(r16)                          _BFGET_(r16,15,11)
    #define   SET16RF64PIC_maxL1(r16,v)                        _BFSET_(r16,15,11,v)

    #define   GET32RF64PIC_MbaffPic(r32)                       _BFGET_(r32,16,16)
    #define   SET32RF64PIC_MbaffPic(r32,v)                     _BFSET_(r32,16,16,v)
    #define   GET16RF64PIC_MbaffPic(r16)                       _BFGET_(r16, 0, 0)
    #define   SET16RF64PIC_MbaffPic(r16,v)                     _BFSET_(r16, 0, 0,v)

    #define   GET32RF64PIC_fieldPic(r32)                       _BFGET_(r32,17,17)
    #define   SET32RF64PIC_fieldPic(r32,v)                     _BFSET_(r32,17,17,v)
    #define   GET16RF64PIC_fieldPic(r16)                       _BFGET_(r16, 1, 1)
    #define   SET16RF64PIC_fieldPic(r16,v)                     _BFSET_(r16, 1, 1,v)

    #define   GET32RF64PIC_spatialPred(r32)                    _BFGET_(r32,18,18)
    #define   SET32RF64PIC_spatialPred(r32,v)                  _BFSET_(r32,18,18,v)
    #define   GET16RF64PIC_spatialPred(r16)                    _BFGET_(r16, 2, 2)
    #define   SET16RF64PIC_spatialPred(r16,v)                  _BFSET_(r16, 2, 2,v)

    #define   GET32RF64PIC_colPicMbaff(r32)                    _BFGET_(r32,19,19)
    #define   SET32RF64PIC_colPicMbaff(r32,v)                  _BFSET_(r32,19,19,v)
    #define   GET16RF64PIC_colPicMbaff(r16)                    _BFGET_(r16, 3, 3)
    #define   SET16RF64PIC_colPicMbaff(r16,v)                  _BFSET_(r16, 3, 3,v)

    #define   GET32RF64PIC_colPicField(r32)                    _BFGET_(r32,20,20)
    #define   SET32RF64PIC_colPicField(r32,v)                  _BFSET_(r32,20,20,v)
    #define   GET16RF64PIC_colPicField(r16)                    _BFGET_(r16, 4, 4)
    #define   SET16RF64PIC_colPicField(r16,v)                  _BFSET_(r16, 4, 4,v)

    #define   GET32RF64PIC_colPicST(r32)                       _BFGET_(r32,21,21)
    #define   SET32RF64PIC_colPicST(r32,v)                     _BFSET_(r32,21,21,v)
    #define   GET16RF64PIC_colPicST(r16)                       _BFGET_(r16, 5, 5)
    #define   SET16RF64PIC_colPicST(r16,v)                     _BFSET_(r16, 5, 5,v)

    #define   GET32RF64PIC_AC0Offset(r32)                      _BFGET_(r32,26,22)
    #define   SET32RF64PIC_AC0Offset(r32,v)                    _BFSET_(r32,26,22,v)
    #define   GET16RF64PIC_AC0Offset(r16)                      _BFGET_(r16,10, 6)
    #define   SET16RF64PIC_AC0Offset(r16,v)                    _BFSET_(r16,10, 6,v)

    #define   GET32RF64PIC_BetaOffset(r32)                     _BFGET_(r32,31,27)
    #define   SET32RF64PIC_BetaOffset(r32,v)                   _BFSET_(r32,31,27,v)
    #define   GET16RF64PIC_BetaOffset(r16)                     _BFGET_(r16,15,11)
    #define   SET16RF64PIC_BetaOffset(r16,v)                   _BFSET_(r16,15,11,v)

            UNSG32 u_format                                    :  3;
            UNSG32 u_cabac                                     :  1;
            UNSG32 u_picType                                   :  2;
            UNSG32 u_maxL0                                     :  5;
            UNSG32 u_maxL1                                     :  5;
            UNSG32 u_MbaffPic                                  :  1;
            UNSG32 u_fieldPic                                  :  1;
            UNSG32 u_spatialPred                               :  1;
            UNSG32 u_colPicMbaff                               :  1;
            UNSG32 u_colPicField                               :  1;
            UNSG32 u_colPicST                                  :  1;
            UNSG32 s_AC0Offset                                 :  5;
            UNSG32 s_BetaOffset                                :  5;
    ///////////////////////////////////////////////////////////
    #define   GET32RF64PIC_dqAcLimit(r32)                      _BFGET_(r32,15, 0)
    #define   SET32RF64PIC_dqAcLimit(r32,v)                    _BFSET_(r32,15, 0,v)
    #define   GET16RF64PIC_dqAcLimit(r16)                      _BFGET_(r16,15, 0)
    #define   SET16RF64PIC_dqAcLimit(r16,v)                    _BFSET_(r16,15, 0,v)

    #define   GET32RF64PIC_dqDcLimit(r32)                      _BFGET_(r32,29,16)
    #define   SET32RF64PIC_dqDcLimit(r32,v)                    _BFSET_(r32,29,16,v)
    #define   GET16RF64PIC_dqDcLimit(r16)                      _BFGET_(r16,13, 0)
    #define   SET16RF64PIC_dqDcLimit(r16,v)                    _BFSET_(r16,13, 0,v)

    #define   GET32RF64PIC_mismatch(r32)                       _BFGET_(r32,31,30)
    #define   SET32RF64PIC_mismatch(r32,v)                     _BFSET_(r32,31,30,v)
    #define   GET16RF64PIC_mismatch(r16)                       _BFGET_(r16,15,14)
    #define   SET16RF64PIC_mismatch(r16,v)                     _BFSET_(r16,15,14,v)

            UNSG32 u_dqAcLimit                                 : 16;
            UNSG32 u_dqDcLimit                                 : 14;
            UNSG32 u_mismatch                                  :  2;
    ///////////////////////////////////////////////////////////
    #define   GET32RF64PIC_picW(r32)                           _BFGET_(r32,15, 0)
    #define   SET32RF64PIC_picW(r32,v)                         _BFSET_(r32,15, 0,v)
    #define   GET16RF64PIC_picW(r16)                           _BFGET_(r16,15, 0)
    #define   SET16RF64PIC_picW(r16,v)                         _BFSET_(r16,15, 0,v)

    #define   GET32RF64PIC_picH(r32)                           _BFGET_(r32,28,16)
    #define   SET32RF64PIC_picH(r32,v)                         _BFSET_(r32,28,16,v)
    #define   GET16RF64PIC_picH(r16)                           _BFGET_(r16,12, 0)
    #define   SET16RF64PIC_picH(r16,v)                         _BFSET_(r16,12, 0,v)

    #define   GET32RF64PIC_btmFldPic(r32)                      _BFGET_(r32,29,29)
    #define   SET32RF64PIC_btmFldPic(r32,v)                    _BFSET_(r32,29,29,v)
    #define   GET16RF64PIC_btmFldPic(r16)                      _BFGET_(r16,13,13)
    #define   SET16RF64PIC_btmFldPic(r16,v)                    _BFSET_(r16,13,13,v)

    #define   GET32RF64PIC_hint(r32)                           _BFGET_(r32,31,30)
    #define   SET32RF64PIC_hint(r32,v)                         _BFSET_(r32,31,30,v)
    #define   GET16RF64PIC_hint(r16)                           _BFGET_(r16,15,14)
    #define   SET16RF64PIC_hint(r16,v)                         _BFSET_(r16,15,14,v)

            UNSG32 u_picW                                      : 16;
            UNSG32 u_picH                                      : 13;
            UNSG32 u_btmFldPic                                 :  1;
            UNSG32 u_hint                                      :  2;
    ///////////////////////////////////////////////////////////
    #define   GET32RF64PIC_shiftLumaX(r32)                     _BFGET_(r32, 7, 0)
    #define   SET32RF64PIC_shiftLumaX(r32,v)                   _BFSET_(r32, 7, 0,v)
    #define   GET16RF64PIC_shiftLumaX(r16)                     _BFGET_(r16, 7, 0)
    #define   SET16RF64PIC_shiftLumaX(r16,v)                   _BFSET_(r16, 7, 0,v)

    #define   GET32RF64PIC_shiftLumaY(r32)                     _BFGET_(r32,15, 8)
    #define   SET32RF64PIC_shiftLumaY(r32,v)                   _BFSET_(r32,15, 8,v)
    #define   GET16RF64PIC_shiftLumaY(r16)                     _BFGET_(r16,15, 8)
    #define   SET16RF64PIC_shiftLumaY(r16,v)                   _BFSET_(r16,15, 8,v)

    #define   GET32RF64PIC_shiftChromaX(r32)                   _BFGET_(r32,23,16)
    #define   SET32RF64PIC_shiftChromaX(r32,v)                 _BFSET_(r32,23,16,v)
    #define   GET16RF64PIC_shiftChromaX(r16)                   _BFGET_(r16, 7, 0)
    #define   SET16RF64PIC_shiftChromaX(r16,v)                 _BFSET_(r16, 7, 0,v)

    #define   GET32RF64PIC_shiftChromaY(r32)                   _BFGET_(r32,31,24)
    #define   SET32RF64PIC_shiftChromaY(r32,v)                 _BFSET_(r32,31,24,v)
    #define   GET16RF64PIC_shiftChromaY(r16)                   _BFGET_(r16,15, 8)
    #define   SET16RF64PIC_shiftChromaY(r16,v)                 _BFSET_(r16,15, 8,v)

            UNSG32 u_shiftLumaX                                :  8;
            UNSG32 u_shiftLumaY                                :  8;
            UNSG32 u_shiftChromaX                              :  8;
            UNSG32 u_shiftChromaY                              :  8;
    ///////////////////////////////////////////////////////////
    #define   GET32RF64PIC_fracTapDiv2Y(r32)                   _BFGET_(r32, 3, 0)
    #define   SET32RF64PIC_fracTapDiv2Y(r32,v)                 _BFSET_(r32, 3, 0,v)
    #define   GET16RF64PIC_fracTapDiv2Y(r16)                   _BFGET_(r16, 3, 0)
    #define   SET16RF64PIC_fracTapDiv2Y(r16,v)                 _BFSET_(r16, 3, 0,v)

    #define   GET32RF64PIC_fracTapDiv2C(r32)                   _BFGET_(r32, 7, 4)
    #define   SET32RF64PIC_fracTapDiv2C(r32,v)                 _BFSET_(r32, 7, 4,v)
    #define   GET16RF64PIC_fracTapDiv2C(r16)                   _BFGET_(r16, 7, 4)
    #define   SET16RF64PIC_fracTapDiv2C(r16,v)                 _BFSET_(r16, 7, 4,v)

    #define   GET32RF64PIC_IPCM_QPU(r32)                       _BFGET_(r32,13, 8)
    #define   SET32RF64PIC_IPCM_QPU(r32,v)                     _BFSET_(r32,13, 8,v)
    #define   GET16RF64PIC_IPCM_QPU(r16)                       _BFGET_(r16,13, 8)
    #define   SET16RF64PIC_IPCM_QPU(r16,v)                     _BFSET_(r16,13, 8,v)

    #define   GET32RF64PIC_IPCM_QPV(r32)                       _BFGET_(r32,19,14)
    #define   SET32RF64PIC_IPCM_QPV(r32,v)                     _BFSET_(r32,19,14,v)

    #define   GET32RF64PIC_RSVD12(r32)                         _BFGET_(r32,31,20)
    #define   SET32RF64PIC_RSVD12(r32,v)                       _BFSET_(r32,31,20,v)
    #define   GET16RF64PIC_RSVD12(r16)                         _BFGET_(r16,15, 4)
    #define   SET16RF64PIC_RSVD12(r16,v)                       _BFSET_(r16,15, 4,v)

            UNSG32 u_fracTapDiv2Y                              :  4;
            UNSG32 u_fracTapDiv2C                              :  4;
            UNSG32 u_IPCM_QPU                                  :  6;
            UNSG32 u_IPCM_QPV                                  :  6;
            UNSG32 u_RSVD12                                    : 12;
    ///////////////////////////////////////////////////////////
    #define   GET32RF64PIC_PQUANT(r32)                         _BFGET_(r32, 4, 0)
    #define   SET32RF64PIC_PQUANT(r32,v)                       _BFSET_(r32, 4, 0,v)
    #define   GET16RF64PIC_PQUANT(r16)                         _BFGET_(r16, 4, 0)
    #define   SET16RF64PIC_PQUANT(r16,v)                       _BFSET_(r16, 4, 0,v)

    #define   GET32RF64PIC_FRFD(r32)                           _BFGET_(r32, 6, 5)
    #define   SET32RF64PIC_FRFD(r32,v)                         _BFSET_(r32, 6, 5,v)
    #define   GET16RF64PIC_FRFD(r16)                           _BFGET_(r16, 6, 5)
    #define   SET16RF64PIC_FRFD(r16,v)                         _BFSET_(r16, 6, 5,v)

    #define   GET32RF64PIC_BRFD(r32)                           _BFGET_(r32, 8, 7)
    #define   SET32RF64PIC_BRFD(r32,v)                         _BFSET_(r32, 8, 7,v)
    #define   GET16RF64PIC_BRFD(r16)                           _BFGET_(r16, 8, 7)
    #define   SET16RF64PIC_BRFD(r16,v)                         _BFSET_(r16, 8, 7,v)

    #define   GET32RF64PIC_secondFld(r32)                      _BFGET_(r32, 9, 9)
    #define   SET32RF64PIC_secondFld(r32,v)                    _BFSET_(r32, 9, 9,v)
    #define   GET16RF64PIC_secondFld(r16)                      _BFGET_(r16, 9, 9)
    #define   SET16RF64PIC_secondFld(r16,v)                    _BFSET_(r16, 9, 9,v)

    #define   GET32RF64PIC_mvRange(r32)                        _BFGET_(r32,11,10)
    #define   SET32RF64PIC_mvRange(r32,v)                      _BFSET_(r32,11,10,v)
    #define   GET16RF64PIC_mvRange(r16)                        _BFGET_(r16,11,10)
    #define   SET16RF64PIC_mvRange(r16,v)                      _BFSET_(r16,11,10,v)

    #define   GET32RF64PIC_hybridMvThres(r32)                  _BFGET_(r32,12,12)
    #define   SET32RF64PIC_hybridMvThres(r32,v)                _BFSET_(r32,12,12,v)
    #define   GET16RF64PIC_hybridMvThres(r16)                  _BFGET_(r16,12,12)
    #define   SET16RF64PIC_hybridMvThres(r16,v)                _BFSET_(r16,12,12,v)

    #define   GET32RF64PIC_firstMbIntra(r32)                   _BFGET_(r32,13,13)
    #define   SET32RF64PIC_firstMbIntra(r32,v)                 _BFSET_(r32,13,13,v)
    #define   GET16RF64PIC_firstMbIntra(r16)                   _BFGET_(r16,13,13)
    #define   SET16RF64PIC_firstMbIntra(r16,v)                 _BFSET_(r16,13,13,v)

    #define   GET32RF64PIC_halfPixel(r32)                      _BFGET_(r32,14,14)
    #define   SET32RF64PIC_halfPixel(r32,v)                    _BFSET_(r32,14,14,v)
    #define   GET16RF64PIC_halfPixel(r16)                      _BFGET_(r16,14,14)
    #define   SET16RF64PIC_halfPixel(r16,v)                    _BFSET_(r16,14,14,v)

    #define   GET32RF64PIC_forwRefInterlace(r32)               _BFGET_(r32,15,15)
    #define   SET32RF64PIC_forwRefInterlace(r32,v)             _BFSET_(r32,15,15,v)
    #define   GET16RF64PIC_forwRefInterlace(r16)               _BFGET_(r16,15,15)
    #define   SET16RF64PIC_forwRefInterlace(r16,v)             _BFSET_(r16,15,15,v)

    #define   GET32RF64PIC_backRefInterlace(r32)               _BFGET_(r32,16,16)
    #define   SET32RF64PIC_backRefInterlace(r32,v)             _BFSET_(r32,16,16,v)
    #define   GET16RF64PIC_backRefInterlace(r16)               _BFGET_(r16, 0, 0)
    #define   SET16RF64PIC_backRefInterlace(r16,v)             _BFSET_(r16, 0, 0,v)

    #define   GET32RF64PIC_FrmTransACSet(r32)                  _BFGET_(r32,18,17)
    #define   SET32RF64PIC_FrmTransACSet(r32,v)                _BFSET_(r32,18,17,v)
    #define   GET16RF64PIC_FrmTransACSet(r16)                  _BFGET_(r16, 2, 1)
    #define   SET16RF64PIC_FrmTransACSet(r16,v)                _BFSET_(r16, 2, 1,v)

    #define   GET32RF64PIC_FrmTransACSet2(r32)                 _BFGET_(r32,20,19)
    #define   SET32RF64PIC_FrmTransACSet2(r32,v)               _BFSET_(r32,20,19,v)
    #define   GET16RF64PIC_FrmTransACSet2(r16)                 _BFGET_(r16, 4, 3)
    #define   SET16RF64PIC_FrmTransACSet2(r16,v)               _BFSET_(r16, 4, 3,v)

    #define   GET32RF64PIC_PQIndexGT8(r32)                     _BFGET_(r32,21,21)
    #define   SET32RF64PIC_PQIndexGT8(r32,v)                   _BFSET_(r32,21,21,v)
    #define   GET16RF64PIC_PQIndexGT8(r16)                     _BFGET_(r16, 5, 5)
    #define   SET16RF64PIC_PQIndexGT8(r16,v)                   _BFSET_(r16, 5, 5,v)

    #define   GET32RF64PIC_EscapeTBL(r32)                      _BFGET_(r32,22,22)
    #define   SET32RF64PIC_EscapeTBL(r32,v)                    _BFSET_(r32,22,22,v)
    #define   GET16RF64PIC_EscapeTBL(r16)                      _BFGET_(r16, 6, 6)
    #define   SET16RF64PIC_EscapeTBL(r16,v)                    _BFSET_(r16, 6, 6,v)

    #define   GET32RF64PIC_format1(r32)                        _BFGET_(r32,26,23)
    #define   SET32RF64PIC_format1(r32,v)                      _BFSET_(r32,26,23,v)
    #define   GET16RF64PIC_format1(r16)                        _BFGET_(r16,10, 7)
    #define   SET16RF64PIC_format1(r16,v)                      _BFSET_(r16,10, 7,v)

    #define   GET32RF64PIC_noReorder(r32)                      _BFGET_(r32,27,27)
    #define   SET32RF64PIC_noReorder(r32,v)                    _BFSET_(r32,27,27,v)
    #define   GET16RF64PIC_noReorder(r16)                      _BFGET_(r16,11,11)
    #define   SET16RF64PIC_noReorder(r16,v)                    _BFSET_(r16,11,11,v)

    #define   GET32RF64PIC_iplusModeOn(r32)                    _BFGET_(r32,28,28)
    #define   SET32RF64PIC_iplusModeOn(r32,v)                  _BFSET_(r32,28,28,v)
    #define   GET16RF64PIC_iplusModeOn(r16)                    _BFGET_(r16,12,12)
    #define   SET16RF64PIC_iplusModeOn(r16,v)                  _BFSET_(r16,12,12,v)

    #define   GET32RF64PIC_RSVD3(r32)                          _BFGET_(r32,31,29)
    #define   SET32RF64PIC_RSVD3(r32,v)                        _BFSET_(r32,31,29,v)
    #define   GET16RF64PIC_RSVD3(r16)                          _BFGET_(r16,15,13)
    #define   SET16RF64PIC_RSVD3(r16,v)                        _BFSET_(r16,15,13,v)

            UNSG32 u_PQUANT                                    :  5;
            UNSG32 u_FRFD                                      :  2;
            UNSG32 u_BRFD                                      :  2;
            UNSG32 u_secondFld                                 :  1;
            UNSG32 u_mvRange                                   :  2;
            UNSG32 u_hybridMvThres                             :  1;
            UNSG32 u_firstMbIntra                              :  1;
            UNSG32 u_halfPixel                                 :  1;
            UNSG32 u_forwRefInterlace                          :  1;
            UNSG32 u_backRefInterlace                          :  1;
            UNSG32 u_FrmTransACSet                             :  2;
            UNSG32 u_FrmTransACSet2                            :  2;
            UNSG32 u_PQIndexGT8                                :  1;
            UNSG32 u_EscapeTBL                                 :  1;
            UNSG32 u_format1                                   :  4;
            UNSG32 u_noReorder                                 :  1;
            UNSG32 u_iplusModeOn                               :  1;
            UNSG32 u_RSVD3                                     :  3;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD[5];
    ///////////////////////////////////////////////////////////
              SIE_IDX2BID                                      ie_rIDX2BID;
    ///////////////////////////////////////////////////////////
    } SIE_RF64PIC;

    ///////////////////////////////////////////////////////////
     SIGN32 RF64PIC_drvrd(SIE_RF64PIC *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 RF64PIC_drvwr(SIE_RF64PIC *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void RF64PIC_reset(SIE_RF64PIC *p);
     SIGN32 RF64PIC_cmp  (SIE_RF64PIC *p, SIE_RF64PIC *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define RF64PIC_check(p,pie,pfx,hLOG) RF64PIC_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define RF64PIC_print(p,    pfx,hLOG) RF64PIC_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: RF64PIC
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE RF64MB                  biu              (4,4)
///     ###
///     * RF64 macroblock-level information for ALU64 extensions; padded to 64b
///     * [0:31]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               ###
///               * [0:15] casted from MBPROP[0:15] in decHal_mbLvl.sxw.txt
///               ###
///               %unsigned 3  BANK                      
///                                    ###
///                                    * Bank[0] indicates whether current MB is even or odd in an MB pair.
///                                    ###
///               %unsigned 1  Inter                     
///                                    ###
///                                    * Intra (0) or inter (1) macroblock, for DQmatrix selection in dQuant only
///                                    ###
///               %unsigned 1  lastMbRow                 
///                                    ###
///                                    * Current MB row is the last in slice; for VC-1 FOP
///                                    ###
///               %unsigned 1  lastMbRowPic              
///                                    ###
///                                    * Current MB row is the last in picture; for VC-1 FOP
///                                    ###
///               %unsigned 1  RSVD                      
///                                    ###
///                                    * reserved for bitfield alignment. Removed RF64MB.Mbaff.
///                                    ###
///               %unsigned 1  FLD                       
///                                    ###
///                                    * - if current MB is MBAFF field MB. Only valid when RF64PIC.MbaffPic = 1.
///                                    ###
///               %unsigned 1  FLDNeighborA              
///                                    ###
///                                    * - if left MB is MBAFF field MB. Only valid when RF64PIC.MbaffPic = 1.
///                                    ###
///               %unsigned 1  FLDNeighborB              
///                                    ###
///                                    * - if upper MB is MBAFF field MB. Only valid when RF64PIC.MbaffPic = 1.
///                                    ###
///               %unsigned 1  FLDNeighborC              
///                                    ###
///                                    * - if upper-right MB is MBAFF field MB. Only valid when RF64PIC.MbaffPic = 1.
///                                    ###
///               %unsigned 1  FLDNeighborD              
///                                    ###
///                                    * - if upper-left MB is MBAFF field MB. Only valid when RF64PIC.MbaffPic = 1.
///                                    ###
///               %unsigned 1  NeighborA                 
///                                    ###
///                                    * From stream-parser to syntax-processor:
///                                    * - if left MB is available
///                                    * From vScope to PCube:
///                                    * - if left MB is available as intra predictor
///                                    ###
///               %unsigned 1  NeighborB                 
///                                    ###
///                                    * From stream-parser to syntax-processor:
///                                    * - if upper MB is available
///                                    * From vScope to PCube:
///                                    * - if upper MB is available as intra predictor
///                                    ###
///               %unsigned 1  NeighborC                 
///                                    ###
///                                    * From stream-parser to syntax-processor:
///                                    * - if upper-right MB is available
///                                    * From vScope to PCube:
///                                    * - if upper-right MB is available as intra predictor
///                                    ###
///               %unsigned 1  NeighborD                 
///                                    ###
///                                    * From stream-parser to syntax-processor:
///                                    * - if upper-left MB is available
///                                    * From vScope to PCube:
///                                    * - if upper-left MB is available as intra predictor
///                                    ###
///               %unsigned 8  FopAddr2                  
///                                    ###
///                                    * VC-1: base addr 2 for FOP output, 16-byte based
///                                    ###
///               %unsigned 8  FopAddr3                  
///                                    ###
///                                    * VC-1: base addr 3 for FOP output, 16-byte based
///                                    * [32:63]
///                                    ###
///     @ 0x00004                      (P)
///               %unsigned 8  FopAddr                   
///                                    ###
///                                    * H.264: FOP output addr
///                                    * VC-1: base addr 0 for FOP output, 16-byte based
///                                    ###
///               %unsigned 8  FopAddr1                  
///                                    ###
///                                    * VC-1: base addr 1 for FOP output, 16-byte based
///                                    ###
///               %unsigned 8  MbX                       
///                                    ###
///                                    * Current MB index in X direction;
///                                    * from 0 up to ((picW+15)>>4) -1
///                                    ###
///               %unsigned 8  MbY                       
///                                    ###
///                                    * Current MB index in Y direction;
///                                    * from 0 up to ((picH+15)>>4) -1
///                                    * End of RF64MB
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_RF64MB
#define h_RF64MB (){}

    #define     BA_RF64MB_BANK                                 0x0000
    #define     B16RF64MB_BANK                                 0x0000
    #define   LSb32RF64MB_BANK                                    0
    #define   LSb16RF64MB_BANK                                    0
    #define       bRF64MB_BANK                                 3
    #define   MSK32RF64MB_BANK                                    0x00000007

    #define     BA_RF64MB_Inter                                0x0000
    #define     B16RF64MB_Inter                                0x0000
    #define   LSb32RF64MB_Inter                                   3
    #define   LSb16RF64MB_Inter                                   3
    #define       bRF64MB_Inter                                1
    #define   MSK32RF64MB_Inter                                   0x00000008

    #define     BA_RF64MB_lastMbRow                            0x0000
    #define     B16RF64MB_lastMbRow                            0x0000
    #define   LSb32RF64MB_lastMbRow                               4
    #define   LSb16RF64MB_lastMbRow                               4
    #define       bRF64MB_lastMbRow                            1
    #define   MSK32RF64MB_lastMbRow                               0x00000010

    #define     BA_RF64MB_lastMbRowPic                         0x0000
    #define     B16RF64MB_lastMbRowPic                         0x0000
    #define   LSb32RF64MB_lastMbRowPic                            5
    #define   LSb16RF64MB_lastMbRowPic                            5
    #define       bRF64MB_lastMbRowPic                         1
    #define   MSK32RF64MB_lastMbRowPic                            0x00000020

    #define     BA_RF64MB_RSVD                                 0x0000
    #define     B16RF64MB_RSVD                                 0x0000
    #define   LSb32RF64MB_RSVD                                    6
    #define   LSb16RF64MB_RSVD                                    6
    #define       bRF64MB_RSVD                                 1
    #define   MSK32RF64MB_RSVD                                    0x00000040

    #define     BA_RF64MB_FLD                                  0x0000
    #define     B16RF64MB_FLD                                  0x0000
    #define   LSb32RF64MB_FLD                                     7
    #define   LSb16RF64MB_FLD                                     7
    #define       bRF64MB_FLD                                  1
    #define   MSK32RF64MB_FLD                                     0x00000080

    #define     BA_RF64MB_FLDNeighborA                         0x0001
    #define     B16RF64MB_FLDNeighborA                         0x0000
    #define   LSb32RF64MB_FLDNeighborA                            8
    #define   LSb16RF64MB_FLDNeighborA                            8
    #define       bRF64MB_FLDNeighborA                         1
    #define   MSK32RF64MB_FLDNeighborA                            0x00000100

    #define     BA_RF64MB_FLDNeighborB                         0x0001
    #define     B16RF64MB_FLDNeighborB                         0x0000
    #define   LSb32RF64MB_FLDNeighborB                            9
    #define   LSb16RF64MB_FLDNeighborB                            9
    #define       bRF64MB_FLDNeighborB                         1
    #define   MSK32RF64MB_FLDNeighborB                            0x00000200

    #define     BA_RF64MB_FLDNeighborC                         0x0001
    #define     B16RF64MB_FLDNeighborC                         0x0000
    #define   LSb32RF64MB_FLDNeighborC                            10
    #define   LSb16RF64MB_FLDNeighborC                            10
    #define       bRF64MB_FLDNeighborC                         1
    #define   MSK32RF64MB_FLDNeighborC                            0x00000400

    #define     BA_RF64MB_FLDNeighborD                         0x0001
    #define     B16RF64MB_FLDNeighborD                         0x0000
    #define   LSb32RF64MB_FLDNeighborD                            11
    #define   LSb16RF64MB_FLDNeighborD                            11
    #define       bRF64MB_FLDNeighborD                         1
    #define   MSK32RF64MB_FLDNeighborD                            0x00000800

    #define     BA_RF64MB_NeighborA                            0x0001
    #define     B16RF64MB_NeighborA                            0x0000
    #define   LSb32RF64MB_NeighborA                               12
    #define   LSb16RF64MB_NeighborA                               12
    #define       bRF64MB_NeighborA                            1
    #define   MSK32RF64MB_NeighborA                               0x00001000

    #define     BA_RF64MB_NeighborB                            0x0001
    #define     B16RF64MB_NeighborB                            0x0000
    #define   LSb32RF64MB_NeighborB                               13
    #define   LSb16RF64MB_NeighborB                               13
    #define       bRF64MB_NeighborB                            1
    #define   MSK32RF64MB_NeighborB                               0x00002000

    #define     BA_RF64MB_NeighborC                            0x0001
    #define     B16RF64MB_NeighborC                            0x0000
    #define   LSb32RF64MB_NeighborC                               14
    #define   LSb16RF64MB_NeighborC                               14
    #define       bRF64MB_NeighborC                            1
    #define   MSK32RF64MB_NeighborC                               0x00004000

    #define     BA_RF64MB_NeighborD                            0x0001
    #define     B16RF64MB_NeighborD                            0x0000
    #define   LSb32RF64MB_NeighborD                               15
    #define   LSb16RF64MB_NeighborD                               15
    #define       bRF64MB_NeighborD                            1
    #define   MSK32RF64MB_NeighborD                               0x00008000

    #define     BA_RF64MB_FopAddr2                             0x0002
    #define     B16RF64MB_FopAddr2                             0x0002
    #define   LSb32RF64MB_FopAddr2                                16
    #define   LSb16RF64MB_FopAddr2                                0
    #define       bRF64MB_FopAddr2                             8
    #define   MSK32RF64MB_FopAddr2                                0x00FF0000

    #define     BA_RF64MB_FopAddr3                             0x0003
    #define     B16RF64MB_FopAddr3                             0x0002
    #define   LSb32RF64MB_FopAddr3                                24
    #define   LSb16RF64MB_FopAddr3                                8
    #define       bRF64MB_FopAddr3                             8
    #define   MSK32RF64MB_FopAddr3                                0xFF000000
    ///////////////////////////////////////////////////////////

    #define     BA_RF64MB_FopAddr                              0x0004
    #define     B16RF64MB_FopAddr                              0x0004
    #define   LSb32RF64MB_FopAddr                                 0
    #define   LSb16RF64MB_FopAddr                                 0
    #define       bRF64MB_FopAddr                              8
    #define   MSK32RF64MB_FopAddr                                 0x000000FF

    #define     BA_RF64MB_FopAddr1                             0x0005
    #define     B16RF64MB_FopAddr1                             0x0004
    #define   LSb32RF64MB_FopAddr1                                8
    #define   LSb16RF64MB_FopAddr1                                8
    #define       bRF64MB_FopAddr1                             8
    #define   MSK32RF64MB_FopAddr1                                0x0000FF00

    #define     BA_RF64MB_MbX                                  0x0006
    #define     B16RF64MB_MbX                                  0x0006
    #define   LSb32RF64MB_MbX                                     16
    #define   LSb16RF64MB_MbX                                     0
    #define       bRF64MB_MbX                                  8
    #define   MSK32RF64MB_MbX                                     0x00FF0000

    #define     BA_RF64MB_MbY                                  0x0007
    #define     B16RF64MB_MbY                                  0x0006
    #define   LSb32RF64MB_MbY                                     24
    #define   LSb16RF64MB_MbY                                     8
    #define       bRF64MB_MbY                                  8
    #define   MSK32RF64MB_MbY                                     0xFF000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_RF64MB {
    ///////////////////////////////////////////////////////////
    #define   GET32RF64MB_BANK(r32)                            _BFGET_(r32, 2, 0)
    #define   SET32RF64MB_BANK(r32,v)                          _BFSET_(r32, 2, 0,v)
    #define   GET16RF64MB_BANK(r16)                            _BFGET_(r16, 2, 0)
    #define   SET16RF64MB_BANK(r16,v)                          _BFSET_(r16, 2, 0,v)

    #define   GET32RF64MB_Inter(r32)                           _BFGET_(r32, 3, 3)
    #define   SET32RF64MB_Inter(r32,v)                         _BFSET_(r32, 3, 3,v)
    #define   GET16RF64MB_Inter(r16)                           _BFGET_(r16, 3, 3)
    #define   SET16RF64MB_Inter(r16,v)                         _BFSET_(r16, 3, 3,v)

    #define   GET32RF64MB_lastMbRow(r32)                       _BFGET_(r32, 4, 4)
    #define   SET32RF64MB_lastMbRow(r32,v)                     _BFSET_(r32, 4, 4,v)
    #define   GET16RF64MB_lastMbRow(r16)                       _BFGET_(r16, 4, 4)
    #define   SET16RF64MB_lastMbRow(r16,v)                     _BFSET_(r16, 4, 4,v)

    #define   GET32RF64MB_lastMbRowPic(r32)                    _BFGET_(r32, 5, 5)
    #define   SET32RF64MB_lastMbRowPic(r32,v)                  _BFSET_(r32, 5, 5,v)
    #define   GET16RF64MB_lastMbRowPic(r16)                    _BFGET_(r16, 5, 5)
    #define   SET16RF64MB_lastMbRowPic(r16,v)                  _BFSET_(r16, 5, 5,v)

    #define   GET32RF64MB_RSVD(r32)                            _BFGET_(r32, 6, 6)
    #define   SET32RF64MB_RSVD(r32,v)                          _BFSET_(r32, 6, 6,v)
    #define   GET16RF64MB_RSVD(r16)                            _BFGET_(r16, 6, 6)
    #define   SET16RF64MB_RSVD(r16,v)                          _BFSET_(r16, 6, 6,v)

    #define   GET32RF64MB_FLD(r32)                             _BFGET_(r32, 7, 7)
    #define   SET32RF64MB_FLD(r32,v)                           _BFSET_(r32, 7, 7,v)
    #define   GET16RF64MB_FLD(r16)                             _BFGET_(r16, 7, 7)
    #define   SET16RF64MB_FLD(r16,v)                           _BFSET_(r16, 7, 7,v)

    #define   GET32RF64MB_FLDNeighborA(r32)                    _BFGET_(r32, 8, 8)
    #define   SET32RF64MB_FLDNeighborA(r32,v)                  _BFSET_(r32, 8, 8,v)
    #define   GET16RF64MB_FLDNeighborA(r16)                    _BFGET_(r16, 8, 8)
    #define   SET16RF64MB_FLDNeighborA(r16,v)                  _BFSET_(r16, 8, 8,v)

    #define   GET32RF64MB_FLDNeighborB(r32)                    _BFGET_(r32, 9, 9)
    #define   SET32RF64MB_FLDNeighborB(r32,v)                  _BFSET_(r32, 9, 9,v)
    #define   GET16RF64MB_FLDNeighborB(r16)                    _BFGET_(r16, 9, 9)
    #define   SET16RF64MB_FLDNeighborB(r16,v)                  _BFSET_(r16, 9, 9,v)

    #define   GET32RF64MB_FLDNeighborC(r32)                    _BFGET_(r32,10,10)
    #define   SET32RF64MB_FLDNeighborC(r32,v)                  _BFSET_(r32,10,10,v)
    #define   GET16RF64MB_FLDNeighborC(r16)                    _BFGET_(r16,10,10)
    #define   SET16RF64MB_FLDNeighborC(r16,v)                  _BFSET_(r16,10,10,v)

    #define   GET32RF64MB_FLDNeighborD(r32)                    _BFGET_(r32,11,11)
    #define   SET32RF64MB_FLDNeighborD(r32,v)                  _BFSET_(r32,11,11,v)
    #define   GET16RF64MB_FLDNeighborD(r16)                    _BFGET_(r16,11,11)
    #define   SET16RF64MB_FLDNeighborD(r16,v)                  _BFSET_(r16,11,11,v)

    #define   GET32RF64MB_NeighborA(r32)                       _BFGET_(r32,12,12)
    #define   SET32RF64MB_NeighborA(r32,v)                     _BFSET_(r32,12,12,v)
    #define   GET16RF64MB_NeighborA(r16)                       _BFGET_(r16,12,12)
    #define   SET16RF64MB_NeighborA(r16,v)                     _BFSET_(r16,12,12,v)

    #define   GET32RF64MB_NeighborB(r32)                       _BFGET_(r32,13,13)
    #define   SET32RF64MB_NeighborB(r32,v)                     _BFSET_(r32,13,13,v)
    #define   GET16RF64MB_NeighborB(r16)                       _BFGET_(r16,13,13)
    #define   SET16RF64MB_NeighborB(r16,v)                     _BFSET_(r16,13,13,v)

    #define   GET32RF64MB_NeighborC(r32)                       _BFGET_(r32,14,14)
    #define   SET32RF64MB_NeighborC(r32,v)                     _BFSET_(r32,14,14,v)
    #define   GET16RF64MB_NeighborC(r16)                       _BFGET_(r16,14,14)
    #define   SET16RF64MB_NeighborC(r16,v)                     _BFSET_(r16,14,14,v)

    #define   GET32RF64MB_NeighborD(r32)                       _BFGET_(r32,15,15)
    #define   SET32RF64MB_NeighborD(r32,v)                     _BFSET_(r32,15,15,v)
    #define   GET16RF64MB_NeighborD(r16)                       _BFGET_(r16,15,15)
    #define   SET16RF64MB_NeighborD(r16,v)                     _BFSET_(r16,15,15,v)

    #define   GET32RF64MB_FopAddr2(r32)                        _BFGET_(r32,23,16)
    #define   SET32RF64MB_FopAddr2(r32,v)                      _BFSET_(r32,23,16,v)
    #define   GET16RF64MB_FopAddr2(r16)                        _BFGET_(r16, 7, 0)
    #define   SET16RF64MB_FopAddr2(r16,v)                      _BFSET_(r16, 7, 0,v)

    #define   GET32RF64MB_FopAddr3(r32)                        _BFGET_(r32,31,24)
    #define   SET32RF64MB_FopAddr3(r32,v)                      _BFSET_(r32,31,24,v)
    #define   GET16RF64MB_FopAddr3(r16)                        _BFGET_(r16,15, 8)
    #define   SET16RF64MB_FopAddr3(r16,v)                      _BFSET_(r16,15, 8,v)

            UNSG32 u_BANK                                      :  3;
            UNSG32 u_Inter                                     :  1;
            UNSG32 u_lastMbRow                                 :  1;
            UNSG32 u_lastMbRowPic                              :  1;
            UNSG32 u_RSVD                                      :  1;
            UNSG32 u_FLD                                       :  1;
            UNSG32 u_FLDNeighborA                              :  1;
            UNSG32 u_FLDNeighborB                              :  1;
            UNSG32 u_FLDNeighborC                              :  1;
            UNSG32 u_FLDNeighborD                              :  1;
            UNSG32 u_NeighborA                                 :  1;
            UNSG32 u_NeighborB                                 :  1;
            UNSG32 u_NeighborC                                 :  1;
            UNSG32 u_NeighborD                                 :  1;
            UNSG32 u_FopAddr2                                  :  8;
            UNSG32 u_FopAddr3                                  :  8;
    ///////////////////////////////////////////////////////////
    #define   GET32RF64MB_FopAddr(r32)                         _BFGET_(r32, 7, 0)
    #define   SET32RF64MB_FopAddr(r32,v)                       _BFSET_(r32, 7, 0,v)
    #define   GET16RF64MB_FopAddr(r16)                         _BFGET_(r16, 7, 0)
    #define   SET16RF64MB_FopAddr(r16,v)                       _BFSET_(r16, 7, 0,v)

    #define   GET32RF64MB_FopAddr1(r32)                        _BFGET_(r32,15, 8)
    #define   SET32RF64MB_FopAddr1(r32,v)                      _BFSET_(r32,15, 8,v)
    #define   GET16RF64MB_FopAddr1(r16)                        _BFGET_(r16,15, 8)
    #define   SET16RF64MB_FopAddr1(r16,v)                      _BFSET_(r16,15, 8,v)

    #define   GET32RF64MB_MbX(r32)                             _BFGET_(r32,23,16)
    #define   SET32RF64MB_MbX(r32,v)                           _BFSET_(r32,23,16,v)
    #define   GET16RF64MB_MbX(r16)                             _BFGET_(r16, 7, 0)
    #define   SET16RF64MB_MbX(r16,v)                           _BFSET_(r16, 7, 0,v)

    #define   GET32RF64MB_MbY(r32)                             _BFGET_(r32,31,24)
    #define   SET32RF64MB_MbY(r32,v)                           _BFSET_(r32,31,24,v)
    #define   GET16RF64MB_MbY(r16)                             _BFGET_(r16,15, 8)
    #define   SET16RF64MB_MbY(r16,v)                           _BFSET_(r16,15, 8,v)

            UNSG32 u_FopAddr                                   :  8;
            UNSG32 u_FopAddr1                                  :  8;
            UNSG32 u_MbX                                       :  8;
            UNSG32 u_MbY                                       :  8;
    ///////////////////////////////////////////////////////////
    } SIE_RF64MB;

    ///////////////////////////////////////////////////////////
     SIGN32 RF64MB_drvrd(SIE_RF64MB *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 RF64MB_drvwr(SIE_RF64MB *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void RF64MB_reset(SIE_RF64MB *p);
     SIGN32 RF64MB_cmp  (SIE_RF64MB *p, SIE_RF64MB *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define RF64MB_check(p,pie,pfx,hLOG) RF64MB_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define RF64MB_print(p,    pfx,hLOG) RF64MB_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: RF64MB
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE RF64QP                  biu              (4,4)
///     ###
///     * QP for neighboring macroblocks; used by FOP only. Padded to 64b
///     * Same as {BLK,chroma,RSVD,QP,Qu,Qv} in MBPROP in decHal_mbLvl.sxw.txt
///     * Also added DC/ACstep_* for coefficient scaling for DC/AC prediction for MPEG-4/VC-1
///     * [0:31]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 8  DCstep_Y                  
///                                    ###
///                                    * VC-1: DCSTEP for coeff scaling in DC prediction (only 6 bits are used)
///                                    * MPEG-4: qstep luma coeff scaling in DC prediction
///                                    ###
///               %unsigned 8  ACstep_Y                  
///                                    ###
///                                    * VC-1: DCSTEP for coeff scaling in AC prediction (only 6 bits are used)
///                                    * MPEG-4: qstep luma coeff scaling in AC prediction
///                                    ###
///               %unsigned 8  DCstep_C                  
///                                    ###
///                                    * VC-1: not used
///                                    * MPEG-4: qstep chroma coeff scaling in DC prediction
///                                    ###
///               %unsigned 8  ACstep_C                  
///                                    ###
///                                    * VC-1: not used
///                                    * MPEG-4: qstep chroma coeff scaling in AC prediction
///                                    * [32:63]
///                                    ###
///     @ 0x00004                      (P)
///               %unsigned 8  RSVD8                     
///               %unsigned 8  QPY                       
///                                    ###
///                                    * H.264: QP for Luma; 0~51 inclusive
///                                    * MPEG-4: QP_AC (used to determine if coeff scaling is required for AC prediction)
///                                    ###
///               %unsigned 8  QPU                       
///                                    ###
///                                    * H.264: QP fo Cb; 0~51 inclusive
///                                    ###
///               %unsigned 8  QPV                       
///                                    ###
///                                    * H.264: QP for Cr; 0~51 inclusive
///                                    * End of RF64QP
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_RF64QP
#define h_RF64QP (){}

    #define     BA_RF64QP_DCstep_Y                             0x0000
    #define     B16RF64QP_DCstep_Y                             0x0000
    #define   LSb32RF64QP_DCstep_Y                                0
    #define   LSb16RF64QP_DCstep_Y                                0
    #define       bRF64QP_DCstep_Y                             8
    #define   MSK32RF64QP_DCstep_Y                                0x000000FF

    #define     BA_RF64QP_ACstep_Y                             0x0001
    #define     B16RF64QP_ACstep_Y                             0x0000
    #define   LSb32RF64QP_ACstep_Y                                8
    #define   LSb16RF64QP_ACstep_Y                                8
    #define       bRF64QP_ACstep_Y                             8
    #define   MSK32RF64QP_ACstep_Y                                0x0000FF00

    #define     BA_RF64QP_DCstep_C                             0x0002
    #define     B16RF64QP_DCstep_C                             0x0002
    #define   LSb32RF64QP_DCstep_C                                16
    #define   LSb16RF64QP_DCstep_C                                0
    #define       bRF64QP_DCstep_C                             8
    #define   MSK32RF64QP_DCstep_C                                0x00FF0000

    #define     BA_RF64QP_ACstep_C                             0x0003
    #define     B16RF64QP_ACstep_C                             0x0002
    #define   LSb32RF64QP_ACstep_C                                24
    #define   LSb16RF64QP_ACstep_C                                8
    #define       bRF64QP_ACstep_C                             8
    #define   MSK32RF64QP_ACstep_C                                0xFF000000
    ///////////////////////////////////////////////////////////

    #define     BA_RF64QP_RSVD8                                0x0004
    #define     B16RF64QP_RSVD8                                0x0004
    #define   LSb32RF64QP_RSVD8                                   0
    #define   LSb16RF64QP_RSVD8                                   0
    #define       bRF64QP_RSVD8                                8
    #define   MSK32RF64QP_RSVD8                                   0x000000FF

    #define     BA_RF64QP_QPY                                  0x0005
    #define     B16RF64QP_QPY                                  0x0004
    #define   LSb32RF64QP_QPY                                     8
    #define   LSb16RF64QP_QPY                                     8
    #define       bRF64QP_QPY                                  8
    #define   MSK32RF64QP_QPY                                     0x0000FF00

    #define     BA_RF64QP_QPU                                  0x0006
    #define     B16RF64QP_QPU                                  0x0006
    #define   LSb32RF64QP_QPU                                     16
    #define   LSb16RF64QP_QPU                                     0
    #define       bRF64QP_QPU                                  8
    #define   MSK32RF64QP_QPU                                     0x00FF0000

    #define     BA_RF64QP_QPV                                  0x0007
    #define     B16RF64QP_QPV                                  0x0006
    #define   LSb32RF64QP_QPV                                     24
    #define   LSb16RF64QP_QPV                                     8
    #define       bRF64QP_QPV                                  8
    #define   MSK32RF64QP_QPV                                     0xFF000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_RF64QP {
    ///////////////////////////////////////////////////////////
    #define   GET32RF64QP_DCstep_Y(r32)                        _BFGET_(r32, 7, 0)
    #define   SET32RF64QP_DCstep_Y(r32,v)                      _BFSET_(r32, 7, 0,v)
    #define   GET16RF64QP_DCstep_Y(r16)                        _BFGET_(r16, 7, 0)
    #define   SET16RF64QP_DCstep_Y(r16,v)                      _BFSET_(r16, 7, 0,v)

    #define   GET32RF64QP_ACstep_Y(r32)                        _BFGET_(r32,15, 8)
    #define   SET32RF64QP_ACstep_Y(r32,v)                      _BFSET_(r32,15, 8,v)
    #define   GET16RF64QP_ACstep_Y(r16)                        _BFGET_(r16,15, 8)
    #define   SET16RF64QP_ACstep_Y(r16,v)                      _BFSET_(r16,15, 8,v)

    #define   GET32RF64QP_DCstep_C(r32)                        _BFGET_(r32,23,16)
    #define   SET32RF64QP_DCstep_C(r32,v)                      _BFSET_(r32,23,16,v)
    #define   GET16RF64QP_DCstep_C(r16)                        _BFGET_(r16, 7, 0)
    #define   SET16RF64QP_DCstep_C(r16,v)                      _BFSET_(r16, 7, 0,v)

    #define   GET32RF64QP_ACstep_C(r32)                        _BFGET_(r32,31,24)
    #define   SET32RF64QP_ACstep_C(r32,v)                      _BFSET_(r32,31,24,v)
    #define   GET16RF64QP_ACstep_C(r16)                        _BFGET_(r16,15, 8)
    #define   SET16RF64QP_ACstep_C(r16,v)                      _BFSET_(r16,15, 8,v)

            UNSG32 u_DCstep_Y                                  :  8;
            UNSG32 u_ACstep_Y                                  :  8;
            UNSG32 u_DCstep_C                                  :  8;
            UNSG32 u_ACstep_C                                  :  8;
    ///////////////////////////////////////////////////////////
    #define   GET32RF64QP_RSVD8(r32)                           _BFGET_(r32, 7, 0)
    #define   SET32RF64QP_RSVD8(r32,v)                         _BFSET_(r32, 7, 0,v)
    #define   GET16RF64QP_RSVD8(r16)                           _BFGET_(r16, 7, 0)
    #define   SET16RF64QP_RSVD8(r16,v)                         _BFSET_(r16, 7, 0,v)

    #define   GET32RF64QP_QPY(r32)                             _BFGET_(r32,15, 8)
    #define   SET32RF64QP_QPY(r32,v)                           _BFSET_(r32,15, 8,v)
    #define   GET16RF64QP_QPY(r16)                             _BFGET_(r16,15, 8)
    #define   SET16RF64QP_QPY(r16,v)                           _BFSET_(r16,15, 8,v)

    #define   GET32RF64QP_QPU(r32)                             _BFGET_(r32,23,16)
    #define   SET32RF64QP_QPU(r32,v)                           _BFSET_(r32,23,16,v)
    #define   GET16RF64QP_QPU(r16)                             _BFGET_(r16, 7, 0)
    #define   SET16RF64QP_QPU(r16,v)                           _BFSET_(r16, 7, 0,v)

    #define   GET32RF64QP_QPV(r32)                             _BFGET_(r32,31,24)
    #define   SET32RF64QP_QPV(r32,v)                           _BFSET_(r32,31,24,v)
    #define   GET16RF64QP_QPV(r16)                             _BFGET_(r16,15, 8)
    #define   SET16RF64QP_QPV(r16,v)                           _BFSET_(r16,15, 8,v)

            UNSG32 u_RSVD8                                     :  8;
            UNSG32 u_QPY                                       :  8;
            UNSG32 u_QPU                                       :  8;
            UNSG32 u_QPV                                       :  8;
    ///////////////////////////////////////////////////////////
    } SIE_RF64QP;

    ///////////////////////////////////////////////////////////
     SIGN32 RF64QP_drvrd(SIE_RF64QP *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 RF64QP_drvwr(SIE_RF64QP *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void RF64QP_reset(SIE_RF64QP *p);
     SIGN32 RF64QP_cmp  (SIE_RF64QP *p, SIE_RF64QP *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define RF64QP_check(p,pie,pfx,hLOG) RF64QP_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define RF64QP_print(p,    pfx,hLOG) RF64QP_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: RF64QP
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE NLUTCTX                 biu              (4,4)
///     ###
///     * RF64 context for nLut
///     * [0:63]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 MB                   
///               $RF64MB              MB                REG          
///                                    ###
///                                    * Macroblock-level information; reprogrammed by FIGO at the start of every macroblock
///                                    * [64:2047]
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 RSVD                 
///               $LUT64b              RSVD              REG      [31]
///                                    ###
///                                    * padding to 2048-bit boundary
///                                    * [2048:4095]
///                                    ###
///     @ 0x00100                      (P)
///     # 0x00100 PIC                  
///               $RF64PIC             PIC               REG          
///                                    ###
///                                    * Picture-level Parameters for ALU64 extensions.
///                                    * End NLUTCTX
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     512B, bits:    4096b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_NLUTCTX
#define h_NLUTCTX (){}

    #define     RA_NLUTCTX_MB                                  0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_NLUTCTX_RSVD                                0x0008
    ///////////////////////////////////////////////////////////
    #define     RA_NLUTCTX_PIC                                 0x0100
    ///////////////////////////////////////////////////////////

    typedef struct SIE_NLUTCTX {
    ///////////////////////////////////////////////////////////
              SIE_RF64MB                                       ie_MB;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD[31];
    ///////////////////////////////////////////////////////////
              SIE_RF64PIC                                      ie_PIC;
    ///////////////////////////////////////////////////////////
    } SIE_NLUTCTX;

    ///////////////////////////////////////////////////////////
     SIGN32 NLUTCTX_drvrd(SIE_NLUTCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 NLUTCTX_drvwr(SIE_NLUTCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void NLUTCTX_reset(SIE_NLUTCTX *p);
     SIGN32 NLUTCTX_cmp  (SIE_NLUTCTX *p, SIE_NLUTCTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define NLUTCTX_check(p,pie,pfx,hLOG) NLUTCTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define NLUTCTX_print(p,    pfx,hLOG) NLUTCTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: NLUTCTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE BITOPCTX                biu              (4,4)
///     ###
///     * Operator format for BitOp extension
///     * [0:3583]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 RSVD                 
///               $LUT64b              RSVD              REG      [56]
///                                    ###
///                                    * padding to 3583
///                                    * [3584:3711]
///                                    ###
///     @ 0x001C0                      (P)
///     # 0x001C0 CTX                  
///               $BITOPRF64           CTX               REG          
///                                    ###
///                                    * Four BitOp commands, selected by extension ID
///                                    * End BitOpCtx
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     512B, bits:    4096b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_BITOPCTX
#define h_BITOPCTX (){}

    #define     RA_BITOPCTX_RSVD                               0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_BITOPCTX_CTX                                0x01C0
    ///////////////////////////////////////////////////////////

    typedef struct SIE_BITOPCTX {
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD[56];
    ///////////////////////////////////////////////////////////
              SIE_BITOPRF64                                    ie_CTX;
    ///////////////////////////////////////////////////////////
    } SIE_BITOPCTX;

    ///////////////////////////////////////////////////////////
     SIGN32 BITOPCTX_drvrd(SIE_BITOPCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 BITOPCTX_drvwr(SIE_BITOPCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void BITOPCTX_reset(SIE_BITOPCTX *p);
     SIGN32 BITOPCTX_cmp  (SIE_BITOPCTX *p, SIE_BITOPCTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define BITOPCTX_check(p,pie,pfx,hLOG) BITOPCTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define BITOPCTX_print(p,    pfx,hLOG) BITOPCTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: BITOPCTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE DQCTX                   biu              (4,4)
///     ###
///     * RF64 context for dQuant
///     * [0:63]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 MB                   
///               $RF64MB              MB                REG          
///                                    ###
///                                    * Reserved for RF64MB
///                                    * [64:191]
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 QPX                  
///               $RF64QP              QPX               REG          
///                                    ###
///                                    * QP of current block
///                                    ###
///     @ 0x00010                      (P)
///     # 0x00010 QPN                  
///               $RF64QP              QPN               REG          
///                                    ###
///                                    * QP of neighboring block
///                                    * Used for VC-1/MPEG-4 DC/AC prediction
///                                    * [192:2047]
///                                    ###
///     @ 0x00018                      (P)
///     # 0x00018 RSVD                 
///               $LUT64b              RSVD              REG      [29]
///                                    ###
///                                    * padding to 2048-bit boundary
///                                    * [2048:4095]
///                                    ###
///     @ 0x00100                      (P)
///     # 0x00100 PIC                  
///               $RF64PIC             PIC               REG          
///                                    ###
///                                    * Picture-level Parameters for ALU64 extensions.
///                                    * End DQCTX
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     512B, bits:    4096b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_DQCTX
#define h_DQCTX (){}

    #define     RA_DQCTX_MB                                    0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_DQCTX_QPX                                   0x0008
    ///////////////////////////////////////////////////////////
    #define     RA_DQCTX_QPN                                   0x0010
    ///////////////////////////////////////////////////////////
    #define     RA_DQCTX_RSVD                                  0x0018
    ///////////////////////////////////////////////////////////
    #define     RA_DQCTX_PIC                                   0x0100
    ///////////////////////////////////////////////////////////

    typedef struct SIE_DQCTX {
    ///////////////////////////////////////////////////////////
              SIE_RF64MB                                       ie_MB;
    ///////////////////////////////////////////////////////////
              SIE_RF64QP                                       ie_QPX;
    ///////////////////////////////////////////////////////////
              SIE_RF64QP                                       ie_QPN;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD[29];
    ///////////////////////////////////////////////////////////
              SIE_RF64PIC                                      ie_PIC;
    ///////////////////////////////////////////////////////////
    } SIE_DQCTX;

    ///////////////////////////////////////////////////////////
     SIGN32 DQCTX_drvrd(SIE_DQCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 DQCTX_drvwr(SIE_DQCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void DQCTX_reset(SIE_DQCTX *p);
     SIGN32 DQCTX_cmp  (SIE_DQCTX *p, SIE_DQCTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define DQCTX_check(p,pie,pfx,hLOG) DQCTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define DQCTX_print(p,    pfx,hLOG) DQCTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: DQCTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE ASPCTX                  biu              (4,4)
///     ###
///     * RF64 context for ASP
///     * [0:63]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 MB                   
///               $RF64MB              MB                REG          
///                                    ###
///                                    * Reserved for RF64MB
///                                    * [64:255]
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 RSVD                 
///               $LUT64b              RSVD              REG       [3]
///                                    ###
///                                    * padding to 2048-bit boundary
///                                    ###
///     @ 0x00020                      (P)
///     # 0x00020 D33                  
///               $HCTX4x4             D33               REG          
///                                    ###
///                                    * Y(-1,-1)
///                                    ###
///     @ 0x00030                      (P)
///     # 0x00030 B30                  
///               $HCTX4x4             B30               REG          
///                                    ###
///                                    * Y(0,-1) or U(0,-1) or DCU(0,-1)
///                                    ###
///     @ 0x00040                      (P)
///     # 0x00040 B31                  
///               $HCTX4x4             B31               REG          
///                                    ###
///                                    * Y(1,-1) or V(0,-1) or DCV(0,-1)
///                                    ###
///     @ 0x00050                      (P)
///     # 0x00050 B32                  
///               $HCTX4x4             B32               REG          
///                                    ###
///                                    * Y(2,-1) or U(1,-1)
///                                    ###
///     @ 0x00060                      (P)
///     # 0x00060 B33                  
///               $HCTX4x4             B33               REG          
///                                    ###
///                                    * Y(3,-1) or V(1,-1) or DCY(0,-1)
///                                    ###
///     @ 0x00070                      (P)
///     # 0x00070 C30                  
///               $HCTX4x4             C30               REG          
///                                    ###
///                                    * Y(4,-1)
///                                    ###
///     @ 0x00080                      (P)
///     # 0x00080 A03                  
///               $HCTX4x4             A03               REG          
///                                    ###
///                                    * Y(-1,0)
///                                    ###
///     @ 0x00090                      (P)
///     # 0x00090 A12                  
///               $HCTX4x4             A12               REG          
///                                    ###
///                                    * U(-1,0) & V(-1,0)
///                                    ###
///     @ 0x000A0                      (P)
///     # 0x000A0 A13                  
///               $HCTX4x4             A13               REG          
///                                    ###
///                                    * Y(-1,1)
///                                    ###
///     @ 0x000B0                      (P)
///     # 0x000B0 A23                  
///               $HCTX4x4             A23               REG          
///                                    ###
///                                    * Y(-1,2)
///                                    ###
///     @ 0x000C0                      (P)
///     # 0x000C0 A30                  
///               $HCTX4x4             A30               REG          
///                                    ###
///                                    * DCU(-1,0) & DCV(-1,0)
///                                    ###
///     @ 0x000D0                      (P)
///     # 0x000D0 A31                  
///               $HCTX4x4             A31               REG          
///                                    ###
///                                    * DCI(-1,0) & DCY(-1,0)
///                                    ###
///     @ 0x000E0                      (P)
///     # 0x000E0 A32                  
///               $HCTX4x4             A32               REG          
///                                    ###
///                                    * U(-1,1) & V(-1,1)
///                                    ###
///     @ 0x000F0                      (P)
///     # 0x000F0 A33                  
///               $HCTX4x4             A33               REG          
///                                    ###
///                                    * Y(-1,3)
///                                    * [2048:4095]
///                                    ###
///     @ 0x00100                      (P)
///     # 0x00100 PIC                  
///               $RF64PIC             PIC               REG          
///                                    ###
///                                    * Picture-level Parameters for ALU64 extensions.
///                                    * End ASPCTX
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     512B, bits:    4096b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_ASPCTX
#define h_ASPCTX (){}

    #define     RA_ASPCTX_MB                                   0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_RSVD                                 0x0008
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_D33                                  0x0020
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_B30                                  0x0030
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_B31                                  0x0040
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_B32                                  0x0050
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_B33                                  0x0060
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_C30                                  0x0070
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_A03                                  0x0080
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_A12                                  0x0090
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_A13                                  0x00A0
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_A23                                  0x00B0
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_A30                                  0x00C0
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_A31                                  0x00D0
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_A32                                  0x00E0
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_A33                                  0x00F0
    ///////////////////////////////////////////////////////////
    #define     RA_ASPCTX_PIC                                  0x0100
    ///////////////////////////////////////////////////////////

    typedef struct SIE_ASPCTX {
    ///////////////////////////////////////////////////////////
              SIE_RF64MB                                       ie_MB;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD[3];
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_D33;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_B30;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_B31;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_B32;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_B33;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_C30;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A03;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A12;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A13;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A23;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A30;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A31;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A32;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A33;
    ///////////////////////////////////////////////////////////
              SIE_RF64PIC                                      ie_PIC;
    ///////////////////////////////////////////////////////////
    } SIE_ASPCTX;

    ///////////////////////////////////////////////////////////
     SIGN32 ASPCTX_drvrd(SIE_ASPCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 ASPCTX_drvwr(SIE_ASPCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void ASPCTX_reset(SIE_ASPCTX *p);
     SIGN32 ASPCTX_cmp  (SIE_ASPCTX *p, SIE_ASPCTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define ASPCTX_check(p,pie,pfx,hLOG) ASPCTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define ASPCTX_print(p,    pfx,hLOG) ASPCTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: ASPCTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE HCTX_ARR                biu              (4,4)
///     ###
///     * 16 * HCTX4x4 for ASP
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 CTX                  
///               $HCTX4x4             CTX               REG      [16]
///                                    ###
///                                    * HCTX4x4
///                                    * End HCTX_ARR
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     256B, bits:    2048b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_HCTX_ARR
#define h_HCTX_ARR (){}

    #define     RA_HCTX_ARR_CTX                                0x0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_HCTX_ARR {
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_CTX[16];
    ///////////////////////////////////////////////////////////
    } SIE_HCTX_ARR;

    ///////////////////////////////////////////////////////////
     SIGN32 HCTX_ARR_drvrd(SIE_HCTX_ARR *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 HCTX_ARR_drvwr(SIE_HCTX_ARR *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void HCTX_ARR_reset(SIE_HCTX_ARR *p);
     SIGN32 HCTX_ARR_cmp  (SIE_HCTX_ARR *p, SIE_HCTX_ARR *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define HCTX_ARR_check(p,pie,pfx,hLOG) HCTX_ARR_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define HCTX_ARR_print(p,    pfx,hLOG) HCTX_ARR_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: HCTX_ARR
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE ASECTX                  biu              (4,4)
///     ###
///     * RF64 context for ASE
///     * [0:63]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 MB                   
///               $RF64MB              MB                REG          
///                                    ###
///                                    * Reserved for RF64MB
///                                    * [64:255]
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 RSVD                 
///               $LUT64b              RSVD              REG       [3]
///                                    ###
///                                    * padding to 2048-bit boundary
///                                    ###
///     @ 0x00020                      (P)
///     # 0x00020 D33                  
///               $HCTX4x4             D33               REG          
///                                    ###
///                                    * Y(-1,-1)
///                                    ###
///     @ 0x00030                      (P)
///     # 0x00030 B30                  
///               $HCTX4x4             B30               REG          
///                                    ###
///                                    * Y(0,-1) or U(0,-1) or DCU(0,-1)
///                                    ###
///     @ 0x00040                      (P)
///     # 0x00040 B31                  
///               $HCTX4x4             B31               REG          
///                                    ###
///                                    * Y(1,-1) or V(0,-1) or DCV(0,-1)
///                                    ###
///     @ 0x00050                      (P)
///     # 0x00050 B32                  
///               $HCTX4x4             B32               REG          
///                                    ###
///                                    * Y(2,-1) or U(1,-1)
///                                    ###
///     @ 0x00060                      (P)
///     # 0x00060 B33                  
///               $HCTX4x4             B33               REG          
///                                    ###
///                                    * Y(3,-1) or V(1,-1) or DCY(0,-1)
///                                    ###
///     @ 0x00070                      (P)
///     # 0x00070 C30                  
///               $HCTX4x4             C30               REG          
///                                    ###
///                                    * Y(4,-1)
///                                    ###
///     @ 0x00080                      (P)
///     # 0x00080 A03                  
///               $HCTX4x4             A03               REG          
///                                    ###
///                                    * Y(-1,0)
///                                    ###
///     @ 0x00090                      (P)
///     # 0x00090 A12                  
///               $HCTX4x4             A12               REG          
///                                    ###
///                                    * U(-1,0) & V(-1,0)
///                                    ###
///     @ 0x000A0                      (P)
///     # 0x000A0 A13                  
///               $HCTX4x4             A13               REG          
///                                    ###
///                                    * Y(-1,1)
///                                    ###
///     @ 0x000B0                      (P)
///     # 0x000B0 A23                  
///               $HCTX4x4             A23               REG          
///                                    ###
///                                    * Y(-1,2)
///                                    ###
///     @ 0x000C0                      (P)
///     # 0x000C0 A30                  
///               $HCTX4x4             A30               REG          
///                                    ###
///                                    * DCU(-1,0) & DCV(-1,0)
///                                    ###
///     @ 0x000D0                      (P)
///     # 0x000D0 A31                  
///               $HCTX4x4             A31               REG          
///                                    ###
///                                    * DCI(-1,0) & DCY(-1,0)
///                                    ###
///     @ 0x000E0                      (P)
///     # 0x000E0 A32                  
///               $HCTX4x4             A32               REG          
///                                    ###
///                                    * U(-1,1) & V(-1,1)
///                                    ###
///     @ 0x000F0                      (P)
///     # 0x000F0 A33                  
///               $HCTX4x4             A33               REG          
///                                    ###
///                                    * Y(-1,3)
///                                    * [2048:4095]
///                                    ###
///     @ 0x00100                      (P)
///     # 0x00100 PIC                  
///               $RF64PIC             PIC               REG          
///                                    ###
///                                    * Picture-level Parameters for ALU64 extensions.
///                                    * End ASECTX
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     512B, bits:    4096b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_ASECTX
#define h_ASECTX (){}

    #define     RA_ASECTX_MB                                   0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_RSVD                                 0x0008
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_D33                                  0x0020
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_B30                                  0x0030
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_B31                                  0x0040
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_B32                                  0x0050
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_B33                                  0x0060
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_C30                                  0x0070
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_A03                                  0x0080
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_A12                                  0x0090
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_A13                                  0x00A0
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_A23                                  0x00B0
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_A30                                  0x00C0
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_A31                                  0x00D0
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_A32                                  0x00E0
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_A33                                  0x00F0
    ///////////////////////////////////////////////////////////
    #define     RA_ASECTX_PIC                                  0x0100
    ///////////////////////////////////////////////////////////

    typedef struct SIE_ASECTX {
    ///////////////////////////////////////////////////////////
              SIE_RF64MB                                       ie_MB;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD[3];
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_D33;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_B30;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_B31;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_B32;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_B33;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_C30;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A03;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A12;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A13;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A23;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A30;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A31;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A32;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A33;
    ///////////////////////////////////////////////////////////
              SIE_RF64PIC                                      ie_PIC;
    ///////////////////////////////////////////////////////////
    } SIE_ASECTX;

    ///////////////////////////////////////////////////////////
     SIGN32 ASECTX_drvrd(SIE_ASECTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 ASECTX_drvwr(SIE_ASECTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void ASECTX_reset(SIE_ASECTX *p);
     SIGN32 ASECTX_cmp  (SIE_ASECTX *p, SIE_ASECTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define ASECTX_check(p,pie,pfx,hLOG) ASECTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define ASECTX_print(p,    pfx,hLOG) ASECTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: ASECTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE ASE_ND_CTX              biu              (4,4)
///     ###
///     * RF64 context for ASE (to store Neighbor D in MBAFF mode)
///     * [0:63]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 RSVD                 
///               $LUT64b              RSVD              REG          
///                                    ###
///                                    * Reserved for RF64MB
///                                    * [64:191]
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 A03m                 
///               $HCTX4x4             A03m              REG          
///                                    ###
///                                    * Neighbor D for when locating at A03 in MBAFF mode
///                                    * [192:255]
///                                    ###
///     @ 0x00018                      (P)
///     # 0x00018 RSVD1                
///               $LUT64b              RSVD1             REG      [32]
///                                    ###
///                                    * [2240:2367]
///                                    ###
///     @ 0x00118                      (P)
///     # 0x00118 A13m                 
///               $HCTX4x4             A13m              REG          
///                                    ###
///                                    * Neighbor D for when locating at A13 in MBAFF mode
///                                    * [2368:2495]
///                                    ###
///     @ 0x00128                      (P)
///     # 0x00128 A23m                 
///               $HCTX4x4             A23m              REG          
///                                    ###
///                                    * Neighbor D for when locating at A23 in MBAFF mode
///                                    * [2496:4097]
///                                    ###
///     @ 0x00138                      (P)
///     # 0x00138 RSVD2                
///               $LUT64b              RSVD2             REG      [25]
///                                    ###
///                                    * Padding to the end
///                                    * End ASE_ND_CTX
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     512B, bits:    4096b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_ASE_ND_CTX
#define h_ASE_ND_CTX (){}

    #define     RA_ASE_ND_CTX_RSVD                             0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_ASE_ND_CTX_A03m                             0x0008
    ///////////////////////////////////////////////////////////
    #define     RA_ASE_ND_CTX_RSVD1                            0x0018
    ///////////////////////////////////////////////////////////
    #define     RA_ASE_ND_CTX_A13m                             0x0118
    ///////////////////////////////////////////////////////////
    #define     RA_ASE_ND_CTX_A23m                             0x0128
    ///////////////////////////////////////////////////////////
    #define     RA_ASE_ND_CTX_RSVD2                            0x0138
    ///////////////////////////////////////////////////////////

    typedef struct SIE_ASE_ND_CTX {
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A03m;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD1[32];
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A13m;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_A23m;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD2[25];
    ///////////////////////////////////////////////////////////
    } SIE_ASE_ND_CTX;

    ///////////////////////////////////////////////////////////
     SIGN32 ASE_ND_CTX_drvrd(SIE_ASE_ND_CTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 ASE_ND_CTX_drvwr(SIE_ASE_ND_CTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void ASE_ND_CTX_reset(SIE_ASE_ND_CTX *p);
     SIGN32 ASE_ND_CTX_cmp  (SIE_ASE_ND_CTX *p, SIE_ASE_ND_CTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define ASE_ND_CTX_check(p,pie,pfx,hLOG) ASE_ND_CTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define ASE_ND_CTX_print(p,    pfx,hLOG) ASE_ND_CTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: ASE_ND_CTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE FOPCTX                  biu              (4,4)
///     ###
///     * RF64 context for FOP
///     * [0:63]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 MB                   
///               $RF64MB              MB                REG          
///                                    ###
///                                    * Macroblock-level information; reprogrammed by FIGO at the start of every macroblock
///                                    * [64:447]
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 QPX0                 
///               $RF64QP              QPX0              REG          
///                                    ###
///                                    * QP of current MB
///                                    ###
///     @ 0x00010                      (P)
///     # 0x00010 QPX1                 
///               $RF64QP              QPX1              REG          
///                                    ###
///                                    * QP of current MB
///                                    ###
///     @ 0x00018                      (P)
///     # 0x00018 QPA0                 
///               $RF64QP              QPA0              REG          
///                                    ###
///                                    * QP of even MB of left MB pair
///                                    ###
///     @ 0x00020                      (P)
///     # 0x00020 QPA1                 
///               $RF64QP              QPA1              REG          
///                                    ###
///                                    * QP of odd MB of left MB pair
///                                    ###
///     @ 0x00028                      (P)
///     # 0x00028 QPB0                 
///               $RF64QP              QPB0              REG          
///                                    ###
///                                    * QP of even MB of top MB pair
///                                    ###
///     @ 0x00030                      (P)
///     # 0x00030 QPB1                 
///               $RF64QP              QPB1              REG          
///                                    ###
///                                    * QP of odd MB of top MB pair
///                                    * [448:831]
///                                    ###
///     @ 0x00038                      (P)
///     # 0x00038 BlkX                 
///               $HCTX4x4             BlkX              REG          
///                                    ###
///                                    * Context for current block
///                                    ###
///     @ 0x00048                      (P)
///     # 0x00048 BlkA                 
///               $HCTX4x4             BlkA              REG          
///                                    ###
///                                    * Context for left neighbor
///                                    ###
///     @ 0x00058                      (P)
///     # 0x00058 BlkB                 
///               $HCTX4x4             BlkB              REG          
///                                    ###
///                                    * Context for top block
///                                    ###
///     @ 0x00068                      (P)
///     # 0x00068 BlkC                 
///               $HCTX4x4             BlkC              REG          
///                                    ###
///                                    * Block context used in VC-1 main profile P exception 2.
///                                    * [960:2047]
///                                    ###
///     @ 0x00078                      (P)
///     # 0x00078 RSVD                 
///               $LUT64b              RSVD              REG      [17]
///                                    ###
///                                    * padding to 2048-bit boundary
///                                    * [2048:4095]
///                                    ###
///     @ 0x00100                      (P)
///     # 0x00100 PIC                  
///               $RF64PIC             PIC               REG          
///                                    ###
///                                    * Picture-level Parameters for ALU64 extensions.
///                                    * End RF64CTX
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     512B, bits:    4096b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_FOPCTX
#define h_FOPCTX (){}

    #define     RA_FOPCTX_MB                                   0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_FOPCTX_QPX0                                 0x0008
    ///////////////////////////////////////////////////////////
    #define     RA_FOPCTX_QPX1                                 0x0010
    ///////////////////////////////////////////////////////////
    #define     RA_FOPCTX_QPA0                                 0x0018
    ///////////////////////////////////////////////////////////
    #define     RA_FOPCTX_QPA1                                 0x0020
    ///////////////////////////////////////////////////////////
    #define     RA_FOPCTX_QPB0                                 0x0028
    ///////////////////////////////////////////////////////////
    #define     RA_FOPCTX_QPB1                                 0x0030
    ///////////////////////////////////////////////////////////
    #define     RA_FOPCTX_BlkX                                 0x0038
    ///////////////////////////////////////////////////////////
    #define     RA_FOPCTX_BlkA                                 0x0048
    ///////////////////////////////////////////////////////////
    #define     RA_FOPCTX_BlkB                                 0x0058
    ///////////////////////////////////////////////////////////
    #define     RA_FOPCTX_BlkC                                 0x0068
    ///////////////////////////////////////////////////////////
    #define     RA_FOPCTX_RSVD                                 0x0078
    ///////////////////////////////////////////////////////////
    #define     RA_FOPCTX_PIC                                  0x0100
    ///////////////////////////////////////////////////////////

    typedef struct SIE_FOPCTX {
    ///////////////////////////////////////////////////////////
              SIE_RF64MB                                       ie_MB;
    ///////////////////////////////////////////////////////////
              SIE_RF64QP                                       ie_QPX0;
    ///////////////////////////////////////////////////////////
              SIE_RF64QP                                       ie_QPX1;
    ///////////////////////////////////////////////////////////
              SIE_RF64QP                                       ie_QPA0;
    ///////////////////////////////////////////////////////////
              SIE_RF64QP                                       ie_QPA1;
    ///////////////////////////////////////////////////////////
              SIE_RF64QP                                       ie_QPB0;
    ///////////////////////////////////////////////////////////
              SIE_RF64QP                                       ie_QPB1;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_BlkX;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_BlkA;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_BlkB;
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_BlkC;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD[17];
    ///////////////////////////////////////////////////////////
              SIE_RF64PIC                                      ie_PIC;
    ///////////////////////////////////////////////////////////
    } SIE_FOPCTX;

    ///////////////////////////////////////////////////////////
     SIGN32 FOPCTX_drvrd(SIE_FOPCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 FOPCTX_drvwr(SIE_FOPCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void FOPCTX_reset(SIE_FOPCTX *p);
     SIGN32 FOPCTX_cmp  (SIE_FOPCTX *p, SIE_FOPCTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define FOPCTX_check(p,pie,pfx,hLOG) FOPCTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define FOPCTX_print(p,    pfx,hLOG) FOPCTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: FOPCTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE pmvScale                biu              (4,4)
///     ###
///     * Scaling factors for PMV calculation (for AVS)
///     * [0:63]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 32 scaleA                    
///                                    ###
///                                    * Scaling factor for MVs of block A
///                                    ###
///     @ 0x00004                      (P)
///               %unsigned 32 scaleB                    
///                                    ###
///                                    * Scaling factor for MVs of block B
///                                    * [64:127]
///                                    ###
///     @ 0x00008                      (P)
///               %unsigned 32 scaleC                    
///                                    ###
///                                    * Scaling factor for MVs of block C
///                                    ###
///     @ 0x0000C                      (P)
///               %unsigned 32 scaleD                    
///                                    ###
///                                    * Scaling factor for MVs of block D
///                                    * End pmvScale
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      16B, bits:     128b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_pmvScale
#define h_pmvScale (){}

    #define     BA_pmvScale_scaleA                             0x0000
    #define     B16pmvScale_scaleA                             0x0000
    #define   LSb32pmvScale_scaleA                                0
    #define   LSb16pmvScale_scaleA                                0
    #define       bpmvScale_scaleA                             32
    #define   MSK32pmvScale_scaleA                                0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    #define     BA_pmvScale_scaleB                             0x0004
    #define     B16pmvScale_scaleB                             0x0004
    #define   LSb32pmvScale_scaleB                                0
    #define   LSb16pmvScale_scaleB                                0
    #define       bpmvScale_scaleB                             32
    #define   MSK32pmvScale_scaleB                                0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    #define     BA_pmvScale_scaleC                             0x0008
    #define     B16pmvScale_scaleC                             0x0008
    #define   LSb32pmvScale_scaleC                                0
    #define   LSb16pmvScale_scaleC                                0
    #define       bpmvScale_scaleC                             32
    #define   MSK32pmvScale_scaleC                                0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    #define     BA_pmvScale_scaleD                             0x000C
    #define     B16pmvScale_scaleD                             0x000C
    #define   LSb32pmvScale_scaleD                                0
    #define   LSb16pmvScale_scaleD                                0
    #define       bpmvScale_scaleD                             32
    #define   MSK32pmvScale_scaleD                                0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_pmvScale {
    ///////////////////////////////////////////////////////////
    #define   GET32pmvScale_scaleA(r32)                        _BFGET_(r32,31, 0)
    #define   SET32pmvScale_scaleA(r32,v)                      _BFSET_(r32,31, 0,v)

            UNSG32 u_scaleA                                    : 32;
    ///////////////////////////////////////////////////////////
    #define   GET32pmvScale_scaleB(r32)                        _BFGET_(r32,31, 0)
    #define   SET32pmvScale_scaleB(r32,v)                      _BFSET_(r32,31, 0,v)

            UNSG32 u_scaleB                                    : 32;
    ///////////////////////////////////////////////////////////
    #define   GET32pmvScale_scaleC(r32)                        _BFGET_(r32,31, 0)
    #define   SET32pmvScale_scaleC(r32,v)                      _BFSET_(r32,31, 0,v)

            UNSG32 u_scaleC                                    : 32;
    ///////////////////////////////////////////////////////////
    #define   GET32pmvScale_scaleD(r32)                        _BFGET_(r32,31, 0)
    #define   SET32pmvScale_scaleD(r32,v)                      _BFSET_(r32,31, 0,v)

            UNSG32 u_scaleD                                    : 32;
    ///////////////////////////////////////////////////////////
    } SIE_pmvScale;

    ///////////////////////////////////////////////////////////
     SIGN32 pmvScale_drvrd(SIE_pmvScale *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 pmvScale_drvwr(SIE_pmvScale *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void pmvScale_reset(SIE_pmvScale *p);
     SIGN32 pmvScale_cmp  (SIE_pmvScale *p, SIE_pmvScale *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define pmvScale_check(p,pie,pfx,hLOG) pmvScale_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define pmvScale_print(p,    pfx,hLOG) pmvScale_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: pmvScale
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE PMVCTX                  biu              (4,4)
///     ###
///     * RF64 context for PMV
///     * [0:63]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 MB                   
///               $RF64MB              MB                REG          
///                                    ###
///                                    * Macroblock-level information; reprogrammed by FIGO at the start of every macroblock
///                                    * [64:447]
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 RSVD0                
///               $LUT64b              RSVD0             REG       [6]
///                                    ###
///                                    * padding to align block-level context
///                                    * [448:1087]
///                                    ###
///     @ 0x00038                      (P)
///     # 0x00038 BlkX                 
///               $FCTX                BlkX              REG          
///                                    ###
///                                    * Context for current block
///                                    ###
///     @ 0x00040                      (P)
///     # 0x00040 ChromaMV             
///               $MV                  ChromaMV          REG          
///                                    ###
///                                    * MPEG-4 chroma MV
///                                    ###
///     @ 0x00044                      (P)
///               %unsigned 32 RSVDX                     
///                                    ###
///                                    * padding to 128-bit
///                                    ###
///     @ 0x00048                      (P)
///     # 0x00048 BlkA                 
///               $FCTX                BlkA              REG          
///                                    ###
///                                    * Context for left neighbor
///                                    ###
///     @ 0x00050                      (P)
///     # 0x00050 BlkD                 
///               $FCTX                BlkD              REG          
///                                    ###
///                                    * Context for upper-left neighbor
///                                    ###
///     @ 0x00058                      (P)
///     # 0x00058 BlkB                 
///               $FCTX                BlkB              REG          
///                                    ###
///                                    * Context for top neighbor
///                                    ###
///     @ 0x00060                      (P)
///     # 0x00060 BlkC                 
///               $FCTX                BlkC              REG          
///                                    ###
///                                    * Context for upper-right neighbor
///                                    ###
///     @ 0x00068                      (P)
///     # 0x00068 BlkA1                
///               $FCTX                BlkA1             REG          
///                                    ###
///                                    * Context for 2nd left neighbor, interlace frame
///                                    ###
///     @ 0x00070                      (P)
///     # 0x00070 BlkD1                
///               $FCTX                BlkD1             REG          
///                                    ###
///                                    * Context for 2nd upper-left neighbor, interlace frame
///                                    ###
///     @ 0x00078                      (P)
///     # 0x00078 BlkB1                
///               $FCTX                BlkB1             REG          
///                                    ###
///                                    * Context for 2nd top neighbor, interlace frame
///                                    ###
///     @ 0x00080                      (P)
///     # 0x00080 BlkC1                
///               $FCTX                BlkC1             REG          
///                                    ###
///                                    * Context for 2nd up-right neighbor, interlace frame only
///                                    * [1088:1727]
///                                    ###
///     @ 0x00088                      (P)
///               %unsigned 32 pmvScale_0i               
///               %unsigned 32 pmvScale_1i               
///               %unsigned 32 pmvScale_2i               
///               %unsigned 32 pmvScale_3i               
///               %unsigned 32 pmvScale_4i               
///               %unsigned 32 pmvScale_5i               
///               %unsigned 32 pmvScale_6i               
///               %unsigned 32 pmvScale_7i               
///               %unsigned 32 pmvScale_8i               
///               %unsigned 32 pmvScale_9i               
///               %unsigned 32 pmvScale_10i              
///               %unsigned 32 pmvScale_11i              
///               %unsigned 32 pmvScale_12i              
///               %unsigned 32 pmvScale_13i              
///               %unsigned 32 pmvScale_14i              
///               %unsigned 32 pmvScale_15i              
///               %unsigned 32 pmvScale_16i              
///               %unsigned 32 pmvScale_17i              
///               %unsigned 32 pmvScale_18i              
///               %unsigned 32 pmvScale_19i              
///                                    ###
///                                    * Scale candidates for PMV.
///                                    * [1727:2047]
///                                    ###
///     @ 0x000D8                      (P)
///     # 0x000D8 RSVD                 
///               $LUT64b              RSVD              REG       [5]
///                                    ###
///                                    * padding to 2048-bit boundary
///                                    * [2048:4095]
///                                    ###
///     @ 0x00100                      (P)
///     # 0x00100 PIC                  
///               $RF64PIC             PIC               REG          
///                                    ###
///                                    * Picture-level Parameters for ALU64 extensions.
///                                    * End PMVCTX
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     512B, bits:    4096b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_PMVCTX
#define h_PMVCTX (){}

    #define     RA_PMVCTX_MB                                   0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_RSVD0                                0x0008
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_BlkX                                 0x0038
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_ChromaMV                             0x0040
    ///////////////////////////////////////////////////////////

    #define     BA_PMVCTX_RSVDX                                0x0044
    #define     B16PMVCTX_RSVDX                                0x0044
    #define   LSb32PMVCTX_RSVDX                                   0
    #define   LSb16PMVCTX_RSVDX                                   0
    #define       bPMVCTX_RSVDX                                32
    #define   MSK32PMVCTX_RSVDX                                   0xFFFFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_BlkA                                 0x0048
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_BlkD                                 0x0050
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_BlkB                                 0x0058
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_BlkC                                 0x0060
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_BlkA1                                0x0068
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_BlkD1                                0x0070
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_BlkB1                                0x0078
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_BlkC1                                0x0080
    ///////////////////////////////////////////////////////////

    #define     BA_PMVCTX_pmvScale_0i                          0x0088
    #define     B16PMVCTX_pmvScale_0i                          0x0088
    #define   LSb32PMVCTX_pmvScale_0i                             0
    #define   LSb16PMVCTX_pmvScale_0i                             0
    #define       bPMVCTX_pmvScale_0i                          32
    #define   MSK32PMVCTX_pmvScale_0i                             0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_1i                          0x008C
    #define     B16PMVCTX_pmvScale_1i                          0x008C
    #define   LSb32PMVCTX_pmvScale_1i                             0
    #define   LSb16PMVCTX_pmvScale_1i                             0
    #define       bPMVCTX_pmvScale_1i                          32
    #define   MSK32PMVCTX_pmvScale_1i                             0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_2i                          0x0090
    #define     B16PMVCTX_pmvScale_2i                          0x0090
    #define   LSb32PMVCTX_pmvScale_2i                             0
    #define   LSb16PMVCTX_pmvScale_2i                             0
    #define       bPMVCTX_pmvScale_2i                          32
    #define   MSK32PMVCTX_pmvScale_2i                             0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_3i                          0x0094
    #define     B16PMVCTX_pmvScale_3i                          0x0094
    #define   LSb32PMVCTX_pmvScale_3i                             0
    #define   LSb16PMVCTX_pmvScale_3i                             0
    #define       bPMVCTX_pmvScale_3i                          32
    #define   MSK32PMVCTX_pmvScale_3i                             0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_4i                          0x0098
    #define     B16PMVCTX_pmvScale_4i                          0x0098
    #define   LSb32PMVCTX_pmvScale_4i                             0
    #define   LSb16PMVCTX_pmvScale_4i                             0
    #define       bPMVCTX_pmvScale_4i                          32
    #define   MSK32PMVCTX_pmvScale_4i                             0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_5i                          0x009C
    #define     B16PMVCTX_pmvScale_5i                          0x009C
    #define   LSb32PMVCTX_pmvScale_5i                             0
    #define   LSb16PMVCTX_pmvScale_5i                             0
    #define       bPMVCTX_pmvScale_5i                          32
    #define   MSK32PMVCTX_pmvScale_5i                             0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_6i                          0x00A0
    #define     B16PMVCTX_pmvScale_6i                          0x00A0
    #define   LSb32PMVCTX_pmvScale_6i                             0
    #define   LSb16PMVCTX_pmvScale_6i                             0
    #define       bPMVCTX_pmvScale_6i                          32
    #define   MSK32PMVCTX_pmvScale_6i                             0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_7i                          0x00A4
    #define     B16PMVCTX_pmvScale_7i                          0x00A4
    #define   LSb32PMVCTX_pmvScale_7i                             0
    #define   LSb16PMVCTX_pmvScale_7i                             0
    #define       bPMVCTX_pmvScale_7i                          32
    #define   MSK32PMVCTX_pmvScale_7i                             0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_8i                          0x00A8
    #define     B16PMVCTX_pmvScale_8i                          0x00A8
    #define   LSb32PMVCTX_pmvScale_8i                             0
    #define   LSb16PMVCTX_pmvScale_8i                             0
    #define       bPMVCTX_pmvScale_8i                          32
    #define   MSK32PMVCTX_pmvScale_8i                             0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_9i                          0x00AC
    #define     B16PMVCTX_pmvScale_9i                          0x00AC
    #define   LSb32PMVCTX_pmvScale_9i                             0
    #define   LSb16PMVCTX_pmvScale_9i                             0
    #define       bPMVCTX_pmvScale_9i                          32
    #define   MSK32PMVCTX_pmvScale_9i                             0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_10i                         0x00B0
    #define     B16PMVCTX_pmvScale_10i                         0x00B0
    #define   LSb32PMVCTX_pmvScale_10i                            0
    #define   LSb16PMVCTX_pmvScale_10i                            0
    #define       bPMVCTX_pmvScale_10i                         32
    #define   MSK32PMVCTX_pmvScale_10i                            0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_11i                         0x00B4
    #define     B16PMVCTX_pmvScale_11i                         0x00B4
    #define   LSb32PMVCTX_pmvScale_11i                            0
    #define   LSb16PMVCTX_pmvScale_11i                            0
    #define       bPMVCTX_pmvScale_11i                         32
    #define   MSK32PMVCTX_pmvScale_11i                            0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_12i                         0x00B8
    #define     B16PMVCTX_pmvScale_12i                         0x00B8
    #define   LSb32PMVCTX_pmvScale_12i                            0
    #define   LSb16PMVCTX_pmvScale_12i                            0
    #define       bPMVCTX_pmvScale_12i                         32
    #define   MSK32PMVCTX_pmvScale_12i                            0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_13i                         0x00BC
    #define     B16PMVCTX_pmvScale_13i                         0x00BC
    #define   LSb32PMVCTX_pmvScale_13i                            0
    #define   LSb16PMVCTX_pmvScale_13i                            0
    #define       bPMVCTX_pmvScale_13i                         32
    #define   MSK32PMVCTX_pmvScale_13i                            0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_14i                         0x00C0
    #define     B16PMVCTX_pmvScale_14i                         0x00C0
    #define   LSb32PMVCTX_pmvScale_14i                            0
    #define   LSb16PMVCTX_pmvScale_14i                            0
    #define       bPMVCTX_pmvScale_14i                         32
    #define   MSK32PMVCTX_pmvScale_14i                            0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_15i                         0x00C4
    #define     B16PMVCTX_pmvScale_15i                         0x00C4
    #define   LSb32PMVCTX_pmvScale_15i                            0
    #define   LSb16PMVCTX_pmvScale_15i                            0
    #define       bPMVCTX_pmvScale_15i                         32
    #define   MSK32PMVCTX_pmvScale_15i                            0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_16i                         0x00C8
    #define     B16PMVCTX_pmvScale_16i                         0x00C8
    #define   LSb32PMVCTX_pmvScale_16i                            0
    #define   LSb16PMVCTX_pmvScale_16i                            0
    #define       bPMVCTX_pmvScale_16i                         32
    #define   MSK32PMVCTX_pmvScale_16i                            0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_17i                         0x00CC
    #define     B16PMVCTX_pmvScale_17i                         0x00CC
    #define   LSb32PMVCTX_pmvScale_17i                            0
    #define   LSb16PMVCTX_pmvScale_17i                            0
    #define       bPMVCTX_pmvScale_17i                         32
    #define   MSK32PMVCTX_pmvScale_17i                            0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_18i                         0x00D0
    #define     B16PMVCTX_pmvScale_18i                         0x00D0
    #define   LSb32PMVCTX_pmvScale_18i                            0
    #define   LSb16PMVCTX_pmvScale_18i                            0
    #define       bPMVCTX_pmvScale_18i                         32
    #define   MSK32PMVCTX_pmvScale_18i                            0xFFFFFFFF

    #define     BA_PMVCTX_pmvScale_19i                         0x00D4
    #define     B16PMVCTX_pmvScale_19i                         0x00D4
    #define   LSb32PMVCTX_pmvScale_19i                            0
    #define   LSb16PMVCTX_pmvScale_19i                            0
    #define       bPMVCTX_pmvScale_19i                         32
    #define   MSK32PMVCTX_pmvScale_19i                            0xFFFFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_RSVD                                 0x00D8
    ///////////////////////////////////////////////////////////
    #define     RA_PMVCTX_PIC                                  0x0100
    ///////////////////////////////////////////////////////////

    typedef struct SIE_PMVCTX {
    ///////////////////////////////////////////////////////////
              SIE_RF64MB                                       ie_MB;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD0[6];
    ///////////////////////////////////////////////////////////
              SIE_FCTX                                         ie_BlkX;
    ///////////////////////////////////////////////////////////
              SIE_MV                                           ie_ChromaMV;
    ///////////////////////////////////////////////////////////
    #define   GET32PMVCTX_RSVDX(r32)                           _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_RSVDX(r32,v)                         _BFSET_(r32,31, 0,v)

            UNSG32 u_RSVDX                                     : 32;
    ///////////////////////////////////////////////////////////
              SIE_FCTX                                         ie_BlkA;
    ///////////////////////////////////////////////////////////
              SIE_FCTX                                         ie_BlkD;
    ///////////////////////////////////////////////////////////
              SIE_FCTX                                         ie_BlkB;
    ///////////////////////////////////////////////////////////
              SIE_FCTX                                         ie_BlkC;
    ///////////////////////////////////////////////////////////
              SIE_FCTX                                         ie_BlkA1;
    ///////////////////////////////////////////////////////////
              SIE_FCTX                                         ie_BlkD1;
    ///////////////////////////////////////////////////////////
              SIE_FCTX                                         ie_BlkB1;
    ///////////////////////////////////////////////////////////
              SIE_FCTX                                         ie_BlkC1;
    ///////////////////////////////////////////////////////////
    #define   GET32PMVCTX_pmvScale_0i(r32)                     _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_0i(r32,v)                   _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_0i                               : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_1i(r32)                     _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_1i(r32,v)                   _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_1i                               : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_2i(r32)                     _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_2i(r32,v)                   _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_2i                               : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_3i(r32)                     _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_3i(r32,v)                   _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_3i                               : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_4i(r32)                     _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_4i(r32,v)                   _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_4i                               : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_5i(r32)                     _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_5i(r32,v)                   _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_5i                               : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_6i(r32)                     _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_6i(r32,v)                   _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_6i                               : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_7i(r32)                     _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_7i(r32,v)                   _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_7i                               : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_8i(r32)                     _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_8i(r32,v)                   _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_8i                               : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_9i(r32)                     _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_9i(r32,v)                   _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_9i                               : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_10i(r32)                    _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_10i(r32,v)                  _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_10i                              : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_11i(r32)                    _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_11i(r32,v)                  _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_11i                              : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_12i(r32)                    _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_12i(r32,v)                  _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_12i                              : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_13i(r32)                    _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_13i(r32,v)                  _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_13i                              : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_14i(r32)                    _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_14i(r32,v)                  _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_14i                              : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_15i(r32)                    _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_15i(r32,v)                  _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_15i                              : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_16i(r32)                    _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_16i(r32,v)                  _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_16i                              : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_17i(r32)                    _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_17i(r32,v)                  _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_17i                              : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_18i(r32)                    _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_18i(r32,v)                  _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_18i                              : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32PMVCTX_pmvScale_19i(r32)                    _BFGET_(r32,31, 0)
    #define   SET32PMVCTX_pmvScale_19i(r32,v)                  _BFSET_(r32,31, 0,v)

            UNSG32 u_pmvScale_19i                              : 32;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD[5];
    ///////////////////////////////////////////////////////////
              SIE_RF64PIC                                      ie_PIC;
    ///////////////////////////////////////////////////////////
    } SIE_PMVCTX;

    ///////////////////////////////////////////////////////////
     SIGN32 PMVCTX_drvrd(SIE_PMVCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 PMVCTX_drvwr(SIE_PMVCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void PMVCTX_reset(SIE_PMVCTX *p);
     SIGN32 PMVCTX_cmp  (SIE_PMVCTX *p, SIE_PMVCTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define PMVCTX_check(p,pie,pfx,hLOG) PMVCTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define PMVCTX_print(p,    pfx,hLOG) PMVCTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: PMVCTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE dirMvCTX                biu              (4,4)
///     ###
///     * RF64 context for direct mode MV calculation
///     * [0:63]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 MB                   
///               $RF64MB              MB                REG          
///                                    ###
///                                    * Reserved for RF64MB
///                                    * [64:447]
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 RSVD0                
///               $LUT64b              RSVD0             REG       [6]
///                                    ###
///                                    * padding to align block-level context
///                                    * [448:575]
///                                    ###
///     @ 0x00038                      (P)
///     # 0x00038 BlkX                 
///               $HCTX4x4             BlkX              REG          
///                                    ###
///                                    * Context of the current block; 128-bit.
///                                    * [576:639]
///                                    ###
///     @ 0x00048                      (P)
///     # 0x00048 BlkCol               
///               $FCTX                BlkCol            REG          
///                                    ###
///                                    * Context of co-located block; 64-bit.
///                                    * [640:703]
///                                    ###
///     @ 0x00050                      (P)
///     # 0x00050 mvScale              
///               $dirMvScale          mvScale           REG          
///                                    ###
///                                    * MV scaling factor for temporal direct mode; 64 bits
///                                    * [704:1919]
///                                    ###
///     @ 0x00058                      (P)
///     # 0x00058 RSVD                 
///               $LUT64b              RSVD              REG      [19]
///                                    ###
///                                    * padding to 2048-bit boundary
///                                    * [1920:2047]
///                                    ###
///     @ 0x000F0                      (P)
///     # 0x000F0 MbPMV                
///               $HCTX4x4             MbPMV             REG          
///                                    ###
///                                    * Macroblock PMV, for spatial direct mode only
///                                    * [2048:4095]
///                                    ###
///     @ 0x00100                      (P)
///     # 0x00100 PIC                  
///               $RF64PIC             PIC               REG          
///                                    ###
///                                    * Picture-level Parameters for ALU64 extensions.
///                                    * End dirMvCTX
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     512B, bits:    4096b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_dirMvCTX
#define h_dirMvCTX (){}

    #define     RA_dirMvCTX_MB                                 0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_dirMvCTX_RSVD0                              0x0008
    ///////////////////////////////////////////////////////////
    #define     RA_dirMvCTX_BlkX                               0x0038
    ///////////////////////////////////////////////////////////
    #define     RA_dirMvCTX_BlkCol                             0x0048
    ///////////////////////////////////////////////////////////
    #define     RA_dirMvCTX_mvScale                            0x0050
    ///////////////////////////////////////////////////////////
    #define     RA_dirMvCTX_RSVD                               0x0058
    ///////////////////////////////////////////////////////////
    #define     RA_dirMvCTX_MbPMV                              0x00F0
    ///////////////////////////////////////////////////////////
    #define     RA_dirMvCTX_PIC                                0x0100
    ///////////////////////////////////////////////////////////

    typedef struct SIE_dirMvCTX {
    ///////////////////////////////////////////////////////////
              SIE_RF64MB                                       ie_MB;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD0[6];
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_BlkX;
    ///////////////////////////////////////////////////////////
              SIE_FCTX                                         ie_BlkCol;
    ///////////////////////////////////////////////////////////
              SIE_dirMvScale                                   ie_mvScale;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD[19];
    ///////////////////////////////////////////////////////////
              SIE_HCTX4x4                                      ie_MbPMV;
    ///////////////////////////////////////////////////////////
              SIE_RF64PIC                                      ie_PIC;
    ///////////////////////////////////////////////////////////
    } SIE_dirMvCTX;

    ///////////////////////////////////////////////////////////
     SIGN32 dirMvCTX_drvrd(SIE_dirMvCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 dirMvCTX_drvwr(SIE_dirMvCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void dirMvCTX_reset(SIE_dirMvCTX *p);
     SIGN32 dirMvCTX_cmp  (SIE_dirMvCTX *p, SIE_dirMvCTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define dirMvCTX_check(p,pie,pfx,hLOG) dirMvCTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define dirMvCTX_print(p,    pfx,hLOG) dirMvCTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: dirMvCTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE vcMsgCTX                biu              (4,4)
///     ###
///     * RF64 context for the vcMsg extension
///     * [0:63]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 MB                   
///               $RF64MB              MB                REG          
///                                    ###
///                                    * 64b macroblock-level parameter
///                                    * [64:447]
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 RSVD0                
///               $LUT64b              RSVD0             REG       [6]
///                                    ###
///                                    * padding to align block-level context
///                                    * [448:511]
///                                    ###
///     @ 0x00038                      (P)
///     # 0x00038 blkX                 
///               $FCTX                blkX              REG          
///                                    ###
///                                    * Motion information context of current partition
///                                    * [512:2047]
///                                    ###
///     @ 0x00040                      (P)
///     # 0x00040 RSVD                 
///               $LUT64b              RSVD              REG      [24]
///                                    ###
///                                    * padding to 2048-bit boundary
///                                    * [2048:4095]
///                                    ###
///     @ 0x00100                      (P)
///     # 0x00100 PIC                  
///               $RF64PIC             PIC               REG          
///                                    ###
///                                    * Picture-level Parameters for ALU64 extensions.
///                                    * End vcMsgCTX
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     512B, bits:    4096b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_vcMsgCTX
#define h_vcMsgCTX (){}

    #define     RA_vcMsgCTX_MB                                 0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_vcMsgCTX_RSVD0                              0x0008
    ///////////////////////////////////////////////////////////
    #define     RA_vcMsgCTX_blkX                               0x0038
    ///////////////////////////////////////////////////////////
    #define     RA_vcMsgCTX_RSVD                               0x0040
    ///////////////////////////////////////////////////////////
    #define     RA_vcMsgCTX_PIC                                0x0100
    ///////////////////////////////////////////////////////////

    typedef struct SIE_vcMsgCTX {
    ///////////////////////////////////////////////////////////
              SIE_RF64MB                                       ie_MB;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD0[6];
    ///////////////////////////////////////////////////////////
              SIE_FCTX                                         ie_blkX;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD[24];
    ///////////////////////////////////////////////////////////
              SIE_RF64PIC                                      ie_PIC;
    ///////////////////////////////////////////////////////////
    } SIE_vcMsgCTX;

    ///////////////////////////////////////////////////////////
     SIGN32 vcMsgCTX_drvrd(SIE_vcMsgCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 vcMsgCTX_drvwr(SIE_vcMsgCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void vcMsgCTX_reset(SIE_vcMsgCTX *p);
     SIGN32 vcMsgCTX_cmp  (SIE_vcMsgCTX *p, SIE_vcMsgCTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define vcMsgCTX_check(p,pie,pfx,hLOG) vcMsgCTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define vcMsgCTX_print(p,    pfx,hLOG) vcMsgCTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: vcMsgCTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE vldCTX                  biu              (4,4)
///     ###
///     * RF64 context for vld
///     * [0:63]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 MB                   
///               $RF64MB              MB                REG          
///                                    ###
///                                    * Macroblock-level information; reprogrammed by FIGO at the start of every macroblock
///                                    * [64:2047]
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 RSVD                 
///               $LUT64b              RSVD              REG      [31]
///                                    ###
///                                    * padding to 2048-bit boundary
///                                    * [2048:4095]
///                                    ###
///     @ 0x00100                      (P)
///     # 0x00100 PIC                  
///               $RF64PIC             PIC               REG          
///                                    ###
///                                    * Picture-level Parameters for ALU64 extensions.
///                                    * End vldCTX
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     512B, bits:    4096b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_vldCTX
#define h_vldCTX (){}

    #define     RA_vldCTX_MB                                   0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_vldCTX_RSVD                                 0x0008
    ///////////////////////////////////////////////////////////
    #define     RA_vldCTX_PIC                                  0x0100
    ///////////////////////////////////////////////////////////

    typedef struct SIE_vldCTX {
    ///////////////////////////////////////////////////////////
              SIE_RF64MB                                       ie_MB;
    ///////////////////////////////////////////////////////////
              SIE_LUT64b                                       ie_RSVD[31];
    ///////////////////////////////////////////////////////////
              SIE_RF64PIC                                      ie_PIC;
    ///////////////////////////////////////////////////////////
    } SIE_vldCTX;

    ///////////////////////////////////////////////////////////
     SIGN32 vldCTX_drvrd(SIE_vldCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 vldCTX_drvwr(SIE_vldCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void vldCTX_reset(SIE_vldCTX *p);
     SIGN32 vldCTX_cmp  (SIE_vldCTX *p, SIE_vldCTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define vldCTX_check(p,pie,pfx,hLOG) vldCTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define vldCTX_print(p,    pfx,hLOG) vldCTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: vldCTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE ClkRstBiu               biu              (4,4)
///     ###
///     * Common Biu Unit used for block level reset and clock gating control
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000 CRCtl                (P)
///               ###
///               * Clock Reset Control Register
///               ###
///               %unsigned 1  rst                       0x1
///                                    ###
///                                    * Software reset. The reset signal is active low.
///                                    * 0 -> the block will be under reset.
///                                    * 1-> the block will be out of reset.
///                                    ###
///               %unsigned 1  swClk_en                  0x1
///                                    ###
///                                    * Software controlled clock enable.
///                                    * 0 -> The corresponding block will be disabled (gated)
///                                    * 1 -> The corresponding clock will be enabled (ungated)
///                                    ###
///               %unsigned 1  dyCG_en                   0x1
///                                    ###
///                                    * This is used to control (enalbe/disable) the HW self dynamic clock gating unit.
///                                    * 0 -> the dynamic clock gating will be disabled (the clock can not be turned off by dynamic clock gating unit).
///                                    * 1 -> the dynamic clock gating will be enabled (the clock can be dynamically turned on/off by the dynamic clock control unit).
///                                    * Here is the glue logic to generate the block level clock enable signal.
///                                    * ClkEn = swClk_en & (~dyCG_en | dyClk_en).
///                                    * swClk_en and dyCG_en are from this biu, and dyClk_en is the signal generated by the dynamic clock control unit.
///                                    * End of ClkRstBiu
///                                    ###
///               %%        29         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:       3b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_ClkRstBiu
#define h_ClkRstBiu (){}

    #define     RA_ClkRstBiu_CRCtl                             0x0000

    #define     BA_ClkRstBiu_CRCtl_rst                         0x0000
    #define     B16ClkRstBiu_CRCtl_rst                         0x0000
    #define   LSb32ClkRstBiu_CRCtl_rst                            0
    #define   LSb16ClkRstBiu_CRCtl_rst                            0
    #define       bClkRstBiu_CRCtl_rst                         1
    #define   MSK32ClkRstBiu_CRCtl_rst                            0x00000001

    #define     BA_ClkRstBiu_CRCtl_swClk_en                    0x0000
    #define     B16ClkRstBiu_CRCtl_swClk_en                    0x0000
    #define   LSb32ClkRstBiu_CRCtl_swClk_en                       1
    #define   LSb16ClkRstBiu_CRCtl_swClk_en                       1
    #define       bClkRstBiu_CRCtl_swClk_en                    1
    #define   MSK32ClkRstBiu_CRCtl_swClk_en                       0x00000002

    #define     BA_ClkRstBiu_CRCtl_dyCG_en                     0x0000
    #define     B16ClkRstBiu_CRCtl_dyCG_en                     0x0000
    #define   LSb32ClkRstBiu_CRCtl_dyCG_en                        2
    #define   LSb16ClkRstBiu_CRCtl_dyCG_en                        2
    #define       bClkRstBiu_CRCtl_dyCG_en                     1
    #define   MSK32ClkRstBiu_CRCtl_dyCG_en                        0x00000004
    ///////////////////////////////////////////////////////////

    typedef struct SIE_ClkRstBiu {
    ///////////////////////////////////////////////////////////
    #define   GET32ClkRstBiu_CRCtl_rst(r32)                    _BFGET_(r32, 0, 0)
    #define   SET32ClkRstBiu_CRCtl_rst(r32,v)                  _BFSET_(r32, 0, 0,v)
    #define   GET16ClkRstBiu_CRCtl_rst(r16)                    _BFGET_(r16, 0, 0)
    #define   SET16ClkRstBiu_CRCtl_rst(r16,v)                  _BFSET_(r16, 0, 0,v)

    #define   GET32ClkRstBiu_CRCtl_swClk_en(r32)               _BFGET_(r32, 1, 1)
    #define   SET32ClkRstBiu_CRCtl_swClk_en(r32,v)             _BFSET_(r32, 1, 1,v)
    #define   GET16ClkRstBiu_CRCtl_swClk_en(r16)               _BFGET_(r16, 1, 1)
    #define   SET16ClkRstBiu_CRCtl_swClk_en(r16,v)             _BFSET_(r16, 1, 1,v)

    #define   GET32ClkRstBiu_CRCtl_dyCG_en(r32)                _BFGET_(r32, 2, 2)
    #define   SET32ClkRstBiu_CRCtl_dyCG_en(r32,v)              _BFSET_(r32, 2, 2,v)
    #define   GET16ClkRstBiu_CRCtl_dyCG_en(r16)                _BFGET_(r16, 2, 2)
    #define   SET16ClkRstBiu_CRCtl_dyCG_en(r16,v)              _BFSET_(r16, 2, 2,v)

    #define     w32ClkRstBiu_CRCtl                             {\
            UNSG32 uCRCtl_rst                                  :  1;\
            UNSG32 uCRCtl_swClk_en                             :  1;\
            UNSG32 uCRCtl_dyCG_en                              :  1;\
            UNSG32 RSVDx0_b3                                   : 29;\
          }
    union { UNSG32 u32ClkRstBiu_CRCtl;
            struct w32ClkRstBiu_CRCtl;
          };
    ///////////////////////////////////////////////////////////
    } SIE_ClkRstBiu;

    typedef union  T32ClkRstBiu_CRCtl
          { UNSG32 u32;
            struct w32ClkRstBiu_CRCtl;
                 } T32ClkRstBiu_CRCtl;
    ///////////////////////////////////////////////////////////

    typedef union  TClkRstBiu_CRCtl
          { UNSG32 u32[1];
            struct {
            struct w32ClkRstBiu_CRCtl;
                   };
                 } TClkRstBiu_CRCtl;

    ///////////////////////////////////////////////////////////
     SIGN32 ClkRstBiu_drvrd(SIE_ClkRstBiu *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 ClkRstBiu_drvwr(SIE_ClkRstBiu *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void ClkRstBiu_reset(SIE_ClkRstBiu *p);
     SIGN32 ClkRstBiu_cmp  (SIE_ClkRstBiu *p, SIE_ClkRstBiu *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define ClkRstBiu_check(p,pie,pfx,hLOG) ClkRstBiu_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define ClkRstBiu_print(p,    pfx,hLOG) ClkRstBiu_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: ClkRstBiu
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE CacheCFG                                 (4,4)
///     ###
///     * On-the-fly messag to configure vCache.
///     * [00:31]
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 32 val                       
///                                    ###
///                                    * 32b configuration data
///                                    * [32:63]
///                                    ###
///     @ 0x00004                      (P)
///               %unsigned 24 ptr                       
///                                    ###
///                                    * Configuration 32b word-address:
///                                    * equivalent as AHB programming byte address b[23:0]
///                                    ###
///               %unsigned 2  padding                   
///                                    ###
///                                    * Don't care for vCache configuration messages
///                                    ###
///               %unsigned 6  op                        
///                                    : CFG                      0x3F
///                                                 ###
///                                                 * vCache configuration mesage
///                                                 * End of CacheCFG
///                                                 ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_CacheCFG
#define h_CacheCFG (){}

    #define     BA_CacheCFG_val                                0x0000
    #define     B16CacheCFG_val                                0x0000
    #define   LSb32CacheCFG_val                                   0
    #define   LSb16CacheCFG_val                                   0
    #define       bCacheCFG_val                                32
    #define   MSK32CacheCFG_val                                   0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    #define     BA_CacheCFG_ptr                                0x0004
    #define     B16CacheCFG_ptr                                0x0004
    #define   LSb32CacheCFG_ptr                                   0
    #define   LSb16CacheCFG_ptr                                   0
    #define       bCacheCFG_ptr                                24
    #define   MSK32CacheCFG_ptr                                   0x00FFFFFF

    #define     BA_CacheCFG_padding                            0x0007
    #define     B16CacheCFG_padding                            0x0006
    #define   LSb32CacheCFG_padding                               24
    #define   LSb16CacheCFG_padding                               8
    #define       bCacheCFG_padding                            2
    #define   MSK32CacheCFG_padding                               0x03000000

    #define     BA_CacheCFG_op                                 0x0007
    #define     B16CacheCFG_op                                 0x0006
    #define   LSb32CacheCFG_op                                    26
    #define   LSb16CacheCFG_op                                    10
    #define       bCacheCFG_op                                 6
    #define   MSK32CacheCFG_op                                    0xFC000000
    #define        CacheCFG_op_CFG                                          0x3F
    ///////////////////////////////////////////////////////////

    typedef struct SIE_CacheCFG {
    ///////////////////////////////////////////////////////////
    #define   GET32CacheCFG_val(r32)                           _BFGET_(r32,31, 0)
    #define   SET32CacheCFG_val(r32,v)                         _BFSET_(r32,31, 0,v)

            UNSG32 u_val                                       : 32;
    ///////////////////////////////////////////////////////////
    #define   GET32CacheCFG_ptr(r32)                           _BFGET_(r32,23, 0)
    #define   SET32CacheCFG_ptr(r32,v)                         _BFSET_(r32,23, 0,v)

    #define   GET32CacheCFG_padding(r32)                       _BFGET_(r32,25,24)
    #define   SET32CacheCFG_padding(r32,v)                     _BFSET_(r32,25,24,v)
    #define   GET16CacheCFG_padding(r16)                       _BFGET_(r16, 9, 8)
    #define   SET16CacheCFG_padding(r16,v)                     _BFSET_(r16, 9, 8,v)

    #define   GET32CacheCFG_op(r32)                            _BFGET_(r32,31,26)
    #define   SET32CacheCFG_op(r32,v)                          _BFSET_(r32,31,26,v)
    #define   GET16CacheCFG_op(r16)                            _BFGET_(r16,15,10)
    #define   SET16CacheCFG_op(r16,v)                          _BFSET_(r16,15,10,v)

            UNSG32 u_ptr                                       : 24;
            UNSG32 u_padding                                   :  2;
            UNSG32 u_op                                        :  6;
    ///////////////////////////////////////////////////////////
    } SIE_CacheCFG;

    ///////////////////////////////////////////////////////////
     SIGN32 CacheCFG_drvrd(SIE_CacheCFG *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 CacheCFG_drvwr(SIE_CacheCFG *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void CacheCFG_reset(SIE_CacheCFG *p);
     SIGN32 CacheCFG_cmp  (SIE_CacheCFG *p, SIE_CacheCFG *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define CacheCFG_check(p,pie,pfx,hLOG) CacheCFG_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define CacheCFG_print(p,    pfx,hLOG) CacheCFG_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: CacheCFG
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE TAG_ADDR                                 (4,4)
///     ###
///     * Tag ram address format
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000 val                  (RW)
///               %unsigned 2  way                       
///               %unsigned 2  xtile_l                   
///               %unsigned 3  ytile_l                   
///               %unsigned 1  uv                        
///               %%        24         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:       8b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_TAG_ADDR
#define h_TAG_ADDR (){}

    #define     RA_TAG_ADDR_val                                0x0000

    #define     BA_TAG_ADDR_val_way                            0x0000
    #define     B16TAG_ADDR_val_way                            0x0000
    #define   LSb32TAG_ADDR_val_way                               0
    #define   LSb16TAG_ADDR_val_way                               0
    #define       bTAG_ADDR_val_way                            2
    #define   MSK32TAG_ADDR_val_way                               0x00000003

    #define     BA_TAG_ADDR_val_xtile_l                        0x0000
    #define     B16TAG_ADDR_val_xtile_l                        0x0000
    #define   LSb32TAG_ADDR_val_xtile_l                           2
    #define   LSb16TAG_ADDR_val_xtile_l                           2
    #define       bTAG_ADDR_val_xtile_l                        2
    #define   MSK32TAG_ADDR_val_xtile_l                           0x0000000C

    #define     BA_TAG_ADDR_val_ytile_l                        0x0000
    #define     B16TAG_ADDR_val_ytile_l                        0x0000
    #define   LSb32TAG_ADDR_val_ytile_l                           4
    #define   LSb16TAG_ADDR_val_ytile_l                           4
    #define       bTAG_ADDR_val_ytile_l                        3
    #define   MSK32TAG_ADDR_val_ytile_l                           0x00000070

    #define     BA_TAG_ADDR_val_uv                             0x0000
    #define     B16TAG_ADDR_val_uv                             0x0000
    #define   LSb32TAG_ADDR_val_uv                                7
    #define   LSb16TAG_ADDR_val_uv                                7
    #define       bTAG_ADDR_val_uv                             1
    #define   MSK32TAG_ADDR_val_uv                                0x00000080
    ///////////////////////////////////////////////////////////

    typedef struct SIE_TAG_ADDR {
    ///////////////////////////////////////////////////////////
    #define   GET32TAG_ADDR_val_way(r32)                       _BFGET_(r32, 1, 0)
    #define   SET32TAG_ADDR_val_way(r32,v)                     _BFSET_(r32, 1, 0,v)
    #define   GET16TAG_ADDR_val_way(r16)                       _BFGET_(r16, 1, 0)
    #define   SET16TAG_ADDR_val_way(r16,v)                     _BFSET_(r16, 1, 0,v)

    #define   GET32TAG_ADDR_val_xtile_l(r32)                   _BFGET_(r32, 3, 2)
    #define   SET32TAG_ADDR_val_xtile_l(r32,v)                 _BFSET_(r32, 3, 2,v)
    #define   GET16TAG_ADDR_val_xtile_l(r16)                   _BFGET_(r16, 3, 2)
    #define   SET16TAG_ADDR_val_xtile_l(r16,v)                 _BFSET_(r16, 3, 2,v)

    #define   GET32TAG_ADDR_val_ytile_l(r32)                   _BFGET_(r32, 6, 4)
    #define   SET32TAG_ADDR_val_ytile_l(r32,v)                 _BFSET_(r32, 6, 4,v)
    #define   GET16TAG_ADDR_val_ytile_l(r16)                   _BFGET_(r16, 6, 4)
    #define   SET16TAG_ADDR_val_ytile_l(r16,v)                 _BFSET_(r16, 6, 4,v)

    #define   GET32TAG_ADDR_val_uv(r32)                        _BFGET_(r32, 7, 7)
    #define   SET32TAG_ADDR_val_uv(r32,v)                      _BFSET_(r32, 7, 7,v)
    #define   GET16TAG_ADDR_val_uv(r16)                        _BFGET_(r16, 7, 7)
    #define   SET16TAG_ADDR_val_uv(r16,v)                      _BFSET_(r16, 7, 7,v)

    #define     w32TAG_ADDR_val                                {\
            UNSG32 uval_way                                    :  2;\
            UNSG32 uval_xtile_l                                :  2;\
            UNSG32 uval_ytile_l                                :  3;\
            UNSG32 uval_uv                                     :  1;\
            UNSG32 RSVDx0_b8                                   : 24;\
          }
    union { UNSG32 u32TAG_ADDR_val;
            struct w32TAG_ADDR_val;
          };
    ///////////////////////////////////////////////////////////
    } SIE_TAG_ADDR;

    typedef union  T32TAG_ADDR_val
          { UNSG32 u32;
            struct w32TAG_ADDR_val;
                 } T32TAG_ADDR_val;
    ///////////////////////////////////////////////////////////

    typedef union  TTAG_ADDR_val
          { UNSG32 u32[1];
            struct {
            struct w32TAG_ADDR_val;
                   };
                 } TTAG_ADDR_val;

    ///////////////////////////////////////////////////////////
     SIGN32 TAG_ADDR_drvrd(SIE_TAG_ADDR *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 TAG_ADDR_drvwr(SIE_TAG_ADDR *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void TAG_ADDR_reset(SIE_TAG_ADDR *p);
     SIGN32 TAG_ADDR_cmp  (SIE_TAG_ADDR *p, SIE_TAG_ADDR *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define TAG_ADDR_check(p,pie,pfx,hLOG) TAG_ADDR_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define TAG_ADDR_print(p,    pfx,hLOG) TAG_ADDR_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: TAG_ADDR
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE TILE_CMD                                 (4,4)
///     ###
///     * TileCmdQ format
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000 entry                (RW)
///               %unsigned 2  way                       
///               %unsigned 2  xtile_l                   
///               %unsigned 3  ytile_l                   
///               %unsigned 1  uv                        
///               %unsigned 1  xtile_h                   
///               %unsigned 3  ytile_h                   
///               %unsigned 1  cache_hit                 
///               %unsigned 1  out_region                
///                                    ###
///                                    * Extra tile padding for DRAM burst alignment
///                                    ###
///               %unsigned 1  last_cmd                  
///               %%        17         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      15b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_TILE_CMD
#define h_TILE_CMD (){}

    #define     RA_TILE_CMD_entry                              0x0000

    #define     BA_TILE_CMD_entry_way                          0x0000
    #define     B16TILE_CMD_entry_way                          0x0000
    #define   LSb32TILE_CMD_entry_way                             0
    #define   LSb16TILE_CMD_entry_way                             0
    #define       bTILE_CMD_entry_way                          2
    #define   MSK32TILE_CMD_entry_way                             0x00000003

    #define     BA_TILE_CMD_entry_xtile_l                      0x0000
    #define     B16TILE_CMD_entry_xtile_l                      0x0000
    #define   LSb32TILE_CMD_entry_xtile_l                         2
    #define   LSb16TILE_CMD_entry_xtile_l                         2
    #define       bTILE_CMD_entry_xtile_l                      2
    #define   MSK32TILE_CMD_entry_xtile_l                         0x0000000C

    #define     BA_TILE_CMD_entry_ytile_l                      0x0000
    #define     B16TILE_CMD_entry_ytile_l                      0x0000
    #define   LSb32TILE_CMD_entry_ytile_l                         4
    #define   LSb16TILE_CMD_entry_ytile_l                         4
    #define       bTILE_CMD_entry_ytile_l                      3
    #define   MSK32TILE_CMD_entry_ytile_l                         0x00000070

    #define     BA_TILE_CMD_entry_uv                           0x0000
    #define     B16TILE_CMD_entry_uv                           0x0000
    #define   LSb32TILE_CMD_entry_uv                              7
    #define   LSb16TILE_CMD_entry_uv                              7
    #define       bTILE_CMD_entry_uv                           1
    #define   MSK32TILE_CMD_entry_uv                              0x00000080

    #define     BA_TILE_CMD_entry_xtile_h                      0x0001
    #define     B16TILE_CMD_entry_xtile_h                      0x0000
    #define   LSb32TILE_CMD_entry_xtile_h                         8
    #define   LSb16TILE_CMD_entry_xtile_h                         8
    #define       bTILE_CMD_entry_xtile_h                      1
    #define   MSK32TILE_CMD_entry_xtile_h                         0x00000100

    #define     BA_TILE_CMD_entry_ytile_h                      0x0001
    #define     B16TILE_CMD_entry_ytile_h                      0x0000
    #define   LSb32TILE_CMD_entry_ytile_h                         9
    #define   LSb16TILE_CMD_entry_ytile_h                         9
    #define       bTILE_CMD_entry_ytile_h                      3
    #define   MSK32TILE_CMD_entry_ytile_h                         0x00000E00

    #define     BA_TILE_CMD_entry_cache_hit                    0x0001
    #define     B16TILE_CMD_entry_cache_hit                    0x0000
    #define   LSb32TILE_CMD_entry_cache_hit                       12
    #define   LSb16TILE_CMD_entry_cache_hit                       12
    #define       bTILE_CMD_entry_cache_hit                    1
    #define   MSK32TILE_CMD_entry_cache_hit                       0x00001000

    #define     BA_TILE_CMD_entry_out_region                   0x0001
    #define     B16TILE_CMD_entry_out_region                   0x0000
    #define   LSb32TILE_CMD_entry_out_region                      13
    #define   LSb16TILE_CMD_entry_out_region                      13
    #define       bTILE_CMD_entry_out_region                   1
    #define   MSK32TILE_CMD_entry_out_region                      0x00002000

    #define     BA_TILE_CMD_entry_last_cmd                     0x0001
    #define     B16TILE_CMD_entry_last_cmd                     0x0000
    #define   LSb32TILE_CMD_entry_last_cmd                        14
    #define   LSb16TILE_CMD_entry_last_cmd                        14
    #define       bTILE_CMD_entry_last_cmd                     1
    #define   MSK32TILE_CMD_entry_last_cmd                        0x00004000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_TILE_CMD {
    ///////////////////////////////////////////////////////////
    #define   GET32TILE_CMD_entry_way(r32)                     _BFGET_(r32, 1, 0)
    #define   SET32TILE_CMD_entry_way(r32,v)                   _BFSET_(r32, 1, 0,v)
    #define   GET16TILE_CMD_entry_way(r16)                     _BFGET_(r16, 1, 0)
    #define   SET16TILE_CMD_entry_way(r16,v)                   _BFSET_(r16, 1, 0,v)

    #define   GET32TILE_CMD_entry_xtile_l(r32)                 _BFGET_(r32, 3, 2)
    #define   SET32TILE_CMD_entry_xtile_l(r32,v)               _BFSET_(r32, 3, 2,v)
    #define   GET16TILE_CMD_entry_xtile_l(r16)                 _BFGET_(r16, 3, 2)
    #define   SET16TILE_CMD_entry_xtile_l(r16,v)               _BFSET_(r16, 3, 2,v)

    #define   GET32TILE_CMD_entry_ytile_l(r32)                 _BFGET_(r32, 6, 4)
    #define   SET32TILE_CMD_entry_ytile_l(r32,v)               _BFSET_(r32, 6, 4,v)
    #define   GET16TILE_CMD_entry_ytile_l(r16)                 _BFGET_(r16, 6, 4)
    #define   SET16TILE_CMD_entry_ytile_l(r16,v)               _BFSET_(r16, 6, 4,v)

    #define   GET32TILE_CMD_entry_uv(r32)                      _BFGET_(r32, 7, 7)
    #define   SET32TILE_CMD_entry_uv(r32,v)                    _BFSET_(r32, 7, 7,v)
    #define   GET16TILE_CMD_entry_uv(r16)                      _BFGET_(r16, 7, 7)
    #define   SET16TILE_CMD_entry_uv(r16,v)                    _BFSET_(r16, 7, 7,v)

    #define   GET32TILE_CMD_entry_xtile_h(r32)                 _BFGET_(r32, 8, 8)
    #define   SET32TILE_CMD_entry_xtile_h(r32,v)               _BFSET_(r32, 8, 8,v)
    #define   GET16TILE_CMD_entry_xtile_h(r16)                 _BFGET_(r16, 8, 8)
    #define   SET16TILE_CMD_entry_xtile_h(r16,v)               _BFSET_(r16, 8, 8,v)

    #define   GET32TILE_CMD_entry_ytile_h(r32)                 _BFGET_(r32,11, 9)
    #define   SET32TILE_CMD_entry_ytile_h(r32,v)               _BFSET_(r32,11, 9,v)
    #define   GET16TILE_CMD_entry_ytile_h(r16)                 _BFGET_(r16,11, 9)
    #define   SET16TILE_CMD_entry_ytile_h(r16,v)               _BFSET_(r16,11, 9,v)

    #define   GET32TILE_CMD_entry_cache_hit(r32)               _BFGET_(r32,12,12)
    #define   SET32TILE_CMD_entry_cache_hit(r32,v)             _BFSET_(r32,12,12,v)
    #define   GET16TILE_CMD_entry_cache_hit(r16)               _BFGET_(r16,12,12)
    #define   SET16TILE_CMD_entry_cache_hit(r16,v)             _BFSET_(r16,12,12,v)

    #define   GET32TILE_CMD_entry_out_region(r32)              _BFGET_(r32,13,13)
    #define   SET32TILE_CMD_entry_out_region(r32,v)            _BFSET_(r32,13,13,v)
    #define   GET16TILE_CMD_entry_out_region(r16)              _BFGET_(r16,13,13)
    #define   SET16TILE_CMD_entry_out_region(r16,v)            _BFSET_(r16,13,13,v)

    #define   GET32TILE_CMD_entry_last_cmd(r32)                _BFGET_(r32,14,14)
    #define   SET32TILE_CMD_entry_last_cmd(r32,v)              _BFSET_(r32,14,14,v)
    #define   GET16TILE_CMD_entry_last_cmd(r16)                _BFGET_(r16,14,14)
    #define   SET16TILE_CMD_entry_last_cmd(r16,v)              _BFSET_(r16,14,14,v)

    #define     w32TILE_CMD_entry                              {\
            UNSG32 uentry_way                                  :  2;\
            UNSG32 uentry_xtile_l                              :  2;\
            UNSG32 uentry_ytile_l                              :  3;\
            UNSG32 uentry_uv                                   :  1;\
            UNSG32 uentry_xtile_h                              :  1;\
            UNSG32 uentry_ytile_h                              :  3;\
            UNSG32 uentry_cache_hit                            :  1;\
            UNSG32 uentry_out_region                           :  1;\
            UNSG32 uentry_last_cmd                             :  1;\
            UNSG32 RSVDx0_b15                                  : 17;\
          }
    union { UNSG32 u32TILE_CMD_entry;
            struct w32TILE_CMD_entry;
          };
    ///////////////////////////////////////////////////////////
    } SIE_TILE_CMD;

    typedef union  T32TILE_CMD_entry
          { UNSG32 u32;
            struct w32TILE_CMD_entry;
                 } T32TILE_CMD_entry;
    ///////////////////////////////////////////////////////////

    typedef union  TTILE_CMD_entry
          { UNSG32 u32[1];
            struct {
            struct w32TILE_CMD_entry;
                   };
                 } TTILE_CMD_entry;

    ///////////////////////////////////////////////////////////
     SIGN32 TILE_CMD_drvrd(SIE_TILE_CMD *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 TILE_CMD_drvwr(SIE_TILE_CMD *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void TILE_CMD_reset(SIE_TILE_CMD *p);
     SIGN32 TILE_CMD_cmp  (SIE_TILE_CMD *p, SIE_TILE_CMD *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define TILE_CMD_check(p,pie,pfx,hLOG) TILE_CMD_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define TILE_CMD_print(p,    pfx,hLOG) TILE_CMD_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: TILE_CMD
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE TAG                                      (4,4)
///     ###
///     * TAG sram entry, 20-bit wide with msb as dirty bit, support pict size up to 4Kx4K
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000 entry                (RW)
///               %unsigned 7  xtile                     0x0
///               %unsigned 7  ytile                     0x0
///               %unsigned 5  rbid                      0x0
///               %unsigned 1  valid                     0x0
///               %%        12         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      20b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_TAG
#define h_TAG (){}

    #define     RA_TAG_entry                                   0x0000

    #define     BA_TAG_entry_xtile                             0x0000
    #define     B16TAG_entry_xtile                             0x0000
    #define   LSb32TAG_entry_xtile                                0
    #define   LSb16TAG_entry_xtile                                0
    #define       bTAG_entry_xtile                             7
    #define   MSK32TAG_entry_xtile                                0x0000007F

    #define     BA_TAG_entry_ytile                             0x0000
    #define     B16TAG_entry_ytile                             0x0000
    #define   LSb32TAG_entry_ytile                                7
    #define   LSb16TAG_entry_ytile                                7
    #define       bTAG_entry_ytile                             7
    #define   MSK32TAG_entry_ytile                                0x00003F80

    #define     BA_TAG_entry_rbid                              0x0001
    #define     B16TAG_entry_rbid                              0x0000
    #define   LSb32TAG_entry_rbid                                 14
    #define   LSb16TAG_entry_rbid                                 14
    #define       bTAG_entry_rbid                              5
    #define   MSK32TAG_entry_rbid                                 0x0007C000

    #define     BA_TAG_entry_valid                             0x0002
    #define     B16TAG_entry_valid                             0x0002
    #define   LSb32TAG_entry_valid                                19
    #define   LSb16TAG_entry_valid                                3
    #define       bTAG_entry_valid                             1
    #define   MSK32TAG_entry_valid                                0x00080000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_TAG {
    ///////////////////////////////////////////////////////////
    #define   GET32TAG_entry_xtile(r32)                        _BFGET_(r32, 6, 0)
    #define   SET32TAG_entry_xtile(r32,v)                      _BFSET_(r32, 6, 0,v)
    #define   GET16TAG_entry_xtile(r16)                        _BFGET_(r16, 6, 0)
    #define   SET16TAG_entry_xtile(r16,v)                      _BFSET_(r16, 6, 0,v)

    #define   GET32TAG_entry_ytile(r32)                        _BFGET_(r32,13, 7)
    #define   SET32TAG_entry_ytile(r32,v)                      _BFSET_(r32,13, 7,v)
    #define   GET16TAG_entry_ytile(r16)                        _BFGET_(r16,13, 7)
    #define   SET16TAG_entry_ytile(r16,v)                      _BFSET_(r16,13, 7,v)

    #define   GET32TAG_entry_rbid(r32)                         _BFGET_(r32,18,14)
    #define   SET32TAG_entry_rbid(r32,v)                       _BFSET_(r32,18,14,v)

    #define   GET32TAG_entry_valid(r32)                        _BFGET_(r32,19,19)
    #define   SET32TAG_entry_valid(r32,v)                      _BFSET_(r32,19,19,v)
    #define   GET16TAG_entry_valid(r16)                        _BFGET_(r16, 3, 3)
    #define   SET16TAG_entry_valid(r16,v)                      _BFSET_(r16, 3, 3,v)

    #define     w32TAG_entry                                   {\
            UNSG32 uentry_xtile                                :  7;\
            UNSG32 uentry_ytile                                :  7;\
            UNSG32 uentry_rbid                                 :  5;\
            UNSG32 uentry_valid                                :  1;\
            UNSG32 RSVDx0_b20                                  : 12;\
          }
    union { UNSG32 u32TAG_entry;
            struct w32TAG_entry;
          };
    ///////////////////////////////////////////////////////////
    } SIE_TAG;

    typedef union  T32TAG_entry
          { UNSG32 u32;
            struct w32TAG_entry;
                 } T32TAG_entry;
    ///////////////////////////////////////////////////////////

    typedef union  TTAG_entry
          { UNSG32 u32[1];
            struct {
            struct w32TAG_entry;
                   };
                 } TTAG_entry;

    ///////////////////////////////////////////////////////////
     SIGN32 TAG_drvrd(SIE_TAG *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 TAG_drvwr(SIE_TAG *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void TAG_reset(SIE_TAG *p);
     SIGN32 TAG_cmp  (SIE_TAG *p, SIE_TAG *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define TAG_check(p,pie,pfx,hLOG) TAG_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define TAG_print(p,    pfx,hLOG) TAG_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: TAG
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE TAG_SRAM                                 (4,4)
///     ###
///     * TAG sram array
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 word                 
///               $TAG                 word              REG     [192]
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     768B, bits:    3840b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_TAG_SRAM
#define h_TAG_SRAM (){}

    #define     RA_TAG_SRAM_word                               0x0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_TAG_SRAM {
    ///////////////////////////////////////////////////////////
              SIE_TAG                                          ie_word[192];
    ///////////////////////////////////////////////////////////
    } SIE_TAG_SRAM;

    ///////////////////////////////////////////////////////////
     SIGN32 TAG_SRAM_drvrd(SIE_TAG_SRAM *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 TAG_SRAM_drvwr(SIE_TAG_SRAM *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void TAG_SRAM_reset(SIE_TAG_SRAM *p);
     SIGN32 TAG_SRAM_cmp  (SIE_TAG_SRAM *p, SIE_TAG_SRAM *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define TAG_SRAM_check(p,pie,pfx,hLOG) TAG_SRAM_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define TAG_SRAM_print(p,    pfx,hLOG) TAG_SRAM_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: TAG_SRAM
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE TRANS_DESC                               (4,4)
///     ###
///     * Transfer Descriptor Format Definition
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000 entry                (P)
///               %unsigned 4  stride                    0x0
///                                    ###
///                                    * Address stride of the output refB; 4x4 block based
///                                    ###
///               %unsigned 1  sem_chk                   0x0
///                                    ###
///                                    * 0: bypass semaphore check; 1: semaphore check needed
///                                    ###
///               %unsigned 1  sem_upd                   0x0
///                                    ###
///                                    * 0: bypass semaphore update; 1: semaphore update needed
///                                    ###
///               %unsigned 16 addr                      0x0
///                                    ###
///                                    * Address offset of the output refB; 4x4 block based,
///                                    * supporting up to 2K of 128-bit words
///                                    ###
///               %unsigned 6  sem_id                    0x13
///                                    ###
///                                    * Semaphore ID for the specified semaphore operation
///                                    * So far only used for encoder
///                                    ###
///               %%        4          # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      28b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_TRANS_DESC
#define h_TRANS_DESC (){}

    #define     RA_TRANS_DESC_entry                            0x0000

    #define     BA_TRANS_DESC_entry_stride                     0x0000
    #define     B16TRANS_DESC_entry_stride                     0x0000
    #define   LSb32TRANS_DESC_entry_stride                        0
    #define   LSb16TRANS_DESC_entry_stride                        0
    #define       bTRANS_DESC_entry_stride                     4
    #define   MSK32TRANS_DESC_entry_stride                        0x0000000F

    #define     BA_TRANS_DESC_entry_sem_chk                    0x0000
    #define     B16TRANS_DESC_entry_sem_chk                    0x0000
    #define   LSb32TRANS_DESC_entry_sem_chk                       4
    #define   LSb16TRANS_DESC_entry_sem_chk                       4
    #define       bTRANS_DESC_entry_sem_chk                    1
    #define   MSK32TRANS_DESC_entry_sem_chk                       0x00000010

    #define     BA_TRANS_DESC_entry_sem_upd                    0x0000
    #define     B16TRANS_DESC_entry_sem_upd                    0x0000
    #define   LSb32TRANS_DESC_entry_sem_upd                       5
    #define   LSb16TRANS_DESC_entry_sem_upd                       5
    #define       bTRANS_DESC_entry_sem_upd                    1
    #define   MSK32TRANS_DESC_entry_sem_upd                       0x00000020

    #define     BA_TRANS_DESC_entry_addr                       0x0000
    #define     B16TRANS_DESC_entry_addr                       0x0000
    #define   LSb32TRANS_DESC_entry_addr                          6
    #define   LSb16TRANS_DESC_entry_addr                          6
    #define       bTRANS_DESC_entry_addr                       16
    #define   MSK32TRANS_DESC_entry_addr                          0x003FFFC0

    #define     BA_TRANS_DESC_entry_sem_id                     0x0002
    #define     B16TRANS_DESC_entry_sem_id                     0x0002
    #define   LSb32TRANS_DESC_entry_sem_id                        22
    #define   LSb16TRANS_DESC_entry_sem_id                        6
    #define       bTRANS_DESC_entry_sem_id                     6
    #define   MSK32TRANS_DESC_entry_sem_id                        0x0FC00000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_TRANS_DESC {
    ///////////////////////////////////////////////////////////
    #define   GET32TRANS_DESC_entry_stride(r32)                _BFGET_(r32, 3, 0)
    #define   SET32TRANS_DESC_entry_stride(r32,v)              _BFSET_(r32, 3, 0,v)
    #define   GET16TRANS_DESC_entry_stride(r16)                _BFGET_(r16, 3, 0)
    #define   SET16TRANS_DESC_entry_stride(r16,v)              _BFSET_(r16, 3, 0,v)

    #define   GET32TRANS_DESC_entry_sem_chk(r32)               _BFGET_(r32, 4, 4)
    #define   SET32TRANS_DESC_entry_sem_chk(r32,v)             _BFSET_(r32, 4, 4,v)
    #define   GET16TRANS_DESC_entry_sem_chk(r16)               _BFGET_(r16, 4, 4)
    #define   SET16TRANS_DESC_entry_sem_chk(r16,v)             _BFSET_(r16, 4, 4,v)

    #define   GET32TRANS_DESC_entry_sem_upd(r32)               _BFGET_(r32, 5, 5)
    #define   SET32TRANS_DESC_entry_sem_upd(r32,v)             _BFSET_(r32, 5, 5,v)
    #define   GET16TRANS_DESC_entry_sem_upd(r16)               _BFGET_(r16, 5, 5)
    #define   SET16TRANS_DESC_entry_sem_upd(r16,v)             _BFSET_(r16, 5, 5,v)

    #define   GET32TRANS_DESC_entry_addr(r32)                  _BFGET_(r32,21, 6)
    #define   SET32TRANS_DESC_entry_addr(r32,v)                _BFSET_(r32,21, 6,v)

    #define   GET32TRANS_DESC_entry_sem_id(r32)                _BFGET_(r32,27,22)
    #define   SET32TRANS_DESC_entry_sem_id(r32,v)              _BFSET_(r32,27,22,v)
    #define   GET16TRANS_DESC_entry_sem_id(r16)                _BFGET_(r16,11, 6)
    #define   SET16TRANS_DESC_entry_sem_id(r16,v)              _BFSET_(r16,11, 6,v)

    #define     w32TRANS_DESC_entry                            {\
            UNSG32 uentry_stride                               :  4;\
            UNSG32 uentry_sem_chk                              :  1;\
            UNSG32 uentry_sem_upd                              :  1;\
            UNSG32 uentry_addr                                 : 16;\
            UNSG32 uentry_sem_id                               :  6;\
            UNSG32 RSVDx0_b28                                  :  4;\
          }
    union { UNSG32 u32TRANS_DESC_entry;
            struct w32TRANS_DESC_entry;
          };
    ///////////////////////////////////////////////////////////
    } SIE_TRANS_DESC;

    typedef union  T32TRANS_DESC_entry
          { UNSG32 u32;
            struct w32TRANS_DESC_entry;
                 } T32TRANS_DESC_entry;
    ///////////////////////////////////////////////////////////

    typedef union  TTRANS_DESC_entry
          { UNSG32 u32[1];
            struct {
            struct w32TRANS_DESC_entry;
                   };
                 } TTRANS_DESC_entry;

    ///////////////////////////////////////////////////////////
     SIGN32 TRANS_DESC_drvrd(SIE_TRANS_DESC *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 TRANS_DESC_drvwr(SIE_TRANS_DESC *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void TRANS_DESC_reset(SIE_TRANS_DESC *p);
     SIGN32 TRANS_DESC_cmp  (SIE_TRANS_DESC *p, SIE_TRANS_DESC *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define TRANS_DESC_check(p,pie,pfx,hLOG) TRANS_DESC_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define TRANS_DESC_print(p,    pfx,hLOG) TRANS_DESC_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: TRANS_DESC
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE FRAME_DESC              biu              (4,4)
///     ###
///     * Reference frame descriptor format definition
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000 entry                (P)
///               %unsigned 2  fid                       0x0
///                                    ###
///                                    * 0/1: cache-able; fid[0] to be used for way calculation
///                                    * 2: frame not cache-able
///                                    ###
///               %unsigned 1  intlRef                   0x0
///                                    ###
///                                    * 0: reference picture is progressive;
///                                    * 1: reference picture is interlaced
///                                    ###
///               %unsigned 1  weavedRef                 0x0
///                                    ###
///                                    * 0: raster scan reference picture
///                                    * 1: weaved reference picture
///                                    ###
///               %unsigned 1  rangeRed                  0x0
///                                    ###
///                                    * VC-1 range reduction setting for this reference picture
///                                    ###
///               %unsigned 5  rsvd                      0x0
///                                    ###
///                                    * Reserved for future use
///                                    ###
///               %unsigned 22 addr                      0x0
///                                    ###
///                                    * bits [31:10] of frame buffer base address.
///                                    * Note that bit [11:10] should be 0. (Frame buffer base address should be aligned to 4K bytes.)
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      32b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_FRAME_DESC
#define h_FRAME_DESC (){}

    #define     RA_FRAME_DESC_entry                            0x0000

    #define     BA_FRAME_DESC_entry_fid                        0x0000
    #define     B16FRAME_DESC_entry_fid                        0x0000
    #define   LSb32FRAME_DESC_entry_fid                           0
    #define   LSb16FRAME_DESC_entry_fid                           0
    #define       bFRAME_DESC_entry_fid                        2
    #define   MSK32FRAME_DESC_entry_fid                           0x00000003

    #define     BA_FRAME_DESC_entry_intlRef                    0x0000
    #define     B16FRAME_DESC_entry_intlRef                    0x0000
    #define   LSb32FRAME_DESC_entry_intlRef                       2
    #define   LSb16FRAME_DESC_entry_intlRef                       2
    #define       bFRAME_DESC_entry_intlRef                    1
    #define   MSK32FRAME_DESC_entry_intlRef                       0x00000004

    #define     BA_FRAME_DESC_entry_weavedRef                  0x0000
    #define     B16FRAME_DESC_entry_weavedRef                  0x0000
    #define   LSb32FRAME_DESC_entry_weavedRef                     3
    #define   LSb16FRAME_DESC_entry_weavedRef                     3
    #define       bFRAME_DESC_entry_weavedRef                  1
    #define   MSK32FRAME_DESC_entry_weavedRef                     0x00000008

    #define     BA_FRAME_DESC_entry_rangeRed                   0x0000
    #define     B16FRAME_DESC_entry_rangeRed                   0x0000
    #define   LSb32FRAME_DESC_entry_rangeRed                      4
    #define   LSb16FRAME_DESC_entry_rangeRed                      4
    #define       bFRAME_DESC_entry_rangeRed                   1
    #define   MSK32FRAME_DESC_entry_rangeRed                      0x00000010

    #define     BA_FRAME_DESC_entry_rsvd                       0x0000
    #define     B16FRAME_DESC_entry_rsvd                       0x0000
    #define   LSb32FRAME_DESC_entry_rsvd                          5
    #define   LSb16FRAME_DESC_entry_rsvd                          5
    #define       bFRAME_DESC_entry_rsvd                       5
    #define   MSK32FRAME_DESC_entry_rsvd                          0x000003E0

    #define     BA_FRAME_DESC_entry_addr                       0x0001
    #define     B16FRAME_DESC_entry_addr                       0x0000
    #define   LSb32FRAME_DESC_entry_addr                          10
    #define   LSb16FRAME_DESC_entry_addr                          10
    #define       bFRAME_DESC_entry_addr                       22
    #define   MSK32FRAME_DESC_entry_addr                          0xFFFFFC00
    ///////////////////////////////////////////////////////////

    typedef struct SIE_FRAME_DESC {
    ///////////////////////////////////////////////////////////
    #define   GET32FRAME_DESC_entry_fid(r32)                   _BFGET_(r32, 1, 0)
    #define   SET32FRAME_DESC_entry_fid(r32,v)                 _BFSET_(r32, 1, 0,v)
    #define   GET16FRAME_DESC_entry_fid(r16)                   _BFGET_(r16, 1, 0)
    #define   SET16FRAME_DESC_entry_fid(r16,v)                 _BFSET_(r16, 1, 0,v)

    #define   GET32FRAME_DESC_entry_intlRef(r32)               _BFGET_(r32, 2, 2)
    #define   SET32FRAME_DESC_entry_intlRef(r32,v)             _BFSET_(r32, 2, 2,v)
    #define   GET16FRAME_DESC_entry_intlRef(r16)               _BFGET_(r16, 2, 2)
    #define   SET16FRAME_DESC_entry_intlRef(r16,v)             _BFSET_(r16, 2, 2,v)

    #define   GET32FRAME_DESC_entry_weavedRef(r32)             _BFGET_(r32, 3, 3)
    #define   SET32FRAME_DESC_entry_weavedRef(r32,v)           _BFSET_(r32, 3, 3,v)
    #define   GET16FRAME_DESC_entry_weavedRef(r16)             _BFGET_(r16, 3, 3)
    #define   SET16FRAME_DESC_entry_weavedRef(r16,v)           _BFSET_(r16, 3, 3,v)

    #define   GET32FRAME_DESC_entry_rangeRed(r32)              _BFGET_(r32, 4, 4)
    #define   SET32FRAME_DESC_entry_rangeRed(r32,v)            _BFSET_(r32, 4, 4,v)
    #define   GET16FRAME_DESC_entry_rangeRed(r16)              _BFGET_(r16, 4, 4)
    #define   SET16FRAME_DESC_entry_rangeRed(r16,v)            _BFSET_(r16, 4, 4,v)

    #define   GET32FRAME_DESC_entry_rsvd(r32)                  _BFGET_(r32, 9, 5)
    #define   SET32FRAME_DESC_entry_rsvd(r32,v)                _BFSET_(r32, 9, 5,v)
    #define   GET16FRAME_DESC_entry_rsvd(r16)                  _BFGET_(r16, 9, 5)
    #define   SET16FRAME_DESC_entry_rsvd(r16,v)                _BFSET_(r16, 9, 5,v)

    #define   GET32FRAME_DESC_entry_addr(r32)                  _BFGET_(r32,31,10)
    #define   SET32FRAME_DESC_entry_addr(r32,v)                _BFSET_(r32,31,10,v)

    #define     w32FRAME_DESC_entry                            {\
            UNSG32 uentry_fid                                  :  2;\
            UNSG32 uentry_intlRef                              :  1;\
            UNSG32 uentry_weavedRef                            :  1;\
            UNSG32 uentry_rangeRed                             :  1;\
            UNSG32 uentry_rsvd                                 :  5;\
            UNSG32 uentry_addr                                 : 22;\
          }
    union { UNSG32 u32FRAME_DESC_entry;
            struct w32FRAME_DESC_entry;
          };
    ///////////////////////////////////////////////////////////
    } SIE_FRAME_DESC;

    typedef union  T32FRAME_DESC_entry
          { UNSG32 u32;
            struct w32FRAME_DESC_entry;
                 } T32FRAME_DESC_entry;
    ///////////////////////////////////////////////////////////

    typedef union  TFRAME_DESC_entry
          { UNSG32 u32[1];
            struct {
            struct w32FRAME_DESC_entry;
                   };
                 } TFRAME_DESC_entry;

    ///////////////////////////////////////////////////////////
     SIGN32 FRAME_DESC_drvrd(SIE_FRAME_DESC *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 FRAME_DESC_drvwr(SIE_FRAME_DESC *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void FRAME_DESC_reset(SIE_FRAME_DESC *p);
     SIGN32 FRAME_DESC_cmp  (SIE_FRAME_DESC *p, SIE_FRAME_DESC *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define FRAME_DESC_check(p,pie,pfx,hLOG) FRAME_DESC_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define FRAME_DESC_print(p,    pfx,hLOG) FRAME_DESC_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: FRAME_DESC
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE PIX_LUT                                  (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 entry                (RW)
///               %unsigned 6  val                       0x0
///               %%        26         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:       6b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_PIX_LUT
#define h_PIX_LUT (){}

    #define     RA_PIX_LUT_entry                               0x0000

    #define     BA_PIX_LUT_entry_val                           0x0000
    #define     B16PIX_LUT_entry_val                           0x0000
    #define   LSb32PIX_LUT_entry_val                              0
    #define   LSb16PIX_LUT_entry_val                              0
    #define       bPIX_LUT_entry_val                           6
    #define   MSK32PIX_LUT_entry_val                              0x0000003F
    ///////////////////////////////////////////////////////////

    typedef struct SIE_PIX_LUT {
    ///////////////////////////////////////////////////////////
    #define   GET32PIX_LUT_entry_val(r32)                      _BFGET_(r32, 5, 0)
    #define   SET32PIX_LUT_entry_val(r32,v)                    _BFSET_(r32, 5, 0,v)
    #define   GET16PIX_LUT_entry_val(r16)                      _BFGET_(r16, 5, 0)
    #define   SET16PIX_LUT_entry_val(r16,v)                    _BFSET_(r16, 5, 0,v)

    #define     w32PIX_LUT_entry                               {\
            UNSG32 uentry_val                                  :  6;\
            UNSG32 RSVDx0_b6                                   : 26;\
          }
    union { UNSG32 u32PIX_LUT_entry;
            struct w32PIX_LUT_entry;
          };
    ///////////////////////////////////////////////////////////
    } SIE_PIX_LUT;

    typedef union  T32PIX_LUT_entry
          { UNSG32 u32;
            struct w32PIX_LUT_entry;
                 } T32PIX_LUT_entry;
    ///////////////////////////////////////////////////////////

    typedef union  TPIX_LUT_entry
          { UNSG32 u32[1];
            struct {
            struct w32PIX_LUT_entry;
                   };
                 } TPIX_LUT_entry;

    ///////////////////////////////////////////////////////////
     SIGN32 PIX_LUT_drvrd(SIE_PIX_LUT *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 PIX_LUT_drvwr(SIE_PIX_LUT *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void PIX_LUT_reset(SIE_PIX_LUT *p);
     SIGN32 PIX_LUT_cmp  (SIE_PIX_LUT *p, SIE_PIX_LUT *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define PIX_LUT_check(p,pie,pfx,hLOG) PIX_LUT_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define PIX_LUT_print(p,    pfx,hLOG) PIX_LUT_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: PIX_LUT
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE INTEN_PARAM                              (4,4)
///     ###
///     * VC-1 intensity parameters
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000 entry                (RW)
///               %unsigned 1  intensityOn               0x0
///               %signed   8  iScale                    0
///               %signed   10 iShift                    0
///               %%        13         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      19b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_INTEN_PARAM
#define h_INTEN_PARAM (){}

    #define     RA_INTEN_PARAM_entry                           0x0000

    #define     BA_INTEN_PARAM_entry_intensityOn               0x0000
    #define     B16INTEN_PARAM_entry_intensityOn               0x0000
    #define   LSb32INTEN_PARAM_entry_intensityOn                  0
    #define   LSb16INTEN_PARAM_entry_intensityOn                  0
    #define       bINTEN_PARAM_entry_intensityOn               1
    #define   MSK32INTEN_PARAM_entry_intensityOn                  0x00000001

    #define     BA_INTEN_PARAM_entry_iScale                    0x0000
    #define     B16INTEN_PARAM_entry_iScale                    0x0000
    #define   LSb32INTEN_PARAM_entry_iScale                       1
    #define   LSb16INTEN_PARAM_entry_iScale                       1
    #define       bINTEN_PARAM_entry_iScale                    8
    #define   MSK32INTEN_PARAM_entry_iScale                       0x000001FE

    #define     BA_INTEN_PARAM_entry_iShift                    0x0001
    #define     B16INTEN_PARAM_entry_iShift                    0x0000
    #define   LSb32INTEN_PARAM_entry_iShift                       9
    #define   LSb16INTEN_PARAM_entry_iShift                       9
    #define       bINTEN_PARAM_entry_iShift                    10
    #define   MSK32INTEN_PARAM_entry_iShift                       0x0007FE00
    ///////////////////////////////////////////////////////////

    typedef struct SIE_INTEN_PARAM {
    ///////////////////////////////////////////////////////////
    #define   GET32INTEN_PARAM_entry_intensityOn(r32)          _BFGET_(r32, 0, 0)
    #define   SET32INTEN_PARAM_entry_intensityOn(r32,v)        _BFSET_(r32, 0, 0,v)
    #define   GET16INTEN_PARAM_entry_intensityOn(r16)          _BFGET_(r16, 0, 0)
    #define   SET16INTEN_PARAM_entry_intensityOn(r16,v)        _BFSET_(r16, 0, 0,v)

    #define   GET32INTEN_PARAM_entry_iScale(r32)               _BFGET_(r32, 8, 1)
    #define   SET32INTEN_PARAM_entry_iScale(r32,v)             _BFSET_(r32, 8, 1,v)
    #define   GET16INTEN_PARAM_entry_iScale(r16)               _BFGET_(r16, 8, 1)
    #define   SET16INTEN_PARAM_entry_iScale(r16,v)             _BFSET_(r16, 8, 1,v)

    #define   GET32INTEN_PARAM_entry_iShift(r32)               _BFGET_(r32,18, 9)
    #define   SET32INTEN_PARAM_entry_iShift(r32,v)             _BFSET_(r32,18, 9,v)

    #define     w32INTEN_PARAM_entry                           {\
            UNSG32 uentry_intensityOn                          :  1;\
            UNSG32 sentry_iScale                               :  8;\
            UNSG32 sentry_iShift                               : 10;\
            UNSG32 RSVDx0_b19                                  : 13;\
          }
    union { UNSG32 u32INTEN_PARAM_entry;
            struct w32INTEN_PARAM_entry;
          };
    ///////////////////////////////////////////////////////////
    } SIE_INTEN_PARAM;

    typedef union  T32INTEN_PARAM_entry
          { UNSG32 u32;
            struct w32INTEN_PARAM_entry;
                 } T32INTEN_PARAM_entry;
    ///////////////////////////////////////////////////////////

    typedef union  TINTEN_PARAM_entry
          { UNSG32 u32[1];
            struct {
            struct w32INTEN_PARAM_entry;
                   };
                 } TINTEN_PARAM_entry;

    ///////////////////////////////////////////////////////////
     SIGN32 INTEN_PARAM_drvrd(SIE_INTEN_PARAM *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 INTEN_PARAM_drvwr(SIE_INTEN_PARAM *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void INTEN_PARAM_reset(SIE_INTEN_PARAM *p);
     SIGN32 INTEN_PARAM_cmp  (SIE_INTEN_PARAM *p, SIE_INTEN_PARAM *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define INTEN_PARAM_check(p,pie,pfx,hLOG) INTEN_PARAM_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define INTEN_PARAM_print(p,    pfx,hLOG) INTEN_PARAM_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: INTEN_PARAM
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE VC                      biu              (4,4)
///     ###
///     * Register Specification of vCache
///     ###
///     # # ----------------------------------------------------------
///               : TagSramBase        0x0
///                            ###
///                            * TagSram address base
///                            ###
///               : RegBase            0x1000
///                            ###
///                            * vCache register address base
///                            ###
///     @ 0x00000 TAG_SRAM             (P)
///     # 0x00000 tags                 
///               $TAG_SRAM            tags              MEM          
///                                    ###
///                                    * TAG SRAM, array of 192
///                                    ###
///     @ 0x00400                      (W-)
///     #         # Stuffing bytes...
///               %% 24576
///     @ 0x01000 CTRL                 (RW-)
///               ###
///               * vCache flow control
///               ###
///               %unsigned 1  stop                      0x0
///                                    ###
///                                    * Write 1 for vCache to stop message loading and start waiting for internal pipeline to end. Auto clear after vCache becomes idle, when vc_session_done is set to 1
///                                    ###
///               %unsigned 1  auto_resume               0x0
///                                    ###
///                                    * Write 1 to indicate that new session should auto resume after vc_session_done
///                                    ###
///               %unsigned 1  kickoff                   0x0
///                                    ###
///                                    * Write 1 to kickoff a new session (i.e. for vCache to start reading messages); self clear the next cycle. Always reads 0.
///                                    ###
///               %%        29         # Stuffing bits...
///     @ 0x01004 FORMAT               (P)
///               ###
///               * Current picture format
///               ###
///               %unsigned 3  picMode                   0x0
///                                    : h264                      0x0
///                                    : wmv                       0x1
///                                                 ###
///                                                 * VC-1 main profile
///                                                 ###
///                                    : mpg2                      0x2
///                                    : mpg4                      0x4
///                                    : vc1ap                     0x5
///                                                 ###
///                                                 * VC-1 advanced profile
///                                                 ###
///               %unsigned 1  fldPic                    0x0
///                                    : frame                     0x0
///                                                 ###
///                                                 * current picture is frame
///                                                 ###
///                                    : field                     0x1
///                                                 ###
///                                                 * current picture is field
///                                                 ###
///               %unsigned 1  rangeRed                  0x0
///                                    ###
///                                    * Range reduction setting for current picture
///                                    ###
///               %%        27         # Stuffing bits...
///     @ 0x01008 STATUS               (WOC-)
///               ###
///               * vCache status
///               ###
///               %unsigned 1  session_done              0x0
///                                    ###
///                                    * 0: session ongoing or idle
///                                    * 1: previous session is done
///                                    * sticky until CPU writes 1 to clear
///                                    ###
///               %%        31         # Stuffing bits...
///     @ 0x0100C CHROMA_OFFSET        (P)
///               ###
///               * Chroma frame buffer address offset from the corresponding luma frame buffer
///               ###
///               %unsigned 32 val                       0x0
///                                    ###
///                                    * Chroma buffer address = frame_luma[*] + chroma_offset
///                                    ###
///     @ 0x01010 PAGE_STRIDE          (P)
///               ###
///               * Address differential from the 1st pixel of a page row to the 1st pixel of the next page row.
///               ###
///               %unsigned 32 stride                    0x0
///     @ 0x01014 FRAME_DESC           (P)
///     # 0x01014 frame                
///               $FRAME_DESC          frame             REG      [17]
///                                    ###
///                                    * Frame buffer descriptors, array of 17
///                                    ###
///     @ 0x01058 TRANS_DESC           (P)
///     # 0x01058 dscp                 
///               $TRANS_DESC          dscp              REG      [63]
///                                    ###
///                                    * Output transfer ID for the OCP connection between vCache and PCube, array of 63
///                                    ###
///     @ 0x01154 XPIX_MAP             (P)
///     # 0x01154 xpix_map             
///               $PIX_LUT             xpix_map          REG      [32]
///     @ 0x011D4 YPIX_MAP             (P)
///     # 0x011D4 ypix_map             
///               $PIX_LUT             ypix_map          REG      [32]
///     @ 0x01254 XLOCEXP_MAP          (P)
///     # 0x01254 xlocexp_map          
///               $PIX_LUT             xlocexp_map       REG      [32]
///     @ 0x012D4 XPIXEXP_MAP          (P)
///     # 0x012D4 xpixexp_map          
///               $PIX_LUT             xpixexp_map       REG       [8]
///     @ 0x012F4 YLOCEXP_MAP          (P)
///     # 0x012F4 ylocexp_map          
///               $PIX_LUT             ylocexp_map       REG      [32]
///     @ 0x01374 YPIXEXP_MAP          (P)
///     # 0x01374 ypixexp_map          
///               $PIX_LUT             ypixexp_map       REG       [8]
///                                    ###
///                                    * Look-up table for vcMsg xpix, ypix, xlocexp, xpixexp, ylocexp, and ypixexp. Note that for UV, only xpixexp and ypixexp are required to go through the look-up table.
///                                    ###
///     @ 0x01394 INT_RBID_MAP         (RW)
///               ###
///               * Map forward and backward VC-1 intensity compensation parameter sets to reference frames with specific rBid.
///               ###
///               %unsigned 5  forward_rbid              0x0
///                                    ###
///                                    * Specify the rBid of forward reference frame. The forward intensity compensation parameter sets are applied to this frame. forward_rbid doesn't have the lsb of rBid that indicate top or bottom field.
///                                    ###
///               %unsigned 5  current_rbid              0x0
///                                    ###
///                                    * Specify the rBid of current frame. The current intensity compensation parameter set is applied to this frame. current_rbid doesn't have the lsb of rBid that indicate top or bottom field.
///                                    ###
///               %unsigned 5  backward_rbid             0x0
///                                    ###
///                                    * Specify the rBid of backward reference frame that backward intensity compensation parameter sets are applied to. backward_rbid doesn't have the lsb of rBid that indicate top or bottom field.
///                                    ###
///               %%        17         # Stuffing bits...
///     @ 0x01398 INT_FORWARD_TOP0     (P)
///     # 0x01398 int_forward_top      
///               $INTEN_PARAM         int_forward_top   REG       [2]
///     @ 0x013A0 INT_FORWARD_BOT0     (P)
///     # 0x013A0 int_forward_bot      
///               $INTEN_PARAM         int_forward_bot   REG       [2]
///     @ 0x013A8 INT_CURRENT          (P)
///     # 0x013A8 int_current          
///               $INTEN_PARAM         int_current       REG          
///     @ 0x013AC INT_BACKWARD_TOP     (P)
///     # 0x013AC int_backward_top     
///               $INTEN_PARAM         int_backward_top  REG          
///     @ 0x013B0 INT_BACKWARD_BOT     (P)
///     # 0x013B0 int_backward_bot     
///               $INTEN_PARAM         int_backward_bot  REG          
///                                    ###
///                                    * Forward and backward VC-1 intensity compensation parameter sets.
///                                    ###
///     @ 0x013B4 REGION_LOC_BASE      (P)
///               ###
///               * xloc/yloc base, multiples of 2K (to support pict size larger than 2K)
///               * e.g. xloc_final = ((xloc_base << 11) + vCmsg_xloc)
///               ###
///               %unsigned 8  luma_xloc_base            0x0
///               %unsigned 8  luma_yloc_base            0x0
///               %unsigned 8  chroma_xloc_base          0x0
///               %unsigned 8  chroma_yloc_base          0x0
///     @ 0x013B8 FETCH_COLLECTION     (P)
///               ###
///               * DRAM data fetch collection control
///               ###
///               %unsigned 16 dram_burst_size           0x20
///                                    ###
///                                    * DRAM burst size in bytes
///                                    ###
///               %unsigned 1  collection_mode           0x0
///                                    : tile_exact                0x0
///                                    : burst_align               0x1
///                                                 ###
///                                                 * Fetch collection mode
///                                                 * end of VC interface
///                                                 ###
///               %%        15         # Stuffing bits...
///     @ 0x013BC                      (W-)
///     #         # Stuffing bytes...
///               %% 544
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:    5120B, bits:    3474b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_VC
#define h_VC (){}

    #define        VC_TagSramBase                              0x0
    #define        VC_RegBase                                  0x1000
    ///////////////////////////////////////////////////////////
    #define     RA_VC_TAG_SRAM                                 0x0000
    #define     RA_VC_tags                                     0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_VC_CTRL                                     0x1000

    #define     BA_VC_CTRL_stop                                0x1000
    #define     B16VC_CTRL_stop                                0x1000
    #define   LSb32VC_CTRL_stop                                   0
    #define   LSb16VC_CTRL_stop                                   0
    #define       bVC_CTRL_stop                                1
    #define   MSK32VC_CTRL_stop                                   0x00000001

    #define     BA_VC_CTRL_auto_resume                         0x1000
    #define     B16VC_CTRL_auto_resume                         0x1000
    #define   LSb32VC_CTRL_auto_resume                            1
    #define   LSb16VC_CTRL_auto_resume                            1
    #define       bVC_CTRL_auto_resume                         1
    #define   MSK32VC_CTRL_auto_resume                            0x00000002

    #define     BA_VC_CTRL_kickoff                             0x1000
    #define     B16VC_CTRL_kickoff                             0x1000
    #define   LSb32VC_CTRL_kickoff                                2
    #define   LSb16VC_CTRL_kickoff                                2
    #define       bVC_CTRL_kickoff                             1
    #define   MSK32VC_CTRL_kickoff                                0x00000004
    ///////////////////////////////////////////////////////////
    #define     RA_VC_FORMAT                                   0x1004

    #define     BA_VC_FORMAT_picMode                           0x1004
    #define     B16VC_FORMAT_picMode                           0x1004
    #define   LSb32VC_FORMAT_picMode                              0
    #define   LSb16VC_FORMAT_picMode                              0
    #define       bVC_FORMAT_picMode                           3
    #define   MSK32VC_FORMAT_picMode                              0x00000007
    #define        VC_FORMAT_picMode_h264                                   0x0
    #define        VC_FORMAT_picMode_wmv                                    0x1
    #define        VC_FORMAT_picMode_mpg2                                   0x2
    #define        VC_FORMAT_picMode_mpg4                                   0x4
    #define        VC_FORMAT_picMode_vc1ap                                  0x5

    #define     BA_VC_FORMAT_fldPic                            0x1004
    #define     B16VC_FORMAT_fldPic                            0x1004
    #define   LSb32VC_FORMAT_fldPic                               3
    #define   LSb16VC_FORMAT_fldPic                               3
    #define       bVC_FORMAT_fldPic                            1
    #define   MSK32VC_FORMAT_fldPic                               0x00000008
    #define        VC_FORMAT_fldPic_frame                                   0x0
    #define        VC_FORMAT_fldPic_field                                   0x1

    #define     BA_VC_FORMAT_rangeRed                          0x1004
    #define     B16VC_FORMAT_rangeRed                          0x1004
    #define   LSb32VC_FORMAT_rangeRed                             4
    #define   LSb16VC_FORMAT_rangeRed                             4
    #define       bVC_FORMAT_rangeRed                          1
    #define   MSK32VC_FORMAT_rangeRed                             0x00000010
    ///////////////////////////////////////////////////////////
    #define     RA_VC_STATUS                                   0x1008

    #define     BA_VC_STATUS_session_done                      0x1008
    #define     B16VC_STATUS_session_done                      0x1008
    #define   LSb32VC_STATUS_session_done                         0
    #define   LSb16VC_STATUS_session_done                         0
    #define       bVC_STATUS_session_done                      1
    #define   MSK32VC_STATUS_session_done                         0x00000001
    ///////////////////////////////////////////////////////////
    #define     RA_VC_CHROMA_OFFSET                            0x100C

    #define     BA_VC_CHROMA_OFFSET_val                        0x100C
    #define     B16VC_CHROMA_OFFSET_val                        0x100C
    #define   LSb32VC_CHROMA_OFFSET_val                           0
    #define   LSb16VC_CHROMA_OFFSET_val                           0
    #define       bVC_CHROMA_OFFSET_val                        32
    #define   MSK32VC_CHROMA_OFFSET_val                           0xFFFFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_VC_PAGE_STRIDE                              0x1010

    #define     BA_VC_PAGE_STRIDE_stride                       0x1010
    #define     B16VC_PAGE_STRIDE_stride                       0x1010
    #define   LSb32VC_PAGE_STRIDE_stride                          0
    #define   LSb16VC_PAGE_STRIDE_stride                          0
    #define       bVC_PAGE_STRIDE_stride                       32
    #define   MSK32VC_PAGE_STRIDE_stride                          0xFFFFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_VC_FRAME_DESC                               0x1014
    #define     RA_VC_frame                                    0x1014
    ///////////////////////////////////////////////////////////
    #define     RA_VC_TRANS_DESC                               0x1058
    #define     RA_VC_dscp                                     0x1058
    ///////////////////////////////////////////////////////////
    #define     RA_VC_XPIX_MAP                                 0x1154
    #define     RA_VC_xpix_map                                 0x1154
    ///////////////////////////////////////////////////////////
    #define     RA_VC_YPIX_MAP                                 0x11D4
    #define     RA_VC_ypix_map                                 0x11D4
    ///////////////////////////////////////////////////////////
    #define     RA_VC_XLOCEXP_MAP                              0x1254
    #define     RA_VC_xlocexp_map                              0x1254
    ///////////////////////////////////////////////////////////
    #define     RA_VC_XPIXEXP_MAP                              0x12D4
    #define     RA_VC_xpixexp_map                              0x12D4
    ///////////////////////////////////////////////////////////
    #define     RA_VC_YLOCEXP_MAP                              0x12F4
    #define     RA_VC_ylocexp_map                              0x12F4
    ///////////////////////////////////////////////////////////
    #define     RA_VC_YPIXEXP_MAP                              0x1374
    #define     RA_VC_ypixexp_map                              0x1374
    ///////////////////////////////////////////////////////////
    #define     RA_VC_INT_RBID_MAP                             0x1394

    #define     BA_VC_INT_RBID_MAP_forward_rbid                0x1394
    #define     B16VC_INT_RBID_MAP_forward_rbid                0x1394
    #define   LSb32VC_INT_RBID_MAP_forward_rbid                   0
    #define   LSb16VC_INT_RBID_MAP_forward_rbid                   0
    #define       bVC_INT_RBID_MAP_forward_rbid                5
    #define   MSK32VC_INT_RBID_MAP_forward_rbid                   0x0000001F

    #define     BA_VC_INT_RBID_MAP_current_rbid                0x1394
    #define     B16VC_INT_RBID_MAP_current_rbid                0x1394
    #define   LSb32VC_INT_RBID_MAP_current_rbid                   5
    #define   LSb16VC_INT_RBID_MAP_current_rbid                   5
    #define       bVC_INT_RBID_MAP_current_rbid                5
    #define   MSK32VC_INT_RBID_MAP_current_rbid                   0x000003E0

    #define     BA_VC_INT_RBID_MAP_backward_rbid               0x1395
    #define     B16VC_INT_RBID_MAP_backward_rbid               0x1394
    #define   LSb32VC_INT_RBID_MAP_backward_rbid                  10
    #define   LSb16VC_INT_RBID_MAP_backward_rbid                  10
    #define       bVC_INT_RBID_MAP_backward_rbid               5
    #define   MSK32VC_INT_RBID_MAP_backward_rbid                  0x00007C00
    ///////////////////////////////////////////////////////////
    #define     RA_VC_INT_FORWARD_TOP0                         0x1398
    #define     RA_VC_int_forward_top                          0x1398
    ///////////////////////////////////////////////////////////
    #define     RA_VC_INT_FORWARD_BOT0                         0x13A0
    #define     RA_VC_int_forward_bot                          0x13A0
    ///////////////////////////////////////////////////////////
    #define     RA_VC_INT_CURRENT                              0x13A8
    #define     RA_VC_int_current                              0x13A8
    ///////////////////////////////////////////////////////////
    #define     RA_VC_INT_BACKWARD_TOP                         0x13AC
    #define     RA_VC_int_backward_top                         0x13AC
    ///////////////////////////////////////////////////////////
    #define     RA_VC_INT_BACKWARD_BOT                         0x13B0
    #define     RA_VC_int_backward_bot                         0x13B0
    ///////////////////////////////////////////////////////////
    #define     RA_VC_REGION_LOC_BASE                          0x13B4

    #define     BA_VC_REGION_LOC_BASE_luma_xloc_base           0x13B4
    #define     B16VC_REGION_LOC_BASE_luma_xloc_base           0x13B4
    #define   LSb32VC_REGION_LOC_BASE_luma_xloc_base              0
    #define   LSb16VC_REGION_LOC_BASE_luma_xloc_base              0
    #define       bVC_REGION_LOC_BASE_luma_xloc_base           8
    #define   MSK32VC_REGION_LOC_BASE_luma_xloc_base              0x000000FF

    #define     BA_VC_REGION_LOC_BASE_luma_yloc_base           0x13B5
    #define     B16VC_REGION_LOC_BASE_luma_yloc_base           0x13B4
    #define   LSb32VC_REGION_LOC_BASE_luma_yloc_base              8
    #define   LSb16VC_REGION_LOC_BASE_luma_yloc_base              8
    #define       bVC_REGION_LOC_BASE_luma_yloc_base           8
    #define   MSK32VC_REGION_LOC_BASE_luma_yloc_base              0x0000FF00

    #define     BA_VC_REGION_LOC_BASE_chroma_xloc_base         0x13B6
    #define     B16VC_REGION_LOC_BASE_chroma_xloc_base         0x13B6
    #define   LSb32VC_REGION_LOC_BASE_chroma_xloc_base            16
    #define   LSb16VC_REGION_LOC_BASE_chroma_xloc_base            0
    #define       bVC_REGION_LOC_BASE_chroma_xloc_base         8
    #define   MSK32VC_REGION_LOC_BASE_chroma_xloc_base            0x00FF0000

    #define     BA_VC_REGION_LOC_BASE_chroma_yloc_base         0x13B7
    #define     B16VC_REGION_LOC_BASE_chroma_yloc_base         0x13B6
    #define   LSb32VC_REGION_LOC_BASE_chroma_yloc_base            24
    #define   LSb16VC_REGION_LOC_BASE_chroma_yloc_base            8
    #define       bVC_REGION_LOC_BASE_chroma_yloc_base         8
    #define   MSK32VC_REGION_LOC_BASE_chroma_yloc_base            0xFF000000
    ///////////////////////////////////////////////////////////
    #define     RA_VC_FETCH_COLLECTION                         0x13B8

    #define     BA_VC_FETCH_COLLECTION_dram_burst_size         0x13B8
    #define     B16VC_FETCH_COLLECTION_dram_burst_size         0x13B8
    #define   LSb32VC_FETCH_COLLECTION_dram_burst_size            0
    #define   LSb16VC_FETCH_COLLECTION_dram_burst_size            0
    #define       bVC_FETCH_COLLECTION_dram_burst_size         16
    #define   MSK32VC_FETCH_COLLECTION_dram_burst_size            0x0000FFFF

    #define     BA_VC_FETCH_COLLECTION_collection_mode         0x13BA
    #define     B16VC_FETCH_COLLECTION_collection_mode         0x13BA
    #define   LSb32VC_FETCH_COLLECTION_collection_mode            16
    #define   LSb16VC_FETCH_COLLECTION_collection_mode            0
    #define       bVC_FETCH_COLLECTION_collection_mode         1
    #define   MSK32VC_FETCH_COLLECTION_collection_mode            0x00010000
    #define        VC_FETCH_COLLECTION_collection_mode_tile_exact              0x0
    #define        VC_FETCH_COLLECTION_collection_mode_burst_align              0x1
    ///////////////////////////////////////////////////////////

    typedef struct SIE_VC {
    ///////////////////////////////////////////////////////////
              SIE_TAG_SRAM                                     ie_tags;
             UNSG8 RSVD_tags                                   [256];
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx400                                    [3072];
    ///////////////////////////////////////////////////////////
    #define   GET32VC_CTRL_stop(r32)                           _BFGET_(r32, 0, 0)
    #define   SET32VC_CTRL_stop(r32,v)                         _BFSET_(r32, 0, 0,v)
    #define   GET16VC_CTRL_stop(r16)                           _BFGET_(r16, 0, 0)
    #define   SET16VC_CTRL_stop(r16,v)                         _BFSET_(r16, 0, 0,v)

    #define   GET32VC_CTRL_auto_resume(r32)                    _BFGET_(r32, 1, 1)
    #define   SET32VC_CTRL_auto_resume(r32,v)                  _BFSET_(r32, 1, 1,v)
    #define   GET16VC_CTRL_auto_resume(r16)                    _BFGET_(r16, 1, 1)
    #define   SET16VC_CTRL_auto_resume(r16,v)                  _BFSET_(r16, 1, 1,v)

    #define   GET32VC_CTRL_kickoff(r32)                        _BFGET_(r32, 2, 2)
    #define   SET32VC_CTRL_kickoff(r32,v)                      _BFSET_(r32, 2, 2,v)
    #define   GET16VC_CTRL_kickoff(r16)                        _BFGET_(r16, 2, 2)
    #define   SET16VC_CTRL_kickoff(r16,v)                      _BFSET_(r16, 2, 2,v)

    #define     w32VC_CTRL                                     {\
            UNSG32 uCTRL_stop                                  :  1;\
            UNSG32 uCTRL_auto_resume                           :  1;\
            UNSG32 uCTRL_kickoff                               :  1;\
            UNSG32 RSVDx1000_b3                                : 29;\
          }
    union { UNSG32 u32VC_CTRL;
            struct w32VC_CTRL;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32VC_FORMAT_picMode(r32)                      _BFGET_(r32, 2, 0)
    #define   SET32VC_FORMAT_picMode(r32,v)                    _BFSET_(r32, 2, 0,v)
    #define   GET16VC_FORMAT_picMode(r16)                      _BFGET_(r16, 2, 0)
    #define   SET16VC_FORMAT_picMode(r16,v)                    _BFSET_(r16, 2, 0,v)

    #define   GET32VC_FORMAT_fldPic(r32)                       _BFGET_(r32, 3, 3)
    #define   SET32VC_FORMAT_fldPic(r32,v)                     _BFSET_(r32, 3, 3,v)
    #define   GET16VC_FORMAT_fldPic(r16)                       _BFGET_(r16, 3, 3)
    #define   SET16VC_FORMAT_fldPic(r16,v)                     _BFSET_(r16, 3, 3,v)

    #define   GET32VC_FORMAT_rangeRed(r32)                     _BFGET_(r32, 4, 4)
    #define   SET32VC_FORMAT_rangeRed(r32,v)                   _BFSET_(r32, 4, 4,v)
    #define   GET16VC_FORMAT_rangeRed(r16)                     _BFGET_(r16, 4, 4)
    #define   SET16VC_FORMAT_rangeRed(r16,v)                   _BFSET_(r16, 4, 4,v)

    #define     w32VC_FORMAT                                   {\
            UNSG32 uFORMAT_picMode                             :  3;\
            UNSG32 uFORMAT_fldPic                              :  1;\
            UNSG32 uFORMAT_rangeRed                            :  1;\
            UNSG32 RSVDx1004_b5                                : 27;\
          }
    union { UNSG32 u32VC_FORMAT;
            struct w32VC_FORMAT;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32VC_STATUS_session_done(r32)                 _BFGET_(r32, 0, 0)
    #define   SET32VC_STATUS_session_done(r32,v)               _BFSET_(r32, 0, 0,v)
    #define   GET16VC_STATUS_session_done(r16)                 _BFGET_(r16, 0, 0)
    #define   SET16VC_STATUS_session_done(r16,v)               _BFSET_(r16, 0, 0,v)

    #define     w32VC_STATUS                                   {\
            UNSG32 uSTATUS_session_done                        :  1;\
            UNSG32 RSVDx1008_b1                                : 31;\
          }
    union { UNSG32 u32VC_STATUS;
            struct w32VC_STATUS;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32VC_CHROMA_OFFSET_val(r32)                   _BFGET_(r32,31, 0)
    #define   SET32VC_CHROMA_OFFSET_val(r32,v)                 _BFSET_(r32,31, 0,v)

    #define     w32VC_CHROMA_OFFSET                            {\
            UNSG32 uCHROMA_OFFSET_val                          : 32;\
          }
    union { UNSG32 u32VC_CHROMA_OFFSET;
            struct w32VC_CHROMA_OFFSET;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32VC_PAGE_STRIDE_stride(r32)                  _BFGET_(r32,31, 0)
    #define   SET32VC_PAGE_STRIDE_stride(r32,v)                _BFSET_(r32,31, 0,v)

    #define     w32VC_PAGE_STRIDE                              {\
            UNSG32 uPAGE_STRIDE_stride                         : 32;\
          }
    union { UNSG32 u32VC_PAGE_STRIDE;
            struct w32VC_PAGE_STRIDE;
          };
    ///////////////////////////////////////////////////////////
              SIE_FRAME_DESC                                   ie_frame[17];
    ///////////////////////////////////////////////////////////
              SIE_TRANS_DESC                                   ie_dscp[63];
    ///////////////////////////////////////////////////////////
              SIE_PIX_LUT                                      ie_xpix_map[32];
    ///////////////////////////////////////////////////////////
              SIE_PIX_LUT                                      ie_ypix_map[32];
    ///////////////////////////////////////////////////////////
              SIE_PIX_LUT                                      ie_xlocexp_map[32];
    ///////////////////////////////////////////////////////////
              SIE_PIX_LUT                                      ie_xpixexp_map[8];
    ///////////////////////////////////////////////////////////
              SIE_PIX_LUT                                      ie_ylocexp_map[32];
    ///////////////////////////////////////////////////////////
              SIE_PIX_LUT                                      ie_ypixexp_map[8];
    ///////////////////////////////////////////////////////////
    #define   GET32VC_INT_RBID_MAP_forward_rbid(r32)           _BFGET_(r32, 4, 0)
    #define   SET32VC_INT_RBID_MAP_forward_rbid(r32,v)         _BFSET_(r32, 4, 0,v)
    #define   GET16VC_INT_RBID_MAP_forward_rbid(r16)           _BFGET_(r16, 4, 0)
    #define   SET16VC_INT_RBID_MAP_forward_rbid(r16,v)         _BFSET_(r16, 4, 0,v)

    #define   GET32VC_INT_RBID_MAP_current_rbid(r32)           _BFGET_(r32, 9, 5)
    #define   SET32VC_INT_RBID_MAP_current_rbid(r32,v)         _BFSET_(r32, 9, 5,v)
    #define   GET16VC_INT_RBID_MAP_current_rbid(r16)           _BFGET_(r16, 9, 5)
    #define   SET16VC_INT_RBID_MAP_current_rbid(r16,v)         _BFSET_(r16, 9, 5,v)

    #define   GET32VC_INT_RBID_MAP_backward_rbid(r32)          _BFGET_(r32,14,10)
    #define   SET32VC_INT_RBID_MAP_backward_rbid(r32,v)        _BFSET_(r32,14,10,v)
    #define   GET16VC_INT_RBID_MAP_backward_rbid(r16)          _BFGET_(r16,14,10)
    #define   SET16VC_INT_RBID_MAP_backward_rbid(r16,v)        _BFSET_(r16,14,10,v)

    #define     w32VC_INT_RBID_MAP                             {\
            UNSG32 uINT_RBID_MAP_forward_rbid                  :  5;\
            UNSG32 uINT_RBID_MAP_current_rbid                  :  5;\
            UNSG32 uINT_RBID_MAP_backward_rbid                 :  5;\
            UNSG32 RSVDx1394_b15                               : 17;\
          }
    union { UNSG32 u32VC_INT_RBID_MAP;
            struct w32VC_INT_RBID_MAP;
          };
    ///////////////////////////////////////////////////////////
              SIE_INTEN_PARAM                                  ie_int_forward_top[2];
    ///////////////////////////////////////////////////////////
              SIE_INTEN_PARAM                                  ie_int_forward_bot[2];
    ///////////////////////////////////////////////////////////
              SIE_INTEN_PARAM                                  ie_int_current;
    ///////////////////////////////////////////////////////////
              SIE_INTEN_PARAM                                  ie_int_backward_top;
    ///////////////////////////////////////////////////////////
              SIE_INTEN_PARAM                                  ie_int_backward_bot;
    ///////////////////////////////////////////////////////////
    #define   GET32VC_REGION_LOC_BASE_luma_xloc_base(r32)      _BFGET_(r32, 7, 0)
    #define   SET32VC_REGION_LOC_BASE_luma_xloc_base(r32,v)    _BFSET_(r32, 7, 0,v)
    #define   GET16VC_REGION_LOC_BASE_luma_xloc_base(r16)      _BFGET_(r16, 7, 0)
    #define   SET16VC_REGION_LOC_BASE_luma_xloc_base(r16,v)    _BFSET_(r16, 7, 0,v)

    #define   GET32VC_REGION_LOC_BASE_luma_yloc_base(r32)      _BFGET_(r32,15, 8)
    #define   SET32VC_REGION_LOC_BASE_luma_yloc_base(r32,v)    _BFSET_(r32,15, 8,v)
    #define   GET16VC_REGION_LOC_BASE_luma_yloc_base(r16)      _BFGET_(r16,15, 8)
    #define   SET16VC_REGION_LOC_BASE_luma_yloc_base(r16,v)    _BFSET_(r16,15, 8,v)

    #define   GET32VC_REGION_LOC_BASE_chroma_xloc_base(r32)    _BFGET_(r32,23,16)
    #define   SET32VC_REGION_LOC_BASE_chroma_xloc_base(r32,v)  _BFSET_(r32,23,16,v)
    #define   GET16VC_REGION_LOC_BASE_chroma_xloc_base(r16)    _BFGET_(r16, 7, 0)
    #define   SET16VC_REGION_LOC_BASE_chroma_xloc_base(r16,v)  _BFSET_(r16, 7, 0,v)

    #define   GET32VC_REGION_LOC_BASE_chroma_yloc_base(r32)    _BFGET_(r32,31,24)
    #define   SET32VC_REGION_LOC_BASE_chroma_yloc_base(r32,v)  _BFSET_(r32,31,24,v)
    #define   GET16VC_REGION_LOC_BASE_chroma_yloc_base(r16)    _BFGET_(r16,15, 8)
    #define   SET16VC_REGION_LOC_BASE_chroma_yloc_base(r16,v)  _BFSET_(r16,15, 8,v)

    #define     w32VC_REGION_LOC_BASE                          {\
            UNSG32 uREGION_LOC_BASE_luma_xloc_base             :  8;\
            UNSG32 uREGION_LOC_BASE_luma_yloc_base             :  8;\
            UNSG32 uREGION_LOC_BASE_chroma_xloc_base           :  8;\
            UNSG32 uREGION_LOC_BASE_chroma_yloc_base           :  8;\
          }
    union { UNSG32 u32VC_REGION_LOC_BASE;
            struct w32VC_REGION_LOC_BASE;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32VC_FETCH_COLLECTION_dram_burst_size(r32)    _BFGET_(r32,15, 0)
    #define   SET32VC_FETCH_COLLECTION_dram_burst_size(r32,v)  _BFSET_(r32,15, 0,v)
    #define   GET16VC_FETCH_COLLECTION_dram_burst_size(r16)    _BFGET_(r16,15, 0)
    #define   SET16VC_FETCH_COLLECTION_dram_burst_size(r16,v)  _BFSET_(r16,15, 0,v)

    #define   GET32VC_FETCH_COLLECTION_collection_mode(r32)    _BFGET_(r32,16,16)
    #define   SET32VC_FETCH_COLLECTION_collection_mode(r32,v)  _BFSET_(r32,16,16,v)
    #define   GET16VC_FETCH_COLLECTION_collection_mode(r16)    _BFGET_(r16, 0, 0)
    #define   SET16VC_FETCH_COLLECTION_collection_mode(r16,v)  _BFSET_(r16, 0, 0,v)

    #define     w32VC_FETCH_COLLECTION                         {\
            UNSG32 uFETCH_COLLECTION_dram_burst_size           : 16;\
            UNSG32 uFETCH_COLLECTION_collection_mode           :  1;\
            UNSG32 RSVDx13B8_b17                               : 15;\
          }
    union { UNSG32 u32VC_FETCH_COLLECTION;
            struct w32VC_FETCH_COLLECTION;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx13BC                                   [68];
    ///////////////////////////////////////////////////////////
    } SIE_VC;

    typedef union  T32VC_CTRL
          { UNSG32 u32;
            struct w32VC_CTRL;
                 } T32VC_CTRL;
    typedef union  T32VC_FORMAT
          { UNSG32 u32;
            struct w32VC_FORMAT;
                 } T32VC_FORMAT;
    typedef union  T32VC_STATUS
          { UNSG32 u32;
            struct w32VC_STATUS;
                 } T32VC_STATUS;
    typedef union  T32VC_CHROMA_OFFSET
          { UNSG32 u32;
            struct w32VC_CHROMA_OFFSET;
                 } T32VC_CHROMA_OFFSET;
    typedef union  T32VC_PAGE_STRIDE
          { UNSG32 u32;
            struct w32VC_PAGE_STRIDE;
                 } T32VC_PAGE_STRIDE;
    typedef union  T32VC_INT_RBID_MAP
          { UNSG32 u32;
            struct w32VC_INT_RBID_MAP;
                 } T32VC_INT_RBID_MAP;
    typedef union  T32VC_REGION_LOC_BASE
          { UNSG32 u32;
            struct w32VC_REGION_LOC_BASE;
                 } T32VC_REGION_LOC_BASE;
    typedef union  T32VC_FETCH_COLLECTION
          { UNSG32 u32;
            struct w32VC_FETCH_COLLECTION;
                 } T32VC_FETCH_COLLECTION;
    ///////////////////////////////////////////////////////////

    typedef union  TVC_CTRL
          { UNSG32 u32[1];
            struct {
            struct w32VC_CTRL;
                   };
                 } TVC_CTRL;
    typedef union  TVC_FORMAT
          { UNSG32 u32[1];
            struct {
            struct w32VC_FORMAT;
                   };
                 } TVC_FORMAT;
    typedef union  TVC_STATUS
          { UNSG32 u32[1];
            struct {
            struct w32VC_STATUS;
                   };
                 } TVC_STATUS;
    typedef union  TVC_CHROMA_OFFSET
          { UNSG32 u32[1];
            struct {
            struct w32VC_CHROMA_OFFSET;
                   };
                 } TVC_CHROMA_OFFSET;
    typedef union  TVC_PAGE_STRIDE
          { UNSG32 u32[1];
            struct {
            struct w32VC_PAGE_STRIDE;
                   };
                 } TVC_PAGE_STRIDE;
    typedef union  TVC_INT_RBID_MAP
          { UNSG32 u32[1];
            struct {
            struct w32VC_INT_RBID_MAP;
                   };
                 } TVC_INT_RBID_MAP;
    typedef union  TVC_REGION_LOC_BASE
          { UNSG32 u32[1];
            struct {
            struct w32VC_REGION_LOC_BASE;
                   };
                 } TVC_REGION_LOC_BASE;
    typedef union  TVC_FETCH_COLLECTION
          { UNSG32 u32[1];
            struct {
            struct w32VC_FETCH_COLLECTION;
                   };
                 } TVC_FETCH_COLLECTION;

    ///////////////////////////////////////////////////////////
     SIGN32 VC_drvrd(SIE_VC *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 VC_drvwr(SIE_VC *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void VC_reset(SIE_VC *p);
     SIGN32 VC_cmp  (SIE_VC *p, SIE_VC *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define VC_check(p,pie,pfx,hLOG) VC_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define VC_print(p,    pfx,hLOG) VC_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: VC
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE vcClkRst                biu              (4,4)
///     ###
///     * vCache level clock reset control unit
///     * For all reset control bit, 0-- reset, 1-- release. After chip power on reset, all these registers are 0 which means the vPro subsystem is in reset state and should be kicked-off by CPU.
///     ###
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 global               
///               $ClkRstBiu           global            REG          
///     @ 0x00004                      (P)
///     # 0x00004 vcBiu                
///               $ClkRstBiu           vcBiu             REG          
///     @ 0x00008                      (P)
///     # 0x00008 BiuArb               
///               $ClkRstBiu           BiuArb            REG          
///     @ 0x0000C                      (P)
///     # 0x0000C misc                 
///               $ClkRstBiu           misc              REG          
///                                    ###
///                                    * For p3Figo0/1, only sw clock enable is used and dynamic clock control will not be applied.
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      16B, bits:      12b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_vcClkRst
#define h_vcClkRst (){}

    #define     RA_vcClkRst_global                             0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_vcClkRst_vcBiu                              0x0004
    ///////////////////////////////////////////////////////////
    #define     RA_vcClkRst_BiuArb                             0x0008
    ///////////////////////////////////////////////////////////
    #define     RA_vcClkRst_misc                               0x000C
    ///////////////////////////////////////////////////////////

    typedef struct SIE_vcClkRst {
    ///////////////////////////////////////////////////////////
              SIE_ClkRstBiu                                    ie_global;
    ///////////////////////////////////////////////////////////
              SIE_ClkRstBiu                                    ie_vcBiu;
    ///////////////////////////////////////////////////////////
              SIE_ClkRstBiu                                    ie_BiuArb;
    ///////////////////////////////////////////////////////////
              SIE_ClkRstBiu                                    ie_misc;
    ///////////////////////////////////////////////////////////
    } SIE_vcClkRst;

    ///////////////////////////////////////////////////////////
     SIGN32 vcClkRst_drvrd(SIE_vcClkRst *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 vcClkRst_drvwr(SIE_vcClkRst *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void vcClkRst_reset(SIE_vcClkRst *p);
     SIGN32 vcClkRst_cmp  (SIE_vcClkRst *p, SIE_vcClkRst *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define vcClkRst_check(p,pie,pfx,hLOG) vcClkRst_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define vcClkRst_print(p,    pfx,hLOG) vcClkRst_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: vcClkRst
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE VcBIU                                    (4,4)
///     ###
///     * Constants for vCache submodule hSel decoding
///     ###
///     # # ----------------------------------------------------------
///               : SIZE               0x10000
///               : DEC_BIT            0x10
///                            ###
///                            * vCache
///                            ###
///               : Vc_OFST            0x0
///               : Vc_SIZE            0xF000
///               : Vc_DEC_BIT         0xC
///                            ###
///                            * VcCR
///                            ###
///               : VcCR_OFST          0xF000
///               : VcCR_SIZE          0x1000
///               : VcCR_DEC_BIT       0xC
///     @ 0x00000 Dummy                (P)
///               %unsigned 1  xxx                       0x0
///               %%        31         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:       1b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_VcBIU
#define h_VcBIU (){}

    #define        VcBIU_SIZE                                  0x10000
    #define        VcBIU_DEC_BIT                               0x10
    #define        VcBIU_Vc_OFST                               0x0
    #define        VcBIU_Vc_SIZE                               0xF000
    #define        VcBIU_Vc_DEC_BIT                            0xC
    #define        VcBIU_VcCR_OFST                             0xF000
    #define        VcBIU_VcCR_SIZE                             0x1000
    #define        VcBIU_VcCR_DEC_BIT                          0xC
    ///////////////////////////////////////////////////////////
    #define     RA_VcBIU_Dummy                                 0x0000

    #define     BA_VcBIU_Dummy_xxx                             0x0000
    #define     B16VcBIU_Dummy_xxx                             0x0000
    #define   LSb32VcBIU_Dummy_xxx                                0
    #define   LSb16VcBIU_Dummy_xxx                                0
    #define       bVcBIU_Dummy_xxx                             1
    #define   MSK32VcBIU_Dummy_xxx                                0x00000001
    ///////////////////////////////////////////////////////////

    typedef struct SIE_VcBIU {
    ///////////////////////////////////////////////////////////
    #define   GET32VcBIU_Dummy_xxx(r32)                        _BFGET_(r32, 0, 0)
    #define   SET32VcBIU_Dummy_xxx(r32,v)                      _BFSET_(r32, 0, 0,v)
    #define   GET16VcBIU_Dummy_xxx(r16)                        _BFGET_(r16, 0, 0)
    #define   SET16VcBIU_Dummy_xxx(r16,v)                      _BFSET_(r16, 0, 0,v)

    #define     w32VcBIU_Dummy                                 {\
            UNSG32 uDummy_xxx                                  :  1;\
            UNSG32 RSVDx0_b1                                   : 31;\
          }
    union { UNSG32 u32VcBIU_Dummy;
            struct w32VcBIU_Dummy;
          };
    ///////////////////////////////////////////////////////////
    } SIE_VcBIU;

    typedef union  T32VcBIU_Dummy
          { UNSG32 u32;
            struct w32VcBIU_Dummy;
                 } T32VcBIU_Dummy;
    ///////////////////////////////////////////////////////////

    typedef union  TVcBIU_Dummy
          { UNSG32 u32[1];
            struct {
            struct w32VcBIU_Dummy;
                   };
                 } TVcBIU_Dummy;

    ///////////////////////////////////////////////////////////
     SIGN32 VcBIU_drvrd(SIE_VcBIU *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 VcBIU_drvwr(SIE_VcBIU *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void VcBIU_reset(SIE_VcBIU *p);
     SIGN32 VcBIU_cmp  (SIE_VcBIU *p, SIE_VcBIU *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define VcBIU_check(p,pie,pfx,hLOG) VcBIU_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define VcBIU_print(p,    pfx,hLOG) VcBIU_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: VcBIU
////////////////////////////////////////////////////////////



#ifdef __cplusplus
  }
#endif
#pragma  pack()

#endif
//////
/// ENDOFFILE: vcache_spec.h
////////////////////////////////////////////////////////////

