diff options
| author | 2014-11-12 17:50:07 +0000 | |
|---|---|---|
| committer | 2014-11-12 17:55:24 +0000 | |
| commit | f0e3937b87453234d0d7970b8712082062709b8d (patch) | |
| tree | e552c1173ee90fea1d2ba11cc08878efe65ba0be /compiler/optimizing/code_generator.h | |
| parent | 59321e0e10ea09694efecf6154704e2743b9bffd (diff) | |
Do a parallel move in BoundsCheckSlowPath.
The two locations of the index and length could overlap,
so we need a parallel move. Also factorize the code for
doing a parallel move based on two locations.
Change-Id: Iee8b3459e2eed6704d45e9a564fb2cd050741ea4
Diffstat (limited to 'compiler/optimizing/code_generator.h')
| -rw-r--r-- | compiler/optimizing/code_generator.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/compiler/optimizing/code_generator.h b/compiler/optimizing/code_generator.h index fc4ea4b5d3..ac4fc67c2c 100644 --- a/compiler/optimizing/code_generator.h +++ b/compiler/optimizing/code_generator.h @@ -33,6 +33,7 @@ static size_t constexpr kUninitializedFrameSize = 0; class Assembler; class CodeGenerator; class DexCompilationUnit; +class ParallelMoveResolver; class SrcMap; class CodeAllocator { @@ -165,6 +166,8 @@ class CodeGenerator : public ArenaObject<kArenaAllocMisc> { // of the architecture. static size_t GetCacheOffset(uint32_t index); + void EmitParallelMoves(Location from1, Location to1, Location from2, Location to2); + protected: CodeGenerator(HGraph* graph, size_t number_of_core_registers, @@ -197,6 +200,8 @@ class CodeGenerator : public ArenaObject<kArenaAllocMisc> { virtual Location GetStackLocation(HLoadLocal* load) const = 0; + virtual ParallelMoveResolver* GetMoveResolver() = 0; + // Frame size required for this method. uint32_t frame_size_; uint32_t core_spill_mask_; |