Mercurial > hg > graal-compiler
comparison src/cpu/x86/vm/assembler_x86.hpp @ 2100:b1a2afa37ec4
7003271: Hotspot should track cumulative Java heap bytes allocated on a per-thread basis
Summary: Track allocated bytes in Thread's, update on TLAB retirement and direct allocation in Eden and tenured, add JNI methods for ThreadMXBean.
Reviewed-by: coleenp, kvn, dholmes, ysr
author | phh |
---|---|
date | Fri, 07 Jan 2011 10:42:32 -0500 |
parents | 2f644f85485d |
children | 28bf941f445e |
comparison
equal
deleted
inserted
replaced
2097:039eb4201e06 | 2100:b1a2afa37ec4 |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. 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. |
672 static address locate_next_instruction(address inst); | 672 static address locate_next_instruction(address inst); |
673 | 673 |
674 // Utilities | 674 // Utilities |
675 | 675 |
676 #ifdef _LP64 | 676 #ifdef _LP64 |
677 static bool is_simm(int64_t x, int nbits) { return -( CONST64(1) << (nbits-1) ) <= x && x < ( CONST64(1) << (nbits-1) ); } | 677 static bool is_simm(int64_t x, int nbits) { return -(CONST64(1) << (nbits-1)) <= x && |
678 x < (CONST64(1) << (nbits-1)); } | |
678 static bool is_simm32(int64_t x) { return x == (int64_t)(int32_t)x; } | 679 static bool is_simm32(int64_t x) { return x == (int64_t)(int32_t)x; } |
679 #else | 680 #else |
680 static bool is_simm(int32_t x, int nbits) { return -( 1 << (nbits-1) ) <= x && x < ( 1 << (nbits-1) ); } | 681 static bool is_simm(int32_t x, int nbits) { return -(1 << (nbits-1)) <= x && |
682 x < (1 << (nbits-1)); } | |
681 static bool is_simm32(int32_t x) { return true; } | 683 static bool is_simm32(int32_t x) { return true; } |
682 #endif // LP64 | 684 #endif // _LP64 |
683 | 685 |
684 // Generic instructions | 686 // Generic instructions |
685 // Does 32bit or 64bit as needed for the platform. In some sense these | 687 // Does 32bit or 64bit as needed for the platform. In some sense these |
686 // belong in macro assembler but there is no need for both varieties to exist | 688 // belong in macro assembler but there is no need for both varieties to exist |
687 | 689 |
702 void pop(Register dst); | 704 void pop(Register dst); |
703 | 705 |
704 // These are dummies to prevent surprise implicit conversions to Register | 706 // These are dummies to prevent surprise implicit conversions to Register |
705 void push(void* v); | 707 void push(void* v); |
706 void pop(void* v); | 708 void pop(void* v); |
707 | |
708 | 709 |
709 // These do register sized moves/scans | 710 // These do register sized moves/scans |
710 void rep_mov(); | 711 void rep_mov(); |
711 void rep_set(); | 712 void rep_set(); |
712 void repne_scan(); | 713 void repne_scan(); |
714 void repne_scanl(); | 715 void repne_scanl(); |
715 #endif | 716 #endif |
716 | 717 |
717 // Vanilla instructions in lexical order | 718 // Vanilla instructions in lexical order |
718 | 719 |
720 void adcl(Address dst, int32_t imm32); | |
721 void adcl(Address dst, Register src); | |
719 void adcl(Register dst, int32_t imm32); | 722 void adcl(Register dst, int32_t imm32); |
720 void adcl(Register dst, Address src); | 723 void adcl(Register dst, Address src); |
721 void adcl(Register dst, Register src); | 724 void adcl(Register dst, Register src); |
722 | 725 |
723 void adcq(Register dst, int32_t imm32); | 726 void adcq(Register dst, int32_t imm32); |
724 void adcq(Register dst, Address src); | 727 void adcq(Register dst, Address src); |
725 void adcq(Register dst, Register src); | 728 void adcq(Register dst, Register src); |
726 | |
727 | 729 |
728 void addl(Address dst, int32_t imm32); | 730 void addl(Address dst, int32_t imm32); |
729 void addl(Address dst, Register src); | 731 void addl(Address dst, Register src); |
730 void addl(Register dst, int32_t imm32); | 732 void addl(Register dst, int32_t imm32); |
731 void addl(Register dst, Address src); | 733 void addl(Register dst, Address src); |
735 void addq(Address dst, Register src); | 737 void addq(Address dst, Register src); |
736 void addq(Register dst, int32_t imm32); | 738 void addq(Register dst, int32_t imm32); |
737 void addq(Register dst, Address src); | 739 void addq(Register dst, Address src); |
738 void addq(Register dst, Register src); | 740 void addq(Register dst, Register src); |
739 | 741 |
740 | |
741 void addr_nop_4(); | 742 void addr_nop_4(); |
742 void addr_nop_5(); | 743 void addr_nop_5(); |
743 void addr_nop_7(); | 744 void addr_nop_7(); |
744 void addr_nop_8(); | 745 void addr_nop_8(); |
745 | 746 |
756 void andl(Register dst, Register src); | 757 void andl(Register dst, Register src); |
757 | 758 |
758 void andq(Register dst, int32_t imm32); | 759 void andq(Register dst, int32_t imm32); |
759 void andq(Register dst, Address src); | 760 void andq(Register dst, Address src); |
760 void andq(Register dst, Register src); | 761 void andq(Register dst, Register src); |
761 | |
762 | 762 |
763 // Bitwise Logical AND of Packed Double-Precision Floating-Point Values | 763 // Bitwise Logical AND of Packed Double-Precision Floating-Point Values |
764 void andpd(XMMRegister dst, Address src); | 764 void andpd(XMMRegister dst, Address src); |
765 void andpd(XMMRegister dst, XMMRegister src); | 765 void andpd(XMMRegister dst, XMMRegister src); |
766 | 766 |
1149 void movl(Register dst, void* junk); | 1149 void movl(Register dst, void* junk); |
1150 | 1150 |
1151 #ifdef _LP64 | 1151 #ifdef _LP64 |
1152 void movq(Register dst, Register src); | 1152 void movq(Register dst, Register src); |
1153 void movq(Register dst, Address src); | 1153 void movq(Register dst, Address src); |
1154 void movq(Address dst, Register src); | 1154 void movq(Address dst, Register src); |
1155 #endif | 1155 #endif |
1156 | 1156 |
1157 void movq(Address dst, MMXRegister src ); | 1157 void movq(Address dst, MMXRegister src ); |
1158 void movq(MMXRegister dst, Address src ); | 1158 void movq(MMXRegister dst, Address src ); |
1159 | 1159 |
1175 #ifdef _LP64 | 1175 #ifdef _LP64 |
1176 void movsbq(Register dst, Address src); | 1176 void movsbq(Register dst, Address src); |
1177 void movsbq(Register dst, Register src); | 1177 void movsbq(Register dst, Register src); |
1178 | 1178 |
1179 // Move signed 32bit immediate to 64bit extending sign | 1179 // Move signed 32bit immediate to 64bit extending sign |
1180 void movslq(Address dst, int32_t imm64); | 1180 void movslq(Address dst, int32_t imm64); |
1181 void movslq(Register dst, int32_t imm64); | 1181 void movslq(Register dst, int32_t imm64); |
1182 | 1182 |
1183 void movslq(Register dst, Address src); | 1183 void movslq(Register dst, Address src); |
1184 void movslq(Register dst, Register src); | 1184 void movslq(Register dst, Register src); |
1185 void movslq(Register dst, void* src); // Dummy declaration to cause NULL to be ambiguous | 1185 void movslq(Register dst, void* src); // Dummy declaration to cause NULL to be ambiguous |
1855 int con_size_in_bytes, // object size in bytes if known at compile time | 1855 int con_size_in_bytes, // object size in bytes if known at compile time |
1856 Register t1, // temp register | 1856 Register t1, // temp register |
1857 Register t2, // temp register | 1857 Register t2, // temp register |
1858 Label& slow_case // continuation point if fast allocation fails | 1858 Label& slow_case // continuation point if fast allocation fails |
1859 ); | 1859 ); |
1860 void tlab_refill(Label& retry_tlab, Label& try_eden, Label& slow_case); | 1860 Register tlab_refill(Label& retry_tlab, Label& try_eden, Label& slow_case); // returns TLS address |
1861 void incr_allocated_bytes(Register thread, | |
1862 Register var_size_in_bytes, int con_size_in_bytes, | |
1863 Register t1 = noreg); | |
1861 | 1864 |
1862 // interface method calling | 1865 // interface method calling |
1863 void lookup_interface_method(Register recv_klass, | 1866 void lookup_interface_method(Register recv_klass, |
1864 Register intf_klass, | 1867 Register intf_klass, |
1865 RegisterOrConstant itable_index, | 1868 RegisterOrConstant itable_index, |
2178 | 2181 |
2179 void divss(XMMRegister dst, XMMRegister src) { Assembler::divss(dst, src); } | 2182 void divss(XMMRegister dst, XMMRegister src) { Assembler::divss(dst, src); } |
2180 void divss(XMMRegister dst, Address src) { Assembler::divss(dst, src); } | 2183 void divss(XMMRegister dst, Address src) { Assembler::divss(dst, src); } |
2181 void divss(XMMRegister dst, AddressLiteral src) { Assembler::divss(dst, as_Address(src)); } | 2184 void divss(XMMRegister dst, AddressLiteral src) { Assembler::divss(dst, as_Address(src)); } |
2182 | 2185 |
2183 void movsd(XMMRegister dst, XMMRegister src) { Assembler::movsd(dst, src); } | 2186 void movsd(XMMRegister dst, XMMRegister src) { Assembler::movsd(dst, src); } |
2184 void movsd(Address dst, XMMRegister src) { Assembler::movsd(dst, src); } | 2187 void movsd(Address dst, XMMRegister src) { Assembler::movsd(dst, src); } |
2185 void movsd(XMMRegister dst, Address src) { Assembler::movsd(dst, src); } | 2188 void movsd(XMMRegister dst, Address src) { Assembler::movsd(dst, src); } |
2186 void movsd(XMMRegister dst, AddressLiteral src) { Assembler::movsd(dst, as_Address(src)); } | 2189 void movsd(XMMRegister dst, AddressLiteral src) { Assembler::movsd(dst, as_Address(src)); } |
2187 | 2190 |
2188 void mulsd(XMMRegister dst, XMMRegister src) { Assembler::mulsd(dst, src); } | 2191 void mulsd(XMMRegister dst, XMMRegister src) { Assembler::mulsd(dst, src); } |
2189 void mulsd(XMMRegister dst, Address src) { Assembler::mulsd(dst, src); } | 2192 void mulsd(XMMRegister dst, Address src) { Assembler::mulsd(dst, src); } |
2190 void mulsd(XMMRegister dst, AddressLiteral src) { Assembler::mulsd(dst, as_Address(src)); } | 2193 void mulsd(XMMRegister dst, AddressLiteral src) { Assembler::mulsd(dst, as_Address(src)); } |