/[gxemul]/trunk/src/cpus/generate_ppc_loadstore.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/src/cpus/generate_ppc_loadstore.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 19 by dpavlin, Mon Oct 8 16:18:51 2007 UTC revision 20 by dpavlin, Mon Oct 8 16:19:23 2007 UTC
# Line 25  Line 25 
25   *  SUCH DAMAGE.   *  SUCH DAMAGE.
26   *   *
27   *   *
28   *  $Id: generate_ppc_loadstore.c,v 1.1 2005/08/29 14:36:41 debug Exp $   *  $Id: generate_ppc_loadstore.c,v 1.4 2005/11/23 06:59:52 debug Exp $
29   */   */
30    
31  #include <stdio.h>  #include <stdio.h>
# Line 36  char *sizechar[4] = { "b", "h", "w", "d" Line 36  char *sizechar[4] = { "b", "h", "w", "d"
36  char *modes[2] = { "", "32" };  char *modes[2] = { "", "32" };
37    
38    
39  int main(int argc, char *argv[])  void do_it(int mode)
40  {  {
41          int n, load, size, zero, ignoreofs, update, mode;          int n, load, size, zero, ignoreofs, update;
   
         printf("\n/*  AUTOMATICALLY GENERATED! Do not edit.  */\n\n");  
   
         for (mode = 0; mode <= 1; mode ++) {  
         if (mode == 0)  
                 printf("#ifndef MODE32\n");  
         else  
                 printf("#ifdef MODE32\n");  
42    
43          n = 0;          n = 0;
44          for (update=0; update<=1; update++)          for (update=0; update<=1; update++)
# Line 58  int main(int argc, char *argv[]) Line 50  int main(int argc, char *argv[])
50                                  continue;                                  continue;
51                          if (load && !zero && size == 3)                          if (load && !zero && size == 3)
52                                  continue;                                  continue;
                         if (mode && size == 3)  
                                 continue;  
53    
54                          switch (size) {                          switch (size) {
55                          case 0: printf("#define LS_B\n"); break;                          case 0: printf("#define LS_B\n"); break;
# Line 143  int main(int argc, char *argv[]) Line 133  int main(int argc, char *argv[])
133                                  continue;                                  continue;
134                          if (load && !zero && size == 3)                          if (load && !zero && size == 3)
135                                  continue;                                  continue;
                         if (mode && size == 3)  
                                 continue;  
136    
137                          switch (size) {                          switch (size) {
138                          case 0: printf("#define LS_B\n"); break;                          case 0: printf("#define LS_B\n"); break;
# Line 228  int main(int argc, char *argv[]) Line 216  int main(int argc, char *argv[])
216                      for (size=0; size<4; size++) {                      for (size=0; size<4; size++) {
217                          printf("\tppc%s_instr_", modes[mode]);                          printf("\tppc%s_instr_", modes[mode]);
218    
219                          if ((load && !zero && size == 3)                          if (load && !zero && size == 3) {
                             || (mode && size == 3)) {  
220                                  printf("invalid");                                  printf("invalid");
221                                  goto cont;                                  goto cont;
222                          }                          }
# Line 266  cont: Line 253  cont:
253                      for (size=0; size<4; size++) {                      for (size=0; size<4; size++) {
254                          printf("\tppc%s_instr_", modes[mode]);                          printf("\tppc%s_instr_", modes[mode]);
255    
256                          if ((load && !zero && size == 3)                          if (load && !zero && size == 3) {
                             || (mode && size == 3)) {  
257                                  printf("invalid");                                  printf("invalid");
258                                  goto cont_x;                                  goto cont_x;
259                          }                          }
# Line 294  cont_x: Line 280  cont_x:
280    
281          printf("};\n\n");          printf("};\n\n");
282    
283          printf("#endif\n");          /*  Non-standard loads/stores:  */
284            printf("#define LS_BYTEREVERSE\n"
285                "#define LS_INDEXED\n"
286    
287                "#define LS_SIZE 2\n"
288                "#define LS_H\n"
289                "#define LS_GENERIC_N ppc%s_generic_lhbrx\n"
290                "#define LS_N ppc%s_instr_lhbrx\n"
291                "#define LS_LOAD\n"
292                "#include \"cpu_ppc_instr_loadstore.c\"\n"
293                "#undef LS_LOAD\n"
294                "#undef LS_N\n"
295                "#undef LS_GENERIC_N\n"
296                "#define LS_GENERIC_N ppc%s_generic_sthbrx\n"
297                "#define LS_N ppc%s_instr_sthbrx\n"
298                "#include \"cpu_ppc_instr_loadstore.c\"\n"
299                "#undef LS_N\n"
300                "#undef LS_GENERIC_N\n"
301                "#undef LS_H\n"
302                "#undef LS_SIZE\n"
303    
304                "#define LS_SIZE 4\n"
305                "#define LS_W\n"
306                "#define LS_GENERIC_N ppc%s_generic_lwbrx\n"
307                "#define LS_N ppc%s_instr_lwbrx\n"
308                "#define LS_LOAD\n"
309                "#include \"cpu_ppc_instr_loadstore.c\"\n"
310                "#undef LS_LOAD\n"
311                "#undef LS_N\n"
312                "#undef LS_GENERIC_N\n"
313                "#define LS_GENERIC_N ppc%s_generic_stwbrx\n"
314                "#define LS_N ppc%s_instr_stwbrx\n"
315                "#include \"cpu_ppc_instr_loadstore.c\"\n"
316                "#undef LS_N\n"
317                "#undef LS_GENERIC_N\n"
318                "#undef LS_W\n"
319                "#undef LS_SIZE\n"
320    
321                "#undef LS_INDEXED\n"
322                "#undef LS_BYTEREVERSE\n",
323                modes[mode], modes[mode], modes[mode], modes[mode],
324                modes[mode], modes[mode], modes[mode], modes[mode]);
325    }
326    
327    int main(int argc, char *argv[])
328    {
329            int mode;
330    
331            printf("\n/*  AUTOMATICALLY GENERATED! Do not edit.  */\n\n");
332    
333            for (mode = 0; mode <= 1; mode ++) {
334                    if (mode == 0)
335                            printf("#ifndef MODE32\n");
336                    else
337                            printf("#ifdef MODE32\n");
338    
339                    do_it(mode);
340    
341                    printf("#endif\n");
342          }          }
343    
344          return 0;          return 0;

Legend:
Removed from v.19  
changed lines
  Added in v.20

  ViewVC Help
Powered by ViewVC 1.1.26