Skip to content

Commit

Permalink
Improve performance
Browse files Browse the repository at this point in the history
  • Loading branch information
vtereshkov authored May 20, 2020
1 parent 13f67d0 commit ada9e4b
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 57 deletions.
50 changes: 25 additions & 25 deletions cbplibumka/libumka.depend
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# depslib dependency file v1.0
1589877452 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_api.c
1589892766 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_api.c
<stdio.h>
<stdlib.h>
<string.h>
Expand All @@ -10,7 +10,7 @@

1588579706 h"

1589877452 c:\users\vasiliy\desktop\umka-lang-master\src\umka_compiler.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_compiler.h
"umka_common.h"
"umka_lexer.h"
"umka_types.h"
Expand All @@ -22,74 +22,74 @@

1588579706 ime.h"

1589877452 c:\users\vasiliy\desktop\umka-lang-master\src\umka_common.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_common.h
<stdint.h>
<stdbool.h>

1588579706 >

1589877452 c:\users\vasiliy\desktop\umka-lang-master\src\umka_lexer.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_lexer.h
"umka_common.h"

1588579706 on.h"

1589877452 c:\users\vasiliy\desktop\umka-lang-master\src\umka_types.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_types.h
"umka_common.h"
"umka_lexer.h"

1588579706 r.h"

1589926965 c:\users\vasiliy\desktop\umka-lang-master\src\umka_vm.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_vm.h
"umka_common.h"
"umka_lexer.h"
"umka_types.h"

1588579706 s.h"

1589877452 c:\users\vasiliy\desktop\umka-lang-master\src\umka_gen.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_gen.h
"umka_common.h"
"umka_vm.h"

1588579706 "

1589877452 c:\users\vasiliy\desktop\umka-lang-master\src\umka_ident.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_ident.h
"umka_common.h"
"umka_vm.h"

1589877452 c:\users\vasiliy\desktop\umka-lang-master\src\umka_const.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_const.h
"umka_lexer.h"
"umka_vm.h"

1589877452 c:\users\vasiliy\desktop\umka-lang-master\src\umka_runtime.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_runtime.h
"umka_vm.h"

1589877452 c:\users\vasiliy\desktop\umka-lang-master\src\umka_api.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_api.h
<stdint.h>
<stdbool.h>

1588636805

1589877452 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_common.c
1589892766 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_common.c
<stdlib.h>
<string.h>
"umka_common.h"

1589927132 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_compiler.c
1589892766 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_compiler.c
<stddef.h>
<string.h>
<stdio.h>
"umka_compiler.h"

1588579706 iler.h"

1589877452 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_const.c
1589892766 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_const.c
<string.h>
<math.h>
"umka_const.h"

1588579706 t.h"

1589877452 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_decl.c
1589892766 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_decl.c
<stdio.h>
<string.h>
"umka_expr.h"
Expand All @@ -98,34 +98,34 @@

1588579706 .h"

1589877452 c:\users\vasiliy\desktop\umka-lang-master\src\umka_expr.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_expr.h
"umka_compiler.h"

1589877452 c:\users\vasiliy\desktop\umka-lang-master\src\umka_stmt.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_stmt.h
"umka_compiler.h"

1589877452 c:\users\vasiliy\desktop\umka-lang-master\src\umka_decl.h
1589892766 c:\users\vasiliy\desktop\umka-lang-master\src\umka_decl.h
"umka_compiler.h"

1589877452 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_expr.c
1589892766 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_expr.c
<string.h>
<limits.h>
<stddef.h>
"umka_expr.h"
"umka_decl.h"

1589877452 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_gen.c
1589892766 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_gen.c
<stdio.h>
<stdlib.h>
"umka_gen.h"

1589877452 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_ident.c
1589892766 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_ident.c
<stdio.h>
<stdlib.h>
<string.h>
"umka_ident.h"

1589877452 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_lexer.c
1589892766 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_lexer.c
<stdio.h>
<stdlib.h>
<string.h>
Expand All @@ -134,19 +134,19 @@
"umka_common.h"
"umka_lexer.h"

1589877452 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_runtime.c
1589892766 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_runtime.c
<stdlib.h>
<stdio.h>
<time.h>
"umka_runtime.h"

1589877452 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_stmt.c
1589892766 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_stmt.c
<string.h>
"umka_stmt.h"
"umka_expr.h"
"umka_decl.h"

1589877452 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_types.c
1589892766 source:c:\users\vasiliy\desktop\umka-lang-master\src\umka_types.c
<stdio.h>
<stdlib.h>
<string.h>
Expand Down
6 changes: 3 additions & 3 deletions src/umka_compiler.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,14 +165,14 @@ void compilerCompile(Compiler *comp)
void compilerRun(Compiler *comp)
{
vmReset(&comp->vm, comp->gen.code);
vmRun(&comp->vm);
vmRun(&comp->vm, 0, 0, NULL, NULL);
}


void compilerCall(Compiler *comp, int entryOffset, int numParamSlots, Slot *params, Slot *result)
{
vmReset(&comp->vm, comp->gen.code);
vmCall(&comp->vm, entryOffset, numParamSlots, params, result);
vmRun(&comp->vm, entryOffset, numParamSlots, params, result);
}


Expand All @@ -187,7 +187,7 @@ int compilerGetFunc(Compiler *comp, char *name)
Ident *fn = identFind(&comp->idents, &comp->modules, &comp->blocks, 1, name, NULL);
if (fn && fn->kind == IDENT_CONST && fn->type->kind == TYPE_FN)
return fn->offset;
return 0;
return -1;
}


Expand Down
47 changes: 20 additions & 27 deletions src/umka_vm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1217,9 +1217,26 @@ static void fiberStep(Fiber *fiber, Fiber **newFiber, HeapChunks *chunks, ErrorF
}


void vmRun(VM *vm)
void vmRun(VM *vm, int entryOffset, int numParamSlots, Slot *params, Slot *result)
{
while (vm->fiber->alive && vm->fiber->code[vm->fiber->ip].opcode != OP_HALT)
if (entryOffset < 0)
vm->error("Called function is not defined");

// Individual function call
if (entryOffset > 0)
{
// Push parameters
vm->fiber->top -= numParamSlots;
for (int i = 0; i < numParamSlots; i++)
vm->fiber->top[i] = params[i];

// Push null return address and go to the entry point
(--vm->fiber->top)->intVal = 0;
vm->fiber->ip = entryOffset;
}

while (vm->fiber->alive && !(vm->fiber->code[vm->fiber->ip].opcode == OP_HALT ||
(vm->fiber->code[vm->fiber->ip].opcode == OP_RETURN && vm->fiber->top->intVal == 0)))
{
#ifdef DEBUG_REF_CNT
printf(" %d", vm->fiber->ip);
Expand All @@ -1230,33 +1247,9 @@ void vmRun(VM *vm)
if (newFiber)
vm->fiber = newFiber;
}
}


void vmCall(VM *vm, int entryOffset, int numParamSlots, Slot *params, Slot *result)
{
if (entryOffset == 0)
vm->error("Called function is not defined");

// Push parameters
vm->fiber->top -= numParamSlots;
for (int i = 0; i < numParamSlots; i++)
vm->fiber->top[i] = params[i];

// Push null return address and go to the entry point
(--vm->fiber->top)->intVal = 0;
vm->fiber->ip = entryOffset;

while (vm->fiber->alive && !(vm->fiber->code[vm->fiber->ip].opcode == OP_RETURN && vm->fiber->top->intVal == 0))
{
Fiber *newFiber = NULL;
fiberStep(vm->fiber, &newFiber, &vm->chunks, vm->error);
if (newFiber)
vm->fiber = newFiber;
}

// Save result
if (result)
if (entryOffset > 0 && result)
*result = vm->fiber->reg[VM_RESULT_REG_0];
}

Expand Down
3 changes: 1 addition & 2 deletions src/umka_vm.h
Original file line number Diff line number Diff line change
Expand Up @@ -162,8 +162,7 @@ typedef struct
void vmInit(VM *vm, int stackSize /* slots */, ErrorFunc error);
void vmFree(VM *vm);
void vmReset(VM *vm, Instruction *code);
void vmRun (VM *vm);
void vmCall(VM *vm, int entryOffset, int numParamSlots, Slot *params, Slot *result);
void vmRun(VM *vm, int entryOffset, int numParamSlots, Slot *params, Slot *result);
int vmAsm(int ip, Instruction *instr, char *buf);

#endif // UMKA_VM_H_INCLUDED

0 comments on commit ada9e4b

Please sign in to comment.