Files
Microtransactions64/include/PR/gzsort.h
2020-12-03 20:19:03 -05:00

632 lines
19 KiB
C

/*---------------------------------------------------------------------*
Copyright (C) 1997-1998, Nintendo.
File gzsort.h
Coded by Yoshitaka Yasumoto. Jun 16, 1997.
$Id: gzsort.h,v 1.11 1998/01/06 01:28:21 yasu Exp $
*---------------------------------------------------------------------*/
#ifndef _GZSORT_H_
#define _GZSORT_H_
#ifdef _LANGUAGE_C_PLUS_PLUS
extern "C" {
#endif
/*===========================================================================*
* GBI Commands for ZSort microcode
*===========================================================================*/
/* GBI Header */
#define G_ZS_ZOBJ 0x80
#define G_ZS_RDPCMD 0x81
#define G_ZS_MOVEMEM 0xdc
#define G_ZS_SENDSIGNAL 0xda
#define G_ZS_WAITSIGNAL 0xd9
#define G_ZS_SETSUBDL 0xd8
#define G_ZS_LINKSUBDL 0xd7
#define G_ZS_MULT_MPMTX 0xd6
#define G_ZS_MTXCAT 0xd5
#define G_ZS_MTXTRNSP 0xd4
#define G_ZS_LIGHTING_L 0xd3 /* Not use */
#define G_ZS_LIGHTING 0xd2
#define G_ZS_XFMLIGHT 0xd1
#define G_ZS_INTERPOLATE 0xd0
/*------------------------------------------------------------------------*
* case_G_ZOBJ
* +--------+--------+--------+--------+
* | Pointr for zobj0:32 |
* +--------+--------+--------+--------+
* | Pointr for zobj1:32 |
* +--------+--------+--------+--------+
* Draw zobject links
*/
#define gSPZObject(pkt, objA, objB) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = (unsigned int)(objA); \
_g->words.w1 = (unsigned int)(objB); \
}
#define gsSPZObject(objA, objB) \
{ \
(unsigned int)(objA), (unsigned int)(objB) \
}
/*------------------------------------------------------------------------*
* case_G_RDPCMD
* +--------+--------+--------+--------+
* | RDPCMD | 0 |
* +--------+--------+--------+--------+
* | Pointr for rdpcmd:32 |
* +--------+--------+--------+--------+
* Submit rdp cmd
*/
#define gSPZRdpCmd(pkt, cmd) gImmp1((pkt), G_ZS_RDPCMD, (cmd))
#define gsSPZRdpCmd(cmd) gsImmp1(G_ZS_RDPCMD, (cmd))
/*------------------------------------------------------------------------*
* case_G_MOVEMEM
* +--------+--------++-------+-+----+-+
* |MOVEMEM | Len:9 | Ofs:9 |ID:5|F|
* +--------+--------++-------+-+----+-+
* | Pointr for RDRAM:32 |
* +--------+--------+--------+--------+
* Read/Write DMEM
*/
#define GZM_USER0 0
#define GZM_USER1 2
#define GZM_MMTX 4
#define GZM_PMTX 6
#define GZM_MPMTX 8
#define GZM_OTHERMODE 10
#define GZM_VIEWPORT 12
#define GZF_LOAD 0
#define GZF_SAVE 1
#define gSPZMoveMem(pkt, id, ofs, len, buffer, flag) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(G_ZS_MOVEMEM, 24, 8)| \
_SHIFTL(((len)-1)>>3, 15, 9)| \
_SHIFTL((ofs)>>3, 6, 9)|(id)|(flag); \
_g->words.w1 = (unsigned int)(buffer); \
}
#define gsSPZMoveMem(id, ofs, len, buffer, flag) \
{ \
_SHIFTL(G_ZS_MOVEMEM, 24, 8)| \
_SHIFTL(((len)-1)>>3, 15, 9)| \
_SHIFTL((ofs)>>3, 6, 9)|(id)|(flag), \
(unsigned int)(buffer) \
}
/*------------------------------------------------------------------------*/
#define gSPZSetUMem(pkt, umem, size, adrs) \
gSPZMoveMem((pkt),GZM_USER0,(umem),(size),(adrs),GZF_LOAD)
#define gsSPZSetUMem(umem, size, adrs) \
gsSPZMoveMem(GZM_USER0,(umem),(size),(adrs),GZF_LOAD)
#define gSPZGetUMem(pkt, umem, size, adrs) \
gSPZMoveMem((pkt),GZM_USER0,(umem),(size),(adrs),GZF_SAVE)
#define gsSPZGetUMem(umem, size, adrs) \
gsSPZMoveMem(GZM_USER0,(umem),(size),(adrs),GZF_SAVE)
/*------------------------------------------------------------------------*/
#define gSPZSetMtx(pkt, mid, mp) \
gSPZMoveMem((pkt), (mid), 0, sizeof(Mtx), (mp), GZF_LOAD)
#define gsSPZSetMtx(mid, mp) \
gsSPZMoveMem((mid), 0, sizeof(Mtx), (mp), GZF_LOAD)
/*------------------------------------------------------------------------*/
#define gSPZGetMtx(pkt, mid, mp) \
gSPZMoveMem((pkt), (mid), 0, sizeof(Mtx), (mp), GZF_SAVE)
#define gsSPZGetMtx(mid, mp) \
gsSPZMoveMem((mid), 0, sizeof(Mtx), (mp), GZF_SAVE)
/*------------------------------------------------------------------------*/
#define gSPZSetAmbient(pkt, umem, lights) \
gSPZSetUMem((pkt),(umem),ZSIZE_AMBIENT,(lights))
#define gsSPZSetAmbient(umem, lights) \
gsSPZSetUMem((umem),ZSIZE_AMBIENT,(lights))
/*------------------------------------------------------------------------*/
#define gSPZSetDefuse(pkt, umem, lid, lights) \
gSPZSetUMem((pkt),(umem)+ZSIZE_AMBIENT+(lid)*ZSIZE_LIGHT, \
ZSIZE_DEFUSE, (lights))
#define gsSPZSetDefuse(umem, lid, lights) \
gsSPZSetUMem((umem)+ZSIZE_AMBIENT+(lid)*ZSIZE_LIGHT, \
ZSIZE_DEFUSE, (lights))
/*------------------------------------------------------------------------*/
#define gSPZSetLookAt(pkt, umem, lid, lookat) \
{ gSPZSetUMem((pkt), (umem)+ZSIZE_AMBIENT+((lid)+0)*ZSIZE_LIGHT, \
ZSIZE_DEFUSE, \
((u32)(lookat))+sizeof(Light)*0); \
gSPZSetUMem((pkt), (umem)+ZSIZE_AMBIENT+((lid)+1)*ZSIZE_LIGHT, \
ZSIZE_DEFUSE, \
((u32)(lookat))+sizeof(Light)*1); }
#define gsSPZSetLookAt(umem, lid, lookat) \
gsSPZSetUMem((umem)+ZSIZE_AMBIENT+((lid)+0)*ZSIZE_LIGHT, \
ZSIZE_DEFUSE, \
((u32)(lookat))+sizeof(Light)*0), \
gsSPZSetUMem((umem)+ZSIZE_AMBIENT+((lid)+1)*ZSIZE_LIGHT, \
ZSIZE_DEFUSE, \
((u32)(lookat))+sizeof(Light)*1)
/*------------------------------------------------------------------------*/
#define gSPZViewport(pkt, v) \
gSPZMoveMem((pkt), GZM_VIEWPORT, 0, 16, (v), GZF_LOAD)
#define gsSPZViewport(v) \
gsSPZMoveMem(GZM_VIEWPORT, 0, 16, (v), GZF_LOAD)
#define GZ_VIEWPORT_FOG_S(in, out) (0x400000/((out)-(in)))
#define GZ_VIEWPORT_FOG_T(in, out) ((0x200*(out))/((in)-(out)))
/*------------------------------------------------------------------------*
* case_G_SENDSIGNAL
* +--------+--------+--------+--------+
* |Send SIG| Parameter1:24 |
* +--------+--------+--------+--------+
* | Parameter2:32 |
* +--------+--------+--------+--------+
* Send signal to CPU
*/
#define GZ_INTR_SPBRK1 SP_STATUS_RSPSIGNAL
#define GZ_INTR_SPBRK2 \
(SP_SET_RSPSIGNAL|SP_CLR_TASKDONE|SP_CLR_YIELDED|SP_SET_INTR)
#define gSPZSendMessage(pkt) \
gDma0p((pkt), G_ZS_SENDSIGNAL, GZ_INTR_SPBRK2, GZ_INTR_SPBRK1)
#define gsSPZSendMessage() \
gsDma0p(G_ZS_SENDSIGNAL, GZ_INTR_SPBRK2, GZ_INTR_SPBRK1)
/*------------------------------------------------------------------------*
* case_G_WAITSIGNAL
* +--------+--------+--------+--------+
* |Wait SIG| Phy Adrs of signal buf:24|
* +--------+--------+--------+--------+
* | Parameter:32 |
* +--------+--------+--------+--------+
* Wait signal from CPU
*/
#define gSPZWaitSignal(pkt, adrs, param) \
gDma0p((pkt), G_ZS_WAITSIGNAL, (param), (adrs))
#define gsSPZWaitSignal(adrs, param) \
{ \
(unsigned int)((char *)(adrs)+((G_ZS_WAITSIGNAL-0x80)<<24)), \
(unsigned int)(param) \
}
#define GZ_SENDSIGNAL(adrs,val) { \
IO_WRITE(&(((zSignal *)(adrs))->t.signal), (val)); \
IO_WRITE(SP_STATUS_REG, SP_SET_CPUSIGNAL); \
}
/*------------------------------------------------------------------------*
* case_G_SETSUBDL
* +--------+--------+--------+--------+
* |SETSUBDL| 0 |
* +--------+--------+--------+--------+
* | DL:32 |
* +--------+--------+--------+--------+
*/
#define gSPZSetSubDL(pkt, dl) gImmp1((pkt), G_ZS_SETSUBDL, (u32)(dl))
#define gsSPZSetSubDL(dl) gsImmp1(G_ZS_SETSUBDL, (u32)(dl))
/*------------------------------------------------------------------------*
* case_G_LINKSUBDL
* +--------+--------+--------+--------+
* |LINKSUBD| 0 |
* +--------+--------+--------+--------+
* | 0 |
* +--------+--------+--------+--------+
*/
#define gSPZLinkSubDL(pkt) gImmp0((pkt), G_ZS_LINKSUBDL)
#define gsSPZLinkSubDL() gsImmp0(G_ZS_LINKSUBDL)
/*------------------------------------------------------------------------*
* case_G_MULT_MPMTX
* +--------+--------+--------+--------+
* |MULT_MPM| 0 | Mid:8 |
* +--------+--------+----+---+--------+
* | Num:8 | Src:12 | Dest:12 |
* +--------+-------------+------------+
*/
#define gSPZMultMPMtx(pkt, mid, src, num, dest) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(G_ZS_MULT_MPMTX,24,8)|_SHIFTL((mid),0,8); \
_g->words.w1 = _SHIFTL(((num)-1), 24, 8)| \
_SHIFTL((src)+1024,12,12)|_SHIFTL((dest)+1024, 0,12); \
}
#define gsSPZMultMPMtx(mid, src, num, dest) \
{ \
_SHIFTL(G_ZS_MULT_MPMTX,24,8)|_SHIFTL((mid),0, 8), \
_SHIFTL(((num)-1), 24, 8)| \
_SHIFTL((src)+1024,12,12)|_SHIFTL((dest)+1024,0,12) \
}
/*------------------------------------------------------------------------*
* case_G_MTXCAT
* +--------+--------+--------+--------+
* | MTXCAT | 0 | 0 | MidS:8 |
* +--------+--------+--------+--------+
* | 0 | MidT:8 | 0 | MidD:8 |
* +--------+--------+--------+--------+
*/
#define gSPZMtxCat(pkt, midS, midT, midD) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(G_ZS_MTXCAT,24,8)|_SHIFTL((midS), 0,8); \
_g->words.w1 = _SHIFTL((midT), 16,8)|_SHIFTL((midD), 0,8); \
}
#define gsSPZMtxCat(midS, midT, midD) \
{ \
_SHIFTL(G_ZS_MTXCAT,24,8)|_SHIFTL((midS), 0,8), \
_SHIFTL((midT), 16,8)|_SHIFTL((midD), 0,8) \
}
/*------------------------------------------------------------------------*
* case_G_MTXTRNSP
* +--------+--------+--------+--------+
* |MTXTRNSP| 0 | 0 | 0 |
* +--------+--------+--------+--------+
* | 0 | 0 | 0 | Mid:8 |
* +--------+--------+--------+--------+
*/
#define gSPZMtxTrnsp3x3(pkt, mid) gImmp1((pkt), G_ZS_MTXTRNSP, (mid))
#define gsSPZMtxTrnsp3x3(mid) gsImmp1(G_ZS_MTXTRNSP, (mid))
/*------------------------------------------------------------------------*
* case_G_XFMLIGHT
* +--------+--------+--------+--------+
* |XFMLIGHT| 0 | Mid:8 |
* +--------+----+---+----+---+--------+
* | 0 | Lnum:8 | Lptr:12 |
* +--------+----+---+----+---+--------+
*/
#define gSPZXfmLights(pkt, mid, umem, lnum) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(G_ZS_XFMLIGHT,24,8)|(mid); \
_g->words.w1 = _SHIFTL((lnum)-1,12,8)|_SHIFTL((umem)+1024, 0,12); \
}
#define gsSPZXfmLights(mid, umem, lnum) \
{ \
_SHIFTL(G_ZS_XFMLIGHT,24,8)|(mid), \
_SHIFTL((lnum)-1,12,8)|_SHIFTL((umem)+1024, 0,12) \
}
/*------------------------------------------------------------------------*
* case_G_LIGHTING
* +--------+-------------+------------+
* |LIGHTING| Color:12 | Norm:12 |
* +--------+-------------+------------+
* | Num:8 | DestColor:12| DestTxtr:12|
* +--------+-------------+------------+
* gSPZLight/gSPZLightMaterial
*/
#define gSPZLightMaterial(pkt, csrc, nsrc, num, cdest, tdest) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(G_ZS_LIGHTING,24,8)| \
_SHIFTL((csrc)+1024, 12,12)|_SHIFTL((nsrc) +1024,0,12);\
_g->words.w1 = _SHIFTL((num)-1, 24, 8)| \
_SHIFTL((cdest)+1024,12,12)|_SHIFTL((tdest)+1024,0,12);\
}
#define gsSPZLightMaterial(csrc, nsrc, num, cdest, tdest) \
{ \
_SHIFTL(G_ZS_LIGHTING,24,8)| \
_SHIFTL((csrc)+1024, 12,12)|_SHIFTL((nsrc) +1024,0,12), \
_SHIFTL((num)-1, 24, 8)| \
_SHIFTL((cdest)+1024,12,12)|_SHIFTL((tdest)+1024,0,12) \
}
#define gSPZLight(pkt, nsrc, num, cdest, tdest) \
gSPZLightMaterial((pkt),-16,(nsrc),(num),(cdest),(tdest))
#define gsSPZLight(nsrc, num, cdest, tdest) \
gsSPZLightMaterial(-16,(nsrc),(num),(cdest),(tdest))
/*------------------------------------------------------------------------*
* case_G_INTERPOLATE
* +--------+--------+-----------------+
* |INTERPLT| Type:8 | Factor:16 |
* +--------+--------+----+------------+
* | Num:8 | Src1/Dest:12| Src2:12 |
* +--------+-------------+------------+
*/
#define GZ_INTRP_S16 0
#define GZ_INTRP_S8 2
#define GZ_INTRP_U8 4
#define gSPZMix(pkt, src1, src2, num, factor, type) \
{ \
Gfx *_g = (Gfx *)(pkt); \
_g->words.w0 = _SHIFTL(G_ZS_INTERPOLATE,24,8)| \
_SHIFTL((type),16, 8)|_SHIFTL((factor),0,16); \
_g->words.w1 = _SHIFTL((num)/8-1,24,8)| \
_SHIFTL((src1),12,12)|_SHIFTL((src2), 0,12); \
}
#define gsSPZMix(src1, src2, num, factor, type) \
{ \
_SHIFTL(G_ZS_INTERPOLATE,24,8)| \
_SHIFTL((type),16, 8)|_SHIFTL((factor),0,16), \
_SHIFTL(((num)-1)/8,24,8)| \
_SHIFTL((src1),12,12)|_SHIFTL((src2), 0,12) \
}
#define gSPZMixS16(pkt, src1, src2, num, factor) \
gSPZMix((pkt), (src1), (src2), (num), (factor), GZ_INTRP_S16)
#define gSPZMixS8(pkt, src1, src2, num, factor) \
gSPZMix((pkt), (src1), (src2), (num), (factor), GZ_INTRP_S8)
#define gSPZMixU8(pkt, src1, src2, num, factor) \
gSPZMix((pkt), (src1), (src2), (num), (factor), GZ_INTRP_U8)
#define gsSPZMixS16(src1, src2, num, factor) \
gsSPZMix((src1), (src2), (num), (factor), GZ_INTRP_S16)
#define gsSPZMixS8(src1, src2, num, factor) \
gsSPZMix((src1), (src2), (num), (factor), GZ_INTRP_S8)
#define gsSPZMixU8(src1, src2, num, factor) \
gsSPZMix((src1), (src2), (num), (factor), GZ_INTRP_U8)
/*------------------------------------------------------------------------*
* Compatible GBIs
*------------------------------------------------------------------------*/
#define gSPZSegment(pkt, segment, base) gSPSegment((pkt), (segment), (base))
#define gsSPZSegment(segment, base) gsSPSegment((segment), (base))
#define gSPZPerspNormalize(pkt, s) gSPPerspNormalize((pkt), (s))
#define gsSPZPerspNormalize(s) gsSPPerspNormalize(s)
#define gSPZDisplayList(pkt, dl) gSPDisplayList((pkt), (dl))
#define gsSPZDisplayList(dl) gsSPDisplayList(dl)
#define gSPZEndDisplayList(pkt) gSPEndDisplayList(pkt)
#define gsSPZEndDisplayList() gsSPEndDisplayList()
/*===========================================================================*
* Data structures for ZSort microcode
*===========================================================================*/
#define G_ZOBJ_NONE 0x80000000
/* ZObject IDs */
#define ZH_NULL 0
#define ZH_SHTRI 1
#define ZH_TXTRI 2
#define ZH_SHQUAD 3
#define ZH_TXQUAD 4
#define ZHDR(pointer, type) ((type)+((u32)(pointer)))
/*===========================================================================*
* Useful MACRO
*===========================================================================*/
#define guZFixLookAt(lp) \
{ (lp)->l[1].l.col[1] = (lp)->l[1].l.colc[1] = 0x00; }
#if (defined(_LANGUAGE_C)||defined(_LANGUAGE_C_PLUS_PLUS))
/*------------------------------------------------------------------------*/
/* ZMath: Vertex structure format */
/*-----------------------------------------------------*/
#define ZSIZE_VSRC 6
typedef struct { s16 x,y,z; } zVtxSrc;
/*-----------------------------------------------------*/
#define ZSIZE_VDEST 16
typedef struct {
s16 sx, sy;
s32 invw;
s16 xi, yi;
u8 cc;
u8 fog;
s16 wi;
} zVtxDest;
#define GZ_CC_RIGHT 0x01
#define GZ_CC_TOP 0x02
#define GZ_CC_NEAR 0x04
#define GZ_CC_LEFT 0x10
#define GZ_CC_BOTTOM 0x20
#define GZ_CC_FAR 0x40
/*-----------------------------------------------------*/
#define ZSIZE_NSRC 3
typedef struct { s8 nx,ny,nz; } zNorm;
/*-----------------------------------------------------*/
#define ZSIZE_CSRC 4
#define ZSIZE_CDEST 4
typedef struct { u8 r, g, b, a; } zColor_t;
typedef union {
zColor_t n;
u32 w;
} zColor;
/*-----------------------------------------------------*/
#define ZSIZE_TDEST 4
typedef struct { s16 s, t; } zTxtr_t;
typedef union {
zTxtr_t n;
u32 w;
} zTxtr;
/*-----------------------------------------------------*/
#define ZSIZE_LIGHT 24
#define ZSIZE_DEFUSE 16
#define ZSIZE_AMBIENT 8
/*------------------------------------------------------------------------*/
/* ZObject: Common header */
typedef struct {
u32 header;
Gfx *rdpcmd1;
} zHeader_t;
typedef union {
zHeader_t t;
u64 force_structure_alignment;
} zHeader;
/*------------------------------------------------------------------------*/
/* ZObject: Null Node */
typedef struct {
zHeader *header;
Gfx *rdpcmd1;
Gfx *rdpcmd2;
Gfx *rdpcmd3;
} zNull_t;
typedef union {
zNull_t t;
u64 force_structure_alignment;
} zNull;
/*------------------------------------------------------------------------*/
/* ZObject: Smooth Shaded Triangle */
typedef struct {
s16 x, y;
u8 r, g, b, a;
} zShVtx;
/*------------------------------------------------------------------------*/
typedef struct {
zHeader *header;
Gfx *rdpcmd1;
zShVtx v[3];
} zShTri_t;
typedef struct {
zHeader *header;
Gfx *rdpcmd1;
u32 xy0, clr0;
u32 xy1, clr1;
u32 xy2, clr2;
} zShTri_w;
typedef union {
zShTri_t t;
zShTri_w w;
u64 force_structure_alignment;
} zShTri;
/*------------------------------------------------------------------------*/
/* ZObject: Smooth Shaded Quadrangle */
typedef struct {
zHeader *header;
Gfx *rdpcmd1;
zShVtx v[4];
} zShQuad_t;
typedef struct {
zHeader *header;
Gfx *rdpcmd1;
u32 xy0, clr0;
u32 xy1, clr1;
u32 xy2, clr2;
u32 xy3, clr3;
} zShQuad_w;
typedef union {
zShQuad_t t;
zShQuad_w w;
u64 force_structure_alignment;
} zShQuad;
/*------------------------------------------------------------------------*/
/* ZObject: Smooth Shaded and Texture Mapped Triangle */
typedef struct {
s16 x, y;
u8 r, g, b, a;
s16 s, t;
s32 invw;
} zTxVtx;
/*------------------------------------------------------------------------*/
typedef struct {
zHeader *header;
Gfx *rdpcmd1;
Gfx *rdpcmd2;
Gfx *rdpcmd3;
zTxVtx v[3];
} zTxTri_t;
typedef struct {
zHeader *header;
Gfx *rdpcmd1;
Gfx *rdpcmd2;
Gfx *rdpcmd3;
u32 xy0, clr0, st0, invw0;
u32 xy1, clr1, st1, invw1;
u32 xy2, clr2, st2, invw2;
} zTxTri_w;
typedef union {
zTxTri_t t;
zTxTri_w w;
u64 force_structure_alignment;
} zTxTri;
/*------------------------------------------------------------------------*/
/* ZObject: Smooth Shaded and Texture Mapped Quadrangle */
typedef struct {
zHeader *header;
Gfx *rdpcmd1;
Gfx *rdpcmd2;
Gfx *rdpcmd3;
zTxVtx v[4];
} zTxQuad_t;
typedef struct {
zHeader *header;
Gfx *rdpcmd1;
Gfx *rdpcmd2;
Gfx *rdpcmd3;
u32 xy0, clr0, st0, invw0;
u32 xy1, clr1, st1, invw1;
u32 xy2, clr2, st2, invw2;
u32 xy3, clr3, st3, invw3;
} zTxQuad_w;
typedef union {
zTxQuad_t t;
zTxQuad_w w;
u64 force_structure_alignment;
} zTxQuad;
/*------------------------------------------------------------------------*/
typedef struct {
u32 signal;
u32 padding;
} zSignal_t;
typedef union {
zSignal_t t;
u64 force_structure_alignment;
} zSignal;
/*===========================================================================*
* External functions
*===========================================================================*/
extern u64 gspZSort_fifoTextStart[], gspZSort_fifoTextEnd[];
extern u64 gspZSort_fifoDataStart[], gspZSort_fifoDataEnd[];
extern u64 gspZSort_pl_fifoTextStart[], gspZSort_pl_fifoTextEnd[];
extern u64 gspZSort_pl_fifoDataStart[], gspZSort_pl_fifoDataEnd[];
#endif
#ifdef _LANGUAGE_C_PLUS_PLUS
}
#endif
#endif /* _GZSORT_H_ */
/*======== End of gzsort.h ========*/