[decompiler] ASM Branching Support (#677)

* basic example working in geometry

* before updating offline'

* clean up

* temp

* progress
This commit is contained in:
water111
2021-07-05 16:07:07 -04:00
committed by GitHub
parent 54c63ff42c
commit 551a9c4955
42 changed files with 4161 additions and 272 deletions
+11 -4
View File
@@ -728,7 +728,7 @@ FormElement* BranchOp::get_as_form(FormPool& pool, const Env&) const {
}
FormElement* SpecialOp::get_as_form(FormPool& pool, const Env&) const {
return pool.alloc_element<AtomicOpElement>(this);
return pool.alloc_element<AtomicOpElement>(const_cast<SpecialOp*>(this));
}
FormElement* CallOp::get_as_form(FormPool& pool, const Env& env) const {
@@ -764,11 +764,18 @@ FormElement* ConditionalMoveFalseOp::get_as_form(FormPool& pool, const Env&) con
}
FormElement* FunctionEndOp::get_as_form(FormPool& pool, const Env&) const {
return pool.alloc_element<AtomicOpElement>(this);
return pool.alloc_element<AtomicOpElement>(const_cast<FunctionEndOp*>(this));
}
FormElement* AsmBranchOp::get_as_form(FormPool& pool, const Env&) const {
return pool.alloc_element<AtomicOpElement>(this);
FormElement* AsmBranchOp::get_as_form(FormPool& pool, const Env& env) const {
if (m_branch_delay) {
auto delay = m_branch_delay->get_as_form(pool, env);
auto delay_form = pool.alloc_single_form(nullptr, delay);
return pool.alloc_element<AsmBranchElement>(const_cast<AsmBranchOp*>(this), delay_form,
m_likely);
} else {
return pool.alloc_element<AtomicOpElement>(const_cast<AsmBranchOp*>(this));
}
}
FormElement* StackSpillLoadOp::get_as_form(FormPool& pool, const Env& env) const {