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