/* basic memory operations */ #include "igctypes.h" #include "emcarray.h" --{{{ pixel memory access macros #define read_pixmem_bit(pixel,bit) (1 & (pixel->memory[((bit)>>3)] >> ((bit) & 7))) #define write_pixmem_bit(pixel,bit,val) \ do { \ if ((val)) \ pixel->memory[((bit)>>3)]|=(1<<((bit)&7)); \ else \ pixel->memory[((bit)>>3)]&=~(1<<((bit)&7)); \ } while (0) --}}} --{{{ int read_pixmem_word ( pixel_memory *pixel, int bit0, int bits, int sextend ) int read_pixmem_word ( pixel_memory *pixel, int bit0, int bits, int sextend ) { int res=0; register int bitval, bit, shift=0; for ( bit=0; bit>=1; } } --}}} --{{{ int eval_ltree ( pixel_memory *pixel, int x, int y, float A, float B, float C ) int eval_ltree ( pixel_memory *pixel, int x, int y, float A, float B, float C ) { float eval, fx, fy; fx=(float) x; fy=(float) y; eval=(fx*A) + (fy*B) + C; return (int) eval; } --}}} --{{{ int eval_qtree ( pixel_memory *pixel, int eval_qtree ( pixel_memory *pixel, int x, int y, float A, float B, float C, float D, float E, float F ) { float eval, fx, fy; fx=(float) x; fy=(float) y; eval=(fx*A) + (fy*B) + C + (fx*fx*D) + (fy*fy*E) + (fx*fy*F); return (int) eval; } --}}} /* IGC command set ! */ --{{{ INSTRUCTIONS TO MODIFY THE ENABLE REGISTER /* how to make this easier? i need to pass a totally general function to each pixel in the tile, so I need */ typedef pixel_function ( --{{{ void FBITS (int n ) void FBITS (int n ) { fracBits = n; } --}}} --{{{ void CLRENABS () void CLRENABS () { int x, y; for (x=0; xarray[x+(y<enable=0; } } } --}}} --{{{ void SETENABS () void SETENABS () { { int x, y; for (x=0; xarray[x+(y<enable=1; } } } } --}}} --{{{ void ENABINV () void ENABINV () { { int x, y; for (x=0; xarray[x+(y<enable=^1; } } } } --}}} --{{{ void MEMintoENAB () void MEMintoENAB () { } --}}} --{{{ void TREEeqZERO () void TREEeqZERO () { } --}}} --{{{ void TREEqeZERO () void TREEqeZERO () { } --}}} --{{{ void TREEltZERO () void TREEltZERO () { } --}}} --{{{ void MESH ( int len ) void MESH ( int len ) { } --}}} --{{{ void GRID ( int len ) void GRID ( int len ) { } --}}} --{{{ void MEMeqZERO ( int src, int slen ) void MEMeqZERO ( int src, int slen ) { } --}}} --{{{ void MEMeqONES ( int src, int slen ) void MEMeqONES ( int src, int slen ) { } --}}} --{{{ void MEMneZERO ( int src, int slen ) void MEMneZERO ( int src, int slen ) { } --}}} --{{{ void MEMeqSCA ( int src, int slen ) void MEMeqSCA ( int src, int slen ) { } --}}} --{{{ void MEMgeSCA ( int src, int slen ) void MEMgeSCA ( int src, int slen ) { } --}}} --{{{ void MEMgtSCA ( int src, int slen ) void MEMgtSCA ( int src, int slen ) { } --}}} --{{{ void MEMeqMEM ( int lsrc, int src, int slen ) void MEMeqMEM ( int lsrc, int src, int slen ) { } --}}} --{{{ void MEMneMEM ( int lsrc, int src, int slen ) void MEMneMEM ( int lsrc, int src, int slen ) { } --}}} --{{{ void MEMgeMEM ( int lsrc, int src, int slen ) void MEMgeMEM ( int lsrc, int src, int slen ) { } --}}} --{{{ void MEMgtMEM ( int lsrc, int src, int slen ) void MEMgtMEM ( int lsrc, int src, int slen ) { } --}}} --{{{ void MEM2geMEM2 ( int lsrc, int src, int slen ) void MEM2geMEM2 ( int lsrc, int src, int slen ) { } --}}} --{{{ void MEM2gtMEM2 ( int lsrc, int src, int slen ) void MEM2gtMEM2 ( int lsrc, int src, int slen ) { } --}}} --{{{ void MEMeqTREE ( int src, int len ) void MEMeqTREE ( int src, int len ) { } --}}} --{{{ void MEMneTREE ( int src, int len ) void MEMneTREE ( int src, int len ) { } --}}} --{{{ void MEMleTREE ( int src, int len ) void MEMleTREE ( int src, int len ) { } --}}} --{{{ void MEMltTREE ( int src, int len ) void MEMltTREE ( int src, int len ) { } --}}} --{{{ void MEMgeTREE ( int src, int len ) void MEMgeTREE ( int src, int len ) { } --}}} --{{{ void MEMgtTREE ( int src, int len ) void MEMgtTREE ( int src, int len ) { } --}}} --{{{ void ENABandeqMEM ( int src ) void ENABandeqMEM ( int src ) { } --}}} --{{{ void ENABandeqMEMBAR ( int src ) void ENABandeqMEMBAR ( int src ) { } --}}} --{{{ void ENABoreqMEM ( int src ) void ENABoreqMEM ( int src ) { } --}}} --{{{ void ENABxoreqMEM ( int src ) void ENABxoreqMEM ( int src ) { } --}}} --{{{ void CRYintoENAB () void CRYintoENAB () { } --}}} --{{{ void ENABoreqCRY () void ENABoreqCRY () { } --}}} --}}} --{{{ INSTRUCTIONS TO STORE THE ENABLE REGISTER --{{{ void ENABintoMEM ( int dst ) void ENABintoMEM ( int dst ) { } --}}} --{{{ void MEMoreqENAB ( int dst ) void MEMoreqENAB ( int dst ) { } --}}} --{{{ void MEMandeqENAB ( int dst ) void MEMandeqENAB ( int dst ) { } --}}} --{{{ void ENABintoCRY () void ENABintoCRY () { } --}}} --}}} --{{{ ARITHMETIC AND LOGICAL INSTRUCTIONS /* all memory writes are contioned by the enable register */ --{{{ void CLEAR ( int dst, int dlen) void CLEAR ( int dst, int dlen) { } --}}} --{{{ void SET ( int dst, int dlen) void SET ( int dst, int dlen) { } --}}} --{{{ void CLRCRY () void CLRCRY () { } --}}} --{{{ void TREEintoMEM ( int dst, int len ) void TREEintoMEM ( int dst, int len ) { } --}}} --{{{ void TREEBARintoMEM ( int dst, int len ) void TREEBARintoMEM ( int dst, int len ) { } --}}} --{{{ void TREEclmpintoMEM ( int dst, int len ) void TREEclmpintoMEM ( int dst, int len ) { } --}}} --{{{ void SCAintoMEM ( int dst, int len ) void SCAintoMEM ( int dst, int len ) { } --}}} --{{{ void CPY ( int dst, int src, int len ) void CPY ( int dst, int src, int len ) { } --}}} --{{{ void SWAP ( int dst, int src, int len ) void SWAP ( int dst, int src, int len ) { } --}}} --{{{ void INC ( int dst, int src, int len ) void INC ( int dst, int src, int len ) { } --}}} --{{{ void DEC ( int dst, int src, int len ) void DEC ( int dst, int src, int len ) { } --}}} --{{{ void SHIFTL ( int dst, int src, int len, int n ) void SHIFTL ( int dst, int src, int len, int n ) { } --}}} --{{{ void SHIFTR ( int dst, int src, int dlen, int slen, int n ) void SHIFTR ( int dst, int src, int dlen, int slen, int n ) { } --}}} --{{{ void INVERT ( int dst, int src, int dlen ) void INVERT ( int dst, int src, int dlen ) { } --}}} --{{{ void NEGATE ( int dst, int src, int dlen ) void NEGATE ( int dst, int src, int dlen ) { } --}}} --{{{ void MEMpluseqSCA ( int dst, int src, int dlen ) void MEMpluseqSCA ( int dst, int src, int dlen ) { } --}}} --{{{ void MEMplusMEM ( int dst, int lsrc, int src, int dlen, int slen ) void MEMplusMEM ( int dst, int lsrc, int src, int dlen, int slen ) { } --}}} --{{{ void MEMpluseqMEM ( int dst, int src, int dlen, int slen ) void MEMpluseqMEM ( int dst, int src, int dlen, int slen ) { } --}}} --{{{ void MEMclmppluseqMEM ( int dst, int src, int dlen, int tmp ) void MEMclmppluseqMEM ( int dst, int src, int dlen, int tmp ) { } --}}} --{{{ void MEMminusMEM ( int dst, int lsrc, int src, int dlen, int slen ) void MEMminusMEM ( int dst, int lsrc, int src, int dlen, int slen ) { } --}}} --{{{ void MEMminuseqMEM ( int dst, int src, int dlen, int slen ) void MEMminuseqMEM ( int dst, int src, int dlen, int slen ) { } --}}} --{{{ void MEMplusMEM2 ( int dst, int lsrc, int src, int dlen, int slen ) void MEMplusMEM2 ( int dst, int lsrc, int src, int dlen, int slen ) { } --}}} --{{{ void MEMpluseqMEM2 ( int dst, int src, int dlen, int slen ) void MEMpluseqMEM2 ( int dst, int src, int dlen, int slen ) { } --}}} --{{{ void MEM2clmppluseqMEM2 ( int dst, int src, int dlen, int tmp ) void MEM2clmppluseqMEM2 ( int dst, int src, int dlen, int tmp ) { } --}}} --{{{ void MEMminusMEM2 ( int dst, int lsrc, int src, int dlen, int slen ) void MEMminusMEM2 ( int dst, int lsrc, int src, int dlen, int slen ) { } --}}} --{{{ void MEMminuseqMEM2 ( int dst, int src, int dlen, int slen ) void MEMminuseqMEM2 ( int dst, int src, int dlen, int slen ) { } --}}} --{{{ void MEMandMEM ( int dst, int lsrc, int src, int dlen ) void MEMandMEM ( int dst, int lsrc, int src, int dlen ) { } --}}} --{{{ void MEMandeqMEM ( int dst, int src, int dlen ) void MEMandeqMEM ( int dst, int src, int dlen ) { } --}}} --{{{ void MEMorMEM ( int dst, int lsrc, int src, int dlen ) void MEMorMEM ( int dst, int lsrc, int src, int dlen ) { } --}}} --{{{ void MEMoreqMEM ( int dst, int src, int dlen ) void MEMoreqMEM ( int dst, int src, int dlen ) { } --}}} --{{{ void MEMxorMEM ( int dst, int lsrc, int src, int dlen ) void MEMxorMEM ( int dst, int lsrc, int src, int dlen ) { } --}}} --{{{ void MEMxoreqMEM ( int dst, int src, int dlen ) void MEMxoreqMEM ( int dst, int src, int dlen ) { } --}}} --{{{ void MEMpluseqTREE ( int dst, int src, int len ) void MEMpluseqTREE ( int dst, int src, int len ) { } --}}} --{{{ void TREEminusMEM ( int dst, int src, int len ) void TREEminusMEM ( int dst, int src, int len ) { } --}}} --{{{ void MEMandTREE ( int dst, int src, int len ) void MEMandTREE ( int dst, int src, int len ) { } --}}} --{{{ void MEMorTREE ( int dst, int src, int len ) void MEMorTREE ( int dst, int src, int len ) { } --}}} --{{{ void MEMxorTREE ( int dst, int src, int len ) void MEMxorTREE ( int dst, int src, int len ) { } --}}} --{{{ void CRYintoMEM ( int dst ) void CRYintoMEM ( int dst ) { } --}}} --}}} --{{{ SPECIAL INSTRUCTIONS --{{{ void FTECT ( int dst, int len ) void FTECT () { } --}}} --{{{ void FEDGE () void FEDGE () { } --}}} --{{{ void SEDGE ( int src ) void SEDGE ( int src ) { } --}}} --{{{ void FEDGEBAR () void FEDGEBAR () { } --}}} --{{{ void SEDGEBAR ( int src ) void SEDGEBAR ( int src ) { } --}}} --{{{ void EDGE2 () void EDGE2 () { } --}}} --{{{ void STRIPEDGE ( int src, int dst ) void STRIPEDGE ( int src, int dst ) { } --}}} --{{{ void MEMEDGE ( int dst ) void MEMEDGE ( int dst ) { } --}}} --{{{ void FCMEMA ( int src, int len ) void FCMEMA ( int src, int len ) { } --}}} --{{{ void SCMEMA ( int src, int len, int aux ) void SCMEMA ( int src, int len, int aux ) { } --}}} --{{{ void OVFIX ( int dst, int dlen, int tmp ) void OVFIX ( int dst, int dlen, int tmp ) { } --}}} --{{{ void TBLENTRY ( int dst, int src, int dlen, int slen ) void TBLENTRY ( int dst, int src, int dlen, int slen ) { } --}}} --{{{ void SPLAT ( int dst, int len, int tmp ) void SPLAT ( int dst, int len, int tmp ) { } --}}} --}}} --{{{ INITIALIZATION INSTRUCTIONS - not impl --}}}