void op_gvdata(mval *v) { mint x; DCL_THREADGBL_ACCESS; SETUP_THREADGBL_ACCESS; if (TREF(gv_last_subsc_null) && NEVER == gv_cur_region->null_subs) sgnl_gvnulsubsc(); x = 0; if (gv_cur_region->dyn.addr->acc_meth == dba_bg || gv_cur_region->dyn.addr->acc_meth == dba_mm) { if (gv_target->root) x = gvcst_data(); } else if (gv_cur_region->dyn.addr->acc_meth == dba_cm) x = gvcmx_data(); else x = gvusr_data(); *v = *fndata_table[x / 10][x & 1]; }
void op_gvdata(mval *v) { mint x; gvnh_reg_t *gvnh_reg; enum db_acc_method acc_meth; DCL_THREADGBL_ACCESS; SETUP_THREADGBL_ACCESS; if (TREF(gv_last_subsc_null) && NEVER == gv_cur_region->null_subs) sgnl_gvnulsubsc(); acc_meth = REG_ACC_METH(gv_cur_region); if (IS_ACC_METH_BG_OR_MM(acc_meth)) { gvnh_reg = TREF(gd_targ_gvnh_reg); if (NULL == gvnh_reg) x = (gv_target->root ? gvcst_data() : 0); else INVOKE_GVCST_SPR_XXX(gvnh_reg, x = gvcst_spr_data()); } else if (REG_ACC_METH(gv_cur_region) == dba_cm) x = gvcmx_data(); else x = gvusr_data(); *v = *fndata_table[x / 10][x & 1]; }