summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-ir-insts-stable-names.cpp
blob: 2ac205faf075c2c97dc1b85a1f45bf89e8b9ea79 (plain)
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
#include "slang-ir-insts-stable-names.h"

namespace Slang
{

static const UInt kOpcodeToStableName[] = {
#if 0 // FIDDLE TEMPLATE:
% local insts = require("source/slang/slang-ir-insts.lua")
% insts.traverse(function(inst)
%   if inst.is_leaf then
%     if inst.stable_name == nil then 
%       error("Instruction is missing stable name: " .. tostring(inst.struct_name)) 
%     end
%     local stable_name = tostring(inst.stable_name)
      $stable_name,
%   end
% end)
#else // FIDDLE OUTPUT:
#define FIDDLE_GENERATED_OUTPUT_ID 0
#include "slang-ir-insts-stable-names.cpp.fiddle"
#endif // FIDDLE END
};

static const IROp kStableNameToOpcode[] = {
#if 0 // FIDDLE TEMPLATE:
% local insts = require("source/slang/slang-ir-insts.lua")
% for i = 0, insts.max_stable_name do 
%   inst = insts.stable_name_to_inst[i]
%   if inst then
%     local struct_name = inst.struct_name
      kIROp_$struct_name,
%   else
      kIROp_Invalid,
%   end
% end
#else // FIDDLE OUTPUT:
#define FIDDLE_GENERATED_OUTPUT_ID 1
#include "slang-ir-insts-stable-names.cpp.fiddle"
#endif // FIDDLE END
};

UInt getOpcodeStableName(IROp op)
{
    // Check if the opcode is within valid range
    if (op >= SLANG_COUNT_OF(kOpcodeToStableName))
    {
        return kInvalidStableName;
    }
    return kOpcodeToStableName[op];
}

IROp getStableNameOpcode(UInt stableName)
{
    // Check if the stable name is within valid range
    if (stableName >= SLANG_COUNT_OF(kStableNameToOpcode))
    {
        return kIROp_Invalid;
    }
    return kStableNameToOpcode[stableName];
}
} // namespace Slang