Mercurial > hg > truffle
comparison src/cpu/x86/vm/graalRuntime_x86.cpp @ 7386:707e9cca11de
fixed HotSpot windows build
fixed Thread.isInterrupted() slowcase
author | Christian Haeubl <haeubl@ssw.jku.at> |
---|---|
date | Tue, 18 Dec 2012 15:05:58 +0100 |
parents | a6bd253a770f |
children | 983f7bdb85ff 92d21814cf7b |
comparison
equal
deleted
inserted
replaced
7256:d0c4b6f8d67f | 7386:707e9cca11de |
---|---|
186 return call_RT(oop_result1, metadata_result, entry, 3); | 186 return call_RT(oop_result1, metadata_result, entry, 3); |
187 } | 187 } |
188 | 188 |
189 int GraalStubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry, Register arg1, Register arg2, Register arg3, Register arg4) { | 189 int GraalStubAssembler::call_RT(Register oop_result1, Register metadata_result, address entry, Register arg1, Register arg2, Register arg3, Register arg4) { |
190 #ifdef _LP64 | 190 #ifdef _LP64 |
191 // if there is any conflict use the stack | 191 #ifdef _WIN64 |
192 if (arg1 == c_rarg2 || arg1 == c_rarg3 || arg1 == c_rarg4 || | 192 // on windows we only have the registers c_rarg0 to c_rarg3 for transferring parameters -> remaining parameters are on the stack |
193 arg2 == c_rarg1 || arg2 == c_rarg3 || arg2 == c_rarg4 || | 193 if (arg1 == c_rarg2 || arg1 == c_rarg3 || |
194 arg3 == c_rarg1 || arg3 == c_rarg2 || arg3 == c_rarg4 || | 194 arg2 == c_rarg1 || arg2 == c_rarg3 || |
195 arg4 == c_rarg1 || arg4 == c_rarg2 || arg4 == c_rarg3) { | 195 arg3 == c_rarg1 || arg3 == c_rarg2 || |
196 push(arg4); | 196 arg4 == c_rarg1 || arg4 == c_rarg2) { |
197 push(arg3); | 197 push(arg4); |
198 push(arg2); | 198 push(arg3); |
199 push(arg1); | 199 push(arg2); |
200 pop(c_rarg1); | 200 push(arg1); |
201 pop(c_rarg2); | 201 pop(c_rarg1); |
202 pop(c_rarg3); | 202 pop(c_rarg2); |
203 pop(c_rarg4); | 203 pop(c_rarg3); |
204 } else { | 204 } else { |
205 mov(c_rarg1, arg1); | 205 mov(c_rarg1, arg1); |
206 mov(c_rarg2, arg2); | 206 mov(c_rarg2, arg2); |
207 mov(c_rarg3, arg3); | 207 mov(c_rarg3, arg3); |
208 mov(c_rarg4, arg4); | 208 push(arg4); |
209 } | 209 } |
210 #else | |
211 // if there is any conflict use the stack | |
212 if (arg1 == c_rarg2 || arg1 == c_rarg3 || arg1 == c_rarg4 || | |
213 arg2 == c_rarg1 || arg2 == c_rarg3 || arg2 == c_rarg4 || | |
214 arg3 == c_rarg1 || arg3 == c_rarg2 || arg3 == c_rarg4 || | |
215 arg4 == c_rarg1 || arg4 == c_rarg2 || arg4 == c_rarg3) { | |
216 push(arg4); | |
217 push(arg3); | |
218 push(arg2); | |
219 push(arg1); | |
220 pop(c_rarg1); | |
221 pop(c_rarg2); | |
222 pop(c_rarg3); | |
223 pop(c_rarg4); | |
224 } else { | |
225 mov(c_rarg1, arg1); | |
226 mov(c_rarg2, arg2); | |
227 mov(c_rarg3, arg3); | |
228 mov(c_rarg4, arg4); | |
229 } | |
230 #endif | |
210 #else | 231 #else |
211 push(arg4); | 232 push(arg4); |
212 push(arg3); | 233 push(arg3); |
213 push(arg2); | 234 push(arg2); |
214 push(arg1); | 235 push(arg1); |