version 1.189, 2007/10/29 13:45:50
|
version 1.190, 2007/10/29 15:56:31
|
Line 47
|
Line 47
|
/* #include <systypes.h> */ |
/* #include <systypes.h> */ |
#endif |
#endif |
|
|
|
/* output rules etc. for burg with --debug and --print-sequences */ |
|
/* #define BURG_FORMAT*/ |
|
|
typedef enum prim_num { |
typedef enum prim_num { |
/* definitions of N_execute etc. */ |
/* definitions of N_execute etc. */ |
#include PRIM_NUM_I |
#include PRIM_NUM_I |
Line 226 static int nonrelocs = 0;
|
Line 229 static int nonrelocs = 0;
|
|
|
#ifdef HAS_DEBUG |
#ifdef HAS_DEBUG |
int debug=0; |
int debug=0; |
# define debugp(x...) if (debug) fprintf(x); |
# define debugp(x...) do { if (debug) fprintf(x); } while (0) |
#else |
#else |
# define perror(x...) |
# define perror(x...) |
# define fprintf(x...) |
# define fprintf(x...) |
Line 975 static void check_prims(Label symbols1[]
|
Line 978 static void check_prims(Label symbols1[]
|
/* check whether the "goto *" is relocatable */ |
/* check whether the "goto *" is relocatable */ |
goto_len = goto_p[1]-goto_p[0]; |
goto_len = goto_p[1]-goto_p[0]; |
debugp(stderr, "goto * %p %p len=%ld\n", |
debugp(stderr, "goto * %p %p len=%ld\n", |
goto_p[0],symbols2[goto_p-symbols1],goto_len); |
goto_p[0],symbols2[goto_p-symbols1],(long)goto_len); |
if (memcmp(goto_p[0],symbols2[goto_p-symbols1],goto_len)!=0) { /* unequal */ |
if (memcmp(goto_p[0],symbols2[goto_p-symbols1],goto_len)!=0) { /* unequal */ |
no_dynamic=1; |
no_dynamic=1; |
debugp(stderr," not relocatable, disabling dynamic code generation\n"); |
debugp(stderr," not relocatable, disabling dynamic code generation\n"); |
Line 1001 static void check_prims(Label symbols1[]
|
Line 1004 static void check_prims(Label symbols1[]
|
pi->restlength = endlabel - symbols1[i] - pi->length; |
pi->restlength = endlabel - symbols1[i] - pi->length; |
pi->nimmargs = 0; |
pi->nimmargs = 0; |
relocs++; |
relocs++; |
|
#if defined(BURG_FORMAT) |
|
{ /* output as burg-style rules */ |
|
int p=super_costs[i].offset; |
|
if (p==N_noop) |
|
debugp(stderr, "S%d: S%d = %d (%d);", sc->state_in, sc->state_out, i+1, pi->length); |
|
else |
|
debugp(stderr, "S%d: op%d(S%d) = %d (%d);", sc->state_in, p, sc->state_out, i+1, pi->length); |
|
} |
|
#else |
debugp(stderr, "%-15s %d-%d %4d %p %p %p len=%3ld rest=%2ld send=%1d", |
debugp(stderr, "%-15s %d-%d %4d %p %p %p len=%3ld rest=%2ld send=%1d", |
prim_names[i], sc->state_in, sc->state_out, |
prim_names[i], sc->state_in, sc->state_out, |
i, s1, s2, s3, (long)(pi->length), (long)(pi->restlength), |
i, s1, s2, s3, (long)(pi->length), (long)(pi->restlength), |
pi->superend); |
pi->superend); |
|
#endif |
if (endlabel == NULL) { |
if (endlabel == NULL) { |
pi->start = NULL; /* not relocatable */ |
pi->start = NULL; /* not relocatable */ |
if (pi->length<0) pi->length=100; |
if (pi->length<0) pi->length=100; |
|
#ifndef BURG_FORMAT |
debugp(stderr,"\n non_reloc: no J label > start found\n"); |
debugp(stderr,"\n non_reloc: no J label > start found\n"); |
|
#endif |
relocs--; |
relocs--; |
nonrelocs++; |
nonrelocs++; |
continue; |
continue; |
Line 1016 static void check_prims(Label symbols1[]
|
Line 1031 static void check_prims(Label symbols1[]
|
if (ends1[i] > endlabel && !pi->superend) { |
if (ends1[i] > endlabel && !pi->superend) { |
pi->start = NULL; /* not relocatable */ |
pi->start = NULL; /* not relocatable */ |
pi->length = endlabel-symbols1[i]; |
pi->length = endlabel-symbols1[i]; |
|
#ifndef BURG_FORMAT |
debugp(stderr,"\n non_reloc: there is a J label before the K label (restlength<0)\n"); |
debugp(stderr,"\n non_reloc: there is a J label before the K label (restlength<0)\n"); |
|
#endif |
relocs--; |
relocs--; |
nonrelocs++; |
nonrelocs++; |
continue; |
continue; |
Line 1024 static void check_prims(Label symbols1[]
|
Line 1041 static void check_prims(Label symbols1[]
|
if (ends1[i] < pi->start && !pi->superend) { |
if (ends1[i] < pi->start && !pi->superend) { |
pi->start = NULL; /* not relocatable */ |
pi->start = NULL; /* not relocatable */ |
pi->length = endlabel-symbols1[i]; |
pi->length = endlabel-symbols1[i]; |
|
#ifndef BURG_FORMAT |
debugp(stderr,"\n non_reloc: K label before I label (length<0)\n"); |
debugp(stderr,"\n non_reloc: K label before I label (length<0)\n"); |
|
#endif |
relocs--; |
relocs--; |
nonrelocs++; |
nonrelocs++; |
continue; |
continue; |
Line 1035 static void check_prims(Label symbols1[]
|
Line 1054 static void check_prims(Label symbols1[]
|
if (s1[j]==s3[j]) { |
if (s1[j]==s3[j]) { |
if (s1[j] != s2[j]) { |
if (s1[j] != s2[j]) { |
pi->start = NULL; /* not relocatable */ |
pi->start = NULL; /* not relocatable */ |
|
#ifndef BURG_FORMAT |
debugp(stderr,"\n non_reloc: engine1!=engine2 offset %3d",j); |
debugp(stderr,"\n non_reloc: engine1!=engine2 offset %3d",j); |
|
#endif |
/* assert(j<prim_len); */ |
/* assert(j<prim_len); */ |
relocs--; |
relocs--; |
nonrelocs++; |
nonrelocs++; |
Line 1056 static void check_prims(Label symbols1[]
|
Line 1077 static void check_prims(Label symbols1[]
|
debugp(stderr,"\n relative immarg: offset %3d",j); |
debugp(stderr,"\n relative immarg: offset %3d",j); |
} else { |
} else { |
pi->start = NULL; /* not relocatable */ |
pi->start = NULL; /* not relocatable */ |
|
#ifndef BURG_FORMAT |
debugp(stderr,"\n non_reloc: engine1!=engine3 offset %3d",j); |
debugp(stderr,"\n non_reloc: engine1!=engine3 offset %3d",j); |
|
#endif |
/* assert(j<prim_len);*/ |
/* assert(j<prim_len);*/ |
relocs--; |
relocs--; |
nonrelocs++; |
nonrelocs++; |
Line 1641 static void optimize_rewrite(Cell *instp
|
Line 1664 static void optimize_rewrite(Cell *instp
|
#ifndef NO_DYNAMIC |
#ifndef NO_DYNAMIC |
if (print_sequences) { |
if (print_sequences) { |
for (i=0; i<ninsts; i++) |
for (i=0; i<ninsts; i++) |
|
#if defined(BURG_FORMAT) |
|
fprintf(stderr, "op%d ", super_costs[origs[i]].offset); |
|
#else |
fprintf(stderr, "%s ", prim_names[origs[i]]); |
fprintf(stderr, "%s ", prim_names[origs[i]]); |
|
#endif |
fprintf(stderr, "\n"); |
fprintf(stderr, "\n"); |
} |
} |
#endif |
#endif |