upload android base code part3
This commit is contained in:
parent
71b83c22f1
commit
b9e30e05b1
15122 changed files with 2089659 additions and 0 deletions
55
android/art/runtime/simulator/Android.bp
Normal file
55
android/art/runtime/simulator/Android.bp
Normal file
|
@ -0,0 +1,55 @@
|
|||
//
|
||||
// Copyright (C) 2015 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
cc_defaults {
|
||||
name: "libart_simulator_defaults",
|
||||
host_supported: true,
|
||||
device_supported: false,
|
||||
|
||||
defaults: ["art_defaults"],
|
||||
srcs: [
|
||||
"code_simulator.cc",
|
||||
"code_simulator_arm64.cc",
|
||||
],
|
||||
shared_libs: [
|
||||
"libbase",
|
||||
"liblog",
|
||||
],
|
||||
cflags: ["-DVIXL_INCLUDE_SIMULATOR_AARCH64"],
|
||||
export_include_dirs: ["."],
|
||||
include_dirs: ["art/runtime"],
|
||||
}
|
||||
|
||||
art_cc_library {
|
||||
name: "libart-simulator",
|
||||
defaults: ["libart_simulator_defaults"],
|
||||
shared_libs: [
|
||||
"libart",
|
||||
"libvixl-arm64",
|
||||
],
|
||||
}
|
||||
|
||||
art_cc_library {
|
||||
name: "libartd-simulator",
|
||||
defaults: [
|
||||
"art_debug_defaults",
|
||||
"libart_simulator_defaults",
|
||||
],
|
||||
shared_libs: [
|
||||
"libartd",
|
||||
"libvixld-arm64",
|
||||
],
|
||||
}
|
35
android/art/runtime/simulator/code_simulator.cc
Normal file
35
android/art/runtime/simulator/code_simulator.cc
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Copyright (C) 2015 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "simulator/code_simulator.h"
|
||||
#include "simulator/code_simulator_arm64.h"
|
||||
|
||||
namespace art {
|
||||
|
||||
CodeSimulator* CodeSimulator::CreateCodeSimulator(InstructionSet target_isa) {
|
||||
switch (target_isa) {
|
||||
case kArm64:
|
||||
return arm64::CodeSimulatorArm64::CreateCodeSimulatorArm64();
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
CodeSimulator* CreateCodeSimulator(InstructionSet target_isa) {
|
||||
return CodeSimulator::CreateCodeSimulator(target_isa);
|
||||
}
|
||||
|
||||
} // namespace art
|
46
android/art/runtime/simulator/code_simulator.h
Normal file
46
android/art/runtime/simulator/code_simulator.h
Normal file
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (C) 2015 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef ART_RUNTIME_SIMULATOR_CODE_SIMULATOR_H_
|
||||
#define ART_RUNTIME_SIMULATOR_CODE_SIMULATOR_H_
|
||||
|
||||
#include "arch/instruction_set.h"
|
||||
|
||||
namespace art {
|
||||
|
||||
class CodeSimulator {
|
||||
public:
|
||||
CodeSimulator() {}
|
||||
virtual ~CodeSimulator() {}
|
||||
// Returns a null pointer if a simulator cannot be found for target_isa.
|
||||
static CodeSimulator* CreateCodeSimulator(InstructionSet target_isa);
|
||||
|
||||
virtual void RunFrom(intptr_t code_buffer) = 0;
|
||||
|
||||
// Get return value according to C ABI.
|
||||
virtual bool GetCReturnBool() const = 0;
|
||||
virtual int32_t GetCReturnInt32() const = 0;
|
||||
virtual int64_t GetCReturnInt64() const = 0;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(CodeSimulator);
|
||||
};
|
||||
|
||||
extern "C" CodeSimulator* CreateCodeSimulator(InstructionSet target_isa);
|
||||
|
||||
} // namespace art
|
||||
|
||||
#endif // ART_RUNTIME_SIMULATOR_CODE_SIMULATOR_H_
|
73
android/art/runtime/simulator/code_simulator_arm64.cc
Normal file
73
android/art/runtime/simulator/code_simulator_arm64.cc
Normal file
|
@ -0,0 +1,73 @@
|
|||
/*
|
||||
* Copyright (C) 2015 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "simulator/code_simulator_arm64.h"
|
||||
|
||||
#include "base/logging.h"
|
||||
|
||||
using namespace vixl::aarch64; // NOLINT(build/namespaces)
|
||||
|
||||
namespace art {
|
||||
namespace arm64 {
|
||||
|
||||
// VIXL has not been tested on 32bit architectures, so Simulator is not always
|
||||
// available. To avoid linker error on these architectures, we check if we can simulate
|
||||
// in the beginning of following methods, with compile time constant `kCanSimulate`.
|
||||
// TODO: when Simulator is always available, remove the these checks.
|
||||
|
||||
CodeSimulatorArm64* CodeSimulatorArm64::CreateCodeSimulatorArm64() {
|
||||
if (kCanSimulate) {
|
||||
return new CodeSimulatorArm64();
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
CodeSimulatorArm64::CodeSimulatorArm64()
|
||||
: CodeSimulator(), decoder_(nullptr), simulator_(nullptr) {
|
||||
DCHECK(kCanSimulate);
|
||||
decoder_ = new Decoder();
|
||||
simulator_ = new Simulator(decoder_);
|
||||
}
|
||||
|
||||
CodeSimulatorArm64::~CodeSimulatorArm64() {
|
||||
DCHECK(kCanSimulate);
|
||||
delete simulator_;
|
||||
delete decoder_;
|
||||
}
|
||||
|
||||
void CodeSimulatorArm64::RunFrom(intptr_t code_buffer) {
|
||||
DCHECK(kCanSimulate);
|
||||
simulator_->RunFrom(reinterpret_cast<const Instruction*>(code_buffer));
|
||||
}
|
||||
|
||||
bool CodeSimulatorArm64::GetCReturnBool() const {
|
||||
DCHECK(kCanSimulate);
|
||||
return simulator_->ReadWRegister(0);
|
||||
}
|
||||
|
||||
int32_t CodeSimulatorArm64::GetCReturnInt32() const {
|
||||
DCHECK(kCanSimulate);
|
||||
return simulator_->ReadWRegister(0);
|
||||
}
|
||||
|
||||
int64_t CodeSimulatorArm64::GetCReturnInt64() const {
|
||||
DCHECK(kCanSimulate);
|
||||
return simulator_->ReadXRegister(0);
|
||||
}
|
||||
|
||||
} // namespace arm64
|
||||
} // namespace art
|
58
android/art/runtime/simulator/code_simulator_arm64.h
Normal file
58
android/art/runtime/simulator/code_simulator_arm64.h
Normal file
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright (C) 2015 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef ART_RUNTIME_SIMULATOR_CODE_SIMULATOR_ARM64_H_
|
||||
#define ART_RUNTIME_SIMULATOR_CODE_SIMULATOR_ARM64_H_
|
||||
|
||||
#include "memory"
|
||||
#include "simulator/code_simulator.h"
|
||||
|
||||
// TODO(VIXL): Make VIXL compile with -Wshadow.
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wshadow"
|
||||
#include "aarch64/simulator-aarch64.h"
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
namespace art {
|
||||
namespace arm64 {
|
||||
|
||||
class CodeSimulatorArm64 : public CodeSimulator {
|
||||
public:
|
||||
static CodeSimulatorArm64* CreateCodeSimulatorArm64();
|
||||
virtual ~CodeSimulatorArm64();
|
||||
|
||||
void RunFrom(intptr_t code_buffer) OVERRIDE;
|
||||
|
||||
bool GetCReturnBool() const OVERRIDE;
|
||||
int32_t GetCReturnInt32() const OVERRIDE;
|
||||
int64_t GetCReturnInt64() const OVERRIDE;
|
||||
|
||||
private:
|
||||
CodeSimulatorArm64();
|
||||
|
||||
vixl::aarch64::Decoder* decoder_;
|
||||
vixl::aarch64::Simulator* simulator_;
|
||||
|
||||
// TODO: Enable CodeSimulatorArm64 for more host ISAs once Simulator supports them.
|
||||
static constexpr bool kCanSimulate = (kRuntimeISA == kX86_64);
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(CodeSimulatorArm64);
|
||||
};
|
||||
|
||||
} // namespace arm64
|
||||
} // namespace art
|
||||
|
||||
#endif // ART_RUNTIME_SIMULATOR_CODE_SIMULATOR_ARM64_H_
|
Loading…
Add table
Add a link
Reference in a new issue