|
|
1.1 root 1: /*
2: * UAE - The Un*x Amiga Emulator
3: *
4: * Optimized blitter minterm function generator
5: *
6: * (c) 1995 Bernd Schmidt
7: */
8:
9: #include <stdio.h>
10: #include <string.h>
11:
12: #include "config.h"
13: #include "amiga.h"
14:
15: static bool bitset(int mt, int bit)
16: {
17: return mt & (1<<bit);
18: }
19:
20: int main(void)
21: {
22: int minterm;
23: printf("static __inline__ UWORD blit_func(UWORD srca, UWORD srcb, UWORD srcc, UBYTE mt)\n{\nswitch(mt){\n");
24: for (minterm = 0; minterm < 256; minterm++) {
25: bool firstor = true;
26: int bits = 0;
27: int i;
28: printf("case 0x%x:\n", minterm);
29: printf("\treturn ");
30: for(i=0; i<8; i++) {
31: if (bitset(minterm, i) && !bitset(bits,i)) {
32: int j;
33: int dontcare = 0;
34: bool firstand = true;
35: int bitbucket[8], bitcount;
36:
37: bits |= 1<<i;
38: bitcount = 1; bitbucket[0] = i;
39: for(j=1; j<8; j *= 2) {
40: bool success = true;
41: int k;
42: for(k=0; k < bitcount; k++) {
43: if (!bitset(minterm, bitbucket[k] ^ j)) {
44: success = false;
45: }
46: }
47: if (success) {
48: int l;
49: dontcare |= j;
50: for(l=bitcount; l < bitcount*2; l++) {
51: bitbucket[l] = bitbucket[l-bitcount] ^ j;
52: bits |= 1 << bitbucket[l];
53: }
54: bitcount *= 2;
55: }
56: }
57: if (firstor) {
58: firstor = false;
59: } else {
60: printf(" | ");
61: }
62: for (j=1; j<8; j *= 2) {
63: if (!(dontcare & j)) {
64: if (firstand) {
65: firstand = false;
66: printf("(");
67: } else {
68: printf(" & ");
69: }
70: if (!(i & j))
71: printf("~");
72: printf("src%c", (j == 1 ? 'c' : j == 2 ? 'b' : 'a'));
73: }
74: }
75: if (!firstand) {
76: printf(")");
77: } else {
78: printf("0xFFFF");
79: }
80: }
81: }
82: if (firstor)
83: printf("0");
84: printf(";\n");
85: }
86: printf("}\n");
87: printf("return 0;\n"); /* No, sir, it doesn't! */
88: printf("}\n");
89: return 0;
90: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.