mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-27 22:09:09 +00:00
make benchmark host.o more 32-bit compatible
This commit is contained in:
parent
3fbdc743ec
commit
0ba91f885c
1 changed files with 43 additions and 9 deletions
|
@ -34,10 +34,17 @@ extern fn malloc(size: usize) callconv(.C) ?*align(@alignOf(Align)) c_void;
|
||||||
extern fn realloc(c_ptr: [*]align(@alignOf(Align)) u8, size: usize) callconv(.C) ?*c_void;
|
extern fn realloc(c_ptr: [*]align(@alignOf(Align)) u8, size: usize) callconv(.C) ?*c_void;
|
||||||
extern fn free(c_ptr: [*]align(@alignOf(Align)) u8) callconv(.C) void;
|
extern fn free(c_ptr: [*]align(@alignOf(Align)) u8) callconv(.C) void;
|
||||||
|
|
||||||
export fn roc_alloc(size: usize, alignment: u32) callconv(.C) ?*c_void {
|
const DEBUG: bool = false;
|
||||||
_ = alignment;
|
|
||||||
|
|
||||||
|
export fn roc_alloc(size: usize, alignment: u32) callconv(.C) ?*c_void {
|
||||||
|
if (DEBUG) {
|
||||||
|
var ptr = malloc(size);
|
||||||
|
const stdout = std.io.getStdOut().writer();
|
||||||
|
stdout.print("alloc: {d} (alignment {d})\n", .{ ptr, alignment }) catch unreachable;
|
||||||
|
return ptr;
|
||||||
|
} else {
|
||||||
return malloc(size);
|
return malloc(size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export fn roc_realloc(c_ptr: *c_void, new_size: usize, old_size: usize, alignment: u32) callconv(.C) ?*c_void {
|
export fn roc_realloc(c_ptr: *c_void, new_size: usize, old_size: usize, alignment: u32) callconv(.C) ?*c_void {
|
||||||
|
@ -48,7 +55,10 @@ export fn roc_realloc(c_ptr: *c_void, new_size: usize, old_size: usize, alignmen
|
||||||
}
|
}
|
||||||
|
|
||||||
export fn roc_dealloc(c_ptr: *c_void, alignment: u32) callconv(.C) void {
|
export fn roc_dealloc(c_ptr: *c_void, alignment: u32) callconv(.C) void {
|
||||||
_ = alignment;
|
if (DEBUG) {
|
||||||
|
const stdout = std.io.getStdOut().writer();
|
||||||
|
stdout.print("dealloc: {d} (alignment {d})\n", .{ c_ptr, alignment }) catch unreachable;
|
||||||
|
}
|
||||||
|
|
||||||
free(@alignCast(@alignOf(Align), @ptrCast([*]u8, c_ptr)));
|
free(@alignCast(@alignOf(Align), @ptrCast([*]u8, c_ptr)));
|
||||||
}
|
}
|
||||||
|
@ -155,26 +165,50 @@ export fn roc_fx_putLine(rocPath: str.RocStr) callconv(.C) void {
|
||||||
|
|
||||||
const GetInt = extern struct {
|
const GetInt = extern struct {
|
||||||
value: i64,
|
value: i64,
|
||||||
error_code: u8,
|
error_code: bool,
|
||||||
is_error: bool,
|
is_error: bool,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub export fn roc_fx_getInt() GetInt {
|
comptime {
|
||||||
|
if (@sizeOf(usize) == 8) {
|
||||||
|
@export(roc_fx_getInt_64bit, .{ .name = "roc_fx_getInt" });
|
||||||
|
} else {
|
||||||
|
@export(roc_fx_getInt_32bit, .{ .name = "roc_fx_getInt" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn roc_fx_getInt_64bit() callconv(.C) GetInt {
|
||||||
if (roc_fx_getInt_help()) |value| {
|
if (roc_fx_getInt_help()) |value| {
|
||||||
const get_int = GetInt{ .is_error = false, .value = value, .error_code = 0 };
|
const get_int = GetInt{ .is_error = false, .value = value, .error_code = false };
|
||||||
return get_int;
|
return get_int;
|
||||||
} else |err| switch (err) {
|
} else |err| switch (err) {
|
||||||
error.InvalidCharacter => {
|
error.InvalidCharacter => {
|
||||||
return GetInt{ .is_error = true, .value = 0, .error_code = 0 };
|
return GetInt{ .is_error = true, .value = 0, .error_code = false };
|
||||||
},
|
},
|
||||||
else => {
|
else => {
|
||||||
return GetInt{ .is_error = true, .value = 0, .error_code = 1 };
|
return GetInt{ .is_error = true, .value = 0, .error_code = true };
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn roc_fx_getInt_32bit(output: *GetInt) callconv(.C) void {
|
||||||
|
if (roc_fx_getInt_help()) |value| {
|
||||||
|
const get_int = GetInt{ .is_error = false, .value = value, .error_code = false };
|
||||||
|
output.* = get_int;
|
||||||
|
} else |err| switch (err) {
|
||||||
|
error.InvalidCharacter => {
|
||||||
|
output.* = GetInt{ .is_error = true, .value = 0, .error_code = false };
|
||||||
|
},
|
||||||
|
else => {
|
||||||
|
output.* = GetInt{ .is_error = true, .value = 0, .error_code = true };
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
fn roc_fx_getInt_help() !i64 {
|
fn roc_fx_getInt_help() !i64 {
|
||||||
const stdin = std.io.getStdIn().reader();
|
const stdin = std.io.getStdIn().reader();
|
||||||
var buf: [40]u8 = undefined;
|
var buf: [40]u8 = undefined;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue