diff --git a/src/CodeGen/calling_convention.rs b/src/CodeGen/calling_convention.rs index 66b5681b..00027b3c 100644 --- a/src/CodeGen/calling_convention.rs +++ b/src/CodeGen/calling_convention.rs @@ -45,7 +45,7 @@ impl MachineCallingConvention { CallConv::SystemV => { match arch { Arch::X86_64 => vec![ - Reg::x64(x64Reg::Rsi), Reg::x64(x64Reg::Rdi), + Reg::x64(x64Reg::Rdi), Reg::x64(x64Reg::Rsi), Reg::x64(x64Reg::Rcx), Reg::x64(x64Reg::Rdx), Reg::x64(x64Reg::R8), Reg::x64(x64Reg::R9) ], diff --git a/src/CodeGen/compilation/call.rs b/src/CodeGen/compilation/call.rs index 9debc112..6e72cfa4 100644 --- a/src/CodeGen/compilation/call.rs +++ b/src/CodeGen/compilation/call.rs @@ -14,7 +14,6 @@ impl CompilationHelper { for arg in &node.inner2 { let mut instr = MachineInstr::new(MachineMnemonic::Move); - let arg_reg = args.get(reg_args); diff --git a/src/CodeGen/compilation/ret.rs b/src/CodeGen/compilation/ret.rs index e57a58ca..98cbe34f 100644 --- a/src/CodeGen/compilation/ret.rs +++ b/src/CodeGen/compilation/ret.rs @@ -6,9 +6,11 @@ impl CompilationHelper { #[allow(missing_docs)] pub fn compile_ret_ty(&mut self, node: &Return, mc_sink: &mut Vec, _: &Block) { let mut instr = MachineInstr::new(MachineMnemonic::Move); - - instr.add_operand(MachineOperand::Reg(self.call.return_reg(self.arch, node.inner1.into())) ); + + instr.set_out(MachineOperand::Reg(self.call.return_reg(self.arch, node.inner1.into())) ); instr.add_operand(MachineOperand::Imm(node.inner1.val() as i64)); + + mc_sink.push( instr ); mc_sink.push( MachineInstr::new(MachineMnemonic::Return) ); } diff --git a/tools/ytest/main.rs b/tools/ytest/main.rs index af3d4689..d19d81b8 100644 --- a/tools/ytest/main.rs +++ b/tools/ytest/main.rs @@ -1,3 +1,4 @@ +use core::str; use std::{fs::File, io::{Read, Write}}; use std::process::{exit, Command}; @@ -68,6 +69,8 @@ fn main() { }, } + let mut found = String::new(); + for cmd in parsed.cmd.split("&&") { let args = cmd.replace("%s", path_str); let args = unescaper::unescape(&args).unwrap(); @@ -105,13 +108,17 @@ fn main() { cmd.arg( arg ); } - //let out = cmd.output().expect("failed to execute the process"); - //println!("{}", String::from_utf8(out.stdout).unwrap()); + let out = cmd.output().expect("failed to execute the process"); + found.push_str(str::from_utf8(&out.stdout).unwrap()); match cmd.status() { Ok(status) => { if !status.success() { - println!("{}: the programm didn't exit sucessfull", "Error".red().bold()); + if let Some(code) = status.code() { + println!("{}: the programm didn't exit sucessfull with code {}", "Error".red().bold(), code); + } else { + println!("{}: the programm didn't exit sucessfull", "Error".red().bold()); + } exit(-1) } },