From b9c0503d541fc0f83e0e32658711ee0a26c0a956 Mon Sep 17 00:00:00 2001 From: William Bell <62452284+Ugric@users.noreply.github.com> Date: Mon, 1 Sep 2025 21:51:16 +0100 Subject: [PATCH] keep loop using the same dispatch table, removing the need to recreate the dispatch table --- Makefile | 2 +- anonymous-function-test.ar | 3 +- app.py | 2 +- perf.data | Bin 0 -> 153080 bytes perf.data.old | Bin 0 -> 150304 bytes src/runtime/runtime.c | 72 +++++++++++++++++++------------------ 6 files changed, 41 insertions(+), 38 deletions(-) create mode 100644 perf.data create mode 100644 perf.data.old diff --git a/Makefile b/Makefile index ad28320..05f63e2 100644 --- a/Makefile +++ b/Makefile @@ -30,7 +30,7 @@ native: $(CFILES) $(LEXER_C) $(LEXER_H) debug: $(CFILES) $(LEXER_C) $(LEXER_H) mkdir -p bin - gcc -g -O0 -o $(BINARY) $(CFILES) $(CFLAGS) + gcc -g -O3 -o $(BINARY) $(CFILES) $(CFLAGS) full-debug: $(CFILES) $(LEXER_C) $(LEXER_H) mkdir -p bin diff --git a/anonymous-function-test.ar b/anonymous-function-test.ar index 2be611c..ac0a48a 100644 --- a/anonymous-function-test.ar +++ b/anonymous-function-test.ar @@ -1,3 +1,4 @@ -let i = 1000000 +let i = 10000000 while (i) do + term.log(i) i=i-1 \ No newline at end of file diff --git a/app.py b/app.py index 9b55f89..f971fa9 100644 --- a/app.py +++ b/app.py @@ -1,4 +1,4 @@ -i = 1000000 +i = 10000000 while i: print(i) i=i-1 \ No newline at end of file diff --git a/perf.data b/perf.data new file mode 100644 index 0000000000000000000000000000000000000000..997a4c7c8093d5299646569b7d5d85f1665f5eca GIT binary patch literal 153080 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 literal 0 HcmV?d00001 diff --git a/perf.data.old b/perf.data.old new file mode 100644 index 0000000000000000000000000000000000000000..1404ffda1dd073292687c2073b046817419649d5 GIT binary patch literal 150304 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%0A&J=|GZjBsxAxX5`8`q0W_$64d1 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 Cconstants, offset)); return; } - -static inline void run_instruction(Translated *translated, RuntimeState *state, - struct Stack **stack, ArErr *err) { +static inline void run_instructions(Translated *translated, RuntimeState *state, + struct Stack **stack, ArErr *err) { static void *dispatch_table[] = { [OP_LOAD_STRING] = &&DO_LOAD_STRING, [OP_DECLARE] = &&DO_DECLARE, @@ -696,35 +695,41 @@ static inline void run_instruction(Translated *translated, RuntimeState *state, [OP_ADDITION] = &&DO_ADDITION, [OP_SUBTRACTION] = &&DO_SUBTRACTION, [OP_LOAD_ACCESS_FUNCTION] = &&DO_LOAD_ACCESS_FUNCTION}; +START: + if (unlikely(state->head >= translated->bytecode.size || err->exists)) + return; goto *dispatch_table[pop_byte(translated, state)]; DO_LOAD_NULL: state->registers[pop_byte(translated, state)] = ARGON_NULL; - return; + goto START; DO_LOAD_STRING: load_const(translated, state); - return; + goto START; DO_LOAD_NUMBER: load_number(translated, state); - return; + goto START; DO_LOAD_FUNCTION: load_argon_function(translated, state, *stack); - return; + goto START; DO_IDENTIFIER: - return load_variable(translated, state, *stack, err); + load_variable(translated, state, *stack, err); + goto START; DO_DECLARE: - return runtime_declaration(translated, state, *stack, err); + runtime_declaration(translated, state, *stack, err); + goto START; DO_ASSIGN: - return runtime_assignment(translated, state, *stack); + runtime_assignment(translated, state, *stack); + goto START; DO_BOOL: { uint8_t to_register = pop_byte(translated, state); if (likely(state->registers[0]->type != TYPE_OBJECT)) { state->registers[to_register] = state->registers[0]->as_bool ? ARGON_TRUE : ARGON_FALSE; - return; + goto START; } ArgonObject *args[] = {ARGON_BOOL_TYPE, state->registers[0]}; state->registers[to_register] = ARGON_BOOL_TYPE___new__(2, args, err, state); - return; + goto START; } DO_JUMP_IF_FALSE: { uint8_t from_register = pop_byte(translated, state); @@ -732,17 +737,17 @@ DO_JUMP_IF_FALSE: { if (state->registers[from_register] == ARGON_FALSE) { state->head = to; } - return; + goto START; } DO_JUMP: state->head = pop_bytecode(translated, state); - return; + goto START; DO_NEW_SCOPE: *stack = create_scope(*stack); - return; + goto START; DO_POP_SCOPE: *stack = (*stack)->prev; - return; + goto START; DO_INIT_CALL: { size_t length = pop_bytecode(translated, state); call_instance call_instance = {state->call_instance, state->registers[0], @@ -750,34 +755,34 @@ DO_INIT_CALL: { length}; state->call_instance = ar_alloc(sizeof(call_instance)); *state->call_instance = call_instance; - return; + goto START; } DO_INSERT_ARG:; size_t index = pop_bytecode(translated, state); state->call_instance->args[index] = state->registers[0]; - return; + goto START; DO_CALL: { run_call(state->call_instance->to_call, state->call_instance->args_length, state->call_instance->args, state, false, err); state->call_instance = (*state->call_instance).previous; - return; + goto START; } DO_SOURCE_LOCATION: state->source_location = (SourceLocation){pop_bytecode(translated, state), pop_bytecode(translated, state), pop_bytecode(translated, state)}; - return; + goto START; DO_LOAD_BOOL: state->registers[0] = pop_byte(translated, state) ? ARGON_TRUE : ARGON_FALSE; - return; + goto START; DO_LOAD_ACCESS_FUNCTION: state->registers[0] = ACCESS_FUNCTION; - return; + goto START; DO_COPY_TO_REGISTER: { uint8_t from_register = pop_byte(translated, state); uint64_t to_register = pop_byte(translated, state); state->registers[to_register] = state->registers[from_register]; - return; + goto START; } DO_ADDITION: { uint8_t registerA = pop_byte(translated, state); @@ -797,7 +802,7 @@ DO_ADDITION: { if (!gonna_overflow) { state->registers[registerC] = new_number_object_from_num_and_den(a + b, 1); - return; + goto START; } mpq_t a_GMP, b_GMP; mpq_init(a_GMP); @@ -832,12 +837,12 @@ DO_ADDITION: { mpq_clear(a_GMP); mpq_clear(b_GMP); } - return; + goto START; } ArgonObject *args[] = {valueA, valueB}; state->registers[registerC] = ARGON_ADDITION_FUNCTION(2, args, err, state); - return; + goto START; } DO_SUBTRACTION: { uint8_t registerA = pop_byte(translated, state); @@ -858,7 +863,7 @@ DO_SUBTRACTION: { if (!gonna_overflow) { state->registers[registerC] = new_number_object_from_num_and_den(a - b, 1); - return; + goto START; } mpq_t a_GMP, b_GMP; mpq_init(a_GMP); @@ -893,13 +898,14 @@ DO_SUBTRACTION: { mpq_clear(a_GMP); mpq_clear(b_GMP); } - return; + goto START; } ArgonObject *args[] = {valueA, valueB}; state->registers[registerC] = ARGON_ADDITION_FUNCTION(2, args, err, state); - return; + goto START; } + goto START; } RuntimeState init_runtime_state(Translated translated, char *path) { @@ -930,12 +936,8 @@ void runtime(Translated translated, RuntimeState state, Stack *stack, *currentStackFrame = (StackFrame){translated, state, stack, NULL, 0}; currentStackFrame->state.currentStackFramePointer = ¤tStackFrame; while (currentStackFrame) { - while (likely(currentStackFrame->state.head < - currentStackFrame->translated.bytecode.size && - !err->exists)) { - run_instruction(¤tStackFrame->translated, ¤tStackFrame->state, - ¤tStackFrame->stack, err); - } + run_instructions(¤tStackFrame->translated, ¤tStackFrame->state, + ¤tStackFrame->stack, err); currentStackFrame = currentStackFrame->previousStackFrame; } } \ No newline at end of file