From: fennecdjay Date: Wed, 13 Mar 2019 11:28:13 +0000 (+0100) Subject: :art: Shreduler now uses bbq X-Git-Tag: nightly~2739 X-Git-Url: http://10.11.0.4:5575/?a=commitdiff_plain;h=d8fc9f169bc27b2523b1c1826387b7a4adc06669;p=gwion.git :art: Shreduler now uses bbq --- diff --git a/include/shreduler_private.h b/include/shreduler_private.h index d6d4ad1f..d555f9d8 100644 --- a/include/shreduler_private.h +++ b/include/shreduler_private.h @@ -1,7 +1,7 @@ #ifndef __SHREDULER #define __SHREDULER struct Shreduler_ { - VM* vm; + struct BBQ_ *bbq; struct ShredTick_ *list; struct ShredTick_ *curr; struct Vector_ shreds; diff --git a/src/vm/shreduler.c b/src/vm/shreduler.c index 025d7a56..0bf67b6a 100644 --- a/src/vm/shreduler.c +++ b/src/vm/shreduler.c @@ -4,22 +4,23 @@ #include "oo.h" #include "vm.h" #include "object.h" -#include "shreduler_private.h" #include "driver.h" +#include "shreduler_private.h" +#include "instr.h" // unwind ANN void shreduler_set_loop(const Shreduler s, const m_bool loop) { s->loop = loop < 0 ? 0 : 1; } ANN VM_Shred shreduler_get(const Shreduler s) { - VM* vm = s->vm; + Driver *bbq = s->bbq; struct ShredTick_ *tk = s->list; if(!tk) { if(!vector_size(&s->shreds) && !s->loop) - vm->bbq->is_running = 0; + bbq->is_running = 0; return NULL; } - const m_float time = (m_float)vm->bbq->pos + (m_float).5; + const m_float time = (m_float)bbq->pos + (m_float).5; if(tk->wake_time <= time) { if((s->list = tk->next)) s->list->prev = NULL; @@ -37,7 +38,7 @@ ANN static void shreduler_parent(const VM_Shred out, const Vector v) { out->tick->parent->child.ptr = NULL; } } -#include "instr.h" + ANN static void unwind(const VM_Shred shred) { VM_Code code = shred->code; while(1) { @@ -85,7 +86,7 @@ ANN void shreduler_remove(const Shreduler s, const VM_Shred out, const m_bool er } ANN void shredule(const Shreduler s, const VM_Shred shred, const m_float wake_time) { - const m_float time = wake_time + (m_float)s->vm->bbq->pos; + const m_float time = wake_time + (m_float)s->bbq->pos; struct ShredTick_ *tk = shred->tick; tk->wake_time = time; if(s->list) { diff --git a/src/vm/vm.c b/src/vm/vm.c index 3dc1c685..6de108cb 100644 --- a/src/vm/vm.c +++ b/src/vm/vm.c @@ -49,12 +49,12 @@ uint32_t gw_rand(uint32_t s[2]) { } VM* new_vm(void) { - VM* vm = (VM*)xcalloc(1, sizeof(VM)); - vm->shreduler = (Shreduler)xcalloc(1, sizeof(struct Shreduler_)); - vm->shreduler->vm = vm; - vector_init(&vm->shreduler->shreds); + VM* vm = (VM*)mp_alloc(VM); vector_init(&vm->ugen); vm->bbq = new_driver(); + vm->shreduler = (Shreduler)mp_alloc(Shreduler); + vector_init(&vm->shreduler->shreds); + vm->shreduler->bbq = vm->bbq; gw_seed(vm->rand, (uint64_t)time(NULL)); return vm; } @@ -74,8 +74,8 @@ ANN void free_vm(VM* vm) { vector_release(&vm->ugen); if(vm->bbq) free_driver(vm->bbq, vm); - xfree(vm->shreduler); - free(vm); + mp_free(Shreduler, vm->shreduler); + mp_free(VM, vm); } ANN m_uint vm_add_shred(const VM* vm, const VM_Shred shred) { @@ -219,7 +219,7 @@ __attribute__((hot)) (m_int)(*(m_float*)(reg-SZ_INT))); \ DISPATCH() -ANN void vm_run(const VM* vm) { /* lgtm [cpp/use-of-goto] */ +ANN void vm_run(const VM* vm) { // lgtm [cpp/use-of-goto] static const void* dispatch[] = { &®setimm, &®pushimm, &®pushfloat, &®pushother, &®pushaddr,