Annotation of uae/src/genblitter.c, revision 1.1

1.1     ! root        1:  /* 
        !             2:   * UAE - The Un*x Amiga Emulator
        !             3:   * 
        !             4:   * Optimized blitter minterm function generator
        !             5:   * 
        !             6:   * Copyright 1995,1996 Bernd Schmidt
        !             7:   * Copyright 1996 Alessandro Bissacco
        !             8:   */
        !             9: 
        !            10: #include "sysconfig.h"
        !            11: #include "sysdeps.h"
        !            12: 
        !            13: #include "config.h"
        !            14: #include "options.h"
        !            15: /*#include "custom.h"*/
        !            16: 
        !            17: UWORD dmacon;
        !            18: /* Here is the minterm table used in blitter function generation */
        !            19:  
        !            20: static unsigned char blttbl[]= {
        !            21:     0x00, 0x0a, 0x2a, 0x30, 0x3a, 0x3c, 0x4a, 0x6a, 0x8a, 0x8c, 0x9a, 0xa8,
        !            22:     0xaa, 0xb1, 0xca, 0xcc, 0xd8, 0xe2, 0xea, 0xf0, 0xfa, 0xfc
        !            23: };
        !            24: 
        !            25: static int bitset(int mt, int bit)
        !            26: {
        !            27:     return mt & (1<<bit);
        !            28: }
        !            29: 
        !            30: static int generate_expr(int minterm, int print)
        !            31: {
        !            32:     int result = 0;
        !            33:     int firstor = 1;
        !            34:     int bits = 0;
        !            35:     int i;
        !            36:     for(i=0; i<8; i++) {
        !            37:        if (bitset(minterm, i) && !bitset(bits,i)) {
        !            38:            int j;
        !            39:            int dontcare = 0;
        !            40:            int firstand = 1;
        !            41:            int bitbucket[8], bitcount;
        !            42:                
        !            43:            bits |= 1<<i;
        !            44:            bitcount = 1; bitbucket[0] = i;
        !            45:            for(j=1; j<8; j *= 2) {
        !            46:                int success = 1;
        !            47:                int k;
        !            48:                for(k=0; k < bitcount; k++) {                   
        !            49:                    if (!bitset(minterm, bitbucket[k] ^ j)) {
        !            50:                        success = 0;
        !            51:                    }
        !            52:                }
        !            53:                if (success) {
        !            54:                    int l;
        !            55:                    dontcare |= j;
        !            56:                    for(l=bitcount; l < bitcount*2; l++) {
        !            57:                        bitbucket[l] = bitbucket[l-bitcount] ^ j;
        !            58:                        bits |= 1 << bitbucket[l];
        !            59:                    }
        !            60:                    bitcount *= 2;
        !            61:                }
        !            62:            }
        !            63:            if (firstor) {
        !            64:                firstor = 0;
        !            65:            } else {
        !            66:                if (print) printf(" | ");
        !            67:            }
        !            68:            for (j=1; j<8; j *= 2) {
        !            69:                if (!(dontcare & j)) {
        !            70:                    if (firstand) {
        !            71:                        firstand = 0;
        !            72:                        if (print) printf("(");
        !            73:                    } else {
        !            74:                        if (print) printf(" & ");
        !            75:                    }
        !            76:                    if (!(i & j))
        !            77:                        if (print) printf("~");
        !            78:                    if (print) printf("src%c", (j == 1 ? 'c' : j == 2 ? 'b' : 'a'));
        !            79:                    result |= (j == 1 ? 4 : j == 2 ? 2 : 1);
        !            80:                }
        !            81:            }
        !            82:            if (!firstand) {                
        !            83:                if (print) printf(")");
        !            84:            } else {
        !            85:                if (print) printf("0xFFFF");
        !            86:            }
        !            87:        }
        !            88:     }
        !            89:     if (firstor)
        !            90:        if (print) printf("0");
        !            91:     if (print) printf(";\n");
        !            92:     return result;
        !            93: }
        !            94: 
        !            95: static void generate_include(void)
        !            96: {
        !            97:     int minterm;
        !            98:     printf("static __inline__ ULONG blit_func(ULONG srca, ULONG srcb, ULONG srcc, UBYTE mt)\n{\nswitch(mt){\n");
        !            99:     for (minterm = 0; minterm < 256; minterm++) {
        !           100:        printf("case 0x%x:\n", minterm);
        !           101:        printf("\treturn ");
        !           102:        generate_expr(minterm, 1);
        !           103:     }
        !           104:     printf("}\n");
        !           105:     printf("return 0;\n"); /* No, sir, it doesn't! */
        !           106:     printf("}\n");
        !           107: }
        !           108: 
        !           109: static void generate_func(void)
        !           110: {
        !           111:     unsigned int i;
        !           112:     printf("#include \"sysconfig.h\"\n");
        !           113:     printf("#include \"sysdeps.h\"\n");
        !           114:     printf("#include \"config.h\"\n");
        !           115:     printf("#include \"options.h\"\n");
        !           116:     printf("#include \"custom.h\"\n");
        !           117:     printf("#include \"blitter.h\"\n");
        !           118:     printf("#include \"blitfunc.h\"\n\n");
        !           119: 
        !           120:     for (i = 0; i < sizeof(blttbl); i++) { 
        !           121:        int active = generate_expr(blttbl[i],0); 
        !           122:        int a_is_on = active & 1, b_is_on = active & 2, c_is_on = active & 4; 
        !           123:        
        !           124:        printf("void blitdofast_%x(UBYTE *pta, UBYTE *ptb, UBYTE *ptc, UBYTE *ptd, struct bltinfo *b)\n",blttbl[i]); 
        !           125:        printf("{\n");
        !           126:        printf("int i,j;\n"); 
        !           127:        
        !           128: #if FAST_BLITTER == 3 || FAST_BLITTER == 5
        !           129:        printf("if (b->hblitsize>1");
        !           130:        if (a_is_on) printf(" && !b->blitashift && b->bltafwm==0xffff && b->bltalwm==0xffff"); 
        !           131:        if (b_is_on) printf(" && !b->blitbshift"); 
        !           132:        printf(") {\n"); 
        !           133:        if (a_is_on) printf("ULONG srca=((ULONG)b->bltadat << 16) | b->bltadat;\n");
        !           134:        if (b_is_on) printf("ULONG srcb=((ULONG)b->bltbdat << 16) | b->bltbdat;\n"); 
        !           135:        if (c_is_on) printf("ULONG srcc=((ULONG)b->bltcdat << 16) | b->bltcdat;\n");
        !           136:        printf("ULONG dest;\n"); 
        !           137:        printf("int count=b->hblitsize/2, oddword=b->hblitsize&1;\n");
        !           138:        printf("for (j=0;j<b->vblitsize;j++) {\n"); 
        !           139:        printf("\tfor(i=0;i<count;i++) {\n"); 
        !           140:        if (a_is_on) printf("\t\tif (pta) {srca=*((ULONG *)pta); pta += 4;}\n");
        !           141:        if (b_is_on) printf("\t\tif (ptb) {srcb=*((ULONG *)ptb); ptb += 4;}\n"); 
        !           142:        if (c_is_on) printf("\t\tif (ptc) {srcc=*((ULONG *)ptc); ptc += 4;}\n");
        !           143:        printf("\t\tdest="); 
        !           144:        generate_expr(blttbl[i],1);
        !           145:        printf("\t\tif (dest) b->blitzero=0;\n"); 
        !           146:        printf("\t\tif (ptd) {*(ULONG *)ptd=dest; ptd += 4;}\n");
        !           147:        printf("\t}\n");
        !           148:        printf("\tif (oddword) {\n");
        !           149:        if (a_is_on) printf("\t\tif (pta) { srca=(ULONG)*(UWORD *)pta; pta += 2; }\n"); 
        !           150:        if (b_is_on) printf("\t\tif (ptb) { srcb=(ULONG)*(UWORD *)ptb; ptb += 2; }\n"); 
        !           151:        if (c_is_on) printf("\t\tif (ptc) { srcc=(ULONG)*(UWORD *)ptc; ptc += 2; }\n");
        !           152:        printf("\t\tdest="); 
        !           153:        generate_expr(blttbl[i],1);
        !           154:        printf("\t\tif (dest) b->blitzero=0;\n"); 
        !           155:        printf("\t\tif (ptd) { *(UWORD *)ptd= dest; ptd += 2; }\n");
        !           156:        printf("\t}\n");
        !           157:        if (a_is_on) printf("\tif (pta) pta += b->bltamod;\n"); 
        !           158:        if (b_is_on) printf("\tif (ptb) ptb += b->bltbmod;\n"); 
        !           159:        if (c_is_on) printf("\tif (ptc) ptc += b->bltcmod;\n");
        !           160:        printf("\tif (ptd) ptd += b->bltdmod;\n"); 
        !           161:        printf("}\n");
        !           162:        if (a_is_on) printf("if (pta) b->bltadat = (*(pta-b->bltamod-2) << 8) | *(pta - b->bltamod - 1);\n"); /* Maybe not necessary, but I don't want problems */ 
        !           163:        if (b_is_on) printf("if (ptb) b->bltbdat = (*(ptb-b->bltbmod-2) << 8) | *(ptb - b->bltbmod - 1);\n");
        !           164:        if (c_is_on) printf("if (ptc) b->bltcdat = (*(ptc-b->bltcmod-2) << 8) | *(ptc - b->bltcmod - 1);\n");
        !           165:        printf("if (ptd) b->bltddat = (*(ptd-b->bltdmod-2) << 8) | *(ptd - b->bltdmod - 1);\n");
        !           166:        
        !           167:        printf("} else\n"); 
        !           168: #endif
        !           169:        printf("{\n");
        !           170:        
        !           171:        printf("UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm;\n");
        !           172:        if (a_is_on) printf("if (b->hblitsize==1) bltamask&=b->bltalwm;\n");
        !           173:        printf("for (j=0;j<b->vblitsize;j++) {\n");
        !           174:        if (a_is_on) {
        !           175:            printf("\tif (pta) { b->bltadat=(*pta << 8) | (*(pta+1)); pta+=2; }\n");
        !           176:            if (b_is_on) printf("\tif (ptb) { b->bltbdat=(*ptb << 8) | (*(ptb+1)); ptb+=2; }\n");
        !           177:            if (c_is_on) printf("\tif (ptc) { b->bltcdat=(*ptc << 8) | (*(ptc+1)); ptc+=2; };\n");
        !           178:            printf("\tbltaold=b->bltadat & bltamask;\n");     
        !           179:             printf("\tsrca=(((ULONG)b->blitpreva << 16) | bltaold) >> b->blitashift;\n");
        !           180:            if (b_is_on) printf("\tsrcb=(((ULONG)b->blitprevb << 16) | b->bltbdat) >> b->blitbshift;\n");
        !           181:            if (c_is_on) printf("\tsrcc=b->bltcdat;\n");
        !           182:            printf("\tb->bltddat=");
        !           183:            generate_expr(blttbl[i],1);
        !           184:            printf("\tb->blitpreva=bltaold;\n");
        !           185:            if (b_is_on) printf("\tb->blitprevb=b->bltbdat;\n");
        !           186:            printf("\tif (b->bltddat) b->blitzero=0;\n");
        !           187:            printf("\tif (ptd) { *ptd = b->bltddat >> 8; *(ptd+1) = b->bltddat; ptd+= 2; }\n");
        !           188:        }
        !           189:        if (a_is_on) printf("\tfor (i=2;i<b->hblitsize;i++) {\n");
        !           190:        else printf("\tfor (i=0;i<b->hblitsize;i++) {\n");
        !           191:        if (a_is_on) printf("\t\tif (pta) { b->bltadat=(*pta << 8) | (*(pta+1)); pta+=2; }\n");
        !           192:        if (b_is_on) printf("\t\tif (ptb) { b->bltbdat=(*ptb << 8) | (*(ptb+1)); ptb+=2; }\n");
        !           193:        if (c_is_on) printf("\t\tif (ptc) { b->bltcdat=(*ptc << 8) | (*(ptc+1)); ptc+=2; }\n");
        !           194:         if (a_is_on) printf("\t\tsrca=(((ULONG)b->blitpreva<<16)|b->bltadat)>>b->blitashift;\n");
        !           195:        if (b_is_on) printf("\t\tsrcb=(((ULONG)b->blitprevb<<16)|b->bltbdat)>>b->blitbshift;\n");
        !           196:        if (c_is_on) printf("\t\tsrcc=b->bltcdat;\n");
        !           197:        printf("\t\tb->bltddat=");
        !           198:        generate_expr(blttbl[i],1);
        !           199:        if (a_is_on) printf("\t\tb->blitpreva=b->bltadat;\n");
        !           200:        if (b_is_on) printf("\t\tb->blitprevb=b->bltbdat;\n");
        !           201:        printf("\t\tif (b->bltddat) b->blitzero=0;\n");
        !           202:        printf("\t\tif (ptd) { *ptd = b->bltddat >> 8; *(ptd+1) = b->bltddat; ptd+= 2; }\n");
        !           203:        printf("\t}\n");
        !           204:        if (a_is_on) {
        !           205:            printf("\tif (b->hblitsize>1) {\n");
        !           206:            printf("\t\tif (pta) { b->bltadat=(*pta << 8) | (*(pta+1)); pta+=2; }\n");
        !           207:            if (b_is_on) printf("\t\tif (ptb) { b->bltbdat=(*ptb << 8) | (*(ptb+1)); ptb+=2; }\n");
        !           208:            if (c_is_on) printf("\t\tif (ptc) { b->bltcdat=(*ptc << 8) | (*(ptc+1)); ptc+=2; }\n");
        !           209:            printf("\t\tbltaold=b->bltadat & b->bltalwm;\n");     
        !           210:             printf("\t\tsrca=(((ULONG)b->blitpreva << 16) | bltaold) >> b->blitashift;\n");
        !           211:            if (b_is_on) printf("\t\tsrcb=(((ULONG)b->blitprevb << 16) | b->bltbdat) >> b->blitbshift;\n");
        !           212:            if (c_is_on) printf("\t\tsrcc=b->bltcdat;\n");
        !           213:            printf("\t\tb->bltddat=");
        !           214:            generate_expr(blttbl[i],1);
        !           215:            printf("\t\tb->blitpreva=bltaold;\n");
        !           216:            if (b_is_on) printf("\t\tb->blitprevb=b->bltbdat;\n");
        !           217:            printf("\t\tif (b->bltddat) b->blitzero=0;\n");
        !           218:            printf("\t\tif (ptd) { *ptd = b->bltddat >> 8; *(ptd+1) = b->bltddat; ptd+= 2; }\n");
        !           219:            printf("\t}\n");
        !           220:        }
        !           221:        if (a_is_on) printf("\tif (pta) pta += b->bltamod;\n");
        !           222:        if (b_is_on) printf("\tif (ptb) ptb += b->bltbmod;\n");
        !           223:        if (c_is_on) printf("\tif (ptc) ptc += b->bltcmod;\n");
        !           224:        printf("\tif (ptd) ptd+=b->bltdmod;\n");
        !           225:        printf("}\n");
        !           226:        printf("}\n");
        !           227:        printf("}\n");
        !           228:        
        !           229:        
        !           230:        printf("void blitdofast_desc_%x(UBYTE *pta, UBYTE *ptb, UBYTE *ptc, UBYTE *ptd, struct bltinfo *b)\n",blttbl[i]);
        !           231:        printf("{\n");
        !           232:        printf("int i,j;\n");
        !           233:        
        !           234: #if FAST_BLITTER == 3 || FAST_BLITTER == 5
        !           235:        printf("if (b->hblitsize>1");
        !           236:        if (a_is_on) printf(" && !b->blitashift && b->bltafwm==0xffff && b->bltalwm==0xffff"); 
        !           237:        if (b_is_on) printf(" && !b->blitbshift"); 
        !           238:        printf(") {\n"); 
        !           239:        if (a_is_on) printf("ULONG srca=((ULONG)b->bltadat << 16) | b->bltadat;\n");
        !           240:        if (b_is_on) printf("ULONG srcb=((ULONG)b->bltbdat << 16) | b->bltbdat;\n"); 
        !           241:        if (c_is_on) printf("ULONG srcc=((ULONG)b->bltcdat << 16) | b->bltcdat;\n");
        !           242:        printf("ULONG dest;\n"); 
        !           243:        printf("int count=b->hblitsize/2, oddword=b->hblitsize&1;\n");
        !           244:        printf("for (j=0;j<b->vblitsize;j++) {\n"); 
        !           245:        printf("\tfor(i=0;i<count;i++) {\n"); 
        !           246:        if (a_is_on) printf("\t\tif (pta) {srca=*((ULONG *)(pta-2)); pta -= 4;}\n");
        !           247:        if (b_is_on) printf("\t\tif (ptb) {srcb=*((ULONG *)(ptb-2)); ptb -= 4;}\n"); 
        !           248:        if (c_is_on) printf("\t\tif (ptc) {srcc=*((ULONG *)(ptc-2)); ptc -= 4;}\n");
        !           249:        printf("\t\tdest="); 
        !           250:        generate_expr(blttbl[i],1);
        !           251:        printf("\t\tif (dest) b->blitzero=0;\n"); 
        !           252:        printf("\t\tif (ptd) {*(ULONG *)(ptd-2)=dest; ptd -= 4;}\n");
        !           253:        printf("\t}\n"); 
        !           254:        printf("\tif (oddword) {\n");
        !           255:        if (a_is_on) printf("\t\tif (pta) { srca=(ULONG)*(UWORD *)pta; pta -= 2; }\n");
        !           256:        if (b_is_on) printf("\t\tif (ptb) { srcb=(ULONG)*(UWORD *)ptb; ptb -= 2; }\n"); 
        !           257:        if (c_is_on) printf("\t\tif (ptc) { srcc=(ULONG)*(UWORD *)ptc; ptc -= 2; }\n");
        !           258:        printf("\t\tdest="); 
        !           259:        generate_expr(blttbl[i],1);
        !           260:        printf("\t\tif (dest) b->blitzero=0;\n"); 
        !           261:        printf("\t\tif (ptd) { *(UWORD *)ptd= dest; ptd -= 2; }\n");
        !           262:        printf("\t}\n");
        !           263:        if (a_is_on) printf("\tif (pta) pta -= b->bltamod;\n"); 
        !           264:        if (b_is_on) printf("\tif (ptb) ptb -= b->bltbmod;\n"); 
        !           265:        if (c_is_on) printf("\tif (ptc) ptc -= b->bltcmod;\n");
        !           266:        printf("\tif (ptd) ptd-=b->bltdmod;\n"); 
        !           267:        printf("}\n");
        !           268:        if (a_is_on) printf("if (pta) b->bltadat = (*(pta + b->bltamod + 2) << 8) | *(pta + b->bltamod + 1);\n"); /* Maybe not necessary, but I don't want problems */
        !           269:        if (b_is_on) printf("if (ptb) b->bltbdat = (*(ptb + b->bltbmod + 2) << 8) | *(ptb + b->bltbmod + 1);\n");
        !           270:        if (c_is_on) printf("if (ptc) b->bltcdat = (*(ptc + b->bltcmod + 2) << 8) | *(ptc + b->bltcmod + 1);\n");
        !           271:        printf("if (ptd) b->bltddat = (*(ptd + b->bltdmod + 2) << 8) | *(ptd + b->bltdmod + 1);\n");
        !           272:        
        !           273:        printf("} else\n"); 
        !           274: #endif
        !           275:        printf("{\n");
        !           276:        
        !           277:        printf("UWORD srca,srcb,srcc,bltaold,bltamask=b->bltafwm;\n");
        !           278:        if (a_is_on) printf("if (b->hblitsize==1) bltamask&=b->bltalwm;\n");
        !           279:        printf("for (j=0;j<b->vblitsize;j++) {\n");
        !           280:        if (a_is_on) {
        !           281:            printf("\tif (pta) { b->bltadat = (*pta << 8) | *(pta+1); pta -= 2; }\n");
        !           282:            if (b_is_on) printf("\tif (ptb) { b->bltbdat = (*ptb << 8) | *(ptb+1); ptb -= 2; }\n");
        !           283:            if (c_is_on) printf("\tif (ptc) { b->bltcdat = (*ptc << 8) | *(ptc+1); ptc -= 2; }\n");
        !           284:            printf("\tbltaold=b->bltadat & bltamask;\n");     
        !           285:             printf("\tsrca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift);\n");
        !           286:            if (b_is_on) printf("\tsrcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift);\n");
        !           287:            if (c_is_on) printf("\tsrcc=b->bltcdat;\n");
        !           288:            printf("\tb->bltddat=");
        !           289:            generate_expr(blttbl[i],1);
        !           290:            printf("\tb->blitpreva=bltaold;\n");
        !           291:            if (b_is_on) printf("\tb->blitprevb=b->bltbdat;\n");
        !           292:            printf("\tif (b->bltddat) b->blitzero=0;\n");
        !           293:            printf("\tif (ptd) { *ptd = b->bltddat >> 8; *(ptd+1) = b->bltddat; ptd-= 2; }\n");
        !           294:        }
        !           295:        if (a_is_on) printf("\tfor (i=2;i<b->hblitsize;i++) {\n");
        !           296:        else printf("\tfor (i=0;i<b->hblitsize;i++) {\n");
        !           297:        if (a_is_on) printf("\t\tif (pta) { b->bltadat = (*pta << 8) | *(pta+1); pta -= 2; }\n");
        !           298:        if (b_is_on) printf("\t\tif (ptb) { b->bltbdat = (*ptb << 8) | *(ptb+1); ptb -= 2; }\n");
        !           299:        if (c_is_on) printf("\t\tif (ptc) { b->bltcdat = (*ptc << 8) | *(ptc+1); ptc -= 2; }\n");
        !           300:         if (a_is_on) printf("\t\tsrca=(((ULONG)b->bltadat<<16)|b->blitpreva)>>(16-b->blitashift);\n");
        !           301:        if (b_is_on) printf("\t\tsrcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift);\n");
        !           302:        if (c_is_on) printf("\t\tsrcc=b->bltcdat;\n");
        !           303:        printf("\t\tb->bltddat=");
        !           304:        generate_expr(blttbl[i],1);
        !           305:        if (a_is_on) printf("\t\tb->blitpreva=b->bltadat;\n");
        !           306:        if (b_is_on) printf("\t\tb->blitprevb=b->bltbdat;\n");
        !           307:        printf("\t\tif (b->bltddat) b->blitzero=0;\n");
        !           308:        printf("\t\tif (ptd) { *ptd = b->bltddat >> 8; *(ptd+1) = b->bltddat; ptd-= 2; }\n");
        !           309:        printf("\t}\n");
        !           310:        if (a_is_on) {
        !           311:            printf("\tif (b->hblitsize>1) {\n");
        !           312:            printf("\t\tif (pta) { b->bltadat = (*pta << 8) | *(pta+1); pta -= 2; }\n");
        !           313:            if (b_is_on) printf("\t\tif (ptb) { b->bltbdat = (*ptb << 8) | *(ptb+1); ptb -= 2; }\n");
        !           314:            if (c_is_on) printf("\t\tif (ptc) { b->bltcdat = (*ptc << 8) | *(ptc+1); ptc -= 2; }\n");
        !           315:            printf("\t\tbltaold=b->bltadat & b->bltalwm;\n");     
        !           316:             printf("\t\tsrca=(((ULONG)bltaold<<16)|b->blitpreva)>>(16-b->blitashift);\n");
        !           317:            if (b_is_on) printf("\t\tsrcb=(((ULONG)b->bltbdat<<16)|b->blitprevb)>>(16-b->blitbshift);\n");
        !           318:            if (c_is_on) printf("\t\tsrcc=b->bltcdat;\n");
        !           319:            printf("\t\tb->bltddat=");
        !           320:            generate_expr(blttbl[i],1);
        !           321:            printf("\t\tb->blitpreva=bltaold;\n");
        !           322:            if (b_is_on) printf("\t\tb->blitprevb=b->bltbdat;\n");
        !           323:            printf("\t\tif (b->bltddat) b->blitzero=0;\n");
        !           324:            printf("\t\tif (ptd) { *ptd = b->bltddat >> 8; *(ptd+1) = b->bltddat; ptd-= 2; }\n");
        !           325:            printf("\t}\n");
        !           326:        }
        !           327:        if (a_is_on) printf("\tif (pta) pta-=b->bltamod;\n");
        !           328:        if (b_is_on) printf("\tif (ptb) ptb-=b->bltbmod;\n");
        !           329:        if (c_is_on) printf("\tif (ptc) ptc-=b->bltcmod;\n");
        !           330:        printf("\tif (ptd) ptd-=b->bltdmod;\n");
        !           331:        printf("}\n");
        !           332:        printf("}\n");
        !           333:        printf("}\n");
        !           334:     }
        !           335: }
        !           336:         
        !           337: static void generate_table(void)
        !           338: {
        !           339:     unsigned int index = 0;
        !           340:     unsigned int i;
        !           341:     printf("#include \"sysconfig.h\"\n");
        !           342:     printf("#include \"sysdeps.h\"\n");
        !           343:     printf("#include \"config.h\"\n");
        !           344:     printf("#include \"options.h\"\n");
        !           345:     printf("#include \"custom.h\"\n");
        !           346:     printf("#include \"blitter.h\"\n");
        !           347:     printf("#include \"blitfunc.h\"\n\n");
        !           348:     printf("blitter_func *blitfunc_dofast[256] = {\n");
        !           349:     for (i = 0; i < 256; i++) {
        !           350:        if (index < sizeof(blttbl) && i == blttbl[index]) {
        !           351:            printf("blitdofast_%x",i);
        !           352:            index++;
        !           353:        }
        !           354:        else printf("0");
        !           355:        if (i < 255) printf(", ");
        !           356:        if ((i & 7) == 7) printf("\n");
        !           357:     }
        !           358:     printf("};\n\n");
        !           359:     
        !           360:     index = 0;
        !           361:     printf("blitter_func *blitfunc_dofast_desc[256] = {\n");
        !           362:     for (i = 0; i < 256; i++) {
        !           363:        if (index < sizeof(blttbl) && i == blttbl[index]) {
        !           364:            printf("blitdofast_desc_%x",i);
        !           365:            index++;
        !           366:        }
        !           367:        else printf("0");
        !           368:        if (i < 255) printf(", ");
        !           369:        if ((i & 7) == 7) printf("\n");
        !           370:     }
        !           371:     printf("};\n");
        !           372: }
        !           373: 
        !           374: static void generate_header(void)
        !           375: {
        !           376:     unsigned int i;
        !           377:     for (i = 0; i < sizeof(blttbl); i++) {
        !           378:        printf("extern blitter_func blitdofast_%x;\n",blttbl[i]);
        !           379:        printf("extern blitter_func blitdofast_desc_%x;\n",blttbl[i]);
        !           380:     }
        !           381: }
        !           382: 
        !           383: int main(int argc, char **argv)
        !           384: {
        !           385:     char mode = 'i';
        !           386:     if (argc == 2) mode = *argv[1];
        !           387:     switch (mode) {
        !           388:      case 'i': generate_include();
        !           389:               break;
        !           390:      case 'f': generate_func();
        !           391:               break;
        !           392:      case 't': generate_table();
        !           393:               break;
        !           394:      case 'h': generate_header();
        !           395:               break;
        !           396:      default: abort();
        !           397:     }
        !           398:     return 0;
        !           399: }
        !           400: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.