37 |
37 |
38 void java_lang_String::set_value_raw(oop string, typeArrayOop buffer) { |
38 void java_lang_String::set_value_raw(oop string, typeArrayOop buffer) { |
39 assert(initialized, "Must be initialized"); |
39 assert(initialized, "Must be initialized"); |
40 string->obj_field_put_raw(value_offset, buffer); |
40 string->obj_field_put_raw(value_offset, buffer); |
41 } |
41 } |
|
42 |
42 void java_lang_String::set_value(oop string, typeArrayOop buffer) { |
43 void java_lang_String::set_value(oop string, typeArrayOop buffer) { |
43 assert(initialized && (value_offset > 0), "Must be initialized"); |
44 assert(initialized && (value_offset > 0), "Must be initialized"); |
44 string->obj_field_put(value_offset, (oop)buffer); |
45 string->obj_field_put(value_offset, (oop)buffer); |
45 } |
46 } |
|
47 |
46 void java_lang_String::set_hash(oop string, unsigned int hash) { |
48 void java_lang_String::set_hash(oop string, unsigned int hash) { |
47 assert(initialized && (hash_offset > 0), "Must be initialized"); |
49 assert(initialized && (hash_offset > 0), "Must be initialized"); |
48 string->int_field_put(hash_offset, hash); |
50 string->int_field_put(hash_offset, hash); |
49 } |
51 } |
50 |
52 |
51 // Accessors |
53 // Accessors |
|
54 bool java_lang_String::value_equals(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 |
52 typeArrayOop java_lang_String::value(oop java_string) { |
62 typeArrayOop java_lang_String::value(oop java_string) { |
53 assert(initialized && (value_offset > 0), "Must be initialized"); |
63 assert(initialized && (value_offset > 0), "Must be initialized"); |
54 assert(is_instance(java_string), "must be java_string"); |
64 assert(is_instance(java_string), "must be java_string"); |
55 return (typeArrayOop) java_string->obj_field(value_offset); |
65 return (typeArrayOop) java_string->obj_field(value_offset); |
56 } |
66 } |
|
67 |
57 typeArrayOop java_lang_String::value_no_keepalive(oop java_string) { |
68 typeArrayOop java_lang_String::value_no_keepalive(oop java_string) { |
58 assert(initialized && (value_offset > 0), "Must be initialized"); |
69 assert(initialized && (value_offset > 0), "Must be initialized"); |
59 assert(is_instance(java_string), "must be java_string"); |
70 assert(is_instance(java_string), "must be java_string"); |
60 return (typeArrayOop) java_string->obj_field_access<AS_NO_KEEPALIVE>(value_offset); |
71 return (typeArrayOop) java_string->obj_field_access<AS_NO_KEEPALIVE>(value_offset); |
61 } |
72 } |
|
73 |
62 unsigned int java_lang_String::hash(oop java_string) { |
74 unsigned int java_lang_String::hash(oop java_string) { |
63 assert(initialized && (hash_offset > 0), "Must be initialized"); |
75 assert(initialized && (hash_offset > 0), "Must be initialized"); |
64 assert(is_instance(java_string), "must be java_string"); |
76 assert(is_instance(java_string), "must be java_string"); |
65 return java_string->int_field(hash_offset); |
77 return java_string->int_field(hash_offset); |
66 } |
78 } |
|
79 |
67 bool java_lang_String::is_latin1(oop java_string) { |
80 bool java_lang_String::is_latin1(oop java_string) { |
68 assert(initialized && (coder_offset > 0), "Must be initialized"); |
81 assert(initialized && (coder_offset > 0), "Must be initialized"); |
69 assert(is_instance(java_string), "must be java_string"); |
82 assert(is_instance(java_string), "must be java_string"); |
70 jbyte coder = java_string->byte_field(coder_offset); |
83 jbyte coder = java_string->byte_field(coder_offset); |
71 assert(CompactStrings || coder == CODER_UTF16, "Must be UTF16 without CompactStrings"); |
84 assert(CompactStrings || coder == CODER_UTF16, "Must be UTF16 without CompactStrings"); |
72 return coder == CODER_LATIN1; |
85 return coder == CODER_LATIN1; |
73 } |
86 } |
|
87 |
74 int java_lang_String::length(oop java_string, typeArrayOop value) { |
88 int java_lang_String::length(oop java_string, typeArrayOop value) { |
75 assert(initialized, "Must be initialized"); |
89 assert(initialized, "Must be initialized"); |
76 assert(is_instance(java_string), "must be java_string"); |
90 assert(is_instance(java_string), "must be java_string"); |
77 assert(oopDesc::equals(value, java_lang_String::value(java_string)), |
91 assert(value_equals(value, java_lang_String::value(java_string)), |
78 "value must be same as java_lang_String::value(java_string)"); |
92 "value must be equal to java_lang_String::value(java_string)"); |
79 if (value == NULL) { |
93 if (value == NULL) { |
80 return 0; |
94 return 0; |
81 } |
95 } |
82 int arr_length = value->length(); |
96 int arr_length = value->length(); |
83 if (!is_latin1(java_string)) { |
97 if (!is_latin1(java_string)) { |
84 assert((arr_length & 1) == 0, "should be even for UTF16 string"); |
98 assert((arr_length & 1) == 0, "should be even for UTF16 string"); |
85 arr_length >>= 1; // convert number of bytes to number of elements |
99 arr_length >>= 1; // convert number of bytes to number of elements |
86 } |
100 } |
87 return arr_length; |
101 return arr_length; |
88 } |
102 } |
|
103 |
89 int java_lang_String::length(oop java_string) { |
104 int java_lang_String::length(oop java_string) { |
90 assert(initialized, "Must be initialized"); |
105 assert(initialized, "Must be initialized"); |
91 assert(is_instance(java_string), "must be java_string"); |
106 assert(is_instance(java_string), "must be java_string"); |
92 typeArrayOop value = java_lang_String::value_no_keepalive(java_string); |
107 typeArrayOop value = java_lang_String::value_no_keepalive(java_string); |
93 return length(java_string, value); |
108 return length(java_string, value); |
99 |
114 |
100 // Accessors |
115 // Accessors |
101 oop java_lang_ref_Reference::referent(oop ref) { |
116 oop java_lang_ref_Reference::referent(oop ref) { |
102 return ref->obj_field(referent_offset); |
117 return ref->obj_field(referent_offset); |
103 } |
118 } |
|
119 |
104 void java_lang_ref_Reference::set_referent(oop ref, oop value) { |
120 void java_lang_ref_Reference::set_referent(oop ref, oop value) { |
105 ref->obj_field_put(referent_offset, value); |
121 ref->obj_field_put(referent_offset, value); |
106 } |
122 } |
|
123 |
107 void java_lang_ref_Reference::set_referent_raw(oop ref, oop value) { |
124 void java_lang_ref_Reference::set_referent_raw(oop ref, oop value) { |
108 ref->obj_field_put_raw(referent_offset, value); |
125 ref->obj_field_put_raw(referent_offset, value); |
109 } |
126 } |
|
127 |
110 HeapWord* java_lang_ref_Reference::referent_addr_raw(oop ref) { |
128 HeapWord* java_lang_ref_Reference::referent_addr_raw(oop ref) { |
111 return ref->obj_field_addr_raw<HeapWord>(referent_offset); |
129 return ref->obj_field_addr_raw<HeapWord>(referent_offset); |
112 } |
130 } |
|
131 |
113 oop java_lang_ref_Reference::next(oop ref) { |
132 oop java_lang_ref_Reference::next(oop ref) { |
114 return ref->obj_field(next_offset); |
133 return ref->obj_field(next_offset); |
115 } |
134 } |
|
135 |
116 void java_lang_ref_Reference::set_next(oop ref, oop value) { |
136 void java_lang_ref_Reference::set_next(oop ref, oop value) { |
117 ref->obj_field_put(next_offset, value); |
137 ref->obj_field_put(next_offset, value); |
118 } |
138 } |
|
139 |
119 void java_lang_ref_Reference::set_next_raw(oop ref, oop value) { |
140 void java_lang_ref_Reference::set_next_raw(oop ref, oop value) { |
120 ref->obj_field_put_raw(next_offset, value); |
141 ref->obj_field_put_raw(next_offset, value); |
121 } |
142 } |
|
143 |
122 HeapWord* java_lang_ref_Reference::next_addr_raw(oop ref) { |
144 HeapWord* java_lang_ref_Reference::next_addr_raw(oop ref) { |
123 return ref->obj_field_addr_raw<HeapWord>(next_offset); |
145 return ref->obj_field_addr_raw<HeapWord>(next_offset); |
124 } |
146 } |
|
147 |
125 oop java_lang_ref_Reference::discovered(oop ref) { |
148 oop java_lang_ref_Reference::discovered(oop ref) { |
126 return ref->obj_field(discovered_offset); |
149 return ref->obj_field(discovered_offset); |
127 } |
150 } |
|
151 |
128 void java_lang_ref_Reference::set_discovered(oop ref, oop value) { |
152 void java_lang_ref_Reference::set_discovered(oop ref, oop value) { |
129 ref->obj_field_put(discovered_offset, value); |
153 ref->obj_field_put(discovered_offset, value); |
130 } |
154 } |
|
155 |
131 void java_lang_ref_Reference::set_discovered_raw(oop ref, oop value) { |
156 void java_lang_ref_Reference::set_discovered_raw(oop ref, oop value) { |
132 ref->obj_field_put_raw(discovered_offset, value); |
157 ref->obj_field_put_raw(discovered_offset, value); |
133 } |
158 } |
|
159 |
134 HeapWord* java_lang_ref_Reference::discovered_addr_raw(oop ref) { |
160 HeapWord* java_lang_ref_Reference::discovered_addr_raw(oop ref) { |
135 return ref->obj_field_addr_raw<HeapWord>(discovered_offset); |
161 return ref->obj_field_addr_raw<HeapWord>(discovered_offset); |
136 } |
162 } |
|
163 |
137 bool java_lang_ref_Reference::is_final(oop ref) { |
164 bool java_lang_ref_Reference::is_final(oop ref) { |
138 return InstanceKlass::cast(ref->klass())->reference_type() == REF_FINAL; |
165 return InstanceKlass::cast(ref->klass())->reference_type() == REF_FINAL; |
139 } |
166 } |
|
167 |
140 bool java_lang_ref_Reference::is_phantom(oop ref) { |
168 bool java_lang_ref_Reference::is_phantom(oop ref) { |
141 return InstanceKlass::cast(ref->klass())->reference_type() == REF_PHANTOM; |
169 return InstanceKlass::cast(ref->klass())->reference_type() == REF_PHANTOM; |
142 } |
170 } |
143 |
171 |
144 inline void java_lang_invoke_CallSite::set_target_volatile(oop site, oop target) { |
172 inline void java_lang_invoke_CallSite::set_target_volatile(oop site, oop target) { |