Mercurial > hg > truffle
comparison src/cpu/x86/vm/assembler_x86.cpp @ 1513:df736661d0c8
Merge
author | jrose |
---|---|
date | Tue, 11 May 2010 15:19:19 -0700 |
parents | cff162798819 2338d41fbd81 |
children | c18cbe5936b8 2d127394260e |
comparison
equal
deleted
inserted
replaced
1496:e8e83be27dd7 | 1513:df736661d0c8 |
---|---|
1 /* | 1 /* |
2 * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved. | 2 * Copyright 1997-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. |
6490 } | 6490 } |
6491 return off; | 6491 return off; |
6492 } | 6492 } |
6493 | 6493 |
6494 void MacroAssembler::load_sized_value(Register dst, Address src, | 6494 void MacroAssembler::load_sized_value(Register dst, Address src, |
6495 int size_in_bytes, bool is_signed) { | 6495 size_t size_in_bytes, bool is_signed) { |
6496 switch (size_in_bytes ^ (is_signed ? -1 : 0)) { | 6496 switch (size_in_bytes) { |
6497 #ifndef _LP64 | 6497 #ifndef _LP64 |
6498 // For case 8, caller is responsible for manually loading | 6498 // For case 8, caller is responsible for manually loading |
6499 // the second word into another register. | 6499 // the second word into another register. |
6500 case ~8: // fall through: | 6500 case 8: movl(dst, src); break; |
6501 case 8: movl( dst, src ); break; | |
6502 #else | 6501 #else |
6503 case ~8: // fall through: | 6502 case 8: movq(dst, src); break; |
6504 case 8: movq( dst, src ); break; | |
6505 #endif | 6503 #endif |
6506 case ~4: // fall through: | 6504 case 4: movl(dst, src); break; |
6507 case 4: movl( dst, src ); break; | 6505 case 2: is_signed ? load_signed_short(dst, src) : load_unsigned_short(dst, src); break; |
6508 case ~2: load_signed_short( dst, src ); break; | 6506 case 1: is_signed ? load_signed_byte( dst, src) : load_unsigned_byte( dst, src); break; |
6509 case 2: load_unsigned_short( dst, src ); break; | 6507 default: ShouldNotReachHere(); |
6510 case ~1: load_signed_byte( dst, src ); break; | |
6511 case 1: load_unsigned_byte( dst, src ); break; | |
6512 default: ShouldNotReachHere(); | |
6513 } | 6508 } |
6514 } | 6509 } |
6515 | 6510 |
6516 void MacroAssembler::mov32(AddressLiteral dst, Register src) { | 6511 void MacroAssembler::mov32(AddressLiteral dst, Register src) { |
6517 if (reachable(dst)) { | 6512 if (reachable(dst)) { |
7704 // argument list in JVM stack slots. This field is either located directly | 7699 // argument list in JVM stack slots. This field is either located directly |
7705 // in every method handle, or else is indirectly accessed through the | 7700 // in every method handle, or else is indirectly accessed through the |
7706 // method handle's MethodType. This macro hides the distinction. | 7701 // method handle's MethodType. This macro hides the distinction. |
7707 void MacroAssembler::load_method_handle_vmslots(Register vmslots_reg, Register mh_reg, | 7702 void MacroAssembler::load_method_handle_vmslots(Register vmslots_reg, Register mh_reg, |
7708 Register temp_reg) { | 7703 Register temp_reg) { |
7704 assert_different_registers(vmslots_reg, mh_reg, temp_reg); | |
7709 if (UseCompressedOops) unimplemented(); // field accesses must decode | 7705 if (UseCompressedOops) unimplemented(); // field accesses must decode |
7710 // load mh.type.form.vmslots | 7706 // load mh.type.form.vmslots |
7711 if (java_dyn_MethodHandle::vmslots_offset_in_bytes() != 0) { | 7707 if (java_dyn_MethodHandle::vmslots_offset_in_bytes() != 0) { |
7712 // hoist vmslots into every mh to avoid dependent load chain | 7708 // hoist vmslots into every mh to avoid dependent load chain |
7713 movl(vmslots_reg, Address(mh_reg, delayed_value(java_dyn_MethodHandle::vmslots_offset_in_bytes, temp_reg))); | 7709 movl(vmslots_reg, Address(mh_reg, delayed_value(java_dyn_MethodHandle::vmslots_offset_in_bytes, temp_reg))); |
7742 | 7738 |
7743 | 7739 |
7744 Address MacroAssembler::argument_address(RegisterOrConstant arg_slot, | 7740 Address MacroAssembler::argument_address(RegisterOrConstant arg_slot, |
7745 int extra_slot_offset) { | 7741 int extra_slot_offset) { |
7746 // cf. TemplateTable::prepare_invoke(), if (load_receiver). | 7742 // cf. TemplateTable::prepare_invoke(), if (load_receiver). |
7747 int stackElementSize = Interpreter::stackElementSize(); | 7743 int stackElementSize = Interpreter::stackElementSize; |
7748 int offset = Interpreter::expr_offset_in_bytes(extra_slot_offset+0); | 7744 int offset = Interpreter::expr_offset_in_bytes(extra_slot_offset+0); |
7749 #ifdef ASSERT | 7745 #ifdef ASSERT |
7750 int offset1 = Interpreter::expr_offset_in_bytes(extra_slot_offset+1); | 7746 int offset1 = Interpreter::expr_offset_in_bytes(extra_slot_offset+1); |
7751 assert(offset1 - offset == stackElementSize, "correct arithmetic"); | 7747 assert(offset1 - offset == stackElementSize, "correct arithmetic"); |
7752 #endif | 7748 #endif |