annotate dyncall/dyncall_call_sparc.s @ 357:d982a00c2177

- PPC64 asm syntax fix, specifying explicitly comparison mode for cmpi (newer toolchains complain, older ones took optional field of instruction which happened to be same value)
author Tassilo Philipp
date Tue, 25 Feb 2020 18:16:13 +0100
parents 91db39538e78
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.S
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 Description: Call kernel for sparc processor architecture.
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
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
28 /* ---------------------------------------------------------------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
29
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
30 @@@ this should all go in manual
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
31
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
32 call kernel for sparc 32-bit
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
33 ----------------------------
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
34 tested on linux/debian [gcc54.fsffrance.org - thanx to the farm!]
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
35
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
36 new C Interface:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
37 void dcCall_sparc (DCCallVM* callvm, DCpointer target);
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
38 %i0 %1
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
39
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
40 we need to do that, due to the special property of sparc, its 'register windows'
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
41 that propagate input registers..
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
42 otherwise, we would have a 'void' return-value layer which results in failure
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
43 to propagate back return values.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
44 instead of implementing 'dummy'-C return-values, we call directly.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
45
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
46 in sparc, this is simply a leaf-function layer using %o3.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
47
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
48 old C Interface:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
49 void dcCall_sparc (DCpointer target, DCsize size, DCpointer data);
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
50 %i0 , %i1 , %i2
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
51
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
52
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
53 Input:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
54 i0 callvm
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
55 i1 target
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
56
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
57 old Input:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
58 i0 target
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
59 i1 size
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
60 i2 data
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
61
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
62 Description:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
63 We need to raise a dynamic stack frame.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
64 Therefore we need to compute the stack size in the context of the caller as a leaf note (using o3 in addition).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
65 Then we raise the frame.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
66
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
67 sparc:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
68 - big endian
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
69
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
70 sparc V8:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
71 - integer/pointer: 32 32-bit integers.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
72 - float: 8 quad precision, 16 double precision, 32 single precision.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
73
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
74 sparc V9:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
75 - integer/pointer: 32 64-bit integers.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
76
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
77 plan9:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
78 - completely different scheme - similar to mips/plan9.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
79 - registers are named r0 .. r31
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
80 r1 stack pointer
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
81 r2 static base register
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
82 .. to be continued..
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
83
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
84 Stack Layout 32-Bit Model:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
85 - sp+92 seventh argument
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
86 - sp+68 first argument
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
87 - sp+64
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
88 - 16 registers save area (in/local).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
89
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
90 XX: should be 8 byte aligned (min stack frame size is 96).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
91 ...
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
92 92: on stack argument 6
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
93 88: input argument 5 spill
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
94 ...
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
95 68: input argument 0 spill
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
96 64: struct/union pointer return value
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
97 0: 16 registers save area
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
98
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
99 Stack Layout 64-Bit Model:
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
100 XX: should be 16 byte aligned (min stack frame size is 172).
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
101 168: on stack argument 6
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
102 136: input argument 0 spill
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
103 128: struct/union poiner return value
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
104 0: 16 registers save area
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
105
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
106
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
107
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
108 Register Usage:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
109 %sp or %o6: stack pointer, always 8 (or 16?)-byte aligned.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
110 %fp or %i6: frame pointer.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
111 %i0 and %o0: integer and pointer return values.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
112 %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
113 %f0 and %f1: return value (float).
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
114 %i0..%i5: input argument registers
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
115 %o0..%o5: output argument registers
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
116 %g0: always zero, writes to it have no effect.
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
117
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
118 Register Mappings:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
119 r0-7 -> globals
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
120 r8-15 -> outs
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
121 r16-r23 -> locals
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
122 r24-r31 -> ins
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
123
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
124 */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
125
249
91db39538e78 - replaced `.set' directives used to set symbol values in assembly files with (seemingly) more portable `=' syntax (e.g. older versions of Sun's `as' don't handle `.set')
Tassilo Philipp
parents: 192
diff changeset
126 REGSIZE = 4
91db39538e78 - replaced `.set' directives used to set symbol values in assembly files with (seemingly) more portable `=' syntax (e.g. older versions of Sun's `as' don't handle `.set')
Tassilo Philipp
parents: 192
diff changeset
127 ALIGN = 16
91db39538e78 - replaced `.set' directives used to set symbol values in assembly files with (seemingly) more portable `=' syntax (e.g. older versions of Sun's `as' don't handle `.set')
Tassilo Philipp
parents: 192
diff changeset
128 CALLVM_size = 12
91db39538e78 - replaced `.set' directives used to set symbol values in assembly files with (seemingly) more portable `=' syntax (e.g. older versions of Sun's `as' don't handle `.set')
Tassilo Philipp
parents: 192
diff changeset
129 CALLVM_dataoff = 16
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
130
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
131 .text
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
132 .global dcCall_sparc
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
133 dcCall_sparc:
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
134
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
135 /* Basic Prolog: supports up to 6 arguments. */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
136
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
137 /* o0-1: callvm,target */
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
138 or %o0, %g0, %o3 /* %o3: callvm */
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
139 or %o1, %g0, %o0 /* %o0: target */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
140 ld [%o3+CALLVM_size], %o1 /* %o1: size */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
141 add %o3, CALLVM_dataoff, %o2 /* %o2: data */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
142 /*o0-2:target,size,data*/
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
143
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
144 /*leaf functions: may use the first six output registers.*/
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
145 /*o3-5:free to use */
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
146
154
3729a99ef03c - cleanup/cosmetics/typos
cslag
parents: 0
diff changeset
147 /* Compute a matching stack size (approximate): o3 = align(92+o1,16) */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
148 add %o1, (16+1+6)*REGSIZE+ALIGN-1, %o3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
149 and %o3, -ALIGN, %o3
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
150 neg %o3
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
151
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
152 /* Prolog. */
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
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. */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
154
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
155 /* Load output registers. */
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
156 ld [%i2 ],%o0
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
157 ld [%i2+REGSIZE*1 ],%o1
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
158 ld [%i2+REGSIZE*2 ],%o2
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
159 ld [%i2+REGSIZE*3 ],%o3
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
160 ld [%i2+REGSIZE*4 ],%o4
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
161 ld [%i2+REGSIZE*5 ],%o5
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
162
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
163 /* Copy on stack? */
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
164 sub %i1, REGSIZE*6, %i1 /* i1 = decrement copy size by 6 regs (=6 regs x 4 bytes = 24 bytes total). */
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
165 cmp %i1, 0
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
166 ble .do_call
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
167 nop
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
168
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
169 /* Copy loop: */
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
170 add %i2, REGSIZE*6, %i2 /* i2 = address of 7th word of args buffer. */
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
171 or %g0, %g0, %l0 /* l0 = offset initialized to 0. */
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
172 add %sp, (16+1+6)*REGSIZE, %l2 /* l2 = argument area on stack space (7th word). (64+4+6*4 = byte offset 92). */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
173 .next:
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
174 ld [%i2+%l0],%l1 /* Read from arg buffer(%i2) to %l1. */
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
175 st %l1, [%l2+%l0] /* Write %l1 to stack space(%l2). */
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
176 add %l0, REGSIZE, %l0 /* Increment offset. */
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
177 sub %i1, REGSIZE, %i1 /* Decrement copy size. */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
178 cmp %i1, 0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
179 bgt .next
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
180 nop
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
181 .do_call:
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
182 call %i0 /* Call target. */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
183 nop
154
3729a99ef03c - cleanup/cosmetics/typos
cslag
parents: 0
diff changeset
184 or %o0, %g0, %i0
3729a99ef03c - cleanup/cosmetics/typos
cslag
parents: 0
diff changeset
185 or %o1, %g0, %i1
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
186 jmpl %i7 + 8, %g0 /* optimized restore;retl;nop */
0
3e629dc19168 initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
187 restore
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
188