Implement the NOT operator.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2455 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2002-05-03 19:52:30 +00:00
parent 966112323f
commit 2adcd83b89

View File

@ -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;