}
}
-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 */
}
}
-void instruction_operand::store_code_block(code_block* compiled) {
- store_value(compiled->entry_point());
-}
-
}
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);
};
}
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);
}
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);
}