Mercurial > hg > truffle
comparison src/cpu/x86/vm/c1_MacroAssembler_x86.cpp @ 1295:3cf667df43ef
6919934: JSR 292 needs to support x86 C1
Summary: This implements JSR 292 support for C1 x86.
Reviewed-by: never, jrose, kvn
author | twisti |
---|---|
date | Tue, 09 Mar 2010 20:16:19 +0100 |
parents | bd02caa94611 |
children | c18cbe5936b8 |
comparison
equal
deleted
inserted
replaced
1293:51db1e4b379d | 1295:3cf667df43ef |
---|---|
1 /* | 1 /* |
2 * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved. | 2 * Copyright 1999-2010 Sun Microsystems, Inc. All Rights Reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
315 const int ic_cmp_size = LP64_ONLY(10) NOT_LP64(9); | 315 const int ic_cmp_size = LP64_ONLY(10) NOT_LP64(9); |
316 assert(offset() - start_offset == ic_cmp_size, "check alignment in emit_method_entry"); | 316 assert(offset() - start_offset == ic_cmp_size, "check alignment in emit_method_entry"); |
317 } | 317 } |
318 | 318 |
319 | 319 |
320 void C1_MacroAssembler::method_exit(bool restore_frame) { | |
321 if (restore_frame) { | |
322 leave(); | |
323 } | |
324 ret(0); | |
325 } | |
326 | |
327 | |
328 void C1_MacroAssembler::build_frame(int frame_size_in_bytes) { | 320 void C1_MacroAssembler::build_frame(int frame_size_in_bytes) { |
329 // Make sure there is enough stack space for this method's activation. | 321 // Make sure there is enough stack space for this method's activation. |
330 // Note that we do this before doing an enter(). This matches the | 322 // Note that we do this before doing an enter(). This matches the |
331 // ordering of C2's stack overflow check / rsp decrement and allows | 323 // ordering of C2's stack overflow check / rsp decrement and allows |
332 // the SharedRuntime stack overflow handling to be consistent | 324 // the SharedRuntime stack overflow handling to be consistent |
333 // between the two compilers. | 325 // between the two compilers. |
334 generate_stack_overflow_check(frame_size_in_bytes); | 326 generate_stack_overflow_check(frame_size_in_bytes); |
335 | 327 |
336 enter(); | 328 push(rbp); |
337 #ifdef TIERED | 329 #ifdef TIERED |
338 // c2 leaves fpu stack dirty. Clean it on entry | 330 // c2 leaves fpu stack dirty. Clean it on entry |
339 if (UseSSE < 2 ) { | 331 if (UseSSE < 2 ) { |
340 empty_FPU_stack(); | 332 empty_FPU_stack(); |
341 } | 333 } |
342 #endif // TIERED | 334 #endif // TIERED |
343 decrement(rsp, frame_size_in_bytes); // does not emit code for frame_size == 0 | 335 decrement(rsp, frame_size_in_bytes); // does not emit code for frame_size == 0 |
336 } | |
337 | |
338 | |
339 void C1_MacroAssembler::remove_frame(int frame_size_in_bytes) { | |
340 increment(rsp, frame_size_in_bytes); // Does not emit code for frame_size == 0 | |
341 pop(rbp); | |
344 } | 342 } |
345 | 343 |
346 | 344 |
347 void C1_MacroAssembler::unverified_entry(Register receiver, Register ic_klass) { | 345 void C1_MacroAssembler::unverified_entry(Register receiver, Register ic_klass) { |
348 if (C1Breakpoint) int3(); | 346 if (C1Breakpoint) int3(); |