diff options
-rw-r--r-- | src/main.cpp | 2 | ||||
-rw-r--r-- | src/trans/codegen_mmir.cpp | 11 | ||||
-rw-r--r-- | src/trans/target.cpp | 14 |
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; |