|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include "sparc-opcode.h" ! 3: ! 4: static void print_rs_reg(char); ! 5: static void print_cp_reg(void); ! 6: static void print_f_reg(int); ! 7: static void print_imm_13(void); ! 8: static void print_imm_22(void); ! 9: static void print_asi(void); ! 10: ! 11: ! 12: static char *reg_names[] = ! 13: { "g0", "g1", "g2", "g3", "g4", "g5", "g6", "g7", ! 14: "o0", "o1", "o2", "o3", "o4", "o5", "sp", "o7", ! 15: "l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7", ! 16: "i0", "i1", "i2", "i3", "i4", "i5", "fp", "i7", ! 17: "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", ! 18: "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", ! 19: "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", ! 20: "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", ! 21: "y", "psr", "wim", "tbr", "pc", "npc", "fpsr", "cpsr" ! 22: }; ! 23: ! 24: void ! 25: main( ! 26: int argc, ! 27: char *argv[], ! 28: char *envp[]) ! 29: { ! 30: long i; ! 31: const char *arg; ! 32: ! 33: /* output each instruction */ ! 34: ! 35: for(i = 0; i < NUMOPCODES - 1; i++){ ! 36: printf("\t%s", sparc_opcodes[i].name); ! 37: arg = sparc_opcodes[i].args; ! 38: ! 39: if (*arg != ',' && *(arg+1) != 'a') /* handle annul case */ ! 40: printf("\t"); ! 41: ! 42: /* and every possible combination */ ! 43: for (arg = sparc_opcodes[i].args; *arg != '\0'; arg++) { ! 44: switch (*arg) { ! 45: case '\0': ! 46: break; /* done */ ! 47: case '1': ! 48: case '2': ! 49: case 'r': ! 50: case 'd': ! 51: print_rs_reg(*arg); /* output in a random register */ ! 52: break; ! 53: case 'i': ! 54: print_imm_13(); /* output a random immediate value */ ! 55: break; ! 56: case 'n': ! 57: print_imm_22(); /* output a random immediate value */ ! 58: break; ! 59: case 'L': ! 60: case 'l': ! 61: printf("undef"); ! 62: break; ! 63: case 'D': ! 64: print_cp_reg(); ! 65: break; ! 66: case 'F': ! 67: printf("%%fsr"); ! 68: break; ! 69: case 'p': ! 70: printf("%%psr"); ! 71: break; ! 72: case 'C': ! 73: printf("%%csr"); ! 74: break; ! 75: case 'A': ! 76: print_asi(); ! 77: break; ! 78: case 'q': ! 79: printf("%%fq"); ! 80: break; ! 81: case 'Q': ! 82: printf("%%cq"); ! 83: break; ! 84: case 'y': ! 85: printf("%%y"); ! 86: break; ! 87: case 'w': ! 88: printf("%%wim"); ! 89: break; ! 90: case 't': ! 91: printf("%%tbr"); ! 92: break; ! 93: case 'h': ! 94: printf("%%hi(0xaaaaa)"); ! 95: break; ! 96: case 'e': ! 97: case 'f': ! 98: case 'g': ! 99: print_f_reg(0); ! 100: break; ! 101: case 'v': ! 102: case 'B': ! 103: case 'H': ! 104: print_f_reg(1); ! 105: break; ! 106: case 'R': ! 107: case 'V': ! 108: case 'J': ! 109: print_f_reg(3); ! 110: break; ! 111: case 'm': ! 112: case 'M': ! 113: printf("%%asr16"); ! 114: break; ! 115: case 'S': ! 116: /* special case set insn */ ! 117: break; ! 118: case '+': ! 119: putchar('+'); ! 120: break; ! 121: case ']': ! 122: case '[': ! 123: case ',': ! 124: case ' ': ! 125: putchar(*arg); ! 126: break; ! 127: case '#': ! 128: printf("0"); ! 129: break; ! 130: case 'a': ! 131: printf("a\t"); ! 132: break; ! 133: default: ! 134: printf("*** what's this garbage %c 0x%x?\n", *arg, (int) *arg); ! 135: } ! 136: } ! 137: printf("\n"); ! 138: } ! 139: printf("\n"); ! 140: exit(0); ! 141: } ! 142: ! 143: ! 144: #define MAX_RS_REG 32 ! 145: ! 146: static ! 147: void ! 148: print_rs_reg(char type) ! 149: { ! 150: static int i=0; ! 151: ! 152: printf("%%%s", reg_names[i++]); ! 153: if (i >= MAX_RS_REG) ! 154: i = 0; ! 155: } ! 156: ! 157: #define MAX_FP_REG 64 ! 158: ! 159: static ! 160: void ! 161: print_f_reg(int align) ! 162: { ! 163: static int i=32; ! 164: ! 165: printf("%%%s", reg_names[(i++) & ~align]); ! 166: if (i >= MAX_FP_REG) ! 167: i = 32; ! 168: } ! 169: ! 170: static ! 171: void ! 172: print_imm_13(void) ! 173: { ! 174: static int val = 0; ! 175: ! 176: val = (val+4) & 0x3ff; ! 177: printf("0x%x", val); ! 178: } ! 179: ! 180: static ! 181: void ! 182: print_imm_22(void) ! 183: { ! 184: static int val = 0; ! 185: ! 186: val = (val + 4) & 0x3fffff; ! 187: printf("0x%x", val); ! 188: } ! 189: ! 190: ! 191: #define MAX_ASI 255 ! 192: ! 193: static ! 194: void print_asi(void) ! 195: { ! 196: static int i=0; ! 197: ! 198: printf("(%d)", i++); ! 199: if (i >= MAX_ASI) ! 200: i = 0; ! 201: } ! 202: ! 203: #define MAX_CP_REG 32 ! 204: ! 205: static ! 206: void print_cp_reg(void) ! 207: { ! 208: static int i=0; ! 209: ! 210: printf("%%c%d", i++); ! 211: if (i >= MAX_CP_REG) ! 212: i = 0; ! 213: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.