Skip to content

Instantly share code, notes, and snippets.

@Ludophonic
Ludophonic / Half.py
Last active April 5, 2022 15:53
Xcode / LLDB script for formatting half-precision floats in the debugger.
import lldb
# FP16 summary
def summary_FP16( valobj, internal_dict ):
anon = valobj.GetChildAtIndex(1)
m = anon.GetChildAtIndex(0).GetValueAsUnsigned()
e = anon.GetChildAtIndex(1).GetValueAsUnsigned()
s = anon.GetChildAtIndex(2).GetValueAsUnsigned()
if e == 0:
summary = "" if s == 0 else "-"
@Ludophonic
Ludophonic / Half.natvis
Last active January 4, 2024 03:48
Visual studio type visualizer for half precision (16 bit) floating point values.
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="half">
<DisplayString Condition = "fp16.Exponent == 0">{(0.00006103515625f * fp16.Mantissa/1024.0f)}</DisplayString>
<DisplayString Condition = "fp16.Exponent == 31 &amp;&amp; fp16.Mantissa == 0">{fp16.Sign*-2+1}.#INFINITY</DisplayString>
<DisplayString Condition = "fp16.Exponent == 31">#NaN</DisplayString>
<DisplayString Condition = "fp16.Exponent &lt; 15">{1.0f / (1 &lt;&lt; (15 - fp16.Exponent)) * (fp16.Sign*-2+1.0f) * (1.0f + fp16.Mantissa/1024.0f)}</DisplayString>
<DisplayString Condition = "fp16.Exponent &gt; 15">{(1 &lt;&lt; (fp16.Exponent-15)) * (fp16.Sign*-2+1.0f) * (1.0f + fp16.Mantissa/1024.0f)}</DisplayString>
<DisplayString>{(fp16.Sign*-2+1) * 1.0f + fp16.Mantissa/1024.0f}</DisplayString>