diff options
| author | Freya Murphy <freya@freyacat.org> | 2024-10-09 12:07:27 -0400 |
|---|---|---|
| committer | Freya Murphy <freya@freyacat.org> | 2024-10-09 12:07:27 -0400 |
| commit | 55137aee817fb97aefabbe2a69930d968533458c (patch) | |
| tree | 2426bf94154c6a4a2847db5c3f216c70a96b21fb /masm/gen.h | |
| parent | add bug logging fn (diff) | |
| download | mips-55137aee817fb97aefabbe2a69930d968533458c.tar.gz mips-55137aee817fb97aefabbe2a69930d968533458c.tar.bz2 mips-55137aee817fb97aefabbe2a69930d968533458c.zip | |
update generator to support multipe isas, expand grammer syntax
Diffstat (limited to 'masm/gen.h')
| -rw-r--r-- | masm/gen.h | 58 |
1 files changed, 54 insertions, 4 deletions
@@ -4,7 +4,7 @@ #define __GEN_H__ #include <mlimits.h> -#include <mips32.h> +#include <mips.h> #include <stdint.h> #include "parse.h" @@ -44,16 +44,42 @@ void section_free(struct section *section); /// struct gen_ins_state { - // rd,rst,rt + // rd,rs,rt enum mips32_register rd; enum mips32_register rs; enum mips32_register rt; + // fs,ft + enum mips32_fp_register fs; + enum mips32_fp_register ft; + enum mips32_fp_register fd; + // immd - uint16_t immd; + uint16_t immd; // 16 bit + + // cc + uint16_t cc; // 3 bit + + // code + uint32_t code; // 5 bit + + // pos + uint32_t pos; // 5 bit + + // size + uint32_t size; // 5 bit - 1 + + // hb + bool hb; // 1 bit - 1 + + // index + uint32_t index; + + // hint + uint32_t hint; // offset(base) - uint16_t offset; + uint16_t offset; // 16 bit enum mips32_register base; // target @@ -63,15 +89,35 @@ struct gen_ins_state { struct string *label; }; +struct gen_ins_override { + enum mips32_register reg; + enum mips32_fp_register fpreg; + uint32_t immd; +}; + /// /// grammer type /// enum grammer_type { + // registers GMR_RD, GMR_RS, GMR_RT, + GMR_INDEX_BASE, + // fp registers + GMR_FS, + GMR_FT, + GMR_FD, + // numeric fields GMR_IMMD, + GMR_CC, + GMR_CODE, + GMR_POS, + GMR_SIZE, + GMR_HB, + GMR_HINT, + // addresses GMR_OFFSET, GMR_OFFSET_BASE, GMR_TARGET, @@ -108,6 +154,10 @@ struct generator { /* generate the input as mips32r6 */ int generate_mips32r6(struct generator *gen); +/* run codegen with the mips32r2 specification */ +int generate_mips32r2(struct generator *gen); +/* run codegen with the mips32r6 specification */ +int generate_mips1(struct generator *gen); /* initalize a generator */ int generator_init(const char *file, struct generator *gen); |