Open
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.
xsimd.natvis
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<Type Name="xsimd::batch<*, *>">
<DisplayString>batch [{size}] ({($T1*)&data,[size]na})</DisplayString>
<Expand>
<Item Name="[data]" ExcludeView="simple">&data,!</Item>
<Item Name="[size]" ExcludeView="simple">size</Item>
<ArrayItems>
<Size>size</Size>
<ValuePointer>($T1*)&data</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<Type Name="xsimd::batch_constant<*>">
<DisplayString>batch_constant [{size}]</DisplayString>
<Expand>
<Item Name="[size]">size</Item>
<Item Name="[0]" Condition="size > 0" Optional="true">$T3</Item>
<Item Name="[1]" Condition="size > 1" Optional="true">$T4</Item>
<Item Name="[2]" Condition="size > 2" Optional="true">$T5</Item>
<Item Name="[3]" Condition="size > 3" Optional="true">$T6</Item>
<Item Name="[4]" Condition="size > 4" Optional="true">$T7</Item>
<Item Name="[5]" Condition="size > 5" Optional="true">$T8</Item>
<Item Name="[6]" Condition="size > 6" Optional="true">$T9</Item>
<Item Name="[7]" Condition="size > 7" Optional="true">$T10</Item>
<Item Name="[8]" Condition="size > 8" Optional="true">$T11</Item>
<Item Name="[9]" Condition="size > 9" Optional="true">$T12</Item>
<Item Name="[10]" Condition="size > 10" Optional="true">$T13</Item>
<Item Name="[11]" Condition="size > 11" Optional="true">$T14</Item>
<Item Name="[12]" Condition="size > 12" Optional="true">$T15</Item>
<Item Name="[13]" Condition="size > 13" Optional="true">$T16</Item>
<Item Name="[14]" Condition="size > 14" Optional="true">$T17</Item>
<Item Name="[15]" Condition="size > 15" Optional="true">$T18</Item>
<Item Name="[16]" Condition="size > 16" Optional="true">$T19</Item>
<Item Name="[17]" Condition="size > 17" Optional="true">$T20</Item>
<Item Name="[18]" Condition="size > 18" Optional="true">$T21</Item>
<Item Name="[19]" Condition="size > 19" Optional="true">$T22</Item>
<Item Name="[20]" Condition="size > 20" Optional="true">$T23</Item>
<Item Name="[21]" Condition="size > 21" Optional="true">$T24</Item>
<Item Name="[22]" Condition="size > 22" Optional="true">$T25</Item>
<Item Name="[23]" Condition="size > 23" Optional="true">$T26</Item>
<Item Name="[24]" Condition="size > 24" Optional="true">$T27</Item>
<Item Name="[25]" Condition="size > 25" Optional="true">$T28</Item>
<Item Name="[26]" Condition="size > 26" Optional="true">$T29</Item>
<Item Name="[27]" Condition="size > 27" Optional="true">$T30</Item>
<Item Name="[28]" Condition="size > 28" Optional="true">$T31</Item>
<Item Name="[29]" Condition="size > 29" Optional="true">$T32</Item>
<Item Name="[30]" Condition="size > 30" Optional="true">$T33</Item>
<Item Name="[31]" Condition="size > 31" Optional="true">$T34</Item>
<Item Name="[32]" Condition="size > 32" Optional="true">$T35</Item>
<Item Name="[33]" Condition="size > 33" Optional="true">$T36</Item>
<Item Name="[34]" Condition="size > 34" Optional="true">$T37</Item>
<Item Name="[35]" Condition="size > 35" Optional="true">$T38</Item>
<Item Name="[36]" Condition="size > 36" Optional="true">$T39</Item>
<Item Name="[37]" Condition="size > 37" Optional="true">$T40</Item>
<Item Name="[38]" Condition="size > 38" Optional="true">$T41</Item>
<Item Name="[39]" Condition="size > 39" Optional="true">$T42</Item>
<Item Name="[40]" Condition="size > 40" Optional="true">$T43</Item>
<Item Name="[41]" Condition="size > 41" Optional="true">$T44</Item>
<Item Name="[42]" Condition="size > 42" Optional="true">$T45</Item>
<Item Name="[43]" Condition="size > 43" Optional="true">$T46</Item>
<Item Name="[44]" Condition="size > 44" Optional="true">$T47</Item>
<Item Name="[45]" Condition="size > 45" Optional="true">$T48</Item>
<Item Name="[46]" Condition="size > 46" Optional="true">$T49</Item>
<Item Name="[47]" Condition="size > 47" Optional="true">$T50</Item>
<Item Name="[48]" Condition="size > 48" Optional="true">$T51</Item>
<Item Name="[49]" Condition="size > 49" Optional="true">$T52</Item>
<Item Name="[50]" Condition="size > 50" Optional="true">$T53</Item>
<Item Name="[51]" Condition="size > 51" Optional="true">$T54</Item>
<Item Name="[52]" Condition="size > 52" Optional="true">$T55</Item>
<Item Name="[53]" Condition="size > 53" Optional="true">$T56</Item>
<Item Name="[54]" Condition="size > 54" Optional="true">$T57</Item>
<Item Name="[55]" Condition="size > 55" Optional="true">$T58</Item>
<Item Name="[56]" Condition="size > 56" Optional="true">$T59</Item>
<Item Name="[57]" Condition="size > 57" Optional="true">$T60</Item>
<Item Name="[58]" Condition="size > 58" Optional="true">$T61</Item>
<Item Name="[59]" Condition="size > 59" Optional="true">$T62</Item>
<Item Name="[60]" Condition="size > 60" Optional="true">$T63</Item>
<Item Name="[61]" Condition="size > 61" Optional="true">$T64</Item>
<Item Name="[62]" Condition="size > 62" Optional="true">$T65</Item>
<Item Name="[63]" Condition="size > 63" Optional="true">$T66</Item>
</Expand>
</Type>
<Type Name="xsimd::batch_bool<*, *>">
<!-- Handle n-elemnent mask, i.e. reduce full sized bit mask to 1 boolean per batch element -->
<DisplayString Optional="true" Condition="sizeof(data) > 8 && size == 1">[1]-element mask ({(($T1*)&data)[0] ? 1 : 0})</DisplayString>
<DisplayString Optional="true" Condition="sizeof(data) > 8 && size == 2">[2]-element mask ({(($T1*)&data)[0] ? 1 : 0}{(($T1*)&data)[1] ? 1 : 0})</DisplayString>
<DisplayString Optional="true" Condition="sizeof(data) > 8 && size == 4">[4]-element mask ({(($T1*)&data)[0] ? 1 : 0}{(($T1*)&data)[1] ? 1 : 0}{(($T1*)&data)[2] ? 1 : 0}{(($T1*)&data)[3] ? 1 : 0})</DisplayString>
<DisplayString Optional="true" Condition="sizeof(data) > 8 && size == 8">[8]-element mask ({(($T1*)&data)[0] ? 1 : 0}{(($T1*)&data)[1] ? 1 : 0}{(($T1*)&data)[2] ? 1 : 0}{(($T1*)&data)[3] ? 1 : 0}{(($T1*)&data)[4] ? 1 : 0}{(($T1*)&data)[5] ? 1 : 0}{(($T1*)&data)[6] ? 1 : 0}{(($T1*)&data)[7] ? 1 : 0})</DisplayString>
<DisplayString Optional="true" Condition="sizeof(data) > 8 && size == 16">[16]-element mask ({(($T1*)&data)[0] ? 1 : 0}{(($T1*)&data)[1] ? 1 : 0}{(($T1*)&data)[2] ? 1 : 0}{(($T1*)&data)[3] ? 1 : 0}{(($T1*)&data)[4] ? 1 : 0}{(($T1*)&data)[5] ? 1 : 0}{(($T1*)&data)[6] ? 1 : 0}{(($T1*)&data)[7] ? 1 : 0} {(($T1*)&data)[8] ? 1 : 0}{(($T1*)&data)[9] ? 1 : 0}{(($T1*)&data)[10] ? 1 : 0}{(($T1*)&data)[11] ? 1 : 0}{(($T1*)&data)[12] ? 1 : 0}{(($T1*)&data)[13] ? 1 : 0}{(($T1*)&data)[14] ? 1 : 0}{(($T1*)&data)[15] ? 1 : 0})</DisplayString>
<DisplayString Optional="true" Condition="sizeof(data) > 8 && size == 32">[32]-element mask ({(($T1*)&data)[0] ? 1 : 0}{(($T1*)&data)[1] ? 1 : 0}{(($T1*)&data)[2] ? 1 : 0}{(($T1*)&data)[3] ? 1 : 0}{(($T1*)&data)[4] ? 1 : 0}{(($T1*)&data)[5] ? 1 : 0}{(($T1*)&data)[6] ? 1 : 0}{(($T1*)&data)[7] ? 1 : 0} {(($T1*)&data)[8] ? 1 : 0}{(($T1*)&data)[9] ? 1 : 0}{(($T1*)&data)[10] ? 1 : 0}{(($T1*)&data)[11] ? 1 : 0}{(($T1*)&data)[12] ? 1 : 0}{(($T1*)&data)[13] ? 1 : 0}{(($T1*)&data)[14] ? 1 : 0}{(($T1*)&data)[15] ? 1 : 0} {(($T1*)&data)[16] ? 1 : 0}{(($T1*)&data)[17] ? 1 : 0}{(($T1*)&data)[18] ? 1 : 0}{(($T1*)&data)[19] ? 1 : 0}{(($T1*)&data)[20] ? 1 : 0}{(($T1*)&data)[21] ? 1 : 0}{(($T1*)&data)[22] ? 1 : 0}{(($T1*)&data)[23] ? 1 : 0} {(($T1*)&data)[24] ? 1 : 0}{(($T1*)&data)[25] ? 1 : 0}{(($T1*)&data)[26] ? 1 : 0}{(($T1*)&data)[27] ? 1 : 0}{(($T1*)&data)[28] ? 1 : 0}{(($T1*)&data)[29] ? 1 : 0}{(($T1*)&data)[30] ? 1 : 0}{(($T1*)&data)[31] ? 1 : 0})</DisplayString>
<!-- Fallback for element-mask -->
<DisplayString Optional="true" Condition="sizeof(data) > 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) > 8" Optional="true">
<Size>size</Size>
<ValueNode>(($T1*)&data)[$i] != 0</ValueNode>
</IndexListItems>
<!-- Handle bit mask, e.g. __mmask64 used by avx512 -->
<Item Condition="sizeof(data) <= 8" Optional="true" Name="[Mask]">data,bb</Item>
<IndexListItems Condition="sizeof(data) <= 8" Optional="true">
<Size>sizeof(data) * 8</Size>
<ValueNode>(data & (1 << $i)) != 0</ValueNode>
</IndexListItems>
</Expand>
</Type>
<Type Name="xsimd::batch<std::complex<*>, *>">
<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 > 0">
<DisplayString Condition="m_imag[0] < 0">{m_real[0]}-i*{-m_imag[0]}</DisplayString>
<DisplayString>{m_real[0]}+i*{m_imag[0]}</DisplayString>
</Synthetic>
<Synthetic Name="[1]" Condition="size > 1">
<DisplayString Condition="m_imag[1] < 0">{m_real[1]}-i*{-m_imag[1]}</DisplayString>
<DisplayString>{m_real[1]}+i*{m_imag[1]}</DisplayString>
</Synthetic>
<Synthetic Name="[2]" Condition="size > 2">
<DisplayString Condition="m_imag[2] < 0">{m_real[2]}-i*{-m_imag[2]}</DisplayString>
<DisplayString>{m_real[2]}+i*{m_imag[2]}</DisplayString>
</Synthetic>
<Synthetic Name="[3]" Condition="size > 3">
<DisplayString Condition="m_imag[3] < 0">{m_real[3]}-i*{-m_imag[3]}</DisplayString>
<DisplayString>{m_real[3]}+i*{m_imag[3]}</DisplayString>
</Synthetic>
<Synthetic Name="[4]" Condition="size > 4">
<DisplayString Condition="m_imag[4] < 0">{m_real[4]}-i*{-m_imag[4]}</DisplayString>
<DisplayString>{m_real[4]}+i*{m_imag[4]}</DisplayString>
</Synthetic>
<Synthetic Name="[5]" Condition="size > 5">
<DisplayString Condition="m_imag[5] < 0">{m_real[5]}-i*{-m_imag[5]}</DisplayString>
<DisplayString>{m_real[5]}+i*{m_imag[5]}</DisplayString>
</Synthetic>
<Synthetic Name="[6]" Condition="size > 6">
<DisplayString Condition="m_imag[6] < 0">{m_real[6]}-i*{-m_imag[6]}</DisplayString>
<DisplayString>{m_real[6]}+i*{m_imag[6]}</DisplayString>
</Synthetic>
<Synthetic Name="[7]" Condition="size > 7">
<DisplayString Condition="m_imag[7] < 0">{m_real[7]}-i*{-m_imag[7]}</DisplayString>
<DisplayString>{m_real[7]}+i*{m_imag[7]}</DisplayString>
</Synthetic>
<Synthetic Name="[8]" Condition="size > 8">
<DisplayString Condition="m_imag[8] < 0">{m_real[8]}-i*{-m_imag[8]}</DisplayString>
<DisplayString>{m_real[8]}+i*{m_imag[8]}</DisplayString>
</Synthetic>
<Synthetic Name="[9]" Condition="size > 9">
<DisplayString Condition="m_imag[9] < 0">{m_real[9]}-i*{-m_imag[9]}</DisplayString>
<DisplayString>{m_real[9]}+i*{m_imag[9]}</DisplayString>
</Synthetic>
<Synthetic Name="[10]" Condition="size > 10">
<DisplayString Condition="m_imag[10] < 0">{m_real[10]}-i*{-m_imag[10]}</DisplayString>
<DisplayString>{m_real[10]}+i*{m_imag[10]}</DisplayString>
</Synthetic>
<Synthetic Name="[11]" Condition="size > 11">
<DisplayString Condition="m_imag[11] < 0">{m_real[11]}-i*{-m_imag[11]}</DisplayString>
<DisplayString>{m_real[11]}+i*{m_imag[11]}</DisplayString>
</Synthetic>
<Synthetic Name="[12]" Condition="size > 12">
<DisplayString Condition="m_imag[12] < 0">{m_real[12]}-i*{-m_imag[12]}</DisplayString>
<DisplayString>{m_real[12]}+i*{m_imag[12]}</DisplayString>
</Synthetic>
<Synthetic Name="[13]" Condition="size > 13">
<DisplayString Condition="m_imag[13] < 0">{m_real[13]}-i*{-m_imag[13]}</DisplayString>
<DisplayString>{m_real[13]}+i*{m_imag[13]}</DisplayString>
</Synthetic>
<Synthetic Name="[14]" Condition="size > 14">
<DisplayString Condition="m_imag[14] < 0">{m_real[14]}-i*{-m_imag[14]}</DisplayString>
<DisplayString>{m_real[14]}+i*{m_imag[14]}</DisplayString>
</Synthetic>
<Synthetic Name="[15]" Condition="size > 15">
<DisplayString Condition="m_imag[15] < 0">{m_real[15]}-i*{-m_imag[15]}</DisplayString>
<DisplayString>{m_real[15]}+i*{m_imag[15]}</DisplayString>
</Synthetic>
</Expand>
</Type>
</AutoVisualizer>
Metadata
Assignees
Labels
No labels
Activity