mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* vm.c, vm_insnhelper.h (ruby_vm_redefined_flag): apply optimization
patch proposed by Paul Brannan. [ruby-core:19171] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19762 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									c809aaa5e1
								
							
						
					
					
						commit
						7215c9af95
					
				
					 3 changed files with 31 additions and 23 deletions
				
			
		| 
						 | 
				
			
			@ -1,3 +1,8 @@
 | 
			
		|||
Sun Oct 12 12:03:38 2008  Koichi Sasada  <ko1@atdot.net>
 | 
			
		||||
 | 
			
		||||
	* vm.c, vm_insnhelper.h (ruby_vm_redefined_flag): apply optimization
 | 
			
		||||
	  patch proposed by Paul Brannan.  [ruby-core:19171]
 | 
			
		||||
 | 
			
		||||
Sun Oct 12 09:46:36 2008  Nobuyoshi Nakada  <nobu@ruby-lang.org>
 | 
			
		||||
 | 
			
		||||
	* strftime.c (rb_strftime): suppressed warnings on cygwin.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										6
									
								
								vm.c
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								vm.c
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -34,7 +34,7 @@ VALUE rb_cEnv;
 | 
			
		|||
VALUE rb_mRubyVMFrozenCore;
 | 
			
		||||
 | 
			
		||||
VALUE ruby_vm_global_state_version = 1;
 | 
			
		||||
VALUE ruby_vm_redefined_flag = 0;
 | 
			
		||||
char ruby_vm_redefined_flag[BOP_LAST_];
 | 
			
		||||
 | 
			
		||||
rb_thread_t *ruby_current_thread = 0;
 | 
			
		||||
rb_vm_t *ruby_current_vm = 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -877,7 +877,7 @@ rb_vm_check_redefinition_opt_method(const NODE *node)
 | 
			
		|||
    VALUE bop;
 | 
			
		||||
 | 
			
		||||
    if (st_lookup(vm_opt_method_table, (st_data_t)node, &bop)) {
 | 
			
		||||
	ruby_vm_redefined_flag |= bop;
 | 
			
		||||
	ruby_vm_redefined_flag[bop] = 1;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -902,7 +902,7 @@ vm_init_redefined_flag(void)
 | 
			
		|||
 | 
			
		||||
    vm_opt_method_table = st_init_numtable();
 | 
			
		||||
 | 
			
		||||
#define OP(mid_, bop_) (mid = id##mid_, bop = BOP_##bop_)
 | 
			
		||||
#define OP(mid_, bop_) (mid = id##mid_, bop = BOP_##bop_, ruby_vm_redefined_flag[bop] = 0)
 | 
			
		||||
#define C(k) add_opt_method(rb_c##k, mid, bop)
 | 
			
		||||
    OP(PLUS, PLUS), (C(Fixnum), C(Float), C(String), C(Array));
 | 
			
		||||
    OP(MINUS, MINUS), (C(Fixnum));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,32 +34,35 @@
 | 
			
		|||
#define VMDEBUG 3
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* VM state version */
 | 
			
		||||
enum {
 | 
			
		||||
  BOP_PLUS,
 | 
			
		||||
  BOP_MINUS,
 | 
			
		||||
  BOP_MULT,
 | 
			
		||||
  BOP_DIV,
 | 
			
		||||
  BOP_MOD,
 | 
			
		||||
  BOP_EQ,
 | 
			
		||||
  BOP_LT,
 | 
			
		||||
  BOP_LE,
 | 
			
		||||
  BOP_LTLT,
 | 
			
		||||
  BOP_AREF,
 | 
			
		||||
  BOP_ASET,
 | 
			
		||||
  BOP_LENGTH,
 | 
			
		||||
  BOP_SUCC,
 | 
			
		||||
  BOP_GT,
 | 
			
		||||
  BOP_GE,
 | 
			
		||||
  BOP_NOT,
 | 
			
		||||
  BOP_NEQ,
 | 
			
		||||
 | 
			
		||||
  BOP_LAST_,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern char ruby_vm_redefined_flag[BOP_LAST_];
 | 
			
		||||
extern VALUE ruby_vm_global_state_version;
 | 
			
		||||
extern VALUE ruby_vm_redefined_flag;
 | 
			
		||||
 | 
			
		||||
#define GET_VM_STATE_VERSION() (ruby_vm_global_state_version)
 | 
			
		||||
#define INC_VM_STATE_VERSION() \
 | 
			
		||||
  (ruby_vm_global_state_version = (ruby_vm_global_state_version+1) & 0x8fffffff)
 | 
			
		||||
 | 
			
		||||
#define BOP_PLUS     0x01
 | 
			
		||||
#define BOP_MINUS    0x02
 | 
			
		||||
#define BOP_MULT     0x04
 | 
			
		||||
#define BOP_DIV      0x08
 | 
			
		||||
#define BOP_MOD      0x10
 | 
			
		||||
#define BOP_EQ       0x20
 | 
			
		||||
#define BOP_LT       0x40
 | 
			
		||||
#define BOP_LE       0x80
 | 
			
		||||
#define BOP_LTLT    0x100
 | 
			
		||||
#define BOP_AREF    0x200
 | 
			
		||||
#define BOP_ASET    0x400
 | 
			
		||||
#define BOP_LENGTH  0x800
 | 
			
		||||
#define BOP_SUCC   0x1000
 | 
			
		||||
#define BOP_GT     0x2000
 | 
			
		||||
#define BOP_GE     0x4000
 | 
			
		||||
#define BOP_NOT    0x8000
 | 
			
		||||
#define BOP_NEQ   0x10000
 | 
			
		||||
 | 
			
		||||
/**********************************************************/
 | 
			
		||||
/* deal with stack                                        */
 | 
			
		||||
| 
						 | 
				
			
			@ -180,7 +183,7 @@ extern VALUE ruby_vm_redefined_flag;
 | 
			
		|||
 | 
			
		||||
/* optimize insn */
 | 
			
		||||
#define FIXNUM_2_P(a, b) ((a) & (b) & 1)
 | 
			
		||||
#define BASIC_OP_UNREDEFINED_P(op) (LIKELY((ruby_vm_redefined_flag & (op)) == 0))
 | 
			
		||||
#define BASIC_OP_UNREDEFINED_P(op) (LIKELY(ruby_vm_redefined_flag[op] == 0))
 | 
			
		||||
#define HEAP_CLASS_OF(obj) RBASIC(obj)->klass
 | 
			
		||||
 | 
			
		||||
#define CALL_SIMPLE_METHOD(num, id, recv) do { \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue