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