forked from OSchip/llvm-project
parent
eb164bc1fb
commit
79baf91f17
|
@ -259,6 +259,33 @@ Annotation *GlobalAddress::Create(AnnotationID AID, const Annotable *O, void *){
|
|||
}
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Unary Instruction Implementations
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#define IMPLEMENT_UNARY_OPERATOR(OP, TY) \
|
||||
case Type::TY##TyID: Dest.TY##Val = OP Src.TY##Val; break
|
||||
|
||||
static void executeNotInst(UnaryOperator *I, ExecutionContext &SF) {
|
||||
const Type *Ty = I->getOperand(0)->getType();
|
||||
GenericValue Src = getOperandValue(I->getOperand(0), SF);
|
||||
GenericValue Dest;
|
||||
switch (Ty->getPrimitiveID()) {
|
||||
IMPLEMENT_UNARY_OPERATOR(~, UByte);
|
||||
IMPLEMENT_UNARY_OPERATOR(~, SByte);
|
||||
IMPLEMENT_UNARY_OPERATOR(~, UShort);
|
||||
IMPLEMENT_UNARY_OPERATOR(~, Short);
|
||||
IMPLEMENT_UNARY_OPERATOR(~, UInt);
|
||||
IMPLEMENT_UNARY_OPERATOR(~, Int);
|
||||
IMPLEMENT_UNARY_OPERATOR(~, ULong);
|
||||
IMPLEMENT_UNARY_OPERATOR(~, Long);
|
||||
IMPLEMENT_UNARY_OPERATOR(~, Pointer);
|
||||
default:
|
||||
cout << "Unhandled type for Not instruction: " << Ty << "\n";
|
||||
}
|
||||
SetValue(I, Dest, SF);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Binary Instruction Implementations
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -1152,6 +1179,7 @@ bool Interpreter::executeInstruction() {
|
|||
executeBinaryInst(cast<BinaryOperator>(I), SF);
|
||||
} else {
|
||||
switch (I->getOpcode()) {
|
||||
case Instruction::Not: executeNotInst(cast<UnaryOperator>(I),SF); break;
|
||||
// Terminators
|
||||
case Instruction::Ret: executeRetInst (cast<ReturnInst>(I), SF); break;
|
||||
case Instruction::Br: executeBrInst (cast<BranchInst>(I), SF); break;
|
||||
|
|
Loading…
Reference in New Issue