xref: /aosp_15_r20/external/llvm/utils/LLVMVisualizers/llvm.natvis (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker<?xml version="1.0" encoding="utf-8"?>
2*9880d681SAndroid Build Coastguard Worker<!--
3*9880d681SAndroid Build Coastguard WorkerVisual Studio Native Debugging Visualizers for LLVM
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard WorkerFor Visual Studio 2013 only, put this file into
6*9880d681SAndroid Build Coastguard Worker"%USERPROFILE%\Documents\Visual Studio 2013\Visualizers" or create a symbolic link so it updates automatically.
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard WorkerFor later versions of Visual Studio, no setup is required.
9*9880d681SAndroid Build Coastguard Worker-->
10*9880d681SAndroid Build Coastguard Worker<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
11*9880d681SAndroid Build Coastguard Worker  <!-- VS2013 -->
12*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::SmallVectorImpl&lt;*&gt;" Priority="MediumLow">
13*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) == 0">empty</DisplayString>
14*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) != 0">{{ size={($T1*)EndX - ($T1*)BeginX} }}</DisplayString>
15*9880d681SAndroid Build Coastguard Worker    <Expand>
16*9880d681SAndroid Build Coastguard Worker      <Item Name="[size]">($T1*)EndX - ($T1*)BeginX</Item>
17*9880d681SAndroid Build Coastguard Worker      <Item Name="[capacity]">($T1*)CapacityX - ($T1*)BeginX</Item>
18*9880d681SAndroid Build Coastguard Worker      <ArrayItems>
19*9880d681SAndroid Build Coastguard Worker        <Size>($T1*)EndX - ($T1*)BeginX</Size>
20*9880d681SAndroid Build Coastguard Worker        <ValuePointer>($T1*)BeginX</ValuePointer>
21*9880d681SAndroid Build Coastguard Worker      </ArrayItems>
22*9880d681SAndroid Build Coastguard Worker    </Expand>
23*9880d681SAndroid Build Coastguard Worker  </Type>
24*9880d681SAndroid Build Coastguard Worker  <!-- VS2015 and up -->
25*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::SmallVectorImpl&lt;*&gt;">
26*9880d681SAndroid Build Coastguard Worker    <DisplayString IncludeView ="elt0" Condition="(($T1*)EndX - ($T1*)BeginX) == 0"></DisplayString>
27*9880d681SAndroid Build Coastguard Worker    <DisplayString IncludeView ="elt0">{(($T1*)BeginX)[0]}{*this,view(elt1)}</DisplayString>
28*9880d681SAndroid Build Coastguard Worker    <DisplayString IncludeView ="elt1" Condition="(($T1*)EndX - ($T1*)BeginX) == 1"></DisplayString>
29*9880d681SAndroid Build Coastguard Worker    <DisplayString IncludeView ="elt1">, {(($T1*)BeginX)[1]}{*this,view(elt2)}</DisplayString>
30*9880d681SAndroid Build Coastguard Worker    <DisplayString IncludeView ="elt2" Condition="(($T1*)EndX - ($T1*)BeginX) == 2"></DisplayString>
31*9880d681SAndroid Build Coastguard Worker    <DisplayString IncludeView ="elt2">, {(($T1*)BeginX)[2]}{*this,view(elt3)}</DisplayString>
32*9880d681SAndroid Build Coastguard Worker    <DisplayString IncludeView ="elt3" Condition="(($T1*)EndX - ($T1*)BeginX) == 3"></DisplayString>
33*9880d681SAndroid Build Coastguard Worker    <DisplayString IncludeView ="elt3">, {(($T1*)BeginX)[2]}{*this,view(elt4)}</DisplayString>
34*9880d681SAndroid Build Coastguard Worker    <DisplayString IncludeView ="elt4" Condition="(($T1*)EndX - ($T1*)BeginX) == 4"></DisplayString>
35*9880d681SAndroid Build Coastguard Worker    <DisplayString IncludeView ="elt4">, /* {(($T1*)EndX - ($T1*)BeginX) - 4} more*/ </DisplayString>
36*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) == 0">empty</DisplayString>
37*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(($T1*)EndX - ($T1*)BeginX) != 0">{{{*this,view(elt0)}}}</DisplayString>
38*9880d681SAndroid Build Coastguard Worker    <Expand>
39*9880d681SAndroid Build Coastguard Worker      <Item Name="[size]">($T1*)EndX - ($T1*)BeginX</Item>
40*9880d681SAndroid Build Coastguard Worker      <Item Name="[capacity]">($T1*)CapacityX - ($T1*)BeginX</Item>
41*9880d681SAndroid Build Coastguard Worker      <ArrayItems>
42*9880d681SAndroid Build Coastguard Worker        <Size>($T1*)EndX - ($T1*)BeginX</Size>
43*9880d681SAndroid Build Coastguard Worker        <ValuePointer>($T1*)BeginX</ValuePointer>
44*9880d681SAndroid Build Coastguard Worker      </ArrayItems>
45*9880d681SAndroid Build Coastguard Worker    </Expand>
46*9880d681SAndroid Build Coastguard Worker  </Type>
47*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::ArrayRef&lt;*&gt;">
48*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="Length == 0">empty</DisplayString>
49*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="Length != 0">{{ size={Length} }}</DisplayString>
50*9880d681SAndroid Build Coastguard Worker    <Expand>
51*9880d681SAndroid Build Coastguard Worker      <Item Name="[size]">Length</Item>
52*9880d681SAndroid Build Coastguard Worker      <ArrayItems>
53*9880d681SAndroid Build Coastguard Worker        <Size>Length</Size>
54*9880d681SAndroid Build Coastguard Worker        <ValuePointer>Data</ValuePointer>
55*9880d681SAndroid Build Coastguard Worker      </ArrayItems>
56*9880d681SAndroid Build Coastguard Worker    </Expand>
57*9880d681SAndroid Build Coastguard Worker  </Type>
58*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::SmallString&lt;*&gt;">
59*9880d681SAndroid Build Coastguard Worker    <DisplayString>{BeginX,s}</DisplayString>
60*9880d681SAndroid Build Coastguard Worker    <StringView>BeginX,s</StringView>
61*9880d681SAndroid Build Coastguard Worker    <Expand>
62*9880d681SAndroid Build Coastguard Worker      <Item Name="[size]">(char*)EndX - (char*)BeginX</Item>
63*9880d681SAndroid Build Coastguard Worker      <Item Name="[capacity]">(char*)CapacityX - (char*)BeginX</Item>
64*9880d681SAndroid Build Coastguard Worker      <ArrayItems>
65*9880d681SAndroid Build Coastguard Worker        <Size>(char*)EndX - (char*)BeginX</Size>
66*9880d681SAndroid Build Coastguard Worker        <ValuePointer>(char*)BeginX</ValuePointer>
67*9880d681SAndroid Build Coastguard Worker      </ArrayItems>
68*9880d681SAndroid Build Coastguard Worker    </Expand>
69*9880d681SAndroid Build Coastguard Worker  </Type>
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::StringRef">
72*9880d681SAndroid Build Coastguard Worker    <DisplayString>{Data,[Length]s}</DisplayString>
73*9880d681SAndroid Build Coastguard Worker    <StringView>Data,[Length]s</StringView>
74*9880d681SAndroid Build Coastguard Worker    <Expand>
75*9880d681SAndroid Build Coastguard Worker      <Item Name="[size]">Length</Item>
76*9880d681SAndroid Build Coastguard Worker      <ArrayItems>
77*9880d681SAndroid Build Coastguard Worker        <Size>Length</Size>
78*9880d681SAndroid Build Coastguard Worker        <ValuePointer>Data</ValuePointer>
79*9880d681SAndroid Build Coastguard Worker      </ArrayItems>
80*9880d681SAndroid Build Coastguard Worker    </Expand>
81*9880d681SAndroid Build Coastguard Worker  </Type>
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::PointerIntPair&lt;*,*,*,*&gt;">
84*9880d681SAndroid Build Coastguard Worker    <DisplayString>{IntMask}: {($T1)(Value &amp; PointerBitMask)} [{($T3)((Value &gt;&gt; IntShift) &amp; IntMask)}]</DisplayString>
85*9880d681SAndroid Build Coastguard Worker    <Expand>
86*9880d681SAndroid Build Coastguard Worker      <Item Name="[ptr]">($T1)(Value &amp; PointerBitMask)</Item>
87*9880d681SAndroid Build Coastguard Worker      <Item Name="[int]">($T3)((Value &gt;&gt; IntShift) &amp; IntMask)</Item>
88*9880d681SAndroid Build Coastguard Worker    </Expand>
89*9880d681SAndroid Build Coastguard Worker  </Type>
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::PointerUnion&lt;*,*&gt;">
92*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="((Val.Value &gt;&gt; Val.IntShift) &amp; Val.IntMask) == 0">{"$T1", s8b}: {($T1)(Val.Value &amp; Val.PointerBitMask)}</DisplayString>
93*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="((Val.Value &gt;&gt; Val.IntShift) &amp; Val.IntMask) != 0">{"$T2", s8b}: {($T2)(Val.Value &amp; Val.PointerBitMask)}</DisplayString>
94*9880d681SAndroid Build Coastguard Worker    <Expand>
95*9880d681SAndroid Build Coastguard Worker      <ExpandedItem Condition="((Val.Value &gt;&gt; Val.IntShift) &amp; Val.IntMask) == 0">($T1)(Val.Value &amp; Val.PointerBitMask)</ExpandedItem>
96*9880d681SAndroid Build Coastguard Worker      <ExpandedItem Condition="((Val.Value &gt;&gt; Val.IntShift) &amp; Val.IntMask) != 0">($T2)(Val.Value &amp; Val.PointerBitMask)</ExpandedItem>
97*9880d681SAndroid Build Coastguard Worker    </Expand>
98*9880d681SAndroid Build Coastguard Worker  </Type>
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::PointerUnion3&lt;*,*,*&gt;">
101*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(Val.Val.Value &amp; 2) != 2 &amp;&amp; (Val.Val.Value &amp; 1) != 1">{"$T1", s8b}: {($T1)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>
102*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(Val.Val.Value &amp; 2) == 2">{"$T2", s8b}: {($T2)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>
103*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(Val.Val.Value &amp; 1) == 1">{"$T3", s8b}: {($T3)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>
104*9880d681SAndroid Build Coastguard Worker    <Expand>
105*9880d681SAndroid Build Coastguard Worker      <ExpandedItem Condition="(Val.Val.Value &amp; 2) != 2 &amp;&amp; (Val.Val.Value &amp; 1) != 1">($T1)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</ExpandedItem>
106*9880d681SAndroid Build Coastguard Worker      <ExpandedItem Condition="(Val.Val.Value &amp; 2) == 2">($T2)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</ExpandedItem>
107*9880d681SAndroid Build Coastguard Worker      <ExpandedItem Condition="(Val.Val.Value &amp; 1) == 1">($T3)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</ExpandedItem>
108*9880d681SAndroid Build Coastguard Worker    </Expand>
109*9880d681SAndroid Build Coastguard Worker  </Type>
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::PointerUnion4&lt;*,*,*,*&gt;">
112*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(Val.Val.Value &amp; 3) != 3 &amp;&amp; (Val.Val.Value &amp; 2) != 2 &amp;&amp; (Val.Val.Value &amp; 1) != 1">{"$T1", s8b}: {($T1)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>
113*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(Val.Val.Value &amp; 3) != 3 &amp;&amp; (Val.Val.Value &amp; 2) == 2">{"$T2", s8b}: {($T2)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>
114*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(Val.Val.Value &amp; 3) != 3 &amp;&amp; (Val.Val.Value &amp; 1) == 1">{"$T3", s8b}: {($T3)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>
115*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(Val.Val.Value &amp; 3) == 3">{"$T4", s8b}: {($T4)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)}</DisplayString>
116*9880d681SAndroid Build Coastguard Worker    <Expand>
117*9880d681SAndroid Build Coastguard Worker      <ExpandedItem Condition="(Val.Val.Value &amp; 3) != 3 &amp;&amp; (Val.Val.Value &amp; 2) != 2 &amp;&amp; (Val.Val.Value &amp; 1) != 1">($T1)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</ExpandedItem>
118*9880d681SAndroid Build Coastguard Worker      <ExpandedItem Condition="(Val.Val.Value &amp; 3) != 3 &amp;&amp; (Val.Val.Value &amp; 2) == 2">($T2)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</ExpandedItem>
119*9880d681SAndroid Build Coastguard Worker      <ExpandedItem Condition="(Val.Val.Value &amp; 3) != 3 &amp;&amp; (Val.Val.Value &amp; 1) == 1">($T3)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</ExpandedItem>
120*9880d681SAndroid Build Coastguard Worker      <ExpandedItem Condition="(Val.Val.Value &amp; 3) == 3">($T4)((Val.Val.Value &gt;&gt; 2) &lt;&lt; 2)</ExpandedItem>
121*9880d681SAndroid Build Coastguard Worker    </Expand>
122*9880d681SAndroid Build Coastguard Worker  </Type>
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::iplist&lt;*,*&gt;">
125*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="Head == 0">{{ empty }}</DisplayString>
126*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="Head != 0">{{ head={Head} }}</DisplayString>
127*9880d681SAndroid Build Coastguard Worker    <Expand>
128*9880d681SAndroid Build Coastguard Worker      <LinkedListItems>
129*9880d681SAndroid Build Coastguard Worker        <HeadPointer>Head</HeadPointer>
130*9880d681SAndroid Build Coastguard Worker        <NextPointer>Next</NextPointer>
131*9880d681SAndroid Build Coastguard Worker        <ValueNode>this</ValueNode>
132*9880d681SAndroid Build Coastguard Worker      </LinkedListItems>
133*9880d681SAndroid Build Coastguard Worker    </Expand>
134*9880d681SAndroid Build Coastguard Worker  </Type>
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::IntrusiveRefCntPtr&lt;*&gt;">
137*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="Obj == 0">empty</DisplayString>
138*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(Obj != 0) &amp;&amp; (Obj-&gt;ref_cnt == 1)">RefPtr [1 ref] {*Obj}</DisplayString>
139*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="(Obj != 0) &amp;&amp; (Obj-&gt;ref_cnt != 1)">RefPtr [{Obj-&gt;ref_cnt} refs] {*Obj}</DisplayString>
140*9880d681SAndroid Build Coastguard Worker    <Expand>
141*9880d681SAndroid Build Coastguard Worker      <Item Condition="Obj != 0" Name="[refs]">Obj-&gt;ref_cnt</Item>
142*9880d681SAndroid Build Coastguard Worker      <ExpandedItem Condition="Obj != 0">Obj</ExpandedItem>
143*9880d681SAndroid Build Coastguard Worker    </Expand>
144*9880d681SAndroid Build Coastguard Worker  </Type>
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::SmallPtrSet&lt;*,*&gt;">
147*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="CurArray == SmallArray">{{ [Small Mode] size={NumElements}, capacity={CurArraySize} }}</DisplayString>
148*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="CurArray != SmallArray">{{ [Big Mode] size={NumElements}, capacity={CurArraySize} }}</DisplayString>
149*9880d681SAndroid Build Coastguard Worker    <Expand>
150*9880d681SAndroid Build Coastguard Worker      <Item Name="[size]">NumElements</Item>
151*9880d681SAndroid Build Coastguard Worker      <Item Name="[capacity]">CurArraySize</Item>
152*9880d681SAndroid Build Coastguard Worker      <ArrayItems>
153*9880d681SAndroid Build Coastguard Worker        <Size>CurArraySize</Size>
154*9880d681SAndroid Build Coastguard Worker        <ValuePointer>($T1*)CurArray</ValuePointer>
155*9880d681SAndroid Build Coastguard Worker      </ArrayItems>
156*9880d681SAndroid Build Coastguard Worker    </Expand>
157*9880d681SAndroid Build Coastguard Worker  </Type>
158*9880d681SAndroid Build Coastguard Worker
159*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::DenseMap&lt;*,*,*&gt;">
160*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="NumEntries == 0">empty</DisplayString>
161*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="NumEntries != 0">{{ size={NumEntries}, buckets={NumBuckets} }}</DisplayString>
162*9880d681SAndroid Build Coastguard Worker    <Expand>
163*9880d681SAndroid Build Coastguard Worker      <Item Name="[size]">NumEntries</Item>
164*9880d681SAndroid Build Coastguard Worker      <Item Name="[buckets]">NumBuckets</Item>
165*9880d681SAndroid Build Coastguard Worker      <ArrayItems>
166*9880d681SAndroid Build Coastguard Worker        <Size>NumBuckets</Size>
167*9880d681SAndroid Build Coastguard Worker        <ValuePointer>Buckets</ValuePointer>
168*9880d681SAndroid Build Coastguard Worker      </ArrayItems>
169*9880d681SAndroid Build Coastguard Worker    </Expand>
170*9880d681SAndroid Build Coastguard Worker  </Type>
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::StringMap&lt;*,*&gt;">
173*9880d681SAndroid Build Coastguard Worker    <DisplayString>{{ size={NumItems}, buckets={NumBuckets} }}</DisplayString>
174*9880d681SAndroid Build Coastguard Worker    <Expand>
175*9880d681SAndroid Build Coastguard Worker      <Item Name="[size]">NumItems</Item>
176*9880d681SAndroid Build Coastguard Worker      <Item Name="[buckets]">NumBuckets</Item>
177*9880d681SAndroid Build Coastguard Worker      <ArrayItems>
178*9880d681SAndroid Build Coastguard Worker        <Size>NumBuckets</Size>
179*9880d681SAndroid Build Coastguard Worker        <ValuePointer>(MapEntryTy**)TheTable</ValuePointer>
180*9880d681SAndroid Build Coastguard Worker      </ArrayItems>
181*9880d681SAndroid Build Coastguard Worker    </Expand>
182*9880d681SAndroid Build Coastguard Worker  </Type>
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::StringMapEntry&lt;*&gt;">
185*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="StrLen == 0">empty</DisplayString>
186*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="StrLen != 0">({this+1,s}, {second})</DisplayString>
187*9880d681SAndroid Build Coastguard Worker    <Expand>
188*9880d681SAndroid Build Coastguard Worker      <Item Name="[key]">this+1,s</Item>
189*9880d681SAndroid Build Coastguard Worker      <Item Name="[value]" Condition="StrLen != 0">second</Item>
190*9880d681SAndroid Build Coastguard Worker    </Expand>
191*9880d681SAndroid Build Coastguard Worker  </Type>
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::Triple">
194*9880d681SAndroid Build Coastguard Worker    <DisplayString>{Data}</DisplayString>
195*9880d681SAndroid Build Coastguard Worker  </Type>
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::Optional&lt;*&gt;">
198*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="!hasVal">empty</DisplayString>
199*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="hasVal">{*(($T1 *)(unsigned char *)storage.buffer)}</DisplayString>
200*9880d681SAndroid Build Coastguard Worker    <Expand>
201*9880d681SAndroid Build Coastguard Worker      <Item Name="[underlying]" Condition="hasVal">*(($T1 *)(unsigned char *)storage.buffer)</Item>
202*9880d681SAndroid Build Coastguard Worker    </Expand>
203*9880d681SAndroid Build Coastguard Worker  </Type>
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Worker
206*9880d681SAndroid Build Coastguard Worker  <!-- Since we're in MSVC, we can assume that the system is little endian.  Therefore
207*9880d681SAndroid Build Coastguard Worker       the little and native cases just require a cast.  Handle this easy case first. Use
208*9880d681SAndroid Build Coastguard Worker       a wildcard for the second template argument (the endianness), but we will use a
209*9880d681SAndroid Build Coastguard Worker       specific value of 0 later on for the big endian to give it priority for being a
210*9880d681SAndroid Build Coastguard Worker       better match.  -->
211*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::support::detail::packed_endian_specific_integral&lt;*,*,1&gt;">
212*9880d681SAndroid Build Coastguard Worker    <DisplayString>{{little endian value = {*(($T1*)(unsigned char *)Value.buffer)} }}</DisplayString>
213*9880d681SAndroid Build Coastguard Worker    <Expand>
214*9880d681SAndroid Build Coastguard Worker      <Item Name="[Raw Bytes]" Condition="sizeof($T1)==1">(unsigned char *)Value.buffer,1</Item>
215*9880d681SAndroid Build Coastguard Worker      <Item Name="[Raw Bytes]" Condition="sizeof($T1)==2">(unsigned char *)Value.buffer,2</Item>
216*9880d681SAndroid Build Coastguard Worker      <Item Name="[Raw Bytes]" Condition="sizeof($T1)==4">(unsigned char *)Value.buffer,4</Item>
217*9880d681SAndroid Build Coastguard Worker      <Item Name="[Raw Bytes]" Condition="sizeof($T1)==8">(unsigned char *)Value.buffer,8</Item>
218*9880d681SAndroid Build Coastguard Worker    </Expand>
219*9880d681SAndroid Build Coastguard Worker  </Type>
220*9880d681SAndroid Build Coastguard Worker
221*9880d681SAndroid Build Coastguard Worker  <!-- Now handle the hard case of big endian.  We need to do the swizzling here, but
222*9880d681SAndroid Build Coastguard Worker       we need to specialize it based on the size of the value type. -->
223*9880d681SAndroid Build Coastguard Worker  <Type Name="llvm::support::detail::packed_endian_specific_integral&lt;*,0,1&gt;">
224*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="sizeof($T1)==1">{{ big endian value = {*(unsigned char *)Value.buffer} }}</DisplayString>
225*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="sizeof($T1)==2">{{ big endian value = {(($T1)(*(unsigned char *)Value.buffer) &lt;&lt; 8)
226*9880d681SAndroid Build Coastguard Worker                                                                    | ($T1)(*((unsigned char *)Value.buffer+1))} }}</DisplayString>
227*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="sizeof($T1)==4">{{ big endian value = {(($T1)(*(unsigned char *)Value.buffer) &lt;&lt; 24)
228*9880d681SAndroid Build Coastguard Worker                                                                    | (($T1)(*((unsigned char *)Value.buffer+1)) &lt;&lt; 16)
229*9880d681SAndroid Build Coastguard Worker                                                                    | (($T1)(*((unsigned char *)Value.buffer+2)) &lt;&lt; 8)
230*9880d681SAndroid Build Coastguard Worker                                                                    |  ($T1)(*((unsigned char *)Value.buffer+3))} }}</DisplayString>
231*9880d681SAndroid Build Coastguard Worker    <DisplayString Condition="sizeof($T1)==8">{{ big endian value = {(($T1)(*(unsigned char *)Value.buffer) &lt;&lt; 56)
232*9880d681SAndroid Build Coastguard Worker                                                                    | (($T1)(*((unsigned char *)Value.buffer+1)) &lt;&lt; 48)
233*9880d681SAndroid Build Coastguard Worker                                                                    | (($T1)(*((unsigned char *)Value.buffer+2)) &lt;&lt; 40)
234*9880d681SAndroid Build Coastguard Worker                                                                    | (($T1)(*((unsigned char *)Value.buffer+3)) &lt;&lt; 32)
235*9880d681SAndroid Build Coastguard Worker                                                                    | (($T1)(*((unsigned char *)Value.buffer+4)) &lt;&lt; 24)
236*9880d681SAndroid Build Coastguard Worker                                                                    | (($T1)(*((unsigned char *)Value.buffer+5)) &lt;&lt; 16)
237*9880d681SAndroid Build Coastguard Worker                                                                    | (($T1)(*((unsigned char *)Value.buffer+6)) &lt;&lt; 8)
238*9880d681SAndroid Build Coastguard Worker                                                                    |  ($T1)(*((unsigned char *)Value.buffer+7))} }}</DisplayString>
239*9880d681SAndroid Build Coastguard Worker    <Expand>
240*9880d681SAndroid Build Coastguard Worker      <Item Name="[Raw Bytes]" Condition="sizeof($T1)==1">(unsigned char *)Value.buffer,1</Item>
241*9880d681SAndroid Build Coastguard Worker      <Item Name="[Raw Bytes]" Condition="sizeof($T1)==2">(unsigned char *)Value.buffer,2</Item>
242*9880d681SAndroid Build Coastguard Worker      <Item Name="[Raw Bytes]" Condition="sizeof($T1)==4">(unsigned char *)Value.buffer,4</Item>
243*9880d681SAndroid Build Coastguard Worker      <Item Name="[Raw Bytes]" Condition="sizeof($T1)==8">(unsigned char *)Value.buffer,8</Item>
244*9880d681SAndroid Build Coastguard Worker    </Expand>
245*9880d681SAndroid Build Coastguard Worker  </Type>
246*9880d681SAndroid Build Coastguard Worker</AutoVisualizer>
247