blob: b2fa7afb6e3c5cdca5ab4db64e447904102ae7f9 [file] [log] [blame]
//
// Copyright (c) 2002-2015 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
#include "compiler/translator/Operator.h"
const char *GetOperatorString(TOperator op)
{
switch (op)
{
// Note: ops from EOpNull to EOpPrototype can't be handled here.
case EOpNegative: return "-";
case EOpPositive: return "+";
case EOpLogicalNot: return "!";
case EOpVectorLogicalNot: return "not";
case EOpBitwiseNot: return "~";
case EOpPostIncrement: return "++";
case EOpPostDecrement: return "--";
case EOpPreIncrement: return "++";
case EOpPreDecrement: return "--";
case EOpAdd: return "+";
case EOpSub: return "-";
case EOpMul: return "*";
case EOpDiv: return "/";
case EOpIMod: return "%";
case EOpEqual: return "==";
case EOpNotEqual: return "!=";
case EOpVectorEqual: return "equal";
case EOpVectorNotEqual: return "notEqual";
case EOpLessThan: return "<";
case EOpGreaterThan: return ">";
case EOpLessThanEqual: return "<=";
case EOpGreaterThanEqual: return ">=";
case EOpComma: return ",";
// Fall-through.
case EOpVectorTimesScalar:
case EOpVectorTimesMatrix:
case EOpMatrixTimesVector:
case EOpMatrixTimesScalar: return "*";
case EOpLogicalOr: return "||";
case EOpLogicalXor: return "^^";
case EOpLogicalAnd: return "&&";
case EOpBitShiftLeft: return "<<";
case EOpBitShiftRight: return ">>";
case EOpBitwiseAnd: return "&";
case EOpBitwiseXor: return "^";
case EOpBitwiseOr: return "|";
// Fall-through.
case EOpIndexDirect:
case EOpIndexIndirect: return "[]";
case EOpIndexDirectStruct:
case EOpIndexDirectInterfaceBlock: return ".";
case EOpVectorSwizzle: return ".";
case EOpRadians: return "radians";
case EOpDegrees: return "degrees";
case EOpSin: return "sin";
case EOpCos: return "cos";
case EOpTan: return "tan";
case EOpAsin: return "asin";
case EOpAcos: return "acos";
case EOpAtan: return "atan";
case EOpSinh: return "sinh";
case EOpCosh: return "cosh";
case EOpTanh: return "tanh";
case EOpAsinh: return "asinh";
case EOpAcosh: return "acosh";
case EOpAtanh: return "atanh";
case EOpPow: return "pow";
case EOpExp: return "exp";
case EOpLog: return "log";
case EOpExp2: return "exp2";
case EOpLog2: return "log2";
case EOpSqrt: return "sqrt";
case EOpInverseSqrt: return "inversesqrt";
case EOpAbs: return "abs";
case EOpSign: return "sign";
case EOpFloor: return "floor";
case EOpCeil: return "ceil";
case EOpFract: return "fract";
case EOpMod: return "mod";
case EOpMin: return "min";
case EOpMax: return "max";
case EOpClamp: return "clamp";
case EOpMix: return "mix";
case EOpStep: return "step";
case EOpSmoothStep: return "smoothstep";
case EOpFloatBitsToInt: return "floatBitsToInt";
case EOpFloatBitsToUint: return "floatBitsToUint";
case EOpIntBitsToFloat: return "intBitsToFloat";
case EOpUintBitsToFloat: return "uintBitsToFloat";
case EOpPackSnorm2x16: return "packSnorm2x16";
case EOpPackUnorm2x16: return "packUnorm2x16";
case EOpPackHalf2x16: return "packHalf2x16";
case EOpUnpackSnorm2x16: return "unpackSnorm2x16";
case EOpUnpackUnorm2x16: return "unpackUnorm2x16";
case EOpUnpackHalf2x16: return "unpackHalf2x16";
case EOpLength: return "length";
case EOpDistance: return "distance";
case EOpDot: return "dot";
case EOpCross: return "cross";
case EOpNormalize: return "normalize";
case EOpFaceForward: return "faceforward";
case EOpReflect: return "reflect";
case EOpRefract: return "refract";
case EOpDFdx: return "dFdx";
case EOpDFdy: return "dFdy";
case EOpFwidth: return "fwidth";
case EOpMatrixTimesMatrix: return "*";
case EOpOuterProduct: return "outerProduct";
case EOpTranspose: return "transpose";
case EOpDeterminant: return "determinant";
case EOpInverse: return "inverse";
case EOpAny: return "any";
case EOpAll: return "all";
case EOpKill: return "kill";
case EOpReturn: return "return";
case EOpBreak: return "break";
case EOpContinue: return "continue";
case EOpConstructInt: return "int";
case EOpConstructUInt: return "uint";
case EOpConstructBool: return "bool";
case EOpConstructFloat: return "float";
case EOpConstructVec2: return "vec2";
case EOpConstructVec3: return "vec3";
case EOpConstructVec4: return "vec4";
case EOpConstructBVec2: return "bvec2";
case EOpConstructBVec3: return "bvec3";
case EOpConstructBVec4: return "bvec4";
case EOpConstructIVec2: return "ivec2";
case EOpConstructIVec3: return "ivec3";
case EOpConstructIVec4: return "ivec4";
case EOpConstructUVec2: return "uvec2";
case EOpConstructUVec3: return "uvec3";
case EOpConstructUVec4: return "uvec4";
case EOpConstructMat2: return "mat2";
case EOpConstructMat3: return "mat3";
case EOpConstructMat4: return "mat4";
// Note: EOpConstructStruct can't be handled here
case EOpAssign: return "=";
case EOpInitialize: return "=";
case EOpAddAssign: return "+=";
case EOpSubAssign: return "-=";
// Fall-through.
case EOpMulAssign:
case EOpVectorTimesMatrixAssign:
case EOpVectorTimesScalarAssign:
case EOpMatrixTimesScalarAssign:
case EOpMatrixTimesMatrixAssign: return "*=";
case EOpDivAssign: return "/=";
case EOpIModAssign: return "%=";
case EOpBitShiftLeftAssign: return "<<=";
case EOpBitShiftRightAssign: return ">>=";
case EOpBitwiseAndAssign: return "&=";
case EOpBitwiseXorAssign: return "^=";
case EOpBitwiseOrAssign: return "|=";
default: break;
}
return "";
}