case MVT::v2i64:
case MVT::v4f32:
case MVT::v2f64:
- if (NumXMMRegs < 3)
+ if (NumXMMRegs < 4)
ObjXMMRegs = 1;
else
ObjSize = 16;
//
unsigned ArgOffset = 0; // Frame mechanisms handle retaddr slot
unsigned NumXMMRegs = 0; // XMM regs used for parameter passing.
- unsigned XMMArgRegs[] = { X86::XMM0, X86::XMM1, X86::XMM2 };
+ static const unsigned XMMArgRegs[] = {
+ X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3
+ };
for (unsigned i = 0; i < NumArgs; ++i) {
MVT::ValueType ObjectVT = Op.getValue(i).getValueType();
unsigned ArgIncrement = 4;
// Keep track of the number of XMM regs passed so far.
unsigned NumXMMRegs = 0;
static const unsigned XMMArgRegs[] = {
- X86::XMM0, X86::XMM1, X86::XMM2
+ X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3
};
// Count how many bytes are to be pushed on the stack.
case MVT::v2i64:
case MVT::v4f32:
case MVT::v2f64:
- if (NumXMMRegs < 3)
+ if (NumXMMRegs < 4)
++NumXMMRegs;
else
NumBytes += 16;
case MVT::v2i64:
case MVT::v4f32:
case MVT::v2f64:
- if (NumXMMRegs < 3) {
+ if (NumXMMRegs < 4) {
RegsToPass.push_back(std::make_pair(XMMArgRegs[NumXMMRegs], Arg));
NumXMMRegs++;
} else {
case MVT::v2i64:
case MVT::v4f32:
case MVT::v2f64:
- if (NumXMMRegs < 3)
+ if (NumXMMRegs < 4)
ObjXMMRegs = 1;
else
ObjSize = 16;
unsigned NumXMMRegs = 0; // XMM regs used for parameter passing.
static const unsigned XMMArgRegs[] = {
- X86::XMM0, X86::XMM1, X86::XMM2
+ X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3
};
for (unsigned i = 0; i < NumArgs; ++i) {
{ X86::EAX, X86::EDX }
};
static const unsigned XMMArgRegs[] = {
- X86::XMM0, X86::XMM1, X86::XMM2
+ X86::XMM0, X86::XMM1, X86::XMM2, X86::XMM3
};
for (unsigned i = 0; i != NumOps; ++i) {
case MVT::v2i64:
case MVT::v4f32:
case MVT::v2f64:
- if (NumXMMRegs < 3)
+ if (NumXMMRegs < 4)
NumXMMRegs++;
else
NumBytes += 16;
case MVT::v2i64:
case MVT::v4f32:
case MVT::v2f64:
- if (NumXMMRegs < 3) {
+ if (NumXMMRegs < 4) {
RegsToPass.push_back(std::make_pair(XMMArgRegs[NumXMMRegs], Arg));
NumXMMRegs++;
} else {