Index: src/IceTargetLoweringX8632.cpp |
diff --git a/src/IceTargetLoweringX8632.cpp b/src/IceTargetLoweringX8632.cpp |
index df7d04f591fb487293b29f8d21352219ce5112a5..6e25816eb8eba9172a0207814213b09bc51a487c 100644 |
--- a/src/IceTargetLoweringX8632.cpp |
+++ b/src/IceTargetLoweringX8632.cpp |
@@ -107,7 +107,7 @@ CondX86::BrCond getIcmp32Mapping(InstIcmp::ICond Cond) { |
const struct TableTypeX8632Attributes_ { |
Type InVectorElementType; |
} TableTypeX8632Attributes[] = { |
-#define X(tag, elementty, cvt, sdss, pack, width) \ |
+#define X(tag, elementty, cvt, sdss, pack, width, fld) \ |
{ elementty } \ |
, |
ICETYPEX8632_TABLE |
@@ -245,7 +245,7 @@ namespace dummy3 { |
// Define a temporary set of enum values based on low-level table |
// entries. |
enum _tmp_enum { |
-#define X(tag, elementty, cvt, sdss, pack, width) _tmp_##tag, |
+#define X(tag, elementty, cvt, sdss, pack, width, fld) _tmp_##tag, |
ICETYPEX8632_TABLE |
#undef X |
_num |
@@ -257,7 +257,7 @@ ICETYPE_TABLE; |
#undef X |
// Define a set of constants based on low-level table entries, and |
// ensure the table entry keys are consistent. |
-#define X(tag, elementty, cvt, sdss, pack, width) \ |
+#define X(tag, elementty, cvt, sdss, pack, width, fld) \ |
static const int _table2_##tag = _tmp_##tag; \ |
static_assert(_table1_##tag == _table2_##tag, \ |
"Inconsistency between ICETYPEX8632_TABLE and ICETYPE_TABLE"); |
@@ -509,20 +509,16 @@ IceString TargetX8632::getRegName(SizeT RegNum, Type Ty) const { |
void TargetX8632::emitVariable(const Variable *Var) const { |
Ostream &Str = Ctx->getStrEmit(); |
if (Var->hasReg()) { |
- Str << getRegName(Var->getRegNum(), Var->getType()); |
+ Str << "%" << getRegName(Var->getRegNum(), Var->getType()); |
return; |
} |
- Str << InstX8632::getWidthString(Var->getType()); |
- Str << " [" << getRegName(getFrameOrStackReg(), IceType_i32); |
+ const Type Ty = IceType_i32; |
int32_t Offset = Var->getStackOffset(); |
if (!hasFramePointer()) |
Offset += getStackAdjustment(); |
- if (Offset) { |
- if (Offset > 0) |
- Str << "+"; |
+ if (Offset) |
Str << Offset; |
- } |
- Str << "]"; |
+ Str << "(%" << getRegName(getFrameOrStackReg(), Ty) << ")"; |
} |
x86::Address TargetX8632::stackVarToAsmOperand(const Variable *Var) const { |
@@ -995,7 +991,7 @@ template <typename T> void TargetX8632::emitConstantPool() const { |
assert(CharsPrinted >= 0 && |
(size_t)CharsPrinted < llvm::array_lengthof(buf)); |
(void)CharsPrinted; // avoid warnings if asserts are disabled |
- Str << "L$" << Ty << "$" << Const->getPoolEntryID() << ":\n"; |
+ Str << ".L$" << Ty << "$" << Const->getPoolEntryID() << ":\n"; |
Str << "\t" << T::AsmTag << "\t" << buf << "\t# " << T::TypeName << " " |
<< Value << "\n"; |
} |
@@ -4598,7 +4594,7 @@ void TargetX8632::postLower() { |
template <> void ConstantInteger32::emit(GlobalContext *Ctx) const { |
Ostream &Str = Ctx->getStrEmit(); |
- Str << (int32_t)getValue(); |
+ Str << "$" << (int32_t)getValue(); |
} |
template <> void ConstantInteger64::emit(GlobalContext *) const { |
@@ -4607,14 +4603,12 @@ template <> void ConstantInteger64::emit(GlobalContext *) const { |
template <> void ConstantFloat::emit(GlobalContext *Ctx) const { |
Ostream &Str = Ctx->getStrEmit(); |
- // It would be better to prefix with ".L$" instead of "L$", but |
- // llvm-mc doesn't parse "dword ptr [.L$foo]". |
- Str << "dword ptr [L$" << IceType_f32 << "$" << getPoolEntryID() << "]"; |
+ Str << ".L$" << IceType_f32 << "$" << getPoolEntryID(); |
} |
template <> void ConstantDouble::emit(GlobalContext *Ctx) const { |
Ostream &Str = Ctx->getStrEmit(); |
- Str << "qword ptr [L$" << IceType_f64 << "$" << getPoolEntryID() << "]"; |
+ Str << ".L$" << IceType_f64 << "$" << getPoolEntryID(); |
} |
void ConstantUndef::emit(GlobalContext *) const { |