diff options
author | John Hodge <tpg@mutabah.net> | 2018-02-11 22:18:20 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2018-02-11 22:18:20 +0800 |
commit | a45a1f378f1bb2f4bbab4480a1cb80bf04724ec1 (patch) | |
tree | 289317dc64057c2a8426fd01739a56616fcff0d3 /src | |
parent | a3a0c6437302c60bd6f521fc11e30c0a16bd79fc (diff) | |
download | mrust-a45a1f378f1bb2f4bbab4480a1cb80bf04724ec1.tar.gz |
Codegen MMIR - Fix some minor architecture issues
Diffstat (limited to 'src')
-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; |