static ERL_NIF_TERM get_priv_data_ptr(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { NifModPrivData** bin_data; ERL_NIF_TERM res; ADD_CALL("get_priv_data_ptr"); bin_data = (NifModPrivData**)enif_make_new_binary(env, sizeof(void*), &res); *bin_data = priv_data(env); return res; }
/* * Allocate a stack frame. * * Note that the prologue size must be constant. */ void sparc_ins_entry(void) { #ifdef PIKE_BYTECODE_SPARC64 /* save %sp, -224, %sp */ add_to_program(0x81e02000|(SPARC_REG_SP<<25)| (SPARC_REG_SP<<14)|((-176)&0x1fff)); #else /* !PIKE_BYTECODE_SPARC64 */ /* save %sp, -112, %sp */ add_to_program(0x81e02000|(SPARC_REG_SP<<25)| (SPARC_REG_SP<<14)|((-112)&0x1fff)); #endif /* PIKE_BYTECODE_SPARC64 */ #if 0 SPARC_OR(SPARC_REG_O0, SPARC_REG_G0, SPARC_REG_O7, 0); ADD_CALL(sparc_trace_fun, 1); #endif /* 0 */ FLUSH_CODE_GENERATOR_STATE(); }
static void ins_sparc_debug() { int state = sparc_codegen_state; if (state & SPARC_CODEGEN_SP_NEEDS_STORE) { state &= ~SPARC_CODEGEN_SP_IS_SET; } if (state & SPARC_CODEGEN_MARK_SP_NEEDS_STORE) { state &= ~SPARC_CODEGEN_MARK_SP_IS_SET; } if (state & (SPARC_CODEGEN_FP_IS_SET|SPARC_CODEGEN_SP_IS_SET| SPARC_CODEGEN_IP_IS_SET|SPARC_CODEGEN_MARK_SP_IS_SET)) { SET_REG(SPARC_REG_PIKE_DEBUG, ((ptrdiff_t)(&d_flag))); SPARC_LDUW(SPARC_REG_PIKE_DEBUG, SPARC_REG_PIKE_DEBUG, SPARC_REG_G0, 0); SPARC_SUBcc(SPARC_REG_G0, SPARC_REG_PIKE_DEBUG, SPARC_REG_G0, 0); SET_REG(SPARC_REG_O0, state); #ifdef PIKE_BYTECODE_SPARC64 SPARC_BE(8*4, 0); SPARC_OR(SPARC_REG_O1, SPARC_REG_PIKE_IP, SPARC_REG_G0, 0); SPARC_SETHI(SPARC_REG_O7, ((ptrdiff_t)sparc_debug_check_registers)>>2); SPARC_OR(SPARC_REG_O2, SPARC_REG_PIKE_FP, SPARC_REG_G0, 0); SPARC_SLL(SPARC_REG_O7, SPARC_REG_O7, 2, 1); SPARC_ADD(SPARC_REG_O3, SPARC_REG_PIKE_SP, sparc_pike_sp_bias, 1); SPARC_JMPL(SPARC_REG_O7, SPARC_REG_O7, ((ptrdiff_t)sparc_debug_check_registers) & 0xfff, 1); SPARC_OR(SPARC_REG_O4, SPARC_REG_PIKE_MARK_SP, SPARC_REG_G0, 0); #else /* !PIKE_BYTECODE_SPARC64 */ /* NOTE: Assumes ADD_CALL below is a single instruction. */ SPARC_BE(6*4, 0); SPARC_OR(SPARC_REG_O1, SPARC_REG_PIKE_IP, SPARC_REG_G0, 0); SPARC_OR(SPARC_REG_O2, SPARC_REG_PIKE_FP, SPARC_REG_G0, 0); SPARC_ADD(SPARC_REG_O3, SPARC_REG_PIKE_SP, sparc_pike_sp_bias, 1); SPARC_OR(SPARC_REG_O4, SPARC_REG_PIKE_MARK_SP, SPARC_REG_G0, 0); ADD_CALL(sparc_debug_check_registers, 1); #endif /* PIKE_BYTECODE_SPARC64 */ }
static ERL_NIF_TERM get_priv_data_ptr(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { ADD_CALL("get_priv_data_ptr"); return enif_make_ulong(env, (unsigned long)priv_data(env)); }
static ERL_NIF_TERM lib_version(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { ADD_CALL("lib_version"); return enif_make_int(env, NIF_LIB_VER); }
static ERL_NIF_TERM get_priv_data_ptr(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) { ADD_CALL("get_priv_data_ptr"); return enif_make_uint64(env, (ErlNifUInt64)priv_data(env)); }