vc3/asm/eval.h
2025-04-02 17:00:43 +02:00

40 lines
790 B
C

#pragma once
#include "common/arch.h"
#include "parse.h"
#include "resolve.h"
#include <stdbool.h>
#include <stdint.h>
typedef enum {
EoTy_Err,
EoTy_Reg,
EoTy_Imm,
EoTy_Str,
EoTy_Mem8Reg,
EoTy_Mem8Imm,
EoTy_MemU16Reg,
EoTy_MemU16Imm,
} EvaledOperandTy;
typedef struct {
EvaledOperandTy ty;
union {
Reg reg;
uint16_t imm;
};
uint16_t offset;
} EvaledOperand;
typedef struct {
IdentResolver* re;
Reporter* rep;
bool second_pass;
} OperandEvaluator;
EvaledOperand eval_operand_to_imm(
OperandEvaluator* evaluator, POperand* operand);
EvaledOperand eval_operand_indirection_expr(
OperandEvaluator* evaluator, POperand* operand);
EvaledOperand eval_operand(OperandEvaluator* evaluator, POperand* operand);