mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-18 19:38:51 +00:00
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:
parent
966112323f
commit
2adcd83b89
@ -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…
x
Reference in New Issue
Block a user