1f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===- Operator.cpp -------------------------------------------------------===// 2f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// 3f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// The MCLinker Project 4f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// 5f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// This file is distributed under the University of Illinois Open Source 6f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// License. See LICENSE.TXT for details. 7f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// 8f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===// 937b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/Operator.h" 1037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 1137b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/BinaryOp.h" 1237b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/NullaryOp.h" 1337b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/Operand.h" 1437b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/UnaryOp.h" 1537b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Script/TernaryOp.h" 1637b74a387bb3993387029859c2d9d051c41c724eStephen Hines#include "mcld/Support/raw_ostream.h" 1737b74a387bb3993387029859c2d9d051c41c724eStephen Hines 1837b74a387bb3993387029859c2d9d051c41c724eStephen Hinesnamespace mcld { 1937b74a387bb3993387029859c2d9d051c41c724eStephen Hines 20f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===// 21f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines// Operator 22f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines//===----------------------------------------------------------------------===// 23f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hinesconst char* Operator::OpNames[] = { 2437b74a387bb3993387029859c2d9d051c41c724eStephen Hines "+", "-", "!", 2537b74a387bb3993387029859c2d9d051c41c724eStephen Hines "~", "*", "/", 2637b74a387bb3993387029859c2d9d051c41c724eStephen Hines "%", "+", "-", 2737b74a387bb3993387029859c2d9d051c41c724eStephen Hines "<<", ">>", "<", 2837b74a387bb3993387029859c2d9d051c41c724eStephen Hines "<=", ">", ">=", 2937b74a387bb3993387029859c2d9d051c41c724eStephen Hines "==", "!=", "&", 3037b74a387bb3993387029859c2d9d051c41c724eStephen Hines "^", "|", "&&", 3137b74a387bb3993387029859c2d9d051c41c724eStephen Hines "||", "?:", "=", 3237b74a387bb3993387029859c2d9d051c41c724eStephen Hines "+=", "-=", "*=", 3337b74a387bb3993387029859c2d9d051c41c724eStephen Hines "/=", "&=", "|=", 3437b74a387bb3993387029859c2d9d051c41c724eStephen Hines "<<=", ">>=", "ABSOLUTE", 3537b74a387bb3993387029859c2d9d051c41c724eStephen Hines "ADDR", "ALIGN", "ALIGNOF", 3637b74a387bb3993387029859c2d9d051c41c724eStephen Hines "BLOCK", "DATA_SEGMENT_ALIGN", "DATA_SEGMENT_END", 3737b74a387bb3993387029859c2d9d051c41c724eStephen Hines "DATA_SEGMENT_RELRO_END", "DEFINED", "LENGTH", 3837b74a387bb3993387029859c2d9d051c41c724eStephen Hines "LOADADDR", "MAX", "MIN", 3937b74a387bb3993387029859c2d9d051c41c724eStephen Hines "NEXT", "ORIGIN", "SEGMENT_START", 4037b74a387bb3993387029859c2d9d051c41c724eStephen Hines "SIZEOF", "SIZEOF_HEADERS", "MAXPAGESIZE", 4137b74a387bb3993387029859c2d9d051c41c724eStephen Hines "COMMONPAGESIZE"}; 4237b74a387bb3993387029859c2d9d051c41c724eStephen Hines 4337b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator::Operator(Arity pArity, Type pType) 4437b74a387bb3993387029859c2d9d051c41c724eStephen Hines : ExprToken(ExprToken::OPERATOR), m_Arity(pArity), m_Type(pType) { 45f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines m_pIntOperand = IntOperand::create(0); 46f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 47f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 4837b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator::~Operator() { 49f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 50f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 5137b74a387bb3993387029859c2d9d051c41c724eStephen Hinesvoid Operator::dump() const { 52f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines mcld::outs() << OpNames[type()]; 53f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 54f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 55f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines/* Nullary operator */ 5637b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 5737b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::SIZEOF_HEADERS>() { 58f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static NullaryOp<Operator::SIZEOF_HEADERS> op; 59f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 60f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 61f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 6237b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 6337b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::MAXPAGESIZE>() { 64f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static NullaryOp<Operator::MAXPAGESIZE> op; 65f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 66f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 67f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 6837b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 6937b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::COMMONPAGESIZE>() { 70f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static NullaryOp<Operator::COMMONPAGESIZE> op; 71f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 72f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 73f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 74f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines/* Unary operator */ 7537b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 7637b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::UNARY_PLUS>() { 77f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::UNARY_PLUS> op; 78f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 79f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 80f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 8137b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 8237b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::UNARY_MINUS>() { 83f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::UNARY_MINUS> op; 84f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 85f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 86f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 8737b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 8837b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::LOGICAL_NOT>() { 89f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::LOGICAL_NOT> op; 90f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 91f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 92f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 9337b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 9437b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::BITWISE_NOT>() { 95f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::BITWISE_NOT> op; 96f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 97f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 98f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 9937b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 10037b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::ABSOLUTE>() { 101f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::ABSOLUTE> op; 102f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 103f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 104f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 10537b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 10637b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::ADDR>() { 107f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::ADDR> op; 108f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 109f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 110f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 11137b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 11237b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::ALIGNOF>() { 113f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::ALIGNOF> op; 114f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 115f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 116f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 11737b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 11837b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::DATA_SEGMENT_END>() { 119f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::DATA_SEGMENT_END> op; 120f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 121f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 122f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 12337b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 12437b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::DEFINED>() { 125f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::DEFINED> op; 126f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 127f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 128f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 12937b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 13037b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::LENGTH>() { 131f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::LENGTH> op; 132f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 133f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 134f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 13537b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 13637b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::LOADADDR>() { 137f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::LOADADDR> op; 138f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 139f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 140f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 14137b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 14237b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::NEXT>() { 143f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::NEXT> op; 144f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 145f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 146f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 14737b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 14837b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::ORIGIN>() { 149f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::ORIGIN> op; 150f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 151f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 152f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 15337b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 15437b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::SIZEOF>() { 155f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static UnaryOp<Operator::SIZEOF> op; 156f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 157f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 158f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 159f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines/* Binary operator */ 16037b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 16137b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::MUL>() { 162f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::MUL> op; 163f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 164f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 165f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 16637b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 16737b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::DIV>() { 168f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::DIV> op; 169f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 170f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 171f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 17237b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 17337b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::MOD>() { 174f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::MOD> op; 175f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 176f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 177f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 17837b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 17937b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::ADD>() { 180f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::ADD> op; 181f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 182f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 183f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 18437b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 18537b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::SUB>() { 186f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::SUB> op; 187f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 188f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 189f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 19037b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 19137b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::LSHIFT>() { 192f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::LSHIFT> op; 193f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 194f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 195f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 19637b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 19737b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::RSHIFT>() { 198f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::RSHIFT> op; 199f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 200f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 201f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 20237b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 20337b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::LT>() { 204f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::LT> op; 205f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 206f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 207f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 20837b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 20937b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::LE>() { 210f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::LE> op; 211f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 212f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 213f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 21437b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 21537b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::GT>() { 216f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::GT> op; 217f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 218f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 219f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 22037b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 22137b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::GE>() { 222f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::GE> op; 223f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 224f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 225f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 22637b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 22737b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::EQ>() { 228f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::EQ> op; 229f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 230f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 231f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 23237b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 23337b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::NE>() { 234f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::NE> op; 235f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 236f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 237f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 23837b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 23937b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::BITWISE_AND>() { 240f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::BITWISE_AND> op; 241f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 242f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 243f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 24437b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 24537b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::BITWISE_XOR>() { 246f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::BITWISE_XOR> op; 247f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 248f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 249f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 25037b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 25137b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::BITWISE_OR>() { 252f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::BITWISE_OR> op; 253f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 254f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 255f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 25637b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 25737b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::LOGICAL_AND>() { 258f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::LOGICAL_AND> op; 259f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 260f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 261f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 26237b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 26337b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::LOGICAL_OR>() { 264f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::LOGICAL_OR> op; 265f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 266f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 267f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 26837b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 26937b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::ALIGN>() { 270f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::ALIGN> op; 271f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 272f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 273f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 27437b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 27537b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::DATA_SEGMENT_RELRO_END>() { 276f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::DATA_SEGMENT_RELRO_END> op; 277f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 278f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 279f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 28037b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 28137b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::MAX>() { 282f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::MAX> op; 283f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 284f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 285f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 28637b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 28737b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::MIN>() { 288f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::MIN> op; 289f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 290f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 291f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 29237b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 29337b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::SEGMENT_START>() { 294f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static BinaryOp<Operator::SEGMENT_START> op; 295f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 296f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 297f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 298f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines/* Ternary operator */ 29937b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 30037b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::TERNARY_IF>() { 301f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static TernaryOp<Operator::TERNARY_IF> op; 302f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 303f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 304f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines 30537b74a387bb3993387029859c2d9d051c41c724eStephen Hinestemplate <> 30637b74a387bb3993387029859c2d9d051c41c724eStephen HinesOperator& Operator::create<Operator::DATA_SEGMENT_ALIGN>() { 307f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines static TernaryOp<Operator::DATA_SEGMENT_ALIGN> op; 308f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines return op; 309f33f6de54db174aa679a4b6d1e040d37e95541c0Stephen Hines} 31037b74a387bb3993387029859c2d9d051c41c724eStephen Hines 31137b74a387bb3993387029859c2d9d051c41c724eStephen Hines} // namespace mcld 312