|
|
1.1 ! root 1: #include "i860-opcode.h" ! 2: #include <stdio.h> ! 3: ! 4: extern long random(); ! 5: ! 6: char *controlregs[] = { "fir", "psr", "epsr", "dirbase", "db", "fsr" }; ! 7: #define NCREGS (sizeof controlregs / sizeof controlregs[0]) ! 8: ! 9: char *textlabels[] = { "foo", "bar", "baz", "xork" }; ! 10: #define NTLABELS (sizeof textlabels / sizeof textlabels[0]) ! 11: ! 12: char *datalabels[] = { "data1", "data2", "data3", "data4" }; ! 13: #define NDLABELS (sizeof datalabels / sizeof datalabels[0]) ! 14: ! 15: /* ! 16: * Traverse the opcode table, dumping out sample instructions. ! 17: */ ! 18: void ! 19: main( ! 20: int argc, ! 21: char *argv[], ! 22: char *envp[]) ! 23: { ! 24: int i; ! 25: const char *arg; ! 26: int r1, r2, rd; ! 27: ! 28: printf( "\t.text\n%s:", textlabels[0] ); ! 29: for ( i = 0; i < NUMOPCODES; ++i ) ! 30: { ! 31: if ( i == (NUMOPCODES/3) ) ! 32: printf( "%s:", textlabels[1] ); ! 33: if ( i == (NUMOPCODES/2) ) ! 34: printf( "%s:", textlabels[2] ); ! 35: ! 36: if ( (random() & 0x30) == 0 && ! 37: (i860_opcodes[i].match & OP_PREFIX_MASK) == PREFIX_FPU ) ! 38: { ! 39: printf( "\td.%s\t", i860_opcodes[i].name ); ! 40: } ! 41: else ! 42: printf( "\t%s\t", i860_opcodes[i].name ); ! 43: r1 = random() & 0x1F; ! 44: do ! 45: r2 = random() & 0x1F; ! 46: while( (r2 & 0x1E) == (r1 & 0x1E) ); ! 47: do ! 48: rd = random() & 0x1F; ! 49: while( (rd & 0x1E) == (r1 & 0x1E) || (rd & 0x1E) == (r2 & 0x1E) ); ! 50: ! 51: for ( arg = i860_opcodes[i].args; *arg != '\0'; ++arg ) ! 52: { ! 53: switch( *arg ) ! 54: { ! 55: case '1': /* rs1 register, bits 11-15 of insn. */ ! 56: case '2': /* rs2 register, bits 21-25 of insn. */ ! 57: case 'd': /* rd register, bits 16-20 of insn. */ ! 58: printf( "r%d", random() % 32); ! 59: break; ! 60: ! 61: case 'e': /* frs1 floating point register, bits 11-15 of insn*/ ! 62: printf( "f%d", r1 ); ! 63: break; ! 64: ! 65: case 'f': /* frs2 floating point register, bits 21-25 of insn*/ ! 66: printf( "f%d", r2 ); ! 67: break; ! 68: ! 69: case 'g': /* frsd floating point register, bits 16-20 of insn*/ ! 70: printf( "f%d", rd ); ! 71: break; ! 72: ! 73: case 'E': /* frs1 floating point register, bits 11-15 of insn*/ ! 74: printf( "f%d", r1 & 0x1E ); ! 75: break; ! 76: ! 77: case 'F': /* frs2 floating point register, bits 21-25 of insn*/ ! 78: printf( "f%d", r2 & 0x1E ); ! 79: break; ! 80: ! 81: case 'G': /* frsd floating point register, bits 16-20 of insn*/ ! 82: printf( "f%d", rd & 0x1E ); ! 83: break; ! 84: ! 85: case 'H': /* frsd floating point register, bits 16-20 of insn*/ ! 86: printf( "f%d", rd & 0x1C ); ! 87: break; ! 88: ! 89: case 'I': /* 16 bit High portion of address, I860_RELOC_HIGH. */ ! 90: printf( "h%%%s", datalabels[random() % NDLABELS] ); ! 91: break; ! 92: ! 93: case 'i': /* 16 bit byte address low half, */ ! 94: case 'j': /* 16 bit short address, I860_RELOC_LOW1 */ ! 95: case 'k': /* 16 bit word/int address low half, I860_RELOC_LOW2 */ ! 96: case 'l': /* 16 bit 8-byte address (double) low half */ ! 97: case 'm': /* 16 bit 16-byte address (quad) low half */ ! 98: case 'n': /* 16 bit byte aligned low half, split fields */ ! 99: case 'o': /* 16 bit short aligned low half, split fields */ ! 100: case 'p': /* 16 bit int/word aligned low half, split fields */ ! 101: printf( "l%%%s", datalabels[random() % NDLABELS] ); ! 102: break; ! 103: ! 104: case 'J': /* 16 bit High portion of addr requiring adjustment*/ ! 105: printf( "ha%%%s", datalabels[random() % NDLABELS] ); ! 106: break; ! 107: ! 108: case 'K': /* 26 bit branch displacement */ ! 109: case 'L': /* 16 bit split branch displacement */ ! 110: printf( textlabels[random() % NTLABELS] ); ! 111: break; ! 112: ! 113: case 'D': /* constant for shift opcode */ ! 114: case 'B': /* 5 bit immediate, for bte and btne insn */ ! 115: printf( "%d", random() % 32 ); ! 116: break; ! 117: ! 118: case 'C': /* Control Register */ ! 119: printf( controlregs[random() % NCREGS] ); ! 120: break; ! 121: ! 122: default: ! 123: putchar( *arg ); ! 124: break; ! 125: } ! 126: } ! 127: putchar( '\n' ); ! 128: } ! 129: printf( "%s:\n", textlabels[3] ); ! 130: printf( "nop\n" ); ! 131: printf( "\t.text\n" ); ! 132: printf( "data1: nop\n" ); ! 133: printf( "data2: nop\n" ); ! 134: printf( "data3: nop\n" ); ! 135: printf( "data4: nop\n" ); ! 136: ! 137: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.