rbdc 0.8.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.
- data/bindings/ruby/rbdc/extconf.rb +57 -0
- data/bindings/ruby/rbdc/rbdc.c +304 -0
- data/dyncall/AUTHORS +4 -0
- data/dyncall/BUGS +3 -0
- data/dyncall/CMakeLists.txt +79 -0
- data/dyncall/ChangeLog +165 -0
- data/dyncall/LICENSE +15 -0
- data/dyncall/Makefile.M +15 -0
- data/dyncall/Makefile.embedded +71 -0
- data/dyncall/Makefile.generic +36 -0
- data/dyncall/Nmakefile +45 -0
- data/dyncall/README +92 -0
- data/dyncall/ToDo +114 -0
- data/dyncall/autovar/LICENSE.txt +15 -0
- data/dyncall/autovar/README.txt +69 -0
- data/dyncall/autovar/autovar_ABI.h +44 -0
- data/dyncall/autovar/autovar_ARCH.h +56 -0
- data/dyncall/autovar/autovar_CC.h +46 -0
- data/dyncall/autovar/autovar_OS.h +78 -0
- data/dyncall/autovar/autovar_OSFAMILY.h +39 -0
- data/dyncall/buildsys/cmake/Modules/FindDynCall.cmake +43 -0
- data/dyncall/buildsys/cmake/Modules/FindDynCallback.cmake +43 -0
- data/dyncall/buildsys/cmake/Modules/FindDynLoad.cmake +45 -0
- data/dyncall/buildsys/cmake/Modules/UseLATEX.cmake +811 -0
- data/dyncall/buildsys/dynmake/Makefile.base.M +82 -0
- data/dyncall/buildsys/dynmake/dynmake.bat +2 -0
- data/dyncall/buildsys/dynmake/dynmake.sh +4 -0
- data/dyncall/buildsys/lua/Makefile +10 -0
- data/dyncall/buildsys/lua/README.txt +4 -0
- data/dyncall/buildsys/lua/bootstrap.sh +34 -0
- data/dyncall/buildsys/lua/cleanup.sh +6 -0
- data/dyncall/buildsys/lua/mkfile +34 -0
- data/dyncall/buildsys/lua/setenv.sh +4 -0
- data/dyncall/buildsys/mk/app.mk +30 -0
- data/dyncall/buildsys/mk/dirs.mk +27 -0
- data/dyncall/buildsys/mk/epilog.mk +30 -0
- data/dyncall/buildsys/mk/lib.mk +23 -0
- data/dyncall/buildsys/mk/pcc.mk +60 -0
- data/dyncall/buildsys/mk/prolog.mk +35 -0
- data/dyncall/buildsys/nmake/common.nmake +61 -0
- data/dyncall/buildsys/nmake/epilog.nmake +28 -0
- data/dyncall/buildsys/nmake/prolog.nmake +76 -0
- data/dyncall/buildsys/nmake/tool_gcc.nmake +82 -0
- data/dyncall/buildsys/nmake/tool_msvc.nmake +67 -0
- data/dyncall/buildsys/scripts/batch-build-linux.sh +11 -0
- data/dyncall/buildsys/scripts/batch-build-minix.sh +11 -0
- data/dyncall/buildsys/scripts/batch-build-psp.sh +11 -0
- data/dyncall/buildsys/scripts/conf-nds.bat +41 -0
- data/dyncall/buildsys/scripts/setenv-cross-ios.sh +8 -0
- data/dyncall/buildsys/scripts/setenv-sdk-ios.sh +22 -0
- data/dyncall/buildsys/vs2005/dyncall/dyncall.vcproj +245 -0
- data/dyncall/buildsys/vs2005/test_plain/test_plain.vcproj +202 -0
- data/dyncall/buildsys/vs2005/vs2005.sln +29 -0
- data/dyncall/configure +152 -0
- data/dyncall/configure.bat +157 -0
- data/dyncall/configure.rc +234 -0
- data/dyncall/dynMakefile +4 -0
- data/dyncall/dyncall/CMakeLists.txt +53 -0
- data/dyncall/dyncall/DynCallConfig.cmake +3 -0
- data/dyncall/dyncall/Makefile.M +10 -0
- data/dyncall/dyncall/Makefile.embedded +20 -0
- data/dyncall/dyncall/Makefile.generic +16 -0
- data/dyncall/dyncall/Nmakefile +62 -0
- data/dyncall/dyncall/README-Developer.txt +45 -0
- data/dyncall/dyncall/README.txt +65 -0
- data/dyncall/dyncall/TODO +9 -0
- data/dyncall/dyncall/dynMakefile +4 -0
- data/dyncall/dyncall/dyncall.3 +189 -0
- data/dyncall/dyncall/dyncall.h +135 -0
- data/dyncall/dyncall/dyncall_alloc.h +40 -0
- data/dyncall/dyncall/dyncall_api.c +167 -0
- data/dyncall/dyncall/dyncall_call.S +72 -0
- data/dyncall/dyncall/dyncall_call_arm32_arm.S +80 -0
- data/dyncall/dyncall/dyncall_call_arm32_arm.h +61 -0
- data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.S +96 -0
- data/dyncall/dyncall/dyncall_call_arm32_arm_armhf.h +44 -0
- data/dyncall/dyncall/dyncall_call_arm32_thumb.h +65 -0
- data/dyncall/dyncall/dyncall_call_arm32_thumb_apple.s +80 -0
- data/dyncall/dyncall/dyncall_call_arm32_thumb_armhf.S +121 -0
- data/dyncall/dyncall/dyncall_call_arm32_thumb_gas.s +101 -0
- data/dyncall/dyncall/dyncall_call_mips.h +50 -0
- data/dyncall/dyncall/dyncall_call_mips_eabi.h +61 -0
- data/dyncall/dyncall/dyncall_call_mips_eabi_gas.s +115 -0
- data/dyncall/dyncall/dyncall_call_mips_gas.S +36 -0
- data/dyncall/dyncall/dyncall_call_mips_n32.h +67 -0
- data/dyncall/dyncall/dyncall_call_mips_n32_gas.s +192 -0
- data/dyncall/dyncall/dyncall_call_mips_n64.h +67 -0
- data/dyncall/dyncall/dyncall_call_mips_n64_gas.s +192 -0
- data/dyncall/dyncall/dyncall_call_mips_o32.h +70 -0
- data/dyncall/dyncall/dyncall_call_mips_o32_gas.s +109 -0
- data/dyncall/dyncall/dyncall_call_ppc32.S +266 -0
- data/dyncall/dyncall/dyncall_call_ppc32.h +62 -0
- data/dyncall/dyncall/dyncall_call_sparc.S +192 -0
- data/dyncall/dyncall/dyncall_call_sparc.h +42 -0
- data/dyncall/dyncall/dyncall_call_sparc64.S +361 -0
- data/dyncall/dyncall/dyncall_call_sparc64.h +42 -0
- data/dyncall/dyncall/dyncall_call_sparc_v9.S +220 -0
- data/dyncall/dyncall/dyncall_call_sparc_v9.h +42 -0
- data/dyncall/dyncall/dyncall_call_x64-att.S +146 -0
- data/dyncall/dyncall/dyncall_call_x64.S +149 -0
- data/dyncall/dyncall/dyncall_call_x64.h +63 -0
- data/dyncall/dyncall/dyncall_call_x64_generic_masm.asm +70 -0
- data/dyncall/dyncall/dyncall_call_x86.S +238 -0
- data/dyncall/dyncall/dyncall_call_x86.h +70 -0
- data/dyncall/dyncall/dyncall_call_x86_8a.s +127 -0
- data/dyncall/dyncall/dyncall_call_x86_generic_masm.asm +136 -0
- data/dyncall/dyncall/dyncall_call_x86_nasm.asm +234 -0
- data/dyncall/dyncall/dyncall_callf.c +112 -0
- data/dyncall/dyncall/dyncall_callf.h +52 -0
- data/dyncall/dyncall/dyncall_callvm.c +68 -0
- data/dyncall/dyncall/dyncall_callvm.h +88 -0
- data/dyncall/dyncall/dyncall_callvm_arm32_arm.c +250 -0
- data/dyncall/dyncall/dyncall_callvm_arm32_arm.h +59 -0
- data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.c +204 -0
- data/dyncall/dyncall/dyncall_callvm_arm32_arm_armhf.h +63 -0
- data/dyncall/dyncall/dyncall_callvm_arm32_thumb.c +271 -0
- data/dyncall/dyncall/dyncall_callvm_arm32_thumb.h +59 -0
- data/dyncall/dyncall/dyncall_callvm_base.c +33 -0
- data/dyncall/dyncall/dyncall_callvm_mips.c +40 -0
- data/dyncall/dyncall/dyncall_callvm_mips.h +37 -0
- data/dyncall/dyncall/dyncall_callvm_mips_eabi.c +181 -0
- data/dyncall/dyncall/dyncall_callvm_mips_eabi.h +61 -0
- data/dyncall/dyncall/dyncall_callvm_mips_n32.c +268 -0
- data/dyncall/dyncall/dyncall_callvm_mips_n64.c +268 -0
- data/dyncall/dyncall/dyncall_callvm_mips_n64.h +53 -0
- data/dyncall/dyncall/dyncall_callvm_mips_o32.c +235 -0
- data/dyncall/dyncall/dyncall_callvm_mips_o32.h +45 -0
- data/dyncall/dyncall/dyncall_callvm_ppc32.c +372 -0
- data/dyncall/dyncall/dyncall_callvm_ppc32.h +61 -0
- data/dyncall/dyncall/dyncall_callvm_sparc.c +155 -0
- data/dyncall/dyncall/dyncall_callvm_sparc.h +44 -0
- data/dyncall/dyncall/dyncall_callvm_sparc64.c +239 -0
- data/dyncall/dyncall/dyncall_callvm_sparc64.h +47 -0
- data/dyncall/dyncall/dyncall_callvm_sparc_v9.c +182 -0
- data/dyncall/dyncall/dyncall_callvm_sparc_v9.h +45 -0
- data/dyncall/dyncall/dyncall_callvm_x64.c +228 -0
- data/dyncall/dyncall/dyncall_callvm_x64.h +111 -0
- data/dyncall/dyncall/dyncall_callvm_x86.c +667 -0
- data/dyncall/dyncall/dyncall_callvm_x86.h +75 -0
- data/dyncall/dyncall/dyncall_config.h +46 -0
- data/dyncall/dyncall/dyncall_macros.h +248 -0
- data/dyncall/dyncall/dyncall_signature.h +71 -0
- data/dyncall/dyncall/dyncall_struct.c +255 -0
- data/dyncall/dyncall/dyncall_struct.h +69 -0
- data/dyncall/dyncall/dyncall_types.h +74 -0
- data/dyncall/dyncall/dyncall_utils.h +38 -0
- data/dyncall/dyncall/dyncall_value.h +73 -0
- data/dyncall/dyncall/dyncall_vector.c +52 -0
- data/dyncall/dyncall/dyncall_vector.h +56 -0
- data/dyncall/dyncall/gen-masm.sh +7 -0
- data/dyncall/dyncall/mkfile +29 -0
- data/dyncall/dyncallback/CMakeLists.txt +55 -0
- data/dyncall/dyncallback/DynCallbackConfig.cmake +2 -0
- data/dyncall/dyncallback/Makefile.M +10 -0
- data/dyncall/dyncallback/Makefile.embedded +15 -0
- data/dyncall/dyncallback/Makefile.generic +20 -0
- data/dyncall/dyncallback/Nmakefile +71 -0
- data/dyncall/dyncallback/README.txt +9 -0
- data/dyncall/dyncallback/TODO +4 -0
- data/dyncall/dyncallback/dynMakefile +4 -0
- data/dyncall/dyncallback/dyncall_alloc_wx.c +35 -0
- data/dyncall/dyncallback/dyncall_alloc_wx.h +46 -0
- data/dyncall/dyncallback/dyncall_alloc_wx_malloc.c +40 -0
- data/dyncall/dyncallback/dyncall_alloc_wx_mmap.c +42 -0
- data/dyncall/dyncallback/dyncall_alloc_wx_win32.c +42 -0
- data/dyncall/dyncallback/dyncall_args.c +45 -0
- data/dyncall/dyncallback/dyncall_args.h +65 -0
- data/dyncall/dyncallback/dyncall_args_arm32_arm.c +112 -0
- data/dyncall/dyncallback/dyncall_args_arm32_arm.h +40 -0
- data/dyncall/dyncallback/dyncall_args_arm32_thumb.c +29 -0
- data/dyncall/dyncallback/dyncall_args_arm32_thumb.h +32 -0
- data/dyncall/dyncallback/dyncall_args_mips.c +81 -0
- data/dyncall/dyncallback/dyncall_args_mips.h +41 -0
- data/dyncall/dyncallback/dyncall_args_ppc32.c +88 -0
- data/dyncall/dyncallback/dyncall_args_ppc32.h +41 -0
- data/dyncall/dyncallback/dyncall_args_sparc32.c +41 -0
- data/dyncall/dyncallback/dyncall_args_sparc32.h +37 -0
- data/dyncall/dyncallback/dyncall_args_sparc64.c +41 -0
- data/dyncall/dyncallback/dyncall_args_sparc64.h +37 -0
- data/dyncall/dyncallback/dyncall_args_x64.c +73 -0
- data/dyncall/dyncallback/dyncall_args_x64.h +44 -0
- data/dyncall/dyncallback/dyncall_args_x86.c +121 -0
- data/dyncall/dyncallback/dyncall_args_x86.h +58 -0
- data/dyncall/dyncallback/dyncall_callback.c +45 -0
- data/dyncall/dyncallback/dyncall_callback.h +51 -0
- data/dyncall/dyncallback/dyncall_callback_arch.S +71 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_arm.c +63 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_arm.h +45 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_arm_apple.s +73 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_arm_gas.s +73 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_thumb.c +29 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_thumb.h +33 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_thumb_apple.s +32 -0
- data/dyncall/dyncallback/dyncall_callback_arm32_thumb_gas.s +32 -0
- data/dyncall/dyncallback/dyncall_callback_mips.c +61 -0
- data/dyncall/dyncallback/dyncall_callback_mips.h +42 -0
- data/dyncall/dyncallback/dyncall_callback_ppc32.S +33 -0
- data/dyncall/dyncallback/dyncall_callback_ppc32.c +60 -0
- data/dyncall/dyncallback/dyncall_callback_ppc32.h +43 -0
- data/dyncall/dyncallback/dyncall_callback_ppc32_apple.s +180 -0
- data/dyncall/dyncallback/dyncall_callback_sparc32.c +57 -0
- data/dyncall/dyncallback/dyncall_callback_sparc32.h +43 -0
- data/dyncall/dyncallback/dyncall_callback_sparc32.s +30 -0
- data/dyncall/dyncallback/dyncall_callback_sparc64.c +57 -0
- data/dyncall/dyncallback/dyncall_callback_sparc64.s +30 -0
- data/dyncall/dyncallback/dyncall_callback_x64.S +187 -0
- data/dyncall/dyncallback/dyncall_callback_x64.c +69 -0
- data/dyncall/dyncallback/dyncall_callback_x64.h +44 -0
- data/dyncall/dyncallback/dyncall_callback_x64_apple.s +122 -0
- data/dyncall/dyncallback/dyncall_callback_x64_gas.s +119 -0
- data/dyncall/dyncallback/dyncall_callback_x64_gas_w64.s +102 -0
- data/dyncall/dyncallback/dyncall_callback_x64_masm.asm +89 -0
- data/dyncall/dyncallback/dyncall_callback_x86.S +115 -0
- data/dyncall/dyncallback/dyncall_callback_x86.c +281 -0
- data/dyncall/dyncallback/dyncall_callback_x86.h +49 -0
- data/dyncall/dyncallback/dyncall_callback_x86_8a.s +100 -0
- data/dyncall/dyncallback/dyncall_callback_x86_masm.asm +74 -0
- data/dyncall/dyncallback/dyncall_thunk.c +47 -0
- data/dyncall/dyncallback/dyncall_thunk.h +84 -0
- data/dyncall/dyncallback/dyncall_thunk_arm32_arm.c +45 -0
- data/dyncall/dyncallback/dyncall_thunk_arm32_arm.h +40 -0
- data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.c +29 -0
- data/dyncall/dyncallback/dyncall_thunk_arm32_thumb.h +35 -0
- data/dyncall/dyncallback/dyncall_thunk_mips.c +52 -0
- data/dyncall/dyncallback/dyncall_thunk_mips.h +37 -0
- data/dyncall/dyncallback/dyncall_thunk_ppc32.c +51 -0
- data/dyncall/dyncallback/dyncall_thunk_ppc32.h +40 -0
- data/dyncall/dyncallback/dyncall_thunk_sparc32.c +32 -0
- data/dyncall/dyncallback/dyncall_thunk_sparc32.h +36 -0
- data/dyncall/dyncallback/dyncall_thunk_sparc64.c +32 -0
- data/dyncall/dyncallback/dyncall_thunk_sparc64.h +36 -0
- data/dyncall/dyncallback/dyncall_thunk_x64.c +48 -0
- data/dyncall/dyncallback/dyncall_thunk_x64.h +39 -0
- data/dyncall/dyncallback/dyncall_thunk_x86.c +44 -0
- data/dyncall/dyncallback/dyncall_thunk_x86.h +39 -0
- data/dyncall/dyncallback/dyncallback.3 +134 -0
- data/dyncall/dyncallback/gen-masm.sh +8 -0
- data/dyncall/dyncallback/mkfile +29 -0
- data/dyncall/dynload/CMakeLists.txt +25 -0
- data/dyncall/dynload/DynLoadConfig.cmake +3 -0
- data/dyncall/dynload/Makefile.M +10 -0
- data/dyncall/dynload/Makefile.embedded +22 -0
- data/dyncall/dynload/Makefile.generic +18 -0
- data/dyncall/dynload/Nmakefile +57 -0
- data/dyncall/dynload/README.txt +113 -0
- data/dyncall/dynload/TODO +20 -0
- data/dyncall/dynload/dynMakefile +4 -0
- data/dyncall/dynload/dynload.3 +64 -0
- data/dyncall/dynload/dynload.c +38 -0
- data/dyncall/dynload/dynload.h +65 -0
- data/dyncall/dynload/dynload_alloc.h +40 -0
- data/dyncall/dynload/dynload_darwin.c +89 -0
- data/dyncall/dynload/dynload_syms.c +38 -0
- data/dyncall/dynload/dynload_syms_elf.c +214 -0
- data/dyncall/dynload/dynload_syms_mach-o.c +167 -0
- data/dyncall/dynload/dynload_syms_pe.c +109 -0
- data/dyncall/dynload/dynload_unix.c +57 -0
- data/dyncall/dynload/dynload_windows.c +59 -0
- data/dyncall/mkfile +36 -0
- data/dyncall/portasm/README.txt +42 -0
- data/dyncall/portasm/gen-masm.sh +3 -0
- data/dyncall/portasm/portasm-arm.S +36 -0
- data/dyncall/portasm/portasm-ppc.S +98 -0
- data/dyncall/portasm/portasm-x64-att.S +155 -0
- data/dyncall/portasm/portasm-x86.S +127 -0
- metadata +311 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncall
|
|
5
|
+
File: dyncall/dyncall_callvm_arm32_thumb.h
|
|
6
|
+
Description:
|
|
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 32bit ARM32 family of processors
|
|
30
|
+
|
|
31
|
+
SUPPORTED CALLING CONVENTIONS
|
|
32
|
+
armthumbcall
|
|
33
|
+
|
|
34
|
+
REVISION
|
|
35
|
+
2008/08/12 initial
|
|
36
|
+
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
#ifndef DYNCALL_CALLVM_ARM32_THUMB_H
|
|
41
|
+
#define DYNCALL_CALLVM_ARM32_THUMB_H
|
|
42
|
+
|
|
43
|
+
#include "dyncall_call_arm32_thumb.h"
|
|
44
|
+
#include "dyncall_callvm.h"
|
|
45
|
+
#include "dyncall_vector.h"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
typedef struct
|
|
49
|
+
{
|
|
50
|
+
DCCallVM mInterface;
|
|
51
|
+
DCpointer mpCallFunc;
|
|
52
|
+
DCVecHead mVecHead;
|
|
53
|
+
} DCCallVM_arm32_thumb;
|
|
54
|
+
|
|
55
|
+
DCCallVM* dcNewCallVM_arm32_thumb(DCsize size);
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
#endif /* DYNCALL_CALLVM_ARM32_THUMB_H */
|
|
59
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncall
|
|
5
|
+
File: dyncall/dyncall_callvm_base.c
|
|
6
|
+
Description: ARM 32-bit "thumb" 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
|
+
#include "dyncall_callvm.h"
|
|
28
|
+
|
|
29
|
+
void dc_callvm_base_init(DCCallVM* pInstance, DCCallVM_vt* pVTable)
|
|
30
|
+
{
|
|
31
|
+
pInstance->mVTpointer = pVTable;
|
|
32
|
+
pInstance->mError = DC_ERROR_NONE;
|
|
33
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncall
|
|
5
|
+
File: dyncall/dyncall_callvm_mips.c
|
|
6
|
+
Description: ARM 32-bit "thumb" 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
|
+
#if defined(__GNUC__)
|
|
28
|
+
|
|
29
|
+
#if defined(DC__ABI_MIPS_O32)
|
|
30
|
+
#include "dyncall_callvm_mips_o32.c"
|
|
31
|
+
#elif defined(DC__ABI_MIPS_N64)
|
|
32
|
+
#include "dyncall_callvm_mips_n64.c"
|
|
33
|
+
#elif defined(DC__ABI_MIPS_N32)
|
|
34
|
+
#include "dyncall_callvm_mips_n32.c"
|
|
35
|
+
#else
|
|
36
|
+
#include "dyncall_callvm_mips_eabi.c"
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
#endif
|
|
40
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncall
|
|
5
|
+
File: dyncall/dyncall_callvm_mips.h
|
|
6
|
+
Description:
|
|
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_H
|
|
28
|
+
#define DYNCALL_CALLVM_MIPS_H
|
|
29
|
+
|
|
30
|
+
/* Suported ABIs: */
|
|
31
|
+
|
|
32
|
+
#include "dyncall_callvm_mips_o32.h"
|
|
33
|
+
#include "dyncall_callvm_mips_eabi.h"
|
|
34
|
+
#include "dyncall_callvm_mips_n64.h"
|
|
35
|
+
|
|
36
|
+
#endif /* DYNCALL_CALLVM_MIPS_H */
|
|
37
|
+
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncall
|
|
5
|
+
File: dyncall/dyncall_callvm_mips_eabi.c
|
|
6
|
+
Description: Implementation of Call VM for mips "eabi" abi.
|
|
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
|
+
#include "dyncall_callvm_mips_eabi.h"
|
|
28
|
+
#include "dyncall_alloc.h"
|
|
29
|
+
|
|
30
|
+
static void dc_callvm_reset_mips_eabi(DCCallVM* in_self)
|
|
31
|
+
{
|
|
32
|
+
DCCallVM_mips_eabi* self = (DCCallVM_mips_eabi*)in_self;
|
|
33
|
+
dcVecReset(&self->mVecHead);
|
|
34
|
+
self->mIntRegs = 0;
|
|
35
|
+
self->mSingleRegs = 0;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
static DCCallVM* dc_callvm_new_mips_eabi(DCCallVM_vt* vt, DCsize size)
|
|
39
|
+
{
|
|
40
|
+
/* Store at least 16 bytes (4 words) for internal spill area. Assembly code depends on it. */
|
|
41
|
+
DCCallVM_mips_eabi* self = (DCCallVM_mips_eabi*)dcAllocMem(sizeof(DCCallVM_mips_eabi)+size+16);
|
|
42
|
+
dc_callvm_base_init(&self->mInterface, vt);
|
|
43
|
+
dcVecInit(&self->mVecHead, size);
|
|
44
|
+
dc_callvm_reset_mips_eabi( (DCCallVM*) self );
|
|
45
|
+
return (DCCallVM*)self;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
static void dc_callvm_free_mips_eabi(DCCallVM* in_self)
|
|
50
|
+
{
|
|
51
|
+
dcFreeMem(in_self);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
static void dc_callvm_mode_mips_eabi(DCCallVM* in_self,DCint mode)
|
|
55
|
+
{
|
|
56
|
+
switch(mode) {
|
|
57
|
+
case DC_CALL_C_DEFAULT:
|
|
58
|
+
case DC_CALL_C_ELLIPSIS:
|
|
59
|
+
case DC_CALL_C_MIPS32_EABI:
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
in_self->mError = DC_ERROR_UNSUPPORTED_MODE; return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/* arg int -- fillup integer register file OR push on stack */
|
|
67
|
+
|
|
68
|
+
static void dc_callvm_argInt_mips_eabi(DCCallVM* in_self, DCint i)
|
|
69
|
+
{
|
|
70
|
+
DCCallVM_mips_eabi* self = (DCCallVM_mips_eabi*)in_self;
|
|
71
|
+
/* fillup integer register file */
|
|
72
|
+
if (self->mIntRegs < 8)
|
|
73
|
+
self->mRegData.mIntData[self->mIntRegs++] = i;
|
|
74
|
+
else
|
|
75
|
+
dcVecAppend(&self->mVecHead, &i, sizeof(DCint));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
static void dc_callvm_argPointer_mips_eabi(DCCallVM* in_self, DCpointer x)
|
|
79
|
+
{
|
|
80
|
+
dc_callvm_argInt_mips_eabi(in_self, * (DCint*) &x );
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
static void dc_callvm_argBool_mips_eabi(DCCallVM* in_self, DCbool x)
|
|
84
|
+
{
|
|
85
|
+
dc_callvm_argInt_mips_eabi(in_self, (DCint)x);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
static void dc_callvm_argChar_mips_eabi(DCCallVM* in_self, DCchar x)
|
|
89
|
+
{
|
|
90
|
+
dc_callvm_argInt_mips_eabi(in_self, (DCint)x);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
static void dc_callvm_argShort_mips_eabi(DCCallVM* in_self, DCshort x)
|
|
94
|
+
{
|
|
95
|
+
dc_callvm_argInt_mips_eabi(in_self, (DCint)x);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
static void dc_callvm_argLong_mips_eabi(DCCallVM* in_self, DClong x)
|
|
99
|
+
{
|
|
100
|
+
dc_callvm_argInt_mips_eabi(in_self, (DCint)x);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
static void dc_callvm_argLongLong_mips_eabi(DCCallVM* in_self, DClonglong Lv)
|
|
104
|
+
{
|
|
105
|
+
DCCallVM_mips_eabi* self = (DCCallVM_mips_eabi*)in_self;
|
|
106
|
+
|
|
107
|
+
if (self->mIntRegs < 7) {
|
|
108
|
+
DCint* p = (DCint*) &Lv;
|
|
109
|
+
/* skip odd register (align 64 bit) */
|
|
110
|
+
self->mIntRegs += self->mIntRegs & 1;
|
|
111
|
+
self->mRegData.mIntData[self->mIntRegs++] = p[0];
|
|
112
|
+
self->mRegData.mIntData[self->mIntRegs++] = p[1];
|
|
113
|
+
} else {
|
|
114
|
+
self->mIntRegs = 8;
|
|
115
|
+
/* 64 bit values need to be aligned on 8 byte boundaries */
|
|
116
|
+
dcVecSkip(&self->mVecHead, dcVecSize(&self->mVecHead) & 4);
|
|
117
|
+
dcVecAppend(&self->mVecHead, &Lv, sizeof(DClonglong));
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
static void dc_callvm_argFloat_mips_eabi(DCCallVM* in_self, DCfloat x)
|
|
122
|
+
{
|
|
123
|
+
DCCallVM_mips_eabi* self = (DCCallVM_mips_eabi*)in_self;
|
|
124
|
+
if (self->mSingleRegs < 8) {
|
|
125
|
+
self->mRegData.mSingleData[self->mSingleRegs++] = x;
|
|
126
|
+
} else {
|
|
127
|
+
dcVecAppend(&self->mVecHead, &x, sizeof(DCfloat) );
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
static void dc_callvm_argDouble_mips_eabi(DCCallVM* in_self, DCdouble x)
|
|
132
|
+
{
|
|
133
|
+
DClonglong* p = (DClonglong*) &x;
|
|
134
|
+
dc_callvm_argLongLong_mips_eabi(in_self, *p);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/* Call. */
|
|
138
|
+
void dc_callvm_call_mips_eabi(DCCallVM* in_self, DCpointer target)
|
|
139
|
+
{
|
|
140
|
+
DCCallVM_mips_eabi* self = (DCCallVM_mips_eabi*)in_self;
|
|
141
|
+
dcCall_mips_eabi(target, &self->mRegData, dcVecSize(&self->mVecHead), dcVecData(&self->mVecHead));
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
DCCallVM_vt gVT_mips_eabi =
|
|
145
|
+
{
|
|
146
|
+
&dc_callvm_free_mips_eabi
|
|
147
|
+
, &dc_callvm_reset_mips_eabi
|
|
148
|
+
, &dc_callvm_mode_mips_eabi
|
|
149
|
+
, &dc_callvm_argBool_mips_eabi
|
|
150
|
+
, &dc_callvm_argChar_mips_eabi
|
|
151
|
+
, &dc_callvm_argShort_mips_eabi
|
|
152
|
+
, &dc_callvm_argInt_mips_eabi
|
|
153
|
+
, &dc_callvm_argLong_mips_eabi
|
|
154
|
+
, &dc_callvm_argLongLong_mips_eabi
|
|
155
|
+
, &dc_callvm_argFloat_mips_eabi
|
|
156
|
+
, &dc_callvm_argDouble_mips_eabi
|
|
157
|
+
, &dc_callvm_argPointer_mips_eabi
|
|
158
|
+
, NULL /* argStruct */
|
|
159
|
+
, (DCvoidvmfunc*) &dc_callvm_call_mips_eabi
|
|
160
|
+
, (DCboolvmfunc*) &dc_callvm_call_mips_eabi
|
|
161
|
+
, (DCcharvmfunc*) &dc_callvm_call_mips_eabi
|
|
162
|
+
, (DCshortvmfunc*) &dc_callvm_call_mips_eabi
|
|
163
|
+
, (DCintvmfunc*) &dc_callvm_call_mips_eabi
|
|
164
|
+
, (DClongvmfunc*) &dc_callvm_call_mips_eabi
|
|
165
|
+
, (DClonglongvmfunc*) &dc_callvm_call_mips_eabi
|
|
166
|
+
, (DCfloatvmfunc*) &dc_callvm_call_mips_eabi
|
|
167
|
+
, (DCdoublevmfunc*) &dc_callvm_call_mips_eabi
|
|
168
|
+
, (DCpointervmfunc*) &dc_callvm_call_mips_eabi
|
|
169
|
+
, NULL /* callStruct */
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
DCCallVM* dcNewCallVM_mips_eabi(DCsize size)
|
|
173
|
+
{
|
|
174
|
+
return dc_callvm_new_mips_eabi(&gVT_mips_eabi, size);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
DCCallVM* dcNewCallVM(DCsize size)
|
|
178
|
+
{
|
|
179
|
+
return dcNewCallVM_mips_eabi(size);
|
|
180
|
+
}
|
|
181
|
+
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncall
|
|
5
|
+
File: dyncall/dyncall_callvm_mips_eabi.h
|
|
6
|
+
Description:
|
|
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 32bit MIPS family of processors
|
|
30
|
+
|
|
31
|
+
SUPPORTED CALLING CONVENTIONS
|
|
32
|
+
eabi
|
|
33
|
+
|
|
34
|
+
REVISION
|
|
35
|
+
2008/01/03 initial
|
|
36
|
+
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
#ifndef DYNCALL_CALLVM_MIPS_EABI_H
|
|
41
|
+
#define DYNCALL_CALLVM_MIPS_EABI_H
|
|
42
|
+
|
|
43
|
+
#include "dyncall_call_mips_eabi.h"
|
|
44
|
+
#include "dyncall_callvm.h"
|
|
45
|
+
#include "dyncall_vector.h"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
typedef struct
|
|
49
|
+
{
|
|
50
|
+
DCCallVM mInterface;
|
|
51
|
+
int mIntRegs;
|
|
52
|
+
int mSingleRegs;
|
|
53
|
+
struct DCRegData_mips_eabi mRegData;
|
|
54
|
+
DCVecHead mVecHead;
|
|
55
|
+
} DCCallVM_mips_eabi;
|
|
56
|
+
|
|
57
|
+
DCCallVM* dcNewCallVM_mips_eabi(DCsize size);
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
#endif /* DYNCALL_CALLVM_MIPS_EABI_H */
|
|
61
|
+
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/*
|
|
2
|
+
|
|
3
|
+
Package: dyncall
|
|
4
|
+
Library: dyncall
|
|
5
|
+
File: dyncall/dyncall_callvm_mips_n32.c
|
|
6
|
+
Description: mips "n32" 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
|
+
n32
|
|
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_n32.h"
|
|
52
|
+
#include "dyncall_alloc.h"
|
|
53
|
+
#include "dyncall_utils.h"
|
|
54
|
+
|
|
55
|
+
static void dc_callvm_reset_mips_n32(DCCallVM* in_self)
|
|
56
|
+
{
|
|
57
|
+
DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)in_self;
|
|
58
|
+
dcVecReset(&self->mVecHead);
|
|
59
|
+
self->mRegCount = 0;
|
|
60
|
+
self->mRegData.mUseDouble = 0LL;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
static DCCallVM* dc_callvm_new_mips_n32(DCCallVM_vt* vt, DCsize size)
|
|
64
|
+
{
|
|
65
|
+
DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)dcAllocMem(sizeof(DCCallVM_mips_n32)+size);
|
|
66
|
+
dc_callvm_base_init(&self->mInterface, vt);
|
|
67
|
+
dcVecInit(&self->mVecHead, size);
|
|
68
|
+
dc_callvm_reset_mips_n32( (DCCallVM*) self );
|
|
69
|
+
return (DCCallVM*)self;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
static void dc_callvm_free_mips_n32(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_n32(DCCallVM* in_self, DClonglong Lv)
|
|
87
|
+
{
|
|
88
|
+
DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)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_n32(DCCallVM* in_self, DCint i)
|
|
97
|
+
{
|
|
98
|
+
dc_callvm_argLongLong_mips_n32(in_self, (DClonglong) i );
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
static void dc_callvm_argPointer_mips_n32(DCCallVM* in_self, DCpointer x)
|
|
102
|
+
{
|
|
103
|
+
dc_callvm_argLongLong_mips_n32(in_self, * (DClonglong*) &x );
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
static void dc_callvm_argBool_mips_n32(DCCallVM* in_self, DCbool x)
|
|
107
|
+
{
|
|
108
|
+
dc_callvm_argLongLong_mips_n32(in_self, (DClonglong)x);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
static void dc_callvm_argChar_mips_n32(DCCallVM* in_self, DCchar x)
|
|
112
|
+
{
|
|
113
|
+
dc_callvm_argLongLong_mips_n32(in_self, (DClonglong)x);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
static void dc_callvm_argShort_mips_n32(DCCallVM* in_self, DCshort x)
|
|
117
|
+
{
|
|
118
|
+
dc_callvm_argLongLong_mips_n32(in_self, (DClonglong)x);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
static void dc_callvm_argLong_mips_n32(DCCallVM* in_self, DClong x)
|
|
122
|
+
{
|
|
123
|
+
dc_callvm_argLongLong_mips_n32(in_self, (DClonglong)x);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
static void dc_callvm_argDouble_mips_n32(DCCallVM* in_self, DCdouble x)
|
|
127
|
+
{
|
|
128
|
+
DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)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_n32(DCCallVM* in_self, DCfloat x)
|
|
138
|
+
{
|
|
139
|
+
DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)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_n32_ellipsis(DCCallVM* in_self, DCdouble x)
|
|
156
|
+
{
|
|
157
|
+
dc_callvm_argLongLong_mips_n32(in_self, * ( (DClonglong*) &x ) );
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
static void dc_callvm_argFloat_mips_n32_ellipsis(DCCallVM* in_self, DCfloat x)
|
|
161
|
+
{
|
|
162
|
+
dc_callvm_argDouble_mips_n32_ellipsis(in_self, (DCdouble) x );
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
/* Call. */
|
|
167
|
+
|
|
168
|
+
void dc_callvm_call_mips_n32(DCCallVM* in_self, DCpointer target)
|
|
169
|
+
{
|
|
170
|
+
DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)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_n32(target, &self->mRegData, size, dcVecData(&self->mVecHead));
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/* Forward Declaration. */
|
|
180
|
+
static void dc_callvm_mode_mips_n32(DCCallVM* in_self,DCint mode);
|
|
181
|
+
|
|
182
|
+
DCCallVM_vt gVT_mips_n32 =
|
|
183
|
+
{
|
|
184
|
+
&dc_callvm_free_mips_n32
|
|
185
|
+
, &dc_callvm_reset_mips_n32
|
|
186
|
+
, &dc_callvm_mode_mips_n32
|
|
187
|
+
, &dc_callvm_argBool_mips_n32
|
|
188
|
+
, &dc_callvm_argChar_mips_n32
|
|
189
|
+
, &dc_callvm_argShort_mips_n32
|
|
190
|
+
, &dc_callvm_argInt_mips_n32
|
|
191
|
+
, &dc_callvm_argLong_mips_n32
|
|
192
|
+
, &dc_callvm_argLongLong_mips_n32
|
|
193
|
+
, &dc_callvm_argFloat_mips_n32
|
|
194
|
+
, &dc_callvm_argDouble_mips_n32
|
|
195
|
+
, &dc_callvm_argPointer_mips_n32
|
|
196
|
+
, NULL /* argStruct */
|
|
197
|
+
, (DCvoidvmfunc*) &dc_callvm_call_mips_n32
|
|
198
|
+
, (DCboolvmfunc*) &dc_callvm_call_mips_n32
|
|
199
|
+
, (DCcharvmfunc*) &dc_callvm_call_mips_n32
|
|
200
|
+
, (DCshortvmfunc*) &dc_callvm_call_mips_n32
|
|
201
|
+
, (DCintvmfunc*) &dc_callvm_call_mips_n32
|
|
202
|
+
, (DClongvmfunc*) &dc_callvm_call_mips_n32
|
|
203
|
+
, (DClonglongvmfunc*) &dc_callvm_call_mips_n32
|
|
204
|
+
, (DCfloatvmfunc*) &dc_callvm_call_mips_n32
|
|
205
|
+
, (DCdoublevmfunc*) &dc_callvm_call_mips_n32
|
|
206
|
+
, (DCpointervmfunc*) &dc_callvm_call_mips_n32
|
|
207
|
+
, NULL /* callStruct */
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
DCCallVM_vt gVT_mips_n32_ellipsis =
|
|
211
|
+
{
|
|
212
|
+
&dc_callvm_free_mips_n32
|
|
213
|
+
, &dc_callvm_reset_mips_n32
|
|
214
|
+
, &dc_callvm_mode_mips_n32
|
|
215
|
+
, &dc_callvm_argBool_mips_n32
|
|
216
|
+
, &dc_callvm_argChar_mips_n32
|
|
217
|
+
, &dc_callvm_argShort_mips_n32
|
|
218
|
+
, &dc_callvm_argInt_mips_n32
|
|
219
|
+
, &dc_callvm_argLong_mips_n32
|
|
220
|
+
, &dc_callvm_argLongLong_mips_n32
|
|
221
|
+
, &dc_callvm_argFloat_mips_n32_ellipsis
|
|
222
|
+
, &dc_callvm_argDouble_mips_n32_ellipsis
|
|
223
|
+
, &dc_callvm_argPointer_mips_n32
|
|
224
|
+
, NULL /* argStruct */
|
|
225
|
+
, (DCvoidvmfunc*) &dc_callvm_call_mips_n32
|
|
226
|
+
, (DCboolvmfunc*) &dc_callvm_call_mips_n32
|
|
227
|
+
, (DCcharvmfunc*) &dc_callvm_call_mips_n32
|
|
228
|
+
, (DCshortvmfunc*) &dc_callvm_call_mips_n32
|
|
229
|
+
, (DCintvmfunc*) &dc_callvm_call_mips_n32
|
|
230
|
+
, (DClongvmfunc*) &dc_callvm_call_mips_n32
|
|
231
|
+
, (DClonglongvmfunc*) &dc_callvm_call_mips_n32
|
|
232
|
+
, (DCfloatvmfunc*) &dc_callvm_call_mips_n32
|
|
233
|
+
, (DCdoublevmfunc*) &dc_callvm_call_mips_n32
|
|
234
|
+
, (DCpointervmfunc*) &dc_callvm_call_mips_n32
|
|
235
|
+
, NULL /* callStruct */
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
static void dc_callvm_mode_mips_n32(DCCallVM* self,DCint mode)
|
|
239
|
+
{
|
|
240
|
+
switch(mode) {
|
|
241
|
+
case DC_CALL_C_DEFAULT:
|
|
242
|
+
self->mVTpointer = &gVT_mips_n32;
|
|
243
|
+
break;
|
|
244
|
+
case DC_CALL_C_ELLIPSIS:
|
|
245
|
+
self->mVTpointer = &gVT_mips_n32_ellipsis;
|
|
246
|
+
break;
|
|
247
|
+
default:
|
|
248
|
+
self->mError = DC_ERROR_UNSUPPORTED_MODE;
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
DCCallVM* dcNewCallVM_mips_n32(DCsize size)
|
|
254
|
+
{
|
|
255
|
+
return dc_callvm_new_mips_n32(&gVT_mips_n32, size);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
DCCallVM* dcNewCallVM_mips_n32_ellipsis(DCsize size)
|
|
259
|
+
{
|
|
260
|
+
return dc_callvm_new_mips_n32(&gVT_mips_n32_ellipsis, size);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
DCCallVM* dcNewCallVM(DCsize size)
|
|
265
|
+
{
|
|
266
|
+
return dcNewCallVM_mips_n32(size);
|
|
267
|
+
}
|
|
268
|
+
|