Exemple #1
0
template<typename Func> Func factor_vm::get_entry_point(cell n)
{
	/* We return word->code->entry_point() and not word->entry_point,
	because if profiling is enabled, we don't want to go through the
	entry point's profiling stub. This clobbers registers, since entry
	points use the C ABI and not the Factor ABI. */
	tagged<word> entry_point_word(special_objects[n]);
	return (Func)entry_point_word->code->entry_point();
}
void factor_vm::set_fpu_state(cell state) {
  tagged<word> entry_point_word(special_objects[SET_FPU_STATE_WORD]);
  cell func = entry_point_word->entry_point;
  CODE_TO_FUNCTION_POINTER(func);
  ((set_fpu_state_func_type) func)(state);
}
cell factor_vm::get_fpu_state() {
  tagged<word> entry_point_word(special_objects[GET_FPU_STATE_WORD]);
  cell func = entry_point_word->entry_point;
  CODE_TO_FUNCTION_POINTER(func);
  return ((get_fpu_state_func_type) func)();
}
void factor_vm::unwind_native_frames(cell quot, cell to) {
  tagged<word> entry_point_word(special_objects[UNWIND_NATIVE_FRAMES_WORD]);
  cell func = entry_point_word->entry_point;
  CODE_TO_FUNCTION_POINTER(func);
  ((unwind_native_frames_func_type) func)(quot, to);
}
template <typename Func> Func factor_vm::get_entry_point(cell n) {
  tagged<word> entry_point_word(special_objects[n]);
  return (Func) entry_point_word->entry_point;
}