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:
parent
bfb3532249
commit
586f64e1f3
@ -166,18 +166,10 @@ class SimRegisterBase {
|
||||
void Set(T new_value, unsigned size = sizeof(T)) {
|
||||
ASSERT(size <= kSizeInBytes);
|
||||
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
|
||||
// top bits of the corresponding X register.
|
||||
if (size == kXRegSize) {
|
||||
memcpy(value_, &new_value, kXRegSize);
|
||||
} else if (size == kWRegSize) {
|
||||
memset(value_, 0, kSizeInBytes);
|
||||
memcpy(value_, &new_value, kWRegSize);
|
||||
} else {
|
||||
UNREACHABLE();
|
||||
}
|
||||
memcpy(value_, &new_value, size);
|
||||
}
|
||||
|
||||
// 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 {
|
||||
ASSERT(size <= kSizeInBytes);
|
||||
T result;
|
||||
if (size == kXRegSize) {
|
||||
memcpy(&result, value_, kXRegSize);
|
||||
} else if (size == kWRegSize) {
|
||||
memset(&result, 0, sizeof(result));
|
||||
memcpy(&result, value_, kWRegSize);
|
||||
} else {
|
||||
UNREACHABLE();
|
||||
}
|
||||
memcpy(&result, value_, size);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user