rbdc 0.9.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
+