Bug 1642593 - Transpile GuardAnyClass. r=jandem

Differential Revision: https://phabricator.services.mozilla.com/D77793
This commit is contained in:
Tom Schuster 2020-06-03 17:23:46 +00:00
parent 5f288e50bd
commit 39bda07ab6
2 changed files with 16 additions and 1 deletions

View file

@ -191,7 +191,7 @@
# Guard on an arbitrary JSClass.
- name: GuardAnyClass
shared: false
transpile: false
transpile: true
args:
obj: ObjId
clasp: RawPointerField

View file

@ -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);