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
@@ -6,7 +6,7 @@
6
6
  Description: Call Kernel for ARM 32-bit ARM Architecture - Hard Float
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -51,38 +51,36 @@ GLOBAL_C(dcCall_arm32_armhf)
51
51
  ENTRY_C(dcCall_arm32_armhf)
52
52
 
53
53
  /* Prolog. This function never needs to spill inside its prolog, so just store the permanent registers. */
54
- mov r12 , r13 /* Stack ptr (r13) -> temporary (r12). */
55
- stmdb r13!, {r4-r5, r11, r12, r14} /* Permanent registers and stack pointer (now in r12), etc... -> save area on stack (except counter). */
54
+ mov r12 , r13 /* Stack ptr (r13) -> temporary (r12). */
55
+ stmdb r13!, {r4-r5, r11, r12, r14} /* Permanent registers and stack pointer (now in r12), etc... -> save area on stack (except counter). */
56
56
 
57
- mov r11 , r12 /* Set frame ptr. */
58
- mov r4 , r0 /* r4 = 'fptr' (1st argument is passed in r0). */
59
- mov r5 , r1 /* r5 = 'args' (2nd argument is passed in r1). */
60
-
61
- /* Load 16 single-precision registers (= 8 double-precision registers). */
62
- fldmiad r3, {d0-d7}
57
+ mov r11, r12 /* Set frame ptr. */
58
+ mov r4, r0 /* r4 = fptr */
59
+ add r5, r1, #16 /* r5 = stack args (after intreg ones) */
63
60
 
64
- sub r2 , r2 , #16 /* skip spill area */
65
- cmp r2, #0
66
- ble armhf_call
61
+ /* Load 16 single-precision registers (= 8 double-precision registers). */
62
+ fldmiad r3, {d0-d7}
67
63
 
68
- sub r13, r13, r2
69
- and r13, r13, #-8 /* align 8-byte. */
64
+ /* prep stack parameter area (includes room for spill area, callee spills if needed) */
65
+ sub r13, r13, r2
66
+ and r13, r13, #-8 /* align 8-byte. */
70
67
 
71
- mov r3, #0 /* Init byte counter. */
72
- add r1 , r1 , #16
68
+ sub r2, r2, #16 /* loop counters for stack params to copy */
69
+ mov r3, #0
73
70
  armhf_pushArgs:
74
- ldr r0, [r1, +r3] /* Load word into r0. */
75
- str r0, [r13, +r3] /* Push word onto stack. */
76
- add r3, r3, #4 /* Increment byte counter. */
77
- cmp r2, r3
78
- bne armhf_pushArgs
71
+ cmp r2, r3
72
+ ble armhf_call
73
+ ldr r0, [r5, +r3] /* load word into r0 ... */
74
+ str r0, [r13, +r3] /* ... then push onto stack */
75
+ add r3, r3, #4
76
+ b armhf_pushArgs
79
77
 
80
78
  armhf_call:
81
- ldmia r5, {r0-r3} /* Load first 4 arguments for new call into r0-r3. */
82
- /* 'blx %r4' workaround for ARMv4t: */
83
- mov r14, r15 /* Branch return address(r15) -> link register (r14) -- r15 always points to address of current + 2 instructions (= Epilog code). */
84
- bx r4 /* Call (ARM/THUMB), available for ARMv4t. */
79
+ ldmia r1, {r0-r3} /* Load first 4 arguments for new call into r0-r3. */
80
+ /* 'blx %r4' workaround for ARMv4t: */
81
+ mov r14, r15 /* Branch return address(r15) -> link register (r14) -- r15 always points to address of current + 2 instructions (= Epilog code). */
82
+ bx r4 /* Call (ARM/THUMB), available for ARMv4t. */
85
83
 
86
84
  /* Epilog. */
87
- ldmdb r11, {r4-r5, r11, r13, r15} /* Restore permanent registers (ignore temporary (r12), restore stack ptr and program counter).@@@db not needed since we rewrite r13? */
85
+ ldmdb r11, {r4-r5, r11, r13, r15} /* Restore permanent registers (ignore temporary (r12), restore stack ptr and program counter).@@@db not needed since we rewrite r13? */
88
86
 
@@ -6,7 +6,7 @@
6
6
  Description:
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -6,7 +6,7 @@
6
6
  Description:
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -6,7 +6,7 @@
6
6
  Description: Call Kernel for ARM 32-bit ARM Architecture - Hard Float in Thumb code
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -36,17 +36,13 @@
36
36
  dcCall_arm32_thumb:
37
37
 
38
38
  /* Prolog. This function never needs to spill inside its prolog, so just store the permanent registers. */
39
- push {%r4-%r7, %r14} /* Frame ptr, permanent registers, link register -> save area on stack. */
39
+ /* Code below is not using high registers, so not storing them in prolog, which is more involved with thumb, anyways. */
40
+ push {%r4-%r7, %r14} /* Frame ptr, permanent registers, link register -> save area on stack. */
40
41
  mov %r7, %r13 /* Set frame ptr. */
42
+ sub %r13, #4 /* Realign stack to 8 bytes (b/c we stored 5 regs = 20b). */
41
43
 
42
44
  /* Call. */
43
45
  mov %r4, %r0 /* Move 'fptr' to r4 (1st argument is passed in r0). */
44
-
45
- /* Disable 'thumb' address forcing... */
46
-
47
- /* mov %r0, #1 */ /* Assure that LSB is set to 1 (THUMB call). - Not Required and not useful for interworking calls */
48
- /* orr %r4, %r0 */
49
-
50
46
  mov %r5, %r1 /* Move 'args' to r5 (2nd argument is passed in r1). */
51
47
  mov %r6, %r2 /* Move 'size' to r6 (3rd argument is passed in r2). */
52
48
 
@@ -6,8 +6,8 @@
6
6
  Description: Call Kernel for ARM 64-bit Architecture (aka ARM64, AArch64)
7
7
  License:
8
8
 
9
- Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>,
10
- Tassilo Philipp <tphilipp@potion-studios.com>
9
+ Copyright (c) 2015-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
+ Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
13
13
  purpose with or without fee is hereby granted, provided that the above
@@ -6,8 +6,8 @@
6
6
  Description: ARM 64-bit
7
7
  License:
8
8
 
9
- Copyright (c) 2015 Daniel Adler <dadler@uni-goettingen.de>,
10
- Tassilo Philipp <tphilipp@potion-studios.com>
9
+ Copyright (c) 2015-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
+ Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
13
13
  purpose with or without fee is hereby granted, provided that the above
@@ -6,7 +6,7 @@
6
6
  Description: mips call-kernel C interfaces.
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -6,7 +6,7 @@
6
6
  Description: mips "eabi" abi call kernel C interface.
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -3,7 +3,7 @@
3
3
  Package: dyncall
4
4
  Library: dyncall
5
5
  File: dyncall/dyncall_call_mips_eabi_gas.s
6
- Description:
6
+ Description: mips "eabi" abi call kernel implementation in GNU Assembler
7
7
  License:
8
8
 
9
9
  Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
@@ -37,7 +37,7 @@
37
37
 
38
38
  dcCall_mips_eabi:
39
39
  /* $4 target function */
40
- /* $5 register data */
40
+ /* $5 register data */
41
41
  /* $6 stack size */
42
42
  /* $7 stack data */
43
43
  addiu $sp,$sp,-16
@@ -46,7 +46,7 @@ dcCall_mips_eabi:
46
46
  sw $fp,0($sp)
47
47
 
48
48
  move $fp,$sp
49
-
49
+
50
50
  move $2, $0
51
51
  add $2, 8
52
52
  neg $2
@@ -57,9 +57,9 @@ dcCall_mips_eabi:
57
57
  move $12,$4 /* target function */
58
58
  move $13,$5 /* register data */
59
59
  move $16,$6 /* stack size */
60
-
60
+
61
61
  sub $sp,$sp,$16 /* allocate stack frame */
62
-
62
+
63
63
  /* copy stack data */
64
64
 
65
65
  .next:
@@ -73,8 +73,8 @@ dcCall_mips_eabi:
73
73
  addiu $sp,$sp, 4
74
74
  j .next
75
75
  nop
76
-
77
- .skip:
76
+
77
+ .skip:
78
78
 
79
79
  sub $sp,$sp,$16
80
80
 
@@ -89,16 +89,16 @@ dcCall_mips_eabi:
89
89
  lw $10,24($13)
90
90
  lw $11,28($13)
91
91
 
92
- /* load single-precise floating pointer parameter registers */
92
+ /* load single-precision floating pointer parameter registers */
93
93
 
94
- lwc1 $f12, 32($13)
95
- lwc1 $f13, 36($13)
96
- lwc1 $f14, 40($13)
97
- lwc1 $f15, 44($13)
98
- lwc1 $f16, 48($13)
99
- lwc1 $f17, 52($13)
100
- lwc1 $f18, 56($13)
101
- lwc1 $f19, 60($13)
94
+ l.s $f12, 32($13)
95
+ l.s $f13, 36($13)
96
+ l.s $f14, 40($13)
97
+ l.s $f15, 44($13)
98
+ l.s $f16, 48($13)
99
+ l.s $f17, 52($13)
100
+ l.s $f18, 56($13)
101
+ l.s $f19, 60($13)
102
102
 
103
103
  jal $12
104
104
  nop
@@ -3,10 +3,10 @@
3
3
  Package: dyncall
4
4
  Library: dyncall
5
5
  File: dyncall/dyncall_call_mips_gas.S
6
- Description: auto-select (via gnu c preprocessor) mips abi call kernel
6
+ Description: auto-select (via C preprocessor) mips abi call kernel
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -3,10 +3,10 @@
3
3
  Package: dyncall
4
4
  Library: dyncall
5
5
  File: dyncall/dyncall_call_mips_n32.h
6
- Description: mips "n32" ABI call-kernel C interface.
6
+ Description: mips64 "n32" ABI call-kernel C interface.
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -52,12 +52,13 @@ extern "C" {
52
52
 
53
53
  struct DCRegData_mips_n32
54
54
  {
55
- DClonglong mIntData[8];
55
+ DClonglong mIntData[8];
56
56
  union { DCfloat f; DCdouble d; } mFloatData[8];
57
- DClonglong mUseDouble; /* bitmask: lower 8 bits specifies to use float or double from union array. */
57
+ DClonglong mUseDouble; /* bitmask: lower 8 bits specify to use float or double from union array. */
58
58
  };
59
59
 
60
60
  void dcCall_mips_n32(DCpointer target, struct DCRegData_mips_n32* regdata, DCsize stksize, DCpointer stkdata);
61
+ /* @@@ this is the same as n64, combine code */
61
62
 
62
63
  #ifdef __cplusplus
63
64
  }
@@ -3,10 +3,10 @@
3
3
  Package: dyncall
4
4
  Library: dyncall
5
5
  File: dyncall/dyncall_call_mips_n32_gas.s
6
- Description: mips "n32" abi call kernel implementation in GNU Assembler
6
+ Description: mips64 "n32" abi call kernel implementation in GNU Assembler
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2011 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2016 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -177,8 +177,8 @@ dcCall_mips_n32:
177
177
  /* jump-and-link to register $25 */
178
178
 
179
179
  jal $31, $25
180
-
181
- /* no nop according to gcc assembly output */
180
+ nop /* branch-delay slot - no nop according to gcc assembly */
181
+ /* output, but let's play safe */
182
182
 
183
183
  /* Stack-frame epilog */
184
184
  move $sp,$fp
@@ -6,7 +6,7 @@
6
6
  Description: mips "n64" ABI call-kernel C interface.
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -52,9 +52,9 @@ extern "C" {
52
52
 
53
53
  struct DCRegData_mips_n64
54
54
  {
55
- DClonglong mIntData[8];
55
+ DClonglong mIntData[8];
56
56
  union { DCfloat f; DCdouble d; } mFloatData[8];
57
- DClonglong mUseDouble; /* bitmask: lower 8 bits specifies to use float or double from union array. */
57
+ DClonglong mUseDouble; /* bitmask: lower 8 bits specify to use float or double from union array. */
58
58
  };
59
59
 
60
60
  void dcCall_mips_n64(DCpointer target, struct DCRegData_mips_n64* regdata, DCsize stksize, DCpointer stkdata);
@@ -177,8 +177,8 @@ dcCall_mips_n64:
177
177
  /* jump-and-link to register $25 */
178
178
 
179
179
  jal $31, $25
180
-
181
- /* no nop according to gcc assembly output */
180
+ nop /* branch-delay slot - no nop according to gcc assembly */
181
+ /* output, but let's play safe */
182
182
 
183
183
  /* Stack-frame epilog */
184
184
  move $sp,$fp
@@ -6,7 +6,7 @@
6
6
  Description: mips "o32" abi call kernel C interface.
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -43,8 +43,9 @@ extern "C" {
43
43
  32-bit floating pointer registers.
44
44
  Float arguments map as following:
45
45
 
46
- float argument 0 is at floats[1] and
47
- float argument 1 is at floats[3] of DCRegData_mips_o32 union.
46
+ float argument 0 is at u[0][0] for little, u[0][1] for big endian and
47
+ float argument 1 is at u[1][0] for little, u[1][1] for big endian of
48
+ DCRegData_mips_o32 union.
48
49
 
49
50
  */
50
51
 
@@ -42,7 +42,6 @@ dcCall_mips_o32:
42
42
  .mask 0xc0000000,-4
43
43
  .fmask 0x00000000,0
44
44
  .set noreorder
45
- .set nomacro
46
45
 
47
46
  addiu $sp,$sp,-8
48
47
  sw $31,4($sp) /* save link register */
@@ -77,8 +76,8 @@ dcCall_mips_o32:
77
76
 
78
77
  l.d $f12, 0($5)
79
78
  l.d $f14, 8($5)
80
- /* prepare call */
81
79
 
80
+ /* prepare call */
82
81
 
83
82
  move $12, $7 /* $12 stack data */
84
83
  move $25, $4 /* $25 target function */
@@ -102,7 +101,6 @@ dcCall_mips_o32:
102
101
  j $31 /* return */
103
102
  nop
104
103
 
105
- .set macro
106
104
  .set reorder
107
105
  .end dcCall_mips_o32
108
106
  .ident "handwritten"
@@ -6,7 +6,7 @@
6
6
  Description: Call Kernel for PowerPC 32-bit Architecture
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -6,7 +6,7 @@
6
6
  Description:
7
7
  License:
8
8
 
9
- Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
9
+ Copyright (c) 2007-2018 Daniel Adler <dadler@uni-goettingen.de>,
10
10
  Tassilo Philipp <tphilipp@potion-studios.com>
11
11
 
12
12
  Permission to use, copy, modify, and distribute this software for any
@@ -6,7 +6,7 @@
6
6
  Description:
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
@@ -27,6 +27,8 @@
27
27
 
28
28
  /* ---------------------------------------------------------------------------
29
29
 
30
+ @@@ this should all go in manual
31
+
30
32
  call kernel for sparc 32-bit
31
33
  ----------------------------
32
34
  tested on linux/debian [gcc54.fsffrance.org - thanx to the farm!]
@@ -45,7 +47,7 @@ in sparc, this is simply a leaf-function layer using %o3.
45
47
 
46
48
  old C Interface:
47
49
  void dcCall_sparc (DCpointer target, DCsize size, DCpointer data);
48
- %i0 , %i1 , %i2
50
+ %i0 , %i1 , %i2
49
51
 
50
52
 
51
53
  Input:
@@ -95,11 +97,11 @@ Stack Layout 32-Bit Model:
95
97
  0: 16 registers save area
96
98
 
97
99
  Stack Layout 64-Bit Model:
98
- XX: should be 16 byte aligned (min stack frame size is 172).
99
- 168: on stack argument 6
100
- 136: input argument 0 spill
101
- 128: struct/union poiner return value
102
- 0: 16 registers save area
100
+ XX: should be 16 byte aligned (min stack frame size is 172).
101
+ 168: on stack argument 6
102
+ 136: input argument 0 spill
103
+ 128: struct/union poiner return value
104
+ 0: 16 registers save area
103
105
 
104
106
 
105
107
 
@@ -121,26 +123,20 @@ r24-r31 -> ins
121
123
 
122
124
  */
123
125
 
124
- #if defined __arch64__
125
- #define REGSIZE 8
126
- #error invalid arch
127
- #else
128
- #define REGSIZE 4
129
- #endif
130
-
131
- #define ALIGN 16
126
+ REGSIZE = 4
127
+ ALIGN = 16
132
128
  CALLVM_size = 12
133
129
  CALLVM_dataoff = 16
130
+
131
+ .text
134
132
  .global dcCall_sparc
135
133
  dcCall_sparc:
136
134
 
137
135
  /* Basic Prolog: supports up to 6 arguments. */
138
136
 
139
- /* new C interface */
140
137
  /* o0-1: callvm,target */
141
-
142
- or %o0, %g0, %o3 /* %o3: callvm */
143
- or %o1, %g0, %o0 /* %o0: target */
138
+ or %o0, %g0, %o3 /* %o3: callvm */
139
+ or %o1, %g0, %o0 /* %o0: target */
144
140
  ld [%o3+CALLVM_size], %o1 /* %o1: size */
145
141
  add %o3, CALLVM_dataoff, %o2 /* %o2: data */
146
142
  /*o0-2:target,size,data*/
@@ -148,46 +144,45 @@ dcCall_sparc:
148
144
  /*leaf functions: may use the first six output registers.*/
149
145
  /*o3-5:free to use */
150
146
 
151
- /* Compute a matiching stack size (approximate): o3 = align(92+o1,16) */
152
-
147
+ /* Compute a matching stack size (approximate): o3 = align(92+o1,16) */
153
148
  add %o1, (16+1+6)*REGSIZE+ALIGN-1, %o3
154
149
  and %o3, -ALIGN, %o3
155
150
  neg %o3
156
-
151
+
157
152
  /* Prolog. */
158
- save %sp, %o3, %sp /* min stack size (16+1+6)*sizeof(ptr)=92 paddded to 8-byte alignment => min frame size of 96 bytes. */
159
-
160
- /* Load output registers. */
153
+ save %sp, %o3, %sp /* min stack size (16+1+6)*sizeof(ptr)=92 paddded to 8-byte alignment => min frame size of 96 bytes. */
161
154
 
162
- ld [%i2 ],%o0
163
- ld [%i2+REGSIZE*1 ],%o1
164
- ld [%i2+REGSIZE*2 ],%o2
165
- ld [%i2+REGSIZE*3 ],%o3
166
- ld [%i2+REGSIZE*4 ],%o4
167
- ld [%i2+REGSIZE*5 ],%o5
155
+ /* Load output registers. */
156
+ ld [%i2 ],%o0
157
+ ld [%i2+REGSIZE*1 ],%o1
158
+ ld [%i2+REGSIZE*2 ],%o2
159
+ ld [%i2+REGSIZE*3 ],%o3
160
+ ld [%i2+REGSIZE*4 ],%o4
161
+ ld [%i2+REGSIZE*5 ],%o5
168
162
 
169
163
  /* Copy on stack? */
170
- sub %i1, REGSIZE*6, %i1 /* i1 = decrement copy size by 6 regs (=6 regs x 4 bytes = 24 bytes total). */
171
- cmp %i1, 0
172
- ble .do_call
164
+ sub %i1, REGSIZE*6, %i1 /* i1 = decrement copy size by 6 regs (=6 regs x 4 bytes = 24 bytes total). */
165
+ cmp %i1, 0
166
+ ble .do_call
173
167
  nop
174
168
 
175
169
  /* Copy loop: */
176
- add %i2, REGSIZE*6, %i2 /* i2 = address of 7th word of args buffer. */
177
- or %g0, %g0, %l0 /* l0 = offset initialized to 0. */
178
- add %sp, (16+1+6)*REGSIZE, %l2 /* l2 = argument area on stack space (7th word). (64+4+6*4 = byte offset 92). */
170
+ add %i2, REGSIZE*6, %i2 /* i2 = address of 7th word of args buffer. */
171
+ or %g0, %g0, %l0 /* l0 = offset initialized to 0. */
172
+ add %sp, (16+1+6)*REGSIZE, %l2 /* l2 = argument area on stack space (7th word). (64+4+6*4 = byte offset 92). */
179
173
  .next:
180
- ld [%i2+%l0],%l1 /* Read from arg buffer(%i2) to %l1. */
181
- st %l1, [%l2+%l0] /* Write %l1 to stack space(%l2). */
182
- add %l0, REGSIZE, %l0 /* Increment offset. */
183
- sub %i1, REGSIZE, %i1 /* Decrement copy size. */
174
+ ld [%i2+%l0],%l1 /* Read from arg buffer(%i2) to %l1. */
175
+ st %l1, [%l2+%l0] /* Write %l1 to stack space(%l2). */
176
+ add %l0, REGSIZE, %l0 /* Increment offset. */
177
+ sub %i1, REGSIZE, %i1 /* Decrement copy size. */
184
178
  cmp %i1, 0
185
179
  bgt .next
186
180
  nop
187
181
  .do_call:
188
- call %i0 /* Call target. */
182
+ call %i0 /* Call target. */
189
183
  nop
190
- or %o0, %g0, %i0
191
- or %o1, %g0, %i1
192
- jmpl %i7 + 8, %g0
184
+ or %o0, %g0, %i0
185
+ or %o1, %g0, %i1
186
+ jmpl %i7 + 8, %g0 /* optimized restore;retl;nop */
193
187
  restore
188
+