summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/asmjit/src/asmjit.natvis
blob: 18a083c6c12673d1f0f1f0da02e92f95f321d08c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?xml version="1.0" encoding="utf-8"?>

<!-- asmjit visualizer for Visual Studio (natvis) -->

<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="asmjit::String">
    <Intrinsic Name="isSmall" Expression="(_type &lt; 0x1F)"/>
    <DisplayString Condition="isSmall()">{_small.data, s8}</DisplayString>
    <DisplayString Condition="!isSmall()">{_large.data, s8}</DisplayString>
    <Expand HideRawView="true">
      <Synthetic Name="_type">
        <DisplayString Condition="(_type &lt; 0x1F)">Small</DisplayString>
        <DisplayString Condition="(_type == 0x1F)">Large</DisplayString>
        <DisplayString Condition="(_type &gt; 0x1F)">External</DisplayString>
      </Synthetic>
      <Item Name="_size" Condition="isSmall()" ExcludeView="simple">(int)_small.type, d</Item>
      <Item Name="_size" Condition="!isSmall()" ExcludeView="simple">_large.size, d</Item>
      <Item Name="_capacity" Condition="isSmall()" ExcludeView="simple">asmjit::String::kSSOCapacity, d</Item>
      <Item Name="_capacity" Condition="!isSmall()" ExcludeView="simple">_large.capacity, d</Item>
      <Item Name="_data" Condition="isSmall()" ExcludeView="simple">_small.data, s8</Item>
      <Item Name="_data" Condition="!isSmall()" ExcludeView="simple">_large.data, s8</Item>
    </Expand>
  </Type>

  <Type Name="asmjit::ZoneVector&lt;*&gt;">
    <DisplayString>{{ [size={_size, d} capacity={_capacity, d}] }}</DisplayString>
    <Expand>
      <Item Name="_size" ExcludeView="simple">_size, d</Item>
      <Item Name="_capacity" ExcludeView="simple">_capacity, d</Item>
      <ArrayItems>
        <Size>_size</Size>
        <ValuePointer>(($T1*)_data)</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>

  <Type Name="asmjit::Operand_">
    <Intrinsic Name="opType" Expression="(unsigned int)(_signature &amp; 0x7)"/>
    <Intrinsic Name="opSize" Expression="(_signature &gt;&gt; 24) &amp; 0xFF"/>

    <Intrinsic Name="regType" Expression="(_signature &gt;&gt; 3) &amp; 0x1F"/>
    <Intrinsic Name="regGroup" Expression="(_signature &gt;&gt; 8) &amp; 0xF"/>

    <Intrinsic Name="memBaseType" Expression="(_signature &gt;&gt; 3) &amp; 0x1F"/>
    <Intrinsic Name="memIndexType" Expression="(_signature &gt;&gt; 8) &amp; 0x1F"/>
    <Intrinsic Name="memAddrType" Expression="(_signature &gt;&gt; 13) &amp; 0x3"/>
    <Intrinsic Name="memRegHome" Expression="(_signature &gt;&gt; 15) &amp; 0x1"/>

    <Intrinsic Name="memBaseId" Expression="_baseId"/>
    <Intrinsic Name="memIndexId" Expression="_data[0]"/>

    <Intrinsic Name="memOffset32b" Expression="(__int64)int(_data[1])"/>
    <Intrinsic Name="memOffset64b" Expression="(__int64) ((unsigned __int64)_baseId &lt;&lt; 32) | ((unsigned __int64)_data[1])"/>
    <Intrinsic Name="memOffset" Expression="memBaseType() != 0 ? memOffset32b() : memOffset64b()"/>

    <Intrinsic Name="immValue" Expression="((__int64)_data[1] &lt;&lt; 32) | (__int64)_data[0]"/>

    <DisplayString Condition="opType() == 0">[None]</DisplayString>
    <DisplayString Condition="opType() == 1">[Reg] {{ id={_baseId, d} group={regGroup(), d} type={regType(), d} size={opSize(), d} }}</DisplayString>
    <DisplayString Condition="opType() == 2">[Mem] {{ baseId={memBaseId(), d} indexId={memIndexId(), d} offset={(__int64)memOffset(), d} }}</DisplayString>
    <DisplayString Condition="opType() == 3">[Imm] {{ val={immValue(), d} hex={immValue(), X} }}</DisplayString>
    <DisplayString Condition="opType() == 4">[Label] {{ id={_baseId} }}</DisplayString>
    <DisplayString Condition="opType() &gt; 4">[Unknown]</DisplayString>
    <Expand HideRawView="true">
      <Item Name="_signature">_signature, X</Item>
      <Item Name="_signature.any.type">(asmjit::Operand_::OpType)opType()</Item>
      <Item Name="_signature.any.size">opSize(), d</Item>
      <Item Name="_signature.reg.type" Condition="opType() == 1">(asmjit::BaseReg::RegType)regType()</Item>
      <Item Name="_signature.reg.group" Condition="opType() == 1">(asmjit::BaseReg::RegGroup)regGroup()</Item>
      <Item Name="_signature.mem.baseType" Condition="opType() == 2">(asmjit::BaseReg::RegType)memBaseType()</Item>
      <Item Name="_signature.mem.indexType" Condition="opType() == 2">(asmjit::BaseReg::RegType)memIndexType()</Item>
      <Item Name="_signature.mem.addrType" Condition="opType() == 2">(asmjit::BaseMem::AddrType)memAddrType()</Item>
      <Item Name="_signature.mem.regHome" Condition="opType() == 2">(bool)memRegHome()</Item>
      <Item Name="_baseId">_baseId</Item>
      <Item Name="_data[0]"        Condition="opType() != 2 &amp;&amp; opType() != 3">_data[0]</Item>
      <Item Name="_data[1]"        Condition="opType() != 2 &amp;&amp; opType() != 3">_data[1]</Item>
      <Item Name="_data[IndexId]"  Condition="opType() == 2">_data[0]</Item>
      <Item Name="_data[OffsetLo]" Condition="opType() == 2">_data[1]</Item>
      <Item Name="_data[ImmHi]"    Condition="opType() == 3">_data[0]</Item>
      <Item Name="_data[ImmLo]"    Condition="opType() == 3">_data[1]</Item>
    </Expand>
  </Type>
</AutoVisualizer>