1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ART_RUNTIME_RUNTIME_INL_H_
18 #define ART_RUNTIME_RUNTIME_INL_H_
19 
20 #include "runtime.h"
21 
22 #include "read_barrier-inl.h"
23 
24 namespace art {
25 
GetRuntimeMethodFrameInfo(mirror::ArtMethod * method)26 inline QuickMethodFrameInfo Runtime::GetRuntimeMethodFrameInfo(mirror::ArtMethod* method) {
27   DCHECK(method != nullptr);
28   // Cannot be imt-conflict-method or resolution-method.
29   DCHECK(method != GetImtConflictMethod());
30   DCHECK(method != GetResolutionMethod());
31   // Don't use GetCalleeSaveMethod(), some tests don't set all callee save methods.
32   if (method == GetCalleeSaveMethodUnchecked(Runtime::kRefsAndArgs)) {
33     return GetCalleeSaveMethodFrameInfo(Runtime::kRefsAndArgs);
34   } else if (method == GetCalleeSaveMethodUnchecked(Runtime::kSaveAll)) {
35     return GetCalleeSaveMethodFrameInfo(Runtime::kSaveAll);
36   } else {
37     DCHECK(method == GetCalleeSaveMethodUnchecked(Runtime::kRefsOnly));
38     return GetCalleeSaveMethodFrameInfo(Runtime::kRefsOnly);
39   }
40 }
41 
GetResolutionMethod()42 inline mirror::ArtMethod* Runtime::GetResolutionMethod() {
43   CHECK(HasResolutionMethod());
44   return resolution_method_.Read();
45 }
46 
GetImtConflictMethod()47 inline mirror::ArtMethod* Runtime::GetImtConflictMethod() {
48   CHECK(HasImtConflictMethod());
49   return imt_conflict_method_.Read();
50 }
51 
GetImtUnimplementedMethod()52 inline mirror::ArtMethod* Runtime::GetImtUnimplementedMethod() {
53   CHECK(!imt_unimplemented_method_.IsNull());
54   return imt_unimplemented_method_.Read();
55 }
56 
GetDefaultImt()57 inline mirror::ObjectArray<mirror::ArtMethod>* Runtime::GetDefaultImt()
58     SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
59   CHECK(HasDefaultImt());
60   return default_imt_.Read();
61 }
62 
GetCalleeSaveMethod(CalleeSaveType type)63 inline mirror::ArtMethod* Runtime::GetCalleeSaveMethod(CalleeSaveType type)
64     SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
65   DCHECK(HasCalleeSaveMethod(type));
66   return callee_save_methods_[type].Read();
67 }
68 
GetCalleeSaveMethodUnchecked(CalleeSaveType type)69 inline mirror::ArtMethod* Runtime::GetCalleeSaveMethodUnchecked(CalleeSaveType type)
70     SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) {
71   return callee_save_methods_[type].Read();
72 }
73 
74 }  // namespace art
75 
76 #endif  // ART_RUNTIME_RUNTIME_INL_H_
77