mirror of
https://github.com/odin-lang/Odin.git
synced 2026-08-25 14:31:36 +00:00
Begin work on improving #pure error handling
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user