Skip to content

MSVC debugger natvis file #1078

Open
Open
@R2RT

Description

I've recently started using xsimd and for sake of my sanity I came up with .nativs file (MSVC Debugger format file), which flattens xsimd batches in view/preview.

Views for batch, batch_bool, batch_constant and batch<complex> should simply work. I've checked them for avx and avx512bw.

I guess I will still tweak it, but might as well share it already.

If you are open into adding .nativs to repo, I can prepare PR later.

batch int

batch

batch complex

batch<complex>

batch constant

batch_constant

batch bool

batch_bool

xsimd.natvis
<?xml version="1.0" encoding="utf-8"?>

<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">

  <Type Name="xsimd::batch&lt;*, *&gt;">
    <DisplayString>batch [{size}] ({($T1*)&amp;data,[size]na})</DisplayString>
    <Expand>
      <Item Name="[data]" ExcludeView="simple">&amp;data,!</Item>
      <Item Name="[size]" ExcludeView="simple">size</Item>
      <ArrayItems>
        <Size>size</Size>
        <ValuePointer>($T1*)&amp;data</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>

  <Type Name="xsimd::batch_constant&lt;*&gt;">
    <DisplayString>batch_constant [{size}]</DisplayString>
    <Expand>
      <Item Name="[size]">size</Item>
      <Item Name="[0]" Condition="size &gt; 0" Optional="true">$T3</Item>
      <Item Name="[1]" Condition="size &gt; 1" Optional="true">$T4</Item>
      <Item Name="[2]" Condition="size &gt; 2" Optional="true">$T5</Item>
      <Item Name="[3]" Condition="size &gt; 3" Optional="true">$T6</Item>
      <Item Name="[4]" Condition="size &gt; 4" Optional="true">$T7</Item>
      <Item Name="[5]" Condition="size &gt; 5" Optional="true">$T8</Item>
      <Item Name="[6]" Condition="size &gt; 6" Optional="true">$T9</Item>
      <Item Name="[7]" Condition="size &gt; 7" Optional="true">$T10</Item>
      <Item Name="[8]" Condition="size &gt; 8" Optional="true">$T11</Item>
      <Item Name="[9]" Condition="size &gt; 9" Optional="true">$T12</Item>
      <Item Name="[10]" Condition="size &gt; 10" Optional="true">$T13</Item>
      <Item Name="[11]" Condition="size &gt; 11" Optional="true">$T14</Item>
      <Item Name="[12]" Condition="size &gt; 12" Optional="true">$T15</Item>
      <Item Name="[13]" Condition="size &gt; 13" Optional="true">$T16</Item>
      <Item Name="[14]" Condition="size &gt; 14" Optional="true">$T17</Item>
      <Item Name="[15]" Condition="size &gt; 15" Optional="true">$T18</Item>
      <Item Name="[16]" Condition="size &gt; 16" Optional="true">$T19</Item>
      <Item Name="[17]" Condition="size &gt; 17" Optional="true">$T20</Item>
      <Item Name="[18]" Condition="size &gt; 18" Optional="true">$T21</Item>
      <Item Name="[19]" Condition="size &gt; 19" Optional="true">$T22</Item>
      <Item Name="[20]" Condition="size &gt; 20" Optional="true">$T23</Item>
      <Item Name="[21]" Condition="size &gt; 21" Optional="true">$T24</Item>
      <Item Name="[22]" Condition="size &gt; 22" Optional="true">$T25</Item>
      <Item Name="[23]" Condition="size &gt; 23" Optional="true">$T26</Item>
      <Item Name="[24]" Condition="size &gt; 24" Optional="true">$T27</Item>
      <Item Name="[25]" Condition="size &gt; 25" Optional="true">$T28</Item>
      <Item Name="[26]" Condition="size &gt; 26" Optional="true">$T29</Item>
      <Item Name="[27]" Condition="size &gt; 27" Optional="true">$T30</Item>
      <Item Name="[28]" Condition="size &gt; 28" Optional="true">$T31</Item>
      <Item Name="[29]" Condition="size &gt; 29" Optional="true">$T32</Item>
      <Item Name="[30]" Condition="size &gt; 30" Optional="true">$T33</Item>
      <Item Name="[31]" Condition="size &gt; 31" Optional="true">$T34</Item>
      <Item Name="[32]" Condition="size &gt; 32" Optional="true">$T35</Item>
      <Item Name="[33]" Condition="size &gt; 33" Optional="true">$T36</Item>
      <Item Name="[34]" Condition="size &gt; 34" Optional="true">$T37</Item>
      <Item Name="[35]" Condition="size &gt; 35" Optional="true">$T38</Item>
      <Item Name="[36]" Condition="size &gt; 36" Optional="true">$T39</Item>
      <Item Name="[37]" Condition="size &gt; 37" Optional="true">$T40</Item>
      <Item Name="[38]" Condition="size &gt; 38" Optional="true">$T41</Item>
      <Item Name="[39]" Condition="size &gt; 39" Optional="true">$T42</Item>
      <Item Name="[40]" Condition="size &gt; 40" Optional="true">$T43</Item>
      <Item Name="[41]" Condition="size &gt; 41" Optional="true">$T44</Item>
      <Item Name="[42]" Condition="size &gt; 42" Optional="true">$T45</Item>
      <Item Name="[43]" Condition="size &gt; 43" Optional="true">$T46</Item>
      <Item Name="[44]" Condition="size &gt; 44" Optional="true">$T47</Item>
      <Item Name="[45]" Condition="size &gt; 45" Optional="true">$T48</Item>
      <Item Name="[46]" Condition="size &gt; 46" Optional="true">$T49</Item>
      <Item Name="[47]" Condition="size &gt; 47" Optional="true">$T50</Item>
      <Item Name="[48]" Condition="size &gt; 48" Optional="true">$T51</Item>
      <Item Name="[49]" Condition="size &gt; 49" Optional="true">$T52</Item>
      <Item Name="[50]" Condition="size &gt; 50" Optional="true">$T53</Item>
      <Item Name="[51]" Condition="size &gt; 51" Optional="true">$T54</Item>
      <Item Name="[52]" Condition="size &gt; 52" Optional="true">$T55</Item>
      <Item Name="[53]" Condition="size &gt; 53" Optional="true">$T56</Item>
      <Item Name="[54]" Condition="size &gt; 54" Optional="true">$T57</Item>
      <Item Name="[55]" Condition="size &gt; 55" Optional="true">$T58</Item>
      <Item Name="[56]" Condition="size &gt; 56" Optional="true">$T59</Item>
      <Item Name="[57]" Condition="size &gt; 57" Optional="true">$T60</Item>
      <Item Name="[58]" Condition="size &gt; 58" Optional="true">$T61</Item>
      <Item Name="[59]" Condition="size &gt; 59" Optional="true">$T62</Item>
      <Item Name="[60]" Condition="size &gt; 60" Optional="true">$T63</Item>
      <Item Name="[61]" Condition="size &gt; 61" Optional="true">$T64</Item>
      <Item Name="[62]" Condition="size &gt; 62" Optional="true">$T65</Item>
      <Item Name="[63]" Condition="size &gt; 63" Optional="true">$T66</Item>
    </Expand>
  </Type>

  <Type Name="xsimd::batch_bool&lt;*, *&gt;">
    <!-- Handle n-elemnent mask, i.e. reduce full sized bit mask to 1 boolean per batch element -->
    <DisplayString Optional="true" Condition="sizeof(data) &gt; 8 &amp;&amp; size == 1">[1]-element mask ({(($T1*)&amp;data)[0] ? 1 : 0})</DisplayString>
    <DisplayString Optional="true" Condition="sizeof(data) &gt; 8 &amp;&amp; size == 2">[2]-element mask ({(($T1*)&amp;data)[0] ? 1 : 0}{(($T1*)&amp;data)[1] ? 1 : 0})</DisplayString>
    <DisplayString Optional="true" Condition="sizeof(data) &gt; 8 &amp;&amp; size == 4">[4]-element mask ({(($T1*)&amp;data)[0] ? 1 : 0}{(($T1*)&amp;data)[1] ? 1 : 0}{(($T1*)&amp;data)[2] ? 1 : 0}{(($T1*)&amp;data)[3] ? 1 : 0})</DisplayString>
    <DisplayString Optional="true" Condition="sizeof(data) &gt; 8 &amp;&amp; size == 8">[8]-element mask ({(($T1*)&amp;data)[0] ? 1 : 0}{(($T1*)&amp;data)[1] ? 1 : 0}{(($T1*)&amp;data)[2] ? 1 : 0}{(($T1*)&amp;data)[3] ? 1 : 0}{(($T1*)&amp;data)[4] ? 1 : 0}{(($T1*)&amp;data)[5] ? 1 : 0}{(($T1*)&amp;data)[6] ? 1 : 0}{(($T1*)&amp;data)[7] ? 1 : 0})</DisplayString>
    <DisplayString Optional="true" Condition="sizeof(data) &gt; 8 &amp;&amp; size == 16">[16]-element mask ({(($T1*)&amp;data)[0] ? 1 : 0}{(($T1*)&amp;data)[1] ? 1 : 0}{(($T1*)&amp;data)[2] ? 1 : 0}{(($T1*)&amp;data)[3] ? 1 : 0}{(($T1*)&amp;data)[4] ? 1 : 0}{(($T1*)&amp;data)[5] ? 1 : 0}{(($T1*)&amp;data)[6] ? 1 : 0}{(($T1*)&amp;data)[7] ? 1 : 0} {(($T1*)&amp;data)[8] ? 1 : 0}{(($T1*)&amp;data)[9] ? 1 : 0}{(($T1*)&amp;data)[10] ? 1 : 0}{(($T1*)&amp;data)[11] ? 1 : 0}{(($T1*)&amp;data)[12] ? 1 : 0}{(($T1*)&amp;data)[13] ? 1 : 0}{(($T1*)&amp;data)[14] ? 1 : 0}{(($T1*)&amp;data)[15] ? 1 : 0})</DisplayString>
    <DisplayString Optional="true" Condition="sizeof(data) &gt; 8 &amp;&amp; size == 32">[32]-element mask ({(($T1*)&amp;data)[0] ? 1 : 0}{(($T1*)&amp;data)[1] ? 1 : 0}{(($T1*)&amp;data)[2] ? 1 : 0}{(($T1*)&amp;data)[3] ? 1 : 0}{(($T1*)&amp;data)[4] ? 1 : 0}{(($T1*)&amp;data)[5] ? 1 : 0}{(($T1*)&amp;data)[6] ? 1 : 0}{(($T1*)&amp;data)[7] ? 1 : 0} {(($T1*)&amp;data)[8] ? 1 : 0}{(($T1*)&amp;data)[9] ? 1 : 0}{(($T1*)&amp;data)[10] ? 1 : 0}{(($T1*)&amp;data)[11] ? 1 : 0}{(($T1*)&amp;data)[12] ? 1 : 0}{(($T1*)&amp;data)[13] ? 1 : 0}{(($T1*)&amp;data)[14] ? 1 : 0}{(($T1*)&amp;data)[15] ? 1 : 0} {(($T1*)&amp;data)[16] ? 1 : 0}{(($T1*)&amp;data)[17] ? 1 : 0}{(($T1*)&amp;data)[18] ? 1 : 0}{(($T1*)&amp;data)[19] ? 1 : 0}{(($T1*)&amp;data)[20] ? 1 : 0}{(($T1*)&amp;data)[21] ? 1 : 0}{(($T1*)&amp;data)[22] ? 1 : 0}{(($T1*)&amp;data)[23] ? 1 : 0} {(($T1*)&amp;data)[24] ? 1 : 0}{(($T1*)&amp;data)[25] ? 1 : 0}{(($T1*)&amp;data)[26] ? 1 : 0}{(($T1*)&amp;data)[27] ? 1 : 0}{(($T1*)&amp;data)[28] ? 1 : 0}{(($T1*)&amp;data)[29] ? 1 : 0}{(($T1*)&amp;data)[30] ? 1 : 0}{(($T1*)&amp;data)[31] ? 1 : 0})</DisplayString>

    <!-- Fallback for element-mask -->
    <DisplayString Optional="true" Condition="sizeof(data) &gt; 8">[{size}]-element mask</DisplayString>

    <!-- Handle bit mask, e.g. __mmask64 used by avx512 -->
    <DisplayString>[{sizeof(data) * 8}]-bit mask ({data, bb})</DisplayString>

    <Expand>
      <!-- Handle n-elemnent mask, i.e. reduce full sized bit mask to 1 boolean per batch element -->
      <IndexListItems Condition="sizeof(data) &gt; 8" Optional="true">
        <Size>size</Size>
        <ValueNode>(($T1*)&amp;data)[$i] != 0</ValueNode>
      </IndexListItems>

      <!-- Handle bit mask, e.g. __mmask64 used by avx512 -->
      <Item Condition="sizeof(data) &lt;= 8" Optional="true" Name="[Mask]">data,bb</Item>
      <IndexListItems Condition="sizeof(data) &lt;= 8" Optional="true">
        <Size>sizeof(data) * 8</Size>
        <ValueNode>(data &amp; (1 &lt;&lt; $i)) != 0</ValueNode>
      </IndexListItems>
    </Expand>
  </Type>

  <Type Name="xsimd::batch&lt;std::complex&lt;*&gt;, *&gt;">
    <DisplayString>batch_complex [{size}]</DisplayString>
    <Expand>
      <Item Name="[real]">m_real</Item>
      <Item Name="[imag]">m_imag</Item>
      <Item Name="[size]" ExcludeView="simple">size</Item>
      <Synthetic Name="[0]" Condition="size &gt; 0">
        <DisplayString Condition="m_imag[0] &lt; 0">{m_real[0]}-i*{-m_imag[0]}</DisplayString>
        <DisplayString>{m_real[0]}+i*{m_imag[0]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[1]" Condition="size &gt; 1">
        <DisplayString Condition="m_imag[1] &lt; 0">{m_real[1]}-i*{-m_imag[1]}</DisplayString>
        <DisplayString>{m_real[1]}+i*{m_imag[1]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[2]" Condition="size &gt; 2">
        <DisplayString Condition="m_imag[2] &lt; 0">{m_real[2]}-i*{-m_imag[2]}</DisplayString>
        <DisplayString>{m_real[2]}+i*{m_imag[2]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[3]" Condition="size &gt; 3">
        <DisplayString Condition="m_imag[3] &lt; 0">{m_real[3]}-i*{-m_imag[3]}</DisplayString>
        <DisplayString>{m_real[3]}+i*{m_imag[3]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[4]" Condition="size &gt; 4">
        <DisplayString Condition="m_imag[4] &lt; 0">{m_real[4]}-i*{-m_imag[4]}</DisplayString>
        <DisplayString>{m_real[4]}+i*{m_imag[4]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[5]" Condition="size &gt; 5">
        <DisplayString Condition="m_imag[5] &lt; 0">{m_real[5]}-i*{-m_imag[5]}</DisplayString>
        <DisplayString>{m_real[5]}+i*{m_imag[5]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[6]" Condition="size &gt; 6">
        <DisplayString Condition="m_imag[6] &lt; 0">{m_real[6]}-i*{-m_imag[6]}</DisplayString>
        <DisplayString>{m_real[6]}+i*{m_imag[6]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[7]" Condition="size &gt; 7">
        <DisplayString Condition="m_imag[7] &lt; 0">{m_real[7]}-i*{-m_imag[7]}</DisplayString>
        <DisplayString>{m_real[7]}+i*{m_imag[7]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[8]" Condition="size &gt; 8">
        <DisplayString Condition="m_imag[8] &lt; 0">{m_real[8]}-i*{-m_imag[8]}</DisplayString>
        <DisplayString>{m_real[8]}+i*{m_imag[8]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[9]" Condition="size &gt; 9">
        <DisplayString Condition="m_imag[9] &lt; 0">{m_real[9]}-i*{-m_imag[9]}</DisplayString>
        <DisplayString>{m_real[9]}+i*{m_imag[9]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[10]" Condition="size &gt; 10">
        <DisplayString Condition="m_imag[10] &lt; 0">{m_real[10]}-i*{-m_imag[10]}</DisplayString>
        <DisplayString>{m_real[10]}+i*{m_imag[10]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[11]" Condition="size &gt; 11">
        <DisplayString Condition="m_imag[11] &lt; 0">{m_real[11]}-i*{-m_imag[11]}</DisplayString>
        <DisplayString>{m_real[11]}+i*{m_imag[11]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[12]" Condition="size &gt; 12">
        <DisplayString Condition="m_imag[12] &lt; 0">{m_real[12]}-i*{-m_imag[12]}</DisplayString>
        <DisplayString>{m_real[12]}+i*{m_imag[12]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[13]" Condition="size &gt; 13">
        <DisplayString Condition="m_imag[13] &lt; 0">{m_real[13]}-i*{-m_imag[13]}</DisplayString>
        <DisplayString>{m_real[13]}+i*{m_imag[13]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[14]" Condition="size &gt; 14">
        <DisplayString Condition="m_imag[14] &lt; 0">{m_real[14]}-i*{-m_imag[14]}</DisplayString>
        <DisplayString>{m_real[14]}+i*{m_imag[14]}</DisplayString>
      </Synthetic>
      <Synthetic Name="[15]" Condition="size &gt; 15">
        <DisplayString Condition="m_imag[15] &lt; 0">{m_real[15]}-i*{-m_imag[15]}</DisplayString>
        <DisplayString>{m_real[15]}+i*{m_imag[15]}</DisplayString>
      </Synthetic>
    </Expand>
  </Type>

</AutoVisualizer>

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions