OSDN Git Service

ruby-1.9.1-rc1
[splhack/AndroidRuby.git] / lib / ruby-1.9.1-rc1 / template / insns_info.inc.tmpl
diff --git a/lib/ruby-1.9.1-rc1/template/insns_info.inc.tmpl b/lib/ruby-1.9.1-rc1/template/insns_info.inc.tmpl
new file mode 100644 (file)
index 0000000..a58ac3c
--- /dev/null
@@ -0,0 +1,83 @@
+/** -*-c-*-
+  This file contains instruction information for yarv instruction sequence.
+  
+  ----
+  This file is auto generated by insns2vm.rb
+  DO NOT TOUCH!
+  
+  If you want to fix something, you must edit 'template/insns_info.inc.tmpl'
+  or insns2vm.rb
+ */
+
+<%= insn_type_chars %>
+
+static const char *const insn_name_info[] = {
+<%= insn_names %>
+};
+
+static const char *const insn_operand_info[] = {
+<%= operands_info %>
+};
+
+static const int insn_len_info[] = {
+<%= operands_num_info %>
+};
+
+#ifdef USE_INSN_RET_NUM
+static const int insn_stack_push_num_info[] = {
+<%= stack_num_info %>
+};
+#endif
+
+#ifdef USE_INSN_STACK_INCREASE
+static int
+insn_stack_increase(int depth, int insn, VALUE *opes)
+{
+  switch(insn){
+<%= stack_increase %>
+  default:
+    rb_bug("insn_sp_increase: unreachable");
+  }
+  return 0;
+}
+#endif
+
+/* some utilities */
+
+static int
+insn_len(int insn)
+{
+  return insn_len_info[insn];
+}
+
+static const char *
+insn_name(int insn)
+{
+  return insn_name_info[insn];
+}
+
+static const char *
+insn_op_types(int insn)
+{
+  return insn_operand_info[insn];
+}
+
+static int
+insn_op_type(int insn, int pos)
+{
+  int len = insn_len(insn) - 1;
+  if(pos < len){
+    return insn_operand_info[insn][pos];
+  }
+  else{
+    return 0;
+  }
+}
+
+#ifdef USE_INSN_RET_NUM
+static int
+insn_ret_num(int insn)
+{
+  return insn_stack_push_num_info[insn];
+}
+#endif