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