annotate dyncall/dyncall_call_sparc.s @ 192:cf8134a20759

- b/c no preproc needed, changed some files from .S -> .s - some format/whitespace cleanup for readability, some declutter
author Tassilo Philipp
date Tue, 14 Mar 2017 14:14:47 +0100
parents dyncall/dyncall_call_sparc.S@b11b0735b09f
children 91db39538e78
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
192
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
126 .set REGSIZE, 4
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
127 .set ALIGN, 16
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
128 .set CALLVM_size, 12
cf8134a20759 - b/c no preproc needed, changed some files from .S -> .s
Tassilo Philipp
parents: 179
diff changeset
129 .set 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