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
|