kern: devirtualize KAutoObject::DynamicCast<>()

This is an optimization that saves the most common type of virtual call in the kernel (DynamicCast)
by storing class token as a member, rather than getting it via virtual call every time.

This does not currently cost any memory space on 64-bit targets, due to pre-existing padding space.

This optimization can be turned off via a compile-time flag for accuracy.
This commit is contained in:
Michael Scire 2021-10-16 16:24:06 -07:00
parent 26c02e2019
commit bfffe6b119
3 changed files with 40 additions and 4 deletions

View file

@ -19,6 +19,11 @@ namespace ams::kern {
KAutoObject *KAutoObject::Create(KAutoObject *obj) {
obj->m_ref_count = 1;
#if defined(MESOSPHERE_ENABLE_DEVIRTUALIZED_DYNAMIC_CAST)
obj->m_class_token = obj->GetTypeObj().GetClassToken();
#endif
return obj;
}