From bc0af85dd1aec2c32d655a9a1def6d0c038440d6 Mon Sep 17 00:00:00 2001 From: Robert Baruch Date: Sun, 7 Jan 2024 17:49:47 -0800 Subject: [PATCH] Changes over to use a 64-bit API. --- dergwasm_mod/Dergwasm/EmscriptenEnv.cs | 12 +-- dergwasm_mod/Dergwasm/EmscriptenWasi.cs | 6 +- dergwasm_mod/Dergwasm/ResoniteEnv.cs | 79 ++++++++----------- firmware.wasm | Bin 1020382 -> 1019188 bytes usercmodule/resonite/README.md | 2 + usercmodule/resonite/micropython.mk | 1 + usercmodule/resonite/mp_resonite_slot_impl.c | 12 +-- usercmodule/resonite/resonite_slot_api.c | 16 ++-- usercmodule/resonite/resonite_slot_api.h | 16 ++-- 9 files changed, 57 insertions(+), 87 deletions(-) diff --git a/dergwasm_mod/Dergwasm/EmscriptenEnv.cs b/dergwasm_mod/Dergwasm/EmscriptenEnv.cs index d06baad..a01448d 100644 --- a/dergwasm_mod/Dergwasm/EmscriptenEnv.cs +++ b/dergwasm_mod/Dergwasm/EmscriptenEnv.cs @@ -703,16 +703,8 @@ int adjusted_ptrPtr // This was present in hello_world.c. It returns a long, but the actual return value // is just the low 32 bits. The upper 32 bits get stored in $global1 (although we don't // yet support exported globals). - public int dynCall_jiji(Frame frame, int index, int a, int b_lo, int b_hi, int d) => - CallExportedFunc( - "dynCall_jiji", - frame, - index, - a, - b_lo, - b_hi, - d - ); + public long dynCall_jiji(Frame frame, int index, int a, long b, int d) => + CallExportedFunc("dynCall_jiji", frame, index, a, b, d); // The various dyncall_* functions for setjmp/longjmp. // The first character is the return type, and the rest are the arg types. diff --git a/dergwasm_mod/Dergwasm/EmscriptenWasi.cs b/dergwasm_mod/Dergwasm/EmscriptenWasi.cs index 10bb83b..3624369 100644 --- a/dergwasm_mod/Dergwasm/EmscriptenWasi.cs +++ b/dergwasm_mod/Dergwasm/EmscriptenWasi.cs @@ -35,7 +35,7 @@ public void RegisterHostFuncs() "fd_write", FdWrite ); - machine.RegisterReturningHostFunc( + machine.RegisterReturningHostFunc( "wasi_snapshot_preview1", "fd_seek", FdSeek @@ -162,10 +162,10 @@ int FdWrite(Frame frame, int fd, int iov, int iovcnt, int pnum) // // Returns: // 0 on success, or -ERRNO on failure. - int FdSeek(Frame frame, int fd, int offset_lo, int offset_hi, int whence, int newOffsetPtr) + int FdSeek(Frame frame, int fd, long offset, int whence, int newOffsetPtr) { throw new Trap( - $"Unimplemented call to FdSeek({fd}, {offset_lo}, {offset_hi}, {whence}, 0x{newOffsetPtr:X8})" + $"Unimplemented call to FdSeek({fd}, {offset}, {whence}, 0x{newOffsetPtr:X8})" ); } diff --git a/dergwasm_mod/Dergwasm/ResoniteEnv.cs b/dergwasm_mod/Dergwasm/ResoniteEnv.cs index 0aecc5a..22dea60 100644 --- a/dergwasm_mod/Dergwasm/ResoniteEnv.cs +++ b/dergwasm_mod/Dergwasm/ResoniteEnv.cs @@ -28,7 +28,12 @@ public ResoniteEnv(Machine machine, World world, EmscriptenEnv emscriptenEnv) public Slot SlotFromRefID(uint slot_id_lo, uint slot_id_hi) { - RefID refID = new RefID(((ulong)slot_id_hi << 32) | slot_id_lo); + return SlotFromRefID(((ulong)slot_id_hi << 32) | slot_id_lo); + } + + public Slot SlotFromRefID(ulong slot_id) + { + RefID refID = new RefID(slot_id); return world.ReferenceController.GetObjectOrNull(refID) as Slot; } @@ -152,97 +157,75 @@ public void CallWasmFunction(Slot argsSlot) // This only needs to be called once, when the WASM Machine is initialized and loaded. public void RegisterHostFuncs() { - machine.RegisterVoidHostFunc("env", "slot__root_slot", slot__root_slot); - machine.RegisterVoidHostFunc( + machine.RegisterReturningHostFunc("env", "slot__root_slot", slot__root_slot); + machine.RegisterReturningHostFunc( "env", "slot__get_parent", slot__get_parent ); - machine.RegisterVoidHostFunc( + machine.RegisterReturningHostFunc( "env", "slot__get_active_user", slot__get_active_user ); - machine.RegisterVoidHostFunc( + machine.RegisterReturningHostFunc( "env", "slot__get_active_user_root", slot__get_active_user_root ); - machine.RegisterVoidHostFunc( + machine.RegisterReturningHostFunc( "env", "slot__get_object_root", slot__get_object_root ); - machine.RegisterReturningHostFunc( - "env", - "slot__get_name", - slot__get_name - ); + machine.RegisterReturningHostFunc("env", "slot__get_name", slot__get_name); + machine.RegisterVoidHostFunc("env", "slot__set_name", slot__set_name); } // // The host functions. They are always called from WASM, so they already have a frame. // - public void slot__root_slot(Frame frame, uint rootPtr) + public ulong slot__root_slot(Frame frame) { Slot slot = world.RootSlot; - machine.MemSet(rootPtr, (ulong)slot.ReferenceID); + return (ulong)slot.ReferenceID; } - public void slot__get_parent(Frame frame, uint slot_id_lo, uint slot_id_hi, uint parentPtr) + public ulong slot__get_parent(Frame frame, ulong slot_id) { - Slot slot = SlotFromRefID(slot_id_lo, slot_id_hi); - machine.MemSet(parentPtr, ((ulong?)slot?.Parent?.ReferenceID) ?? 0); + Slot slot = SlotFromRefID(slot_id); + return ((ulong?)slot?.Parent?.ReferenceID) ?? 0; } - public void slot__get_active_user( - Frame frame, - uint slot_id_lo, - uint slot_id_hi, - uint userPtr - ) + public ulong slot__get_active_user(Frame frame, ulong slot_id) { - Slot slot = SlotFromRefID(slot_id_lo, slot_id_hi); - machine.MemSet(userPtr, ((ulong?)slot?.ActiveUser?.ReferenceID) ?? 0); + Slot slot = SlotFromRefID(slot_id); + return ((ulong?)slot?.ActiveUser?.ReferenceID) ?? 0; } - public void slot__get_active_user_root( - Frame frame, - uint slot_id_lo, - uint slot_id_hi, - uint userRootPtr - ) + public ulong slot__get_active_user_root(Frame frame, ulong slot_id) { - Slot slot = SlotFromRefID(slot_id_lo, slot_id_hi); - machine.MemSet(userRootPtr, ((ulong?)slot?.ActiveUserRoot?.ReferenceID) ?? 0); + Slot slot = SlotFromRefID(slot_id); + return ((ulong?)slot?.ActiveUserRoot?.ReferenceID) ?? 0; } - public void slot__get_object_root( - Frame frame, - uint slot_id_lo, - uint slot_id_hi, - int only_explicit, - uint objectRootPtr - ) + public ulong slot__get_object_root(Frame frame, ulong slot_id, int only_explicit) { - Slot slot = SlotFromRefID(slot_id_lo, slot_id_hi); - machine.MemSet( - objectRootPtr, - ((ulong?)slot?.GetObjectRoot(only_explicit != 0)?.ReferenceID) ?? 0 - ); + Slot slot = SlotFromRefID(slot_id); + return ((ulong?)slot?.GetObjectRoot(only_explicit != 0)?.ReferenceID) ?? 0; } - public int slot__get_name(Frame frame, uint slot_id_lo, uint slot_id_hi) + public int slot__get_name(Frame frame, ulong slot_id) { - Slot slot = SlotFromRefID(slot_id_lo, slot_id_hi); + Slot slot = SlotFromRefID(slot_id); string name = slot?.Name ?? ""; return emscriptenEnv.AllocateUTF8StringInMem(frame, name); } - public void slot__set_name(Frame frame, uint slot_id_lo, uint slot_id_hi, int ptr) + public void slot__set_name(Frame frame, ulong slot_id, int ptr) { - Slot slot = SlotFromRefID(slot_id_lo, slot_id_hi); + Slot slot = SlotFromRefID(slot_id); if (slot == null) return; slot.Name = emscriptenEnv.GetUTF8StringFromMem(ptr); diff --git a/firmware.wasm b/firmware.wasm index 1daed81246d9f3010d1e14d169576fbaee2c1dec..f0fa0d375e58d958f9aa3cf8b2887dbcd52efb31 100644 GIT binary patch delta 50894 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 diff --git a/usercmodule/resonite/README.md b/usercmodule/resonite/README.md index 52dcc86..ca414ea 100644 --- a/usercmodule/resonite/README.md +++ b/usercmodule/resonite/README.md @@ -10,3 +10,5 @@ make V=1 USER_C_MODULES=../../user_modules See [micropython-usermod](https://micropython-usermod.readthedocs.io/) (slightly out of date) and [MicroPython external C modules](https://docs.micropython.org/en/latest/develop/cmodules.html). + +NOTE: The API uses 64-bit values. For Emscripten, this means you must compile with `-s WASM_BIGINT`. diff --git a/usercmodule/resonite/micropython.mk b/usercmodule/resonite/micropython.mk index 5213b2b..21d95d6 100644 --- a/usercmodule/resonite/micropython.mk +++ b/usercmodule/resonite/micropython.mk @@ -8,3 +8,4 @@ SRC_USERMOD += $(USERMODULES_DIR)/mp_resonite_slot.c CFLAGS_USERMOD += -I$(USERMODULES_DIR) JSFLAGS += --js-library $(USERMODULES_DIR)/resonite_api.js +JSFLAGS += -s WASM_BIGINT diff --git a/usercmodule/resonite/mp_resonite_slot_impl.c b/usercmodule/resonite/mp_resonite_slot_impl.c index 5f0c2fa..72e7279 100644 --- a/usercmodule/resonite/mp_resonite_slot_impl.c +++ b/usercmodule/resonite/mp_resonite_slot_impl.c @@ -27,16 +27,12 @@ mp_obj_t resonite_Slot_make_new(const mp_obj_type_t *type, size_t n_args, size_t } mp_obj_t resonite_Slot_root_slot(mp_obj_t cls_in) { - resonite_slot_refid_t id; - slot__root_slot(&id); - return resonite_create_slot(id); + return resonite_create_slot(slot__root_slot()); } mp_obj_t resonite_Slot_get_parent(mp_obj_t self_in) { resonite_Slot_obj_t *self = MP_OBJ_TO_PTR(self_in); - resonite_slot_refid_t id; - slot__get_parent(self->reference_id, &id); - return resonite_create_slot(id); + return resonite_create_slot(slot__get_parent(self->reference_id)); } mp_obj_t resonite_Slot_get_object_root(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) { @@ -49,9 +45,7 @@ mp_obj_t resonite_Slot_get_object_root(size_t n_args, const mp_obj_t *pos_args, mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args); int only_explicit = args[0].u_bool ? 1 : 0; - resonite_slot_refid_t id; - slot__get_object_root(self->reference_id, only_explicit, &id); - return resonite_create_slot(id); + return resonite_create_slot(slot__get_object_root(self->reference_id, only_explicit)); } mp_obj_t resonite_Slot_get_name(mp_obj_t self_in) { diff --git a/usercmodule/resonite/resonite_slot_api.c b/usercmodule/resonite/resonite_slot_api.c index c4a3ea3..127bcab 100644 --- a/usercmodule/resonite/resonite_slot_api.c +++ b/usercmodule/resonite/resonite_slot_api.c @@ -7,18 +7,18 @@ #include #include -EMSCRIPTEN_KEEPALIVE void _slot__root_slot(resonite_slot_refid_t* slot_id) { - slot__root_slot(slot_id); +EMSCRIPTEN_KEEPALIVE resonite_slot_refid_t _slot__root_slot() { + return slot__root_slot(); } -EMSCRIPTEN_KEEPALIVE void _slot__get_object_root( - resonite_slot_refid_t slot_id, int only_explicit, resonite_slot_refid_t* object_root_id) { - slot__get_object_root(slot_id, only_explicit, object_root_id); +EMSCRIPTEN_KEEPALIVE resonite_slot_refid_t _slot__get_object_root( + resonite_slot_refid_t slot_id, int only_explicit) { + return slot__get_object_root(slot_id, only_explicit); } -EMSCRIPTEN_KEEPALIVE void _slot__get_parent( - resonite_slot_refid_t slot_id, resonite_slot_refid_t* parent_slot_id) { - slot__get_parent(slot_id, parent_slot_id); +EMSCRIPTEN_KEEPALIVE resonite_slot_refid_t _slot__get_parent( + resonite_slot_refid_t slot_id) { + return slot__get_parent(slot_id); } EMSCRIPTEN_KEEPALIVE char* _slot__get_name(resonite_slot_refid_t slot_id) { diff --git a/usercmodule/resonite/resonite_slot_api.h b/usercmodule/resonite/resonite_slot_api.h index e1fdf95..a731bf8 100644 --- a/usercmodule/resonite/resonite_slot_api.h +++ b/usercmodule/resonite/resonite_slot_api.h @@ -6,35 +6,33 @@ #include "resonite_api_types.h" -extern void slot__root_slot(resonite_slot_refid_t* slot_id); +extern resonite_slot_refid_t slot__root_slot(); // Returns the active user for the given slot. // // ProtoFlux equivalent: Users/GetActiveUser, Slots/GetActiveUser // FrooxEngine equivalent: Slot.ActiveUser -extern void slot__get_active_user(resonite_slot_refid_t slot_id, resonite_user_refid_t* user_id); +extern resonite_user_refid_t slot__get_active_user(resonite_slot_refid_t slot_id); // Returns the active user root for the given slot. // // ProtoFlux equivalent: Users/GetActiveUserRoot, Slots/GetActiveUserRoot // FrooxEngine equivalent: Slot.ActiveUserRoot -extern void slot__get_active_user_root( - resonite_slot_refid_t slot_id, - resonite_user_root_refid_t* user_root_id); +extern resonite_user_root_refid_t slot__get_active_user_root( + resonite_slot_refid_t slot_id); // Returns the object root for the given slot. // // ProtoFlux equivalent: Slots/GetObjectRoot // FrooxEngine equivalent: Slot.GetObjectRoot -extern void slot__get_object_root( - resonite_slot_refid_t slot_id, int only_explicit, resonite_slot_refid_t* object_root_id); +extern resonite_slot_refid_t slot__get_object_root( + resonite_slot_refid_t slot_id, int only_explicit); // Returns the parent slot for the given slot. // // ProtoFlux equivalent: Slots/GetParentSlot // FrooxEngine equivalent: Slot.Parent -extern void slot__get_parent( - resonite_slot_refid_t slot_id, resonite_slot_refid_t* parent_slot_id); +extern resonite_slot_refid_t slot__get_parent(resonite_slot_refid_t slot_id); // Returns the name for the given slot. The returned name must be freed when // done with it. Although the return type is not const, changes to the returned