mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-02 16:56:50 +00:00
encode function calling convs in the bytecode file. invoke and call are
still to come. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21749 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a8e8f16714
commit
479ffebd73
@ -1886,6 +1886,14 @@ void BytecodeReader::ParseModuleGlobalInfo() {
|
||||
if ((Flags & (1 << 4)) == 0)
|
||||
FunctionSignatureList.push_back(Func);
|
||||
|
||||
// Look at the low bits. If there is a calling conv here, apply it,
|
||||
// read it as a vbr.
|
||||
Flags &= 15;
|
||||
if (Flags)
|
||||
Func->setCallingConv(Flags-1);
|
||||
else
|
||||
Func->setCallingConv(read_vbr_uint());
|
||||
|
||||
if (Handler) Handler->handleFunctionDeclaration(Func);
|
||||
|
||||
// Get the next function signature.
|
||||
|
@ -923,10 +923,17 @@ void BytecodeWriter::outputModuleInfoBlock(const Module *M) {
|
||||
assert(Slot != -1 && "Module slot calculator is broken!");
|
||||
assert(Slot >= Type::FirstDerivedTyID && "Derived type not in range!");
|
||||
assert(((Slot << 5) >> 5) == Slot && "Slot # too big!");
|
||||
unsigned ID = (Slot << 5) + 1;
|
||||
unsigned ID = (Slot << 5);
|
||||
|
||||
if (I->getCallingConv() < 15)
|
||||
ID += I->getCallingConv()+1;
|
||||
|
||||
if (I->isExternal()) // If external, we don't have an FunctionInfo block.
|
||||
ID |= 1 << 4;
|
||||
output_vbr(ID);
|
||||
|
||||
if (I->getCallingConv() >= 15)
|
||||
output_vbr(I->getCallingConv());
|
||||
}
|
||||
output_vbr((unsigned)Table.getSlot(Type::VoidTy) << 5);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user