Index: src/assembler_ia32.cpp |
diff --git a/src/assembler_ia32.cpp b/src/assembler_ia32.cpp |
index 34e7a4258f0c0bb25d4db8560052cf5b2dc6d157..494b72f20ab209e77aefded8819fb24dedba7cb3 100644 |
--- a/src/assembler_ia32.cpp |
+++ b/src/assembler_ia32.cpp |
@@ -33,7 +33,7 @@ public: |
DirectCallRelocation(Kind, Sym); |
} |
- void Process(const MemoryRegion ®ion, intptr_t position) { |
+ void Process(const MemoryRegion ®ion, intptr_t position) override { |
// Direct calls are relative to the following instruction on x86. |
int32_t pointer = region.Load<int32_t>(position); |
int32_t delta = region.start() + position + sizeof(int32_t); |
@@ -355,7 +355,7 @@ void AssemblerX86::movq(XmmRegister dst, const Address &src) { |
void AssemblerX86::addss(Type Ty, XmmRegister dst, XmmRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); |
+ EmitUint8(isFloat32Assuming32Or64(Ty) ? 0xF3 : 0xF2); |
EmitUint8(0x0F); |
EmitUint8(0x58); |
EmitXmmRegisterOperand(dst, src); |
@@ -363,7 +363,7 @@ void AssemblerX86::addss(Type Ty, XmmRegister dst, XmmRegister src) { |
void AssemblerX86::addss(Type Ty, XmmRegister dst, const Address &src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); |
+ EmitUint8(isFloat32Assuming32Or64(Ty) ? 0xF3 : 0xF2); |
EmitUint8(0x0F); |
EmitUint8(0x58); |
EmitOperand(dst, src); |
@@ -371,7 +371,7 @@ void AssemblerX86::addss(Type Ty, XmmRegister dst, const Address &src) { |
void AssemblerX86::subss(Type Ty, XmmRegister dst, XmmRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); |
+ EmitUint8(isFloat32Assuming32Or64(Ty) ? 0xF3 : 0xF2); |
EmitUint8(0x0F); |
EmitUint8(0x5C); |
EmitXmmRegisterOperand(dst, src); |
@@ -379,7 +379,7 @@ void AssemblerX86::subss(Type Ty, XmmRegister dst, XmmRegister src) { |
void AssemblerX86::subss(Type Ty, XmmRegister dst, const Address &src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); |
+ EmitUint8(isFloat32Assuming32Or64(Ty) ? 0xF3 : 0xF2); |
EmitUint8(0x0F); |
EmitUint8(0x5C); |
EmitOperand(dst, src); |
@@ -387,7 +387,7 @@ void AssemblerX86::subss(Type Ty, XmmRegister dst, const Address &src) { |
void AssemblerX86::mulss(Type Ty, XmmRegister dst, XmmRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); |
+ EmitUint8(isFloat32Assuming32Or64(Ty) ? 0xF3 : 0xF2); |
EmitUint8(0x0F); |
EmitUint8(0x59); |
EmitXmmRegisterOperand(dst, src); |
@@ -395,7 +395,7 @@ void AssemblerX86::mulss(Type Ty, XmmRegister dst, XmmRegister src) { |
void AssemblerX86::mulss(Type Ty, XmmRegister dst, const Address &src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); |
+ EmitUint8(isFloat32Assuming32Or64(Ty) ? 0xF3 : 0xF2); |
EmitUint8(0x0F); |
EmitUint8(0x59); |
EmitOperand(dst, src); |
@@ -403,7 +403,7 @@ void AssemblerX86::mulss(Type Ty, XmmRegister dst, const Address &src) { |
void AssemblerX86::divss(Type Ty, XmmRegister dst, XmmRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); |
+ EmitUint8(isFloat32Assuming32Or64(Ty) ? 0xF3 : 0xF2); |
EmitUint8(0x0F); |
EmitUint8(0x5E); |
EmitXmmRegisterOperand(dst, src); |
@@ -411,7 +411,7 @@ void AssemblerX86::divss(Type Ty, XmmRegister dst, XmmRegister src) { |
void AssemblerX86::divss(Type Ty, XmmRegister dst, const Address &src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); |
+ EmitUint8(isFloat32Assuming32Or64(Ty) ? 0xF3 : 0xF2); |
EmitUint8(0x0F); |
EmitUint8(0x5E); |
EmitOperand(dst, src); |
@@ -478,7 +478,7 @@ void AssemblerX86::padd(Type Ty, XmmRegister dst, XmmRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
EmitUint8(0x66); |
EmitUint8(0x0F); |
- if (Ty == IceType_i8 || Ty == IceType_i1) { |
+ if (isByteSizedArithType(Ty)) { |
EmitUint8(0xFC); |
} else if (Ty == IceType_i16) { |
EmitUint8(0xFD); |
@@ -492,7 +492,7 @@ void AssemblerX86::padd(Type Ty, XmmRegister dst, const Address &src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
EmitUint8(0x66); |
EmitUint8(0x0F); |
- if (Ty == IceType_i8 || Ty == IceType_i1) { |
+ if (isByteSizedArithType(Ty)) { |
EmitUint8(0xFC); |
} else if (Ty == IceType_i16) { |
EmitUint8(0xFD); |
@@ -570,7 +570,7 @@ void AssemblerX86::psub(Type Ty, XmmRegister dst, XmmRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
EmitUint8(0x66); |
EmitUint8(0x0F); |
- if (Ty == IceType_i8 || Ty == IceType_i1) { |
+ if (isByteSizedArithType(Ty)) { |
EmitUint8(0xF8); |
} else if (Ty == IceType_i16) { |
EmitUint8(0xF9); |
@@ -584,7 +584,7 @@ void AssemblerX86::psub(Type Ty, XmmRegister dst, const Address &src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
EmitUint8(0x66); |
EmitUint8(0x0F); |
- if (Ty == IceType_i8 || Ty == IceType_i1) { |
+ if (isByteSizedArithType(Ty)) { |
EmitUint8(0xF8); |
} else if (Ty == IceType_i16) { |
EmitUint8(0xF9); |
@@ -965,7 +965,7 @@ void AssemblerX86::movmskps(GPRRegister dst, XmmRegister src) { |
void AssemblerX86::sqrtss(Type Ty, XmmRegister dst, const Address &src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); |
+ EmitUint8(isFloat32Assuming32Or64(Ty) ? 0xF3 : 0xF2); |
EmitUint8(0x0F); |
EmitUint8(0x51); |
EmitOperand(dst, src); |
@@ -973,7 +973,7 @@ void AssemblerX86::sqrtss(Type Ty, XmmRegister dst, const Address &src) { |
void AssemblerX86::sqrtss(Type Ty, XmmRegister dst, XmmRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- EmitUint8(Ty == IceType_f32 ? 0xF3 : 0xF2); |
+ EmitUint8(isFloat32Assuming32Or64(Ty) ? 0xF3 : 0xF2); |
EmitUint8(0x0F); |
EmitUint8(0x51); |
EmitXmmRegisterOperand(dst, src); |
@@ -1199,7 +1199,7 @@ void AssemblerX86::And(Type Ty, GPRRegister dst, GPRRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedType(Ty)) |
EmitUint8(0x22); |
else |
EmitUint8(0x23); |
@@ -1210,7 +1210,7 @@ void AssemblerX86::And(Type Ty, GPRRegister dst, const Address &address) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedType(Ty)) |
EmitUint8(0x22); |
else |
EmitUint8(0x23); |
@@ -1219,7 +1219,7 @@ void AssemblerX86::And(Type Ty, GPRRegister dst, const Address &address) { |
void AssemblerX86::And(Type Ty, GPRRegister dst, const Immediate &imm) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- if (Ty == IceType_i8 || Ty == IceType_i1) { |
+ if (isByteSizedType(Ty)) { |
EmitComplexI8(4, Operand(dst), imm); |
return; |
} |
@@ -1232,7 +1232,7 @@ void AssemblerX86::Or(Type Ty, GPRRegister dst, GPRRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedType(Ty)) |
EmitUint8(0x0A); |
else |
EmitUint8(0x0B); |
@@ -1243,7 +1243,7 @@ void AssemblerX86::Or(Type Ty, GPRRegister dst, const Address &address) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedType(Ty)) |
EmitUint8(0x0A); |
else |
EmitUint8(0x0B); |
@@ -1252,7 +1252,7 @@ void AssemblerX86::Or(Type Ty, GPRRegister dst, const Address &address) { |
void AssemblerX86::Or(Type Ty, GPRRegister dst, const Immediate &imm) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- if (Ty == IceType_i8 || Ty == IceType_i1) { |
+ if (isByteSizedType(Ty)) { |
EmitComplexI8(1, Operand(dst), imm); |
return; |
} |
@@ -1265,7 +1265,7 @@ void AssemblerX86::Xor(Type Ty, GPRRegister dst, GPRRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedType(Ty)) |
EmitUint8(0x32); |
else |
EmitUint8(0x33); |
@@ -1276,7 +1276,7 @@ void AssemblerX86::Xor(Type Ty, GPRRegister dst, const Address &address) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedType(Ty)) |
EmitUint8(0x32); |
else |
EmitUint8(0x33); |
@@ -1285,7 +1285,7 @@ void AssemblerX86::Xor(Type Ty, GPRRegister dst, const Address &address) { |
void AssemblerX86::Xor(Type Ty, GPRRegister dst, const Immediate &imm) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- if (Ty == IceType_i8 || Ty == IceType_i1) { |
+ if (isByteSizedType(Ty)) { |
EmitComplexI8(6, Operand(dst), imm); |
return; |
} |
@@ -1298,7 +1298,7 @@ void AssemblerX86::add(Type Ty, GPRRegister dst, GPRRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0x02); |
else |
EmitUint8(0x03); |
@@ -1309,7 +1309,7 @@ void AssemblerX86::add(Type Ty, GPRRegister reg, const Address &address) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0x02); |
else |
EmitUint8(0x03); |
@@ -1318,7 +1318,7 @@ void AssemblerX86::add(Type Ty, GPRRegister reg, const Address &address) { |
void AssemblerX86::add(Type Ty, GPRRegister reg, const Immediate &imm) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- if (Ty == IceType_i8 || Ty == IceType_i1) { |
+ if (isByteSizedArithType(Ty)) { |
EmitComplexI8(0, Operand(reg), imm); |
return; |
} |
@@ -1331,7 +1331,7 @@ void AssemblerX86::adc(Type Ty, GPRRegister dst, GPRRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0x12); |
else |
EmitUint8(0x13); |
@@ -1342,7 +1342,7 @@ void AssemblerX86::adc(Type Ty, GPRRegister dst, const Address &address) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0x12); |
else |
EmitUint8(0x13); |
@@ -1351,7 +1351,7 @@ void AssemblerX86::adc(Type Ty, GPRRegister dst, const Address &address) { |
void AssemblerX86::adc(Type Ty, GPRRegister reg, const Immediate &imm) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- if (Ty == IceType_i8 || Ty == IceType_i1) { |
+ if (isByteSizedArithType(Ty)) { |
EmitComplexI8(2, Operand(reg), imm); |
return; |
} |
@@ -1364,7 +1364,7 @@ void AssemblerX86::sub(Type Ty, GPRRegister dst, GPRRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0x2A); |
else |
EmitUint8(0x2B); |
@@ -1375,7 +1375,7 @@ void AssemblerX86::sub(Type Ty, GPRRegister reg, const Address &address) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0x2A); |
else |
EmitUint8(0x2B); |
@@ -1384,7 +1384,7 @@ void AssemblerX86::sub(Type Ty, GPRRegister reg, const Address &address) { |
void AssemblerX86::sub(Type Ty, GPRRegister reg, const Immediate &imm) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- if (Ty == IceType_i8 || Ty == IceType_i1) { |
+ if (isByteSizedArithType(Ty)) { |
EmitComplexI8(5, Operand(reg), imm); |
return; |
} |
@@ -1397,7 +1397,7 @@ void AssemblerX86::sbb(Type Ty, GPRRegister dst, GPRRegister src) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0x1A); |
else |
EmitUint8(0x1B); |
@@ -1408,7 +1408,7 @@ void AssemblerX86::sbb(Type Ty, GPRRegister dst, const Address &address) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0x1A); |
else |
EmitUint8(0x1B); |
@@ -1417,7 +1417,7 @@ void AssemblerX86::sbb(Type Ty, GPRRegister dst, const Address &address) { |
void AssemblerX86::sbb(Type Ty, GPRRegister reg, const Immediate &imm) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
- if (Ty == IceType_i8 || Ty == IceType_i1) { |
+ if (isByteSizedArithType(Ty)) { |
EmitComplexI8(3, Operand(reg), imm); |
return; |
} |
@@ -1447,7 +1447,7 @@ void AssemblerX86::div(Type Ty, GPRRegister reg) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0xF6); |
else |
EmitUint8(0xF7); |
@@ -1458,7 +1458,7 @@ void AssemblerX86::div(Type Ty, const Address &addr) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0xF6); |
else |
EmitUint8(0xF7); |
@@ -1469,7 +1469,7 @@ void AssemblerX86::idiv(Type Ty, GPRRegister reg) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0xF6); |
else |
EmitUint8(0xF7); |
@@ -1480,7 +1480,7 @@ void AssemblerX86::idiv(Type Ty, const Address &addr) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0xF6); |
else |
EmitUint8(0xF7); |
@@ -1524,7 +1524,7 @@ void AssemblerX86::mul(Type Ty, GPRRegister reg) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0xF6); |
else |
EmitUint8(0xF7); |
@@ -1535,7 +1535,7 @@ void AssemblerX86::mul(Type Ty, const Address &address) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0xF6); |
else |
EmitUint8(0xF7); |
@@ -1648,7 +1648,7 @@ void AssemblerX86::neg(Type Ty, GPRRegister reg) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0xF6); |
else |
EmitUint8(0xF7); |
@@ -1659,7 +1659,7 @@ void AssemblerX86::neg(Type Ty, const Address &addr) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0xF6); |
else |
EmitUint8(0xF7); |
@@ -1898,7 +1898,7 @@ void AssemblerX86::cmpxchg(Type Ty, const Address &address, GPRRegister reg) { |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
EmitUint8(0x0F); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0xB0); |
else |
EmitUint8(0xB1); |
@@ -1917,7 +1917,7 @@ void AssemblerX86::xadd(Type Ty, const Address &addr, GPRRegister reg) { |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
EmitUint8(0x0F); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0xC0); |
else |
EmitUint8(0xC1); |
@@ -1928,7 +1928,7 @@ void AssemblerX86::xchg(Type Ty, const Address &addr, GPRRegister reg) { |
AssemblerBuffer::EnsureCapacity ensured(&buffer_); |
if (Ty == IceType_i16) |
EmitOperandSizeOverride(); |
- if (Ty == IceType_i8 || Ty == IceType_i1) |
+ if (isByteSizedArithType(Ty)) |
EmitUint8(0x86); |
else |
EmitUint8(0x87); |