diff options
Diffstat (limited to '')
| -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); |