From: badumbatish <tanghocle...@gmail.com>

gcc/rust/ChangeLog:

        * backend/rust-compile-asm.cc (CompileAsm::asm_construct_outputs):
        Lower the HIR to tree with CompileExpr
        * backend/rust-compile-asm.h: Remove static from method
---
 gcc/rust/backend/rust-compile-asm.cc | 15 +++++++++++----
 gcc/rust/backend/rust-compile-asm.h  | 18 +++++++++---------
 2 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/gcc/rust/backend/rust-compile-asm.cc 
b/gcc/rust/backend/rust-compile-asm.cc
index 30a8cacf203..32ad84e60e7 100644
--- a/gcc/rust/backend/rust-compile-asm.cc
+++ b/gcc/rust/backend/rust-compile-asm.cc
@@ -1,5 +1,6 @@
 #include "rust-compile-asm.h"
 #include "rust-system.h"
+#include "rust-compile-expr.h"
 namespace Rust {
 namespace Compile {
 
@@ -82,14 +83,20 @@ tree
 CompileAsm::asm_construct_outputs (HIR::InlineAsm &expr)
 {
   // TODO: Do i need to do this?
-  int count = 0;
 
+  tree head = NULL_TREE;
   for (auto &output : expr.get_operands ())
     {
-      if (output.register_type == AST::InlineAsmOperand::RegisterType::Out)
-       count++;
+      if (output.get_register_type ()
+         == AST::InlineAsmOperand::RegisterType::Out)
+       {
+         auto out = output.get_out ();
+         tree out_tree = CompileExpr::Compile (out.expr.get (), this->ctx);
+         Backend::debug (out_tree);
+         /*head = chainon (head, out_tree);*/
+       }
     }
-  return NULL_TREE;
+  return head;
 }
 
 tree
diff --git a/gcc/rust/backend/rust-compile-asm.h 
b/gcc/rust/backend/rust-compile-asm.h
index 05bb99ab40d..9779a4ad7fb 100644
--- a/gcc/rust/backend/rust-compile-asm.h
+++ b/gcc/rust/backend/rust-compile-asm.h
@@ -46,15 +46,15 @@ public:
   // build_asm_expr (location_t loc, tree string, tree outputs, tree inputs,
   //           tree clobbers, tree labels, bool simple, bool is_inline)
   static const int ASM_TREE_ARRAY_LENGTH = 5;
-  static tree asm_build_expr (HIR::InlineAsm &);
-  static tree asm_build_stmt (location_t,
-                             const std::array<tree, ASM_TREE_ARRAY_LENGTH> &);
-
-  static tree asm_construct_string_tree (HIR::InlineAsm &);
-  static tree asm_construct_outputs (HIR::InlineAsm &);
-  static tree asm_construct_inputs (HIR::InlineAsm &);
-  static tree asm_construct_clobber_tree (HIR::InlineAsm &);
-  static tree asm_construct_label_tree (HIR::InlineAsm &);
+  tree asm_build_expr (HIR::InlineAsm &);
+  tree asm_build_stmt (location_t,
+                      const std::array<tree, ASM_TREE_ARRAY_LENGTH> &);
+
+  tree asm_construct_string_tree (HIR::InlineAsm &);
+  tree asm_construct_outputs (HIR::InlineAsm &);
+  tree asm_construct_inputs (HIR::InlineAsm &);
+  tree asm_construct_clobber_tree (HIR::InlineAsm &);
+  tree asm_construct_label_tree (HIR::InlineAsm &);
 
   CompileAsm (Context *ctx);
 
-- 
2.45.2

Reply via email to