koffi 2.15.1 → 2.16.0-beta.1

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 (50) hide show
  1. package/build/koffi/darwin_arm64/koffi.node +0 -0
  2. package/build/koffi/darwin_x64/koffi.node +0 -0
  3. package/build/koffi/freebsd_arm64/koffi.node +0 -0
  4. package/build/koffi/freebsd_ia32/koffi.node +0 -0
  5. package/build/koffi/freebsd_x64/koffi.node +0 -0
  6. package/build/koffi/linux_arm64/koffi.node +0 -0
  7. package/build/koffi/linux_armhf/koffi.node +0 -0
  8. package/build/koffi/linux_ia32/koffi.node +0 -0
  9. package/build/koffi/linux_loong64/koffi.node +0 -0
  10. package/build/koffi/linux_riscv64d/koffi.node +0 -0
  11. package/build/koffi/linux_x64/koffi.node +0 -0
  12. package/build/koffi/musl_arm64/koffi.node +0 -0
  13. package/build/koffi/musl_x64/koffi.node +0 -0
  14. package/build/koffi/openbsd_ia32/koffi.node +0 -0
  15. package/build/koffi/openbsd_x64/koffi.node +0 -0
  16. package/build/koffi/win32_arm64/koffi.node +0 -0
  17. package/build/koffi/win32_ia32/koffi.node +0 -0
  18. package/build/koffi/win32_x64/koffi.node +0 -0
  19. package/index.d.ts +11 -9
  20. package/index.js +8 -8
  21. package/indirect.js +8 -8
  22. package/package.json +1 -1
  23. package/src/koffi/src/abi_arm32.cc +222 -219
  24. package/src/koffi/src/abi_arm32_asm.S +1 -29
  25. package/src/koffi/src/abi_arm64.cc +257 -235
  26. package/src/koffi/src/abi_arm64_asm.S +1 -32
  27. package/src/koffi/src/abi_arm64_asm.asm +1 -23
  28. package/src/koffi/src/abi_loong64_asm.S +1 -25
  29. package/src/koffi/src/abi_riscv64.cc +220 -217
  30. package/src/koffi/src/abi_riscv64_asm.S +1 -25
  31. package/src/koffi/src/abi_x64_sysv.cc +196 -192
  32. package/src/koffi/src/abi_x64_sysv_asm.S +1 -31
  33. package/src/koffi/src/abi_x64_win.cc +188 -172
  34. package/src/koffi/src/abi_x64_win_asm.S +1 -19
  35. package/src/koffi/src/abi_x64_win_asm.asm +1 -21
  36. package/src/koffi/src/abi_x86.cc +224 -189
  37. package/src/koffi/src/abi_x86_asm.S +6 -25
  38. package/src/koffi/src/abi_x86_asm.asm +9 -22
  39. package/src/koffi/src/call.cc +246 -428
  40. package/src/koffi/src/call.hh +9 -8
  41. package/src/koffi/src/ffi.cc +140 -87
  42. package/src/koffi/src/ffi.hh +12 -58
  43. package/src/koffi/src/primitives.inc +39 -0
  44. package/src/koffi/src/trampolines/armasm.inc +0 -32770
  45. package/src/koffi/src/trampolines/gnu.inc +0 -24578
  46. package/src/koffi/src/trampolines/masm32.inc +0 -32770
  47. package/src/koffi/src/trampolines/masm64.inc +0 -32770
  48. package/src/koffi/src/trampolines/prototypes.inc +16385 -16385
  49. package/src/koffi/src/util.cc +149 -107
  50. package/src/koffi/src/util.hh +76 -40
@@ -89,7 +89,10 @@ public CallSwitchStack
89
89
  ; Depending on ABI, call convention and return value size, we need to issue ret <something>. Since ret
90
90
  ; only takes an immediate value, and I prefer not to branch, the return address is moved instead according
91
91
  ; to BackRegisters::ret_pop before ret is issued.
92
+ ; We need to branch at the end to avoid x87 stack imbalance.
92
93
  trampoline macro ID
94
+ local l0, l1, l2
95
+
93
96
  endbr32
94
97
  sub esp, 44
95
98
  mov dword ptr [esp+0], ID
@@ -102,31 +105,15 @@ trampoline macro ID
102
105
  mov edx, dword ptr [esp+44]
103
106
  mov ecx, dword ptr [esp+36]
104
107
  mov dword ptr [esp+ecx+44], edx
108
+ cmp dword ptr [esp+32], 1
109
+ je l1
110
+ cmp dword ptr [esp+32], 2
111
+ je l2
112
+ l0:
105
113
  mov eax, dword ptr [esp+16]
106
114
  mov edx, dword ptr [esp+20]
107
- lea esp, [esp+ecx+44]
115
+ lea esp, dword ptr [esp+ecx+44]
108
116
  ret
109
- endm
110
-
111
- ; This version also loads the x87 stack with the result, if need be.
112
- ; We have to branch to avoid x87 stack imbalance.
113
- trampoline_vec macro ID
114
- local l1, l2, l3
115
-
116
- endbr32
117
- sub esp, 44
118
- mov dword ptr [esp+0], ID
119
- mov dword ptr [esp+4], esp
120
- lea eax, dword ptr [esp+48]
121
- mov dword ptr [esp+8], eax
122
- lea eax, dword ptr [esp+16]
123
- mov dword ptr [esp+12], eax
124
- call RelayCallback
125
- mov edx, dword ptr [esp+44]
126
- mov ecx, dword ptr [esp+36]
127
- mov dword ptr [esp+ecx+44], edx
128
- cmp byte ptr [esp+32], 0
129
- jne l2
130
117
  l1:
131
118
  fld dword ptr [esp+24]
132
119
  lea esp, dword ptr [esp+ecx+44]