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;