yarv-diff:121
From: ko1 atdot.net
Date: 11 Oct 2005 04:37:38 -0000
Subject: [yarv-diff:121] r277 - in trunk: . yarvtest
Author: ko1
Date: 2005-10-11 13:37:37 +0900 (Tue, 11 Oct 2005)
New Revision: 277
Modified:
trunk/ChangeLog
trunk/insns.def
trunk/test.rb
trunk/thread.c
trunk/thread_pthread.h
trunk/thread_win32.h
trunk/vm.c
trunk/vm_opts.h
trunk/yarvcore.h
trunk/yarvtest/yarvtest.rb
Log:
* insns.def : add YARV_CHECK_INTS()
* thread.c, thread_pthread.h, thread_win32.h : kick timer thread
when another thread kicked
* vm.c : remove debug print
* vm_opts.h : add OPT_CALL_THREADED_CODE
* yarvtest/yarvtest.rb : remove "\r" from answer
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2005-10-07 00:36:58 UTC (rev 276)
+++ trunk/ChangeLog 2005-10-11 04:37:37 UTC (rev 277)
@@ -4,6 +4,20 @@
# from Mon, 03 May 2004 01:24:19 +0900
#
+2005-10-11(Tue) 13:35:25 +0900 Koichi Sasada <ko1 atdot.net>
+
+ * insns.def : add YARV_CHECK_INTS()
+
+ * thread.c, thread_pthread.h, thread_win32.h : kick timer thread
+ when another thread kicked
+
+ * vm.c : remove debug print
+
+ * vm_opts.h : add OPT_CALL_THREADED_CODE
+
+ * yarvtest/yarvtest.rb : remove "\r" from answer
+
+
2005-10-07(Fri) 09:36:36 +0900 Koichi Sasada <ko1 atdot.net>
* yarvcore.h : add member variable "interrupt_flag" to yarv_thread_t
Modified: trunk/insns.def
===================================================================
--- trunk/insns.def 2005-10-07 00:36:58 UTC (rev 276)
+++ trunk/insns.def 2005-10-11 04:37:37 UTC (rev 277)
@@ -1477,6 +1477,7 @@
()
()
{
+ YARV_CHECK_INTS();
JUMP(dst);
}
@@ -1492,6 +1493,7 @@
()
{
if(RTEST(val)){
+ YARV_CHECK_INTS();
JUMP(dst);
}
}
@@ -1508,6 +1510,7 @@
()
{
if(!RTEST(val)){
+ YARV_CHECK_INTS();
JUMP(dst);
}
}
Modified: trunk/test.rb
===================================================================
--- trunk/test.rb 2005-10-07 00:36:58 UTC (rev 276)
+++ trunk/test.rb 2005-10-11 04:37:37 UTC (rev 277)
@@ -1,3 +1,23 @@
+
+i=0
+while i<10_000_000
+ i+=1
+end
+
+__END__
+t1 = Thread.new{
+ 10000.times{|e|
+ p [1, e]
+ }
+}
+t2 = Thread.new{
+ 10000.times{|e|
+ p [2, e]
+ }
+}
+t1.join; t2.join
+
+__END__
a = 0
def m b
eval('a+=1', b)
Modified: trunk/thread.c
===================================================================
--- trunk/thread.c 2005-10-07 00:36:58 UTC (rev 276)
+++ trunk/thread.c 2005-10-11 04:37:37 UTC (rev 277)
@@ -534,8 +534,6 @@
rb_define_method(cYarvThread, "keys", rb_thread_keys, 0);
Init_native_thread();
- make_timer_thread();
-
{
/* main thread setting */
{
Modified: trunk/thread_pthread.h
===================================================================
--- trunk/thread_pthread.h 2005-10-07 00:36:58 UTC (rev 276)
+++ trunk/thread_pthread.h 2005-10-11 04:37:37 UTC (rev 277)
@@ -56,13 +56,20 @@
return 0;
}
+static void make_timer_thread();
+
static int
native_thread_crteate(yarv_thread_t *th)
{
pthread_attr_t attr;
size_t stack_size = 4 * 1024 - sizeof(int); /* 4KB */
int err;
+ static int init = 0;
+ if(!init){
+ make_timer_thread();
+ }
+
thread_debug("create: %p, stack size: %d\n", th, stack_size);
pthread_attr_init(&attr);
Modified: trunk/thread_win32.h
===================================================================
--- trunk/thread_win32.h 2005-10-07 00:36:58 UTC (rev 276)
+++ trunk/thread_win32.h 2005-10-11 04:37:37 UTC (rev 277)
@@ -176,10 +176,18 @@
return 0;
}
+static void make_timer_thread();
+
static int
native_thread_crteate(yarv_thread_t *th)
{
size_t stack_size = 4 * 1024 - sizeof(int); /* 4KB */
+ static int init = 0;
+
+ if(!init){
+ make_timer_thread();
+ }
+
if((th->thread_id = (HANDLE)_beginthreadex(0, /* security */
stack_size,
thread_start_func_1,
Modified: trunk/vm.c
===================================================================
--- trunk/vm.c 2005-10-07 00:36:58 UTC (rev 276)
+++ trunk/vm.c 2005-10-11 04:37:37 UTC (rev 277)
@@ -158,7 +158,6 @@
int i, local_size;
if(ENV_IN_HEAP_P(envptr)){
- printf("ENV_IN_HEAP!\n");
return ENV_VAL(envptr);
}
if(envptr != endptr){
Modified: trunk/vm_opts.h
===================================================================
--- trunk/vm_opts.h 2005-10-07 00:36:58 UTC (rev 276)
+++ trunk/vm_opts.h 2005-10-11 04:37:37 UTC (rev 277)
@@ -5,12 +5,13 @@
#ifndef VM_OPTS_H_INCLUDED
#define VM_OPTS_H_INCLUDED
-#define IGNORE_OPTIMIZE 1
+#define IGNORE_OPTIMIZE 0
#if IGNORE_OPTIMIZE == 0
/* compiler depend */
#define OPT_DIRECT_THREADED_CODE 1
+#define OPT_CALL_THREADED_CODE 0
/* architecture independent */
#define OPT_BASIC_OPERATIONS 1
@@ -21,7 +22,7 @@
#define OPT_INSTRUCTIONS_UNIFICATION 1
#define OPT_UNIFY_ALL_COMBINATION 1
-#define OPT_STACK_CACHING 1
+#define OPT_STACK_CACHING 0
#endif /* IGNORE_OPTIMIZE */
Modified: trunk/yarvcore.h
===================================================================
--- trunk/yarvcore.h 2005-10-07 00:36:58 UTC (rev 276)
+++ trunk/yarvcore.h 2005-10-11 04:37:37 UTC (rev 277)
@@ -41,7 +41,7 @@
#endif
#endif
-#else
+#else /* defined(__GNUC__) && __GNUC__ >= 2 */
/* disable threaded code options */
#if OPT_DIRECT_THREADED_CODE
@@ -56,21 +56,21 @@
#if OPT_CALL_THREADED_CODE
#if OPT_DIRECT_THREADED_CODE
#undef OPT_DIRECT_THREADED_CODE
-#endif
+#endif /* OPT_DIRECT_THREADED_CODE */
#if OPT_STACK_CACHING
#undef OPT_STACK_CACHING
-#endif
+#endif /* OPT_STACK_CACHING */
#define YARV_AOT_COMPILED 1
-#endif
+#endif /* OPT_CALL_THREADED_CODE */
/* likely */
#ifdef __GCC__
#define LIKELY(x) (__builtin_expect(x, 1))
#define UNLIKELY(x) (__builtin_expect(x, 0))
-#else
+#else /* __GCC__ */
#define LIKELY(x) ((x) == 1)
#define UNLIKELY(x) ((x) == 0)
-#endif
+#endif /* __GCC__*/
#define YARVDEBUG 0
#define CPDEBUG 0
Modified: trunk/yarvtest/yarvtest.rb
===================================================================
--- trunk/yarvtest/yarvtest.rb 2005-10-07 00:36:58 UTC (rev 276)
+++ trunk/yarvtest/yarvtest.rb 2005-10-11 04:37:37 UTC (rev 277)
@@ -58,6 +58,7 @@
end
def exec exec_file, program
+ exec_file.tr!('\\', '/')
r = ''
IO.popen("#{exec_file}", 'r+'){|io|
#
@@ -88,7 +89,7 @@
puts "ruby (#@ruby): #{ruby}"
end
- assert_equal(ruby, yarv)
+ assert_equal(ruby.gsub(/\r/, ''), yarv.gsub(/\r/, ''))
end
def test_
--
ML: yarv-diff quickml.atdot.net
Info: http://www.atdot.net/~ko1/quickml