VM: removes a few methods related to relocation handling
They are only used once, so it is simpler to "inline" themdb4
							parent
							
								
									7da72ac77c
								
							
						
					
					
						commit
						0c9c0b2f82
					
				| 
						 | 
				
			
			@ -73,14 +73,8 @@ fixnum instruction_operand::load_value(cell relative_to) {
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fixnum instruction_operand::load_value() { return load_value(pointer); }
 | 
			
		||||
 | 
			
		||||
code_block* instruction_operand::load_code_block(cell relative_to) {
 | 
			
		||||
  return ((code_block*)load_value(relative_to) - 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
code_block* instruction_operand::load_code_block() {
 | 
			
		||||
  return load_code_block(pointer);
 | 
			
		||||
  return ((code_block*)load_value(pointer) - 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Store a 32-bit value into a PowerPC LIS/ORI sequence */
 | 
			
		||||
| 
						 | 
				
			
			@ -158,8 +152,4 @@ void instruction_operand::store_value(fixnum absolute_value) {
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void instruction_operand::store_code_block(code_block* compiled) {
 | 
			
		||||
  store_value(compiled->entry_point());
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -131,15 +131,12 @@ struct instruction_operand {
 | 
			
		|||
  fixnum load_value_2_2_2_2();
 | 
			
		||||
  fixnum load_value_masked(cell mask, cell bits, cell shift);
 | 
			
		||||
  fixnum load_value(cell relative_to);
 | 
			
		||||
  fixnum load_value();
 | 
			
		||||
  code_block* load_code_block(cell relative_to);
 | 
			
		||||
  code_block* load_code_block();
 | 
			
		||||
 | 
			
		||||
  void store_value_2_2(fixnum value);
 | 
			
		||||
  void store_value_2_2_2_2(fixnum value);
 | 
			
		||||
  void store_value_masked(fixnum value, cell mask, cell shift);
 | 
			
		||||
  void store_value(fixnum value);
 | 
			
		||||
  void store_code_block(code_block* compiled);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -370,8 +370,10 @@ void slot_visitor<Fixup>::visit_embedded_literals(code_block* compiled) {
 | 
			
		|||
    return;
 | 
			
		||||
 | 
			
		||||
  auto update_literal_refs = [&](instruction_operand op) {
 | 
			
		||||
    if (op.rel.type() == RT_LITERAL)
 | 
			
		||||
      op.store_value(visit_pointer(op.load_value()));
 | 
			
		||||
    if (op.rel.type() == RT_LITERAL) {
 | 
			
		||||
      fixnum value = op.load_value(op.pointer);
 | 
			
		||||
      op.store_value(visit_pointer(value));
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
  compiled->each_instruction_operand(update_literal_refs);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -441,8 +443,10 @@ void slot_visitor<Fixup>::visit_embedded_code_pointers(code_block* compiled) {
 | 
			
		|||
    relocation_type type = op.rel.type();
 | 
			
		||||
    if (type == RT_ENTRY_POINT ||
 | 
			
		||||
        type == RT_ENTRY_POINT_PIC ||
 | 
			
		||||
        type == RT_ENTRY_POINT_PIC_TAIL)
 | 
			
		||||
      op.store_code_block(fixup.fixup_code(op.load_code_block()));
 | 
			
		||||
        type == RT_ENTRY_POINT_PIC_TAIL) {
 | 
			
		||||
      code_block* block = fixup.fixup_code(op.load_code_block());
 | 
			
		||||
      op.store_value(block->entry_point());
 | 
			
		||||
    }
 | 
			
		||||
  };
 | 
			
		||||
  compiled->each_instruction_operand(update_code_block_refs);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue