<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body dir="auto">
<div dir="ltr"></div>
<div dir="ltr">On Jul 13, 2024, at 12:58 AM, Thomas Stüfe <thomas.stuefe@gmail.com> wrote:</div>
<div dir="ltr">
<blockquote type="cite"><br>
</blockquote>
</div>
<blockquote type="cite">
<div dir="ltr">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
<br>
The second might also enable a compact flow-free decoding:<br>
<br>
Klass* get_klass_3(uint16_t klassCode) {<br>
bool_t is_near = klassCode < (1<<8); // 8 upper bits zero?<br>
Klass** near_base = (Klass**) this;<br>
constexpr Klass** far_base = NEAR_CLASSES[- (1<<8)];<br>
Klass** base = is_near ? near_base : far_base; //CMOV<br>
return base[klassCode];<br>
}<br>
</blockquote>
<div><br>
</div>
<div>Beautiful :)</div>
<div><br>
</div>
<div>Question though, should it not be reverse? </div>
</div>
</blockquote>
<br>
<div>Looks like I made several bugs in there. Maybe this is more correct:</div>
<div><br>
</div>
<div>
<div dir="ltr">
<div>Klass* get_klass_3(uint16_t klassCode) {<br>
bool_t is_near = klassCode >= (1<<8); // 8 upper bits nonzero?<br>
constexpr Klass** near_base = NEAR_CLASSES[- (1<<8)];</div>
<div> Klass** far_base = (Klass**) this;</div>
<div> Klass** base = is_near ? near_base : far_base; //CMOV<br>
return base[klassCode];</div>
<div>}</div>
<div><br>
</div>
</div>
</div>
</body>
</html>