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
@@ -54,7 +54,5 @@ struct DCCallVM_ppc64_
54
54
  DCVecHead mVecHead;
55
55
  };
56
56
 
57
- DCCallVM* dcNewCallVM_ppc64(DCsize size);
58
-
59
57
  #endif /* DYNCALL_CALLVM_PPC64_H */
60
58
 
@@ -6,7 +6,7 @@
6
6
  Description: Call VM for sparc processor architecture.
7
7
  License:
8
8
 
9
- Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
9
+ Copyright (c) 2011-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
@@ -29,16 +29,6 @@
29
29
  #include "dyncall_utils.h"
30
30
  #include "dyncall_alloc.h"
31
31
  #define DEFAULT_STACK_ALIGN 16
32
- /* Construtor. */
33
- /* the six output registers %o0-%o5 are always loaded, thus we need to ensure the argument buffer has space for at least 24 bytes. */
34
- static DCCallVM* dc_callvm_new_sparc(DCCallVM_vt* vt, DCsize size)
35
- {
36
- size=DC_MAX(size,sizeof(void*)*(6+1));
37
- DCCallVM_sparc* self = (DCCallVM_sparc*) dcAllocMem(sizeof(DCCallVM_sparc)+size);
38
- dc_callvm_base_init(&self->mInterface, vt);
39
- dcVecInit(&self->mVecHead,size);
40
- return (DCCallVM*)self;
41
- }
42
32
 
43
33
  /* Destructor. */
44
34
  static void dc_callvm_free_sparc(DCCallVM* in_self)
@@ -95,20 +85,6 @@ static void dc_callvm_argDouble_sparc(DCCallVM* in_self, DCdouble x)
95
85
  dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
96
86
  }
97
87
 
98
- /* mode: only a single mode available currently. */
99
- static void dc_callvm_mode_sparc(DCCallVM* in_self, DCint mode)
100
- {
101
- switch(mode) {
102
- case DC_CALL_C_DEFAULT:
103
- case DC_CALL_C_ELLIPSIS:
104
- case DC_CALL_C_SPARC32:
105
- break;
106
- default:
107
- in_self->mError = DC_ERROR_UNSUPPORTED_MODE;
108
- break;
109
- }
110
- }
111
-
112
88
  /* we call directly with 'RTYPE dcCall(DCCallVM* in_self, DCpointer target)' */
113
89
  #if 0
114
90
  /* call: delegate to default call kernel */
@@ -119,6 +95,8 @@ static void dc_callvm_call_sparc(DCCallVM* in_self, DCpointer target)
119
95
  }
120
96
  #endif
121
97
 
98
+ static void dc_callvm_mode_sparc(DCCallVM* in_self, DCint mode);
99
+
122
100
  /* CallVM virtual table. */
123
101
  DCCallVM_vt gVT_sparc =
124
102
  {
@@ -148,9 +126,39 @@ DCCallVM_vt gVT_sparc =
148
126
  NULL /* callStruct */
149
127
  };
150
128
 
129
+ /* mode: only a single mode available currently. */
130
+ static void dc_callvm_mode_sparc(DCCallVM* in_self, DCint mode)
131
+ {
132
+ DCCallVM_sparc* self = (DCCallVM_sparc*)in_self;
133
+ DCCallVM_vt* vt;
134
+
135
+ switch(mode) {
136
+ case DC_CALL_C_DEFAULT:
137
+ case DC_CALL_C_SPARC32:
138
+ case DC_CALL_C_ELLIPSIS:
139
+ case DC_CALL_C_ELLIPSIS_VARARGS:
140
+ vt = &gVT_sparc;
141
+ break;
142
+ default:
143
+ self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE;
144
+ return;
145
+ }
146
+ dc_callvm_base_init(&self->mInterface, vt);
147
+ }
148
+
151
149
  /* Public API. */
152
150
  DCCallVM* dcNewCallVM(DCsize size)
153
151
  {
154
- return dc_callvm_new_sparc(&gVT_sparc,size);
152
+ DCCallVM_sparc* p;
153
+
154
+ /* the six output registers %o0-%o5 are always loaded, thus we need to ensure the argument buffer has space for at least 24 bytes. */
155
+ size = DC_MAX(size, sizeof(void*)*(6+1));
156
+ p = (DCCallVM_sparc*)dcAllocMem(sizeof(DCCallVM_sparc)+size);
157
+
158
+ dc_callvm_mode_sparc((DCCallVM*)p, DC_CALL_C_DEFAULT);
159
+
160
+ dcVecInit(&p->mVecHead, size);
161
+
162
+ return (DCCallVM*)p;
155
163
  }
156
164
 
@@ -6,7 +6,7 @@
6
6
  Description: Call VM for sparc processor architecture.
7
7
  License:
8
8
 
9
- Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
9
+ Copyright (c) 2011-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
@@ -39,7 +39,5 @@ struct DCCallVM_sparc_
39
39
  DCVecHead mVecHead; /* 8 bytes (max,size) */
40
40
  };
41
41
 
42
- DCCallVM* dcNewCallVM_sparc(DCsize size);
43
-
44
42
  #endif /* DYNCALL_CALLVM_SPARC_H */
45
43
 
@@ -3,10 +3,10 @@
3
3
  Package: dyncall
4
4
  Library: dyncall
5
5
  File: dyncall/dyncall_callvm_sparc64.c
6
- Description: Call VM for sparc64 64-bit processor architecture.
6
+ Description: Call VM for sparc64 (v9) ABI.
7
7
  License:
8
8
 
9
- Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
9
+ Copyright (c) 2011-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
@@ -28,212 +28,156 @@
28
28
  #include "dyncall_call_sparc64.h"
29
29
  #include "dyncall_alloc.h"
30
30
 
31
- #define IREGS 6
32
- #define FREGS 16
33
- #define SREGS 16
34
- #define DHEAD (IREGS+FREGS)*8+SREGS*4
35
-
36
31
  /* Reset argument buffer. */
37
- static void dc_callvm_reset_sparc64(DCCallVM* in_self)
32
+ static void dc_callvm_reset_v9(DCCallVM* in_self)
38
33
  {
39
- DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
40
- dcVecResize(&self->mVecHead,DHEAD);
41
- self->mIntRegs = 0;
42
- self->mFloatRegs = 0;
43
- self->mUseSingleFlags = 0;
34
+ DCCallVM_v9* self = (DCCallVM_v9*)in_self;
35
+ dcVecResize(&self->mVecHead, 0);
44
36
  }
45
37
 
46
- /* Construtor. */
47
- /* the six output registers %o0-%o5 are always loaded, thus we need to ensure the argument buffer has space for at least 24 bytes. */
48
- static DCCallVM* dc_callvm_new_sparc64(DCCallVM_vt* vt, DCsize size)
49
- {
50
- DCCallVM_sparc64* self = (DCCallVM_sparc64*) dcAllocMem(sizeof(DCCallVM_sparc64)+DHEAD+size);
51
- dc_callvm_base_init(&self->mInterface, vt);
52
- dcVecInit(&self->mVecHead,DHEAD+size);
53
- dc_callvm_reset_sparc64(&self->mInterface);
54
- return (DCCallVM*)self;
55
- }
56
38
 
57
39
  /* Destructor. */
58
- static void dc_callvm_free_sparc64(DCCallVM* in_self)
40
+ static void dc_callvm_free_v9(DCCallVM* in_self)
59
41
  {
60
42
  dcFreeMem(in_self);
61
43
  }
62
44
 
63
- /* all integers are promoted to 64-bit. */
64
-
65
- static void dc_callvm_argLongLong_sparc64(DCCallVM* in_self, DClonglong x)
45
+ static void dc_callvm_argLongLong_v9(DCCallVM* in_self, DClonglong x)
66
46
  {
67
- DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
68
- if (self->mIntRegs < IREGS) {
69
- * ( (DClonglong*) ( dcVecAt(&self->mVecHead, (self->mIntRegs++)*8) ) ) = x;
70
- } else {
71
- dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong));
72
- }
73
- if (self->mFloatRegs < FREGS) self->mFloatRegs++;
47
+ DCCallVM_v9* self = (DCCallVM_v9*)in_self;
48
+ dcVecAppend(&self->mVecHead, &x, sizeof(DClonglong));
74
49
  }
75
50
 
76
- static void dc_callvm_argLong_sparc64 (DCCallVM* in_self, DClong x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
77
- static void dc_callvm_argInt_sparc64 (DCCallVM* in_self, DCint x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
78
- static void dc_callvm_argBool_sparc64 (DCCallVM* in_self, DCbool x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
79
- static void dc_callvm_argChar_sparc64 (DCCallVM* in_self, DCchar x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
80
- static void dc_callvm_argShort_sparc64 (DCCallVM* in_self, DCshort x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
81
- static void dc_callvm_argPointer_sparc64(DCCallVM* in_self, DCpointer x) { dc_callvm_argLongLong_sparc64(in_self, (DClonglong) x ); }
82
-
83
- static void dc_callvm_argDouble_sparc64(DCCallVM* in_self, DCdouble x)
51
+ /* all integers are promoted to 64-bit. */
52
+ static void dc_callvm_argLong_v9 (DCCallVM* in_self, DClong x) { dc_callvm_argLongLong_v9(in_self, (DClonglong) x ); }
53
+ static void dc_callvm_argInt_v9 (DCCallVM* in_self, DCint x) { dc_callvm_argLongLong_v9(in_self, (DClonglong) x ); }
54
+ static void dc_callvm_argBool_v9 (DCCallVM* in_self, DCbool x) { dc_callvm_argLongLong_v9(in_self, (DClonglong) x ); }
55
+ static void dc_callvm_argChar_v9 (DCCallVM* in_self, DCchar x) { dc_callvm_argLongLong_v9(in_self, (DClonglong) x ); }
56
+ static void dc_callvm_argShort_v9 (DCCallVM* in_self, DCshort x) { dc_callvm_argLongLong_v9(in_self, (DClonglong) x ); }
57
+ static void dc_callvm_argPointer_v9(DCCallVM* in_self, DCpointer x) { dc_callvm_argLongLong_v9(in_self, (DClonglong) x ); }
58
+
59
+ static void dc_callvm_argDouble_v9(DCCallVM* in_self, DCdouble x)
84
60
  {
85
- DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
86
- if (self->mFloatRegs < FREGS) {
87
- * ((double*)dcVecAt(&self->mVecHead,(IREGS+(self->mFloatRegs++))*8)) = x;
88
- }
89
- if (self->mIntRegs < IREGS) {
90
- self->mIntRegs++;
91
- } else {
92
- dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
93
- }
61
+ DCCallVM_v9* self = (DCCallVM_v9*)in_self;
62
+ dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble));
94
63
  }
95
64
 
96
- static void dc_callvm_argDouble_sparc64_ellipsis(DCCallVM* in_self, DCdouble x)
65
+ static void dc_callvm_argDouble_v9_ellipsis(DCCallVM* in_self, DCdouble x)
97
66
  {
98
67
  union {
99
68
  long long l;
100
69
  double d;
101
70
  } u;
102
71
  u.d = x;
103
- dc_callvm_argLongLong_sparc64(in_self, u.l);
72
+ dc_callvm_argLongLong_v9(in_self, u.l);
104
73
  }
105
74
 
106
- static void dc_callvm_argFloat_sparc64_ellipsis(DCCallVM* in_self, DCfloat x)
75
+ static void dc_callvm_argFloat_v9_ellipsis(DCCallVM* in_self, DCfloat x)
107
76
  {
108
- dc_callvm_argDouble_sparc64_ellipsis(in_self, (DCdouble) x);
77
+ dc_callvm_argDouble_v9_ellipsis(in_self, (DCdouble) x);
109
78
  }
110
79
 
111
- static void dc_callvm_argFloat_sparc64(DCCallVM* in_self, DCfloat x)
80
+ static void dc_callvm_argFloat_v9(DCCallVM* in_self, DCfloat x)
112
81
  {
113
- DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
114
- if (self->mFloatRegs < FREGS) {
115
- self->mUseSingleFlags |= 1<<self->mFloatRegs;
116
- * ((float*)dcVecAt(&self->mVecHead,(IREGS+FREGS)*8 + (self->mFloatRegs++)*4)) = x;
117
- }
118
-
119
- if (self->mIntRegs < IREGS) {
120
- self->mIntRegs++;
121
- } else {
122
- union {
123
- DCdouble d;
124
- DClonglong l;
125
- DCfloat f[2];
126
- } u;
127
- u.f[1] = x;
128
- dcVecAppend(&self->mVecHead, &u.l, sizeof(DClonglong));
129
- }
130
- }
131
-
132
- #if 0
133
- /* call: delegate to default call kernel */
134
- static void dc_callvm_call_sparc64(DCCallVM* in_self, DCpointer target)
135
- {
136
- DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
137
- dcCall_sparc64(target, dcVecSize(&self->mVecHead), dcVecData(&self->mVecHead));
82
+ union {
83
+ double d;
84
+ float f[2];
85
+ } u;
86
+ u.f[1] = x;
87
+ dc_callvm_argDouble_v9(in_self, u.d);
138
88
  }
139
- #endif
140
89
 
141
- static void dc_callvm_mode_sparc64(DCCallVM* in_self, DCint mode);
90
+ static void dc_callvm_mode_v9(DCCallVM* in_self, DCint mode);
142
91
 
143
- DCCallVM_vt gVT_sparc64_ellipsis =
92
+ DCCallVM_vt gVT_v9_ellipsis =
144
93
  {
145
- &dc_callvm_free_sparc64,
146
- &dc_callvm_reset_sparc64,
147
- &dc_callvm_mode_sparc64,
148
- &dc_callvm_argBool_sparc64,
149
- &dc_callvm_argChar_sparc64,
150
- &dc_callvm_argShort_sparc64,
151
- &dc_callvm_argInt_sparc64,
152
- &dc_callvm_argLong_sparc64,
153
- &dc_callvm_argLongLong_sparc64,
154
- &dc_callvm_argFloat_sparc64_ellipsis,
155
- &dc_callvm_argDouble_sparc64_ellipsis,
156
- &dc_callvm_argPointer_sparc64,
94
+ &dc_callvm_free_v9,
95
+ &dc_callvm_reset_v9,
96
+ &dc_callvm_mode_v9,
97
+ &dc_callvm_argBool_v9,
98
+ &dc_callvm_argChar_v9,
99
+ &dc_callvm_argShort_v9,
100
+ &dc_callvm_argInt_v9,
101
+ &dc_callvm_argLong_v9,
102
+ &dc_callvm_argLongLong_v9,
103
+ &dc_callvm_argFloat_v9_ellipsis,
104
+ &dc_callvm_argDouble_v9_ellipsis,
105
+ &dc_callvm_argPointer_v9,
157
106
  NULL /* argStruct */,
158
- (DCvoidvmfunc*) &dcCall_sparc64,
159
- (DCboolvmfunc*) &dcCall_sparc64,
160
- (DCcharvmfunc*) &dcCall_sparc64,
161
- (DCshortvmfunc*) &dcCall_sparc64,
162
- (DCintvmfunc*) &dcCall_sparc64,
163
- (DClongvmfunc*) &dcCall_sparc64,
164
- (DClonglongvmfunc*) &dcCall_sparc64,
165
- (DCfloatvmfunc*) &dcCall_sparc64,
166
- (DCdoublevmfunc*) &dcCall_sparc64,
167
- (DCpointervmfunc*) &dcCall_sparc64,
107
+ (DCvoidvmfunc*) &dcCall_v9,
108
+ (DCboolvmfunc*) &dcCall_v9,
109
+ (DCcharvmfunc*) &dcCall_v9,
110
+ (DCshortvmfunc*) &dcCall_v9,
111
+ (DCintvmfunc*) &dcCall_v9,
112
+ (DClongvmfunc*) &dcCall_v9,
113
+ (DClonglongvmfunc*) &dcCall_v9,
114
+ (DCfloatvmfunc*) &dcCall_v9,
115
+ (DCdoublevmfunc*) &dcCall_v9,
116
+ (DCpointervmfunc*) &dcCall_v9,
168
117
  NULL /* callStruct */
169
118
  };
170
119
 
171
120
  /* CallVM virtual table. */
172
- DCCallVM_vt gVT_sparc64 =
121
+ DCCallVM_vt gVT_v9 =
173
122
  {
174
- &dc_callvm_free_sparc64,
175
- &dc_callvm_reset_sparc64,
176
- &dc_callvm_mode_sparc64,
177
- &dc_callvm_argBool_sparc64,
178
- &dc_callvm_argChar_sparc64,
179
- &dc_callvm_argShort_sparc64,
180
- &dc_callvm_argInt_sparc64,
181
- &dc_callvm_argLong_sparc64,
182
- &dc_callvm_argLongLong_sparc64,
183
- &dc_callvm_argFloat_sparc64,
184
- &dc_callvm_argDouble_sparc64,
185
- &dc_callvm_argPointer_sparc64,
123
+ &dc_callvm_free_v9,
124
+ &dc_callvm_reset_v9,
125
+ &dc_callvm_mode_v9,
126
+ &dc_callvm_argBool_v9,
127
+ &dc_callvm_argChar_v9,
128
+ &dc_callvm_argShort_v9,
129
+ &dc_callvm_argInt_v9,
130
+ &dc_callvm_argLong_v9,
131
+ &dc_callvm_argLongLong_v9,
132
+ &dc_callvm_argFloat_v9,
133
+ &dc_callvm_argDouble_v9,
134
+ &dc_callvm_argPointer_v9,
186
135
  NULL /* argStruct */,
187
- (DCvoidvmfunc*) &dcCall_sparc64,
188
- (DCboolvmfunc*) &dcCall_sparc64,
189
- (DCcharvmfunc*) &dcCall_sparc64,
190
- (DCshortvmfunc*) &dcCall_sparc64,
191
- (DCintvmfunc*) &dcCall_sparc64,
192
- (DClongvmfunc*) &dcCall_sparc64,
193
- (DClonglongvmfunc*) &dcCall_sparc64,
194
- (DCfloatvmfunc*) &dcCall_sparc64,
195
- (DCdoublevmfunc*) &dcCall_sparc64,
196
- (DCpointervmfunc*) &dcCall_sparc64,
136
+ (DCvoidvmfunc*) &dcCall_v9,
137
+ (DCboolvmfunc*) &dcCall_v9,
138
+ (DCcharvmfunc*) &dcCall_v9,
139
+ (DCshortvmfunc*) &dcCall_v9,
140
+ (DCintvmfunc*) &dcCall_v9,
141
+ (DClongvmfunc*) &dcCall_v9,
142
+ (DClonglongvmfunc*) &dcCall_v9,
143
+ (DCfloatvmfunc*) &dcCall_v9,
144
+ (DCdoublevmfunc*) &dcCall_v9,
145
+ (DCpointervmfunc*) &dcCall_v9,
197
146
  NULL /* callStruct */
198
147
  };
199
148
 
200
149
  /* mode: only a single mode available currently. */
201
- static void dc_callvm_mode_sparc64(DCCallVM* in_self, DCint mode)
150
+ static void dc_callvm_mode_v9(DCCallVM* in_self, DCint mode)
202
151
  {
152
+ DCCallVM_v9* self = (DCCallVM_v9*)in_self;
153
+ DCCallVM_vt* vt;
154
+
203
155
  switch(mode) {
204
156
  case DC_CALL_C_DEFAULT:
205
- case DC_CALL_C_ELLIPSIS:
206
157
  case DC_CALL_C_SPARC64:
207
- in_self->mVTpointer = &gVT_sparc64;
158
+ case DC_CALL_C_ELLIPSIS:
159
+ vt = &gVT_v9;
208
160
  break;
209
161
  case DC_CALL_C_ELLIPSIS_VARARGS:
210
- in_self->mVTpointer = &gVT_sparc64_ellipsis;
162
+ vt = &gVT_v9_ellipsis;
211
163
  break;
212
164
  default:
213
- in_self->mError = DC_ERROR_UNSUPPORTED_MODE;
214
- break;
165
+ self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE;
166
+ return;
215
167
  }
168
+ dc_callvm_base_init(&self->mInterface, vt);
216
169
  }
217
170
 
218
-
219
171
  /* Public API. */
220
172
  DCCallVM* dcNewCallVM(DCsize size)
221
173
  {
222
- return dc_callvm_new_sparc64(&gVT_sparc64,size);
223
- }
174
+ DCCallVM_v9* p = (DCCallVM_v9*)dcAllocMem(sizeof(DCCallVM_v9)+size);
224
175
 
225
- #if 0
226
- /* Load integer 32-bit. */
227
- static void dc_callvm_argInt_sparc64(DCCallVM* in_self, DCint x)
228
- {
229
- DCCallVM_sparc64* self = (DCCallVM_sparc64*)in_self;
230
- dcVecAppend(&self->mVecHead, &x, sizeof(DCint));
231
- }
176
+ dc_callvm_mode_v9((DCCallVM*)p, DC_CALL_C_DEFAULT);
232
177
 
233
- /* we propagate Bool,Char,Short,Int to LongLong. */
178
+ dcVecInit(&p->mVecHead,size);
179
+ dc_callvm_reset_v9(&p->mInterface);
234
180
 
235
- static void dc_callvm_argBool_sparc64(DCCallVM* in_self, DCbool x) { dc_callvm_argInt_sparc64(in_self, (DCint)x); }
236
- static void dc_callvm_argChar_sparc64(DCCallVM* in_self, DCchar x) { dc_callvm_argInt_sparc64(in_self, (DCint)x); }
237
- static void dc_callvm_argShort_sparc64(DCCallVM* in_self, DCshort x) { dc_callvm_argInt_sparc64(in_self, (DCint)x); }
238
- #endif
181
+ return (DCCallVM*)p;
182
+ }
239
183
 
@@ -3,10 +3,10 @@
3
3
  Package: dyncall
4
4
  Library: dyncall
5
5
  File: dyncall/dyncall_callvm_sparc64.h
6
- Description: Call VM for sparc64 processor architecture.
6
+ Description: Call VM for sparc64 (v9) ABI.
7
7
  License:
8
8
 
9
- Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
9
+ Copyright (c) 2011-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
@@ -24,25 +24,19 @@
24
24
 
25
25
 
26
26
 
27
- #ifndef DYNCALL_CALLVM_SPARC_H
28
- #define DYNCALL_CALLVM_SPARC_H
27
+ #ifndef DYNCALL_CALLVM_SPARC_V9_H
28
+ #define DYNCALL_CALLVM_SPARC_V9_H
29
29
 
30
30
  #include "dyncall_callvm.h"
31
31
  #include "dyncall_vector.h"
32
32
 
33
- typedef struct DCCallVM_sparc64_ DCCallVM_sparc64;
34
- struct DCCallVM_sparc64_
33
+ typedef struct
35
34
  {
36
- DCCallVM mInterface; /* 12:8 -> 16 */
37
- int mIntRegs; /* 16 */
38
- int mFloatRegs; /* 20 */
39
- unsigned int mUseSingleFlags; /* 24 */
40
- DCVecHead mVecHead; /* 36:16, 28 => 40 */
41
- };
42
-
43
- DCCallVM* dcNewCallVM_sparc64(DCsize size);
44
-
45
- #endif /* DYNCALL_CALLVM_SPARC64_H */
46
-
35
+ DCCallVM mInterface; /* 0: +12:8 = 16*/
36
+ DCVecHead mVecHead; /* 16 152: mTotalSize +8 */
37
+ /* 24 160: mSize +8 */
38
+ /* 32 168: mData */
39
+ } DCCallVM_v9;
47
40
 
41
+ #endif /* DYNCALL_CALLVM_SPARC_V9_H */
48
42