Skip to content

Commit

Permalink
Merge pull request #93 from myuon/replace-wasi-remaining
Browse files Browse the repository at this point in the history
  • Loading branch information
myuon authored Sep 9, 2023
2 parents 6c8d81a + c0e8ede commit ce8b5dc
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 157 deletions.
150 changes: 0 additions & 150 deletions quartz/generator.qz
Original file line number Diff line number Diff line change
Expand Up @@ -222,30 +222,6 @@ module Generator {
self.write(`import "env" "abort" (func $abort (result i64))`);
self.end();

self.start();
self.write(`import "wasi_snapshot_preview1" "fd_write" (func $fd_write (param i32 i32 i32 i32) (result i32))`);
self.end();

self.start();
self.write(
`import "wasi_snapshot_preview1" "environ_sizes_get" (func $environ_sizes_get (param i32 i32) (result i32))`,
);
self.end();

self.start();
self.write(`import "wasi_snapshot_preview1" "environ_get" (func $environ_get (param i32 i32) (result i32))`);
self.end();

self.start();
self.write(
`import "wasi_snapshot_preview1" "args_sizes_get" (func $args_sizes_get (param i32 i32) (result i32))`,
);
self.end();

self.start();
self.write(`import "wasi_snapshot_preview1" "args_get" (func $args_get (param i32 i32) (result i32))`);
self.end();

if m.t_module != nil {
for i in 0..m.t_module!.elements.length {
let element = m.t_module!.elements.at(i);
Expand All @@ -256,36 +232,6 @@ module Generator {
panic("expected module");
}

self.start();
self.write(
`func $_fd_write (param $fd i64) (param $ciovec i64) (param $ptr_size i64) (result i64)
local.get $fd
i64.const 32
i64.shr_u
i32.wrap_i64

local.get $ciovec
i64.const 32
i64.shr_u
i32.wrap_i64

i32.const 1

local.get $ptr_size
i64.const 32
i64.shr_u
i32.wrap_i64

call $fd_write
i64.extend_i32_u
i64.const 32
i64.shl

return
`,
);
self.end();

self.start();
self.write(
`func $set_ciovec (param $ptr i64) (param $x i64) (param $y i64) (result i64)
Expand Down Expand Up @@ -343,102 +289,6 @@ module Generator {
i64.const 32
i64.shl

return
`,
);
self.end();

self.start();
self.write(
`func $_environ_sizes_get (param $ptr_count i64) (param $ptr_buf_size i64) (result i64)
local.get $ptr_count
i64.const 32
i64.shr_u
i32.wrap_i64

local.get $ptr_buf_size
i64.const 32
i64.shr_u
i32.wrap_i64

call $environ_sizes_get

i64.extend_i32_s
i64.const 32
i64.shl

return
`,
);
self.end();

self.start();
self.write(
`func $_environ_get (param $environ i64) (param $environ_buf i64) (result i64)
local.get $environ
i64.const 32
i64.shr_u
i32.wrap_i64

local.get $environ_buf
i64.const 32
i64.shr_u
i32.wrap_i64

call $environ_get

i64.extend_i32_s
i64.const 32
i64.shl

return
`,
);
self.end();

self.start();
self.write(
`func $_args_sizes_get (param $ptr_count i64) (param $ptr_buf_size i64) (result i64)
local.get $ptr_count
i64.const 32
i64.shr_u
i32.wrap_i64

local.get $ptr_buf_size
i64.const 32
i64.shr_u
i32.wrap_i64

call $args_sizes_get

i64.extend_i32_s
i64.const 32
i64.shl

return
`,
);
self.end();

self.start();
self.write(
`func $_args_get (param $argv i64) (param $argv_buf i64) (result i64)
local.get $argv
i64.const 32
i64.shr_u
i32.wrap_i64

local.get $argv_buf
i64.const 32
i64.shr_u
i32.wrap_i64

call $args_get

i64.extend_i32_s
i64.const 32
i64.shl

return
`,
);
Expand Down
48 changes: 48 additions & 0 deletions quartz/std.qz
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,26 @@ declare fun fd_close(fd: i32): i32;
@[build_if(version == "2.7.0"), declare_params(dirfd as wasm_i32, dirflags as wasm_i32, path as wasm_i32, path_len as wasm_i32, oflags as wasm_i32, fs_rights_base as wasm_i64, fs_rights_inheriting as wasm_i64, fs_flags as wasm_i32, fd as wasm_i32, result as wasm_i32), declare_namespace("wasi_snapshot_preview1")]
declare fun path_open(dirfd: i32, dirflags: i32, path: ptr[byte], path_len: i32, oflags: i32, fs_rights_base: i32, fs_rights_inheriting: i32, fs_flags: i32, fd: ptr[byte]): i32;

@[build_if(version == "2.7.0"), declare_params(fd as wasm_i32, iovs as wasm_i32, iovs_len as wasm_i32, size as wasm_i32, result as wasm_i32), declare_namespace("wasi_snapshot_preview1")]
declare fun fd_write(fd: i32, iovs: ptr[ptr[byte]], iovs_len: ptr[i32], size: ptr[byte]): i32;

@[build_if(version == "2.7.0"), declare_params(ptr_count as wasm_i32, ptr_buf_size as wasm_i32, result as wasm_i32), declare_namespace("wasi_snapshot_preview1")]
declare fun environ_sizes_get(ptr_count: ptr[i32], ptr_buf_size: ptr[i32]): i32;

@[build_if(version == "2.7.0"), declare_params(environ as wasm_i32, environ_buf as wasm_i32, result as wasm_i32), declare_namespace("wasi_snapshot_preview1")]
declare fun environ_get(environ: ptr[ptr[byte]], environ_buf: ptr[byte]): i32;

@[build_if(version == "2.7.0"), declare_params(ptr_count as wasm_i32, ptr_buf_size as wasm_i32, result as wasm_i32), declare_namespace("wasi_snapshot_preview1")]
declare fun args_sizes_get(ptr_count: ptr[i32], ptr_buf_size: ptr[i32]): i32;

@[build_if(version == "2.7.0"), declare_params(argv as wasm_i32, argv_buf as wasm_i32, result as wasm_i32), declare_namespace("wasi_snapshot_preview1")]
declare fun args_get(argv: ptr[ptr[byte]], argv_buf: ptr[byte]): i32;

fun print_string(s: string) {
return write_string(fd_stdout, s);
}

@[build_if(version == "2.6.0")]
fun write_string(fd: i32, s: string) {
let l = s.length;
let d = s.data;
Expand All @@ -32,6 +48,19 @@ fun write_string(fd: i32, s: string) {
_fd_write(fd, ciovec, ptr_size);
}

@[build_if(version == "2.7.0")]
fun write_string(fd: i32, s: string) {
let l = s.length;
let d = s.data;
let n = 0;

let ciovec = make[ptr[byte]](8); // [address (4byte), length (4byte)]
set_ciovec(ciovec, d, l);

let ptr_size = make[ptr[i32]](1);
_fd_write(fd, ciovec, 1, ptr_size);
}

fun print_vec_string(v: vec[string]) {
print_string("vec(");
print_string(v.length.to_string());
Expand Down Expand Up @@ -1557,6 +1586,7 @@ fun file_read(path: string): string {
return v;
}

@[build_if(version == "2.6.0")]
fun file_write(path: string, content: string) {
let fd_n = file_open(path, 9, 1 << 6);

Expand All @@ -1572,6 +1602,22 @@ fun file_write(path: string, content: string) {
file_close(fd_n);
}

@[build_if(version == "2.7.0")]
fun file_write(path: string, content: string) {
let fd_n = file_open(path, 9, 1 << 6);

let ciovec = make[ptr[byte]](8);
set_ciovec(ciovec, content.data, content.length);

let ptr_size = make[ptr[i32]](1);
let err = _fd_write(fd_n, ciovec, 1, ptr_size);
if err != 0 {
panic("[file_write] fd_write {}", err.to_string());
}

file_close(fd_n);
}

@[no_allocation]
fun perform_gc() {
// mark
Expand Down Expand Up @@ -1631,6 +1677,8 @@ fun mark(value: any) {
}
if !is_typerep_pointer(header.get_type_rep() as ptr[byte]) {
debug(error_invalid_type);
// Removing this line causes a compile error for some reason
debug(1);
debug(header.get_type_rep());
abort();
}
Expand Down
18 changes: 11 additions & 7 deletions quartz/typecheck.qz
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,9 @@ module Typechecker {
t_any: true,
},
},
Type {
t_i32: true,
},
Type {
t_ptr: Type {
t_i32: true,
Expand Down Expand Up @@ -773,13 +776,14 @@ module Typechecker {
} else if d.t_skip != nil {
continue;
} else if d.t_declare_func != nil {
self.globals.insert(
self.path_to(d.t_declare_func!.name.data),
LType {
data: d.t_declare_func!.to_type(),
location: d.t_declare_func!.name.location,
},
);
// in 2.7.0+
// self.globals.insert(
// "_{}".format(d.t_declare_func!.name.data),
// LType {
// data: d.t_declare_func!.to_type(),
// location: d.t_declare_func!.name.location,
// },
// );

continue;
} else {
Expand Down

0 comments on commit ce8b5dc

Please sign in to comment.