aboutsummaryrefslogtreecommitdiffhomepage
path: root/ir/ir.h
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2025-11-14 18:49:04 +0100
committerlemon <lsof@mailbox.org>2025-11-14 19:04:51 +0100
commita287fe5aeb6b681ab405c0297841dce64ab4b946 (patch)
tree5ae81f3b60cc910cd356059a77e89dd50ca83b42 /ir/ir.h
parentfc91a4ce139fd0236ad9e8c4fe1e7dad42f0b178 (diff)
preeliminary va_list support
Diffstat (limited to 'ir/ir.h')
-rw-r--r--ir/ir.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/ir/ir.h b/ir/ir.h
index 66fc56d..22b920f 100644
--- a/ir/ir.h
+++ b/ir/ir.h
@@ -37,8 +37,8 @@ struct xcon {
struct abiarg {
union irtype ty;
union {
- short reg; /* >= 0 */
- short stk; /* < 0 */
+ struct { ushort _ : 1, reg : 15; };
+ struct { ushort isstk : 1, stk : 15; };
};
};
@@ -188,7 +188,8 @@ struct mctarg {
* or negative SP offset if stack
*/
int (*abiarg)(short r[2], uchar cls[2], int *ni, int *nf, int *ns, union irtype);
-
+ void (*vastart)(struct function *, struct block *, int *curi);
+ void (*vaarg)(struct function *, struct block *, int *curi);
void (*isel)(struct function *);
void (*emit)(struct function *);
};
@@ -236,7 +237,9 @@ void addpred(struct block *blk, struct block *p);
struct block *newblk(struct function *);
void freeblk(struct function *, struct block *);
struct block *insertblk(struct function *, struct block *pred, struct block *subst);
+struct block *blksplitafter(struct function *, struct block *, int idx);
void adduse(struct block *ublk, int ui, union ref r);
+int newinstr(struct block *at, struct instr ins);
union ref insertinstr(struct block *, int idx, struct instr);
union ref insertphi(struct block *, enum irclass cls);
void replcuses(union ref from, union ref to);