Begin work on improving #pure error handling

This commit is contained in:
gingerBill
2026-08-24 12:13:24 +01:00
parent 7ebc5c462e
commit 39afdfc609
4 changed files with 30 additions and 0 deletions

View File

@@ -239,6 +239,14 @@ main :: proc() {
bool is_nondeterministic() const {
return false;
}
bool has_implicit_mem() const {
if (!writes_mem && !reads_mem) {
return false;
}
u16 implicit = cast(u16)implicit_rd | cast(u16)implicit_wr;
bool is_atomic = false; // TODO(bill): Add ATOMIC flag to SideEffectFlags in the original INSTRUCTION_TABLE
return (implicit & (ClobberReg_SP)) != 0 || is_atomic;
}
};
void clobber_implicit_regs(StringSet *clobber_registers_set, u16 implicit_regs) {

View File

@@ -328,6 +328,13 @@ main :: proc() {
bool is_nondeterministic() const {
return (cast(u16)side_effects & SideEffectFlag_NONDETERMINISTIC) != 0;
}
bool has_implicit_mem() const {
if (!writes_mem && !reads_mem) {
return false;
}
u16 implicit = cast(u16)implicit_rd | cast(u16)implicit_wr;
return (implicit & (ClobberReg_RSP|ClobberReg_RSI|ClobberReg_RDI|ClobberReg_RBX)) != 0;
}
};
void clobber_implicit_regs(StringSet *clobber_registers_set, u16 implicit_regs) {

View File

@@ -331,6 +331,13 @@ struct Asm_amd64 {
bool is_nondeterministic() const {
return (cast(u16)side_effects & SideEffectFlag_NONDETERMINISTIC) != 0;
}
bool has_implicit_mem() const {
if (!writes_mem && !reads_mem) {
return false;
}
u16 implicit = cast(u16)implicit_rd | cast(u16)implicit_wr;
return (implicit & (ClobberReg_RSP|ClobberReg_RSI|ClobberReg_RDI|ClobberReg_RBX)) != 0;
}
};
void clobber_implicit_regs(StringSet *clobber_registers_set, u16 implicit_regs) {

View File

@@ -187,6 +187,14 @@ struct Asm_riscv {
bool is_nondeterministic() const {
return false;
}
bool has_implicit_mem() const {
if (!writes_mem && !reads_mem) {
return false;
}
u16 implicit = cast(u16)implicit_rd | cast(u16)implicit_wr;
bool is_atomic = false; // TODO(bill): Add ATOMIC flag to SideEffectFlags in the original INSTRUCTION_TABLE
return (implicit & (ClobberReg_SP)) != 0 || is_atomic;
}
};
void clobber_implicit_regs(StringSet *clobber_registers_set, u16 implicit_regs) {