Mercurial > projects > ldc
diff gen/asmstmt.cpp @ 1053:11e28922ac76
Always pass an address expression (not a var expression) to asm operands of
type Arg_Memory.
This fixes the following code:
{{{
void f(real x) { asm { fld x[RBP]; } }
void g(int x) { asm { mov EAX, x[RBP]; } }
}}}
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Sun, 08 Mar 2009 00:57:58 +0100 |
parents | 1d8a8ecf14e1 |
children | 8bf8b058944a |
line wrap: on
line diff
--- a/gen/asmstmt.cpp Sat Mar 07 19:38:00 2009 +0100 +++ b/gen/asmstmt.cpp Sun Mar 08 00:57:58 2009 +0100 @@ -415,6 +415,26 @@ asmblock->clobs.insert(clobstr); } + if (Logger::enabled()) { + typedef std::deque<LLValue*>::iterator It; + { + Logger::println("Output values:"); + LOG_SCOPE + size_t i = 0; + for (It I = output_values.begin(), E = output_values.end(); I != E; ++I) { + Logger::cout() << "Out " << i++ << " = " << **I << '\n'; + } + } + { + Logger::println("Input values:"); + LOG_SCOPE + size_t i = 0; + for (It I = input_values.begin(), E = input_values.end(); I != E; ++I) { + Logger::cout() << "In " << i++ << " = " << **I << '\n'; + } + } + } + // excessive commas are removed later... // push asm statement