| Index: runtime/vm/simulator_arm.h
|
| ===================================================================
|
| --- runtime/vm/simulator_arm.h (revision 24980)
|
| +++ runtime/vm/simulator_arm.h (working copy)
|
| @@ -24,6 +24,13 @@
|
| class Isolate;
|
| class SimulatorSetjmpBuffer;
|
|
|
| +typedef struct {
|
| + union {
|
| + uint32_t u;
|
| + float f;
|
| + } data_[4];
|
| +} simd_value_t;
|
| +
|
| class Simulator {
|
| public:
|
| static const uword kSimulatorStackUnderflowSize = 64;
|
| @@ -50,6 +57,8 @@
|
| float get_sregister(SRegister reg) const;
|
| void set_dregister(DRegister reg, double value);
|
| double get_dregister(DRegister reg) const;
|
| + void set_qregister(QRegister reg, simd_value_t value);
|
| + simd_value_t get_qregister(QRegister reg) const;
|
|
|
| // When moving integer (rather than floating point) values to/from
|
| // the FPU registers, use the _bits calls to avoid gcc taking liberties with
|
| @@ -126,9 +135,10 @@
|
| bool v_flag_;
|
|
|
| // VFP state.
|
| - union { // S and D register banks are overlapping.
|
| + union { // S, D, and Q register banks are overlapping.
|
| int32_t sregisters_[kNumberOfSRegisters];
|
| int64_t dregisters_[kNumberOfDRegisters];
|
| + simd_value_t qregisters_[kNumberOfQRegisters];
|
| };
|
| bool fp_n_flag_;
|
| bool fp_z_flag_;
|
| @@ -238,6 +248,7 @@
|
| void DecodeType5(Instr* instr);
|
| void DecodeType6(Instr* instr);
|
| void DecodeType7(Instr* instr);
|
| + void DecodeSIMDDataProcessing(Instr* instr);
|
|
|
| // Executes one instruction.
|
| void InstructionDecode(Instr* instr);
|
|
|