aboutsummaryrefslogtreecommitdiff
path: root/src/fasm/runner/runner.h
blob: 0dfa3386e71d65cc6eb3329b55cebed7a97adae0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#pragma once

#include <fasm/code_generator/code_generator.h>
#include <stdint.h>

typedef struct FasmFunction {
  uint8_t *returnTo;
  uint8_t *stack;
  size_t stack_size;
}FasmFunction;

extern int fasmRunner(ByteCode bytecode);

#define getNextNBitsHeader(bits) \
  extern uint##bits##_t getNext##bits##Bits(uint8_t **pos)
getNextNBitsHeader(8);
getNextNBitsHeader(16);
getNextNBitsHeader(32);
getNextNBitsHeader(64);

#define pushToStackNBitsHeader(bits)                                       \
  extern void pushToStack##bits##Bits(uint8_t **stack, size_t *stack_size, \
                                      size_t *stack_filled,                \
                                      uint##bits##_t value)
pushToStackNBitsHeader(8);
pushToStackNBitsHeader(16);
pushToStackNBitsHeader(32);
pushToStackNBitsHeader(64);

#define popFromStackNBitsHeader(bits)             \
  extern uint##bits##_t popFromStack##bits##Bits( \
      uint8_t **stack, size_t *stack_size, size_t *stack_filled)
popFromStackNBitsHeader(8);
popFromStackNBitsHeader(16);
popFromStackNBitsHeader(32);
popFromStackNBitsHeader(64);