aboutsummaryrefslogtreecommitdiffstats
path: root/template/optinsn.inc.tmpl
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-10 01:53:24 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-01-10 01:53:24 +0000
commit5ad95486e63675b2bb3ad665bb2b84eb260c6f29 (patch)
tree9ed7d02028ba1edd4a74e090fb4c7155b55aafd6 /template/optinsn.inc.tmpl
parent7c7d47d2369881f8ea22da34077459771276786a (diff)
downloadruby-5ad95486e63675b2bb3ad665bb2b84eb260c6f29.tar.gz
merge revisions 61753:61750 61747:61740 61737:61728
Revert all the VM generator rewrites; requested by naruse git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61755 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'template/optinsn.inc.tmpl')
-rw-r--r--template/optinsn.inc.tmpl78
1 files changed, 78 insertions, 0 deletions
diff --git a/template/optinsn.inc.tmpl b/template/optinsn.inc.tmpl
new file mode 100644
index 0000000000..b1fba6dea3
--- /dev/null
+++ b/template/optinsn.inc.tmpl
@@ -0,0 +1,78 @@
+/* -*-c-*- *********************************************************/
+/*******************************************************************/
+/*******************************************************************/
+/**
+ This file is for threaded code.
+
+ ----
+ This file is auto generated by insns2vm.rb
+ DO NOT TOUCH!
+
+ If you want to fix something, you must edit 'template/optinsn.inc.tmpl'
+ or tool/insns2vm.rb
+ */
+
+static INSN *
+insn_operands_unification(INSN *insnobj)
+{
+#ifdef OPT_OPERANDS_UNIFICATION
+ /* optimize rule */
+ switch(insnobj->insn_id){
+% opt_insns_map.each do |originsn, optinsns|
+ case BIN(<%=originsn.name%>):
+% optinsns.each {|opti|
+ if (
+% opti.defopes.each_with_index {|opinfo, i|
+% next if opinfo[1] == '*'
+ insnobj->operands[<%=i%>] == <%=val_as_type(opinfo)%> &&
+% }
+ 1) {
+% idx = 0
+% opti.defopes.each_with_index {|opinfo, n|
+% if opinfo[1] == '*'
+% if idx != n
+ insnobj->operands[<%=idx%>] = insnobj->operands[<%=n%>];
+% end
+% idx += 1
+% end
+% }
+ insnobj->insn_id = BIN(<%=opti.name%>);
+ insnobj->operand_size = <%=idx%>;
+ break;
+ }
+% }
+ break;
+% end
+
+ default:
+ /* do nothing */;
+ break;
+ }
+#endif
+ return insnobj;
+}
+
+int
+rb_insn_unified_local_var_level(VALUE insn)
+{
+#ifdef OPT_OPERANDS_UNIFICATION
+ /* optimize rule */
+ switch (insn) {
+% opt_insns_map.each do |originsn, optinsns|
+% optinsns.each {|opti|
+ case BIN(<%=opti.name%>):
+% opti.defopes.each {|opinfo|
+% next if opinfo[1] == '*'
+ return <%=opinfo[1]%>;
+% break
+% }
+% }
+% end
+
+ default:
+ /* do nothing */;
+ break;
+ }
+#endif
+ return -1;
+}