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)) {
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user