ld64 with ppc
[darwin-xtools.git] / cctools / as / sparc-check.c
blob70f262d9123ad4f57f494b07e7b96ea41840a3f1
1 #include <stdio.h>
2 #include "sparc-opcode.h"
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);
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"
24 void
25 main(
26 int argc,
27 char *argv[],
28 char *envp[])
30 int32_t i;
31 const char *arg;
33 /* output each instruction */
35 for(i = 0; i < NUMOPCODES - 1; i++){
36 printf("\t%s", sparc_opcodes[i].name);
37 arg = sparc_opcodes[i].args;
39 if (*arg != ',' && *(arg+1) != 'a') /* handle annul case */
40 printf("\t");
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);
137 printf("\n");
139 printf("\n");
140 exit(0);
144 #define MAX_RS_REG 32
146 static
147 void
148 print_rs_reg(char type)
150 static int i=0;
152 printf("%%%s", reg_names[i++]);
153 if (i >= MAX_RS_REG)
154 i = 0;
157 #define MAX_FP_REG 64
159 static
160 void
161 print_f_reg(int align)
163 static int i=32;
165 printf("%%%s", reg_names[(i++) & ~align]);
166 if (i >= MAX_FP_REG)
167 i = 32;
170 static
171 void
172 print_imm_13(void)
174 static int val = 0;
176 val = (val+4) & 0x3ff;
177 printf("0x%x", val);
180 static
181 void
182 print_imm_22(void)
184 static int val = 0;
186 val = (val + 4) & 0x3fffff;
187 printf("0x%x", val);
191 #define MAX_ASI 255
193 static
194 void print_asi(void)
196 static int i=0;
198 printf("(%d)", i++);
199 if (i >= MAX_ASI)
200 i = 0;
203 #define MAX_CP_REG 32
205 static
206 void print_cp_reg(void)
208 static int i=0;
210 printf("%%c%d", i++);
211 if (i >= MAX_CP_REG)
212 i = 0;