mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-12 09:48:37 +12:00
SPU LLVM: disable GHC CC for chunks on Windows
Causes fatal error inside LLVM.
This commit is contained in:
parent
5d33d9a3d9
commit
8194c92f1c
1 changed files with 9 additions and 5 deletions
|
@ -3075,7 +3075,9 @@ class spu_llvm_recompiler : public spu_recompiler_base, public cpu_translator
|
||||||
result->setLinkage(llvm::GlobalValue::InternalLinkage);
|
result->setLinkage(llvm::GlobalValue::InternalLinkage);
|
||||||
result->addAttribute(1, llvm::Attribute::NoAlias);
|
result->addAttribute(1, llvm::Attribute::NoAlias);
|
||||||
result->addAttribute(2, llvm::Attribute::NoAlias);
|
result->addAttribute(2, llvm::Attribute::NoAlias);
|
||||||
|
#ifndef _WIN32
|
||||||
result->setCallingConv(llvm::CallingConv::GHC);
|
result->setCallingConv(llvm::CallingConv::GHC);
|
||||||
|
#endif
|
||||||
|
|
||||||
empl.first->second.chunk = result;
|
empl.first->second.chunk = result;
|
||||||
|
|
||||||
|
@ -3096,7 +3098,9 @@ class spu_llvm_recompiler : public spu_recompiler_base, public cpu_translator
|
||||||
fn->setLinkage(llvm::GlobalValue::InternalLinkage);
|
fn->setLinkage(llvm::GlobalValue::InternalLinkage);
|
||||||
fn->addAttribute(1, llvm::Attribute::NoAlias);
|
fn->addAttribute(1, llvm::Attribute::NoAlias);
|
||||||
fn->addAttribute(2, llvm::Attribute::NoAlias);
|
fn->addAttribute(2, llvm::Attribute::NoAlias);
|
||||||
|
#ifndef _WIN32
|
||||||
fn->setCallingConv(llvm::CallingConv::GHC);
|
fn->setCallingConv(llvm::CallingConv::GHC);
|
||||||
|
#endif
|
||||||
empl.first->second.fn = fn;
|
empl.first->second.fn = fn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3111,7 +3115,7 @@ class spu_llvm_recompiler : public spu_recompiler_base, public cpu_translator
|
||||||
void tail_chunk(llvm::Value* chunk, llvm::Value* base_pc = nullptr)
|
void tail_chunk(llvm::Value* chunk, llvm::Value* base_pc = nullptr)
|
||||||
{
|
{
|
||||||
auto call = m_ir->CreateCall(chunk, {m_thread, m_lsptr, base_pc ? base_pc : m_base_pc});
|
auto call = m_ir->CreateCall(chunk, {m_thread, m_lsptr, base_pc ? base_pc : m_base_pc});
|
||||||
call->setCallingConv(llvm::CallingConv::GHC);
|
call->setCallingConv(m_finfo ? m_finfo->chunk->getCallingConv() : llvm::cast<llvm::Function>(chunk)->getCallingConv());
|
||||||
call->setTailCall();
|
call->setTailCall();
|
||||||
m_ir->CreateRetVoid();
|
m_ir->CreateRetVoid();
|
||||||
}
|
}
|
||||||
|
@ -3146,7 +3150,7 @@ class spu_llvm_recompiler : public spu_recompiler_base, public cpu_translator
|
||||||
|
|
||||||
const auto _call = m_ir->CreateCall(verify(HERE, fn), {m_thread, m_lsptr, m_base_pc, sp, args[0], args[1]});
|
const auto _call = m_ir->CreateCall(verify(HERE, fn), {m_thread, m_lsptr, m_base_pc, sp, args[0], args[1]});
|
||||||
|
|
||||||
_call->setCallingConv(llvm::CallingConv::GHC);
|
_call->setCallingConv(fn->getCallingConv());
|
||||||
|
|
||||||
// Tail call using loaded LR value (gateway from a chunk)
|
// Tail call using loaded LR value (gateway from a chunk)
|
||||||
if (!m_finfo->fn)
|
if (!m_finfo->fn)
|
||||||
|
@ -4074,7 +4078,7 @@ public:
|
||||||
gateway->setLinkage(GlobalValue::InternalLinkage);
|
gateway->setLinkage(GlobalValue::InternalLinkage);
|
||||||
gateway->setCallingConv(CallingConv::GHC);
|
gateway->setCallingConv(CallingConv::GHC);
|
||||||
|
|
||||||
m_ir->CreateCall(gateway, {m_thread, m_lsptr, m_base_pc})->setCallingConv(CallingConv::GHC);
|
m_ir->CreateCall(gateway, {m_thread, m_lsptr, m_base_pc})->setCallingConv(gateway->getCallingConv());
|
||||||
m_ir->CreateRetVoid();
|
m_ir->CreateRetVoid();
|
||||||
m_ir->SetInsertPoint(label_stop);
|
m_ir->SetInsertPoint(label_stop);
|
||||||
m_ir->CreateRetVoid();
|
m_ir->CreateRetVoid();
|
||||||
|
@ -4324,7 +4328,7 @@ public:
|
||||||
|
|
||||||
const auto null = cast<Function>(module->getOrInsertFunction("spu-null", entry_chunk->chunk->getFunctionType()).getCallee());
|
const auto null = cast<Function>(module->getOrInsertFunction("spu-null", entry_chunk->chunk->getFunctionType()).getCallee());
|
||||||
null->setLinkage(llvm::GlobalValue::InternalLinkage);
|
null->setLinkage(llvm::GlobalValue::InternalLinkage);
|
||||||
null->setCallingConv(llvm::CallingConv::GHC);
|
null->setCallingConv(entry_chunk->chunk->getCallingConv());
|
||||||
set_function(null);
|
set_function(null);
|
||||||
m_ir->CreateRetVoid();
|
m_ir->CreateRetVoid();
|
||||||
|
|
||||||
|
@ -4378,7 +4382,7 @@ public:
|
||||||
if (si->getOperand(0) == m_ir->getFalse())
|
if (si->getOperand(0) == m_ir->getFalse())
|
||||||
{
|
{
|
||||||
ci = m_ir->CreateCall(m_test_state, {&*f->arg_begin()});
|
ci = m_ir->CreateCall(m_test_state, {&*f->arg_begin()});
|
||||||
ci->setCallingConv(CallingConv::PreserveAll);
|
ci->setCallingConv(m_test_state->getCallingConv());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue