mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-12-06 07:12:28 +01:00
Initial LLVM 5 port
This commit is contained in:
parent
7b81d19103
commit
7e7d3e658e
|
|
@ -258,11 +258,11 @@ struct MemoryManager : llvm::RTDyldMemoryManager
|
||||||
return RTDyldMemoryManager::registerEHFrames(addr, load_addr, size);
|
return RTDyldMemoryManager::registerEHFrames(addr, load_addr, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void deregisterEHFrames(u8* addr, u64 load_addr, std::size_t size) override
|
virtual void deregisterEHFrames() override
|
||||||
{
|
{
|
||||||
LOG_ERROR(GENERAL, "deregisterEHFrames() called"); // Not expected
|
LOG_ERROR(GENERAL, "deregisterEHFrames() called"); // Not expected
|
||||||
|
|
||||||
return RTDyldMemoryManager::deregisterEHFrames(addr, load_addr, size);
|
return RTDyldMemoryManager::deregisterEHFrames();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ PPUTranslator::PPUTranslator(LLVMContext& context, Module* module, const ppu_mod
|
||||||
, m_module(module)
|
, m_module(module)
|
||||||
, m_is_be(false)
|
, m_is_be(false)
|
||||||
, m_info(info)
|
, m_info(info)
|
||||||
, m_pure_attr(AttributeSet::get(m_context, AttributeSet::FunctionIndex, {Attribute::NoUnwind, Attribute::ReadNone}))
|
, m_pure_attr(AttributeList::get(m_context,AttributeList::FunctionIndex, AttrBuilder().addAttribute(Attribute::NoUnwind).addAttribute(Attribute::ReadNone)))
|
||||||
{
|
{
|
||||||
// There is no weak linkage on JIT, so let's create variables with different names for each module part
|
// There is no weak linkage on JIT, so let's create variables with different names for each module part
|
||||||
const u32 gsuffix = m_info.name.empty() ? info.funcs[0].addr : info.funcs[0].addr - m_info.segs[0].addr;
|
const u32 gsuffix = m_info.name.empty() ? info.funcs[0].addr : info.funcs[0].addr - m_info.segs[0].addr;
|
||||||
|
|
@ -133,7 +133,7 @@ Function* PPUTranslator::Translate(const ppu_function& info)
|
||||||
const u64 base = m_reloc ? m_reloc->addr : 0;
|
const u64 base = m_reloc ? m_reloc->addr : 0;
|
||||||
m_addr = info.addr - base;
|
m_addr = info.addr - base;
|
||||||
|
|
||||||
m_thread = &*m_function->getArgumentList().begin();
|
m_thread = &*m_function->arg_begin();
|
||||||
m_base_loaded = m_ir->CreateLoad(m_base);
|
m_base_loaded = m_ir->CreateLoad(m_base);
|
||||||
|
|
||||||
m_body = BasicBlock::Create(m_context, "__body", m_function);
|
m_body = BasicBlock::Create(m_context, "__body", m_function);
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ class PPUTranslator final //: public CPUTranslator
|
||||||
std::map<u64, const ppu_reloc*> m_relocs;
|
std::map<u64, const ppu_reloc*> m_relocs;
|
||||||
|
|
||||||
// Attributes for function calls which are "pure" and may be optimized away if their results are unused
|
// Attributes for function calls which are "pure" and may be optimized away if their results are unused
|
||||||
const llvm::AttributeSet m_pure_attr;
|
const llvm::AttributeList m_pure_attr;
|
||||||
|
|
||||||
// IR builder
|
// IR builder
|
||||||
llvm::IRBuilder<>* m_ir;
|
llvm::IRBuilder<>* m_ir;
|
||||||
|
|
@ -404,7 +404,7 @@ public:
|
||||||
|
|
||||||
// Call a function with attribute list
|
// Call a function with attribute list
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
llvm::CallInst* Call(llvm::Type* ret, llvm::AttributeSet attr, llvm::StringRef name, Args... args)
|
llvm::CallInst* Call(llvm::Type* ret, llvm::AttributeList attr, llvm::StringRef name, Args... args)
|
||||||
{
|
{
|
||||||
// Call the function
|
// Call the function
|
||||||
return m_ir->CreateCall(m_module->getOrInsertFunction(name, llvm::FunctionType::get(ret, {args->getType()...}, false), attr), {args...});
|
return m_ir->CreateCall(m_module->getOrInsertFunction(name, llvm::FunctionType::get(ret, {args->getType()...}, false), attr), {args...});
|
||||||
|
|
@ -414,7 +414,7 @@ public:
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
llvm::CallInst* Call(llvm::Type* ret, llvm::StringRef name, Args... args)
|
llvm::CallInst* Call(llvm::Type* ret, llvm::StringRef name, Args... args)
|
||||||
{
|
{
|
||||||
return Call(ret, llvm::AttributeSet{}, name, args...);
|
return Call(ret, llvm::AttributeList{}, name, args...);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle compilation errors
|
// Handle compilation errors
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue