mirror of
https://github.com/SDL-Hercules-390/hyperion.git
synced 2026-04-13 23:45:37 +02:00
Original/legacy cmpsc.c implementation moved to altcmpsc.dll module. Refer to Release Notes and/or README.CMPSC documents for more details.
611 lines
26 KiB
C
611 lines
26 KiB
C
/* CMPSCGET.C (c) Copyright "Fish" (David B. Trout), 2012-2014 */
|
|
/* Compression Call Get Next Index Functions */
|
|
/* */
|
|
/* Released under "The Q Public License Version 1" */
|
|
/* (http://www.hercules-390.org/herclic.html) as modifications to */
|
|
/* Hercules. */
|
|
|
|
#include "hstdinc.h" // (MUST be first #include in EVERY source file)
|
|
|
|
#if !defined(_HENGINE_DLL_)
|
|
#define _HENGINE_DLL_
|
|
#endif
|
|
|
|
#if !defined(_CMPSCGET_C_)
|
|
#define _CMPSCGET_C_
|
|
#endif
|
|
|
|
#if !defined( NOT_HERC ) // (building Hercules?)
|
|
#include "hercules.h"
|
|
#include "opcode.h"
|
|
#include "inline.h"
|
|
#endif
|
|
#include "cmpsc.h" // (Master header)
|
|
|
|
#ifdef FEATURE_COMPRESSION
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// EXPANSION: Get Next input SRC Index.
|
|
//
|
|
// Returns: #of SRC bytes consumed, or 0 if end of SRC i/p buffer reached.
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex009 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex109 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex209 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex309 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex409 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex509 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex609 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex709 )) ( GIBLK* pGIBLK );
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex010 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex110 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex210 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex310 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex410 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex510 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex610 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex710 )) ( GIBLK* pGIBLK );
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex011 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex111 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex211 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex311 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex411 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex511 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex611 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex711 )) ( GIBLK* pGIBLK );
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex012 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex112 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex212 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex312 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex412 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex512 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex612 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex712 )) ( GIBLK* pGIBLK );
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex013 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex113 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex213 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex313 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex413 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex513 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex613 )) ( GIBLK* pGIBLK );
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex713 )) ( GIBLK* pGIBLK );
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// CDSS=1, 9 bits per index, CBN sequences: 0-1-2-3-4-5-6-7*.
|
|
// * before CBN# = 3 bytes needed.
|
|
// * after CBN# = 2 bytes consumed.
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex009 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) ) >> 7;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex109 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex109 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x7FFF) >> 6;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex209 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex209 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x3FFF) >> 5;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex309 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex309 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x1FFF) >> 4;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex409 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex409 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x0FFF) >> 3;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex509 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex509 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x07FF) >> 2;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex609 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex609 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x03FF) >> 1;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex709 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex709 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x01FF);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex009 );
|
|
return 2;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// CDSS=2, 10 bits per index, CBN sequences: 0-2-4-6*, 1-3-5-*7*.
|
|
// * before CBN# = 3 bytes needed.
|
|
// * after CBN# = 2 bytes consumed.
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex010 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) ) >> 6;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex210 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex110 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x7FFF) >> 5;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex310 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex210 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x3FFF) >> 4;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex410 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex310 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x1FFF) >> 3;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex510 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex410 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x0FFF) >> 2;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex610 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex510 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x07FF) >> 1;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex710 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex610 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x03FF);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex010 );
|
|
return 2;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex710 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 3) return 0;
|
|
*pGIBLK->pIndex = ((fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x01FF) << 1)
|
|
| ((U16)fetch_op_b( pGIBLK->pCMPSCBLK->pOp2 + 2, pGIBLK->pMEMBLK ) >> 7);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex110 );
|
|
return 2;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// CDSS=3, 11 bits per index, CBN sequences: 0-3-*6*-1-4-*7*-2-5*.
|
|
// * before CBN# = 3 bytes needed.
|
|
// * after CBN# = 2 bytes consumed.
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex011 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) ) >> 5;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex311 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex111 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x7FFF) >> 4;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex411 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex211 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x3FFF) >> 3;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex511 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex311 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x1FFF) >> 2;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex611 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex411 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x0FFF) >> 1;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex711 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex511 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x07FF);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex011 );
|
|
return 2;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex611 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 3) return 0;
|
|
*pGIBLK->pIndex = ((fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x03FF) << 1)
|
|
| ((U16)fetch_op_b( pGIBLK->pCMPSCBLK->pOp2 + 2, pGIBLK->pMEMBLK ) >> 7);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex111 );
|
|
return 2;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex711 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 3) return 0;
|
|
*pGIBLK->pIndex = ((fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x01FF) << 2)
|
|
| ((U16)fetch_op_b( pGIBLK->pCMPSCBLK->pOp2 + 2, pGIBLK->pMEMBLK ) >> 6);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex211 );
|
|
return 2;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// CDSS=4, 12 bits per index, CBN sequences: 0-4*, 1-*5*, 2-*6*, 3-*7*.
|
|
// * before CBN# = 3 bytes needed.
|
|
// * after CBN# = 2 bytes consumed.
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex012 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) ) >> 4;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex412 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex112 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x7FFF) >> 3;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex512 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex212 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x3FFF) >> 2;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex612 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex312 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x1FFF) >> 1;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex712 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex412 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x0FFF);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex012 );
|
|
return 2;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex512 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 3) return 0;
|
|
*pGIBLK->pIndex = ((fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x07FF) << 1)
|
|
| ((U16)fetch_op_b( pGIBLK->pCMPSCBLK->pOp2 + 2, pGIBLK->pMEMBLK ) >> 7);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex112 );
|
|
return 2;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex612 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 3) return 0;
|
|
*pGIBLK->pIndex = ((fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x03FF) << 2)
|
|
| ((U16)fetch_op_b( pGIBLK->pCMPSCBLK->pOp2 + 2, pGIBLK->pMEMBLK ) >> 6);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex212 );
|
|
return 2;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex712 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 3) return 0;
|
|
*pGIBLK->pIndex = ((fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x01FF) << 3)
|
|
| ((U16)fetch_op_b( pGIBLK->pCMPSCBLK->pOp2 + 2, pGIBLK->pMEMBLK ) >> 5);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex312 );
|
|
return 2;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// CDSS=5, 13 bits per index, CBN sequences: 0-*5*-2-*7*-*4*-1-*6*-3*.
|
|
// * before CBN# = 3 bytes needed.
|
|
// * after CBN# = 2 bytes consumed.
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex013 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) ) >> 3;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex513 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex113 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x7FFF) >> 2;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex613 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex213 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x3FFF) >> 1;
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex713 );
|
|
return 1;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex313 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 2) return 0;
|
|
*pGIBLK->pIndex = (fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x1FFF);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex013 );
|
|
return 2;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex413 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 3) return 0;
|
|
*pGIBLK->pIndex = ((fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x0FFF) << 1)
|
|
| ((U16)fetch_op_b( pGIBLK->pCMPSCBLK->pOp2 + 2, pGIBLK->pMEMBLK ) >> 7);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex113 );
|
|
return 2;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex513 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 3) return 0;
|
|
*pGIBLK->pIndex = ((fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x07FF) << 2)
|
|
| ((U16)fetch_op_b( pGIBLK->pCMPSCBLK->pOp2 + 2, pGIBLK->pMEMBLK ) >> 6);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex213 );
|
|
return 2;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex613 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 3) return 0;
|
|
*pGIBLK->pIndex = ((fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x03FF) << 3)
|
|
| ((U16)fetch_op_b( pGIBLK->pCMPSCBLK->pOp2 + 2, pGIBLK->pMEMBLK ) >> 5);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex313 );
|
|
return 2;
|
|
}
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( GetIndex713 )) ( GIBLK* pGIBLK )
|
|
{
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 3) return 0;
|
|
*pGIBLK->pIndex = ((fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2, pGIBLK->pMEMBLK ) & 0x01FF) << 4)
|
|
| ((U16)fetch_op_b( pGIBLK->pCMPSCBLK->pOp2 + 2, pGIBLK->pMEMBLK ) >> 4);
|
|
*pGIBLK->ppGetIndex = ARCH_DEP( GetIndex413 );
|
|
return 2;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// (Same thing, but 8 indexes at a time starting at CBN=0)
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// 0...4...
|
|
// 77777777
|
|
//(8)
|
|
//
|
|
// 0...4...8..12..16..20..24..28..32..36..40..44..48..52..56..60..6
|
|
// 0000000001111111112222222223333333334444444445555555556666666667
|
|
// (9) (9) (9) (9) (9) (9) (9) (1)
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( Get8Index009 )) ( GIBLK* pGIBLK )
|
|
{
|
|
register U8 b;
|
|
register U64 dw;
|
|
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 9) return 0;
|
|
|
|
b = fetch_op_b ( pGIBLK->pCMPSCBLK->pOp2 + 8, pGIBLK->pMEMBLK );
|
|
dw = fetch_op_dw( pGIBLK->pCMPSCBLK->pOp2 + 0, pGIBLK->pMEMBLK );
|
|
|
|
*(pGIBLK->pIndex + 7) = ( ((U16) b) | (((U16) dw) << 8) ) & 0x01FF; dw >>= 1;
|
|
*(pGIBLK->pIndex + 6) = ( (U16) dw ) & 0x01FF; dw >>= 9;
|
|
*(pGIBLK->pIndex + 5) = ( (U16) dw ) & 0x01FF; dw >>= 9;
|
|
*(pGIBLK->pIndex + 4) = ( (U16) dw ) & 0x01FF; dw >>= 9;
|
|
*(pGIBLK->pIndex + 3) = ( (U16) dw ) & 0x01FF; dw >>= 9;
|
|
*(pGIBLK->pIndex + 2) = ( (U16) dw ) & 0x01FF; dw >>= 9;
|
|
*(pGIBLK->pIndex + 1) = ( (U16) dw ) & 0x01FF; dw >>= 9;
|
|
*(pGIBLK->pIndex + 0) = ( (U16) dw );
|
|
|
|
return 9;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// 0...4...8..12..1
|
|
// 6666667777777777
|
|
//(6) (10)
|
|
//
|
|
// 0...4...8..12..16..20..24..28..32..36..40..44..48..52..56..60..6
|
|
// 0000000000111111111122222222223333333333444444444455555555556666
|
|
// (10) (10) (10) (10) (10) (10) (4)
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( Get8Index010 )) ( GIBLK* pGIBLK )
|
|
{
|
|
register U16 hw;
|
|
register U64 dw;
|
|
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 10) return 0;
|
|
|
|
hw = fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2 + 8, pGIBLK->pMEMBLK );
|
|
dw = fetch_op_dw( pGIBLK->pCMPSCBLK->pOp2 + 0, pGIBLK->pMEMBLK );
|
|
|
|
*(pGIBLK->pIndex + 7) = ( hw ) & 0x03FF; hw >>= 10;
|
|
*(pGIBLK->pIndex + 6) = ( hw | (((U16) dw) << 6) ) & 0x03FF; dw >>= 4;
|
|
*(pGIBLK->pIndex + 5) = ( (U16) dw ) & 0x03FF; dw >>= 10;
|
|
*(pGIBLK->pIndex + 4) = ( (U16) dw ) & 0x03FF; dw >>= 10;
|
|
*(pGIBLK->pIndex + 3) = ( (U16) dw ) & 0x03FF; dw >>= 10;
|
|
*(pGIBLK->pIndex + 2) = ( (U16) dw ) & 0x03FF; dw >>= 10;
|
|
*(pGIBLK->pIndex + 1) = ( (U16) dw ) & 0x03FF; dw >>= 10;
|
|
*(pGIBLK->pIndex + 0) = ( (U16) dw );
|
|
|
|
return 10;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// 0...4...
|
|
// 77777777
|
|
//(8)
|
|
//
|
|
// 0...4...8..12..1
|
|
// 5566666666666777
|
|
//(2) (11) (3)
|
|
//
|
|
// 0...4...8..12..16..20..24..28..32..36..40..44..48..52..56..60..6
|
|
// 0000000000011111111111222222222223333333333344444444444555555555
|
|
// (11) (11) (11) (11) (11) (9)
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( Get8Index011 )) ( GIBLK* pGIBLK )
|
|
{
|
|
register U8 b;
|
|
register U16 hw;
|
|
register U64 dw;
|
|
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 11) return 0;
|
|
|
|
b = fetch_op_b ( pGIBLK->pCMPSCBLK->pOp2 + 10, pGIBLK->pMEMBLK );
|
|
hw = fetch_op_hw( pGIBLK->pCMPSCBLK->pOp2 + 8, pGIBLK->pMEMBLK );
|
|
dw = fetch_op_dw( pGIBLK->pCMPSCBLK->pOp2 + 0, pGIBLK->pMEMBLK );
|
|
|
|
*(pGIBLK->pIndex + 7) = ( ((U16) b) | ( hw << 8) ) & 0x07FF; hw >>= 3;
|
|
*(pGIBLK->pIndex + 6) = ( hw ) & 0x07FF; hw >>= 11;
|
|
*(pGIBLK->pIndex + 5) = ( hw | (((U16) dw) << 2) ) & 0x07FF; dw >>= 9;
|
|
*(pGIBLK->pIndex + 4) = ( (U16) dw ) & 0x07FF; dw >>= 11;
|
|
*(pGIBLK->pIndex + 3) = ( (U16) dw ) & 0x07FF; dw >>= 11;
|
|
*(pGIBLK->pIndex + 2) = ( (U16) dw ) & 0x07FF; dw >>= 11;
|
|
*(pGIBLK->pIndex + 1) = ( (U16) dw ) & 0x07FF; dw >>= 11;
|
|
*(pGIBLK->pIndex + 0) = ( (U16) dw );
|
|
|
|
return 11;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 0...4...8..12..16..20..24..28..3
|
|
// 55555555666666666666777777777777
|
|
//(8) (12) (12)
|
|
//
|
|
// 0...4...8..12..16..20..24..28..32..36..40..44..48..52..56..60..6
|
|
// 0000000000001111111111112222222222223333333333334444444444445555
|
|
// (12) (12) (12) (12) (12) (4)
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( Get8Index012 )) ( GIBLK* pGIBLK )
|
|
{
|
|
register U32 fw;
|
|
register U64 dw;
|
|
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 12) return 0;
|
|
|
|
fw = fetch_op_fw( pGIBLK->pCMPSCBLK->pOp2 + 8, pGIBLK->pMEMBLK );
|
|
dw = fetch_op_dw( pGIBLK->pCMPSCBLK->pOp2 + 0, pGIBLK->pMEMBLK );
|
|
|
|
*(pGIBLK->pIndex + 7) = ( (U16) fw ) & 0x0FFF; fw >>= 12;
|
|
*(pGIBLK->pIndex + 6) = ( (U16) fw ) & 0x0FFF; fw >>= 12;
|
|
*(pGIBLK->pIndex + 5) = ( ((U16) fw) | (((U16) dw) << 8) ) & 0x0FFF; dw >>= 4;
|
|
*(pGIBLK->pIndex + 4) = ( (U16) dw ) & 0x0FFF; dw >>= 12;
|
|
*(pGIBLK->pIndex + 3) = ( (U16) dw ) & 0x0FFF; dw >>= 12;
|
|
*(pGIBLK->pIndex + 2) = ( (U16) dw ) & 0x0FFF; dw >>= 12;
|
|
*(pGIBLK->pIndex + 1) = ( (U16) dw ) & 0x0FFF; dw >>= 12;
|
|
*(pGIBLK->pIndex + 0) = ( (U16) dw );
|
|
|
|
return 12;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// 0...4...
|
|
// 77777777
|
|
//(8)
|
|
//
|
|
// 0...4...8..12..16..20..24..28..3
|
|
// 45555555555555666666666666677777
|
|
//(1) (13) (13) (5)
|
|
//
|
|
// 0...4...8..12..16..20..24..28..32..36..40..44..48..52..56..60..6
|
|
// 0000000000000111111111111122222222222223333333333333444444444444
|
|
// (13) (13) (13) (13) (12)
|
|
|
|
U8 (CMPSC_FASTCALL ARCH_DEP( Get8Index013 )) ( GIBLK* pGIBLK )
|
|
{
|
|
register U8 b;
|
|
register U32 fw;
|
|
register U64 dw;
|
|
|
|
if (pGIBLK->pCMPSCBLK->nLen2 < 13) return 0;
|
|
|
|
b = fetch_op_b ( pGIBLK->pCMPSCBLK->pOp2 + 12, pGIBLK->pMEMBLK );
|
|
fw = fetch_op_fw( pGIBLK->pCMPSCBLK->pOp2 + 8, pGIBLK->pMEMBLK );
|
|
dw = fetch_op_dw( pGIBLK->pCMPSCBLK->pOp2 + 0, pGIBLK->pMEMBLK );
|
|
|
|
*(pGIBLK->pIndex + 7) = ( ((U16) b) | (((U16) fw) << 8) ) & 0x1FFF; fw >>= 5;
|
|
*(pGIBLK->pIndex + 6) = ( (U16) fw ) & 0x1FFF; fw >>= 13;
|
|
*(pGIBLK->pIndex + 5) = ( (U16) fw ) & 0x1FFF; fw >>= 13;
|
|
*(pGIBLK->pIndex + 4) = ( ((U16) fw) | (((U16) dw) << 1) ) & 0x1FFF; dw >>= 12;
|
|
*(pGIBLK->pIndex + 3) = ( (U16) dw ) & 0x1FFF; dw >>= 13;
|
|
*(pGIBLK->pIndex + 2) = ( (U16) dw ) & 0x1FFF; dw >>= 13;
|
|
*(pGIBLK->pIndex + 1) = ( (U16) dw ) & 0x1FFF; dw >>= 13;
|
|
*(pGIBLK->pIndex + 0) = ( (U16) dw );
|
|
|
|
return 13;
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// (by CBN)
|
|
|
|
GetIndex* ARCH_DEP( GetIndexTab09 )[8] = { ARCH_DEP( GetIndex009 ), ARCH_DEP( GetIndex109 ), ARCH_DEP( GetIndex209 ), ARCH_DEP( GetIndex309 ), ARCH_DEP( GetIndex409 ), ARCH_DEP( GetIndex509 ), ARCH_DEP( GetIndex609 ), ARCH_DEP( GetIndex709 ) };
|
|
GetIndex* ARCH_DEP( GetIndexTab10 )[8] = { ARCH_DEP( GetIndex010 ), ARCH_DEP( GetIndex110 ), ARCH_DEP( GetIndex210 ), ARCH_DEP( GetIndex310 ), ARCH_DEP( GetIndex410 ), ARCH_DEP( GetIndex510 ), ARCH_DEP( GetIndex610 ), ARCH_DEP( GetIndex710 ) };
|
|
GetIndex* ARCH_DEP( GetIndexTab11 )[8] = { ARCH_DEP( GetIndex011 ), ARCH_DEP( GetIndex111 ), ARCH_DEP( GetIndex211 ), ARCH_DEP( GetIndex311 ), ARCH_DEP( GetIndex411 ), ARCH_DEP( GetIndex511 ), ARCH_DEP( GetIndex611 ), ARCH_DEP( GetIndex711 ) };
|
|
GetIndex* ARCH_DEP( GetIndexTab12 )[8] = { ARCH_DEP( GetIndex012 ), ARCH_DEP( GetIndex112 ), ARCH_DEP( GetIndex212 ), ARCH_DEP( GetIndex312 ), ARCH_DEP( GetIndex412 ), ARCH_DEP( GetIndex512 ), ARCH_DEP( GetIndex612 ), ARCH_DEP( GetIndex712 ) };
|
|
GetIndex* ARCH_DEP( GetIndexTab13 )[8] = { ARCH_DEP( GetIndex013 ), ARCH_DEP( GetIndex113 ), ARCH_DEP( GetIndex213 ), ARCH_DEP( GetIndex313 ), ARCH_DEP( GetIndex413 ), ARCH_DEP( GetIndex513 ), ARCH_DEP( GetIndex613 ), ARCH_DEP( GetIndex713 ) };
|
|
|
|
GetIndex* ARCH_DEP( Get8IndexTab09 )[8] = { ARCH_DEP( Get8Index009 ), NULL, NULL, NULL, NULL, NULL, NULL, NULL };
|
|
GetIndex* ARCH_DEP( Get8IndexTab10 )[8] = { ARCH_DEP( Get8Index010 ), NULL, NULL, NULL, NULL, NULL, NULL, NULL };
|
|
GetIndex* ARCH_DEP( Get8IndexTab11 )[8] = { ARCH_DEP( Get8Index011 ), NULL, NULL, NULL, NULL, NULL, NULL, NULL };
|
|
GetIndex* ARCH_DEP( Get8IndexTab12 )[8] = { ARCH_DEP( Get8Index012 ), NULL, NULL, NULL, NULL, NULL, NULL, NULL };
|
|
GetIndex* ARCH_DEP( Get8IndexTab13 )[8] = { ARCH_DEP( Get8Index013 ), NULL, NULL, NULL, NULL, NULL, NULL, NULL };
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// (by CDSS)
|
|
|
|
GetIndex** ARCH_DEP( GetIndexCDSSTab )[5] = { ARCH_DEP( GetIndexTab09 ),
|
|
ARCH_DEP( GetIndexTab10 ),
|
|
ARCH_DEP( GetIndexTab11 ),
|
|
ARCH_DEP( GetIndexTab12 ),
|
|
ARCH_DEP( GetIndexTab13 ) };
|
|
|
|
GetIndex** ARCH_DEP( Get8IndexCDSSTab )[5] = { ARCH_DEP( Get8IndexTab09 ),
|
|
ARCH_DEP( Get8IndexTab10 ),
|
|
ARCH_DEP( Get8IndexTab11 ),
|
|
ARCH_DEP( Get8IndexTab12 ),
|
|
ARCH_DEP( Get8IndexTab13 ) };
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
#endif /* FEATURE_COMPRESSION */
|
|
|
|
#ifndef _GEN_ARCH
|
|
#ifdef _ARCHMODE2
|
|
#define _GEN_ARCH _ARCHMODE2
|
|
#include "cmpscget.c"
|
|
#endif /* #ifdef _ARCHMODE2 */
|
|
#ifdef _ARCHMODE3
|
|
#undef _GEN_ARCH
|
|
#define _GEN_ARCH _ARCHMODE3
|
|
#include "cmpscget.c"
|
|
#endif /* #ifdef _ARCHMODE3 */
|
|
#endif /* #ifndef _GEN_ARCH */
|