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.
|
||||
- name: GuardAnyClass
|
||||
shared: false
|
||||
transpile: false
|
||||
transpile: true
|
||||
args:
|
||||
obj: ObjId
|
||||
clasp: RawPointerField
|
||||
|
|
|
|||
|
|
@ -84,6 +84,9 @@ class MOZ_RAII WarpCacheIRTranspiler : public WarpBuilderShared {
|
|||
Shape* shapeStubField(uint32_t 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) {
|
||||
return reinterpret_cast<JSString*>(readStubWord(offset));
|
||||
}
|
||||
|
|
@ -187,6 +190,18 @@ bool WarpCacheIRTranspiler::emitGuardClass(ObjOperandId objId,
|
|||
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,
|
||||
uint32_t shapeOffset) {
|
||||
MDefinition* def = getOperand(objId);
|
||||
|
|
|
|||
Loading…
Reference in a new issue