Skip to content

Commit 216ede9

Browse files
authored
SPIRV INTRINSICS from Header enums (#577)
* Remove redundant comments * Update subgroup_shuffle.hlsl * Update core.hlsl with float32_t * Update subgroup_arithmetic.hlsl with float32_t
1 parent ba832ee commit 216ede9

File tree

5 files changed

+111
-111
lines changed

5 files changed

+111
-111
lines changed

include/nbl/builtin/hlsl/spirv_intrinsics/core.hlsl

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -17,80 +17,80 @@ namespace spirv
1717

1818
#pragma region ATOMICS
1919
template<typename T>
20-
T atomicAdd([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
20+
T atomicAdd([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
2121
template<>
2222
[[vk::ext_instruction(spv::OpAtomicIAdd)]]
23-
int atomicAdd([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
23+
int32_t atomicAdd([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
2424
template<>
25-
[[vk::ext_instruction(/* OpAtomicIAdd */ 234)]]
26-
uint atomicAdd([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
25+
[[vk::ext_instruction( spv::OpAtomicIAdd )]]
26+
uint32_t atomicAdd([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
2727

2828
template<typename T>
29-
T atomicAnd([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
29+
T atomicAnd([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
3030
template<>
31-
[[vk::ext_instruction(/* OpAtomicAnd */ 240)]]
32-
int atomicAnd([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
31+
[[vk::ext_instruction( spv::OpAtomicAnd )]]
32+
int32_t atomicAnd([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
3333
template<>
34-
[[vk::ext_instruction(/* OpAtomicAnd */ 240)]]
35-
uint atomicAnd([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
34+
[[vk::ext_instruction( spv::OpAtomicAnd )]]
35+
uint32_t atomicAnd([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
3636

3737
template<typename T>
38-
T atomicOr([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
38+
T atomicOr([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
3939
template<>
40-
[[vk::ext_instruction(/* OpAtomicOr */ 241)]]
41-
int atomicOr([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
40+
[[vk::ext_instruction( spv::OpAtomicOr )]]
41+
int32_t atomicOr([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
4242
template<>
43-
[[vk::ext_instruction(/* OpAtomicOr */ 241)]]
44-
uint atomicOr([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
43+
[[vk::ext_instruction( spv::OpAtomicOr )]]
44+
uint32_t atomicOr([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
4545

4646
template<typename T>
47-
T atomicXor([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
47+
T atomicXor([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
4848
template<>
49-
[[vk::ext_instruction(/* OpAtomicXor */ 242)]]
50-
int atomicXor([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
49+
[[vk::ext_instruction( spv::OpAtomicXor )]]
50+
int32_t atomicXor([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
5151
template<>
52-
[[vk::ext_instruction(/* OpAtomicXor */ 242)]]
53-
uint atomicXor([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
52+
[[vk::ext_instruction( spv::OpAtomicXor )]]
53+
uint32_t atomicXor([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
5454

5555
template<typename T>
56-
T atomicMin([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
56+
T atomicMin([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
5757
template<>
58-
[[vk::ext_instruction(/* OpAtomicSMin */ 236)]]
59-
int atomicMin([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
58+
[[vk::ext_instruction( spv::OpAtomicSMin )]]
59+
int32_t atomicMin([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
6060
template<>
61-
[[vk::ext_instruction(/* OpAtomicSMin */ 236)]]
62-
uint atomicMin([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
61+
[[vk::ext_instruction( spv::OpAtomicSMin )]]
62+
uint32_t atomicMin([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
6363

6464
template<typename T>
65-
T atomicMax([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
65+
T atomicMax([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
6666
template<>
67-
[[vk::ext_instruction(/* OpAtomicSMax */ 238)]]
68-
int atomicMax([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
67+
[[vk::ext_instruction( spv::OpAtomicSMax )]]
68+
int32_t atomicMax([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
6969
template<>
70-
[[vk::ext_instruction(/* OpAtomicSMax */ 238)]]
71-
uint atomicMax([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
70+
[[vk::ext_instruction( spv::OpAtomicSMax )]]
71+
uint32_t atomicMax([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
7272

7373
template<typename T>
74-
T atomicExchange([[vk::ext_reference]] T ptr, uint memoryScope, uint memorySemantics, T value);
74+
T atomicExchange([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memorySemantics, T value);
7575
template<>
76-
[[vk::ext_instruction(/* OpAtomicExchange */ 229)]]
77-
int atomicExchange([[vk::ext_reference]] int ptr, uint memoryScope, uint memorySemantics, int value);
76+
[[vk::ext_instruction( spv::OpAtomicExchange )]]
77+
int32_t atomicExchange([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, int32_t value);
7878
template<>
79-
[[vk::ext_instruction(/* OpAtomicExchange */ 229)]]
80-
uint atomicExchange([[vk::ext_reference]] uint ptr, uint memoryScope, uint memorySemantics, uint value);
79+
[[vk::ext_instruction( spv::OpAtomicExchange )]]
80+
uint32_t atomicExchange([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, uint32_t value);
8181
template<>
82-
[[vk::ext_instruction(/* OpAtomicExchange */ 229)]]
83-
float atomicExchange([[vk::ext_reference]] float ptr, uint memoryScope, uint memorySemantics, float value);
82+
[[vk::ext_instruction( spv::OpAtomicExchange )]]
83+
float32_t atomicExchange([[vk::ext_reference]] float32_t ptr, uint32_t memoryScope, uint32_t memorySemantics, float32_t value);
8484

8585

8686
template<typename T>
87-
T atomicCompSwap([[vk::ext_reference]] T ptr, uint memoryScope, uint memSemanticsEqual, uint memSemanticsUnequal, T value, T comparator);
87+
T atomicCompSwap([[vk::ext_reference]] T ptr, uint32_t memoryScope, uint32_t memSemanticsEqual, uint32_t memSemanticsUnequal, T value, T comparator);
8888
template<>
89-
[[vk::ext_instruction(/* OpAtomicCompareExchange */ 230)]]
90-
int atomicCompSwap([[vk::ext_reference]] int ptr, uint memoryScope, uint memSemanticsEqual, uint memSemanticsUnequal, int value, int comparator);
89+
[[vk::ext_instruction( spv::OpAtomicCompareExchange )]]
90+
int32_t atomicCompSwap([[vk::ext_reference]] int32_t ptr, uint32_t memoryScope, uint32_t memSemanticsEqual, uint32_t memSemanticsUnequal, int32_t value, int32_t comparator);
9191
template<>
92-
[[vk::ext_instruction(/* OpAtomicCompareExchange */ 230)]]
93-
uint atomicCompSwap([[vk::ext_reference]] uint ptr, uint memoryScope, uint memSemanticsEqual, uint memSemanticsUnequal, uint value, uint comparator);
92+
[[vk::ext_instruction( spv::OpAtomicCompareExchange )]]
93+
uint32_t atomicCompSwap([[vk::ext_reference]] uint32_t ptr, uint32_t memoryScope, uint32_t memSemanticsEqual, uint32_t memSemanticsUnequal, uint32_t value, uint32_t comparator);
9494
#pragma endregion ATOMICS
9595

9696
#pragma region BARRIERS
@@ -99,14 +99,14 @@ uint atomicCompSwap([[vk::ext_reference]] uint ptr, uint memoryScope, uint memSe
9999
// https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#_memory_semantics_id
100100
// By providing memory semantics None we do both control and memory barrier as is done in GLSL
101101

102-
[[vk::ext_instruction(/* OpControlBarrier */ 224)]]
103-
void controlBarrier(uint executionScope, uint memoryScope, uint memorySemantics);
102+
[[vk::ext_instruction( spv::OpControlBarrier )]]
103+
void controlBarrier(uint32_t executionScope, uint32_t memoryScope, uint32_t memorySemantics);
104104

105-
[[vk::ext_instruction(/* OpMemoryBarrier */ 225)]]
106-
void memoryBarrier(uint memoryScope, uint memorySemantics);
105+
[[vk::ext_instruction( spv::OpMemoryBarrier )]]
106+
void memoryBarrier(uint32_t memoryScope, uint32_t memorySemantics);
107107
#pragma endregion BARRIERS
108108
}
109109
}
110110
}
111111

112-
#endif
112+
#endif

include/nbl/builtin/hlsl/spirv_intrinsics/subgroup_arithmetic.hlsl

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -14,65 +14,65 @@ namespace hlsl
1414
namespace spirv
1515
{
1616

17-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
18-
[[vk::ext_instruction(349)]]
19-
int groupAdd(uint groupScope, [[vk::ext_literal]] uint operation, int value);
20-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
21-
[[vk::ext_instruction(349)]]
22-
uint groupAdd(uint groupScope, [[vk::ext_literal]] uint operation, uint value);
23-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
24-
[[vk::ext_instruction(350)]]
25-
float groupAdd(uint groupScope, [[vk::ext_literal]] uint operation, float value);
17+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
18+
[[vk::ext_instruction( spv::OpGroupNonUniformIAdd )]]
19+
int32_t groupAdd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, int32_t value);
20+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
21+
[[vk::ext_instruction( spv::OpGroupNonUniformIAdd )]]
22+
uint32_t groupAdd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, uint32_t value);
23+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
24+
[[vk::ext_instruction( spv::OpGroupNonUniformFAdd )]]
25+
float32_t groupAdd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, float32_t value);
2626

27-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
28-
[[vk::ext_instruction(351)]]
29-
int groupMul(uint groupScope, [[vk::ext_literal]] uint operation, int value);
30-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
31-
[[vk::ext_instruction(351)]]
32-
uint groupMul(uint groupScope, [[vk::ext_literal]] uint operation, uint value);
33-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
34-
[[vk::ext_instruction(352)]]
35-
float groupMul(uint groupScope, [[vk::ext_literal]] uint operation, float value);
27+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
28+
[[vk::ext_instruction( spv::OpGroupNonUniformIMul )]]
29+
int32_t groupMul(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, int32_t value);
30+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
31+
[[vk::ext_instruction( spv::OpGroupNonUniformIMul )]]
32+
uint32_t groupMul(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, uint32_t value);
33+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
34+
[[vk::ext_instruction( spv::OpGroupNonUniformFMul )]]
35+
float32_t groupMul(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, float32_t value);
3636

3737
template<typename T>
38-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
39-
[[vk::ext_instruction(359)]]
40-
T groupBitwiseAnd(uint groupScope, [[vk::ext_literal]] uint operation, T value);
38+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
39+
[[vk::ext_instruction( spv::OpGroupNonUniformBitwiseAnd )]]
40+
T groupBitwiseAnd(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, T value);
4141

4242
template<typename T>
43-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
44-
[[vk::ext_instruction(360)]]
45-
T groupBitwiseOr(uint groupScope, [[vk::ext_literal]] uint operation, T value);
43+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
44+
[[vk::ext_instruction( spv::OpGroupNonUniformBitwiseOr )]]
45+
T groupBitwiseOr(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, T value);
4646

4747
template<typename T>
48-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
49-
[[vk::ext_instruction(361)]]
50-
T groupBitwiseXor(uint groupScope, [[vk::ext_literal]] uint operation, T value);
48+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
49+
[[vk::ext_instruction( spv::OpGroupNonUniformBitwiseXor )]]
50+
T groupBitwiseXor(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, T value);
5151

5252
// The MIN and MAX operations in SPIR-V have different Ops for each arithmetic type
5353
// so we implement them distinctly
54-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
55-
[[vk::ext_instruction(353)]]
56-
int groupBitwiseMin(uint groupScope, [[vk::ext_literal]] uint operation, int value);
57-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
58-
[[vk::ext_instruction(354)]]
59-
uint groupBitwiseMin(uint groupScope, [[vk::ext_literal]] uint operation, uint value);
60-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
61-
[[vk::ext_instruction(355)]]
62-
float groupBitwiseMin(uint groupScope, [[vk::ext_literal]] uint operation, float value);
54+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
55+
[[vk::ext_instruction( spv::OpGroupNonUniformSMin )]]
56+
int32_t groupBitwiseMin(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, int32_t value);
57+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
58+
[[vk::ext_instruction( spv::OpGroupNonUniformUMin )]]
59+
uint32_t groupBitwiseMin(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, uint32_t value);
60+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
61+
[[vk::ext_instruction( spv::OpGroupNonUniformFMin )]]
62+
float32_t groupBitwiseMin(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, float32_t value);
6363

64-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
65-
[[vk::ext_instruction(356)]]
66-
int groupBitwiseMax(uint groupScope, [[vk::ext_literal]] uint operation, int value);
67-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
68-
[[vk::ext_instruction(357)]]
69-
uint groupBitwiseMax(uint groupScope, [[vk::ext_literal]] uint operation, uint value);
70-
[[vk::ext_capability(/* GroupNonUniformArithmetic */ 63)]]
71-
[[vk::ext_instruction(358)]]
72-
float groupBitwiseMax(uint groupScope, [[vk::ext_literal]] uint operation, float value);
64+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
65+
[[vk::ext_instruction( spv::OpGroupNonUniformSMax )]]
66+
int32_t groupBitwiseMax(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, int32_t value);
67+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
68+
[[vk::ext_instruction( spv::OpGroupNonUniformUMax )]]
69+
uint32_t groupBitwiseMax(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, uint32_t value);
70+
[[vk::ext_capability( spv::CapabilityGroupNonUniformArithmetic )]]
71+
[[vk::ext_instruction( spv::OpGroupNonUniformFMax )]]
72+
float32_t groupBitwiseMax(uint32_t groupScope, [[vk::ext_literal]] uint32_t operation, float32_t value);
7373

7474
}
7575
}
7676
}
7777

78-
#endif
78+
#endif

include/nbl/builtin/hlsl/spirv_intrinsics/subgroup_ballot.hlsl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@ namespace hlsl
1515
namespace spirv
1616
{
1717
template<typename T>
18-
[[vk::ext_capability(/* GroupNonUniformBallot */ 64)]]
19-
[[vk::ext_instruction(/* OpGroupNonUniformBroadcastFirst */ 338)]]
20-
T subgroupBroadcastFirst(uint executionScope, T value);
18+
[[vk::ext_capability( spv::CapabilityGroupNonUniformBallot )]]
19+
[[vk::ext_instruction( spv::OpGroupNonUniformBroadcastFirst )]]
20+
T subgroupBroadcastFirst(uint32_t executionScope, T value);
2121

2222
template<typename T>
23-
[[vk::ext_capability(/* GroupNonUniformBallot */ 64)]]
24-
[[vk::ext_instruction(/* OpGroupNonUniformBroadcast */ 337)]]
25-
T subgroupBroadcast(uint executionScope, T value, uint invocationId);
23+
[[vk::ext_capability( spv::CapabilityGroupNonUniformBallot )]]
24+
[[vk::ext_instruction( spv::OpGroupNonUniformBroadcast )]]
25+
T subgroupBroadcast(uint32_t executionScope, T value, uint32_t invocationId);
2626
}
2727
}
2828
}
2929

30-
#endif
30+
#endif

include/nbl/builtin/hlsl/spirv_intrinsics/subgroup_basic.hlsl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ namespace hlsl
1515
namespace spirv
1616
{
1717

18-
[[vk::ext_instruction(/* OpGroupNonUniformElect */ 333)]]
19-
bool subgroupElect(uint executionScope);
18+
[[vk::ext_instruction( spv::OpGroupNonUniformElect )]]
19+
bool subgroupElect(uint32_t executionScope);
2020

2121
}
2222
}
2323
}
2424

25-
#endif
25+
#endif

include/nbl/builtin/hlsl/spirv_intrinsics/subgroup_shuffle.hlsl

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,22 @@ namespace hlsl
1515
namespace spirv
1616
{
1717
template<typename T>
18-
[[vk::ext_instruction(/* OpGroupNonUniformShuffle */ 345)]]
19-
T groupShuffle(uint executionScope, T value, uint invocationId);
18+
[[vk::ext_instruction( spv::OpGroupNonUniformShuffle )]]
19+
T groupShuffle(uint32_t executionScope, T value, uint32_t invocationId);
2020

2121
#ifdef NBL_GL_KHR_shader_subgroup_shuffle_relative
2222
template<typename T>
23-
[[vk::ext_capability(/* GroupNonUniformShuffleRelative */ 66)]]
24-
[[vk::ext_instruction(/* OpGroupNonUniformShuffleUp */ 347)]]
25-
T groupShuffleUp(uint executionScope, T value, uint delta);
23+
[[vk::ext_capability( spv::CapabilityGroupNonUniformShuffleRelative )]]
24+
[[vk::ext_instruction( spv::OpGroupNonUniformShuffleUp )]]
25+
T groupShuffleUp(uint32_t executionScope, T value, uint32_t delta);
2626

2727
template<typename T>
28-
[[vk::ext_capability(/* GroupNonUniformShuffleRelative */ 66)]]
29-
[[vk::ext_instruction(/* OpGroupNonUniformShuffleDown */ 348)]]
30-
T groupShuffleDown(uint executionScope, T value, uint delta);
28+
[[vk::ext_capability( spv::CapabilityGroupNonUniformShuffleRelative )]]
29+
[[vk::ext_instruction( spv::OpGroupNonUniformShuffleDown )]]
30+
T groupShuffleDown(uint32_t executionScope, T value, uint32_t delta);
3131
#endif
3232
}
3333
}
3434
}
3535

36-
#endif
36+
#endif

0 commit comments

Comments
 (0)