/[gxemul]/trunk/src/cpus/generate_head.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_head.c

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

revision 14 by dpavlin, Mon Oct 8 16:18:51 2007 UTC revision 28 by dpavlin, Mon Oct 8 16:20:26 2007 UTC
# Line 1  Line 1 
1  /*  /*
2   *  Copyright (C) 2005  Anders Gavare.  All rights reserved.   *  Copyright (C) 2005-2006  Anders Gavare.  All rights reserved.
3   *   *
4   *  Redistribution and use in source and binary forms, with or without   *  Redistribution and use in source and binary forms, with or without
5   *  modification, are permitted provided that the following conditions are met:   *  modification, are permitted provided that the following conditions are met:
# Line 25  Line 25 
25   *  SUCH DAMAGE.   *  SUCH DAMAGE.
26   *   *
27   *   *
28   *  $Id: generate_head.c,v 1.5 2005/09/18 19:54:14 debug Exp $   *  $Id: generate_head.c,v 1.18 2006/07/20 21:53:00 debug Exp $
29   */   */
30    
31  #include <stdio.h>  #include <stdio.h>
# Line 33  Line 33 
33  #include <string.h>  #include <string.h>
34    
35    
36    /*  NOTE:  Static return buffer, so calling it multiple times in the
37            same printf statement with the same argument works :-)  but not
38            with different args. Hahaha. Really ugly.  */
39  char *uppercase(char *l)  char *uppercase(char *l)
40  {  {
41          static char staticbuf[1000];          static char staticbuf[1000];
42          int i = 0;          size_t i = 0;
43    
44          while (*l && i < sizeof(staticbuf)) {          while (*l && i < sizeof(staticbuf)) {
45                  char u = *l++;                  char u = *l++;
# Line 65  int main(int argc, char *argv[]) Line 68  int main(int argc, char *argv[])
68          a = argv[1];          a = argv[1];
69          b = argv[2];          b = argv[2];
70    
71    
72          printf("\n/*  AUTOMATICALLY GENERATED! Do not edit.  */\n\n");          printf("\n/*  AUTOMATICALLY GENERATED! Do not edit.  */\n\n");
73    
74            printf("#include <assert.h>\n");
75            printf("#include \"debugger.h\"\n");
76    
77          printf("#define DYNTRANS_MAX_VPH_TLB_ENTRIES "          printf("#define DYNTRANS_MAX_VPH_TLB_ENTRIES "
78              "%s_MAX_VPH_TLB_ENTRIES\n", uppercase(a));              "%s_MAX_VPH_TLB_ENTRIES\n", uppercase(a));
79          printf("#define DYNTRANS_ARCH %s\n", a);          printf("#define DYNTRANS_ARCH %s\n", a);
80          printf("#define DYNTRANS_%s\n", uppercase(a));          printf("#define DYNTRANS_%s\n", uppercase(a));
81          printf("#ifdef DYNTRANS_32\n"  
82              "#define DYNTRANS_1LEVEL\n"          /*  For 64-bit platforms, arch_L2N, and arch_L3N must be defined.  */
83              "#endif\n");          printf("#ifndef DYNTRANS_32\n");
84            printf("#define DYNTRANS_L2N %s_L2N\n"
85                "#define DYNTRANS_L3N %s_L3N\n"
86                "#if !defined(%s_L2N) || !defined(%s_L3N)\n"
87                "#error arch_L2N, and arch_L3N must be defined for this arch!\n"
88                "#endif\n",
89                uppercase(a), uppercase(a), uppercase(a), uppercase(a));
90            printf("#define DYNTRANS_L2_64_TABLE %s_l2_64_table\n"
91                "#define DYNTRANS_L3_64_TABLE %s_l3_64_table\n", a, a);
92            printf("#endif\n");
93    
94            /*  Default pagesize is 4KB.  */
95          printf("#ifndef DYNTRANS_PAGESIZE\n"          printf("#ifndef DYNTRANS_PAGESIZE\n"
96              "#define DYNTRANS_PAGESIZE 4096\n"              "#define DYNTRANS_PAGESIZE 4096\n"
97              "#endif\n");              "#endif\n");
98    
99          printf("#define DYNTRANS_IC %s_instr_call\n", a);          printf("#define DYNTRANS_IC %s_instr_call\n", a);
100          printf("#define DYNTRANS_IC_ENTRIES_PER_PAGE "          printf("#define DYNTRANS_IC_ENTRIES_PER_PAGE "
101              "%s_IC_ENTRIES_PER_PAGE\n", uppercase(a));              "%s_IC_ENTRIES_PER_PAGE\n", uppercase(a));
# Line 112  int main(int argc, char *argv[]) Line 131  int main(int argc, char *argv[])
131              "#define instr32(n) %s32_instr_ ## n\n\n", a);              "#define instr32(n) %s32_instr_ ## n\n\n", a);
132          printf("#endif\n\n");          printf("#endif\n\n");
133    
134          printf("/*  This is for marking a physical page as containing "          printf("/*  This is for marking a physical page as containing"
135              "translated or\n    combined instructions, respectively:  */\n");              "\n    combined instructions:  */\n");
         printf("#define translated (cpu->cd.%s.cur_physpage->flags "  
             "|= TRANSLATIONS)\n", a);  
136          printf("#define combined (cpu->cd.%s.cur_physpage->flags "          printf("#define combined (cpu->cd.%s.cur_physpage->flags "
137              "|= COMBINATIONS)\n", a);              "|= COMBINATIONS)\n", a);
138    
# Line 136  int main(int argc, char *argv[]) Line 153  int main(int argc, char *argv[])
153          printf("\tcpu->cd.%s.next_ic --;\n", a);          printf("\tcpu->cd.%s.next_ic --;\n", a);
154          printf("}\n\n");          printf("}\n\n");
155    
156          /*  TODO: solve this in a nicer way!  */          /*  Ugly special hack for Transputer:  */
157          if (strcmp(a, "avr") == 0)          if (strcasecmp(argv[1], "transputer") == 0) {
158                  printf("static struct %s_instr_call nothing_call = { "                  printf("static struct %s_instr_call nothing_call = { "
159                      "instr(nothing), {0,0} };\n", a);                      "instr(nothing), {0} };\n", a);
160          else          } else {
161                  printf("static struct %s_instr_call nothing_call = { "                  printf("static struct %s_instr_call nothing_call = { "
162                      "instr(nothing), {0,0,0} };\n", a);                      "instr(nothing), {0,0,0} };\n", a);
163            }
164    
165          printf("\n");          printf("\n");
166    

Legend:
Removed from v.14  
changed lines
  Added in v.28

  ViewVC Help
Powered by ViewVC 1.1.26