summaryrefslogtreecommitdiff
path: root/compiler/optimizing/code_generator.h
diff options
context:
space:
mode:
author Andreas Gampe <agampe@google.com> 2015-09-17 21:43:46 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2015-09-17 21:43:46 +0000
commit2c2cbfd34839e61ccecabab5b7e882f891d26be0 (patch)
tree010a860a46e09a20b0664d3267cccb7f46ef3324 /compiler/optimizing/code_generator.h
parent188b1f546cebbf7407e671ab07ecd2b5265ff15b (diff)
parent85b62f23fc6dfffe2ddd3ddfa74611666c9ff41d (diff)
Merge "ART: Refactor intrinsics slow-paths"
Diffstat (limited to 'compiler/optimizing/code_generator.h')
-rw-r--r--compiler/optimizing/code_generator.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/compiler/optimizing/code_generator.h b/compiler/optimizing/code_generator.h
index a54dbf1506..a1c6db0a2c 100644
--- a/compiler/optimizing/code_generator.h
+++ b/compiler/optimizing/code_generator.h
@@ -30,6 +30,7 @@
#include "nodes.h"
#include "optimizing_compiler_stats.h"
#include "stack_map_stream.h"
+#include "utils/label.h"
namespace art {
@@ -105,6 +106,9 @@ class SlowPathCode : public ArenaObject<kArenaAllocSlowPaths> {
virtual const char* GetDescription() const = 0;
+ Label* GetEntryLabel() { return &entry_label_; }
+ Label* GetExitLabel() { return &exit_label_; }
+
protected:
static constexpr size_t kMaximumNumberOfExpectedRegisters = 32;
static constexpr uint32_t kRegisterNotSaved = -1;
@@ -112,6 +116,9 @@ class SlowPathCode : public ArenaObject<kArenaAllocSlowPaths> {
uint32_t saved_fpu_stack_offsets_[kMaximumNumberOfExpectedRegisters];
private:
+ Label entry_label_;
+ Label exit_label_;
+
DISALLOW_COPY_AND_ASSIGN(SlowPathCode);
};
@@ -386,6 +393,14 @@ class CodeGenerator {
uint32_t dex_pc,
SlowPathCode* slow_path) = 0;
+ // Generate a call to a static or direct method.
+ virtual void GenerateStaticOrDirectCall(HInvokeStaticOrDirect* invoke, Location temp) = 0;
+ // Generate a call to a virtual method.
+ virtual void GenerateVirtualCall(HInvokeVirtual* invoke, Location temp) = 0;
+
+ // Copy the result of a call into the given target.
+ virtual void MoveFromReturnRegister(Location trg, Primitive::Type type) = 0;
+
protected:
// Method patch info used for recording locations of required linker patches and
// target methods. The target method can be used for various purposes, whether for