Far classes
John Rose
john.r.rose at oracle.com
Sat Jul 13 19:13:58 UTC 2024
On Jul 13, 2024, at 12:58 AM, Thomas Stüfe <thomas.stuefe at gmail.com> wrote:
The second might also enable a compact flow-free decoding:
Klass* get_klass_3(uint16_t klassCode) {
bool_t is_near = klassCode < (1<<8); // 8 upper bits zero?
Klass** near_base = (Klass**) this;
constexpr Klass** far_base = NEAR_CLASSES[- (1<<8)];
Klass** base = is_near ? near_base : far_base; //CMOV
return base[klassCode];
}
Beautiful :)
Question though, should it not be reverse?
Looks like I made several bugs in there. Maybe this is more correct:
Klass* get_klass_3(uint16_t klassCode) {
bool_t is_near = klassCode >= (1<<8); // 8 upper bits nonzero?
constexpr Klass** near_base = NEAR_CLASSES[- (1<<8)];
Klass** far_base = (Klass**) this;
Klass** base = is_near ? near_base : far_base; //CMOV
return base[klassCode];
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/lilliput-dev/attachments/20240713/03b35711/attachment.htm>
More information about the lilliput-dev
mailing list