From: Michael D. Lowis Date: Mon, 7 Jun 2021 20:44:27 +0000 (-0400) Subject: started sketching API for intermediate language implementation X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=31696296e4359bb884cfacb0fd51f79c221374e4;p=proto%2Fobnc.git started sketching API for intermediate language implementation --- diff --git a/cerise/inc/cerise.h b/cerise/inc/cerise.h index 4dc00c1..f159d7e 100644 --- a/cerise/inc/cerise.h +++ b/cerise/inc/cerise.h @@ -231,18 +231,22 @@ void codegen_index(Parser* p, Item* array, Item* index); void codegen_field(Parser* p, Item* record, char* name); typedef union { - struct { - char* name; - long version; - } var; - ImmValue imm; + long i; + double f; + char* s; } Operand; typedef struct { - int opcode; - Operand dest; - Operand arg1; - Operand arg2; + int code : 28; + int type : 4; + union { + Operand args[3]; + struct { + size_t nargs; + size_t margs; + long* args; + } call; + } } Operation; typedef struct { @@ -251,6 +255,14 @@ typedef struct { Operation** ops; } Block; +long ir_startblock(Parser* p); +void ir_endblock(Parser* p); +void ir_rawop(Parser* p, Operation* op); +void ir_binopi(Parser* p, int op, long dest, long arg, long imm); +void ir_binopf(Parser* p, int op, long dest, long arg, double imm); +void ir_unnopi(Parser* p, int op, long dest, long imm); +void ir_unopf(Parser* p, int op, long dest, double imm); + /* , + */ /* +, */ /* , */