Mercurial > hg > truffle
comparison src/cpu/x86/vm/graalRuntime_x86.cpp @ 7235:a6bd253a770f
expanded LOG_PRINTF stub to handle up to 3 arguments in addition to the format string
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 17 Dec 2012 11:12:01 +0100 |
parents | 8a3efb8c831d |
children | 707e9cca11de |
comparison
equal
deleted
inserted
replaced
7234:911872d97f65 | 7235:a6bd253a770f |
---|---|
184 push(arg1); | 184 push(arg1); |
185 #endif // _LP64 | 185 #endif // _LP64 |
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) { | |
190 #ifdef _LP64 | |
191 // if there is any conflict use the stack | |
192 if (arg1 == c_rarg2 || arg1 == c_rarg3 || arg1 == c_rarg4 || | |
193 arg2 == c_rarg1 || arg2 == c_rarg3 || arg2 == c_rarg4 || | |
194 arg3 == c_rarg1 || arg3 == c_rarg2 || arg3 == c_rarg4 || | |
195 arg4 == c_rarg1 || arg4 == c_rarg2 || arg4 == c_rarg3) { | |
196 push(arg4); | |
197 push(arg3); | |
198 push(arg2); | |
199 push(arg1); | |
200 pop(c_rarg1); | |
201 pop(c_rarg2); | |
202 pop(c_rarg3); | |
203 pop(c_rarg4); | |
204 } else { | |
205 mov(c_rarg1, arg1); | |
206 mov(c_rarg2, arg2); | |
207 mov(c_rarg3, arg3); | |
208 mov(c_rarg4, arg4); | |
209 } | |
210 #else | |
211 push(arg4); | |
212 push(arg3); | |
213 push(arg2); | |
214 push(arg1); | |
215 #endif // _LP64 | |
216 return call_RT(oop_result1, metadata_result, entry, 4); | |
217 } | |
218 | |
189 // Implementation of GraalStubFrame | 219 // Implementation of GraalStubFrame |
190 | 220 |
191 class GraalStubFrame: public StackObj { | 221 class GraalStubFrame: public StackObj { |
192 private: | 222 private: |
193 GraalStubAssembler* _sasm; | 223 GraalStubAssembler* _sasm; |
1020 | 1050 |
1021 case graal_log_printf_id: { | 1051 case graal_log_printf_id: { |
1022 __ enter(); | 1052 __ enter(); |
1023 oop_maps = new OopMapSet(); | 1053 oop_maps = new OopMapSet(); |
1024 OopMap* oop_map = save_live_registers(sasm, 0); | 1054 OopMap* oop_map = save_live_registers(sasm, 0); |
1025 int call_offset = __ call_RT(noreg, noreg, (address)graal_log_printf, j_rarg0, j_rarg1, j_rarg2); | 1055 int call_offset = __ call_RT(noreg, noreg, (address)graal_log_printf, j_rarg0, j_rarg1, j_rarg2, j_rarg3); |
1026 oop_maps->add_gc_map(call_offset, oop_map); | 1056 oop_maps->add_gc_map(call_offset, oop_map); |
1027 restore_live_registers(sasm); | 1057 restore_live_registers(sasm); |
1028 __ leave(); | 1058 __ leave(); |
1029 __ ret(0); | 1059 __ ret(0); |
1030 break; | 1060 break; |