22 *
23 */
24
25 #ifndef SHARE_CLASSFILE_JAVACLASSES_INLINE_HPP
26 #define SHARE_CLASSFILE_JAVACLASSES_INLINE_HPP
27
28 #include "classfile/javaClasses.hpp"
29 #include "oops/access.inline.hpp"
30 #include "oops/oop.inline.hpp"
31 #include "oops/oopsHierarchy.hpp"
32
33 void java_lang_String::set_coder(oop string, jbyte coder) {
34 assert(initialized && (coder_offset > 0), "Must be initialized");
35 string->byte_field_put(coder_offset, coder);
36 }
37
38 void java_lang_String::set_value_raw(oop string, typeArrayOop buffer) {
39 assert(initialized, "Must be initialized");
40 string->obj_field_put_raw(value_offset, buffer);
41 }
42 void java_lang_String::set_value(oop string, typeArrayOop buffer) {
43 assert(initialized && (value_offset > 0), "Must be initialized");
44 string->obj_field_put(value_offset, (oop)buffer);
45 }
46 void java_lang_String::set_hash(oop string, unsigned int hash) {
47 assert(initialized && (hash_offset > 0), "Must be initialized");
48 string->int_field_put(hash_offset, hash);
49 }
50
51 // Accessors
52 typeArrayOop java_lang_String::value(oop java_string) {
53 assert(initialized && (value_offset > 0), "Must be initialized");
54 assert(is_instance(java_string), "must be java_string");
55 return (typeArrayOop) java_string->obj_field(value_offset);
56 }
57 typeArrayOop java_lang_String::value_no_keepalive(oop java_string) {
58 assert(initialized && (value_offset > 0), "Must be initialized");
59 assert(is_instance(java_string), "must be java_string");
60 return (typeArrayOop) java_string->obj_field_access<AS_NO_KEEPALIVE>(value_offset);
61 }
62 unsigned int java_lang_String::hash(oop java_string) {
63 assert(initialized && (hash_offset > 0), "Must be initialized");
64 assert(is_instance(java_string), "must be java_string");
65 return java_string->int_field(hash_offset);
66 }
67 bool java_lang_String::is_latin1(oop java_string) {
68 assert(initialized && (coder_offset > 0), "Must be initialized");
69 assert(is_instance(java_string), "must be java_string");
70 jbyte coder = java_string->byte_field(coder_offset);
71 assert(CompactStrings || coder == CODER_UTF16, "Must be UTF16 without CompactStrings");
72 return coder == CODER_LATIN1;
73 }
74 int java_lang_String::length(oop java_string, typeArrayOop value) {
75 assert(initialized, "Must be initialized");
76 assert(is_instance(java_string), "must be java_string");
77 assert(oopDesc::equals(value, java_lang_String::value(java_string)),
78 "value must be same as java_lang_String::value(java_string)");
79 if (value == NULL) {
80 return 0;
81 }
82 int arr_length = value->length();
83 if (!is_latin1(java_string)) {
84 assert((arr_length & 1) == 0, "should be even for UTF16 string");
85 arr_length >>= 1; // convert number of bytes to number of elements
86 }
87 return arr_length;
88 }
89 int java_lang_String::length(oop java_string) {
90 assert(initialized, "Must be initialized");
91 assert(is_instance(java_string), "must be java_string");
92 typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
93 return length(java_string, value);
94 }
95
96 bool java_lang_String::is_instance_inlined(oop obj) {
97 return obj != NULL && obj->klass() == SystemDictionary::String_klass();
98 }
99
100 // Accessors
101 oop java_lang_ref_Reference::referent(oop ref) {
102 return ref->obj_field(referent_offset);
103 }
104 void java_lang_ref_Reference::set_referent(oop ref, oop value) {
105 ref->obj_field_put(referent_offset, value);
106 }
107 void java_lang_ref_Reference::set_referent_raw(oop ref, oop value) {
108 ref->obj_field_put_raw(referent_offset, value);
109 }
110 HeapWord* java_lang_ref_Reference::referent_addr_raw(oop ref) {
111 return ref->obj_field_addr_raw<HeapWord>(referent_offset);
112 }
113 oop java_lang_ref_Reference::next(oop ref) {
114 return ref->obj_field(next_offset);
115 }
116 void java_lang_ref_Reference::set_next(oop ref, oop value) {
117 ref->obj_field_put(next_offset, value);
118 }
119 void java_lang_ref_Reference::set_next_raw(oop ref, oop value) {
120 ref->obj_field_put_raw(next_offset, value);
121 }
122 HeapWord* java_lang_ref_Reference::next_addr_raw(oop ref) {
123 return ref->obj_field_addr_raw<HeapWord>(next_offset);
124 }
125 oop java_lang_ref_Reference::discovered(oop ref) {
126 return ref->obj_field(discovered_offset);
127 }
128 void java_lang_ref_Reference::set_discovered(oop ref, oop value) {
129 ref->obj_field_put(discovered_offset, value);
130 }
131 void java_lang_ref_Reference::set_discovered_raw(oop ref, oop value) {
132 ref->obj_field_put_raw(discovered_offset, value);
133 }
134 HeapWord* java_lang_ref_Reference::discovered_addr_raw(oop ref) {
135 return ref->obj_field_addr_raw<HeapWord>(discovered_offset);
136 }
137 bool java_lang_ref_Reference::is_final(oop ref) {
138 return InstanceKlass::cast(ref->klass())->reference_type() == REF_FINAL;
139 }
140 bool java_lang_ref_Reference::is_phantom(oop ref) {
141 return InstanceKlass::cast(ref->klass())->reference_type() == REF_PHANTOM;
142 }
143
144 inline void java_lang_invoke_CallSite::set_target_volatile(oop site, oop target) {
145 site->obj_field_put_volatile(_target_offset, target);
146 }
147
148 inline oop java_lang_invoke_CallSite::target(oop site) {
149 return site->obj_field(_target_offset);
150 }
151
152 inline void java_lang_invoke_CallSite::set_target(oop site, oop target) {
153 site->obj_field_put(_target_offset, target);
154 }
155
156 inline bool java_lang_invoke_CallSite::is_instance(oop obj) {
157 return obj != NULL && is_subclass(obj->klass());
158 }
159
|
22 *
23 */
24
25 #ifndef SHARE_CLASSFILE_JAVACLASSES_INLINE_HPP
26 #define SHARE_CLASSFILE_JAVACLASSES_INLINE_HPP
27
28 #include "classfile/javaClasses.hpp"
29 #include "oops/access.inline.hpp"
30 #include "oops/oop.inline.hpp"
31 #include "oops/oopsHierarchy.hpp"
32
33 void java_lang_String::set_coder(oop string, jbyte coder) {
34 assert(initialized && (coder_offset > 0), "Must be initialized");
35 string->byte_field_put(coder_offset, coder);
36 }
37
38 void java_lang_String::set_value_raw(oop string, typeArrayOop buffer) {
39 assert(initialized, "Must be initialized");
40 string->obj_field_put_raw(value_offset, buffer);
41 }
42
43 void java_lang_String::set_value(oop string, typeArrayOop buffer) {
44 assert(initialized && (value_offset > 0), "Must be initialized");
45 string->obj_field_put(value_offset, (oop)buffer);
46 }
47
48 void java_lang_String::set_hash(oop string, unsigned int hash) {
49 assert(initialized && (hash_offset > 0), "Must be initialized");
50 string->int_field_put(hash_offset, hash);
51 }
52
53 // Accessors
54 bool java_lang_String::values_equal(typeArrayOop str_value1, typeArrayOop str_value2) {
55 return (oopDesc::equals(str_value1, str_value2) ||
56 (str_value1->length() == str_value2->length() &&
57 (!memcmp(str_value1->base(T_BYTE),
58 str_value2->base(T_BYTE),
59 str_value2->length() * sizeof(jbyte)))));
60 }
61
62 typeArrayOop java_lang_String::value(oop java_string) {
63 assert(initialized && (value_offset > 0), "Must be initialized");
64 assert(is_instance(java_string), "must be java_string");
65 return (typeArrayOop) java_string->obj_field(value_offset);
66 }
67
68 typeArrayOop java_lang_String::value_no_keepalive(oop java_string) {
69 assert(initialized && (value_offset > 0), "Must be initialized");
70 assert(is_instance(java_string), "must be java_string");
71 return (typeArrayOop) java_string->obj_field_access<AS_NO_KEEPALIVE>(value_offset);
72 }
73
74 unsigned int java_lang_String::hash(oop java_string) {
75 assert(initialized && (hash_offset > 0), "Must be initialized");
76 assert(is_instance(java_string), "must be java_string");
77 return java_string->int_field(hash_offset);
78 }
79
80 bool java_lang_String::is_latin1(oop java_string) {
81 assert(initialized && (coder_offset > 0), "Must be initialized");
82 assert(is_instance(java_string), "must be java_string");
83 jbyte coder = java_string->byte_field(coder_offset);
84 assert(CompactStrings || coder == CODER_UTF16, "Must be UTF16 without CompactStrings");
85 return coder == CODER_LATIN1;
86 }
87
88 int java_lang_String::length(oop java_string, typeArrayOop value) {
89 assert(initialized, "Must be initialized");
90 assert(is_instance(java_string), "must be java_string");
91 assert(values_equal(value, java_lang_String::value(java_string)),
92 "value must be equal to java_lang_String::value(java_string)");
93 if (value == NULL) {
94 return 0;
95 }
96 int arr_length = value->length();
97 if (!is_latin1(java_string)) {
98 assert((arr_length & 1) == 0, "should be even for UTF16 string");
99 arr_length >>= 1; // convert number of bytes to number of elements
100 }
101 return arr_length;
102 }
103
104 int java_lang_String::length(oop java_string) {
105 assert(initialized, "Must be initialized");
106 assert(is_instance(java_string), "must be java_string");
107 typeArrayOop value = java_lang_String::value_no_keepalive(java_string);
108 return length(java_string, value);
109 }
110
111 bool java_lang_String::is_instance_inlined(oop obj) {
112 return obj != NULL && obj->klass() == SystemDictionary::String_klass();
113 }
114
115 // Accessors
116 oop java_lang_ref_Reference::referent(oop ref) {
117 return ref->obj_field(referent_offset);
118 }
119
120 void java_lang_ref_Reference::set_referent(oop ref, oop value) {
121 ref->obj_field_put(referent_offset, value);
122 }
123
124 void java_lang_ref_Reference::set_referent_raw(oop ref, oop value) {
125 ref->obj_field_put_raw(referent_offset, value);
126 }
127
128 HeapWord* java_lang_ref_Reference::referent_addr_raw(oop ref) {
129 return ref->obj_field_addr_raw<HeapWord>(referent_offset);
130 }
131
132 oop java_lang_ref_Reference::next(oop ref) {
133 return ref->obj_field(next_offset);
134 }
135
136 void java_lang_ref_Reference::set_next(oop ref, oop value) {
137 ref->obj_field_put(next_offset, value);
138 }
139
140 void java_lang_ref_Reference::set_next_raw(oop ref, oop value) {
141 ref->obj_field_put_raw(next_offset, value);
142 }
143
144 HeapWord* java_lang_ref_Reference::next_addr_raw(oop ref) {
145 return ref->obj_field_addr_raw<HeapWord>(next_offset);
146 }
147
148 oop java_lang_ref_Reference::discovered(oop ref) {
149 return ref->obj_field(discovered_offset);
150 }
151
152 void java_lang_ref_Reference::set_discovered(oop ref, oop value) {
153 ref->obj_field_put(discovered_offset, value);
154 }
155
156 void java_lang_ref_Reference::set_discovered_raw(oop ref, oop value) {
157 ref->obj_field_put_raw(discovered_offset, value);
158 }
159
160 HeapWord* java_lang_ref_Reference::discovered_addr_raw(oop ref) {
161 return ref->obj_field_addr_raw<HeapWord>(discovered_offset);
162 }
163
164 bool java_lang_ref_Reference::is_final(oop ref) {
165 return InstanceKlass::cast(ref->klass())->reference_type() == REF_FINAL;
166 }
167
168 bool java_lang_ref_Reference::is_phantom(oop ref) {
169 return InstanceKlass::cast(ref->klass())->reference_type() == REF_PHANTOM;
170 }
171
172 inline void java_lang_invoke_CallSite::set_target_volatile(oop site, oop target) {
173 site->obj_field_put_volatile(_target_offset, target);
174 }
175
176 inline oop java_lang_invoke_CallSite::target(oop site) {
177 return site->obj_field(_target_offset);
178 }
179
180 inline void java_lang_invoke_CallSite::set_target(oop site, oop target) {
181 site->obj_field_put(_target_offset, target);
182 }
183
184 inline bool java_lang_invoke_CallSite::is_instance(oop obj) {
185 return obj != NULL && is_subclass(obj->klass());
186 }
187
|