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
@@ -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