| /******************************************************************************* |
| * Copyright (c) 2016 CEA LIST. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Created on: 20 mai 2010 |
| * |
| * Contributors: |
| * Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr |
| * - Initial API and implementation |
| ******************************************************************************/ |
| |
| #ifndef BASEAVMPRIMITIVE_H_ |
| #define BASEAVMPRIMITIVE_H_ |
| |
| #include <common/AvmObject.h> |
| |
| #include <computer/instruction/InstructionEnvironment.h> |
| |
| |
| namespace sep |
| { |
| |
| |
| class AvmCode; |
| class AvmPrimitiveProcessor; |
| |
| class ExecutionData; |
| class EvaluationEnvironment; |
| class ExecutionEnvironment; |
| |
| |
| |
| class BaseAvmPrimitive : public AvmObject |
| { |
| |
| public: |
| /** |
| * CONSTRUCTOR |
| * Default |
| */ |
| BaseAvmPrimitive(AvmPrimitiveProcessor & aProcessor) |
| : AvmObject( ), |
| PRIMITIVE_PROCESSOR( aProcessor ) |
| { |
| //!! NOTHING |
| } |
| |
| /** |
| * DESTRUCTOR |
| */ |
| virtual ~BaseAvmPrimitive() |
| { |
| //!! NOTHING |
| } |
| |
| |
| /** |
| * the RUN statement |
| */ |
| |
| inline virtual bool run(ExecutionEnvironment & ENV) |
| { |
| //!! NOTHING |
| |
| return( true ); |
| } |
| |
| |
| /** |
| * the RESUME instruction |
| */ |
| virtual bool resume(ExecutionEnvironment & ENV); |
| |
| |
| /** |
| * the EVAL instruction |
| */ |
| virtual bool seval(EvaluationEnvironment & ENV); |
| |
| /** |
| * the EVAL x 2 instruction |
| */ |
| virtual bool sevalx2(EvaluationEnvironment & ENV); |
| |
| |
| |
| protected: |
| /** |
| * ATTRIBUTES |
| */ |
| AvmPrimitiveProcessor & PRIMITIVE_PROCESSOR; |
| |
| |
| }; |
| |
| |
| |
| |
| /** |
| * Macro for smart primitive declaration. |
| */ |
| #define AVM_PRIMITIVE_CLASS_HEADER(classname, supername) \ |
| class classname : public supername \ |
| { \ |
| public: \ |
| classname(AvmPrimitiveProcessor & aProcessor) \ |
| : supername( aProcessor ) \ |
| { /*!! NOTHING !!*/ } \ |
| virtual ~classname() \ |
| { /*!! NOTHING !!*/ } |
| |
| |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| ///// PRIMITIVE:> RUN |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| #define AVM_PRIMITIVE_RUN_CLASS_HEADER(classname, supername) \ |
| AVM_PRIMITIVE_CLASS_HEADER(AvmPrimitive_##classname, supername) \ |
| virtual bool run(ExecutionEnvironment & ENV); |
| |
| |
| #define AVM_PRIMITIVE_RUN_CLASS(classname, supername) \ |
| AVM_PRIMITIVE_RUN_CLASS_HEADER(classname, supername) \ |
| }; |
| |
| |
| |
| #define AVM_PRIMITIVE_RUN_RESUME_CLASS_HEADER(classname, supername) \ |
| AVM_PRIMITIVE_CLASS_HEADER(AvmPrimitive_##classname, supername) \ |
| virtual bool run(ExecutionEnvironment & ENV); \ |
| virtual bool resume(ExecutionEnvironment & ENV); |
| |
| |
| #define AVM_PRIMITIVE_RUN_RESUME_CLASS(classname, supername) \ |
| AVM_PRIMITIVE_RUN_RESUME_CLASS_HEADER(classname, supername) \ |
| }; |
| |
| |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| ///// PRIMITIVE:> SEVAL |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| #define AVM_PRIMITIVE_EVAL_CLASS_HEADER(classname, supername) \ |
| AVM_PRIMITIVE_CLASS_HEADER(AvmPrimitive_##classname, supername) \ |
| virtual bool seval(EvaluationEnvironment & ENV); |
| |
| |
| #define AVM_PRIMITIVE_EVAL_CLASS(classname, supername) \ |
| AVM_PRIMITIVE_EVAL_CLASS_HEADER(classname, supername) \ |
| }; |
| |
| |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| ///// PRIMITIVE:> RUN & SEVAL |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| #define AVM_PRIMITIVE_RUN_EVAL_CLASS_HEADER(classname, supername) \ |
| AVM_PRIMITIVE_CLASS_HEADER(AvmPrimitive_##classname, supername) \ |
| virtual bool run(ExecutionEnvironment & ENV); \ |
| virtual bool seval(EvaluationEnvironment & ENV); |
| |
| |
| #define AVM_PRIMITIVE_RUN_EVAL_CLASS(classname, supername) \ |
| AVM_PRIMITIVE_RUN_EVAL_CLASS_HEADER(classname, supername) \ |
| }; |
| |
| |
| |
| |
| } |
| |
| #endif /* BASEAVMPRIMITIVE_H_ */ |