40 lines
790 B
C
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);
|