Ver Fonte

updating dynasm

Nicolas Winkler há 4 anos atrás
pai
commit
49728cb980
5 ficheiros alterados com 49 adições e 35 exclusões
  1. 37 22
      Cargo.lock
  2. 2 2
      Cargo.toml
  3. 7 8
      src/compile.rs
  4. 2 2
      src/main.rs
  5. 1 1
      src/trans/zombie_ir.rs

+ 37 - 22
Cargo.lock

@@ -49,14 +49,14 @@ dependencies = [
 
 [[package]]
 name = "dynasm"
-version = "0.5.2"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42a814e1edeb85dd2a3c6fc0d6bf76d02ca5695d438c70ecee3d90774f3259c5"
+checksum = "3d7d1242462849390bb2ad38aeed769499f1afc7383affa2ab0c1baa894c0200"
 dependencies = [
  "bitflags",
  "byteorder",
  "lazy_static",
- "owning_ref",
+ "proc-macro-error",
  "proc-macro2",
  "quote",
  "syn",
@@ -64,12 +64,13 @@ dependencies = [
 
 [[package]]
 name = "dynasmrt"
-version = "0.5.2"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a393aaeb4441a48bcf47b5b6155971f82cc1eb77e22855403ccc0415ac8328d"
+checksum = "c1dd4d1d5ca12258cef339a57a7643e8b233a42dea9bb849630ddd9dd7726aa9"
 dependencies = [
  "byteorder",
- "memmap",
+ "dynasm",
+ "memmap2",
 ]
 
 [[package]]
@@ -94,29 +95,43 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
 
 [[package]]
-name = "memmap"
-version = "0.7.0"
+name = "memmap2"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b"
+checksum = "04e3e85b970d650e2ae6d70592474087051c11c54da7f7b4949725c5735fbcc6"
 dependencies = [
  "libc",
- "winapi",
 ]
 
 [[package]]
-name = "owning_ref"
-version = "0.4.0"
+name = "proc-macro-error"
+version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
 dependencies = [
- "stable_deref_trait",
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
 ]
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.8"
+version = "1.0.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548"
+checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
 dependencies = [
  "unicode-xid",
 ]
@@ -131,12 +146,6 @@ dependencies = [
 ]
 
 [[package]]
-name = "stable_deref_trait"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8"
-
-[[package]]
 name = "strsim"
 version = "0.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -187,6 +196,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
 
 [[package]]
+name = "version_check"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed"
+
+[[package]]
 name = "winapi"
 version = "0.3.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"

+ 2 - 2
Cargo.toml

@@ -9,8 +9,8 @@ edition = "2018"
 #[dependencies.x86asm]
 #path = "rust-x86asm"
 [dependencies]
-dynasm = "0.5.2"
-dynasmrt = "0.5.2"
+dynasm = "1.0.1"
+dynasmrt = "1.0.1"
 winapi = "*"
 typed-arena = "1.4.1"
 clap = "2.33.3"

+ 7 - 8
src/compile.rs

@@ -4,10 +4,6 @@ use std::io::{Write, Read};
 use std::mem;
 use super::ir::{ConstVisitor, Instruction};
 
-#[cfg(target_os = "windows")]
-use winapi::um::memoryapi::VirtualAlloc;
-#[cfg(target_os = "windows")]
-use winapi::um::winnt::{MEM_COMMIT, PAGE_EXECUTE_READWRITE};
 use dynasmrt::{DynasmApi, DynasmLabelApi};
 
 pub enum Storation {
@@ -27,7 +23,7 @@ pub fn compile(instrs: &Vec<ir::Instruction>) -> Vec<u8> {
     let entry = cg.buffer.offset();
 
     cg.visit_instructions(instrs);
-    cg.buffer.commit();
+    let _committed = cg.buffer.commit();
     cg.finalize();
     let buf = cg.buffer.finalize().unwrap();
 
@@ -42,7 +38,10 @@ pub fn compile(instrs: &Vec<ir::Instruction>) -> Vec<u8> {
     //let mut data: Vec<u8> = Vec::with_capacity(100000);
     unsafe {
         //function(&mut *data.into_boxed_slice().as_mut_ptr() as *mut u8);
-        function(std::alloc::alloc_zeroed(std::alloc::Layout::new::<[u8; 100000]>()));
+        let layout = std::alloc::Layout::new::<[u8; 0x10000]>();
+        let mem = std::alloc::alloc_zeroed(layout);
+        function(mem.offset(0x08000));
+        std::alloc::dealloc(mem, layout);
     }
 
     //cg.into_vec()
@@ -73,7 +72,7 @@ impl CodeGenerator {
         );
     }
 
-    #[cfg(target_os = "windows")]
+    /*#[cfg(target_os = "windows")]
     pub fn get_callable(self) -> *const u8 {
         let data = self.buffer.finalize().unwrap().to_vec();
         println!("asm buffer of size {}", data.len());
@@ -86,7 +85,7 @@ impl CodeGenerator {
 
     #[cfg(not(target_os = "windows"))]
     pub fn get_callable(self) {
-    }
+    }*/
 }
 
 impl ir::ConstVisitor for CodeGenerator {

+ 2 - 2
src/main.rs

@@ -63,8 +63,8 @@ fn main() -> io::Result<()> {
         
         match matches.value_of("transpile") {
             Some(lang) => {
-                let arena = Arena::new();
-                let dfg = optimize::create_dfg(&mut insts, &arena);
+                //let arena = Arena::new();
+                //let dfg = optimize::create_dfg(&mut insts, &arena);
                 let code = if lang == "c" {
                     //trans::c::transpile_dfg(&dfg)
                     trans::c::transpile(&insts)

+ 1 - 1
src/trans/zombie_ir.rs

@@ -18,7 +18,7 @@ fn generate(formatter: &mut Formatter, instrs: &Vec<Instruction>) {
                 formatter.add_line(&format!("@{} += {}", offset, value));
             },
             Instruction::Set{ offset, value } => {
-                formatter.add_line(&format!("@{} = {})", offset, value));
+                formatter.add_line(&format!("@{} = {}", offset, value));
             },
             Instruction::LinearLoop{ offset, factors } => {
                 for (off, factor) in factors {