annotate dyncall/dyncall_call_sparc_v9.S @ 0:3e629dc19168

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:24:28 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 /*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 Package: dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4 Library: dyncall
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 File: dyncall/dyncall_call_sparc_v9.S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 Description: Call kernel for sparc64 v9 ABI.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 License:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 Copyright (c) 2011-2015 Daniel Adler <dadler@uni-goettingen.de>
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 Permission to use, copy, modify, and distribute this software for any
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 purpose with or without fee is hereby granted, provided that the above
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 copyright notice and this permission notice appear in all copies.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 #define BIAS 2047
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27 .global dcCall_v9
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 /* dcCall_sparc64( DCCallVM* , void * target ) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29 /* o0 o1 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
30 dcCall_v9:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
31 or %o0, %g0, %o3 /* o3: callvm */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 or %o1, %g0, %o0 /* o0: target */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 ldx [%o3+24], %o1 /* o1: mVecSize */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 add %o3, 32, %o2 /* o2: stack */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35 /* Compute a matching stack size (approximate): o3 = align(o1+136,16) */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 add %o1, (16+1+6)*8+15, %o3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 and %o3, -16, %o3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39 neg %o3 /* o3: -stacksize */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 save %sp, %o3, %sp
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 ldd [%i2+8*0 ],%f0 /* Load double-precision float registers. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 ldd [%i2+8*1 ],%f2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 ldd [%i2+8*2 ],%f4
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45 ldd [%i2+8*3 ],%f6
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 ldd [%i2+8*4 ],%f8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47 ldd [%i2+8*5 ],%f10
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 ldd [%i2+8*6 ],%f12
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 ldd [%i2+8*7 ],%f14
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
50 ldd [%i2+8*8 ],%f16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51 ldd [%i2+8*9 ],%f18
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52 ldd [%i2+8*10],%f20
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 ldd [%i2+8*11],%f22
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 ldd [%i2+8*12],%f24
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 ldd [%i2+8*13],%f26
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56 ldd [%i2+8*14],%f28
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 ldd [%i2+8*15],%f30
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 ldx [%i2+8*0],%o0 /* Load output registers. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 ldx [%i2+8*1],%o1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 ldx [%i2+8*2],%o2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61 ldx [%i2+8*3],%o3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 ldx [%i2+8*4],%o4
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 ldx [%i2+8*5],%o5
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 sub %i1, 48, %i1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 cmp %i1, 0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66 ble .do_call
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 nop
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 /* Copy loop: */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69 add %i2, 48, %i2 /* skip homing area */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 or %g0, %g0, %l0 /* l0 = offset initialized to 0. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 add %sp, BIAS+((16+6)*8), %l2 /* l2 = argument area on stack space (7th word). (64+4+6*4 = byte offset 92). */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 .next:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73 ldx [%i2+%l0],%l1 /* Read from arg buffer(%i2) to %l1. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 stx %l1, [%l2+%l0] /* Write %l1 to stack space(%l2). */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 add %l0, 8, %l0 /* Increment offset. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76 sub %i1, 8, %i1 /* Decrement copy size. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 cmp %i1, 0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 bgt .next
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 nop
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 .do_call:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 call %i0 /* Call target. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 nop
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83 or %o0, %g0, %i0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 jmpl %i7 + 8, %g0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 restore
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 /*
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 or %o0, %g0, %i0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89 or %o1, %g0, %i1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 or %o2, %g0, %i2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91 or %o3, %g0, %i3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 return %i7 + 8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 nop
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 Changes from v8:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 - fundamental data types
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 - (un)signed int: 8,16,32,64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98 - float: 32,64,128
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 - float: IEEE 754 compilant
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
100 32 32-bit float registers f0,f1,..,f31
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
101 32 64-bit float registers f0,f2,..,f62
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
102 16 128-bit float registers f0,f4,..,f60
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
103
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
104 Description:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105 We need to raise up a dynamic stack frame.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106 Therefore we need to compute the stack size. We do this first,
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107 in the context of the caller as a leaf function (using o3 as scratch for addition).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 Then we raise the frame, ending up in o0-o3 is then i0-i3.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 Stack Layout:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 BIAS = 2047
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
113
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 BIAS+XX: should be 16 byte aligned.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 ...
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116 136: argument overflow area
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117 128: 1 extended word for struct/union poiner return value
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118 BIAS+ 0: 16 extended words for registers (in/local) save area [register window]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121 Function Argument Passing:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 - integer %o0..%o5 (caller view).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123 - floating-point %f0 .. %f15
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124 - continuous memory starting at %sp+BIAS+136 (caller view).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
126 Register Usage:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
127 %fp0..%fp31 : floating-point arguments.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
128 %sp or %o6 : stack pointer, always 8 (or 16?)-byte aligned.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
129 %fp or %i6 : frame pointer.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130 %i0 and %o0 : integer and pointer return values.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
131 %i7 and %o7 : return address. (caller puts return address to %o7, callee uses %i7)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 %fp0 and %fp1: return value (float).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 %i0..%i5 : input argument registers
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134 %o0..%o5 : output argument registers
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 %g0 : always zero, writes to it have no effect.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 Register Mappings:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
138 r0-7 -> globals
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
139 r8-15 -> outs
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 r16-r23 -> locals
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 r24-r31 -> ins
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143 Integer Register Overview Table:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 ID Class Name Description
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145 ------------------------------------------------------------------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146 0 globals g0 always zero, writes to it have no effect
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
147 1 g1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 2 g2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 3 g3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 4 g4
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
151 5 g5
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 6 g6
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
153 7 g7
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154 8 out o0 [int/ptr] arg 0 and return
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
155 9 o1 arg 1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
156 10 o2 arg 2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
157 11 o3 arg 3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
158 12 o4 arg 4
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
159 13 o5 arg 5
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
160 14 o6 stack pointer
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
161 15 o7
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162 16 local l0 scratch
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163 17 l1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
164 18 l2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
165 19 l3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
166 20 l4
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
167 21 l5
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
168 22 l6
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
169 23 l7
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
170 24 in i0 [int/pt] arg 0 and return
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
171 25 i1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
172 26 i2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
173 27 i3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
174 28 i4
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
175 29 i5
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
176 30 i6 frame pointer
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
177 31 i7
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
178 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
179
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
180 /* ---------------------------------------------------------------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
181
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
182 call kernel for sparc64 v9 abi
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
183 tested on sparc64/linux/debian [gcc54.fsffrance.org - thanx to the farm!]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
184
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
185 new C Interface:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
186 void dcCall_sparc (DCCallVM* callvm, DCpointer target);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
187 %i0 %1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
188
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
189 see dyncall_call_sparc.S for details.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
190
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
191 old C Interface:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
192 void dcCall_sparc (DCpointer target, DCsize size, DCpointer data);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
193 %i0 , %i1 , %i2
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
194 Input:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
195 i0 target
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
196 i1 size
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
197 i2 data
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
198
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
199 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
200
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
201 #if 0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
202
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
203
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
204 #define REGSIZE 8
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
205
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
206
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
207
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
208 #define SHEAD ((16+6)*8)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
209 #define ALIGN 16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
210 #define IREGS 6
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
211 #define FREGS 16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
212 #define SREGS 16
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
213 #define IBASE 0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
214 #define FBASE (IREGS*8)
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
215
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
216 // #define DHEAD ((IREGS+FREGS)*8)+SREGS*4
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
217
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
218 CALLVM_regdata = 72
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
219 CALLVM_size = 208
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
220 CALLVM_buffer = 216
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
221
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
222 #endif