summaryrefslogtreecommitdiff
path: root/src/sys/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/sys/include')
-rw-r--r--src/sys/include/arch/amd64/piir.h21
-rw-r--r--src/sys/include/np/piir.h3
2 files changed, 24 insertions, 0 deletions
diff --git a/src/sys/include/arch/amd64/piir.h b/src/sys/include/arch/amd64/piir.h
index 75236b9..d994339 100644
--- a/src/sys/include/arch/amd64/piir.h
+++ b/src/sys/include/arch/amd64/piir.h
@@ -54,4 +54,25 @@ ssize_t md_piir_decode(
ir_byte_t input
);
+/*
+ * Allocate a register ID for use in the IR
+ *
+ * @work: Current work
+ * @vm: Virtual machine state
+ * @flags: Optional flags
+ *
+ * Returns the allocated register ID on success, otherwise
+ * a less than zero value on failure
+ */
+reg_t md_alloc_reg(struct np_work *work, struct piir_vm *vm, int flags);
+
+/*
+ * Free one or more registers
+ *
+ * @work: Current work
+ * @vm: Virtual machine state
+ * @reg: Register to free
+ */
+void md_free_reg(struct np_work *work, struct piir_vm *vm, reg_t reg);
+
#endif /* !_MACHINE_PIIR_H_ */
diff --git a/src/sys/include/np/piir.h b/src/sys/include/np/piir.h
index 5625409..b892231 100644
--- a/src/sys/include/np/piir.h
+++ b/src/sys/include/np/piir.h
@@ -42,6 +42,7 @@
*/
typedef int8_t ir_byte_t;
typedef int8_t md_byte_t;
+typedef int8_t reg_t;
/*
* The maxiumum size of the bytecode stack per
@@ -65,11 +66,13 @@ typedef int8_t md_byte_t;
* @code: Generated machine code
* @last_ir: Last IR byte used
* @code_i: Current index into code buffer
+ * @regset: Register set bitmap
*/
struct piir_vm {
md_byte_t code[4096];
ir_byte_t last_ir;
uint32_t code_i;
+ uint8_t regset;
};
/*