diff options
author | 2014-01-28 00:29:31 +0000 | |
---|---|---|
committer | 2014-01-28 00:29:31 +0000 | |
commit | 7ea5dafc81b2bba7cabad26130bb75dc8f709803 (patch) | |
tree | dfd021549d31697d4c142699e38fb8fa00e64c58 /compiler/dex/quick/codegen_util.cc | |
parent | 6e65720d99bd3387b72d528a46291f1ed8184ede (diff) | |
parent | 4708dcd68eebf1173aef1097dad8ab13466059aa (diff) |
Merge "Improve x86 long multiply and shifts"
Diffstat (limited to 'compiler/dex/quick/codegen_util.cc')
-rw-r--r-- | compiler/dex/quick/codegen_util.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/compiler/dex/quick/codegen_util.cc b/compiler/dex/quick/codegen_util.cc index 12ecfff935..1eb79c98ac 100644 --- a/compiler/dex/quick/codegen_util.cc +++ b/compiler/dex/quick/codegen_util.cc @@ -1137,4 +1137,28 @@ void Mir2Lir::InsertLIRAfter(LIR* current_lir, LIR* new_lir) { new_lir->next->prev = new_lir; } +bool Mir2Lir::IsPowerOfTwo(uint64_t x) { + return (x & (x - 1)) == 0; +} + +// Returns the index of the lowest set bit in 'x'. +int32_t Mir2Lir::LowestSetBit(uint64_t x) { + int bit_posn = 0; + while ((x & 0xf) == 0) { + bit_posn += 4; + x >>= 4; + } + while ((x & 1) == 0) { + bit_posn++; + x >>= 1; + } + return bit_posn; +} + +bool Mir2Lir::BadOverlap(RegLocation rl_src, RegLocation rl_dest) { + DCHECK(rl_src.wide); + DCHECK(rl_dest.wide); + return (abs(mir_graph_->SRegToVReg(rl_src.s_reg_low) - mir_graph_->SRegToVReg(rl_dest.s_reg_low)) == 1); +} + } // namespace art |