rbdc 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (266) hide show
  1. data/bindings/ruby/rbdc/extconf.rb +57 -0
  2. data/bindings/ruby/rbdc/rbdc.c +304 -0
  3. data/dyncall/AUTHORS +4 -0
  4. data/dyncall/BUGS +3 -0
  5. data/dyncall/CMakeLists.txt +79 -0
  6. data/dyncall/ChangeLog +165 -0
  7. data/dyncall/LICENSE +15 -0
  8. data/dyncall/Makefile.M +15 -0
  9. data/dyncall/Makefile.embedded +71 -0
  10. data/dyncall/Makefile.generic +36 -0
  11. data/dyncall/Nmakefile +45 -0
  12. data/dyncall/README +92 -0
  13. data/dyncall/ToDo +114 -0
  14. data/dyncall/autovar/LICENSE.txt +15 -0
  15. data/dyncall/autovar/README.txt +69 -0
  16. data/dyncall/autovar/autovar_ABI.h +44 -0
  17. data/dyncall/autovar/autovar_ARCH.h +56 -0
  18. data/dyncall/autovar/autovar_CC.h +46 -0
  19. data/dyncall/autovar/autovar_OS.h +78 -0
  20. data/dyncall/autovar/autovar_OSFAMILY.h +39 -0
  21. data/dyncall/buildsys/cmake/Modules/FindDynCall.cmake +43 -0
  22. data/dyncall/buildsys/cmake/Modules/FindDynCallback.cmake +43 -0
  23. data/dyncall/buildsys/cmake/Modules/FindDynLoad.cmake +45 -0
  24. data/dyncall/buildsys/cmake/Modules/UseLATEX.cmake +811 -0
  25. data/dyncall/buildsys/dynmake/Makefile.base.M +82 -0
  26. data/dyncall/buildsys/dynmake/dynmake.bat +2 -0
  27. data/dyncall/buildsys/dynmake/dynmake.sh +4 -0
  28. data/dyncall/buildsys/lua/Makefile +10 -0
  29. data/dyncall/buildsys/lua/README.txt +4 -0
  30. data/dyncall/buildsys/lua/bootstrap.sh +34 -0
  31. data/dyncall/buildsys/lua/cleanup.sh +6 -0
  32. data/dyncall/buildsys/lua/mkfile +34 -0
  33. data/dyncall/buildsys/lua/setenv.sh +4 -0
  34. data/dyncall/buildsys/mk/app.mk +30 -0
  35. data/dyncall/buildsys/mk/dirs.mk +27 -0
  36. data/dyncall/buildsys/mk/epilog.mk +30 -0
  37. data/dyncall/buildsys/mk/lib.mk +23 -0
  38. data/dyncall/buildsys/mk/pcc.mk +60 -0
  39. data/dyncall/buildsys/mk/prolog.mk +35 -0
  40. data/dyncall/buildsys/nmake/common.nmake +61 -0
  41. data/dyncall/buildsys/nmake/epilog.nmake +28 -0
  42. data/dyncall/buildsys/nmake/prolog.nmake +76 -0
  43. data/dyncall/buildsys/nmake/tool_gcc.nmake +82 -0
  44. data/dyncall/buildsys/nmake/tool_msvc.nmake +67 -0
  45. data/dyncall/buildsys/scripts/batch-build-linux.sh +11 -0
  46. data/dyncall/buildsys/scripts/batch-build-minix.sh +11 -0
  47. data/dyncall/buildsys/scripts/batch-build-psp.sh +11 -0
  48. data/dyncall/buildsys/scripts/conf-nds.bat +41 -0
  49. data/dyncall/buildsys/scripts/setenv-cross-ios.sh +8 -0
  50. data/dyncall/buildsys/scripts/setenv-sdk-ios.sh +22 -0
  51. data/dyncall/buildsys/vs2005/dyncall/dyncall.vcproj +245 -0
  52. data/dyncall/buildsys/vs2005/test_plain/test_plain.vcproj +202 -0
  53. data/dyncall/buildsys/vs2005/vs2005.sln +29 -0
  54. data/dyncall/configure +152 -0
  55. data/dyncall/configure.bat +157 -0
  56. data/dyncall/configure.rc +234 -0
  57. data/dyncall/dynMakefile +4 -0
  58. data/dyncall/dyncall/CMakeLists.txt +53 -0
  59. data/dyncall/dyncall/DynCallConfig.cmake +3 -0
  60. data/dyncall/dyncall/Makefile.M +10 -0
  61. data/dyncall/dyncall/Makefile.embedded +20 -0
  62. data/dyncall/dyncall/Makefile.generic +16 -0
  63. data/dyncall/dyncall/Nmakefile +62 -0
  64. data/dyncall/dyncall/README-Developer.txt +45 -0
  65. data/dyncall/dyncall/README.txt +65 -0
  66. data/dyncall/dyncall/TODO +9 -0
  67. data/dyncall/dyncall/dynMakefile +4 -0
  68. data/dyncall/dyncall/dyncall.3 +189 -0
  69. data/dyncall/dyncall/dyncall.h +135 -0
  70. data/dyncall/dyncall/dyncall_alloc.h +40 -0
  71. data/dyncall/dyncall/dyncall_api.c +167 -0
  72. data/dyncall/dyncall/dyncall_call.S +72 -0
  73. data/dyncall/dyncall/dyncall_call_arm32_arm.S +80 -0
  74. data/dyncall/dyncall/dyncall_call_arm32_arm.h +61 -0
  75. data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.S +96 -0
  76. data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.h +44 -0
  77. data/dyncall/dyncall/dyncall_call_arm32_thumb.h +65 -0
  78. data/dyncall/dyncall/dyncall_call_arm32_thumb_apple.s +80 -0
  79. data/dyncall/dyncall/dyncall_call_arm32_thumb_armhf.S +121 -0
  80. data/dyncall/dyncall/dyncall_call_arm32_thumb_gas.s +101 -0
  81. data/dyncall/dyncall/dyncall_call_mips.h +50 -0
  82. data/dyncall/dyncall/dyncall_call_mips_eabi.h +61 -0
  83. data/dyncall/dyncall/dyncall_call_mips_eabi_gas.s +115 -0
  84. data/dyncall/dyncall/dyncall_call_mips_gas.S +36 -0
  85. data/dyncall/dyncall/dyncall_call_mips_n32.h +67 -0
  86. data/dyncall/dyncall/dyncall_call_mips_n32_gas.s +192 -0
  87. data/dyncall/dyncall/dyncall_call_mips_n64.h +67 -0
  88. data/dyncall/dyncall/dyncall_call_mips_n64_gas.s +192 -0
  89. data/dyncall/dyncall/dyncall_call_mips_o32.h +70 -0
  90. data/dyncall/dyncall/dyncall_call_mips_o32_gas.s +109 -0
  91. data/dyncall/dyncall/dyncall_call_ppc32.S +266 -0
  92. data/dyncall/dyncall/dyncall_call_ppc32.h +62 -0
  93. data/dyncall/dyncall/dyncall_call_sparc.S +192 -0
  94. data/dyncall/dyncall/dyncall_call_sparc.h +42 -0
  95. data/dyncall/dyncall/dyncall_call_sparc64.S +361 -0
  96. data/dyncall/dyncall/dyncall_call_sparc64.h +42 -0
  97. data/dyncall/dyncall/dyncall_call_sparc_v9.S +220 -0
  98. data/dyncall/dyncall/dyncall_call_sparc_v9.h +42 -0
  99. data/dyncall/dyncall/dyncall_call_x64-att.S +146 -0
  100. data/dyncall/dyncall/dyncall_call_x64.S +149 -0
  101. data/dyncall/dyncall/dyncall_call_x64.h +63 -0
  102. data/dyncall/dyncall/dyncall_call_x64_generic_masm.asm +70 -0
  103. data/dyncall/dyncall/dyncall_call_x86.S +238 -0
  104. data/dyncall/dyncall/dyncall_call_x86.h +70 -0
  105. data/dyncall/dyncall/dyncall_call_x86_8a.s +127 -0
  106. data/dyncall/dyncall/dyncall_call_x86_generic_masm.asm +136 -0
  107. data/dyncall/dyncall/dyncall_call_x86_nasm.asm +234 -0
  108. data/dyncall/dyncall/dyncall_callf.c +112 -0
  109. data/dyncall/dyncall/dyncall_callf.h +52 -0
  110. data/dyncall/dyncall/dyncall_callvm.c +68 -0
  111. data/dyncall/dyncall/dyncall_callvm.h +88 -0
  112. data/dyncall/dyncall/dyncall_callvm_arm32_arm.c +250 -0
  113. data/dyncall/dyncall/dyncall_callvm_arm32_arm.h +59 -0
  114. data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.c +204 -0
  115. data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.h +63 -0
  116. data/dyncall/dyncall/dyncall_callvm_arm32_thumb.c +271 -0
  117. data/dyncall/dyncall/dyncall_callvm_arm32_thumb.h +59 -0
  118. data/dyncall/dyncall/dyncall_callvm_base.c +33 -0
  119. data/dyncall/dyncall/dyncall_callvm_mips.c +40 -0
  120. data/dyncall/dyncall/dyncall_callvm_mips.h +37 -0
  121. data/dyncall/dyncall/dyncall_callvm_mips_eabi.c +181 -0
  122. data/dyncall/dyncall/dyncall_callvm_mips_eabi.h +61 -0
  123. data/dyncall/dyncall/dyncall_callvm_mips_n32.c +268 -0
  124. data/dyncall/dyncall/dyncall_callvm_mips_n64.c +268 -0
  125. data/dyncall/dyncall/dyncall_callvm_mips_n64.h +53 -0
  126. data/dyncall/dyncall/dyncall_callvm_mips_o32.c +235 -0
  127. data/dyncall/dyncall/dyncall_callvm_mips_o32.h +45 -0
  128. data/dyncall/dyncall/dyncall_callvm_ppc32.c +372 -0
  129. data/dyncall/dyncall/dyncall_callvm_ppc32.h +61 -0
  130. data/dyncall/dyncall/dyncall_callvm_sparc.c +155 -0
  131. data/dyncall/dyncall/dyncall_callvm_sparc.h +44 -0
  132. data/dyncall/dyncall/dyncall_callvm_sparc64.c +239 -0
  133. data/dyncall/dyncall/dyncall_callvm_sparc64.h +47 -0
  134. data/dyncall/dyncall/dyncall_callvm_sparc_v9.c +182 -0
  135. data/dyncall/dyncall/dyncall_callvm_sparc_v9.h +45 -0
  136. data/dyncall/dyncall/dyncall_callvm_x64.c +228 -0
  137. data/dyncall/dyncall/dyncall_callvm_x64.h +111 -0
  138. data/dyncall/dyncall/dyncall_callvm_x86.c +667 -0
  139. data/dyncall/dyncall/dyncall_callvm_x86.h +75 -0
  140. data/dyncall/dyncall/dyncall_config.h +46 -0
  141. data/dyncall/dyncall/dyncall_macros.h +248 -0
  142. data/dyncall/dyncall/dyncall_signature.h +71 -0
  143. data/dyncall/dyncall/dyncall_struct.c +255 -0
  144. data/dyncall/dyncall/dyncall_struct.h +69 -0
  145. data/dyncall/dyncall/dyncall_types.h +74 -0
  146. data/dyncall/dyncall/dyncall_utils.h +38 -0
  147. data/dyncall/dyncall/dyncall_value.h +73 -0
  148. data/dyncall/dyncall/dyncall_vector.c +52 -0
  149. data/dyncall/dyncall/dyncall_vector.h +56 -0
  150. data/dyncall/dyncall/gen-masm.sh +7 -0
  151. data/dyncall/dyncall/mkfile +29 -0
  152. data/dyncall/dyncallback/CMakeLists.txt +55 -0
  153. data/dyncall/dyncallback/DynCallbackConfig.cmake +2 -0
  154. data/dyncall/dyncallback/Makefile.M +10 -0
  155. data/dyncall/dyncallback/Makefile.embedded +15 -0
  156. data/dyncall/dyncallback/Makefile.generic +20 -0
  157. data/dyncall/dyncallback/Nmakefile +71 -0
  158. data/dyncall/dyncallback/README.txt +9 -0
  159. data/dyncall/dyncallback/TODO +4 -0
  160. data/dyncall/dyncallback/dynMakefile +4 -0
  161. data/dyncall/dyncallback/dyncall_alloc_wx.c +35 -0
  162. data/dyncall/dyncallback/dyncall_alloc_wx.h +46 -0
  163. data/dyncall/dyncallback/dyncall_alloc_wx_malloc.c +40 -0
  164. data/dyncall/dyncallback/dyncall_alloc_wx_mmap.c +42 -0
  165. data/dyncall/dyncallback/dyncall_alloc_wx_win32.c +42 -0
  166. data/dyncall/dyncallback/dyncall_args.c +45 -0
  167. data/dyncall/dyncallback/dyncall_args.h +65 -0
  168. data/dyncall/dyncallback/dyncall_args_arm32_arm.c +112 -0
  169. data/dyncall/dyncallback/dyncall_args_arm32_arm.h +40 -0
  170. data/dyncall/dyncallback/dyncall_args_arm32_thumb.c +29 -0
  171. data/dyncall/dyncallback/dyncall_args_arm32_thumb.h +32 -0
  172. data/dyncall/dyncallback/dyncall_args_mips.c +81 -0
  173. data/dyncall/dyncallback/dyncall_args_mips.h +41 -0
  174. data/dyncall/dyncallback/dyncall_args_ppc32.c +88 -0
  175. data/dyncall/dyncallback/dyncall_args_ppc32.h +41 -0
  176. data/dyncall/dyncallback/dyncall_args_sparc32.c +41 -0
  177. data/dyncall/dyncallback/dyncall_args_sparc32.h +37 -0
  178. data/dyncall/dyncallback/dyncall_args_sparc64.c +41 -0
  179. data/dyncall/dyncallback/dyncall_args_sparc64.h +37 -0
  180. data/dyncall/dyncallback/dyncall_args_x64.c +73 -0
  181. data/dyncall/dyncallback/dyncall_args_x64.h +44 -0
  182. data/dyncall/dyncallback/dyncall_args_x86.c +121 -0
  183. data/dyncall/dyncallback/dyncall_args_x86.h +58 -0
  184. data/dyncall/dyncallback/dyncall_callback.c +45 -0
  185. data/dyncall/dyncallback/dyncall_callback.h +51 -0
  186. data/dyncall/dyncallback/dyncall_callback_arch.S +71 -0
  187. data/dyncall/dyncallback/dyncall_callback_arm32_arm.c +63 -0
  188. data/dyncall/dyncallback/dyncall_callback_arm32_arm.h +45 -0
  189. data/dyncall/dyncallback/dyncall_callback_arm32_arm_apple.s +73 -0
  190. data/dyncall/dyncallback/dyncall_callback_arm32_arm_gas.s +73 -0
  191. data/dyncall/dyncallback/dyncall_callback_arm32_thumb.c +29 -0
  192. data/dyncall/dyncallback/dyncall_callback_arm32_thumb.h +33 -0
  193. data/dyncall/dyncallback/dyncall_callback_arm32_thumb_apple.s +32 -0
  194. data/dyncall/dyncallback/dyncall_callback_arm32_thumb_gas.s +32 -0
  195. data/dyncall/dyncallback/dyncall_callback_mips.c +61 -0
  196. data/dyncall/dyncallback/dyncall_callback_mips.h +42 -0
  197. data/dyncall/dyncallback/dyncall_callback_ppc32.S +33 -0
  198. data/dyncall/dyncallback/dyncall_callback_ppc32.c +60 -0
  199. data/dyncall/dyncallback/dyncall_callback_ppc32.h +43 -0
  200. data/dyncall/dyncallback/dyncall_callback_ppc32_apple.s +180 -0
  201. data/dyncall/dyncallback/dyncall_callback_sparc32.c +57 -0
  202. data/dyncall/dyncallback/dyncall_callback_sparc32.h +43 -0
  203. data/dyncall/dyncallback/dyncall_callback_sparc32.s +30 -0
  204. data/dyncall/dyncallback/dyncall_callback_sparc64.c +57 -0
  205. data/dyncall/dyncallback/dyncall_callback_sparc64.s +30 -0
  206. data/dyncall/dyncallback/dyncall_callback_x64.S +187 -0
  207. data/dyncall/dyncallback/dyncall_callback_x64.c +69 -0
  208. data/dyncall/dyncallback/dyncall_callback_x64.h +44 -0
  209. data/dyncall/dyncallback/dyncall_callback_x64_apple.s +122 -0
  210. data/dyncall/dyncallback/dyncall_callback_x64_gas.s +119 -0
  211. data/dyncall/dyncallback/dyncall_callback_x64_gas_w64.s +102 -0
  212. data/dyncall/dyncallback/dyncall_callback_x64_masm.asm +89 -0
  213. data/dyncall/dyncallback/dyncall_callback_x86.S +115 -0
  214. data/dyncall/dyncallback/dyncall_callback_x86.c +281 -0
  215. data/dyncall/dyncallback/dyncall_callback_x86.h +49 -0
  216. data/dyncall/dyncallback/dyncall_callback_x86_8a.s +100 -0
  217. data/dyncall/dyncallback/dyncall_callback_x86_masm.asm +74 -0
  218. data/dyncall/dyncallback/dyncall_thunk.c +47 -0
  219. data/dyncall/dyncallback/dyncall_thunk.h +84 -0
  220. data/dyncall/dyncallback/dyncall_thunk_arm32_arm.c +45 -0
  221. data/dyncall/dyncallback/dyncall_thunk_arm32_arm.h +40 -0
  222. data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.c +29 -0
  223. data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.h +35 -0
  224. data/dyncall/dyncallback/dyncall_thunk_mips.c +52 -0
  225. data/dyncall/dyncallback/dyncall_thunk_mips.h +37 -0
  226. data/dyncall/dyncallback/dyncall_thunk_ppc32.c +51 -0
  227. data/dyncall/dyncallback/dyncall_thunk_ppc32.h +40 -0
  228. data/dyncall/dyncallback/dyncall_thunk_sparc32.c +32 -0
  229. data/dyncall/dyncallback/dyncall_thunk_sparc32.h +36 -0
  230. data/dyncall/dyncallback/dyncall_thunk_sparc64.c +32 -0
  231. data/dyncall/dyncallback/dyncall_thunk_sparc64.h +36 -0
  232. data/dyncall/dyncallback/dyncall_thunk_x64.c +48 -0
  233. data/dyncall/dyncallback/dyncall_thunk_x64.h +39 -0
  234. data/dyncall/dyncallback/dyncall_thunk_x86.c +44 -0
  235. data/dyncall/dyncallback/dyncall_thunk_x86.h +39 -0
  236. data/dyncall/dyncallback/dyncallback.3 +134 -0
  237. data/dyncall/dyncallback/gen-masm.sh +8 -0
  238. data/dyncall/dyncallback/mkfile +29 -0
  239. data/dyncall/dynload/CMakeLists.txt +25 -0
  240. data/dyncall/dynload/DynLoadConfig.cmake +3 -0
  241. data/dyncall/dynload/Makefile.M +10 -0
  242. data/dyncall/dynload/Makefile.embedded +22 -0
  243. data/dyncall/dynload/Makefile.generic +18 -0
  244. data/dyncall/dynload/Nmakefile +57 -0
  245. data/dyncall/dynload/README.txt +113 -0
  246. data/dyncall/dynload/TODO +20 -0
  247. data/dyncall/dynload/dynMakefile +4 -0
  248. data/dyncall/dynload/dynload.3 +64 -0
  249. data/dyncall/dynload/dynload.c +38 -0
  250. data/dyncall/dynload/dynload.h +65 -0
  251. data/dyncall/dynload/dynload_alloc.h +40 -0
  252. data/dyncall/dynload/dynload_darwin.c +89 -0
  253. data/dyncall/dynload/dynload_syms.c +38 -0
  254. data/dyncall/dynload/dynload_syms_elf.c +214 -0
  255. data/dyncall/dynload/dynload_syms_mach-o.c +167 -0
  256. data/dyncall/dynload/dynload_syms_pe.c +109 -0
  257. data/dyncall/dynload/dynload_unix.c +57 -0
  258. data/dyncall/dynload/dynload_windows.c +59 -0
  259. data/dyncall/mkfile +36 -0
  260. data/dyncall/portasm/README.txt +42 -0
  261. data/dyncall/portasm/gen-masm.sh +3 -0
  262. data/dyncall/portasm/portasm-arm.S +36 -0
  263. data/dyncall/portasm/portasm-ppc.S +98 -0
  264. data/dyncall/portasm/portasm-x64-att.S +155 -0
  265. data/dyncall/portasm/portasm-x86.S +127 -0
  266. metadata +311 -0
@@ -0,0 +1,268 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncall
5
+ File: dyncall/dyncall_callvm_mips_n64.c
6
+ Description: mips "n64" ABI callvm implementation
7
+ License:
8
+
9
+ Copyright (c) 2007-2011 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
+ /*
28
+
29
+ dyncall callvm for 64bit MIPS family of processors
30
+
31
+ SUPPORTED CALLING CONVENTIONS
32
+ n64
33
+
34
+ REVISION
35
+ 2010/05/30 initial
36
+
37
+ in contrast to o32, there is no space reserved for parameters
38
+ passed over registers.
39
+ more registers are used and registers are always used.
40
+
41
+ stack is always 16-byte aligned at entry (call to call-kernel automatically
42
+ aligns argument stack.
43
+
44
+ integer and float register-file is interleaved either taking one slot up
45
+ skipping the other.
46
+
47
+
48
+ */
49
+
50
+
51
+ #include "dyncall_callvm_mips_n64.h"
52
+ #include "dyncall_alloc.h"
53
+ #include "dyncall_utils.h"
54
+
55
+ static void dc_callvm_reset_mips_n64(DCCallVM* in_self)
56
+ {
57
+ DCCallVM_mips_n64* self = (DCCallVM_mips_n64*)in_self;
58
+ dcVecReset(&self->mVecHead);
59
+ self->mRegCount = 0;
60
+ self->mRegData.mUseDouble = 0LL;
61
+ }
62
+
63
+ static DCCallVM* dc_callvm_new_mips_n64(DCCallVM_vt* vt, DCsize size)
64
+ {
65
+ DCCallVM_mips_n64* self = (DCCallVM_mips_n64*)dcAllocMem(sizeof(DCCallVM_mips_n64)+size);
66
+ dc_callvm_base_init(&self->mInterface, vt);
67
+ dcVecInit(&self->mVecHead, size);
68
+ dc_callvm_reset_mips_n64( (DCCallVM*) self );
69
+ return (DCCallVM*)self;
70
+ }
71
+
72
+
73
+ static void dc_callvm_free_mips_n64(DCCallVM* in_self)
74
+ {
75
+ dcFreeMem(in_self);
76
+ }
77
+
78
+ /* pass arguments :
79
+
80
+ - promote to 64-bit integer.
81
+ - fill up integers and float - left-to-right otherwise go over stack.
82
+ */
83
+
84
+ /* arg int -- fillup 64-bit integer register file OR push on stack */
85
+
86
+ static void dc_callvm_argLongLong_mips_n64(DCCallVM* in_self, DClonglong Lv)
87
+ {
88
+ DCCallVM_mips_n64* self = (DCCallVM_mips_n64*)in_self;
89
+ /* fillup integer register file */
90
+ if (self->mRegCount < 8)
91
+ self->mRegData.mIntData[self->mRegCount++] = Lv;
92
+ else
93
+ dcVecAppend(&self->mVecHead, &Lv, sizeof(DClonglong));
94
+ }
95
+
96
+ static void dc_callvm_argInt_mips_n64(DCCallVM* in_self, DCint i)
97
+ {
98
+ dc_callvm_argLongLong_mips_n64(in_self, (DClonglong) i );
99
+ }
100
+
101
+ static void dc_callvm_argPointer_mips_n64(DCCallVM* in_self, DCpointer x)
102
+ {
103
+ dc_callvm_argLongLong_mips_n64(in_self, * (DClonglong*) &x );
104
+ }
105
+
106
+ static void dc_callvm_argBool_mips_n64(DCCallVM* in_self, DCbool x)
107
+ {
108
+ dc_callvm_argLongLong_mips_n64(in_self, (DClonglong)x);
109
+ }
110
+
111
+ static void dc_callvm_argChar_mips_n64(DCCallVM* in_self, DCchar x)
112
+ {
113
+ dc_callvm_argLongLong_mips_n64(in_self, (DClonglong)x);
114
+ }
115
+
116
+ static void dc_callvm_argShort_mips_n64(DCCallVM* in_self, DCshort x)
117
+ {
118
+ dc_callvm_argLongLong_mips_n64(in_self, (DClonglong)x);
119
+ }
120
+
121
+ static void dc_callvm_argLong_mips_n64(DCCallVM* in_self, DClong x)
122
+ {
123
+ dc_callvm_argLongLong_mips_n64(in_self, (DClonglong)x);
124
+ }
125
+
126
+ static void dc_callvm_argDouble_mips_n64(DCCallVM* in_self, DCdouble x)
127
+ {
128
+ DCCallVM_mips_n64* self = (DCCallVM_mips_n64*)in_self;
129
+ if (self->mRegCount < 8) {
130
+ self->mRegData.mUseDouble |= 1<<( self->mRegCount );
131
+ self->mRegData.mFloatData[self->mRegCount++].d = x;
132
+ } else {
133
+ dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble) );
134
+ }
135
+ }
136
+
137
+ static void dc_callvm_argFloat_mips_n64(DCCallVM* in_self, DCfloat x)
138
+ {
139
+ DCCallVM_mips_n64* self = (DCCallVM_mips_n64*)in_self;
140
+ if (self->mRegCount < 8) {
141
+ /*self->mRegData.mFloatData[self->mRegCount++].d = (DCdouble) x;*/
142
+ self->mRegData.mFloatData[self->mRegCount++].f = x;
143
+ } else {
144
+ dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat) );
145
+ dcVecSkip(&self->mVecHead, sizeof(DCfloat) );
146
+ }
147
+ }
148
+
149
+
150
+ /* Ellipsis calls:
151
+ - float is promoted to double (due to ANSI C).
152
+ - double is passed via integer register-file (due to MIPS ABI).
153
+ */
154
+
155
+ static void dc_callvm_argDouble_mips_n64_ellipsis(DCCallVM* in_self, DCdouble x)
156
+ {
157
+ dc_callvm_argLongLong_mips_n64(in_self, * ( (DClonglong*) &x ) );
158
+ }
159
+
160
+ static void dc_callvm_argFloat_mips_n64_ellipsis(DCCallVM* in_self, DCfloat x)
161
+ {
162
+ dc_callvm_argDouble_mips_n64_ellipsis(in_self, (DCdouble) x );
163
+ }
164
+
165
+
166
+ /* Call. */
167
+
168
+ void dc_callvm_call_mips_n64(DCCallVM* in_self, DCpointer target)
169
+ {
170
+ DCCallVM_mips_n64* self = (DCCallVM_mips_n64*)in_self;
171
+ /* at minimum provide 16-bytes
172
+ which hold the first four integer register as spill area
173
+ and are automatically loaded to $4-$7
174
+ */
175
+ size_t size = DC_MAX(16, ( ( (unsigned) dcVecSize(&self->mVecHead) ) +7UL ) & (-8UL) );
176
+ dcCall_mips_n64(target, &self->mRegData, size, dcVecData(&self->mVecHead));
177
+ }
178
+
179
+ /* Forward Declaration. */
180
+ static void dc_callvm_mode_mips_n64(DCCallVM* in_self,DCint mode);
181
+
182
+ DCCallVM_vt gVT_mips_n64 =
183
+ {
184
+ &dc_callvm_free_mips_n64
185
+ , &dc_callvm_reset_mips_n64
186
+ , &dc_callvm_mode_mips_n64
187
+ , &dc_callvm_argBool_mips_n64
188
+ , &dc_callvm_argChar_mips_n64
189
+ , &dc_callvm_argShort_mips_n64
190
+ , &dc_callvm_argInt_mips_n64
191
+ , &dc_callvm_argLong_mips_n64
192
+ , &dc_callvm_argLongLong_mips_n64
193
+ , &dc_callvm_argFloat_mips_n64
194
+ , &dc_callvm_argDouble_mips_n64
195
+ , &dc_callvm_argPointer_mips_n64
196
+ , NULL /* argStruct */
197
+ , (DCvoidvmfunc*) &dc_callvm_call_mips_n64
198
+ , (DCboolvmfunc*) &dc_callvm_call_mips_n64
199
+ , (DCcharvmfunc*) &dc_callvm_call_mips_n64
200
+ , (DCshortvmfunc*) &dc_callvm_call_mips_n64
201
+ , (DCintvmfunc*) &dc_callvm_call_mips_n64
202
+ , (DClongvmfunc*) &dc_callvm_call_mips_n64
203
+ , (DClonglongvmfunc*) &dc_callvm_call_mips_n64
204
+ , (DCfloatvmfunc*) &dc_callvm_call_mips_n64
205
+ , (DCdoublevmfunc*) &dc_callvm_call_mips_n64
206
+ , (DCpointervmfunc*) &dc_callvm_call_mips_n64
207
+ , NULL /* callStruct */
208
+ };
209
+
210
+ DCCallVM_vt gVT_mips_n64_ellipsis =
211
+ {
212
+ &dc_callvm_free_mips_n64
213
+ , &dc_callvm_reset_mips_n64
214
+ , &dc_callvm_mode_mips_n64
215
+ , &dc_callvm_argBool_mips_n64
216
+ , &dc_callvm_argChar_mips_n64
217
+ , &dc_callvm_argShort_mips_n64
218
+ , &dc_callvm_argInt_mips_n64
219
+ , &dc_callvm_argLong_mips_n64
220
+ , &dc_callvm_argLongLong_mips_n64
221
+ , &dc_callvm_argFloat_mips_n64_ellipsis
222
+ , &dc_callvm_argDouble_mips_n64_ellipsis
223
+ , &dc_callvm_argPointer_mips_n64
224
+ , NULL /* argStruct */
225
+ , (DCvoidvmfunc*) &dc_callvm_call_mips_n64
226
+ , (DCboolvmfunc*) &dc_callvm_call_mips_n64
227
+ , (DCcharvmfunc*) &dc_callvm_call_mips_n64
228
+ , (DCshortvmfunc*) &dc_callvm_call_mips_n64
229
+ , (DCintvmfunc*) &dc_callvm_call_mips_n64
230
+ , (DClongvmfunc*) &dc_callvm_call_mips_n64
231
+ , (DClonglongvmfunc*) &dc_callvm_call_mips_n64
232
+ , (DCfloatvmfunc*) &dc_callvm_call_mips_n64
233
+ , (DCdoublevmfunc*) &dc_callvm_call_mips_n64
234
+ , (DCpointervmfunc*) &dc_callvm_call_mips_n64
235
+ , NULL /* callStruct */
236
+ };
237
+
238
+ static void dc_callvm_mode_mips_n64(DCCallVM* self,DCint mode)
239
+ {
240
+ switch(mode) {
241
+ case DC_CALL_C_DEFAULT:
242
+ self->mVTpointer = &gVT_mips_n64;
243
+ break;
244
+ case DC_CALL_C_ELLIPSIS:
245
+ self->mVTpointer = &gVT_mips_n64_ellipsis;
246
+ break;
247
+ default:
248
+ self->mError = DC_ERROR_UNSUPPORTED_MODE;
249
+ break;
250
+ }
251
+ }
252
+
253
+ DCCallVM* dcNewCallVM_mips_n64(DCsize size)
254
+ {
255
+ return dc_callvm_new_mips_n64(&gVT_mips_n64, size);
256
+ }
257
+
258
+ DCCallVM* dcNewCallVM_mips_n64_ellipsis(DCsize size)
259
+ {
260
+ return dc_callvm_new_mips_n64(&gVT_mips_n64_ellipsis, size);
261
+ }
262
+
263
+
264
+ DCCallVM* dcNewCallVM(DCsize size)
265
+ {
266
+ return dcNewCallVM_mips_n64(size);
267
+ }
268
+
@@ -0,0 +1,53 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncall
5
+ File: dyncall/dyncall_callvm_mips_n64.h
6
+ Description: mips "n64" ABI callvm C interface.
7
+ License:
8
+
9
+ Copyright (c) 2007-2011 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
+ #ifndef DYNCALL_CALLVM_MIPS_N64_H
28
+ #define DYNCALL_CALLVM_MIPS_N64_H
29
+
30
+ #include "dyncall_call_mips_n64.h"
31
+ #include "dyncall_callvm.h"
32
+ #include "dyncall_vector.h"
33
+
34
+ #ifdef __cplusplus
35
+ extern "C" {
36
+ #endif
37
+
38
+ typedef struct
39
+ {
40
+ DCCallVM mInterface;
41
+ int mRegCount;
42
+ struct DCRegData_mips_n64 mRegData;
43
+ DCVecHead mVecHead;
44
+ } DCCallVM_mips_n64;
45
+
46
+ DCCallVM* dcNewCallVM_mips_n64(DCsize size);
47
+
48
+ #ifdef __cplusplus
49
+ }
50
+ #endif
51
+
52
+ #endif /* DYNCALL_CALLVM_MIPS_N64_H */
53
+
@@ -0,0 +1,235 @@
1
+ /*
2
+
3
+ Package: dyncall
4
+ Library: dyncall
5
+ File: dyncall/dyncall_callvm_mips_o32.c
6
+ Description: mips "o32" ABI callvm implementation
7
+ License:
8
+
9
+ Copyright (c) 2007-2011 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
+ /*
28
+
29
+ dyncall callvm for mips o32 abi
30
+
31
+ REVISION
32
+ 2010/06/03 initial
33
+
34
+ NOTES:
35
+ we need an argument counter for supporting floating point arguments
36
+ correctly.
37
+
38
+ first two (if any) double/float arguments are mapped via a common structure --
39
+ code must take care to write the right float argument indices which
40
+ differs on C and Assembly-side depending on endianness. (therefore
41
+ both sources have two variants 'mipseb' and 'mipsel'.)
42
+ (only for the first two float/double arguments) see float/double handling
43
+
44
+ although, the abi does not expect usage of floats if first argument is
45
+ not floating point, the call kernel can be used universal for all cases.
46
+
47
+ */
48
+
49
+
50
+ #include "dyncall_callvm_mips_o32.h"
51
+ #include "dyncall_alloc.h"
52
+ #include "dyncall_utils.h"
53
+
54
+
55
+ static void dc_callvm_reset_mips_o32(DCCallVM* in_self)
56
+ {
57
+ DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
58
+ dcVecReset(&self->mVecHead);
59
+ self->mArgCount = 0;
60
+ }
61
+
62
+ static DCCallVM* dc_callvm_new_mips_o32(DCCallVM_vt* vt, DCsize size)
63
+ {
64
+ DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)dcAllocMem(sizeof(DCCallVM_mips_o32)+size);
65
+ dc_callvm_base_init(&self->mInterface, vt);
66
+ dcVecInit(&self->mVecHead, size);
67
+ dc_callvm_reset_mips_o32( (DCCallVM*) self );
68
+ return (DCCallVM*)self;
69
+ }
70
+
71
+
72
+ static void dc_callvm_free_mips_o32(DCCallVM* in_self)
73
+ {
74
+ dcFreeMem(in_self);
75
+ }
76
+
77
+ static void dc_callvm_mode_mips_o32(DCCallVM* self, DCint mode)
78
+ {
79
+ switch(mode) {
80
+ case DC_CALL_C_DEFAULT:
81
+ case DC_CALL_C_ELLIPSIS:
82
+ case DC_CALL_C_MIPS32_O32:
83
+ break;
84
+ default:
85
+ self->mError = DC_ERROR_UNSUPPORTED_MODE;
86
+ break;
87
+ }
88
+ }
89
+
90
+ /* arg int -- fillup integer register file OR push on stack */
91
+
92
+ static void dc_callvm_argInt_mips_o32(DCCallVM* in_self, DCint i)
93
+ {
94
+ DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
95
+ dcVecAppend(&self->mVecHead, &i, sizeof(DCint));
96
+ self->mArgCount++;
97
+ }
98
+
99
+ static void dc_callvm_argPointer_mips_o32(DCCallVM* in_self, DCpointer x)
100
+ {
101
+ dc_callvm_argInt_mips_o32(in_self, * (DCint*) &x );
102
+ }
103
+
104
+ static void dc_callvm_argBool_mips_o32(DCCallVM* in_self, DCbool x)
105
+ {
106
+ dc_callvm_argInt_mips_o32(in_self, (DCint)x);
107
+ }
108
+
109
+ static void dc_callvm_argChar_mips_o32(DCCallVM* in_self, DCchar x)
110
+ {
111
+ dc_callvm_argInt_mips_o32(in_self, (DCint)x);
112
+ }
113
+
114
+ static void dc_callvm_argShort_mips_o32(DCCallVM* in_self, DCshort x)
115
+ {
116
+ dc_callvm_argInt_mips_o32(in_self, (DCint)x);
117
+ }
118
+
119
+ static void dc_callvm_argLong_mips_o32(DCCallVM* in_self, DClong x)
120
+ {
121
+ dc_callvm_argInt_mips_o32(in_self, (DCint)x);
122
+ }
123
+
124
+ static void dc_callvm_argLongLong_mips_o32(DCCallVM* in_self, DClonglong Lv)
125
+ {
126
+ DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
127
+
128
+ /* 64-bit values need to be aligned on 8 byte boundaries */
129
+ dcVecSkip(&self->mVecHead, dcVecSize(&self->mVecHead) & 4);
130
+ dcVecAppend(&self->mVecHead, &Lv, sizeof(DClonglong));
131
+ self->mArgCount += 1;
132
+ }
133
+
134
+ static void dc_callvm_argFloat_mips_o32(DCCallVM* in_self, DCfloat x)
135
+ {
136
+ DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
137
+
138
+ dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat) );
139
+ if (self->mArgCount < 2) {
140
+ #if defined(__MIPSEL__)
141
+ self->mRegData.u[self->mArgCount].f[0] = x;
142
+ #else
143
+ self->mRegData.u[self->mArgCount].f[1] = x;
144
+ #endif
145
+ #if 0
146
+ self->mRegData.u[self->mArgCount].f[1] = x;
147
+ call kernel
148
+
149
+ mips:
150
+ lwc1 $f12, 4($5) <--- byte offset 4
151
+ lwc1 $f13, 0($5)
152
+ lwc1 $f14, 12($5) <--- byte offset 12
153
+ lwc1 $f15, 8($5)
154
+ mipsel:
155
+ lwc1 $f12, 0($5) <--- byte offset 4
156
+ lwc1 $f13, 4($5)
157
+ lwc1 $f14, 8($5) <--- byte offset 12
158
+ lwc1 $f15, 12($5)
159
+
160
+ #if defined(__MIPSEL__)
161
+ /* index 0 and 2 */
162
+ self->mRegData.floats[self->mArgCount*2] = x;
163
+ #else
164
+ /* index 1 and 3 */
165
+ self->mRegData.floats[self->mArgCount*2+1] = x;
166
+ #endif
167
+ #endif
168
+ }
169
+ self->mArgCount++;
170
+ }
171
+
172
+ static void dc_callvm_argDouble_mips_o32(DCCallVM* in_self, DCdouble x)
173
+ {
174
+ DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
175
+ /* 64-bit values need to be aligned on 8 byte boundaries */
176
+ dcVecSkip(&self->mVecHead, dcVecSize(&self->mVecHead) & 4);
177
+ dcVecAppend(&self->mVecHead, &x, sizeof(DCdouble) );
178
+ if (self->mArgCount < 2)
179
+ self->mRegData.u[self->mArgCount].d = x;
180
+ self->mArgCount++;
181
+ }
182
+
183
+ /* Call. */
184
+ void dc_callvm_call_mips_o32(DCCallVM* in_self, DCpointer target)
185
+ {
186
+ DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)in_self;
187
+ /* at minimum provide 16-bytes
188
+ which hold the first four integer register as spill area
189
+ and are automatically loaded to $4-$7
190
+ */
191
+
192
+ size_t size = DC_MAX(16, ( ( (unsigned) dcVecSize(&self->mVecHead) ) +7UL ) & (-8UL) );
193
+
194
+ dcCall_mips_o32(target, &self->mRegData, size, dcVecData(&self->mVecHead));
195
+ }
196
+
197
+ DCCallVM_vt gVT_mips_o32 =
198
+ {
199
+ &dc_callvm_free_mips_o32
200
+ , &dc_callvm_reset_mips_o32
201
+ , &dc_callvm_mode_mips_o32
202
+ , &dc_callvm_argBool_mips_o32
203
+ , &dc_callvm_argChar_mips_o32
204
+ , &dc_callvm_argShort_mips_o32
205
+ , &dc_callvm_argInt_mips_o32
206
+ , &dc_callvm_argLong_mips_o32
207
+ , &dc_callvm_argLongLong_mips_o32
208
+ , &dc_callvm_argFloat_mips_o32
209
+ , &dc_callvm_argDouble_mips_o32
210
+ , &dc_callvm_argPointer_mips_o32
211
+ , NULL /* argStruct */
212
+ , (DCvoidvmfunc*) &dc_callvm_call_mips_o32
213
+ , (DCboolvmfunc*) &dc_callvm_call_mips_o32
214
+ , (DCcharvmfunc*) &dc_callvm_call_mips_o32
215
+ , (DCshortvmfunc*) &dc_callvm_call_mips_o32
216
+ , (DCintvmfunc*) &dc_callvm_call_mips_o32
217
+ , (DClongvmfunc*) &dc_callvm_call_mips_o32
218
+ , (DClonglongvmfunc*) &dc_callvm_call_mips_o32
219
+ , (DCfloatvmfunc*) &dc_callvm_call_mips_o32
220
+ , (DCdoublevmfunc*) &dc_callvm_call_mips_o32
221
+ , (DCpointervmfunc*) &dc_callvm_call_mips_o32
222
+ , NULL /* callStruct */
223
+ };
224
+
225
+ DCCallVM* dcNewCallVM_mips_o32(DCsize size)
226
+ {
227
+ return dc_callvm_new_mips_o32(&gVT_mips_o32, size);
228
+ }
229
+
230
+
231
+ DCCallVM* dcNewCallVM(DCsize size)
232
+ {
233
+ return dcNewCallVM_mips_o32(size);
234
+ }
235
+