summaryrefslogtreecommitdiff
path: root/masm/gen.h
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2024-10-09 12:07:27 -0400
committerFreya Murphy <freya@freyacat.org>2024-10-09 12:07:27 -0400
commit55137aee817fb97aefabbe2a69930d968533458c (patch)
tree2426bf94154c6a4a2847db5c3f216c70a96b21fb /masm/gen.h
parentadd bug logging fn (diff)
downloadmips-55137aee817fb97aefabbe2a69930d968533458c.tar.gz
mips-55137aee817fb97aefabbe2a69930d968533458c.tar.bz2
mips-55137aee817fb97aefabbe2a69930d968533458c.zip
update generator to support multipe isas, expand grammer syntax
Diffstat (limited to '')
-rw-r--r--masm/gen.h58
1 files changed, 54 insertions, 4 deletions
diff --git a/masm/gen.h b/masm/gen.h
index 19f575c..42fbf50 100644
--- a/masm/gen.h
+++ b/masm/gen.h
@@ -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);