[前][次][番号順一覧][スレッド一覧][生データ]

yarv-diff:190

From: ko1 atdot.net
Date: 31 Dec 2005 17:48:58 -0000
Subject: [yarv-diff:190] r348 - in trunk: . benchmark rb template yarvtest

Author: ko1
Date: 2006-01-01 02:48:58 +0900 (Sun, 01 Jan 2006)
New Revision: 348

Added:
   trunk/rb/vtlh.rb
Modified:
   trunk/ChangeLog
   trunk/benchmark/bmx_temp.rb
   trunk/common.mk
   trunk/rb/insns2vm.rb
   trunk/template/vm.inc.tmpl
   trunk/vm_macro.def
   trunk/yarvtest/test_method.rb
Log:
	* common.mk : add address analyse to vtune rule

	* rb/vtlh.rb : added for above

	* rb/insns2vm.rb, template/vm.inc.tmpl : insert #line directive
	to reference above

	* vm_macro.def (macro_eval_invoke_cfunc) : fix indent

	* yarvtest/test_method.rb : fix indent, spacing
	and add a test for alias



Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2005-12-31 03:55:58 UTC (rev 347)
+++ trunk/ChangeLog	2005-12-31 17:48:58 UTC (rev 348)
@@ -4,6 +4,21 @@
 #  from Mon, 03 May 2004 01:24:19 +0900
 #
 
+2006-01-01(Sun) 02:41:21 +0900  Koichi Sasada  <ko1 atdot.net>
+
+	* common.mk : add address analyse to vtune rule
+
+	* rb/vtlh.rb : added for above
+
+	* rb/insns2vm.rb, template/vm.inc.tmpl : insert #line directive
+	to reference above
+
+	* vm_macro.def (macro_eval_invoke_cfunc) : fix indent
+
+	* yarvtest/test_method.rb : fix indent, spacing
+	and add a test for alias
+
+
 2005-12-31(Sat) 12:42:05 +0900  Koichi Sasada  <ko1 atdot.net>
 
 	* common.mk : add Intel VTune rule (make vtune)

Modified: trunk/benchmark/bmx_temp.rb
===================================================================
--- trunk/benchmark/bmx_temp.rb	2005-12-31 03:55:58 UTC (rev 347)
+++ trunk/benchmark/bmx_temp.rb	2005-12-31 17:48:58 UTC (rev 348)
@@ -1,10 +1,4 @@
-def fib n
-  if n < 3
-    1
-  else
-    fib(n-1) + fib(n-2)
-  end
-end
-
-fib(34)
-
+require 'erb'
+50000.times{|e|
+  a = ERB.new('<%= e %>').result(binding)
+}

Modified: trunk/common.mk
===================================================================
--- trunk/common.mk	2005-12-31 03:55:58 UTC (rev 347)
+++ trunk/common.mk	2005-12-31 17:48:58 UTC (rev 348)
@@ -484,4 +484,4 @@
 vtune: all
 	vtl activity -c sampling -app ".\miniruby$(EXEEXT)","-I$(srcdir)/lib $(srcdir)/benchmark/bmx_temp.rb" run
 	vtl view -hf -mn miniruby$(EXEEXT) -sum -sort -cd
-
+	vtl view -ha -mn miniruby$(EXEEXT) -sum -sort -cd | $(BASERUBY) $(srcdir)/rb/vtlh.rb > ha.lines

Modified: trunk/rb/insns2vm.rb
===================================================================
--- trunk/rb/insns2vm.rb	2005-12-31 03:55:58 UTC (rev 347)
+++ trunk/rb/insns2vm.rb	2005-12-31 17:48:58 UTC (rev 348)
@@ -175,6 +175,17 @@
     comment = ''
     
     open(file){|f|
+      f.instance_variable_set(:@line_no, 0)
+      class << f
+        def line_no
+          @line_no
+        end
+        def gets
+          @line_no += 1
+          super
+        end
+      end
+
       while line = f.gets
         line.chomp!
         case line
@@ -212,12 +223,14 @@
           else
             sp_inc = nil
           end
-          
+
           raise unless /^\{$/ =~ f.gets.chomp
+          line_no = f.line_no
         
         # end instruction body
         when /^\}/
           if insn_in
+            body.instance_variable_set(:@line_no, line_no)
             insn = make_insn(insn, opes, pops, rets, comment, body, sp_inc)
             insn_in = false
             comment = ''
@@ -759,8 +772,14 @@
 
   def make_insn_def insn
     ret  = make_header insn
-    ret += insn.body
-    ret += make_footer insn
+    if line = insn.body.instance_variable_get(:@line_no)
+      ret << "#line #{line+1} \"#{$insns_def}\"" << "\n"
+      ret << insn.body
+      ret << '#line __CURRENT_LINE__ "vm.inc"' << "\n"
+    else
+      ret << insn.body
+    end
+    ret << make_footer(insn)
   end
   
   # vm.inc
@@ -771,7 +790,7 @@
       vm_body << "\n"
       vm_body << make_insn_def(insn)
     }
-    
+
     ERB.new(File.read(File.join($srcdir, '/template/vm.inc.tmpl'))).result(binding)
   end
 

Added: trunk/rb/vtlh.rb
===================================================================
--- trunk/rb/vtlh.rb	2005-12-31 03:55:58 UTC (rev 347)
+++ trunk/rb/vtlh.rb	2005-12-31 17:48:58 UTC (rev 348)
@@ -0,0 +1,15 @@
+# ARGF = open('ha')
+cd = `pwd`.chomp + '/'
+ARGF.each{|line|
+  if /^0x([a-z0-9]+),/ =~ line
+    stat = line.split(',')
+    addr = stat[0].hex + 0x00400000
+    retired = stat[2].to_i
+    ticks   = stat[3].to_i
+
+    src = `addr2line -e miniruby.exe #{addr.to_s(16)}`.chomp
+    src.sub!(cd, '')
+    puts '%-40s 0x%08x %8d %8d' % [src, addr, retired, ticks]
+  end
+}
+

Modified: trunk/template/vm.inc.tmpl
===================================================================
--- trunk/template/vm.inc.tmpl	2005-12-31 03:55:58 UTC (rev 347)
+++ trunk/template/vm.inc.tmpl	2005-12-31 17:48:58 UTC (rev 348)
@@ -11,5 +11,16 @@
   If you want to fix something, you must edit 'insns.c'
  */
 
-<%= vm_body %>
+<%=
+ret = ''
+offset = 15
+vm_body.each_with_index{|line, line_no|
+  if line =~ /^\#line __CURRENT_LINE__/
+    ret << line.sub(/__CURRENT_LINE__/, "#{line_no+offset}")
+  else
+    ret <<line
+  end
+}
+ret
+%>
 

Modified: trunk/vm_macro.def
===================================================================
--- trunk/vm_macro.def	2005-12-31 03:55:58 UTC (rev 347)
+++ trunk/vm_macro.def	2005-12-31 17:48:58 UTC (rev 348)
@@ -66,7 +66,8 @@
   th->cfp = reg_cfp; /* pop control stack frame */
 }
 
-MACRO macro_eval_invoke_func(niseqval, recv, klass, blockptr, num){
+MACRO macro_eval_invoke_func(niseqval, recv, klass, blockptr, num)
+{
   yarv_iseq_t *niseq;
   VALUE *sp = GET_SP();
   VALUE *rsp = sp - num - 1;

Modified: trunk/yarvtest/test_method.rb
===================================================================
--- trunk/yarvtest/test_method.rb	2005-12-31 03:55:58 UTC (rev 347)
+++ trunk/yarvtest/test_method.rb	2005-12-31 17:48:58 UTC (rev 348)
@@ -2,12 +2,12 @@
 class TestMethod < YarvTestBase
   
   def test_simple_method
-    ae <<-'EOS'
-    def m_simple_method
-      1
-    end
-    m_simple_method()
-    EOS
+    ae %q{
+      def m_simple_method
+        1
+      end
+      m_simple_method()
+    }
   end
 
   def test_polymorphic
@@ -239,7 +239,6 @@
       def m a, b = 0, c = 1, *d, &pr
         [a, b, c, d, pr]
       end
-      
       m(:a) +
       m(:a, :b) +
       m(:a, :b, :c) +
@@ -265,23 +264,18 @@
       def lobj.m
         :singleton
       end
-
       lobj.m
     }
-
     ae %q{
       class C
         def m
           :C_m
         end
       end
-
       lobj = C.new
-
       def lobj.m
         :Singleton_m
       end
-
       lobj.m
     }
   end
@@ -305,38 +299,40 @@
       def m1
         :ok
       end
-
       alias :m2 :m1
       m1
     }
-    
     ae %q{
       def m1
         :ok
       end
-
       alias m2 m1
       m1
     }
-    
     ae %q{
       def m1
         :ok
       end
-
       alias m2 :m1
       m1
     }
-
     ae %q{
       def m1
         :ok
       end
-
       alias :m2 m1
       m1
     }
-
+    ae %q{
+      def m1
+        :ok
+      end
+      alias m2 m1
+      def m1
+        :ok2
+      end
+      [m1, m2]
+    }
   end
 
   def test_split
@@ -388,14 +384,12 @@
       def getproc &b
         b
       end
-
       [1,2,3].map(&getproc{|block_e| block_e*block_e})
     }
     ae %q{
       def m a, b, &c
         c.call(a, b)
       end
-
       m(10, 20){|x, y|
         [x+y, x*y]
       }
@@ -456,7 +450,6 @@
       $1
     }
   end
-  
 end
 
 


-- 
ML: yarv-diff quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]