rbdc 0.9.0 → 1.0.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 (223) hide show
  1. checksums.yaml +4 -4
  2. data/dyncall/BUGS +1 -1
  3. data/dyncall/CMakeLists.txt +19 -7
  4. data/dyncall/ChangeLog +61 -20
  5. data/dyncall/LICENSE +1 -1
  6. data/dyncall/Makefile.generic +2 -0
  7. data/dyncall/ToDo +97 -29
  8. data/dyncall/autovar/README.txt +1 -0
  9. data/dyncall/autovar/autovar_ABI.h +4 -2
  10. data/dyncall/autovar/autovar_ARCH.h +9 -5
  11. data/dyncall/autovar/autovar_CC.h +3 -1
  12. data/dyncall/autovar/autovar_OS.h +2 -2
  13. data/dyncall/autovar/autovar_OSFAMILY.h +1 -1
  14. data/dyncall/configure +94 -38
  15. data/dyncall/dyncall/dyncall.3 +8 -4
  16. data/dyncall/dyncall/dyncall.h +1 -1
  17. data/dyncall/dyncall/dyncall_alloc.h +1 -1
  18. data/dyncall/dyncall/dyncall_api.c +3 -1
  19. data/dyncall/dyncall/dyncall_call.S +13 -5
  20. data/dyncall/dyncall/dyncall_call_arm32_arm.S +1 -2
  21. data/dyncall/dyncall/dyncall_call_arm32_arm.h +1 -1
  22. data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.S +24 -26
  23. data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.h +1 -1
  24. data/dyncall/dyncall/dyncall_call_arm32_thumb.h +1 -1
  25. data/dyncall/dyncall/dyncall_call_arm32_thumb_armhf.S +1 -1
  26. data/dyncall/dyncall/dyncall_call_arm32_thumb_gas.s +3 -7
  27. data/dyncall/dyncall/dyncall_call_arm64.S +2 -2
  28. data/dyncall/dyncall/dyncall_call_arm64.h +2 -2
  29. data/dyncall/dyncall/dyncall_call_mips.h +1 -1
  30. data/dyncall/dyncall/dyncall_call_mips_eabi.h +1 -1
  31. data/dyncall/dyncall/dyncall_call_mips_eabi_gas.s +16 -16
  32. data/dyncall/dyncall/dyncall_call_mips_gas.S +2 -2
  33. data/dyncall/dyncall/dyncall_call_mips_n32.h +5 -4
  34. data/dyncall/dyncall/dyncall_call_mips_n32_gas.s +4 -4
  35. data/dyncall/dyncall/dyncall_call_mips_n64.h +3 -3
  36. data/dyncall/dyncall/dyncall_call_mips_n64_gas.s +2 -2
  37. data/dyncall/dyncall/dyncall_call_mips_o32.h +4 -3
  38. data/dyncall/dyncall/dyncall_call_mips_o32_gas.s +1 -3
  39. data/dyncall/dyncall/dyncall_call_ppc32.S +1 -1
  40. data/dyncall/dyncall/dyncall_call_ppc32.h +1 -1
  41. data/dyncall/dyncall/dyncall_call_sparc.h +1 -1
  42. data/dyncall/dyncall/{dyncall_call_sparc.S → dyncall_call_sparc.s} +39 -44
  43. data/dyncall/dyncall/dyncall_call_sparc64.h +5 -5
  44. data/dyncall/dyncall/dyncall_call_sparc64.s +177 -0
  45. data/dyncall/dyncall/dyncall_call_x64.S +83 -86
  46. data/dyncall/dyncall/dyncall_call_x64.h +1 -1
  47. data/dyncall/dyncall/dyncall_call_x86.S +9 -9
  48. data/dyncall/dyncall/dyncall_call_x86.h +1 -1
  49. data/dyncall/dyncall/dyncall_call_x86_nasm.asm +5 -5
  50. data/dyncall/dyncall/dyncall_callf.c +18 -18
  51. data/dyncall/dyncall/dyncall_callf.h +1 -1
  52. data/dyncall/dyncall/dyncall_callvm.c +3 -3
  53. data/dyncall/dyncall/dyncall_callvm.h +1 -1
  54. data/dyncall/dyncall/dyncall_callvm_arm32_arm.c +25 -40
  55. data/dyncall/dyncall/dyncall_callvm_arm32_arm.h +1 -5
  56. data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.c +25 -33
  57. data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.h +1 -5
  58. data/dyncall/dyncall/dyncall_callvm_arm32_thumb.c +24 -36
  59. data/dyncall/dyncall/dyncall_callvm_arm32_thumb.h +1 -5
  60. data/dyncall/dyncall/dyncall_callvm_arm64.c +23 -27
  61. data/dyncall/dyncall/dyncall_callvm_arm64.h +2 -6
  62. data/dyncall/dyncall/dyncall_callvm_arm64_apple.c +23 -30
  63. data/dyncall/dyncall/dyncall_callvm_base.c +1 -1
  64. data/dyncall/dyncall/dyncall_callvm_mips.c +1 -1
  65. data/dyncall/dyncall/dyncall_callvm_mips.h +1 -1
  66. data/dyncall/dyncall/dyncall_callvm_mips_eabi.c +30 -27
  67. data/dyncall/dyncall/dyncall_callvm_mips_eabi.h +1 -5
  68. data/dyncall/dyncall/dyncall_callvm_mips_n32.c +24 -30
  69. data/dyncall/dyncall/{dyncall_call_sparc_v9.h → dyncall_callvm_mips_n32.h} +18 -8
  70. data/dyncall/dyncall/dyncall_callvm_mips_n64.c +23 -30
  71. data/dyncall/dyncall/dyncall_callvm_mips_n64.h +4 -6
  72. data/dyncall/dyncall/dyncall_callvm_mips_o32.c +31 -29
  73. data/dyncall/dyncall/dyncall_callvm_mips_o32.h +1 -3
  74. data/dyncall/dyncall/dyncall_callvm_ppc32.c +22 -20
  75. data/dyncall/dyncall/dyncall_callvm_ppc32.h +1 -3
  76. data/dyncall/dyncall/dyncall_callvm_ppc64.c +54 -15
  77. data/dyncall/dyncall/dyncall_callvm_ppc64.h +0 -2
  78. data/dyncall/dyncall/dyncall_callvm_sparc.c +34 -26
  79. data/dyncall/dyncall/dyncall_callvm_sparc.h +1 -3
  80. data/dyncall/dyncall/dyncall_callvm_sparc64.c +94 -150
  81. data/dyncall/dyncall/dyncall_callvm_sparc64.h +11 -17
  82. data/dyncall/dyncall/dyncall_callvm_x64.c +37 -36
  83. data/dyncall/dyncall/dyncall_callvm_x64.h +1 -4
  84. data/dyncall/dyncall/dyncall_callvm_x86.c +22 -63
  85. data/dyncall/dyncall/dyncall_callvm_x86.h +1 -17
  86. data/dyncall/dyncall/dyncall_config.h +1 -1
  87. data/dyncall/dyncall/dyncall_macros.h +28 -19
  88. data/dyncall/dyncall/dyncall_signature.h +1 -1
  89. data/dyncall/dyncall/dyncall_types.h +17 -18
  90. data/dyncall/dyncall/dyncall_utils.h +1 -1
  91. data/dyncall/dyncall/dyncall_value.h +28 -21
  92. data/dyncall/dyncall/dyncall_vector.c +1 -1
  93. data/dyncall/dyncall/dyncall_vector.h +1 -1
  94. data/dyncall/dyncall/gen-masm.sh +2 -2
  95. data/dyncall/dyncallback/CMakeLists.txt +1 -2
  96. data/dyncall/dyncallback/Makefile.generic +1 -1
  97. data/dyncall/dyncallback/dyncall_alloc_wx.c +1 -1
  98. data/dyncall/dyncallback/dyncall_alloc_wx.h +4 -3
  99. data/dyncall/dyncallback/dyncall_alloc_wx_malloc.c +8 -2
  100. data/dyncall/dyncallback/dyncall_alloc_wx_mmap.c +67 -4
  101. data/dyncall/dyncallback/dyncall_alloc_wx_win32.c +7 -2
  102. data/dyncall/dyncallback/dyncall_args.c +19 -15
  103. data/dyncall/dyncallback/dyncall_args.h +1 -1
  104. data/dyncall/dyncallback/{dyncall_args_arm32_arm.c → dyncall_args_arm32.c} +4 -4
  105. data/dyncall/dyncallback/{dyncall_args_arm32_arm.h → dyncall_args_arm32.h} +6 -6
  106. data/dyncall/dyncallback/dyncall_args_arm64.c +2 -2
  107. data/dyncall/dyncallback/dyncall_args_arm64_apple.c +2 -2
  108. data/dyncall/dyncallback/dyncall_args_mips.c +26 -21
  109. data/dyncall/dyncallback/dyncall_args_mips.h +18 -6
  110. data/dyncall/dyncallback/dyncall_args_mips64.c +81 -0
  111. data/dyncall/dyncallback/dyncall_args_mips_o32.c +104 -0
  112. data/dyncall/dyncallback/dyncall_args_ppc32.c +2 -2
  113. data/dyncall/dyncallback/dyncall_args_ppc32.h +1 -1
  114. data/dyncall/dyncallback/dyncall_args_ppc32_sysv.c +1 -1
  115. data/dyncall/dyncallback/dyncall_args_ppc64.c +24 -3
  116. data/dyncall/dyncallback/dyncall_args_sparc32.c +41 -15
  117. data/dyncall/dyncallback/dyncall_args_sparc32.h +2 -2
  118. data/dyncall/dyncallback/dyncall_args_sparc64.c +28 -15
  119. data/dyncall/dyncallback/dyncall_args_sparc64.h +7 -3
  120. data/dyncall/dyncallback/dyncall_args_x64.c +1 -1
  121. data/dyncall/dyncallback/dyncall_args_x64.h +1 -1
  122. data/dyncall/dyncallback/dyncall_args_x86.c +1 -1
  123. data/dyncall/dyncallback/dyncall_args_x86.h +1 -1
  124. data/dyncall/dyncallback/dyncall_callback.c +10 -12
  125. data/dyncall/dyncallback/dyncall_callback.h +2 -4
  126. data/dyncall/dyncallback/dyncall_callback_arch.S +12 -2
  127. data/dyncall/dyncallback/{dyncall_callback_arm32_arm.c → dyncall_callback_arm32.c} +25 -10
  128. data/dyncall/dyncallback/dyncall_callback_arm32_arm_apple.s +7 -7
  129. data/dyncall/dyncallback/dyncall_callback_arm32_arm_gas.S +9 -9
  130. data/dyncall/dyncallback/dyncall_callback_arm32_thumb_apple.S +1 -1
  131. data/dyncall/dyncallback/dyncall_callback_arm32_thumb_gas.S +1 -1
  132. data/dyncall/dyncallback/dyncall_callback_arm64.S +2 -2
  133. data/dyncall/dyncallback/dyncall_callback_arm64.c +20 -14
  134. data/dyncall/dyncallback/dyncall_callback_mips.c +26 -9
  135. data/dyncall/dyncallback/dyncall_callback_mips_eabi_gas.s +99 -0
  136. data/dyncall/dyncallback/{dyncall_args_arm32_thumb.h → dyncall_callback_mips_gas.S} +14 -9
  137. data/dyncall/dyncallback/{dyncall_callback_arm32_thumb.c → dyncall_callback_mips_n32_gas.s} +12 -7
  138. data/dyncall/dyncallback/dyncall_callback_mips_n64_gas.s +98 -0
  139. data/dyncall/dyncallback/dyncall_callback_mips_o32_gas.s +100 -0
  140. data/dyncall/dyncallback/dyncall_callback_ppc32.S +54 -54
  141. data/dyncall/dyncallback/dyncall_callback_ppc32.c +23 -5
  142. data/dyncall/dyncallback/dyncall_callback_ppc32_apple.s +92 -117
  143. data/dyncall/dyncallback/dyncall_callback_ppc64.S +2 -2
  144. data/dyncall/dyncallback/dyncall_callback_ppc64.c +23 -5
  145. data/dyncall/dyncallback/dyncall_callback_sparc32.c +25 -7
  146. data/dyncall/dyncallback/dyncall_callback_sparc32.s +55 -4
  147. data/dyncall/dyncallback/dyncall_callback_sparc64.c +25 -7
  148. data/dyncall/dyncallback/dyncall_callback_sparc64.s +89 -5
  149. data/dyncall/dyncallback/dyncall_callback_x64.S +8 -8
  150. data/dyncall/dyncallback/dyncall_callback_x64.c +19 -6
  151. data/dyncall/dyncallback/dyncall_callback_x86.S +29 -25
  152. data/dyncall/dyncallback/dyncall_callback_x86.c +24 -11
  153. data/dyncall/dyncallback/dyncall_thunk.c +6 -6
  154. data/dyncall/dyncallback/dyncall_thunk.h +9 -7
  155. data/dyncall/dyncallback/{dyncall_thunk_arm32_arm.c → dyncall_thunk_arm32.c} +5 -3
  156. data/dyncall/dyncallback/{dyncall_thunk_arm32_arm.h → dyncall_thunk_arm32.h} +7 -7
  157. data/dyncall/dyncallback/dyncall_thunk_arm64.c +2 -2
  158. data/dyncall/dyncallback/dyncall_thunk_arm64.h +8 -13
  159. data/dyncall/dyncallback/dyncall_thunk_mips.c +16 -20
  160. data/dyncall/dyncallback/dyncall_thunk_mips.h +4 -2
  161. data/dyncall/dyncallback/dyncall_thunk_mips64.c +103 -0
  162. data/dyncall/dyncallback/{dyncall_callback_arm32_thumb.h → dyncall_thunk_mips64.h} +15 -8
  163. data/dyncall/dyncallback/dyncall_thunk_ppc32.c +4 -4
  164. data/dyncall/dyncallback/dyncall_thunk_ppc32.h +1 -1
  165. data/dyncall/dyncallback/dyncall_thunk_ppc32_sysv.c +9 -9
  166. data/dyncall/dyncallback/dyncall_thunk_ppc64.c +2 -2
  167. data/dyncall/dyncallback/dyncall_thunk_sparc32.c +19 -2
  168. data/dyncall/dyncallback/dyncall_thunk_sparc32.h +5 -4
  169. data/dyncall/dyncallback/dyncall_thunk_sparc64.c +42 -2
  170. data/dyncall/dyncallback/dyncall_thunk_sparc64.h +5 -5
  171. data/dyncall/dyncallback/dyncall_thunk_x64.c +1 -1
  172. data/dyncall/dyncallback/dyncall_thunk_x64.h +2 -2
  173. data/dyncall/dyncallback/dyncall_thunk_x86.c +1 -1
  174. data/dyncall/dyncallback/dyncall_thunk_x86.h +2 -2
  175. data/dyncall/dyncallback/dyncallback.3 +16 -11
  176. data/dyncall/dynload/dynload.3 +63 -8
  177. data/dyncall/dynload/dynload.c +2 -8
  178. data/dyncall/dynload/dynload.h +9 -5
  179. data/dyncall/dynload/dynload_alloc.h +1 -1
  180. data/dyncall/dynload/dynload_syms.c +1 -3
  181. data/dyncall/dynload/dynload_syms_elf.c +19 -11
  182. data/dyncall/dynload/dynload_syms_mach-o.c +151 -75
  183. data/dyncall/dynload/dynload_syms_pe.c +24 -24
  184. data/dyncall/dynload/dynload_unix.c +156 -13
  185. data/dyncall/dynload/dynload_windows.c +15 -11
  186. data/dyncall/portasm/portasm-arm.S +1 -1
  187. data/dyncall/portasm/portasm-ppc.S +1 -1
  188. data/dyncall/portasm/{portasm-x64-att.S → portasm-x64.S} +7 -4
  189. data/dyncall/portasm/portasm-x86.S +4 -2
  190. data/{dyncall-bindings/ruby/rbdc/extconf.rb → extconf.rb} +4 -4
  191. data/{dyncall-bindings/ruby/rbdc/rbdc.c → rbdc.c} +5 -5
  192. metadata +24 -48
  193. data/dyncall/Makefile.M +0 -15
  194. data/dyncall/buildsys/dynmake/Makefile.base.M +0 -82
  195. data/dyncall/buildsys/dynmake/dynmake.bat +0 -2
  196. data/dyncall/buildsys/dynmake/dynmake.sh +0 -4
  197. data/dyncall/dynMakefile +0 -4
  198. data/dyncall/dyncall/Makefile.M +0 -10
  199. data/dyncall/dyncall/TODO +0 -9
  200. data/dyncall/dyncall/dynMakefile +0 -4
  201. data/dyncall/dyncall/dyncall_call_sparc64.S +0 -362
  202. data/dyncall/dyncall/dyncall_call_sparc_v9.S +0 -222
  203. data/dyncall/dyncall/dyncall_call_x64-att.S +0 -147
  204. data/dyncall/dyncall/dyncall_callvm_sparc_v9.c +0 -182
  205. data/dyncall/dyncall/dyncall_callvm_sparc_v9.h +0 -46
  206. data/dyncall/dyncallback/Makefile.M +0 -10
  207. data/dyncall/dyncallback/README.txt +0 -9
  208. data/dyncall/dyncallback/TODO +0 -4
  209. data/dyncall/dyncallback/dynMakefile +0 -4
  210. data/dyncall/dyncallback/dyncall_args_arm32_thumb.c +0 -30
  211. data/dyncall/dyncallback/dyncall_callback_arm32_arm.h +0 -46
  212. data/dyncall/dyncallback/dyncall_callback_mips.h +0 -43
  213. data/dyncall/dyncallback/dyncall_callback_ppc32.h +0 -43
  214. data/dyncall/dyncallback/dyncall_callback_ppc64.h +0 -56
  215. data/dyncall/dyncallback/dyncall_callback_sparc32.h +0 -44
  216. data/dyncall/dyncallback/dyncall_callback_x64.h +0 -45
  217. data/dyncall/dyncallback/dyncall_callback_x86.h +0 -50
  218. data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.c +0 -30
  219. data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.h +0 -36
  220. data/dyncall/dynload/Makefile.M +0 -10
  221. data/dyncall/dynload/TODO +0 -20
  222. data/dyncall/dynload/dynMakefile +0 -4
  223. data/dyncall/dynload/dynload_darwin.c +0 -90
@@ -2,11 +2,11 @@
2
2
 
3
3
  Package: dyncall
4
4
  Library: dyncallback
5
- File: dyncallback/dyncall_args_arm32_arm.h
6
- Description: Callback's Arguments VM - Header for ARM32 (ARM mode)
5
+ File: dyncallback/dyncall_args_arm32.h
6
+ Description: Callback's Arguments VM - Header for ARM32 (ARM and THUMB mode)
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 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,8 +24,8 @@
24
24
  */
25
25
 
26
26
 
27
- #ifndef DYNCALLBACK_ARGS_ARM32_ARM_H
28
- #define DYNCALLBACK_ARGS_ARM32_ARM_H
27
+ #ifndef DYNCALLBACK_ARGS_ARM32_H
28
+ #define DYNCALLBACK_ARGS_ARM32_H
29
29
 
30
30
  #include "dyncall_args.h"
31
31
 
@@ -42,5 +42,5 @@ struct DCArgs
42
42
  #endif
43
43
  };
44
44
 
45
- #endif /* DYNCALLBACK_ARGS_ARM32_ARM_H */
45
+ #endif /* DYNCALLBACK_ARGS_ARM32_H */
46
46
 
@@ -6,8 +6,8 @@
6
6
  Description: Callback's Arguments VM - Implementation for ARM64 / ARMv8 / AAPCS64
7
7
  License:
8
8
 
9
- Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>,
10
- Tassilo Philipp <tphilipp@potion-studios.com>
9
+ Copyright (c) 2015-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
+ Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
13
13
  purpose with or without fee is hereby granted, provided that the above
@@ -6,8 +6,8 @@
6
6
  Description: Callback's Arguments VM - Implementation for Apple's ARM64 / ARMv8 / AAPCS64
7
7
  License:
8
8
 
9
- Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>,
10
- Tassilo Philipp <tphilipp@potion-studios.com>
9
+ Copyright (c) 2015-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
+ Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
13
13
  purpose with or without fee is hereby granted, provided that the above
@@ -3,10 +3,10 @@
3
3
  Package: dyncall
4
4
  Library: dyncallback
5
5
  File: dyncallback/dyncall_args_mips.c
6
- Description: Callback's Arguments VM - Implementation for MIPS
6
+ Description: Callback's Arguments VM - Implementation for non-o32 MIPS
7
7
  License:
8
8
 
9
- Copyright (c) 2013-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2013-2018 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
@@ -26,25 +26,31 @@
26
26
 
27
27
  #include "dyncall_args_mips.h"
28
28
 
29
- DCint dcbArgInt(DCArgs* p)
29
+ DCint dcbArgInt(DCArgs* p)
30
30
  {
31
31
  DCint value;
32
- if(p->ireg_count < 8)
33
- value = p->ireg_data[p->ireg_count++];
32
+ if(p->reg_count.i < DCARGS_MIPS_NUM_IREGS)
33
+ value = p->ireg_data[p->reg_count.i++];
34
34
  else {
35
- value = *((int*)p->stackptr);
36
- p->stackptr += sizeof(int);
35
+ value = *((DCint*)p->stackptr);
36
+ p->stackptr += sizeof(DCint);
37
37
  }
38
38
  return value;
39
39
  }
40
40
  DCuint dcbArgUInt(DCArgs* p) { return (DCuint)dcbArgInt(p); }
41
41
 
42
- DCulonglong dcbArgULongLong(DCArgs* p)
42
+ DCulonglong dcbArgULongLong(DCArgs* p)
43
43
  {
44
44
  DCulonglong value;
45
- p->ireg_count += (p->ireg_count & 1); // Skip one reg if not aligned.
45
+ p->reg_count.i += (p->reg_count.i & 1); /* Skip one reg if not aligned. */
46
+ p->stackptr += ((DCulong)p->stackptr & 4) & -4; /* 64bit values are also always aligned on stack */
47
+ #if defined(DC__Endian_LITTLE)
48
+ value = dcbArgUInt(p);
49
+ value |= ((DCulonglong)dcbArgUInt(p)) << 32;
50
+ #else
46
51
  value = ((DCulonglong)dcbArgUInt(p)) << 32;
47
52
  value |= dcbArgUInt(p);
53
+ #endif
48
54
  return value;
49
55
  }
50
56
  DClonglong dcbArgLongLong(DCArgs* p) { return (DClonglong)dcbArgULongLong(p); }
@@ -59,24 +65,23 @@ DCbool dcbArgBool (DCArgs* p) { return (DCbool) dcbArgUInt(p); }
59
65
  DCpointer dcbArgPointer(DCArgs* p) { return (DCpointer)dcbArgUInt(p); }
60
66
 
61
67
  DCfloat dcbArgFloat(DCArgs* p)
62
- {
68
+ {
63
69
  DCfloat result;
64
- if(p->freg_count < 8)
65
- result = (DCfloat)p->freg_data[p->freg_count++];
70
+ if(p->reg_count.f < DCARGS_MIPS_NUM_FREGS)
71
+ result = p->freg_data[p->reg_count.f++];
66
72
  else {
67
- result = *((float*)p->stackptr);
68
- p->stackptr += sizeof(float);
73
+ result = *((DCfloat*)p->stackptr);
74
+ p->stackptr += sizeof(DCfloat);
69
75
  }
70
- return result;
76
+ return result;
71
77
  }
72
- DCdouble dcbArgDouble(DCArgs* p)
73
- {
78
+ DCdouble dcbArgDouble(DCArgs* p)
79
+ {
74
80
  union {
75
81
  DCdouble result;
76
- DCfloat f[2];
82
+ DCulonglong i;
77
83
  } d;
78
- p->freg_count += (p->freg_count & 1); // Skip one reg if not aligned.
79
- d.f[0] = dcbArgFloat(p);
80
- d.f[1] = dcbArgFloat(p);
84
+ d.i = dcbArgULongLong(p); /* those are passed via int regs */
81
85
  return d.result;
82
86
  }
87
+
@@ -6,7 +6,7 @@
6
6
  Description: Callback's Arguments VM - Header for MIPS
7
7
  License:
8
8
 
9
- Copyright (c) 2013-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2013-2018 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,11 +31,23 @@
31
31
 
32
32
  struct DCArgs
33
33
  {
34
- int ireg_data[8];
35
- float freg_data[8];
36
- int ireg_count;
37
- int freg_count;
38
- unsigned char* stackptr;
34
+ /* Don't change order or types, laid out for asm code to fill in! */
35
+ #if defined(DC__Arch_MIPS) && defined(DC__ABI_MIPS_O32)
36
+ DCint freg_count;
37
+ #else
38
+ # define DCARGS_MIPS_NUM_IREGS 8
39
+ # define DCARGS_MIPS_NUM_FREGS 8
40
+ # if defined(DC__Arch_MIPS)
41
+ DCint ireg_data[DCARGS_MIPS_NUM_IREGS];
42
+ DCfloat freg_data[DCARGS_MIPS_NUM_FREGS];
43
+ struct { DCshort i; DCshort f; } reg_count;
44
+ # elif defined(DC__Arch_MIPS64)
45
+ DClonglong ireg_data[DCARGS_MIPS_NUM_IREGS];
46
+ DCdouble freg_data[DCARGS_MIPS_NUM_FREGS];
47
+ DClonglong reg_count;
48
+ # endif
49
+ #endif
50
+ DCuchar* stackptr;
39
51
  };
40
52
 
41
53
  #endif /* DYNCALLBACK_ARGS_MIPS_H */
@@ -0,0 +1,81 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncallback
5
+ File: dyncallback/dyncall_args_mips64.c
6
+ Description: Callback's Arguments VM - Implementation for MIPS64 n32&n64
7
+ License:
8
+
9
+ Copyright (c) 2016-2018 Tassilo Philipp <tphilipp@potion-studios.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
+
26
+ #include "dyncall_args_mips.h"
27
+
28
+ /* @@@ test and add n32 code here, also, if needed */
29
+
30
+ DClonglong dcbArgLongLong(DCArgs* p)
31
+ {
32
+ DClonglong value;
33
+ if(p->reg_count < DCARGS_MIPS_NUM_IREGS)
34
+ value = p->ireg_data[p->reg_count++];
35
+ else {
36
+ value = *((DClonglong*)p->stackptr);
37
+ p->stackptr += sizeof(DClonglong);
38
+ }
39
+ return value;
40
+ }
41
+ DCulonglong dcbArgULongLong(DCArgs* p) { return (DCulonglong)dcbArgLongLong(p); }
42
+
43
+ DCint dcbArgInt (DCArgs* p) { return (DCint) dcbArgLongLong(p); }
44
+ DCuint dcbArgUInt (DCArgs* p) { return (DCuint) dcbArgLongLong(p); }
45
+ DClong dcbArgLong (DCArgs* p) { return (DClong) dcbArgLongLong(p); }
46
+ DCulong dcbArgULong (DCArgs* p) { return (DCulong) dcbArgLongLong(p); }
47
+ DCchar dcbArgChar (DCArgs* p) { return (DCchar) dcbArgLongLong(p); }
48
+ DCuchar dcbArgUChar (DCArgs* p) { return (DCuchar) dcbArgLongLong(p); }
49
+ DCshort dcbArgShort (DCArgs* p) { return (DCshort) dcbArgLongLong(p); }
50
+ DCushort dcbArgUShort (DCArgs* p) { return (DCushort) dcbArgLongLong(p); }
51
+ DCbool dcbArgBool (DCArgs* p) { return (DCbool) dcbArgLongLong(p); }
52
+ DCpointer dcbArgPointer(DCArgs* p) { return (DCpointer)dcbArgLongLong(p); }
53
+
54
+ DCdouble dcbArgDouble(DCArgs* p)
55
+ {
56
+ DCdouble result;
57
+ if(p->reg_count < DCARGS_MIPS_NUM_FREGS)
58
+ result = p->freg_data[p->reg_count++];
59
+ else {
60
+ result = *((DCdouble*)p->stackptr);
61
+ p->stackptr += sizeof(DCdouble);
62
+ }
63
+ return result;
64
+ }
65
+ DCfloat dcbArgFloat(DCArgs* p)
66
+ {
67
+ DCfloat result;
68
+ if(p->reg_count < DCARGS_MIPS_NUM_FREGS) {
69
+ result = ((DCfloat*)&p->freg_data[p->reg_count++])
70
+ #if defined(DC__Endian_LITTLE)
71
+ [0];
72
+ #else
73
+ [1]; /* single precision floats are right-justified in big-endian registers */
74
+ #endif
75
+ } else {
76
+ result = *((DCfloat*)p->stackptr); /* single precision floats are left-justified on stack in 64bit slots */
77
+ p->stackptr += sizeof(DCdouble);
78
+ }
79
+ return result;
80
+ }
81
+
@@ -0,0 +1,104 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncallback
5
+ File: dyncallback/dyncall_args_mips_o32.c
6
+ Description: Callback's Arguments VM - Implementation for MIPS o32
7
+ License:
8
+
9
+ Copyright (c) 2013-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
+ Tassilo Philipp <tphilipp@potion-studios.com>
11
+
12
+ Permission to use, copy, modify, and distribute this software for any
13
+ purpose with or without fee is hereby granted, provided that the above
14
+ copyright notice and this permission notice appear in all copies.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
17
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
18
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
19
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
22
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23
+
24
+ */
25
+
26
+
27
+ #include "dyncall_args_mips.h"
28
+
29
+ DCint dcbArgInt(DCArgs* p)
30
+ {
31
+ DCint value;
32
+ p->freg_count = 2; /* first int will disable float reg use. */
33
+ value = *((int*)p->stackptr);
34
+ p->stackptr += sizeof(int);
35
+ return value;
36
+ }
37
+ DCuint dcbArgUInt(DCArgs* p) { return (DCuint)dcbArgInt(p); }
38
+
39
+ DCulonglong dcbArgULongLong(DCArgs* p)
40
+ {
41
+ DCulonglong value;
42
+ p->stackptr += ((int)p->stackptr & 4); /* Skip one slot if not aligned. */
43
+ #if defined(DC__Endian_LITTLE)
44
+ value = dcbArgUInt(p);
45
+ value |= ((DCulonglong)dcbArgUInt(p)) << 32;
46
+ #else
47
+ value = ((DCulonglong)dcbArgUInt(p)) << 32;
48
+ value |= dcbArgUInt(p);
49
+ #endif
50
+ return value;
51
+ }
52
+ DClonglong dcbArgLongLong(DCArgs* p) { return (DClonglong)dcbArgULongLong(p); }
53
+
54
+ DClong dcbArgLong (DCArgs* p) { return (DClong) dcbArgUInt(p); }
55
+ DCulong dcbArgULong (DCArgs* p) { return (DCulong) dcbArgUInt(p); }
56
+ DCchar dcbArgChar (DCArgs* p) { return (DCchar) dcbArgUInt(p); }
57
+ DCuchar dcbArgUChar (DCArgs* p) { return (DCuchar) dcbArgUInt(p); }
58
+ DCshort dcbArgShort (DCArgs* p) { return (DCshort) dcbArgUInt(p); }
59
+ DCushort dcbArgUShort (DCArgs* p) { return (DCushort) dcbArgUInt(p); }
60
+ DCbool dcbArgBool (DCArgs* p) { return (DCbool) dcbArgUInt(p); }
61
+ DCpointer dcbArgPointer(DCArgs* p) { return (DCpointer)dcbArgUInt(p); }
62
+
63
+ DCfloat dcbArgFloat(DCArgs* p)
64
+ {
65
+ DCfloat result;
66
+ if(p->freg_count < 2) {
67
+ /* Stored float regs (max 2) are always 8b aligned. The way we look them up, */
68
+ /* relative to a diverging p->stackptr, we need consider this. Only works */
69
+ /* with up to two float args, which is all we need. Hacky, but saves us */
70
+ /* from one more variable and more bookkeeping in DCArgs. */
71
+ result = ((DCfloat*)(p->stackptr + ((int)p->stackptr & 4)) - 4) /* '-4' b/c those regs are stored right before the args */
72
+ #if defined(DC__Endian_LITTLE)
73
+ [0];
74
+ #else
75
+ [1];
76
+ #endif
77
+ ++p->freg_count;
78
+ } else {
79
+ result = *((DCfloat*)p->stackptr);
80
+ }
81
+ p->stackptr += sizeof(DCfloat);
82
+ return result;
83
+ }
84
+ DCdouble dcbArgDouble(DCArgs* p)
85
+ {
86
+ union {
87
+ DCdouble result;
88
+ DCfloat f[2];
89
+ } d;
90
+ p->stackptr += ((int)p->stackptr & 4); /* Skip one slot if not aligned. */
91
+ if(p->freg_count < 2) {
92
+ /*result = *((DCdouble*)p->stackptr-2); this changes the value, slightly*/
93
+ d.f[0] = ((DCfloat*)p->stackptr-4)[0]; /* '-4' b/c those regs are stored right before the args */
94
+ d.f[1] = ((DCfloat*)p->stackptr-4)[1];
95
+ ++p->freg_count;
96
+ } else {
97
+ /*result = *((DCdouble*)p->stackptr); this changes the value, slightly*/
98
+ d.f[0] = ((DCfloat*)p->stackptr)[0];
99
+ d.f[1] = ((DCfloat*)p->stackptr)[1];
100
+ }
101
+ p->stackptr += sizeof(DCdouble);
102
+ return d.result;
103
+ }
104
+
@@ -6,7 +6,7 @@
6
6
  Description: Callback's Arguments VM - Implementation for ppc32
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 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
@@ -41,7 +41,7 @@ DCuint dcbArgUInt (DCArgs* p) { return (DCuint) dcbArgInt(p); }
41
41
  DCulonglong dcbArgULongLong (DCArgs* p)
42
42
  {
43
43
  DCulonglong value;
44
- value = ( (DCulonglong) dcbArgUInt(p) ) << 16UL;
44
+ value = ( (DCulonglong) dcbArgUInt(p) ) << 32UL;
45
45
  value |= dcbArgUInt(p);
46
46
  return value;
47
47
  }
@@ -6,7 +6,7 @@
6
6
  Description: Callback's Arguments VM - Header for ppc32
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 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
@@ -6,7 +6,7 @@
6
6
  Description: Callback's Args Implementation for PowerPC 32-bit System V ABI
7
7
  License:
8
8
 
9
- Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>
9
+ Copyright (c) 2015-2018 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
@@ -50,8 +50,8 @@ DCbool dcbArgBool (DCArgs* p) { return (DCbool) dcbArgLongLong(p); }
50
50
 
51
51
  DCpointer dcbArgPointer (DCArgs* p) { return (DCpointer)dcbArgLongLong(p); }
52
52
 
53
- DCdouble dcbArgDouble (DCArgs* p)
54
- {
53
+ DCdouble dcbArgDouble (DCArgs* p)
54
+ {
55
55
  DCdouble result;
56
56
 
57
57
  if (p->freg_count < 13) {
@@ -67,5 +67,26 @@ DCdouble dcbArgDouble (DCArgs* p)
67
67
  return result;
68
68
  }
69
69
 
70
- DCfloat dcbArgFloat (DCArgs* p) { return (DCfloat)dcbArgDouble(p); }
70
+ DCfloat dcbArgFloat (DCArgs* p)
71
+ {
72
+ DCfloat result;
73
+
74
+ #if defined(DC__Endian_BIG)
75
+ struct sf { DCfloat f_pad; DCfloat f; } sf;
76
+ #else /* Endian_LITTLE */
77
+ struct sf { DCfloat f; DCfloat f_pad; } sf;
78
+ #endif
71
79
 
80
+ if (p->freg_count < 13) {
81
+ result = (float)p->freg_data[p->freg_count++];
82
+ if (p->ireg_count < 8) {
83
+ p->ireg_count++;
84
+ }
85
+ } else {
86
+ sf = * ( (struct sf*) p->stackptr );
87
+ result = sf.f;
88
+ }
89
+
90
+ p->stackptr += sizeof(double);
91
+ return result;
92
+ }
@@ -6,7 +6,7 @@
6
6
  Description: Callback's Arguments VM - Implementation for sparc32 - not yet
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 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
@@ -26,17 +26,43 @@
26
26
 
27
27
  #include "dyncall_args_sparc32.h"
28
28
 
29
- DCint dcbArgInt (DCArgs* p) { return 0; }
30
- DCuint dcbArgUInt (DCArgs* p) { return 0; }
31
- DCulonglong dcbArgULongLong (DCArgs* p) { return 0; }
32
- DClonglong dcbArgLongLong(DCArgs* p) { return (DClonglong)dcbArgULongLong(p); }
33
- DClong dcbArgLong (DCArgs* p) { return (DClong) dcbArgUInt(p); }
34
- DCulong dcbArgULong (DCArgs* p) { return (DCulong) dcbArgUInt(p); }
35
- DCchar dcbArgChar (DCArgs* p) { return (DCchar) dcbArgUInt(p); }
36
- DCuchar dcbArgUChar (DCArgs* p) { return (DCuchar) dcbArgUInt(p); }
37
- DCshort dcbArgShort (DCArgs* p) { return (DCshort) dcbArgUInt(p); }
38
- DCushort dcbArgUShort (DCArgs* p) { return (DCushort)dcbArgUInt(p); }
39
- DCbool dcbArgBool (DCArgs* p) { return (DCbool) dcbArgUInt(p); }
40
- DCpointer dcbArgPointer (DCArgs* p) { return (DCpointer)dcbArgUInt(p); }
41
- DCdouble dcbArgDouble (DCArgs* p) { return 0.0; }
42
- DCfloat dcbArgFloat (DCArgs* p) { return 0.0f; }
29
+ /* Compiler aligns this to 8-byte boundaries, b/c of dword members, a fact needed below */
30
+ typedef union {
31
+ DCdouble d;
32
+ DCulonglong L;
33
+ DCulong l[2];
34
+ } DCAligned64BitVal_t;
35
+
36
+ static void* sparc_word(DCArgs* args)
37
+ {
38
+ return args->arg_ptr++;
39
+ }
40
+
41
+ static void* sparc_dword(DCArgs* args)
42
+ {
43
+ void *p = args->arg_ptr;
44
+ args->arg_ptr += 2;
45
+ return p;
46
+ }
47
+
48
+ /* copy words so that dwords are 8-byte aligned, for 64bit value indirection; unaligned
49
+ access results in SIGBUS; not quite sure why compiler doesn't abstract this (maybe b/c
50
+ of not having any idea about our assembler code?) */
51
+ DCulonglong dcbArgULongLong(DCArgs* p) { DCAligned64BitVal_t v; DCulong *l = (DCulong*)sparc_dword(p); v.l[0]=l[0]; v.l[1]=l[1]; return v.L; }
52
+ DCdouble dcbArgDouble (DCArgs* p) { DCAligned64BitVal_t v; DCulong *l = (DCulong*)sparc_dword(p); v.l[0]=l[0]; v.l[1]=l[1]; return v.d; }
53
+
54
+ /* rest of getters based on above functions */
55
+ DCuint dcbArgUInt (DCArgs* p) { return *(DCuint*)sparc_word(p); }
56
+ DClonglong dcbArgLongLong (DCArgs* p) { return (DClonglong)dcbArgULongLong(p); }
57
+ DCint dcbArgInt (DCArgs* p) { return (DCint) dcbArgUInt(p); }
58
+ DClong dcbArgLong (DCArgs* p) { return (DClong) dcbArgUInt(p); }
59
+ DCulong dcbArgULong (DCArgs* p) { return (DCulong) dcbArgUInt(p); }
60
+ DCchar dcbArgChar (DCArgs* p) { return (DCchar) dcbArgUInt(p); }
61
+ DCuchar dcbArgUChar (DCArgs* p) { return (DCuchar) dcbArgUInt(p); }
62
+ DCshort dcbArgShort (DCArgs* p) { return (DCshort) dcbArgUInt(p); }
63
+ DCushort dcbArgUShort (DCArgs* p) { return (DCushort) dcbArgUInt(p); }
64
+ DCbool dcbArgBool (DCArgs* p) { return (DCbool) dcbArgUInt(p); }
65
+ DCpointer dcbArgPointer (DCArgs* p) { return (DCpointer) dcbArgUInt(p); }
66
+
67
+ DCfloat dcbArgFloat (DCArgs* p) { return *(DCfloat*) sparc_word(p); }
68
+