mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-29 10:32:47 +00:00
Don't require C bindings opcode numbers to be kept in sync.
They are not in sync now, for example Bitcast would show up as LLVMCall. So instead introduce 2 functions that map to and from the opcodes in the C bindings. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141290 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6831b7c645
commit
4df1557f40
@ -179,8 +179,8 @@ typedef enum {
|
||||
LLVMPHI = 44,
|
||||
LLVMCall = 45,
|
||||
LLVMSelect = 46,
|
||||
/* UserOp1 */
|
||||
/* UserOp2 */
|
||||
LLVMUserOp1 = 47,
|
||||
LLVMUserOp2 = 48,
|
||||
LLVMVAArg = 49,
|
||||
LLVMExtractElement = 50,
|
||||
LLVMInsertElement = 51,
|
||||
@ -195,7 +195,9 @@ typedef enum {
|
||||
|
||||
/* Exception Handling Operators */
|
||||
LLVMResume = 58,
|
||||
LLVMLandingPad = 59
|
||||
LLVMLandingPad = 59,
|
||||
LLVMUnwind = 60
|
||||
|
||||
|
||||
} LLVMOpcode;
|
||||
|
||||
|
@ -654,10 +654,35 @@ LLVMValueRef LLVMConstVector(LLVMValueRef *ScalarConstantVals, unsigned Size) {
|
||||
return wrap(ConstantVector::get(makeArrayRef(
|
||||
unwrap<Constant>(ScalarConstantVals, Size), Size)));
|
||||
}
|
||||
|
||||
/*-- Opcode mapping */
|
||||
|
||||
static LLVMOpcode map_to_llvmopcode(int opcode)
|
||||
{
|
||||
switch (opcode) {
|
||||
#define HANDLE_INST(num, opc, clas) case num: return LLVM##opc;
|
||||
#include "llvm/Instruction.def"
|
||||
#undef HANDLE_INST
|
||||
default:
|
||||
assert(false && "Unhandled Opcode.");
|
||||
}
|
||||
}
|
||||
|
||||
static int map_from_llvmopcode(LLVMOpcode code)
|
||||
{
|
||||
switch (code) {
|
||||
#define HANDLE_INST(num, opc, clas) case LLVM##opc: return num;
|
||||
#include "llvm/Instruction.def"
|
||||
#undef HANDLE_INST
|
||||
default:
|
||||
assert(false && "Unhandled Opcode.");
|
||||
}
|
||||
}
|
||||
|
||||
/*--.. Constant expressions ................................................--*/
|
||||
|
||||
LLVMOpcode LLVMGetConstOpcode(LLVMValueRef ConstantVal) {
|
||||
return (LLVMOpcode)unwrap<ConstantExpr>(ConstantVal)->getOpcode();
|
||||
return map_to_llvmopcode(unwrap<ConstantExpr>(ConstantVal)->getOpcode());
|
||||
}
|
||||
|
||||
LLVMValueRef LLVMAlignOf(LLVMTypeRef Ty) {
|
||||
@ -1919,7 +1944,7 @@ LLVMValueRef LLVMBuildXor(LLVMBuilderRef B, LLVMValueRef LHS, LLVMValueRef RHS,
|
||||
LLVMValueRef LLVMBuildBinOp(LLVMBuilderRef B, LLVMOpcode Op,
|
||||
LLVMValueRef LHS, LLVMValueRef RHS,
|
||||
const char *Name) {
|
||||
return wrap(unwrap(B)->CreateBinOp(Instruction::BinaryOps(Op), unwrap(LHS),
|
||||
return wrap(unwrap(B)->CreateBinOp(Instruction::BinaryOps(map_from_llvmopcode(Op)), unwrap(LHS),
|
||||
unwrap(RHS), Name));
|
||||
}
|
||||
|
||||
@ -2106,7 +2131,7 @@ LLVMValueRef LLVMBuildTruncOrBitCast(LLVMBuilderRef B, LLVMValueRef Val,
|
||||
|
||||
LLVMValueRef LLVMBuildCast(LLVMBuilderRef B, LLVMOpcode Op, LLVMValueRef Val,
|
||||
LLVMTypeRef DestTy, const char *Name) {
|
||||
return wrap(unwrap(B)->CreateCast(Instruction::CastOps(Op), unwrap(Val),
|
||||
return wrap(unwrap(B)->CreateCast(Instruction::CastOps(map_from_llvmopcode(Op)), unwrap(Val),
|
||||
unwrap(DestTy), Name));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user