[vm] Define kFpuRegisterSize based on the target architecture, not the host architecture.
TEST=ci Bug: https://github.com/dart-lang/sdk/issues/47802 Change-Id: Icf4522df4109dd653727aa988ba4dccd8f939ae2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/226420 Reviewed-by: Alexander Markov <alexmarkov@google.com> Commit-Queue: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
@@ -197,40 +197,15 @@ struct simd128_value_t {
|
||||
#if defined(_M_X64) || defined(__x86_64__)
|
||||
#define HOST_ARCH_X64 1
|
||||
#define ARCH_IS_64_BIT 1
|
||||
#define kFpuRegisterSize 16
|
||||
typedef simd128_value_t fpu_register_t;
|
||||
#elif defined(_M_IX86) || defined(__i386__)
|
||||
#define HOST_ARCH_IA32 1
|
||||
#define ARCH_IS_32_BIT 1
|
||||
#define kFpuRegisterSize 16
|
||||
typedef simd128_value_t fpu_register_t;
|
||||
#elif defined(__ARMEL__)
|
||||
#define HOST_ARCH_ARM 1
|
||||
#define ARCH_IS_32_BIT 1
|
||||
#define kFpuRegisterSize 16
|
||||
// Mark the fact that we have defined simd_value_t.
|
||||
#define SIMD_VALUE_T_
|
||||
typedef struct {
|
||||
union {
|
||||
uint32_t u;
|
||||
float f;
|
||||
} data_[4];
|
||||
} simd_value_t;
|
||||
typedef simd_value_t fpu_register_t;
|
||||
#define simd_value_safe_load(addr) (*reinterpret_cast<simd_value_t*>(addr))
|
||||
#define simd_value_safe_store(addr, value) \
|
||||
do { \
|
||||
reinterpret_cast<simd_value_t*>(addr)->data_[0] = value.data_[0]; \
|
||||
reinterpret_cast<simd_value_t*>(addr)->data_[1] = value.data_[1]; \
|
||||
reinterpret_cast<simd_value_t*>(addr)->data_[2] = value.data_[2]; \
|
||||
reinterpret_cast<simd_value_t*>(addr)->data_[3] = value.data_[3]; \
|
||||
} while (0)
|
||||
|
||||
#elif defined(__aarch64__)
|
||||
#define HOST_ARCH_ARM64 1
|
||||
#define ARCH_IS_64_BIT 1
|
||||
#define kFpuRegisterSize 16
|
||||
typedef simd128_value_t fpu_register_t;
|
||||
#else
|
||||
#error Architecture was not detected as supported by Dart.
|
||||
#endif
|
||||
|
||||
@@ -288,6 +288,8 @@ const SRegister STMP DART_USED = EvenSRegisterOf(DTMP);
|
||||
typedef QRegister FpuRegister;
|
||||
|
||||
const FpuRegister FpuTMP = QTMP;
|
||||
const int kFpuRegisterSize = 16;
|
||||
typedef simd128_value_t fpu_register_t;
|
||||
const int kNumberOfFpuRegisters = kNumberOfQRegisters;
|
||||
const FpuRegister kNoFpuRegister = kNoQRegister;
|
||||
|
||||
|
||||
@@ -123,6 +123,8 @@ const VRegister VTMP = V31;
|
||||
// Architecture independent aliases.
|
||||
typedef VRegister FpuRegister;
|
||||
const FpuRegister FpuTMP = VTMP;
|
||||
const int kFpuRegisterSize = 16;
|
||||
typedef simd128_value_t fpu_register_t;
|
||||
const int kNumberOfFpuRegisters = kNumberOfVRegisters;
|
||||
const FpuRegister kNoFpuRegister = kNoVRegister;
|
||||
|
||||
|
||||
@@ -61,6 +61,8 @@ enum XmmRegister {
|
||||
// Architecture independent aliases.
|
||||
typedef XmmRegister FpuRegister;
|
||||
const FpuRegister FpuTMP = XMM7;
|
||||
const int kFpuRegisterSize = 16;
|
||||
typedef simd128_value_t fpu_register_t;
|
||||
const int kNumberOfFpuRegisters = kNumberOfXmmRegisters;
|
||||
const FpuRegister kNoFpuRegister = kNoXmmRegister;
|
||||
|
||||
|
||||
@@ -93,6 +93,8 @@ enum XmmRegister {
|
||||
// Architecture independent aliases.
|
||||
typedef XmmRegister FpuRegister;
|
||||
const FpuRegister FpuTMP = XMM15;
|
||||
const int kFpuRegisterSize = 16;
|
||||
typedef simd128_value_t fpu_register_t;
|
||||
const int kNumberOfFpuRegisters = kNumberOfXmmRegisters;
|
||||
const FpuRegister kNoFpuRegister = kNoXmmRegister;
|
||||
|
||||
|
||||
@@ -25,14 +25,12 @@ class Mutex;
|
||||
class SimulatorSetjmpBuffer;
|
||||
class Thread;
|
||||
|
||||
#if !defined(SIMD_VALUE_T_)
|
||||
typedef struct {
|
||||
union {
|
||||
uint32_t u;
|
||||
float f;
|
||||
} data_[4];
|
||||
} simd_value_t;
|
||||
#endif
|
||||
|
||||
class Simulator {
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user