koffi 2.16.1 → 3.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/README.md +8 -8
  3. package/build/koffi/darwin_arm64/koffi.node +0 -0
  4. package/build/koffi/darwin_x64/koffi.node +0 -0
  5. package/build/koffi/freebsd_arm64/koffi.node +0 -0
  6. package/build/koffi/freebsd_ia32/koffi.node +0 -0
  7. package/build/koffi/freebsd_x64/koffi.node +0 -0
  8. package/build/koffi/linux_arm64/koffi.node +0 -0
  9. package/build/koffi/linux_ia32/koffi.node +0 -0
  10. package/build/koffi/linux_x64/koffi.node +0 -0
  11. package/build/koffi/musl_arm64/koffi.node +0 -0
  12. package/build/koffi/musl_x64/koffi.node +0 -0
  13. package/build/koffi/openbsd_ia32/koffi.node +0 -0
  14. package/build/koffi/openbsd_x64/koffi.node +0 -0
  15. package/build/koffi/win32_ia32/koffi.node +0 -0
  16. package/build/koffi/win32_x64/koffi.node +0 -0
  17. package/doc/benchmarks.md +33 -33
  18. package/doc/benchmarks.xlsx +0 -0
  19. package/doc/contribute.md +37 -25
  20. package/doc/index.md +8 -8
  21. package/doc/variables.md +1 -1
  22. package/index.d.ts +11 -9
  23. package/index.js +1 -634
  24. package/indirect.js +1 -533
  25. package/lib/native/base/base.cc +63 -85
  26. package/lib/native/base/base.hh +178 -151
  27. package/package.json +3 -4
  28. package/src/build.js +1178 -0
  29. package/src/koffi/CMakeLists.txt +97 -34
  30. package/src/koffi/index.js +359 -0
  31. package/src/koffi/indirect.js +216 -0
  32. package/src/koffi/src/{abi_arm32.cc → abi/arm32.cc} +279 -275
  33. package/src/koffi/src/{abi_arm32_asm.S → abi/arm32_asm.S} +2 -5
  34. package/src/koffi/src/abi/arm64.cc +1511 -0
  35. package/src/koffi/src/{abi_arm64_asm.S → abi/arm64_asm.S} +44 -23
  36. package/src/koffi/src/{abi_arm64_asm.asm → abi/arm64_asm.asm} +32 -25
  37. package/src/koffi/src/{abi_loong64_asm.S → abi/loong64_asm.S} +1 -5
  38. package/src/koffi/src/{abi_riscv64.cc → abi/riscv64.cc} +279 -273
  39. package/src/koffi/src/{abi_riscv64_asm.S → abi/riscv64_asm.S} +1 -4
  40. package/src/koffi/src/abi/x64sysv.cc +1456 -0
  41. package/src/koffi/src/{abi_x64_sysv_asm.S → abi/x64sysv_asm.S} +30 -33
  42. package/src/koffi/src/abi/x64win.cc +1121 -0
  43. package/src/koffi/src/{abi_x64_win_asm.S → abi/x64win_asm.S} +8 -12
  44. package/src/koffi/src/{abi_x64_win_asm.asm → abi/x64win_asm.asm} +11 -14
  45. package/src/koffi/src/abi/x86.cc +1233 -0
  46. package/src/koffi/src/{abi_x86_asm.S → abi/x86_asm.S} +49 -25
  47. package/src/koffi/src/{abi_x86_asm.asm → abi/x86_asm.asm} +11 -14
  48. package/src/koffi/src/call.cc +458 -598
  49. package/src/koffi/src/call.hh +61 -82
  50. package/src/koffi/src/ffi.cc +595 -309
  51. package/src/koffi/src/ffi.hh +103 -89
  52. package/src/koffi/src/parser.cc +0 -4
  53. package/src/koffi/src/primitives.inc +39 -0
  54. package/src/koffi/{tools/write_trampolines.js → src/trampolines.js} +1 -1
  55. package/src/koffi/src/util.cc +503 -446
  56. package/src/koffi/src/util.hh +269 -57
  57. package/src/koffi/src/uv.cc +2 -2
  58. package/src/koffi/src/uv.def +3 -0
  59. package/src/koffi/src/win32.hh +30 -1
  60. package/vendor/node-addon-api/napi-inl.h +4 -0
  61. package/vendor/node-addon-api/napi.h +1 -0
  62. package/build/koffi/linux_armhf/koffi.node +0 -0
  63. package/build/koffi/linux_loong64/koffi.node +0 -0
  64. package/build/koffi/linux_riscv64d/koffi.node +0 -0
  65. package/build/koffi/win32_arm64/koffi.exp +0 -0
  66. package/build/koffi/win32_arm64/koffi.lib +0 -0
  67. package/build/koffi/win32_arm64/koffi.node +0 -0
  68. package/doc/platforms.md +0 -36
  69. package/src/cnoke/LICENSE.txt +0 -22
  70. package/src/cnoke/README.md +0 -99
  71. package/src/cnoke/assets/FindCNoke.cmake +0 -127
  72. package/src/cnoke/assets/toolchains.json +0 -126
  73. package/src/cnoke/assets/win_delay_hook.c +0 -36
  74. package/src/cnoke/cnoke.js +0 -170
  75. package/src/cnoke/package.json +0 -24
  76. package/src/cnoke/src/builder.js +0 -511
  77. package/src/cnoke/src/index.js +0 -10
  78. package/src/cnoke/src/tools.js +0 -407
  79. package/src/koffi/src/abi_arm64.cc +0 -1295
  80. package/src/koffi/src/abi_x64_sysv.cc +0 -939
  81. package/src/koffi/src/abi_x64_win.cc +0 -715
  82. package/src/koffi/src/abi_x86.cc +0 -860
  83. package/src/koffi/src/init.js +0 -105
  84. /package/src/koffi/src/{abi_loong64.cc → abi/loong64.cc} +0 -0
@@ -22,9 +22,9 @@
22
22
  .global SYMBOL(ForwardCallDDDD)
23
23
 
24
24
  # The X variants are slightly slower, and are used when XMM arguments must be forwarded.
25
- .global SYMBOL(ForwardCallXGG)
26
- .global SYMBOL(ForwardCallXF)
27
- .global SYMBOL(ForwardCallXDDDD)
25
+ .global SYMBOL(ForwardCallGGX)
26
+ .global SYMBOL(ForwardCallFX)
27
+ .global SYMBOL(ForwardCallDDDDX)
28
28
 
29
29
  # Copy function pointer to r9, in order to save it through argument forwarding.
30
30
  # Also make a copy of the SP to CallData::old_sp because the callback system might need it.
@@ -40,7 +40,7 @@
40
40
  .cfi_def_cfa x29, 16
41
41
  str x29, [x2, 0]
42
42
  mov x9, x0
43
- add sp, x1, #136
43
+ add sp, x1, #152
44
44
  .endm
45
45
 
46
46
  # Call native function.
@@ -90,19 +90,19 @@ SYMBOL(ForwardCallDDDD):
90
90
  forward_gpr
91
91
  epilogue
92
92
 
93
- SYMBOL(ForwardCallXGG):
93
+ SYMBOL(ForwardCallGGX):
94
94
  prologue
95
95
  forward_vec
96
96
  forward_gpr
97
97
  epilogue
98
98
 
99
- SYMBOL(ForwardCallXF):
99
+ SYMBOL(ForwardCallFX):
100
100
  prologue
101
101
  forward_vec
102
102
  forward_gpr
103
103
  epilogue
104
104
 
105
- SYMBOL(ForwardCallXDDDD):
105
+ SYMBOL(ForwardCallDDDDX):
106
106
  prologue
107
107
  forward_vec
108
108
  forward_gpr
@@ -114,7 +114,12 @@ SYMBOL(ForwardCallXDDDD):
114
114
  .global SYMBOL(RelayCallback)
115
115
  .global SYMBOL(SwitchAndRelay)
116
116
  .global SYMBOL(RelayDirect)
117
+ #if defined(_WIN32)
118
+ .global SYMBOL(FindTrampolineStart)
119
+ .global SYMBOL(FindTrampolineEnd)
120
+ #else
117
121
  .global SYMBOL(TrampolineEnd)
122
+ #endif
118
123
 
119
124
  # First, make a copy of the argument registers.
120
125
  # Then call the C function RelayCallback with the following arguments:
@@ -137,21 +142,21 @@ RelayTrampoline:
137
142
  .cfi_offset 30, 8
138
143
  sub sp, sp, #192
139
144
  .cfi_def_cfa sp, 208
140
- stp x0, x1, [sp, 0]
141
- stp x2, x3, [sp, 16]
142
- stp x4, x5, [sp, 32]
143
- stp x6, x7, [sp, 48]
144
- str x8, [sp, 64]
145
- stp d0, d1, [sp, 72]
146
- stp d2, d3, [sp, 88]
147
- stp d4, d5, [sp, 104]
148
- stp d6, d7, [sp, 120]
145
+ stp x0, x1, [sp, 48]
146
+ stp x2, x3, [sp, 64]
147
+ stp x4, x5, [sp, 80]
148
+ stp x6, x7, [sp, 96]
149
+ str x8, [sp, 112]
150
+ stp d0, d1, [sp, 120]
151
+ stp d2, d3, [sp, 136]
152
+ stp d4, d5, [sp, 152]
153
+ stp d6, d7, [sp, 168]
149
154
  mov x0, x9
150
155
  mov x1, sp
151
156
  bl SYMBOL(RelayCallback)
152
- ldp x0, x1, [sp, 136]
153
- ldp d0, d1, [sp, 152]
154
- ldp d2, d3, [sp, 168]
157
+ ldp x0, x1, [sp, 0]
158
+ ldp d0, d1, [sp, 16]
159
+ ldp d2, d3, [sp, 32]
155
160
  add sp, sp, #192
156
161
  .cfi_def_cfa sp, 16
157
162
  ldp x29, x30, [sp], 16
@@ -174,10 +179,7 @@ SYMBOL(SwitchAndRelay):
174
179
  .cfi_offset 29, 16
175
180
  .cfi_offset 30, 8
176
181
  mov x29, sp
177
- ldr x9, [x4, 0]
178
- sub x9, sp, x9
179
- and x9, x9, #-16
180
- str x9, [x4, 8]
182
+ str x29, [x4, 8]
181
183
  mov sp, x3
182
184
  bl SYMBOL(RelayDirect)
183
185
  mov sp, x29
@@ -189,7 +191,26 @@ SYMBOL(SwitchAndRelay):
189
191
  ret
190
192
  .cfi_endproc
191
193
 
194
+ #if defined(_WIN32)
195
+
196
+ .balign 16
197
+ SYMBOL(FindTrampolineStart):
198
+ adr x0, 16
199
+ and x0, x0, #-16
200
+ ret
201
+ .balign 16
202
+
203
+ #include "gnu.inc"
204
+
205
+ SYMBOL(FindTrampolineEnd):
206
+ adr x0, 0
207
+ ret
208
+
209
+ #else
210
+
192
211
  #include "gnu.inc"
193
212
 
194
213
  SYMBOL(TrampolineEnd):
195
214
  ret
215
+
216
+ #endif
@@ -13,9 +13,9 @@
13
13
  EXPORT ForwardCallDDDD
14
14
 
15
15
  ; The X variants are slightly slower, and are used when XMM arguments must be forwarded.
16
- EXPORT ForwardCallXGG
17
- EXPORT ForwardCallXF
18
- EXPORT ForwardCallXDDDD
16
+ EXPORT ForwardCallGGX
17
+ EXPORT ForwardCallFX
18
+ EXPORT ForwardCallDDDDX
19
19
 
20
20
  ; Copy function pointer to r9, in order to save it through argument forwarding.
21
21
  ; Save RSP in r29 (non-volatile), and use carefully assembled stack provided by caller.
@@ -26,7 +26,7 @@
26
26
  mov x29, sp
27
27
  str x29, [x2, 0]
28
28
  mov x9, x0
29
- add sp, x1, #136
29
+ add sp, x1, #152
30
30
  MEND
31
31
 
32
32
  ; Call native function.
@@ -80,21 +80,21 @@ ForwardCallDDDD PROC
80
80
  epilogue
81
81
  ENDP
82
82
 
83
- ForwardCallXGG PROC
83
+ ForwardCallGGX PROC
84
84
  prologue
85
85
  forward_vec
86
86
  forward_gpr
87
87
  epilogue
88
88
  ENDP
89
89
 
90
- ForwardCallXF PROC
90
+ ForwardCallFX PROC
91
91
  prologue
92
92
  forward_vec
93
93
  forward_gpr
94
94
  epilogue
95
95
  ENDP
96
96
 
97
- ForwardCallXDDDD PROC
97
+ ForwardCallDDDDX PROC
98
98
  prologue
99
99
  forward_vec
100
100
  forward_gpr
@@ -109,7 +109,8 @@ ForwardCallXDDDD PROC
109
109
  EXPORT SwitchAndRelay
110
110
  EXPORT RelayDirect
111
111
  EXTERN RelayDirect
112
- EXPORT TrampolineEnd
112
+ EXPORT FindTrampolineStart
113
+ EXPORT FindTrampolineEnd
113
114
 
114
115
  ; First, make a copy of the argument registers.
115
116
  ; Then call the C function RelayCallback with the following arguments:
@@ -126,21 +127,21 @@ ForwardCallXDDDD PROC
126
127
  RelayTrampoline PROC
127
128
  stp x29, x30, [sp, -16]!
128
129
  sub sp, sp, #192
129
- stp x0, x1, [sp, 0]
130
- stp x2, x3, [sp, 16]
131
- stp x4, x5, [sp, 32]
132
- stp x6, x7, [sp, 48]
133
- str x8, [sp, 64]
134
- stp d0, d1, [sp, 72]
135
- stp d2, d3, [sp, 88]
136
- stp d4, d5, [sp, 104]
137
- stp d6, d7, [sp, 120]
130
+ stp x0, x1, [sp, 48]
131
+ stp x2, x3, [sp, 64]
132
+ stp x4, x5, [sp, 80]
133
+ stp x6, x7, [sp, 96]
134
+ str x8, [sp, 112]
135
+ stp d0, d1, [sp, 120]
136
+ stp d2, d3, [sp, 136]
137
+ stp d4, d5, [sp, 152]
138
+ stp d6, d7, [sp, 168]
138
139
  mov x0, x9
139
140
  mov x1, sp
140
141
  bl RelayCallback
141
- ldp x0, x1, [sp, 136]
142
- ldp d0, d1, [sp, 152]
143
- ldp d2, d3, [sp, 168]
142
+ ldp x0, x1, [sp, 0]
143
+ ldp d0, d1, [sp, 16]
144
+ ldp d2, d3, [sp, 32]
144
145
  add sp, sp, #192
145
146
  ldp x29, x30, [sp], 16
146
147
  ret
@@ -154,10 +155,7 @@ RelayTrampoline PROC
154
155
  SwitchAndRelay PROC
155
156
  stp x29, x30, [sp, -16]!
156
157
  mov x29, sp
157
- ldr x9, [x4, 0]
158
- sub x9, sp, x9
159
- and x9, x9, #-16
160
- str x9, [x4, 8]
158
+ str x29, [x4, 8]
161
159
  mov sp, x3
162
160
  bl RelayDirect
163
161
  mov sp, x29
@@ -165,9 +163,18 @@ SwitchAndRelay PROC
165
163
  ret
166
164
  ENDP
167
165
 
166
+ ALIGN 16
167
+ FindTrampolineStart PROC
168
+ adr x0, 16
169
+ and x0, x0, #-16
170
+ ret
171
+ ENDP
172
+ ALIGN 16
173
+
168
174
  INCLUDE armasm.inc
169
175
 
170
- TrampolineEnd PROC
176
+ FindTrampolineEnd PROC
177
+ adr x0, 0
171
178
  ret
172
179
  ENDP
173
180
 
@@ -184,11 +184,7 @@ SwitchAndRelay:
184
184
  st.d $ra, $sp, 0
185
185
  st.d $fp, $sp, 8
186
186
  move $fp, $sp
187
- ld.d $t0, $a4, 0
188
- sub.d $t0, $sp, $t0
189
- li.d $t1, -16
190
- and $t0, $t0, $t1
191
- st.d $t0, $a4, 8
187
+ st.d $sp, $a4, 8
192
188
  move $sp, $a3
193
189
  bl RelayDirect
194
190
  move $sp, $fp