From: jkummerow@chromium.org Date: Tue, 1 Apr 2014 12:51:15 +0000 (+0000) Subject: MSan workaround in Simulator::VisitBitfield. X-Git-Tag: upstream/4.7.83~9892 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cbeef7147f9325937f60a6ec8f99efa48e17ce10;p=platform%2Fupstream%2Fv8.git MSan workaround in Simulator::VisitBitfield. This change shuffles the code in Simulator::VisitBitfield a bit to work around a MemorySanitizer bug. New code should not be any slower or less readable than before. More info: https://code.google.com/p/memory-sanitizer/issues/detail?id=50 R=jkummerow@chromium.org Review URL: https://codereview.chromium.org/212863002 Patch from Evgeniy Stepanov . git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20401 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/arm64/simulator-arm64.cc b/src/arm64/simulator-arm64.cc index cd475b4..d8930c9 100644 --- a/src/arm64/simulator-arm64.cc +++ b/src/arm64/simulator-arm64.cc @@ -2108,8 +2108,9 @@ void Simulator::VisitBitfield(Instruction* instr) { // Rotate source bitfield into place. int64_t result = (static_cast(src) >> R) | (src << (reg_size - R)); // Determine the sign extension. - int64_t topbits = ((1L << (reg_size - diff - 1)) - 1) << (diff + 1); - int64_t signbits = extend && ((src >> S) & 1) ? topbits : 0; + int64_t topbits_preshift = (1L << (reg_size - diff - 1)) - 1; + int64_t signbits = (extend && ((src >> S) & 1) ? topbits_preshift : 0) + << (diff + 1); // Merge sign extension, dest/zero and bitfield. result = signbits | (result & mask) | (dst & ~mask);