* opcodes.c, opcodes.h: reduce runtime relocations.
svn path=/trunk/mono/; revision=32066
if (in_fault && entry->opval == 0xDC)
fprintf (output, " %s", "endfault");
else
- fprintf (output, " %s ", mono_opcode_names [i]);
+ fprintf (output, " %s ", mono_opcode_name (i));
ptr++;
switch (entry->argument){
case MonoInlineBrTarget: {
td.is_bb_start [td.ip - td.il_code] == 3 ? "<>" :
td.is_bb_start [td.ip - td.il_code] == 2 ? "< " :
td.is_bb_start [td.ip - td.il_code] == 1 ? " >" : " ",
- mono_opcode_names [*td.ip], td.new_ip - td.new_code, td.sp - td.stack,
+ mono_opcode_name (*td.ip), td.new_ip - td.new_code, td.sp - td.stack,
td.sp > td.stack ? stack_type_string [td.sp [-1].type] : " ",
(td.sp > td.stack && (td.sp [-1].type == STACK_TYPE_O || td.sp [-1].type == STACK_TYPE_VT)) ? (td.sp [-1].klass == NULL ? "?" : td.sp [-1].klass->name) : "",
td.vt_sp, td.max_vt_sp);
+Mon Aug 9 14:41:45 CEST 2004 Paolo Molaro <lupus@ximian.com>
+
+ * opcodes.c, opcodes.h: reduce runtime relocations.
+
Mon Aug 9 13:30:53 CEST 2004 Paolo Molaro <lupus@ximian.com>
* culture-info.h, locales.c: fixes and chages to sue the new
#undef OPDEF
+#define MSGSTRFIELD(line) MSGSTRFIELD1(line)
+#define MSGSTRFIELD1(line) str##line
+static const struct msgstr_t {
+#define OPDEF(a,b,c,d,e,f,g,h,i,j) char MSGSTRFIELD(__LINE__) [sizeof (b)];
+#include "mono/cil/opcode.def"
+#undef OPDEF
+} opstr = {
#define OPDEF(a,b,c,d,e,f,g,h,i,j) b,
-
-const char* const
-mono_opcode_names [MONO_CEE_LAST + 1] = {
#include "mono/cil/opcode.def"
- NULL
+#undef OPDEF
+};
+static const int opidx [] = {
+#define OPDEF(a,b,c,d,e,f,g,h,i,j) [MONO_ ## a] = offsetof (struct msgstr_t, MSGSTRFIELD(__LINE__)),
+#include "mono/cil/opcode.def"
+#undef OPDEF
};
+const char*
+mono_opcode_name (int opcode)
+{
+ return (const char*)&opstr + opidx [opcode];
+}
+
MonoOpcodeEnum
mono_opcode_value (const guint8 **ip, const guint8 *end)
{
} MonoOpcode;
extern const MonoOpcode mono_opcodes [];
-extern const char* const mono_opcode_names [];
+
+const char*
+mono_opcode_name (int opcode);
MonoOpcodeEnum
mono_opcode_value (const guint8 **ip, const guint8 *end);
#endif
#define MINI_OP(a,b) b,
/* keep in sync with the enum in mini.h */
-static const char*
+static const char* const
opnames[] = {
#include "mini-ops.h"
};
if (op >= OP_LOAD && op <= OP_LAST)
return opnames [op - OP_LOAD];
if (op < OP_LOAD)
- return mono_opcode_names [op];
+ return mono_opcode_name (op);
g_error ("unknown opcode name for %d", op);
return NULL;
}
n = read32 (ip + 1);
if (n >= -1 && n <= 8) {
int_waste += 4;
- g_print ("%s %d\n", mono_opcode_names [i], n);
+ g_print ("%s %d\n", mono_opcode_name (i), n);
} else if (n < 128 && n >= -128) {
int_waste += 3;
- g_print ("%s %d\n", mono_opcode_names [i], n);
+ g_print ("%s %d\n", mono_opcode_name (i), n);
}
ip += 5;
break;
case MONO_CEE_LDLOC:
case MONO_CEE_STLOC:
var_waste += 3;
- g_print ("%s %d\n", mono_opcode_names [i], n);
+ g_print ("%s %d\n", mono_opcode_name (i), n);
break;
default:
var_waste += 2;
- g_print ("%s %d\n", mono_opcode_names [i], n);
+ g_print ("%s %d\n", mono_opcode_name (i), n);
break;
}
} else {
var_waste += 2;
- g_print ("%s %d\n", mono_opcode_names [i], n);
+ g_print ("%s %d\n", mono_opcode_name (i), n);
}
}
ip += 3;
case MONO_CEE_LDLOC_S:
case MONO_CEE_STLOC_S:
var_waste++;
- g_print ("%s %d\n", mono_opcode_names [i], (signed char)ip [1]);
+ g_print ("%s %d\n", mono_opcode_name (i), (signed char)ip [1]);
break;
default:
break;
break;
case MonoShortInlineI:
if ((signed char)ip [1] <= 8 && (signed char)ip [1] >= -1) {
- g_print ("%s %d\n", mono_opcode_names [i], (signed char)ip [1]);
+ g_print ("%s %d\n", mono_opcode_name (i), (signed char)ip [1]);
int_waste ++;
}
ip += 2;