summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.cpp2
-rw-r--r--src/trans/codegen_mmir.cpp11
-rw-r--r--src/trans/target.cpp14
3 files changed, 17 insertions, 10 deletions
diff --git a/src/main.cpp b/src/main.cpp
index ea095367..5063a44b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -29,7 +29,7 @@
// Hacky default target
#ifdef _MSC_VER
-# if defined(_X64)
+# if defined(_WIN64)
# define DEFAULT_TARGET_NAME "x86_64-windows-msvc"
# else
# define DEFAULT_TARGET_NAME "x86-windows-msvc"
diff --git a/src/trans/codegen_mmir.cpp b/src/trans/codegen_mmir.cpp
index d4b9f799..eab53d37 100644
--- a/src/trans/codegen_mmir.cpp
+++ b/src/trans/codegen_mmir.cpp
@@ -548,11 +548,14 @@ namespace
putb(v >> 24);
};
auto putsize = [&](uint64_t v) {
- if( true ) {
+ if( Target_GetCurSpec().m_arch.m_pointer_bits == 64 ) {
putu32(v );
putu32(v >> 32);
}
- else {
+ else if( Target_GetCurSpec().m_arch.m_pointer_bits == 64 ) {
+ putu32(v );
+ }
+ else {
putu32(v );
}
};
@@ -680,6 +683,10 @@ namespace
}
auto v = ::HIR::Literal::make_Integer(le.idx);
emit_literal_as_bytes(v, repr->fields[ve->field.index].ty, out_relocations, base_ofs + cur_ofs);
+
+ size_t size;
+ assert(Target_GetSizeOf(sp, m_resolve, repr->fields[ve->field.index].ty, size));
+ cur_ofs += size;
}
// TODO: Nonzero?
while(cur_ofs < repr->size)
diff --git a/src/trans/target.cpp b/src/trans/target.cpp
index 08cad81a..71a342ba 100644
--- a/src/trans/target.cpp
+++ b/src/trans/target.cpp
@@ -87,13 +87,13 @@ namespace
ARCH_X86
};
}
- //else if (target_name == "x86_64-windows-msvc")
- //{
- // return TargetSpec {
- // "windows", "windows", "msvc", CodegenMode::Msvc, "amd64"
- // ARCH_X86_64
- // };
- //}
+ else if (target_name == "x86_64-windows-msvc")
+ {
+ return TargetSpec {
+ "windows", "windows", "msvc", CodegenMode::Msvc, "amd64",
+ ARCH_X86_64
+ };
+ }
else
{
::std::cerr << "Unknown target name '" << target_name << "'" << ::std::endl;