class LPlatformChunk;
class LOperand;
class LUnallocated;
-class LConstantOperand;
class LGap;
class LParallelMove;
class LPointerMap;
-class LStackSlot;
-class LRegister;
// This class represents a single point of a LOperand's lifetime.
enum RegisterKind {
UNALLOCATED_REGISTERS,
GENERAL_REGISTERS,
- DOUBLE_REGISTERS
+ DOUBLE_REGISTERS,
+ FLOAT32x4_REGISTERS,
+ INT32x4_REGISTERS
};
+inline bool IsSIMD128RegisterKind(RegisterKind kind) {
+ return kind == FLOAT32x4_REGISTERS || kind == INT32x4_REGISTERS;
+}
+
+
// A register-allocator view of a Lithium instruction. It contains the id of
// the output operand and a list of input operand uses.
ZoneList<LiveRange*> active_live_ranges_;
ZoneList<LiveRange*> inactive_live_ranges_;
ZoneList<LiveRange*> reusable_slots_;
+ // Slots reusable for both float32x4 and int32x4 register spilling.
+ ZoneList<LiveRange*> reusable_simd128_slots_;
// Next virtual register number to be assigned to temporaries.
int next_virtual_register_;
int first_artificial_register_;
GrowableBitVector double_artificial_registers_;
+ GrowableBitVector float32x4_artificial_registers_;
+ GrowableBitVector int32x4_artificial_registers_;
RegisterKind mode_;
int num_registers_;