blob: 7813fca3b7a9de475584de9eedf4b2db58db8327 [file] [log] [blame]
buzbee1452bee2015-03-06 14:43:04 -08001/*
2 * Copyright (C) 2016 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_INTERPRETER_MTERP_MTERP_H_
18#define ART_RUNTIME_INTERPRETER_MTERP_MTERP_H_
19
Andreas Gampe8cf9cb32017-07-19 09:28:38 -070020#include <cstddef>
21#include <cstdint>
22
Nicolas Geoffray00391822019-12-10 10:17:23 +000023#include "base/globals.h"
24
buzbee1452bee2015-03-06 14:43:04 -080025/*
26 * Mterp assembly handler bases
27 */
28extern "C" void* artMterpAsmInstructionStart[];
29extern "C" void* artMterpAsmInstructionEnd[];
buzbee1452bee2015-03-06 14:43:04 -080030
Nicolas Geoffray013d1ee2019-12-04 16:18:15 +000031extern "C" void* artNterpAsmInstructionStart[];
32extern "C" void* artNterpAsmInstructionEnd[];
33
buzbee1452bee2015-03-06 14:43:04 -080034namespace art {
Andreas Gampe8cf9cb32017-07-19 09:28:38 -070035
Nicolas Geoffray00391822019-12-10 10:17:23 +000036class ArtMethod;
Andreas Gampe8cf9cb32017-07-19 09:28:38 -070037class Thread;
38
buzbee1452bee2015-03-06 14:43:04 -080039namespace interpreter {
40
41void InitMterpTls(Thread* self);
42void CheckMterpAsmConstants();
Nicolas Geoffray013d1ee2019-12-04 16:18:15 +000043void CheckNterpAsmConstants();
David Srbecky28f6cff2018-10-16 15:07:28 +010044bool CanUseMterp();
Nicolas Geoffray013d1ee2019-12-04 16:18:15 +000045bool IsNterpSupported();
Nicolas Geoffray00391822019-12-10 10:17:23 +000046bool CanRuntimeUseNterp();
47bool CanMethodUseNterp(ArtMethod* method);
Nicolas Geoffray013d1ee2019-12-04 16:18:15 +000048const void* GetNterpEntryPoint();
buzbee1452bee2015-03-06 14:43:04 -080049
Bill Buzbeed47fd902016-07-07 14:42:43 +000050// Poison value for TestExportPC. If we segfault with this value, it means that a mterp
51// handler for a recent opcode failed to export the Dalvik PC prior to a possible exit from
52// the mterp environment.
53constexpr uintptr_t kExportPCPoison = 0xdead00ff;
David Srbeckye81f10a2019-07-04 10:00:12 +000054// Set true to enable poison testing of ExportPC. Uses Alt interpreter.
55constexpr bool kTestExportPC = false;
Bill Buzbeed47fd902016-07-07 14:42:43 +000056
David Srbeckyd88f5f72018-10-16 14:22:33 +010057constexpr size_t kMterpHandlerSize = 128;
58
Nicolas Geoffray00391822019-12-10 10:17:23 +000059// The maximum we will allow an nterp frame to be.
60constexpr size_t kMaxNterpFrame = 3 * KB;
61
buzbee1452bee2015-03-06 14:43:04 -080062} // namespace interpreter
63} // namespace art
64
65#endif // ART_RUNTIME_INTERPRETER_MTERP_MTERP_H_