loader: Fix unknown phys dev trampolines on win32
authorLenny Komow <lenny@lunarg.com>
Thu, 8 Jun 2017 22:41:02 +0000 (16:41 -0600)
committerLenny Komow <lenny@lunarg.com>
Tue, 13 Jun 2017 22:34:45 +0000 (16:34 -0600)
Convert unknown physical device extension trampolines to assembly
on windows. This is necessary because the previous method relied on
compiler optimizations that were not being run by MSVC, even with
full optimizations enabled.

Change-Id: Ibefa6ed24f8c91b1e723fab9c1cfd3039fabd64b

loader/CMakeLists.txt
loader/asm_offset.c [new file with mode: 0644]
loader/phys_dev_chain.c [new file with mode: 0644]
loader/phys_dev_chain_masm.asm [new file with mode: 0644]
loader/phys_dev_ext.c

index 7303f59..67b6ff7 100644 (file)
@@ -82,6 +82,32 @@ set(OPT_LOADER_SRCS
 
 add_definitions(-DAPI_NAME="${API_NAME}")
 
+# Check for assembler support
+set(ASM_FAILURE_MSG "The build will fall back on building with C code\n")
+set(ASM_FAILURE_MSG "${ASM_FAILURE_MSG}Note that this may be unsafe, as the C code requires tail-call optimizations to remove")
+set(ASM_FAILURE_MSG "${ASM_FAILURE_MSG} the stack frame for certain calls. If the compiler does not do this, then unknown device")
+set(ASM_FAILURE_MSG "${ASM_FAILURE_MSG} extensions will suffer from a corrupted stack.")
+if (WIN32)
+    enable_language(ASM_MASM)
+    if (CMAKE_ASM_MASM_COMPILER_WORKS)
+        set(CMAKE_ASM_MASM_FLAGS ${CMAKE_ASM_MASM_FLAGS} /safeseh)
+        set(OPT_LOADER_SRCS ${OPT_LOADER_SRCS} phys_dev_chain_masm.asm)
+
+        add_executable(asm_offset asm_offset.c)
+        add_dependencies(asm_offset generate_helper_files loader_gen_files)
+        add_custom_command(OUTPUT gen_defines.asm DEPENDS asm_offset COMMAND asm_offset MASM)
+        add_custom_target(loader_asm_gen_files DEPENDS gen_defines.asm)
+    else()
+        message(WARNING "Could not find working MASM assebler\n${ASM_FAILURE_MSG}")
+        set(OPT_LOADER_SRCS ${OPT_LOADER_SRCS} phys_dev_chain.c)
+        add_custom_target(loader_asm_gen_files)
+    endif()
+else()
+    message(WARNING "Could not find assembler for this system\n${ASM_FAILURE_MSG}")
+    set(OPT_LOADER_SRCS ${OPT_LOADER_SRCS} phys_dev_chain.c)
+    add_custom_target(loader_asm_gen_files)
+endif()
+
 run_vk_xml_generate(loader_extension_generator.py vk_loader_extensions.h)
 run_vk_xml_generate(loader_extension_generator.py vk_loader_extensions.c)
 add_custom_target(loader_gen_files DEPENDS
@@ -111,7 +137,7 @@ if (WIN32)
 
     target_compile_options(loader-norm PUBLIC "$<$<CONFIG:DEBUG>:${LOCAL_C_FLAGS_DBG}>")
     add_library(loader-opt OBJECT ${OPT_LOADER_SRCS})
-    add_dependencies(loader-opt generate_helper_files loader_gen_files)
+    add_dependencies(loader-opt generate_helper_files loader_gen_files loader_asm_gen_files)
 
     target_compile_options(loader-opt PUBLIC "$<$<CONFIG:DEBUG>:${LOCAL_C_FLAGS_REL}>")
     add_library(${API_LOWERCASE}-${MAJOR} SHARED $<TARGET_OBJECTS:loader-opt> $<TARGET_OBJECTS:loader-norm> ${CMAKE_CURRENT_BINARY_DIR}/${API_LOWERCASE}-${MAJOR}.def ${CMAKE_CURRENT_SOURCE_DIR}/loader.rc)
@@ -120,7 +146,7 @@ if (WIN32)
     set_target_properties(${API_LOWERCASE}-${MAJOR} PROPERTIES LINK_FLAGS_DEBUG /ignore:4098)
     set_target_properties(VKstatic.${MAJOR} PROPERTIES OUTPUT_NAME VKstatic.${MAJOR})
     target_link_libraries(${API_LOWERCASE}-${MAJOR} shlwapi)
-    add_dependencies(${API_LOWERCASE}-${MAJOR} generate_helper_files loader_gen_files)
+    add_dependencies(${API_LOWERCASE}-${MAJOR} generate_helper_files loader_gen_files loader_asm_gen_files)
 
     target_link_libraries(VKstatic.${MAJOR} shlwapi)
     if (CMAKE_GENERATOR MATCHES "^Visual Studio.*")
@@ -141,7 +167,7 @@ else()
     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wpointer-arith")
 
     add_library(${API_LOWERCASE} SHARED ${NORMAL_LOADER_SRCS} ${OPT_LOADER_SRCS})
-    add_dependencies(${API_LOWERCASE} generate_helper_files loader_gen_files)
+    add_dependencies(${API_LOWERCASE} generate_helper_files loader_gen_files loader_asm_gen_files)
     set_target_properties(${API_LOWERCASE} PROPERTIES SOVERSION "1" VERSION "1.0.${vk_header_version}")
     target_link_libraries(${API_LOWERCASE} -ldl -lpthread -lm)
 
diff --git a/loader/asm_offset.c b/loader/asm_offset.c
new file mode 100644 (file)
index 0000000..3eb2520
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2017 The Khronos Group Inc.
+ * Copyright (c) 2017 Valve Corporation
+ * Copyright (c) 2017 LunarG, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Author: Lenny Komow <lenny@lunarg.com>
+ */
+
+// This code generates an assembly file which provides offsets to get struct members from assembly code.
+
+#include <stdio.h>
+#include "loader.h"
+
+int main(int argc, char **argv) {
+    const char *assembler = NULL;
+    for (int i = 0; i < argc; ++i) {
+        if (!strcmp(argv[i], "MASM")) {
+            assembler = "MASM";
+        }
+    }
+    if (assembler == NULL) {
+        return 1;
+    }
+
+    struct loader_instance_dispatch_table disp;
+    size_t offset = (size_t) ((size_t) &disp.phys_dev_ext) - ((size_t) &disp);
+
+    FILE *file = fopen("gen_defines.asm", "w");
+    if (!strcmp(assembler, "MASM")) {
+        fprintf(file, "\nPHYS_DEV_DISP_OFFSET equ %lu\n", offset);
+    }
+    return fclose(file);
+}
diff --git a/loader/phys_dev_chain.c b/loader/phys_dev_chain.c
new file mode 100644 (file)
index 0000000..f90a340
--- /dev/null
@@ -0,0 +1,291 @@
+/*
+ * Copyright (c) 2017 The Khronos Group Inc.
+ * Copyright (c) 2017 Valve Corporation
+ * Copyright (c) 2017 LunarG, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Author: Lenny Komow <lenny@lunarg.com>
+ */
+
+ // This code is used to pass on physical device extensions through the call chain. It must do this without creating a stack frame,
+ // because the actual parameters of the call are not known. Since the first parameter is known to be a VkPhysicalDevice, it can
+// unwrap the physical device, overwriting the wrapped device, and then jump to the next function in the call chain. This code
+// attempts to accomplish this by relying on tail-call optimizations, but there is no guarantee that this will work. As a result,
+// this code is only compiled on systems where an assembly alternative has not been written.
+
+ #include "vk_loader_platform.h"
+ #include "loader.h"
+
+ #if defined(__GNUC__) && !defined(__clang__)
+ #pragma GCC optimize(3)  // force gcc to use tail-calls
+ #endif
+
+ // Trampoline function macro for unknown physical device extension command.
+ #define PhysDevExtTramp(num)                                                              \
+     VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp##num(VkPhysicalDevice physical_device) { \
+         const struct loader_instance_dispatch_table *disp;                                \
+         disp = loader_get_instance_dispatch(physical_device);                             \
+         disp->phys_dev_ext[num](loader_unwrap_physical_device(physical_device));          \
+     }
+
+PhysDevExtTramp(0)
+PhysDevExtTramp(1)
+PhysDevExtTramp(2)
+PhysDevExtTramp(3)
+PhysDevExtTramp(4)
+PhysDevExtTramp(5)
+PhysDevExtTramp(6)
+PhysDevExtTramp(7)
+PhysDevExtTramp(8)
+PhysDevExtTramp(9)
+PhysDevExtTramp(10)
+PhysDevExtTramp(11)
+PhysDevExtTramp(12)
+PhysDevExtTramp(13)
+PhysDevExtTramp(14)
+PhysDevExtTramp(15)
+PhysDevExtTramp(16)
+PhysDevExtTramp(17)
+PhysDevExtTramp(18)
+PhysDevExtTramp(19)
+PhysDevExtTramp(20)
+PhysDevExtTramp(21)
+PhysDevExtTramp(22)
+PhysDevExtTramp(23)
+PhysDevExtTramp(24)
+PhysDevExtTramp(25)
+PhysDevExtTramp(26)
+PhysDevExtTramp(27)
+PhysDevExtTramp(28)
+PhysDevExtTramp(29)
+PhysDevExtTramp(30)
+PhysDevExtTramp(31)
+PhysDevExtTramp(32)
+PhysDevExtTramp(33)
+PhysDevExtTramp(34)
+PhysDevExtTramp(35)
+PhysDevExtTramp(36)
+PhysDevExtTramp(37)
+PhysDevExtTramp(38)
+PhysDevExtTramp(39)
+PhysDevExtTramp(40)
+PhysDevExtTramp(41)
+PhysDevExtTramp(42)
+PhysDevExtTramp(43)
+PhysDevExtTramp(44)
+PhysDevExtTramp(45)
+PhysDevExtTramp(46)
+PhysDevExtTramp(47)
+PhysDevExtTramp(48)
+PhysDevExtTramp(49)
+PhysDevExtTramp(50)
+PhysDevExtTramp(51)
+PhysDevExtTramp(52)
+PhysDevExtTramp(53)
+PhysDevExtTramp(54)
+PhysDevExtTramp(55)
+PhysDevExtTramp(56)
+PhysDevExtTramp(57)
+PhysDevExtTramp(58)
+PhysDevExtTramp(59)
+PhysDevExtTramp(60)
+PhysDevExtTramp(61)
+PhysDevExtTramp(62)
+PhysDevExtTramp(63)
+PhysDevExtTramp(64)
+PhysDevExtTramp(65)
+PhysDevExtTramp(66)
+PhysDevExtTramp(67)
+PhysDevExtTramp(68)
+PhysDevExtTramp(69)
+PhysDevExtTramp(70)
+PhysDevExtTramp(71)
+PhysDevExtTramp(72)
+PhysDevExtTramp(73)
+PhysDevExtTramp(74)
+PhysDevExtTramp(75)
+PhysDevExtTramp(76)
+PhysDevExtTramp(77)
+PhysDevExtTramp(78)
+PhysDevExtTramp(79)
+PhysDevExtTramp(80)
+PhysDevExtTramp(81)
+PhysDevExtTramp(82)
+PhysDevExtTramp(83)
+PhysDevExtTramp(84)
+PhysDevExtTramp(85)
+PhysDevExtTramp(86)
+PhysDevExtTramp(87)
+PhysDevExtTramp(88)
+PhysDevExtTramp(89)
+PhysDevExtTramp(90)
+PhysDevExtTramp(91)
+PhysDevExtTramp(92)
+PhysDevExtTramp(93)
+PhysDevExtTramp(94)
+PhysDevExtTramp(95)
+PhysDevExtTramp(96)
+PhysDevExtTramp(97)
+PhysDevExtTramp(98)
+PhysDevExtTramp(99)
+PhysDevExtTramp(100)
+PhysDevExtTramp(101)
+PhysDevExtTramp(102)
+PhysDevExtTramp(103)
+PhysDevExtTramp(104)
+PhysDevExtTramp(105)
+PhysDevExtTramp(106)
+PhysDevExtTramp(107)
+PhysDevExtTramp(108)
+PhysDevExtTramp(109)
+PhysDevExtTramp(110)
+PhysDevExtTramp(111)
+PhysDevExtTramp(112)
+PhysDevExtTramp(113)
+PhysDevExtTramp(114)
+PhysDevExtTramp(115)
+PhysDevExtTramp(116)
+PhysDevExtTramp(117)
+PhysDevExtTramp(118)
+PhysDevExtTramp(119)
+PhysDevExtTramp(120)
+PhysDevExtTramp(121)
+PhysDevExtTramp(122)
+PhysDevExtTramp(123)
+PhysDevExtTramp(124)
+PhysDevExtTramp(125)
+PhysDevExtTramp(126)
+PhysDevExtTramp(127)
+PhysDevExtTramp(128)
+PhysDevExtTramp(129)
+PhysDevExtTramp(130)
+PhysDevExtTramp(131)
+PhysDevExtTramp(132)
+PhysDevExtTramp(133)
+PhysDevExtTramp(134)
+PhysDevExtTramp(135)
+PhysDevExtTramp(136)
+PhysDevExtTramp(137)
+PhysDevExtTramp(138)
+PhysDevExtTramp(139)
+PhysDevExtTramp(140)
+PhysDevExtTramp(141)
+PhysDevExtTramp(142)
+PhysDevExtTramp(143)
+PhysDevExtTramp(144)
+PhysDevExtTramp(145)
+PhysDevExtTramp(146)
+PhysDevExtTramp(147)
+PhysDevExtTramp(148)
+PhysDevExtTramp(149)
+PhysDevExtTramp(150)
+PhysDevExtTramp(151)
+PhysDevExtTramp(152)
+PhysDevExtTramp(153)
+PhysDevExtTramp(154)
+PhysDevExtTramp(155)
+PhysDevExtTramp(156)
+PhysDevExtTramp(157)
+PhysDevExtTramp(158)
+PhysDevExtTramp(159)
+PhysDevExtTramp(160)
+PhysDevExtTramp(161)
+PhysDevExtTramp(162)
+PhysDevExtTramp(163)
+PhysDevExtTramp(164)
+PhysDevExtTramp(165)
+PhysDevExtTramp(166)
+PhysDevExtTramp(167)
+PhysDevExtTramp(168)
+PhysDevExtTramp(169)
+PhysDevExtTramp(170)
+PhysDevExtTramp(171)
+PhysDevExtTramp(172)
+PhysDevExtTramp(173)
+PhysDevExtTramp(174)
+PhysDevExtTramp(175)
+PhysDevExtTramp(176)
+PhysDevExtTramp(177)
+PhysDevExtTramp(178)
+PhysDevExtTramp(179)
+PhysDevExtTramp(180)
+PhysDevExtTramp(181)
+PhysDevExtTramp(182)
+PhysDevExtTramp(183)
+PhysDevExtTramp(184)
+PhysDevExtTramp(185)
+PhysDevExtTramp(186)
+PhysDevExtTramp(187)
+PhysDevExtTramp(188)
+PhysDevExtTramp(189)
+PhysDevExtTramp(190)
+PhysDevExtTramp(191)
+PhysDevExtTramp(192)
+PhysDevExtTramp(193)
+PhysDevExtTramp(194)
+PhysDevExtTramp(195)
+PhysDevExtTramp(196)
+PhysDevExtTramp(197)
+PhysDevExtTramp(198)
+PhysDevExtTramp(199)
+PhysDevExtTramp(200)
+PhysDevExtTramp(201)
+PhysDevExtTramp(202)
+PhysDevExtTramp(203)
+PhysDevExtTramp(204)
+PhysDevExtTramp(205)
+PhysDevExtTramp(206)
+PhysDevExtTramp(207)
+PhysDevExtTramp(208)
+PhysDevExtTramp(209)
+PhysDevExtTramp(210)
+PhysDevExtTramp(211)
+PhysDevExtTramp(212)
+PhysDevExtTramp(213)
+PhysDevExtTramp(214)
+PhysDevExtTramp(215)
+PhysDevExtTramp(216)
+PhysDevExtTramp(217)
+PhysDevExtTramp(218)
+PhysDevExtTramp(219)
+PhysDevExtTramp(220)
+PhysDevExtTramp(221)
+PhysDevExtTramp(222)
+PhysDevExtTramp(223)
+PhysDevExtTramp(224)
+PhysDevExtTramp(225)
+PhysDevExtTramp(226)
+PhysDevExtTramp(227)
+PhysDevExtTramp(228)
+PhysDevExtTramp(229)
+PhysDevExtTramp(230)
+PhysDevExtTramp(231)
+PhysDevExtTramp(232)
+PhysDevExtTramp(233)
+PhysDevExtTramp(234)
+PhysDevExtTramp(235)
+PhysDevExtTramp(236)
+PhysDevExtTramp(237)
+PhysDevExtTramp(238)
+PhysDevExtTramp(239)
+PhysDevExtTramp(240)
+PhysDevExtTramp(241)
+PhysDevExtTramp(242)
+PhysDevExtTramp(243)
+PhysDevExtTramp(244)
+PhysDevExtTramp(245)
+PhysDevExtTramp(246)
+PhysDevExtTramp(247)
+PhysDevExtTramp(248)
+PhysDevExtTramp(249)
diff --git a/loader/phys_dev_chain_masm.asm b/loader/phys_dev_chain_masm.asm
new file mode 100644 (file)
index 0000000..ef81695
--- /dev/null
@@ -0,0 +1,318 @@
+;
+; Copyright (c) 2017 The Khronos Group Inc.
+; Copyright (c) 2017 Valve Corporation
+; Copyright (c) 2017 LunarG, Inc.
+;
+; Licensed under the Apache License, Version 2.0 (the "License");
+; you may not use this file except in compliance with the License.
+; You may obtain a copy of the License at
+;
+;     http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing, software
+; distributed under the License is distributed on an "AS IS" BASIS,
+; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+; See the License for the specific language governing permissions and
+; limitations under the License.
+;
+; Author: Lenny Komow <lenny@lunarg.com>
+;
+
+; This code is used to pass on physical device extensions through the call chain. It must do this without creating a stack frame,
+; because the actual parameters of the call are not known. Since the first parameter is known to be a VkPhysicalDevice, it can
+; unwrap the physical device, overwriting the wrapped device, and then jump to the next function in the call chain
+
+; PHYS_DEV_DISP_OFFSET is defined in codegen
+INCLUDE gen_defines.asm
+
+; 64-bit values and macro
+IFDEF rax
+
+PHYS_DEV_SIZE           equ 8
+PHYS_DEV_UNWRAP_OFFSET  equ 16
+PTR_SIZE                equ 8
+
+PhysDevExtTramp macro num:req
+public vkPhysDevExtTramp&num&
+vkPhysDevExtTramp&num&:
+    mov     rax, qword ptr [rcx]                            ; Dereference the wrapped VkPhysicalDevice to get the dispatch table in rax
+    mov     rcx, qword ptr [rcx + PHYS_DEV_UNWRAP_OFFSET]   ; Load the unwrapped VkPhysicalDevice into rcx
+    jmp     qword ptr [rax + (PHYS_DEV_DISP_OFFSET + (PTR_SIZE * num))] ; Jump to the next function in the chain, preserving the args in other registers
+endm
+
+; 32-bit values and macro
+ELSE
+
+PHYS_DEV_SIZE           equ 4
+PHYS_DEV_UNWRAP_OFFSET  equ 8
+PTR_SIZE                equ 4
+
+PhysDevExtTramp macro num
+public _vkPhysDevExtTramp&num&@4
+_vkPhysDevExtTramp&num&@4:
+    mov     eax, dword ptr [esp + PHYS_DEV_SIZE]            ; Load the wrapped VkPhysicalDevice into eax
+    mov     ecx, [eax + PHYS_DEV_UNWRAP_OFFSET]             ; Load the unwrapped VkPhysicalDevice into ecx
+    mov     [esp + PHYS_DEV_SIZE], ecx                      ; Overwrite the wrapped VkPhysicalDevice with the unwrapped one (on the stack)
+    mov     eax, [eax]                                      ; Dereference the wrapped VkPhysicalDevice to get the dispatch table in eax
+    jmp     dword ptr [eax + (PHYS_DEV_DISP_OFFSET + (PTR_SIZE * num))] ; Jump to the next function in the chain, preserving the args on the stack
+endm
+
+; This is also needed for 32-bit only
+.model flat
+
+ENDIF
+
+.code
+
+    PhysDevExtTramp 0
+    PhysDevExtTramp 1
+    PhysDevExtTramp 2
+    PhysDevExtTramp 3
+    PhysDevExtTramp 4
+    PhysDevExtTramp 5
+    PhysDevExtTramp 6
+    PhysDevExtTramp 7
+    PhysDevExtTramp 8
+    PhysDevExtTramp 9
+    PhysDevExtTramp 10
+    PhysDevExtTramp 11
+    PhysDevExtTramp 12
+    PhysDevExtTramp 13
+    PhysDevExtTramp 14
+    PhysDevExtTramp 15
+    PhysDevExtTramp 16
+    PhysDevExtTramp 17
+    PhysDevExtTramp 18
+    PhysDevExtTramp 19
+    PhysDevExtTramp 20
+    PhysDevExtTramp 21
+    PhysDevExtTramp 22
+    PhysDevExtTramp 23
+    PhysDevExtTramp 24
+    PhysDevExtTramp 25
+    PhysDevExtTramp 26
+    PhysDevExtTramp 27
+    PhysDevExtTramp 28
+    PhysDevExtTramp 29
+    PhysDevExtTramp 30
+    PhysDevExtTramp 31
+    PhysDevExtTramp 32
+    PhysDevExtTramp 33
+    PhysDevExtTramp 34
+    PhysDevExtTramp 35
+    PhysDevExtTramp 36
+    PhysDevExtTramp 37
+    PhysDevExtTramp 38
+    PhysDevExtTramp 39
+    PhysDevExtTramp 40
+    PhysDevExtTramp 41
+    PhysDevExtTramp 42
+    PhysDevExtTramp 43
+    PhysDevExtTramp 44
+    PhysDevExtTramp 45
+    PhysDevExtTramp 46
+    PhysDevExtTramp 47
+    PhysDevExtTramp 48
+    PhysDevExtTramp 49
+    PhysDevExtTramp 50
+    PhysDevExtTramp 51
+    PhysDevExtTramp 52
+    PhysDevExtTramp 53
+    PhysDevExtTramp 54
+    PhysDevExtTramp 55
+    PhysDevExtTramp 56
+    PhysDevExtTramp 57
+    PhysDevExtTramp 58
+    PhysDevExtTramp 59
+    PhysDevExtTramp 60
+    PhysDevExtTramp 61
+    PhysDevExtTramp 62
+    PhysDevExtTramp 63
+    PhysDevExtTramp 64
+    PhysDevExtTramp 65
+    PhysDevExtTramp 66
+    PhysDevExtTramp 67
+    PhysDevExtTramp 68
+    PhysDevExtTramp 69
+    PhysDevExtTramp 70
+    PhysDevExtTramp 71
+    PhysDevExtTramp 72
+    PhysDevExtTramp 73
+    PhysDevExtTramp 74
+    PhysDevExtTramp 75
+    PhysDevExtTramp 76
+    PhysDevExtTramp 77
+    PhysDevExtTramp 78
+    PhysDevExtTramp 79
+    PhysDevExtTramp 80
+    PhysDevExtTramp 81
+    PhysDevExtTramp 82
+    PhysDevExtTramp 83
+    PhysDevExtTramp 84
+    PhysDevExtTramp 85
+    PhysDevExtTramp 86
+    PhysDevExtTramp 87
+    PhysDevExtTramp 88
+    PhysDevExtTramp 89
+    PhysDevExtTramp 90
+    PhysDevExtTramp 91
+    PhysDevExtTramp 92
+    PhysDevExtTramp 93
+    PhysDevExtTramp 94
+    PhysDevExtTramp 95
+    PhysDevExtTramp 96
+    PhysDevExtTramp 97
+    PhysDevExtTramp 98
+    PhysDevExtTramp 99
+    PhysDevExtTramp 100
+    PhysDevExtTramp 101
+    PhysDevExtTramp 102
+    PhysDevExtTramp 103
+    PhysDevExtTramp 104
+    PhysDevExtTramp 105
+    PhysDevExtTramp 106
+    PhysDevExtTramp 107
+    PhysDevExtTramp 108
+    PhysDevExtTramp 109
+    PhysDevExtTramp 110
+    PhysDevExtTramp 111
+    PhysDevExtTramp 112
+    PhysDevExtTramp 113
+    PhysDevExtTramp 114
+    PhysDevExtTramp 115
+    PhysDevExtTramp 116
+    PhysDevExtTramp 117
+    PhysDevExtTramp 118
+    PhysDevExtTramp 119
+    PhysDevExtTramp 120
+    PhysDevExtTramp 121
+    PhysDevExtTramp 122
+    PhysDevExtTramp 123
+    PhysDevExtTramp 124
+    PhysDevExtTramp 125
+    PhysDevExtTramp 126
+    PhysDevExtTramp 127
+    PhysDevExtTramp 128
+    PhysDevExtTramp 129
+    PhysDevExtTramp 130
+    PhysDevExtTramp 131
+    PhysDevExtTramp 132
+    PhysDevExtTramp 133
+    PhysDevExtTramp 134
+    PhysDevExtTramp 135
+    PhysDevExtTramp 136
+    PhysDevExtTramp 137
+    PhysDevExtTramp 138
+    PhysDevExtTramp 139
+    PhysDevExtTramp 140
+    PhysDevExtTramp 141
+    PhysDevExtTramp 142
+    PhysDevExtTramp 143
+    PhysDevExtTramp 144
+    PhysDevExtTramp 145
+    PhysDevExtTramp 146
+    PhysDevExtTramp 147
+    PhysDevExtTramp 148
+    PhysDevExtTramp 149
+    PhysDevExtTramp 150
+    PhysDevExtTramp 151
+    PhysDevExtTramp 152
+    PhysDevExtTramp 153
+    PhysDevExtTramp 154
+    PhysDevExtTramp 155
+    PhysDevExtTramp 156
+    PhysDevExtTramp 157
+    PhysDevExtTramp 158
+    PhysDevExtTramp 159
+    PhysDevExtTramp 160
+    PhysDevExtTramp 161
+    PhysDevExtTramp 162
+    PhysDevExtTramp 163
+    PhysDevExtTramp 164
+    PhysDevExtTramp 165
+    PhysDevExtTramp 166
+    PhysDevExtTramp 167
+    PhysDevExtTramp 168
+    PhysDevExtTramp 169
+    PhysDevExtTramp 170
+    PhysDevExtTramp 171
+    PhysDevExtTramp 172
+    PhysDevExtTramp 173
+    PhysDevExtTramp 174
+    PhysDevExtTramp 175
+    PhysDevExtTramp 176
+    PhysDevExtTramp 177
+    PhysDevExtTramp 178
+    PhysDevExtTramp 179
+    PhysDevExtTramp 180
+    PhysDevExtTramp 181
+    PhysDevExtTramp 182
+    PhysDevExtTramp 183
+    PhysDevExtTramp 184
+    PhysDevExtTramp 185
+    PhysDevExtTramp 186
+    PhysDevExtTramp 187
+    PhysDevExtTramp 188
+    PhysDevExtTramp 189
+    PhysDevExtTramp 190
+    PhysDevExtTramp 191
+    PhysDevExtTramp 192
+    PhysDevExtTramp 193
+    PhysDevExtTramp 194
+    PhysDevExtTramp 195
+    PhysDevExtTramp 196
+    PhysDevExtTramp 197
+    PhysDevExtTramp 198
+    PhysDevExtTramp 199
+    PhysDevExtTramp 200
+    PhysDevExtTramp 201
+    PhysDevExtTramp 202
+    PhysDevExtTramp 203
+    PhysDevExtTramp 204
+    PhysDevExtTramp 205
+    PhysDevExtTramp 206
+    PhysDevExtTramp 207
+    PhysDevExtTramp 208
+    PhysDevExtTramp 209
+    PhysDevExtTramp 210
+    PhysDevExtTramp 211
+    PhysDevExtTramp 212
+    PhysDevExtTramp 213
+    PhysDevExtTramp 214
+    PhysDevExtTramp 215
+    PhysDevExtTramp 216
+    PhysDevExtTramp 217
+    PhysDevExtTramp 218
+    PhysDevExtTramp 219
+    PhysDevExtTramp 220
+    PhysDevExtTramp 221
+    PhysDevExtTramp 222
+    PhysDevExtTramp 223
+    PhysDevExtTramp 224
+    PhysDevExtTramp 225
+    PhysDevExtTramp 226
+    PhysDevExtTramp 227
+    PhysDevExtTramp 228
+    PhysDevExtTramp 229
+    PhysDevExtTramp 230
+    PhysDevExtTramp 231
+    PhysDevExtTramp 232
+    PhysDevExtTramp 233
+    PhysDevExtTramp 234
+    PhysDevExtTramp 235
+    PhysDevExtTramp 236
+    PhysDevExtTramp 237
+    PhysDevExtTramp 238
+    PhysDevExtTramp 239
+    PhysDevExtTramp 240
+    PhysDevExtTramp 241
+    PhysDevExtTramp 242
+    PhysDevExtTramp 243
+    PhysDevExtTramp 244
+    PhysDevExtTramp 245
+    PhysDevExtTramp 246
+    PhysDevExtTramp 247
+    PhysDevExtTramp 248
+    PhysDevExtTramp 249
+
+end
index d668b1b..ebebfac 100644 (file)
@@ -1,8 +1,8 @@
 /*
  *
- * Copyright (c) 2016 The Khronos Group Inc.
- * Copyright (c) 2016 Valve Corporation
- * Copyright (c) 2016 LunarG, Inc.
+ * Copyright (c) 2016-17 The Khronos Group Inc.
+ * Copyright (c) 2016-17 Valve Corporation
+ * Copyright (c) 2016-17 LunarG, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
  * limitations under the License.
  *
  * Author: Mark Young <marky@lunarg.com>
+ * Author: Lenny Komow <lenny@lunarg.com>
  *
  */
 
 #pragma GCC optimize(3)  // force gcc to use tail-calls
 #endif
 
-// Trampoline function macro for unknown physical device extension command.
-#define PhysDevExtTramp(num)                                                              \
-    VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp##num(VkPhysicalDevice physical_device) { \
-        const struct loader_instance_dispatch_table *disp;                                \
-        disp = loader_get_instance_dispatch(physical_device);                             \
-        disp->phys_dev_ext[num](loader_unwrap_physical_device(physical_device));          \
-    }
-
 // Terminator function macro for unknown physical device extension command.
 #define PhysDevExtTermin(num)                                                                                         \
     VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTermin##num(VkPhysicalDevice physical_device) {                            \
         icd_term->phys_dev_ext[num](phys_dev_term->phys_dev);                                                         \
     }
 
+// Declarations for the trampoline
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp0(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp1(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp2(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp3(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp4(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp5(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp6(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp7(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp8(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp9(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp10(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp11(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp12(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp13(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp14(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp15(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp16(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp17(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp18(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp19(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp20(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp21(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp22(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp23(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp24(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp25(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp26(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp27(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp28(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp29(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp30(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp31(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp32(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp33(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp34(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp35(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp36(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp37(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp38(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp39(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp40(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp41(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp42(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp43(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp44(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp45(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp46(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp47(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp48(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp49(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp50(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp51(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp52(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp53(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp54(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp55(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp56(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp57(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp58(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp59(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp60(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp61(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp62(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp63(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp64(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp65(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp66(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp67(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp68(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp69(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp70(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp71(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp72(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp73(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp74(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp75(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp76(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp77(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp78(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp79(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp80(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp81(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp82(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp83(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp84(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp85(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp86(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp87(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp88(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp89(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp90(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp91(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp92(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp93(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp94(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp95(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp96(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp97(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp98(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp99(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp100(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp101(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp102(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp103(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp104(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp105(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp106(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp107(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp108(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp109(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp110(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp111(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp112(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp113(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp114(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp115(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp116(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp117(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp118(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp119(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp120(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp121(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp122(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp123(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp124(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp125(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp126(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp127(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp128(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp129(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp130(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp131(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp132(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp133(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp134(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp135(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp136(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp137(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp138(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp139(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp140(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp141(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp142(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp143(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp144(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp145(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp146(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp147(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp148(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp149(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp150(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp151(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp152(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp153(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp154(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp155(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp156(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp157(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp158(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp159(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp160(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp161(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp162(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp163(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp164(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp165(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp166(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp167(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp168(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp169(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp170(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp171(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp172(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp173(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp174(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp175(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp176(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp177(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp178(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp179(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp180(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp181(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp182(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp183(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp184(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp185(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp186(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp187(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp188(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp189(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp190(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp191(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp192(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp193(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp194(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp195(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp196(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp197(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp198(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp199(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp200(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp201(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp202(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp203(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp204(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp205(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp206(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp207(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp208(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp209(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp210(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp211(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp212(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp213(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp214(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp215(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp216(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp217(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp218(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp219(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp220(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp221(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp222(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp223(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp224(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp225(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp226(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp227(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp228(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp229(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp230(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp231(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp232(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp233(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp234(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp235(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp236(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp237(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp238(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp239(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp240(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp241(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp242(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp243(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp244(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp245(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp246(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp247(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp248(VkPhysicalDevice);
+VKAPI_ATTR void VKAPI_CALL vkPhysDevExtTramp249(VkPhysicalDevice);
+
 // Disable clang-format for lists of macros
 // clang-format off
 
-// Instantiations of the trampoline and terminator
-PhysDevExtTramp(0)   PhysDevExtTermin(0)
-PhysDevExtTramp(1)   PhysDevExtTermin(1)
-PhysDevExtTramp(2)   PhysDevExtTermin(2)
-PhysDevExtTramp(3)   PhysDevExtTermin(3)
-PhysDevExtTramp(4)   PhysDevExtTermin(4)
-PhysDevExtTramp(5)   PhysDevExtTermin(5)
-PhysDevExtTramp(6)   PhysDevExtTermin(6)
-PhysDevExtTramp(7)   PhysDevExtTermin(7)
-PhysDevExtTramp(8)   PhysDevExtTermin(8)
-PhysDevExtTramp(9)   PhysDevExtTermin(9)
-PhysDevExtTramp(10)  PhysDevExtTermin(10)
-PhysDevExtTramp(11)  PhysDevExtTermin(11)
-PhysDevExtTramp(12)  PhysDevExtTermin(12)
-PhysDevExtTramp(13)  PhysDevExtTermin(13)
-PhysDevExtTramp(14)  PhysDevExtTermin(14)
-PhysDevExtTramp(15)  PhysDevExtTermin(15)
-PhysDevExtTramp(16)  PhysDevExtTermin(16)
-PhysDevExtTramp(17)  PhysDevExtTermin(17)
-PhysDevExtTramp(18)  PhysDevExtTermin(18)
-PhysDevExtTramp(19)  PhysDevExtTermin(19)
-PhysDevExtTramp(20)  PhysDevExtTermin(20)
-PhysDevExtTramp(21)  PhysDevExtTermin(21)
-PhysDevExtTramp(22)  PhysDevExtTermin(22)
-PhysDevExtTramp(23)  PhysDevExtTermin(23)
-PhysDevExtTramp(24)  PhysDevExtTermin(24)
-PhysDevExtTramp(25)  PhysDevExtTermin(25)
-PhysDevExtTramp(26)  PhysDevExtTermin(26)
-PhysDevExtTramp(27)  PhysDevExtTermin(27)
-PhysDevExtTramp(28)  PhysDevExtTermin(28)
-PhysDevExtTramp(29)  PhysDevExtTermin(29)
-PhysDevExtTramp(30)  PhysDevExtTermin(30)
-PhysDevExtTramp(31)  PhysDevExtTermin(31)
-PhysDevExtTramp(32)  PhysDevExtTermin(32)
-PhysDevExtTramp(33)  PhysDevExtTermin(33)
-PhysDevExtTramp(34)  PhysDevExtTermin(34)
-PhysDevExtTramp(35)  PhysDevExtTermin(35)
-PhysDevExtTramp(36)  PhysDevExtTermin(36)
-PhysDevExtTramp(37)  PhysDevExtTermin(37)
-PhysDevExtTramp(38)  PhysDevExtTermin(38)
-PhysDevExtTramp(39)  PhysDevExtTermin(39)
-PhysDevExtTramp(40)  PhysDevExtTermin(40)
-PhysDevExtTramp(41)  PhysDevExtTermin(41)
-PhysDevExtTramp(42)  PhysDevExtTermin(42)
-PhysDevExtTramp(43)  PhysDevExtTermin(43)
-PhysDevExtTramp(44)  PhysDevExtTermin(44)
-PhysDevExtTramp(45)  PhysDevExtTermin(45)
-PhysDevExtTramp(46)  PhysDevExtTermin(46)
-PhysDevExtTramp(47)  PhysDevExtTermin(47)
-PhysDevExtTramp(48)  PhysDevExtTermin(48)
-PhysDevExtTramp(49)  PhysDevExtTermin(49)
-PhysDevExtTramp(50)  PhysDevExtTermin(50)
-PhysDevExtTramp(51)  PhysDevExtTermin(51)
-PhysDevExtTramp(52)  PhysDevExtTermin(52)
-PhysDevExtTramp(53)  PhysDevExtTermin(53)
-PhysDevExtTramp(54)  PhysDevExtTermin(54)
-PhysDevExtTramp(55)  PhysDevExtTermin(55)
-PhysDevExtTramp(56)  PhysDevExtTermin(56)
-PhysDevExtTramp(57)  PhysDevExtTermin(57)
-PhysDevExtTramp(58)  PhysDevExtTermin(58)
-PhysDevExtTramp(59)  PhysDevExtTermin(59)
-PhysDevExtTramp(60)  PhysDevExtTermin(60)
-PhysDevExtTramp(61)  PhysDevExtTermin(61)
-PhysDevExtTramp(62)  PhysDevExtTermin(62)
-PhysDevExtTramp(63)  PhysDevExtTermin(63)
-PhysDevExtTramp(64)  PhysDevExtTermin(64)
-PhysDevExtTramp(65)  PhysDevExtTermin(65)
-PhysDevExtTramp(66)  PhysDevExtTermin(66)
-PhysDevExtTramp(67)  PhysDevExtTermin(67)
-PhysDevExtTramp(68)  PhysDevExtTermin(68)
-PhysDevExtTramp(69)  PhysDevExtTermin(69)
-PhysDevExtTramp(70)  PhysDevExtTermin(70)
-PhysDevExtTramp(71)  PhysDevExtTermin(71)
-PhysDevExtTramp(72)  PhysDevExtTermin(72)
-PhysDevExtTramp(73)  PhysDevExtTermin(73)
-PhysDevExtTramp(74)  PhysDevExtTermin(74)
-PhysDevExtTramp(75)  PhysDevExtTermin(75)
-PhysDevExtTramp(76)  PhysDevExtTermin(76)
-PhysDevExtTramp(77)  PhysDevExtTermin(77)
-PhysDevExtTramp(78)  PhysDevExtTermin(78)
-PhysDevExtTramp(79)  PhysDevExtTermin(79)
-PhysDevExtTramp(80)  PhysDevExtTermin(80)
-PhysDevExtTramp(81)  PhysDevExtTermin(81)
-PhysDevExtTramp(82)  PhysDevExtTermin(82)
-PhysDevExtTramp(83)  PhysDevExtTermin(83)
-PhysDevExtTramp(84)  PhysDevExtTermin(84)
-PhysDevExtTramp(85)  PhysDevExtTermin(85)
-PhysDevExtTramp(86)  PhysDevExtTermin(86)
-PhysDevExtTramp(87)  PhysDevExtTermin(87)
-PhysDevExtTramp(88)  PhysDevExtTermin(88)
-PhysDevExtTramp(89)  PhysDevExtTermin(89)
-PhysDevExtTramp(90)  PhysDevExtTermin(90)
-PhysDevExtTramp(91)  PhysDevExtTermin(91)
-PhysDevExtTramp(92)  PhysDevExtTermin(92)
-PhysDevExtTramp(93)  PhysDevExtTermin(93)
-PhysDevExtTramp(94)  PhysDevExtTermin(94)
-PhysDevExtTramp(95)  PhysDevExtTermin(95)
-PhysDevExtTramp(96)  PhysDevExtTermin(96)
-PhysDevExtTramp(97)  PhysDevExtTermin(97)
-PhysDevExtTramp(98)  PhysDevExtTermin(98)
-PhysDevExtTramp(99)  PhysDevExtTermin(99)
-PhysDevExtTramp(100) PhysDevExtTermin(100)
-PhysDevExtTramp(101) PhysDevExtTermin(101)
-PhysDevExtTramp(102) PhysDevExtTermin(102)
-PhysDevExtTramp(103) PhysDevExtTermin(103)
-PhysDevExtTramp(104) PhysDevExtTermin(104)
-PhysDevExtTramp(105) PhysDevExtTermin(105)
-PhysDevExtTramp(106) PhysDevExtTermin(106)
-PhysDevExtTramp(107) PhysDevExtTermin(107)
-PhysDevExtTramp(108) PhysDevExtTermin(108)
-PhysDevExtTramp(109) PhysDevExtTermin(109)
-PhysDevExtTramp(110) PhysDevExtTermin(110)
-PhysDevExtTramp(111) PhysDevExtTermin(111)
-PhysDevExtTramp(112) PhysDevExtTermin(112)
-PhysDevExtTramp(113) PhysDevExtTermin(113)
-PhysDevExtTramp(114) PhysDevExtTermin(114)
-PhysDevExtTramp(115) PhysDevExtTermin(115)
-PhysDevExtTramp(116) PhysDevExtTermin(116)
-PhysDevExtTramp(117) PhysDevExtTermin(117)
-PhysDevExtTramp(118) PhysDevExtTermin(118)
-PhysDevExtTramp(119) PhysDevExtTermin(119)
-PhysDevExtTramp(120) PhysDevExtTermin(120)
-PhysDevExtTramp(121) PhysDevExtTermin(121)
-PhysDevExtTramp(122) PhysDevExtTermin(122)
-PhysDevExtTramp(123) PhysDevExtTermin(123)
-PhysDevExtTramp(124) PhysDevExtTermin(124)
-PhysDevExtTramp(125) PhysDevExtTermin(125)
-PhysDevExtTramp(126) PhysDevExtTermin(126)
-PhysDevExtTramp(127) PhysDevExtTermin(127)
-PhysDevExtTramp(128) PhysDevExtTermin(128)
-PhysDevExtTramp(129) PhysDevExtTermin(129)
-PhysDevExtTramp(130) PhysDevExtTermin(130)
-PhysDevExtTramp(131) PhysDevExtTermin(131)
-PhysDevExtTramp(132) PhysDevExtTermin(132)
-PhysDevExtTramp(133) PhysDevExtTermin(133)
-PhysDevExtTramp(134) PhysDevExtTermin(134)
-PhysDevExtTramp(135) PhysDevExtTermin(135)
-PhysDevExtTramp(136) PhysDevExtTermin(136)
-PhysDevExtTramp(137) PhysDevExtTermin(137)
-PhysDevExtTramp(138) PhysDevExtTermin(138)
-PhysDevExtTramp(139) PhysDevExtTermin(139)
-PhysDevExtTramp(140) PhysDevExtTermin(140)
-PhysDevExtTramp(141) PhysDevExtTermin(141)
-PhysDevExtTramp(142) PhysDevExtTermin(142)
-PhysDevExtTramp(143) PhysDevExtTermin(143)
-PhysDevExtTramp(144) PhysDevExtTermin(144)
-PhysDevExtTramp(145) PhysDevExtTermin(145)
-PhysDevExtTramp(146) PhysDevExtTermin(146)
-PhysDevExtTramp(147) PhysDevExtTermin(147)
-PhysDevExtTramp(148) PhysDevExtTermin(148)
-PhysDevExtTramp(149) PhysDevExtTermin(149)
-PhysDevExtTramp(150) PhysDevExtTermin(150)
-PhysDevExtTramp(151) PhysDevExtTermin(151)
-PhysDevExtTramp(152) PhysDevExtTermin(152)
-PhysDevExtTramp(153) PhysDevExtTermin(153)
-PhysDevExtTramp(154) PhysDevExtTermin(154)
-PhysDevExtTramp(155) PhysDevExtTermin(155)
-PhysDevExtTramp(156) PhysDevExtTermin(156)
-PhysDevExtTramp(157) PhysDevExtTermin(157)
-PhysDevExtTramp(158) PhysDevExtTermin(158)
-PhysDevExtTramp(159) PhysDevExtTermin(159)
-PhysDevExtTramp(160) PhysDevExtTermin(160)
-PhysDevExtTramp(161) PhysDevExtTermin(161)
-PhysDevExtTramp(162) PhysDevExtTermin(162)
-PhysDevExtTramp(163) PhysDevExtTermin(163)
-PhysDevExtTramp(164) PhysDevExtTermin(164)
-PhysDevExtTramp(165) PhysDevExtTermin(165)
-PhysDevExtTramp(166) PhysDevExtTermin(166)
-PhysDevExtTramp(167) PhysDevExtTermin(167)
-PhysDevExtTramp(168) PhysDevExtTermin(168)
-PhysDevExtTramp(169) PhysDevExtTermin(169)
-PhysDevExtTramp(170) PhysDevExtTermin(170)
-PhysDevExtTramp(171) PhysDevExtTermin(171)
-PhysDevExtTramp(172) PhysDevExtTermin(172)
-PhysDevExtTramp(173) PhysDevExtTermin(173)
-PhysDevExtTramp(174) PhysDevExtTermin(174)
-PhysDevExtTramp(175) PhysDevExtTermin(175)
-PhysDevExtTramp(176) PhysDevExtTermin(176)
-PhysDevExtTramp(177) PhysDevExtTermin(177)
-PhysDevExtTramp(178) PhysDevExtTermin(178)
-PhysDevExtTramp(179) PhysDevExtTermin(179)
-PhysDevExtTramp(180) PhysDevExtTermin(180)
-PhysDevExtTramp(181) PhysDevExtTermin(181)
-PhysDevExtTramp(182) PhysDevExtTermin(182)
-PhysDevExtTramp(183) PhysDevExtTermin(183)
-PhysDevExtTramp(184) PhysDevExtTermin(184)
-PhysDevExtTramp(185) PhysDevExtTermin(185)
-PhysDevExtTramp(186) PhysDevExtTermin(186)
-PhysDevExtTramp(187) PhysDevExtTermin(187)
-PhysDevExtTramp(188) PhysDevExtTermin(188)
-PhysDevExtTramp(189) PhysDevExtTermin(189)
-PhysDevExtTramp(190) PhysDevExtTermin(190)
-PhysDevExtTramp(191) PhysDevExtTermin(191)
-PhysDevExtTramp(192) PhysDevExtTermin(192)
-PhysDevExtTramp(193) PhysDevExtTermin(193)
-PhysDevExtTramp(194) PhysDevExtTermin(194)
-PhysDevExtTramp(195) PhysDevExtTermin(195)
-PhysDevExtTramp(196) PhysDevExtTermin(196)
-PhysDevExtTramp(197) PhysDevExtTermin(197)
-PhysDevExtTramp(198) PhysDevExtTermin(198)
-PhysDevExtTramp(199) PhysDevExtTermin(199)
-PhysDevExtTramp(200) PhysDevExtTermin(200)
-PhysDevExtTramp(201) PhysDevExtTermin(201)
-PhysDevExtTramp(202) PhysDevExtTermin(202)
-PhysDevExtTramp(203) PhysDevExtTermin(203)
-PhysDevExtTramp(204) PhysDevExtTermin(204)
-PhysDevExtTramp(205) PhysDevExtTermin(205)
-PhysDevExtTramp(206) PhysDevExtTermin(206)
-PhysDevExtTramp(207) PhysDevExtTermin(207)
-PhysDevExtTramp(208) PhysDevExtTermin(208)
-PhysDevExtTramp(209) PhysDevExtTermin(209)
-PhysDevExtTramp(210) PhysDevExtTermin(210)
-PhysDevExtTramp(211) PhysDevExtTermin(211)
-PhysDevExtTramp(212) PhysDevExtTermin(212)
-PhysDevExtTramp(213) PhysDevExtTermin(213)
-PhysDevExtTramp(214) PhysDevExtTermin(214)
-PhysDevExtTramp(215) PhysDevExtTermin(215)
-PhysDevExtTramp(216) PhysDevExtTermin(216)
-PhysDevExtTramp(217) PhysDevExtTermin(217)
-PhysDevExtTramp(218) PhysDevExtTermin(218)
-PhysDevExtTramp(219) PhysDevExtTermin(219)
-PhysDevExtTramp(220) PhysDevExtTermin(220)
-PhysDevExtTramp(221) PhysDevExtTermin(221)
-PhysDevExtTramp(222) PhysDevExtTermin(222)
-PhysDevExtTramp(223) PhysDevExtTermin(223)
-PhysDevExtTramp(224) PhysDevExtTermin(224)
-PhysDevExtTramp(225) PhysDevExtTermin(225)
-PhysDevExtTramp(226) PhysDevExtTermin(226)
-PhysDevExtTramp(227) PhysDevExtTermin(227)
-PhysDevExtTramp(228) PhysDevExtTermin(228)
-PhysDevExtTramp(229) PhysDevExtTermin(229)
-PhysDevExtTramp(230) PhysDevExtTermin(230)
-PhysDevExtTramp(231) PhysDevExtTermin(231)
-PhysDevExtTramp(232) PhysDevExtTermin(232)
-PhysDevExtTramp(233) PhysDevExtTermin(233)
-PhysDevExtTramp(234) PhysDevExtTermin(234)
-PhysDevExtTramp(235) PhysDevExtTermin(235)
-PhysDevExtTramp(236) PhysDevExtTermin(236)
-PhysDevExtTramp(237) PhysDevExtTermin(237)
-PhysDevExtTramp(238) PhysDevExtTermin(238)
-PhysDevExtTramp(239) PhysDevExtTermin(239)
-PhysDevExtTramp(240) PhysDevExtTermin(240)
-PhysDevExtTramp(241) PhysDevExtTermin(241)
-PhysDevExtTramp(242) PhysDevExtTermin(242)
-PhysDevExtTramp(243) PhysDevExtTermin(243)
-PhysDevExtTramp(244) PhysDevExtTermin(244)
-PhysDevExtTramp(245) PhysDevExtTermin(245)
-PhysDevExtTramp(246) PhysDevExtTermin(246)
-PhysDevExtTramp(247) PhysDevExtTermin(247)
-PhysDevExtTramp(248) PhysDevExtTermin(248)
-PhysDevExtTramp(249) PhysDevExtTermin(249)
+// Instantiations of the terminator
+PhysDevExtTermin(0)
+PhysDevExtTermin(1)
+PhysDevExtTermin(2)
+PhysDevExtTermin(3)
+PhysDevExtTermin(4)
+PhysDevExtTermin(5)
+PhysDevExtTermin(6)
+PhysDevExtTermin(7)
+PhysDevExtTermin(8)
+PhysDevExtTermin(9)
+PhysDevExtTermin(10)
+PhysDevExtTermin(11)
+PhysDevExtTermin(12)
+PhysDevExtTermin(13)
+PhysDevExtTermin(14)
+PhysDevExtTermin(15)
+PhysDevExtTermin(16)
+PhysDevExtTermin(17)
+PhysDevExtTermin(18)
+PhysDevExtTermin(19)
+PhysDevExtTermin(20)
+PhysDevExtTermin(21)
+PhysDevExtTermin(22)
+PhysDevExtTermin(23)
+PhysDevExtTermin(24)
+PhysDevExtTermin(25)
+PhysDevExtTermin(26)
+PhysDevExtTermin(27)
+PhysDevExtTermin(28)
+PhysDevExtTermin(29)
+PhysDevExtTermin(30)
+PhysDevExtTermin(31)
+PhysDevExtTermin(32)
+PhysDevExtTermin(33)
+PhysDevExtTermin(34)
+PhysDevExtTermin(35)
+PhysDevExtTermin(36)
+PhysDevExtTermin(37)
+PhysDevExtTermin(38)
+PhysDevExtTermin(39)
+PhysDevExtTermin(40)
+PhysDevExtTermin(41)
+PhysDevExtTermin(42)
+PhysDevExtTermin(43)
+PhysDevExtTermin(44)
+PhysDevExtTermin(45)
+PhysDevExtTermin(46)
+PhysDevExtTermin(47)
+PhysDevExtTermin(48)
+PhysDevExtTermin(49)
+PhysDevExtTermin(50)
+PhysDevExtTermin(51)
+PhysDevExtTermin(52)
+PhysDevExtTermin(53)
+PhysDevExtTermin(54)
+PhysDevExtTermin(55)
+PhysDevExtTermin(56)
+PhysDevExtTermin(57)
+PhysDevExtTermin(58)
+PhysDevExtTermin(59)
+PhysDevExtTermin(60)
+PhysDevExtTermin(61)
+PhysDevExtTermin(62)
+PhysDevExtTermin(63)
+PhysDevExtTermin(64)
+PhysDevExtTermin(65)
+PhysDevExtTermin(66)
+PhysDevExtTermin(67)
+PhysDevExtTermin(68)
+PhysDevExtTermin(69)
+PhysDevExtTermin(70)
+PhysDevExtTermin(71)
+PhysDevExtTermin(72)
+PhysDevExtTermin(73)
+PhysDevExtTermin(74)
+PhysDevExtTermin(75)
+PhysDevExtTermin(76)
+PhysDevExtTermin(77)
+PhysDevExtTermin(78)
+PhysDevExtTermin(79)
+PhysDevExtTermin(80)
+PhysDevExtTermin(81)
+PhysDevExtTermin(82)
+PhysDevExtTermin(83)
+PhysDevExtTermin(84)
+PhysDevExtTermin(85)
+PhysDevExtTermin(86)
+PhysDevExtTermin(87)
+PhysDevExtTermin(88)
+PhysDevExtTermin(89)
+PhysDevExtTermin(90)
+PhysDevExtTermin(91)
+PhysDevExtTermin(92)
+PhysDevExtTermin(93)
+PhysDevExtTermin(94)
+PhysDevExtTermin(95)
+PhysDevExtTermin(96)
+PhysDevExtTermin(97)
+PhysDevExtTermin(98)
+PhysDevExtTermin(99)
+PhysDevExtTermin(100)
+PhysDevExtTermin(101)
+PhysDevExtTermin(102)
+PhysDevExtTermin(103)
+PhysDevExtTermin(104)
+PhysDevExtTermin(105)
+PhysDevExtTermin(106)
+PhysDevExtTermin(107)
+PhysDevExtTermin(108)
+PhysDevExtTermin(109)
+PhysDevExtTermin(110)
+PhysDevExtTermin(111)
+PhysDevExtTermin(112)
+PhysDevExtTermin(113)
+PhysDevExtTermin(114)
+PhysDevExtTermin(115)
+PhysDevExtTermin(116)
+PhysDevExtTermin(117)
+PhysDevExtTermin(118)
+PhysDevExtTermin(119)
+PhysDevExtTermin(120)
+PhysDevExtTermin(121)
+PhysDevExtTermin(122)
+PhysDevExtTermin(123)
+PhysDevExtTermin(124)
+PhysDevExtTermin(125)
+PhysDevExtTermin(126)
+PhysDevExtTermin(127)
+PhysDevExtTermin(128)
+PhysDevExtTermin(129)
+PhysDevExtTermin(130)
+PhysDevExtTermin(131)
+PhysDevExtTermin(132)
+PhysDevExtTermin(133)
+PhysDevExtTermin(134)
+PhysDevExtTermin(135)
+PhysDevExtTermin(136)
+PhysDevExtTermin(137)
+PhysDevExtTermin(138)
+PhysDevExtTermin(139)
+PhysDevExtTermin(140)
+PhysDevExtTermin(141)
+PhysDevExtTermin(142)
+PhysDevExtTermin(143)
+PhysDevExtTermin(144)
+PhysDevExtTermin(145)
+PhysDevExtTermin(146)
+PhysDevExtTermin(147)
+PhysDevExtTermin(148)
+PhysDevExtTermin(149)
+PhysDevExtTermin(150)
+PhysDevExtTermin(151)
+PhysDevExtTermin(152)
+PhysDevExtTermin(153)
+PhysDevExtTermin(154)
+PhysDevExtTermin(155)
+PhysDevExtTermin(156)
+PhysDevExtTermin(157)
+PhysDevExtTermin(158)
+PhysDevExtTermin(159)
+PhysDevExtTermin(160)
+PhysDevExtTermin(161)
+PhysDevExtTermin(162)
+PhysDevExtTermin(163)
+PhysDevExtTermin(164)
+PhysDevExtTermin(165)
+PhysDevExtTermin(166)
+PhysDevExtTermin(167)
+PhysDevExtTermin(168)
+PhysDevExtTermin(169)
+PhysDevExtTermin(170)
+PhysDevExtTermin(171)
+PhysDevExtTermin(172)
+PhysDevExtTermin(173)
+PhysDevExtTermin(174)
+PhysDevExtTermin(175)
+PhysDevExtTermin(176)
+PhysDevExtTermin(177)
+PhysDevExtTermin(178)
+PhysDevExtTermin(179)
+PhysDevExtTermin(180)
+PhysDevExtTermin(181)
+PhysDevExtTermin(182)
+PhysDevExtTermin(183)
+PhysDevExtTermin(184)
+PhysDevExtTermin(185)
+PhysDevExtTermin(186)
+PhysDevExtTermin(187)
+PhysDevExtTermin(188)
+PhysDevExtTermin(189)
+PhysDevExtTermin(190)
+PhysDevExtTermin(191)
+PhysDevExtTermin(192)
+PhysDevExtTermin(193)
+PhysDevExtTermin(194)
+PhysDevExtTermin(195)
+PhysDevExtTermin(196)
+PhysDevExtTermin(197)
+PhysDevExtTermin(198)
+PhysDevExtTermin(199)
+PhysDevExtTermin(200)
+PhysDevExtTermin(201)
+PhysDevExtTermin(202)
+PhysDevExtTermin(203)
+PhysDevExtTermin(204)
+PhysDevExtTermin(205)
+PhysDevExtTermin(206)
+PhysDevExtTermin(207)
+PhysDevExtTermin(208)
+PhysDevExtTermin(209)
+PhysDevExtTermin(210)
+PhysDevExtTermin(211)
+PhysDevExtTermin(212)
+PhysDevExtTermin(213)
+PhysDevExtTermin(214)
+PhysDevExtTermin(215)
+PhysDevExtTermin(216)
+PhysDevExtTermin(217)
+PhysDevExtTermin(218)
+PhysDevExtTermin(219)
+PhysDevExtTermin(220)
+PhysDevExtTermin(221)
+PhysDevExtTermin(222)
+PhysDevExtTermin(223)
+PhysDevExtTermin(224)
+PhysDevExtTermin(225)
+PhysDevExtTermin(226)
+PhysDevExtTermin(227)
+PhysDevExtTermin(228)
+PhysDevExtTermin(229)
+PhysDevExtTermin(230)
+PhysDevExtTermin(231)
+PhysDevExtTermin(232)
+PhysDevExtTermin(233)
+PhysDevExtTermin(234)
+PhysDevExtTermin(235)
+PhysDevExtTermin(236)
+PhysDevExtTermin(237)
+PhysDevExtTermin(238)
+PhysDevExtTermin(239)
+PhysDevExtTermin(240)
+PhysDevExtTermin(241)
+PhysDevExtTermin(242)
+PhysDevExtTermin(243)
+PhysDevExtTermin(244)
+PhysDevExtTermin(245)
+PhysDevExtTermin(246)
+PhysDevExtTermin(247)
+PhysDevExtTermin(248)
+PhysDevExtTermin(249)
 
 
 void *loader_get_phys_dev_ext_tramp(uint32_t index) {