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