112
113 jlong long_at(int which) const { return *long_at_addr(which); }
114 void long_at_put(int which, jlong contents) { *long_at_addr(which) = contents; }
115
116 jfloat float_at(int which) const { return *float_at_addr(which); }
117 void float_at_put(int which, jfloat contents) { *float_at_addr(which) = contents; }
118
119 jdouble double_at(int which) const { return *double_at_addr(which); }
120 void double_at_put(int which, jdouble contents) { *double_at_addr(which) = contents; }
121
122 jbyte byte_at_acquire(int which) const { return OrderAccess::load_acquire(byte_at_addr(which)); }
123 void release_byte_at_put(int which, jbyte contents) { OrderAccess::release_store(byte_at_addr(which), contents); }
124
125 // Java thinks metadata arrays are just arrays of either long or int, since
126 // there doesn't seem to be T_ADDRESS, so this is a bit of unfortunate
127 // casting
128 #ifdef _LP64
129 Metadata* metadata_at(int which) const {
130 return (Metadata*)*long_at_addr(which); }
131 void metadata_at_put(int which, Metadata* contents) {
132 *long_at_addr(which) = (long)contents;
133 }
134 #else
135 Metadata* metadata_at(int which) const {
136 return (Metadata*)*int_at_addr(which); }
137 void metadata_at_put(int which, Metadata* contents) {
138 *int_at_addr(which) = (int)contents;
139 }
140 #endif // _LP64
141
142 // Sizing
143
144 // Returns the number of words necessary to hold an array of "len"
145 // elements each of the given "byte_size".
146 private:
147 static int object_size(int lh, int length) {
148 int instance_header_size = Klass::layout_helper_header_size(lh);
149 int element_shift = Klass::layout_helper_log2_element_size(lh);
150 DEBUG_ONLY(BasicType etype = Klass::layout_helper_element_type(lh));
151 assert(length <= arrayOopDesc::max_array_length(etype), "no overflow");
152
|
112
113 jlong long_at(int which) const { return *long_at_addr(which); }
114 void long_at_put(int which, jlong contents) { *long_at_addr(which) = contents; }
115
116 jfloat float_at(int which) const { return *float_at_addr(which); }
117 void float_at_put(int which, jfloat contents) { *float_at_addr(which) = contents; }
118
119 jdouble double_at(int which) const { return *double_at_addr(which); }
120 void double_at_put(int which, jdouble contents) { *double_at_addr(which) = contents; }
121
122 jbyte byte_at_acquire(int which) const { return OrderAccess::load_acquire(byte_at_addr(which)); }
123 void release_byte_at_put(int which, jbyte contents) { OrderAccess::release_store(byte_at_addr(which), contents); }
124
125 // Java thinks metadata arrays are just arrays of either long or int, since
126 // there doesn't seem to be T_ADDRESS, so this is a bit of unfortunate
127 // casting
128 #ifdef _LP64
129 Metadata* metadata_at(int which) const {
130 return (Metadata*)*long_at_addr(which); }
131 void metadata_at_put(int which, Metadata* contents) {
132 *long_at_addr(which) = (jlong)contents;
133 }
134 #else
135 Metadata* metadata_at(int which) const {
136 return (Metadata*)*int_at_addr(which); }
137 void metadata_at_put(int which, Metadata* contents) {
138 *int_at_addr(which) = (int)contents;
139 }
140 #endif // _LP64
141
142 // Sizing
143
144 // Returns the number of words necessary to hold an array of "len"
145 // elements each of the given "byte_size".
146 private:
147 static int object_size(int lh, int length) {
148 int instance_header_size = Klass::layout_helper_header_size(lh);
149 int element_shift = Klass::layout_helper_log2_element_size(lh);
150 DEBUG_ONLY(BasicType etype = Klass::layout_helper_element_type(lh));
151 assert(length <= arrayOopDesc::max_array_length(etype), "no overflow");
152
|