-
Notifications
You must be signed in to change notification settings - Fork 279
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 complex
batch constant
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<*, *>"> <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
Metadata
Assignees
Labels
No labels