mirror of
https://github.com/RPCS3/llvm.git
synced 2024-11-27 21:50:29 +00:00
Add natvis visualizers for endian types.
This allows ulittle* and ubig* types to be visualized properly in VS. Differential Revision: http://reviews.llvm.org/D19339 Reviewed By: Aaron Ballman git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@267050 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ec474295eb
commit
6efffd31d2
@ -168,4 +168,45 @@ For later versions of Visual Studio, no setup is required.
|
||||
<Item Name="[underlying]" Condition="hasVal">*(($T1 *)(unsigned char *)storage.buffer)</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Since we're in MSVC, we can assume that the system is little endian. Therefore
|
||||
the little and native cases just require a cast. Handle this easy case first. Use
|
||||
a wildcard for the second template argument (the endianness), but we will use a
|
||||
specific value of 0 later on for the big endian to give it priority for being a
|
||||
better match. -->
|
||||
<Type Name="llvm::support::detail::packed_endian_specific_integral<*,*,1>">
|
||||
<DisplayString>{{little endian value = {*(($T1*)(unsigned char *)Value.buffer)} }}</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[Raw Bytes]" Condition="sizeof($T1)==1">(unsigned char *)Value.buffer,1</Item>
|
||||
<Item Name="[Raw Bytes]" Condition="sizeof($T1)==2">(unsigned char *)Value.buffer,2</Item>
|
||||
<Item Name="[Raw Bytes]" Condition="sizeof($T1)==4">(unsigned char *)Value.buffer,4</Item>
|
||||
<Item Name="[Raw Bytes]" Condition="sizeof($T1)==8">(unsigned char *)Value.buffer,8</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Now handle the hard case of big endian. We need to do the swizzling here, but
|
||||
we need to specialize it based on the size of the value type. -->
|
||||
<Type Name="llvm::support::detail::packed_endian_specific_integral<*,0,1>">
|
||||
<DisplayString Condition="sizeof($T1)==1">{{ big endian value = {*(unsigned char *)Value.buffer} }}</DisplayString>
|
||||
<DisplayString Condition="sizeof($T1)==2">{{ big endian value = {(($T1)(*(unsigned char *)Value.buffer) << 8)
|
||||
| ($T1)(*((unsigned char *)Value.buffer+1))} }}</DisplayString>
|
||||
<DisplayString Condition="sizeof($T1)==4">{{ big endian value = {(($T1)(*(unsigned char *)Value.buffer) << 24)
|
||||
| (($T1)(*((unsigned char *)Value.buffer+1)) << 16)
|
||||
| (($T1)(*((unsigned char *)Value.buffer+2)) << 8)
|
||||
| ($T1)(*((unsigned char *)Value.buffer+3))} }}</DisplayString>
|
||||
<DisplayString Condition="sizeof($T1)==8">{{ big endian value = {(($T1)(*(unsigned char *)Value.buffer) << 56)
|
||||
| (($T1)(*((unsigned char *)Value.buffer+1)) << 48)
|
||||
| (($T1)(*((unsigned char *)Value.buffer+2)) << 40)
|
||||
| (($T1)(*((unsigned char *)Value.buffer+3)) << 32)
|
||||
| (($T1)(*((unsigned char *)Value.buffer+4)) << 24)
|
||||
| (($T1)(*((unsigned char *)Value.buffer+5)) << 16)
|
||||
| (($T1)(*((unsigned char *)Value.buffer+6)) << 8)
|
||||
| ($T1)(*((unsigned char *)Value.buffer+7))} }}</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[Raw Bytes]" Condition="sizeof($T1)==1">(unsigned char *)Value.buffer,1</Item>
|
||||
<Item Name="[Raw Bytes]" Condition="sizeof($T1)==2">(unsigned char *)Value.buffer,2</Item>
|
||||
<Item Name="[Raw Bytes]" Condition="sizeof($T1)==4">(unsigned char *)Value.buffer,4</Item>
|
||||
<Item Name="[Raw Bytes]" Condition="sizeof($T1)==8">(unsigned char *)Value.buffer,8</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
</AutoVisualizer>
|
||||
|
Loading…
Reference in New Issue
Block a user