forked from mirrors/gecko-dev
Bug 1642593 - Transpile GuardAnyClass. r=jandem
Differential Revision: https://phabricator.services.mozilla.com/D77793
This commit is contained in:
parent
5f288e50bd
commit
39bda07ab6
2 changed files with 16 additions and 1 deletions
|
|
@ -191,7 +191,7 @@
|
||||||
# Guard on an arbitrary JSClass.
|
# Guard on an arbitrary JSClass.
|
||||||
- name: GuardAnyClass
|
- name: GuardAnyClass
|
||||||
shared: false
|
shared: false
|
||||||
transpile: false
|
transpile: true
|
||||||
args:
|
args:
|
||||||
obj: ObjId
|
obj: ObjId
|
||||||
clasp: RawPointerField
|
clasp: RawPointerField
|
||||||
|
|
|
||||||
|
|
@ -84,6 +84,9 @@ class MOZ_RAII WarpCacheIRTranspiler : public WarpBuilderShared {
|
||||||
Shape* shapeStubField(uint32_t offset) {
|
Shape* shapeStubField(uint32_t offset) {
|
||||||
return reinterpret_cast<Shape*>(readStubWord(offset));
|
return reinterpret_cast<Shape*>(readStubWord(offset));
|
||||||
}
|
}
|
||||||
|
const JSClass* classStubField(uint32_t offset) {
|
||||||
|
return reinterpret_cast<const JSClass*>(readStubWord(offset));
|
||||||
|
}
|
||||||
JSString* stringStubField(uint32_t offset) {
|
JSString* stringStubField(uint32_t offset) {
|
||||||
return reinterpret_cast<JSString*>(readStubWord(offset));
|
return reinterpret_cast<JSString*>(readStubWord(offset));
|
||||||
}
|
}
|
||||||
|
|
@ -187,6 +190,18 @@ bool WarpCacheIRTranspiler::emitGuardClass(ObjOperandId objId,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool WarpCacheIRTranspiler::emitGuardAnyClass(ObjOperandId objId,
|
||||||
|
uint32_t claspOffset) {
|
||||||
|
MDefinition* def = getOperand(objId);
|
||||||
|
const JSClass* classp = classStubField(claspOffset);
|
||||||
|
|
||||||
|
auto* ins = MGuardToClass::New(alloc(), def, classp);
|
||||||
|
add(ins);
|
||||||
|
|
||||||
|
setOperand(objId, ins);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool WarpCacheIRTranspiler::emitGuardShape(ObjOperandId objId,
|
bool WarpCacheIRTranspiler::emitGuardShape(ObjOperandId objId,
|
||||||
uint32_t shapeOffset) {
|
uint32_t shapeOffset) {
|
||||||
MDefinition* def = getOperand(objId);
|
MDefinition* def = getOperand(objId);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue