diff options
author | John Hodge <tpg@mutabah.net> | 2017-02-12 16:41:48 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2017-05-05 14:44:18 +0800 |
commit | da78ba38d75fe70cd8388ece22bb7756136414f9 (patch) | |
tree | 6b88fe22bd29df3928351030969bf119001d0e58 | |
parent | a71ea499fa11c4268c0e85c11c03205c540b2edb (diff) | |
download | mrust-da78ba38d75fe70cd8388ece22bb7756136414f9.tar.gz |
Trans Monomorph - asm!
-rw-r--r-- | src/trans/monomorphise.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/trans/monomorphise.cpp b/src/trans/monomorphise.cpp index 1a7d8e79..3ac2ee09 100644 --- a/src/trans/monomorphise.cpp +++ b/src/trans/monomorphise.cpp @@ -252,9 +252,21 @@ namespace { mv$(rval) }) ); } break; - case ::MIR::Statement::TAG_Asm: - TODO(params.sp, "Monormorphise asm!"); - break; + case ::MIR::Statement::TAG_Asm: { + const auto& e = stmt.as_Asm(); + DEBUG("- asm! \"" << e.tpl << "\""); + ::std::vector< ::std::pair<::std::string, ::MIR::LValue>> new_out, new_in; + new_out.reserve( e.outputs.size() ); + for(auto& ent : e.outputs) + new_out.push_back(::std::make_pair( ent.first, monomorph_LValue(resolve, params, ent.second) )); + new_in.reserve( e.inputs.size() ); + for(auto& ent : e.inputs) + new_in.push_back(::std::make_pair( ent.first, monomorph_LValue(resolve, params, ent.second) )); + + statements.push_back( ::MIR::Statement::make_Asm({ + e.tpl, mv$(new_out), mv$(new_in), e.clobbers, e.flags + }) ); + } break; } } |