Bug 511012 - TM: don't use addName() and insStorei() together. r=gal.

This commit is contained in:
Nicholas Nethercote 2009-08-18 09:27:48 +10:00
Родитель aa2009ea62
Коммит 5e7453dfaa
2 изменённых файлов: 13 добавлений и 16 удалений

Просмотреть файл

@ -8166,29 +8166,26 @@ TraceRecorder::guardPropertyCacheHit(LIns* obj_ins,
} }
void void
TraceRecorder::stobj_set_fslot(LIns *obj_ins, unsigned slot, LIns* v_ins, const char *name) TraceRecorder::stobj_set_fslot(LIns *obj_ins, unsigned slot, LIns* v_ins)
{ {
addName(lir->insStorei(v_ins, obj_ins, offsetof(JSObject, fslots) + slot * sizeof(jsval)), lir->insStorei(v_ins, obj_ins, offsetof(JSObject, fslots) + slot * sizeof(jsval));
name);
} }
void void
TraceRecorder::stobj_set_dslot(LIns *obj_ins, unsigned slot, LIns*& dslots_ins, LIns* v_ins, TraceRecorder::stobj_set_dslot(LIns *obj_ins, unsigned slot, LIns*& dslots_ins, LIns* v_ins)
const char *name)
{ {
if (!dslots_ins) if (!dslots_ins)
dslots_ins = lir->insLoad(LIR_ldp, obj_ins, offsetof(JSObject, dslots)); dslots_ins = lir->insLoad(LIR_ldp, obj_ins, offsetof(JSObject, dslots));
addName(lir->insStorei(v_ins, dslots_ins, slot * sizeof(jsval)), name); lir->insStorei(v_ins, dslots_ins, slot * sizeof(jsval));
} }
void void
TraceRecorder::stobj_set_slot(LIns* obj_ins, unsigned slot, LIns*& dslots_ins, LIns* v_ins) TraceRecorder::stobj_set_slot(LIns* obj_ins, unsigned slot, LIns*& dslots_ins, LIns* v_ins)
{ {
if (slot < JS_INITIAL_NSLOTS) { if (slot < JS_INITIAL_NSLOTS) {
stobj_set_fslot(obj_ins, slot, v_ins, "set_slot(fslots)"); stobj_set_fslot(obj_ins, slot, v_ins);
} else { } else {
stobj_set_dslot(obj_ins, slot - JS_INITIAL_NSLOTS, dslots_ins, v_ins, stobj_set_dslot(obj_ins, slot - JS_INITIAL_NSLOTS, dslots_ins, v_ins);
"set_slot(dslots)");
} }
} }
@ -9106,11 +9103,11 @@ TraceRecorder::newArray(JSObject* ctor, uint32 argc, jsval* argv, jsval* rval)
for (uint32 i = 0; i < argc && !alloc->outOfMemory(); i++) { for (uint32 i = 0; i < argc && !alloc->outOfMemory(); i++) {
LIns *elt_ins = get(argv + i); LIns *elt_ins = get(argv + i);
box_jsval(argv[i], elt_ins); box_jsval(argv[i], elt_ins);
stobj_set_dslot(arr_ins, i, dslots_ins, elt_ins, "set_array_elt"); stobj_set_dslot(arr_ins, i, dslots_ins, elt_ins);
} }
if (argc > 0) if (argc > 0)
stobj_set_fslot(arr_ins, JSSLOT_ARRAY_COUNT, INS_CONST(argc), "set_array_count"); stobj_set_fslot(arr_ins, JSSLOT_ARRAY_COUNT, INS_CONST(argc));
} }
set(rval, arr_ins); set(rval, arr_ins);
@ -11934,7 +11931,7 @@ TraceRecorder::record_JSOP_LAMBDA_FC()
return JSRS_STOP; return JSRS_STOP;
box_jsval(v, upvar_ins); box_jsval(v, upvar_ins);
LIns* dslots_ins = NULL; LIns* dslots_ins = NULL;
stobj_set_dslot(call_ins, i, dslots_ins, upvar_ins, "fc upvar"); stobj_set_dslot(call_ins, i, dslots_ins, upvar_ins);
} }
} }
@ -12894,11 +12891,11 @@ TraceRecorder::record_JSOP_NEWARRAY()
count++; count++;
LIns* elt_ins = get(&v); LIns* elt_ins = get(&v);
box_jsval(v, elt_ins); box_jsval(v, elt_ins);
stobj_set_dslot(v_ins, i, dslots_ins, elt_ins, "set_array_elt"); stobj_set_dslot(v_ins, i, dslots_ins, elt_ins);
} }
if (count > 0) if (count > 0)
stobj_set_fslot(v_ins, JSSLOT_ARRAY_COUNT, INS_CONST(count), "set_array_count"); stobj_set_fslot(v_ins, JSSLOT_ARRAY_COUNT, INS_CONST(count));
stack(-int(len), v_ins); stack(-int(len), v_ins);
return JSRS_CONTINUE; return JSRS_CONTINUE;

Просмотреть файл

@ -775,9 +775,9 @@ class TraceRecorder : public avmplus::GCObject {
jsuword& pcval); jsuword& pcval);
void stobj_set_fslot(nanojit::LIns *obj_ins, unsigned slot, void stobj_set_fslot(nanojit::LIns *obj_ins, unsigned slot,
nanojit::LIns* v_ins, const char *name); nanojit::LIns* v_ins);
void stobj_set_dslot(nanojit::LIns *obj_ins, unsigned slot, nanojit::LIns*& dslots_ins, void stobj_set_dslot(nanojit::LIns *obj_ins, unsigned slot, nanojit::LIns*& dslots_ins,
nanojit::LIns* v_ins, const char *name); nanojit::LIns* v_ins);
void stobj_set_slot(nanojit::LIns* obj_ins, unsigned slot, nanojit::LIns*& dslots_ins, void stobj_set_slot(nanojit::LIns* obj_ins, unsigned slot, nanojit::LIns*& dslots_ins,
nanojit::LIns* v_ins); nanojit::LIns* v_ins);