Merge branch 'master' into eliminating_register_variables
						commit
						2b8521a326
					
				| 
						 | 
				
			
			@ -293,10 +293,17 @@ struct initial_code_block_visitor {
 | 
			
		|||
void factor_vm::initialize_code_block(code_block *compiled)
 | 
			
		||||
{
 | 
			
		||||
	std::map<code_block *,cell>::iterator iter = code->uninitialized_blocks.find(compiled);
 | 
			
		||||
 | 
			
		||||
	initial_code_block_visitor visitor(this,iter->second);
 | 
			
		||||
	compiled->each_instruction_operand(visitor);
 | 
			
		||||
	compiled->flush_icache();
 | 
			
		||||
 | 
			
		||||
	code->uninitialized_blocks.erase(iter);
 | 
			
		||||
 | 
			
		||||
	/* next time we do a minor GC, we have to trace this code block, since
 | 
			
		||||
	the newly-installed instruction operands might point to literals in
 | 
			
		||||
	nursery or aging */
 | 
			
		||||
	code->write_barrier(compiled);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Fixup labels. This is done at compile time, not image load time */
 | 
			
		||||
| 
						 | 
				
			
			@ -378,11 +385,16 @@ code_block *factor_vm::add_code_block(code_block_type type, cell code_, cell lab
 | 
			
		|||
	if(to_boolean(labels.value()))
 | 
			
		||||
		fixup_labels(labels.as<array>().untagged(),compiled);
 | 
			
		||||
 | 
			
		||||
	/* next time we do a minor GC, we have to scan the code heap for
 | 
			
		||||
	literals */
 | 
			
		||||
	this->code->write_barrier(compiled);
 | 
			
		||||
	/* Once we are ready, fill in literal and word references in this code
 | 
			
		||||
	block's instruction operands. In most cases this is done right after this
 | 
			
		||||
	method returns, except when compiling words with the non-optimizing
 | 
			
		||||
	compiler at the beginning of bootstrap */
 | 
			
		||||
	this->code->uninitialized_blocks.insert(std::make_pair(compiled,literals.value()));
 | 
			
		||||
 | 
			
		||||
	/* next time we do a minor GC, we have to trace this code block, since
 | 
			
		||||
	the fields of the code_block struct might point into nursery or aging */
 | 
			
		||||
	this->code->write_barrier(compiled);
 | 
			
		||||
 | 
			
		||||
	return compiled;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue