Revert "Use constant length for memcpy on A64 simulator."

This reverts commit r20141 which broke the build with some GCC versions. The
reason behind that is GCC emits a warning about code which can never be reached,
but GCC can't figure that out.

The right approach would be using template specialization instead of these
runtime if/then/else cascades, which would be nicer from a SW engineering
perspective, too.

TBR=yangguo@chromium.org

Review URL: https://codereview.chromium.org/207703003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20142 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
svenpanne@chromium.org 2014-03-21 08:03:26 +00:00
parent bfb3532249
commit 586f64e1f3

View File

@ -166,18 +166,10 @@ class SimRegisterBase {
void Set(T new_value, unsigned size = sizeof(T)) { void Set(T new_value, unsigned size = sizeof(T)) {
ASSERT(size <= kSizeInBytes); ASSERT(size <= kSizeInBytes);
ASSERT(size <= sizeof(new_value)); ASSERT(size <= sizeof(new_value));
STATIC_ASSERT(kXRegSize == kDRegSize);
STATIC_ASSERT(kWRegSize == kSRegSize);
// All AArch64 registers are zero-extending; Writing a W register clears the // All AArch64 registers are zero-extending; Writing a W register clears the
// top bits of the corresponding X register. // top bits of the corresponding X register.
if (size == kXRegSize) { memset(value_, 0, kSizeInBytes);
memcpy(value_, &new_value, kXRegSize); memcpy(value_, &new_value, size);
} else if (size == kWRegSize) {
memset(value_, 0, kSizeInBytes);
memcpy(value_, &new_value, kWRegSize);
} else {
UNREACHABLE();
}
} }
// Copy 'size' bytes of the register to the result, and zero-extend to fill // Copy 'size' bytes of the register to the result, and zero-extend to fill
@ -186,14 +178,8 @@ class SimRegisterBase {
T Get(unsigned size = sizeof(T)) const { T Get(unsigned size = sizeof(T)) const {
ASSERT(size <= kSizeInBytes); ASSERT(size <= kSizeInBytes);
T result; T result;
if (size == kXRegSize) { memset(&result, 0, sizeof(result));
memcpy(&result, value_, kXRegSize); memcpy(&result, value_, size);
} else if (size == kWRegSize) {
memset(&result, 0, sizeof(result));
memcpy(&result, value_, kWRegSize);
} else {
UNREACHABLE();
}
return result; return result;
} }