rbdc 0.8.7 → 0.9.0

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 (215) hide show
  1. checksums.yaml +7 -0
  2. data/{bindings → dyncall-bindings}/ruby/rbdc/extconf.rb +1 -1
  3. data/{bindings → dyncall-bindings}/ruby/rbdc/rbdc.c +3 -1
  4. data/dyncall/AUTHORS +2 -0
  5. data/dyncall/BUGS +1 -0
  6. data/dyncall/CMakeLists.txt +10 -2
  7. data/dyncall/ChangeLog +46 -11
  8. data/dyncall/LICENSE +4 -1
  9. data/dyncall/Makefile.embedded +7 -3
  10. data/dyncall/README +23 -14
  11. data/dyncall/ToDo +27 -28
  12. data/dyncall/autovar/autovar_ABI.h +3 -2
  13. data/dyncall/autovar/autovar_ARCH.h +13 -10
  14. data/dyncall/autovar/autovar_CC.h +3 -2
  15. data/dyncall/autovar/autovar_OS.h +3 -2
  16. data/dyncall/autovar/autovar_OSFAMILY.h +3 -2
  17. data/dyncall/buildsys/scripts/batch-build-linux.sh +6 -2
  18. data/dyncall/buildsys/scripts/batch-build-minix.sh +2 -0
  19. data/dyncall/buildsys/scripts/batch-build-psp.sh +4 -1
  20. data/dyncall/buildsys/scripts/elf-to-psp-eboot.sh +19 -0
  21. data/dyncall/buildsys/scripts/setenv-cross-ios.sh +0 -0
  22. data/dyncall/buildsys/scripts/setenv-sdk-ios.sh +0 -0
  23. data/dyncall/configure +83 -30
  24. data/dyncall/dyncall/dyncall.3 +16 -4
  25. data/dyncall/dyncall/dyncall.h +9 -1
  26. data/dyncall/dyncall/dyncall_alloc.h +2 -1
  27. data/dyncall/dyncall/dyncall_api.c +2 -1
  28. data/dyncall/dyncall/dyncall_call.S +9 -2
  29. data/dyncall/dyncall/dyncall_call_arm32_arm.S +2 -1
  30. data/dyncall/dyncall/dyncall_call_arm32_arm.h +8 -2
  31. data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.S +11 -19
  32. data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.h +15 -2
  33. data/dyncall/dyncall/dyncall_call_arm32_thumb.h +8 -6
  34. data/dyncall/dyncall/dyncall_call_arm32_thumb_armhf.S +10 -18
  35. data/dyncall/dyncall/dyncall_call_arm32_thumb_gas.s +0 -16
  36. data/dyncall/dyncall/dyncall_call_arm64.S +226 -0
  37. data/dyncall/dyncall/dyncall_call_arm64.h +45 -0
  38. data/dyncall/dyncall/dyncall_call_mips.h +2 -1
  39. data/dyncall/dyncall/dyncall_call_mips_eabi.h +2 -1
  40. data/dyncall/dyncall/dyncall_call_mips_gas.S +2 -1
  41. data/dyncall/dyncall/dyncall_call_mips_n32.h +2 -1
  42. data/dyncall/dyncall/dyncall_call_mips_n64.h +2 -1
  43. data/dyncall/dyncall/dyncall_call_mips_o32.h +2 -1
  44. data/dyncall/dyncall/dyncall_call_ppc32.S +27 -2
  45. data/dyncall/dyncall/dyncall_call_ppc32.h +2 -2
  46. data/dyncall/dyncall/dyncall_call_ppc64.S +210 -0
  47. data/dyncall/dyncall/dyncall_call_ppc64.h +55 -0
  48. data/dyncall/dyncall/dyncall_call_sparc.S +2 -1
  49. data/dyncall/dyncall/dyncall_call_sparc.h +2 -1
  50. data/dyncall/dyncall/dyncall_call_sparc64.S +2 -1
  51. data/dyncall/dyncall/dyncall_call_sparc64.h +2 -1
  52. data/dyncall/dyncall/dyncall_call_sparc_v9.S +25 -23
  53. data/dyncall/dyncall/dyncall_call_sparc_v9.h +2 -1
  54. data/dyncall/dyncall/dyncall_call_x64-att.S +2 -1
  55. data/dyncall/dyncall/dyncall_call_x64.S +2 -1
  56. data/dyncall/dyncall/dyncall_call_x64.h +2 -1
  57. data/dyncall/dyncall/dyncall_call_x86.S +2 -1
  58. data/dyncall/dyncall/dyncall_call_x86.h +2 -1
  59. data/dyncall/dyncall/dyncall_callf.c +56 -66
  60. data/dyncall/dyncall/dyncall_callf.h +5 -1
  61. data/dyncall/dyncall/dyncall_callvm.c +11 -2
  62. data/dyncall/dyncall/dyncall_callvm.h +2 -1
  63. data/dyncall/dyncall/dyncall_callvm_arm32_arm.c +2 -1
  64. data/dyncall/dyncall/dyncall_callvm_arm32_arm.h +2 -1
  65. data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.c +60 -30
  66. data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.h +3 -2
  67. data/dyncall/dyncall/dyncall_callvm_arm32_thumb.c +2 -24
  68. data/dyncall/dyncall/dyncall_callvm_arm32_thumb.h +2 -1
  69. data/dyncall/dyncall/dyncall_callvm_arm64.c +165 -0
  70. data/dyncall/dyncall/dyncall_callvm_arm64.h +51 -0
  71. data/dyncall/dyncall/dyncall_callvm_arm64_apple.c +272 -0
  72. data/dyncall/dyncall/dyncall_callvm_base.c +2 -1
  73. data/dyncall/dyncall/dyncall_callvm_mips.c +2 -1
  74. data/dyncall/dyncall/dyncall_callvm_mips.h +2 -1
  75. data/dyncall/dyncall/dyncall_callvm_mips_eabi.c +2 -1
  76. data/dyncall/dyncall/dyncall_callvm_mips_eabi.h +2 -1
  77. data/dyncall/dyncall/dyncall_callvm_mips_n32.c +2 -1
  78. data/dyncall/dyncall/dyncall_callvm_mips_n64.c +2 -1
  79. data/dyncall/dyncall/dyncall_callvm_mips_n64.h +2 -1
  80. data/dyncall/dyncall/dyncall_callvm_mips_o32.c +2 -1
  81. data/dyncall/dyncall/dyncall_callvm_mips_o32.h +2 -1
  82. data/dyncall/dyncall/dyncall_callvm_ppc32.c +45 -2
  83. data/dyncall/dyncall/dyncall_callvm_ppc32.h +2 -1
  84. data/dyncall/dyncall/dyncall_callvm_ppc64.c +351 -0
  85. data/dyncall/dyncall/dyncall_callvm_ppc64.h +60 -0
  86. data/dyncall/dyncall/dyncall_callvm_sparc.c +2 -1
  87. data/dyncall/dyncall/dyncall_callvm_sparc.h +2 -1
  88. data/dyncall/dyncall/dyncall_callvm_sparc64.c +2 -2
  89. data/dyncall/dyncall/dyncall_callvm_sparc64.h +2 -1
  90. data/dyncall/dyncall/dyncall_callvm_sparc_v9.c +3 -3
  91. data/dyncall/dyncall/dyncall_callvm_sparc_v9.h +2 -1
  92. data/dyncall/dyncall/dyncall_callvm_x64.c +2 -1
  93. data/dyncall/dyncall/dyncall_callvm_x64.h +2 -1
  94. data/dyncall/dyncall/dyncall_callvm_x86.c +2 -1
  95. data/dyncall/dyncall/dyncall_callvm_x86.h +2 -1
  96. data/dyncall/dyncall/dyncall_config.h +2 -1
  97. data/dyncall/dyncall/dyncall_macros.h +46 -9
  98. data/dyncall/dyncall/dyncall_signature.h +2 -1
  99. data/dyncall/dyncall/dyncall_struct.c +2 -1
  100. data/dyncall/dyncall/dyncall_struct.h +2 -1
  101. data/dyncall/dyncall/dyncall_types.h +2 -1
  102. data/dyncall/dyncall/dyncall_utils.h +2 -1
  103. data/dyncall/dyncall/dyncall_value.h +19 -1
  104. data/dyncall/dyncall/dyncall_vector.c +2 -1
  105. data/dyncall/dyncall/dyncall_vector.h +3 -1
  106. data/dyncall/dyncall/gen-masm.sh +0 -0
  107. data/dyncall/dyncallback/Makefile.generic +1 -1
  108. data/dyncall/dyncallback/dyncall_alloc_wx.c +2 -1
  109. data/dyncall/dyncallback/dyncall_alloc_wx.h +2 -1
  110. data/dyncall/dyncallback/dyncall_alloc_wx_malloc.c +2 -1
  111. data/dyncall/dyncallback/dyncall_alloc_wx_mmap.c +2 -1
  112. data/dyncall/dyncallback/dyncall_alloc_wx_win32.c +2 -1
  113. data/dyncall/dyncallback/dyncall_args.c +22 -10
  114. data/dyncall/dyncallback/dyncall_args.h +2 -1
  115. data/dyncall/dyncallback/dyncall_args_arm32_arm.c +35 -4
  116. data/dyncall/dyncallback/dyncall_args_arm32_arm.h +7 -1
  117. data/dyncall/dyncallback/dyncall_args_arm32_thumb.c +2 -1
  118. data/dyncall/dyncallback/dyncall_args_arm32_thumb.h +2 -1
  119. data/dyncall/dyncallback/dyncall_args_arm64.c +77 -0
  120. data/dyncall/dyncallback/dyncall_args_arm64_apple.c +160 -0
  121. data/dyncall/dyncallback/dyncall_args_mips.c +3 -2
  122. data/dyncall/dyncallback/dyncall_args_mips.h +3 -2
  123. data/dyncall/dyncallback/dyncall_args_ppc32.c +2 -1
  124. data/dyncall/dyncallback/dyncall_args_ppc32.h +9 -7
  125. data/dyncall/dyncallback/dyncall_args_ppc32_sysv.c +95 -0
  126. data/dyncall/dyncallback/dyncall_args_ppc64.c +71 -0
  127. data/dyncall/dyncallback/dyncall_args_ppc64.h +40 -0
  128. data/dyncall/dyncallback/dyncall_args_sparc32.c +2 -1
  129. data/dyncall/dyncallback/dyncall_args_sparc32.h +2 -1
  130. data/dyncall/dyncallback/dyncall_args_sparc64.c +2 -1
  131. data/dyncall/dyncallback/dyncall_args_sparc64.h +2 -1
  132. data/dyncall/dyncallback/dyncall_args_x64.c +2 -1
  133. data/dyncall/dyncallback/dyncall_args_x64.h +2 -1
  134. data/dyncall/dyncallback/dyncall_args_x86.c +2 -1
  135. data/dyncall/dyncallback/dyncall_args_x86.h +2 -1
  136. data/dyncall/dyncallback/dyncall_callback.c +7 -2
  137. data/dyncall/dyncallback/dyncall_callback.h +3 -1
  138. data/dyncall/dyncallback/dyncall_callback_arch.S +14 -6
  139. data/dyncall/dyncallback/dyncall_callback_arm32_arm.c +2 -1
  140. data/dyncall/dyncallback/dyncall_callback_arm32_arm.h +2 -1
  141. data/dyncall/dyncallback/dyncall_callback_arm32_arm_apple.s +1 -1
  142. data/dyncall/dyncallback/{dyncall_callback_arm32_arm_gas.s → dyncall_callback_arm32_arm_gas.S} +17 -7
  143. data/dyncall/dyncallback/dyncall_callback_arm32_thumb.c +2 -1
  144. data/dyncall/dyncallback/dyncall_callback_arm32_thumb.h +2 -1
  145. data/dyncall/dyncallback/{dyncall_callback_arm32_thumb_apple.s → dyncall_callback_arm32_thumb_apple.S} +2 -2
  146. data/dyncall/dyncallback/{dyncall_callback_arm32_thumb_gas.s → dyncall_callback_arm32_thumb_gas.S} +2 -2
  147. data/dyncall/dyncallback/dyncall_callback_arm64.S +111 -0
  148. data/dyncall/dyncallback/dyncall_callback_arm64.c +71 -0
  149. data/dyncall/dyncallback/dyncall_callback_mips.c +3 -2
  150. data/dyncall/dyncallback/dyncall_callback_mips.h +3 -2
  151. data/dyncall/dyncallback/dyncall_callback_ppc32.S +115 -4
  152. data/dyncall/dyncallback/dyncall_callback_ppc32.c +3 -2
  153. data/dyncall/dyncallback/dyncall_callback_ppc32.h +6 -6
  154. data/dyncall/dyncallback/dyncall_callback_ppc32_apple.s +6 -5
  155. data/dyncall/dyncallback/dyncall_callback_ppc64.S +170 -0
  156. data/dyncall/dyncallback/dyncall_callback_ppc64.c +60 -0
  157. data/dyncall/dyncallback/dyncall_callback_ppc64.h +56 -0
  158. data/dyncall/dyncallback/dyncall_callback_sparc32.c +2 -1
  159. data/dyncall/dyncallback/dyncall_callback_sparc32.h +2 -1
  160. data/dyncall/dyncallback/dyncall_callback_sparc32.s +1 -1
  161. data/dyncall/dyncallback/dyncall_callback_sparc64.c +2 -1
  162. data/dyncall/dyncallback/dyncall_callback_sparc64.s +1 -1
  163. data/dyncall/dyncallback/dyncall_callback_x64.S +5 -12
  164. data/dyncall/dyncallback/dyncall_callback_x64.c +2 -1
  165. data/dyncall/dyncallback/dyncall_callback_x64.h +2 -1
  166. data/dyncall/dyncallback/dyncall_callback_x64_masm.asm +0 -7
  167. data/dyncall/dyncallback/dyncall_callback_x86.S +5 -12
  168. data/dyncall/dyncallback/dyncall_callback_x86.c +2 -1
  169. data/dyncall/dyncallback/dyncall_callback_x86.h +2 -1
  170. data/dyncall/dyncallback/dyncall_callback_x86_masm.asm +2 -11
  171. data/dyncall/dyncallback/dyncall_thunk.c +11 -3
  172. data/dyncall/dyncallback/dyncall_thunk.h +8 -2
  173. data/dyncall/dyncallback/dyncall_thunk_arm32_arm.c +7 -7
  174. data/dyncall/dyncallback/dyncall_thunk_arm32_arm.h +2 -1
  175. data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.c +2 -1
  176. data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.h +2 -1
  177. data/dyncall/dyncallback/dyncall_thunk_arm64.c +64 -0
  178. data/dyncall/dyncallback/dyncall_thunk_arm64.h +42 -0
  179. data/dyncall/dyncallback/dyncall_thunk_mips.c +49 -17
  180. data/dyncall/dyncallback/dyncall_thunk_mips.h +3 -2
  181. data/dyncall/dyncallback/dyncall_thunk_ppc32.c +3 -2
  182. data/dyncall/dyncallback/dyncall_thunk_ppc32.h +7 -7
  183. data/dyncall/dyncallback/dyncall_thunk_ppc32_sysv.c +50 -0
  184. data/dyncall/dyncallback/dyncall_thunk_ppc64.c +87 -0
  185. data/dyncall/dyncallback/dyncall_thunk_ppc64.h +55 -0
  186. data/dyncall/dyncallback/dyncall_thunk_sparc32.c +2 -1
  187. data/dyncall/dyncallback/dyncall_thunk_sparc32.h +2 -1
  188. data/dyncall/dyncallback/dyncall_thunk_sparc64.c +2 -1
  189. data/dyncall/dyncallback/dyncall_thunk_sparc64.h +2 -1
  190. data/dyncall/dyncallback/dyncall_thunk_x64.c +2 -1
  191. data/dyncall/dyncallback/dyncall_thunk_x64.h +2 -1
  192. data/dyncall/dyncallback/dyncall_thunk_x86.c +2 -1
  193. data/dyncall/dyncallback/dyncall_thunk_x86.h +2 -1
  194. data/dyncall/dyncallback/dyncallback.3 +3 -3
  195. data/dyncall/dyncallback/gen-masm.sh +0 -0
  196. data/dyncall/dynload/dynload.c +2 -1
  197. data/dyncall/dynload/dynload.h +2 -1
  198. data/dyncall/dynload/dynload_alloc.h +2 -1
  199. data/dyncall/dynload/dynload_darwin.c +2 -1
  200. data/dyncall/dynload/dynload_syms.c +2 -1
  201. data/dyncall/dynload/dynload_syms_elf.c +2 -1
  202. data/dyncall/dynload/dynload_syms_mach-o.c +3 -2
  203. data/dyncall/dynload/dynload_syms_pe.c +2 -1
  204. data/dyncall/dynload/dynload_unix.c +2 -1
  205. data/dyncall/dynload/dynload_windows.c +2 -1
  206. data/dyncall/portasm/gen-masm.sh +0 -0
  207. data/dyncall/portasm/portasm-arm.S +3 -2
  208. data/dyncall/portasm/portasm-ppc.S +2 -1
  209. data/dyncall/portasm/portasm-ppc64.S +119 -0
  210. data/dyncall/portasm/portasm-x64-att.S +2 -1
  211. data/dyncall/portasm/portasm-x86.S +2 -1
  212. metadata +39 -18
  213. data/dyncall/dyncallback/dyncall_callback_x64_apple.s +0 -122
  214. data/dyncall/dyncallback/dyncall_callback_x64_gas.s +0 -119
  215. data/dyncall/dyncallback/dyncall_callback_x64_gas_w64.s +0 -102
@@ -0,0 +1,56 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncallback
5
+ File: dyncallback/dyncall_callback_ppc64.h
6
+ Description: Callback - Header for ppc64
7
+ License:
8
+
9
+ Copyright (c) 2014-2015 Masanori Mitsugi <mitsugi@linux.vnet.ibm.com>
10
+
11
+ Permission to use, copy, modify, and distribute this software for any
12
+ purpose with or without fee is hereby granted, provided that the above
13
+ copyright notice and this permission notice appear in all copies.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
16
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
18
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22
+
23
+ */
24
+
25
+ #ifndef DYNCALL_CALLBACK_PPC64_H
26
+ #define DYNCALL_CALLBACK_PPC64_H
27
+
28
+ #include "dyncall_callback.h"
29
+
30
+ #include "dyncall_thunk.h"
31
+ #include "dyncall_args_ppc64.h"
32
+
33
+ /*
34
+ ELF v2
35
+ thunk : offset 0, size 48
36
+ handler : offset 48, size 8
37
+ stack_cleanup : offset 56, size 8
38
+ userdata : offset 64, size 8
39
+
40
+ ELF v1
41
+ thunk : offset 0, size 64
42
+ handler : offset 64, size 8
43
+ stack_cleanup : offset 72, size 8
44
+ userdata : offset 80, size 8
45
+ */
46
+
47
+ struct DCCallback
48
+ {
49
+ DCThunk thunk;
50
+ DCCallbackHandler* handler;
51
+ size_t stack_cleanup;
52
+ void* userdata;
53
+ };
54
+
55
+ #endif /* DYNCALL_CALLBACK_PPC64_H */
56
+
@@ -6,7 +6,7 @@
6
6
  Description: Callback - Implementation for sparc32 (TODO: not implemented yet)
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -23,6 +23,7 @@
23
23
 
24
24
  */
25
25
 
26
+
26
27
  #include "dyncall_callback.h"
27
28
  #include "dyncall_callback_sparc32.h"
28
29
 
@@ -6,7 +6,7 @@
6
6
  Description: Callback - Header for sparc32
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -23,6 +23,7 @@
23
23
 
24
24
  */
25
25
 
26
+
26
27
  #ifndef DYNCALL_CALLBACK_SPARC32_H
27
28
  #define DYNCALL_CALLBACK_SPARC32_H
28
29
 
@@ -23,7 +23,7 @@
23
23
 
24
24
  */
25
25
 
26
- .globl dcCallbackThunkEntry
26
+ .globl dcCallbackThunkEntry
27
27
  dcCallbackThunkEntry:
28
28
  jmpl %i7 + 8, %g0 /* Return from proc. */
29
29
  nop
@@ -6,7 +6,7 @@
6
6
  Description: Callback - Implementation for sparc64 (TODO: not implemented yet)
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -23,6 +23,7 @@
23
23
 
24
24
  */
25
25
 
26
+
26
27
  #include "dyncall_callback.h"
27
28
  #include "dyncall_callback_sparc32.h"
28
29
 
@@ -23,7 +23,7 @@
23
23
 
24
24
  */
25
25
 
26
- .globl dcCallbackThunkEntry
26
+ .globl dcCallbackThunkEntry
27
27
  dcCallbackThunkEntry:
28
28
  jmpl %i7 + 8, %g0 /* Return from proc. */
29
29
  nop
@@ -6,7 +6,7 @@
6
6
  Description: Callback Thunk entry for x64 (portasm version)
7
7
  License:
8
8
 
9
- Copyright (c) 2011 Daniel Adler <dadler@uni-goettingen.de>
9
+ Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
10
10
 
11
11
  Permission to use, copy, modify, and distribute this software for any
12
12
  purpose with or without fee is hereby granted, provided that the above
@@ -23,6 +23,7 @@
23
23
  */
24
24
 
25
25
 
26
+
26
27
  #include "../portasm/portasm-x64-att.S"
27
28
 
28
29
  /* structure sizes */
@@ -107,24 +108,15 @@ BEGIN_PROC(dcCallback_x64_sysv)
107
108
  PUSH(LIT(0)) /* align to 16 bytes */
108
109
  CALL_REG(QWORD(RAX,CTX_handler))
109
110
 
110
- /* pass return type via registers */
111
- /* distinguish two basic classes 'integer' and 'float' */
111
+ /* pass return type via registers, handle ints and floats */
112
112
 
113
- MOVB(AL,DL)
114
113
  MOV(QWORD(RBP,FRAME_DCValue_sysv),RAX)
115
-
116
- CMP(LIT(ASCII_f),DL)
117
- JE(LOCAL(return_f64))
118
- CMP(LIT(ASCII_d),DL)
119
- JNE(LOCAL(return_i64))
120
-
121
- LOCAL(return_f64):
122
114
  MOVD(RAX,XMM0)
123
115
 
124
- LOCAL(return_i64):
125
116
  MOV(RBP,RSP)
126
117
  POP(RBP)
127
118
  RET()
119
+
128
120
  END_PROC(dcCallback_x64_sysv)
129
121
 
130
122
  GLOBAL(dcCallback_x64_win64)
@@ -173,6 +165,7 @@ BEGIN_PROC(dcCallback_x64_win64)
173
165
  SUB(LIT(4*8),RSP) /* make room for spill area and call */
174
166
  CALL_REG(QWORD(RAX,CTX_handler))
175
167
 
168
+ /* pass return type via registers, handle ints and floats */
176
169
 
177
170
  MOV(QWORD(RBP,FRAME_DCValue_win64),RAX)
178
171
  MOVD(RAX,XMM0)
@@ -6,7 +6,7 @@
6
6
  Description: Callback - Implementation for x64
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -24,6 +24,7 @@
24
24
  */
25
25
 
26
26
 
27
+
27
28
  #include "dyncall_callback_x64.h"
28
29
  #include "dyncall_args_x64.h"
29
30
  #include "dyncall_alloc_wx.h"
@@ -6,7 +6,7 @@
6
6
  Description: Callback - Header for x64
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -24,6 +24,7 @@
24
24
  */
25
25
 
26
26
 
27
+
27
28
  #ifndef DYNCALL_CALLBACK_X64_H_
28
29
  #define DYNCALL_CALLBACK_X64_H_
29
30
 
@@ -45,15 +45,8 @@ OPTION PROLOGUE:NONE, EPILOGUE:NONE
45
45
  mov RDX,RSP
46
46
  push 0
47
47
  call qword ptr [RAX+CTX_handler]
48
- mov DL,AL
49
48
  mov RAX,qword ptr [RBP+FRAME_DCValue_sysv]
50
- cmp DL,102
51
- je return_f64
52
- cmp DL,100
53
- jne return_i64
54
- return_f64:
55
49
  movd XMM0,RAX
56
- return_i64:
57
50
  mov RSP,RBP
58
51
  pop RBP
59
52
  ret
@@ -6,7 +6,7 @@
6
6
  Description: Callback Thunk entry for x86
7
7
  License:
8
8
 
9
- Copyright (c) 2011 Daniel Adler <dadler@uni-goettingen.de>
9
+ Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
10
10
 
11
11
  Permission to use, copy, modify, and distribute this software for any
12
12
  purpose with or without fee is hereby granted, provided that the above
@@ -22,6 +22,7 @@
22
22
 
23
23
  */
24
24
 
25
+
25
26
  #include "../portasm/portasm-x86.S"
26
27
  BEGIN_ASM
27
28
  DCThunk_size = 16
@@ -84,21 +85,13 @@ BEGIN_PROC(dcCallbackThunkEntry)
84
85
  LEA(DWORD(EBP,frame_DCValue), EDX)
85
86
  MOVL(DWORD(EBP,0), EBP) /* EBP = parent frame */
86
87
  /* handle return value */
87
- CMP(LIT(ASCII_v),AL)
88
- JE(LOCAL(return_void))
89
- CMP(LIT(ASCII_d),AL)
90
- JE(LOCAL(return_f64))
88
+
91
89
  CMP(LIT(ASCII_f),AL)
92
90
  JE(LOCAL(return_f32))
93
- CMP(LIT(ASCII_l),AL)
94
- JE(LOCAL(return_i64))
95
- CMP(LIT(ASCII_L),AL)
96
- JE(LOCAL(return_i64))
91
+ CMP(LIT(ASCII_d),AL)
92
+ JE(LOCAL(return_f64))
97
93
 
98
94
  /* All int cases <= 32 bits (+ pointer & string cases) fall in the 32 bits int case*/
99
- LOCAL(return_i32):
100
- MOVL(DWORD(EDX,0),EAX)
101
- RET()
102
95
  LOCAL(return_i64):
103
96
  MOVL(DWORD(EDX,0),EAX)
104
97
  MOVL(DWORD(EDX,4),EDX)
@@ -6,7 +6,7 @@
6
6
  Description: Callback - Implementation for x86
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -24,6 +24,7 @@
24
24
  */
25
25
 
26
26
 
27
+
27
28
  #include "dyncall_callback_x86.h"
28
29
  #include "dyncall_args_x86.h"
29
30
 
@@ -6,7 +6,7 @@
6
6
  Description: Callback - Header for x86
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -24,6 +24,7 @@
24
24
  */
25
25
 
26
26
 
27
+
27
28
  #ifndef DYNCALL_CALLBACK_X86_H_
28
29
  #define DYNCALL_CALLBACK_X86_H_
29
30
 
@@ -46,19 +46,10 @@ OPTION PROLOGUE:NONE, EPILOGUE:NONE
46
46
  push ECX
47
47
  lea EDX,dword ptr [EBP+frame_DCValue]
48
48
  mov EBP,dword ptr [EBP+0]
49
- cmp AL,118
50
- je return_void
51
- cmp AL,100
52
- je return_f64
53
49
  cmp AL,102
54
50
  je return_f32
55
- cmp AL,108
56
- je return_i64
57
- cmp AL,76
58
- je return_i64
59
- return_i32:
60
- mov EAX,dword ptr [EDX+0]
61
- ret
51
+ cmp AL,100
52
+ je return_f64
62
53
  return_i64:
63
54
  mov EAX,dword ptr [EDX+0]
64
55
  mov EDX,dword ptr [EDX+4]
@@ -6,7 +6,7 @@
6
6
  Description: Thunk - Implementation Back-end selection
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -31,8 +31,14 @@
31
31
  # include "dyncall_thunk_x86.c"
32
32
  #elif defined(DC__Arch_AMD64)
33
33
  # include "dyncall_thunk_x64.c"
34
- #elif defined(DC__Arch_PowerPC)
35
- # include "dyncall_thunk_ppc32.c"
34
+ #elif defined(DC__Arch_PPC32)
35
+ # if defined(DC__OS_Darwin)
36
+ # include "dyncall_thunk_ppc32.c"
37
+ # else
38
+ # include "dyncall_thunk_ppc32_sysv.c"
39
+ # endif
40
+ #elif defined(DC__Arch_PPC64)
41
+ # include "dyncall_thunk_ppc64.c"
36
42
  #elif defined(DC__Arch_ARM_ARM)
37
43
  #include "dyncall_thunk_arm32_arm.c"
38
44
  #elif defined(DC__Arch_ARM_THUMB)
@@ -43,5 +49,7 @@
43
49
  #include "dyncall_thunk_sparc32.c"
44
50
  #elif defined(DC__Arch_Sparcv9)
45
51
  #include "dyncall_thunk_sparc64.c"
52
+ #elif defined(DC__Arch_ARM64)
53
+ #include "dyncall_thunk_arm64.c"
46
54
  #endif
47
55
 
@@ -6,7 +6,7 @@
6
6
  Description: Thunk - Interface
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -45,6 +45,8 @@
45
45
  ** x86: eax
46
46
  ** x64: rax
47
47
  ** ppc: r2
48
+ ** arm: r12
49
+ ** arm64: x9
48
50
  **
49
51
  **/
50
52
 
@@ -62,8 +64,10 @@ void dcbInitThunk(DCThunk* p, void (*entry)());
62
64
  #include "dyncall_thunk_x86.h"
63
65
  #elif defined (DC__Arch_AMD64)
64
66
  #include "dyncall_thunk_x64.h"
65
- #elif defined (DC__Arch_PowerPC)
67
+ #elif defined (DC__Arch_PPC32)
66
68
  #include "dyncall_thunk_ppc32.h"
69
+ #elif defined (DC__Arch_PPC64)
70
+ #include "dyncall_thunk_ppc64.h"
67
71
  #elif defined (DC__Arch_ARM_ARM)
68
72
  #include "dyncall_thunk_arm32_arm.h"
69
73
  #elif defined (DC__Arch_ARM_THUMB)
@@ -74,6 +78,8 @@ void dcbInitThunk(DCThunk* p, void (*entry)());
74
78
  #include "dyncall_thunk_sparc32.h"
75
79
  #elif defined (DC__Arch_Sparcv9)
76
80
  #include "dyncall_thunk_sparc64.h"
81
+ #elif defined (DC__Arch_ARM64)
82
+ #include "dyncall_thunk_arm64.h"
77
83
  #endif
78
84
 
79
85
  #ifdef __cplusplus
@@ -6,7 +6,7 @@
6
6
  Description: Thunk - Implementation for ARM32 (ARM mode)
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -23,6 +23,7 @@
23
23
 
24
24
  */
25
25
 
26
+
26
27
  #include "dyncall_thunk.h"
27
28
 
28
29
  void dcbInitThunk(DCThunk* p, void (*entry)())
@@ -34,12 +35,11 @@ void dcbInitThunk(DCThunk* p, void (*entry)())
34
35
  ldr %r15, [%r15, #-4]
35
36
  */
36
37
 
37
- /* This code loads 'entry+8' into r15. The -4 is needed, because r15 as */
38
- /* program counter points to the current instruction+8, but the pointer */
39
- /* to the code to execute follows the ldr instruction directly. Add 8 to */
40
- /* entry for similar reasons. NOTE: Latter seems to be implicit with */
41
- /* latest update of arm-eabi tools. */
38
+ /* This code stores a ptr to DCCallback in r12 (equals ptr to thunk, */
39
+ /* which is PC (r15) minus 8, as PC points to current instruction+8. */
40
+ /* Then it loads the callback 'entry' into PC. The -4 is needed, also bc */
41
+ /* of the PC pointing ahead. */
42
42
  p->code[0] = 0xe24fc008UL; /* sub %r12, %r15, #8 */
43
43
  p->code[1] = 0xe51ff004UL; /* ldr %r15, [%r15, #-4] */
44
- p->entry = entry/*+8*/;
44
+ p->entry = entry;
45
45
  }
@@ -6,7 +6,7 @@
6
6
  Description: Thunk - Header for ARM32 (ARM mode)
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -23,6 +23,7 @@
23
23
 
24
24
  */
25
25
 
26
+
26
27
  #ifndef DYNCALL_THUNK_ARM32_ARM_H
27
28
  #define DYNCALL_THUNK_ARM32_ARM_H
28
29