| // |
| // Copyright 2002 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_autogen.h" |
| |
| #include "common/debug.h" |
| |
| namespace sh |
| { |
| |
| const char *GetOperatorString(TOperator op) |
| { |
| switch (op) |
| { |
| // Note: EOpNull and EOpCall* can't be handled here. |
| |
| case EOpNegative: |
| return "-"; |
| case EOpPositive: |
| return "+"; |
| case EOpLogicalNot: |
| return "!"; |
| case EOpBitwiseNot: |
| return "~"; |
| |
| case EOpPostIncrement: |
| return "++"; |
| case EOpPostDecrement: |
| return "--"; |
| case EOpPreIncrement: |
| return "++"; |
| case EOpPreDecrement: |
| return "--"; |
| |
| case EOpArrayLength: |
| return ".length()"; |
| |
| case EOpAdd: |
| return "+"; |
| case EOpSub: |
| return "-"; |
| case EOpMul: |
| return "*"; |
| case EOpDiv: |
| return "/"; |
| case EOpIMod: |
| return "%"; |
| |
| case EOpEqual: |
| return "=="; |
| case EOpNotEqual: |
| return "!="; |
| 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: |
| case EOpMatrixTimesMatrix: |
| 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 EOpAssign: |
| 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: |
| UNREACHABLE(); |
| break; |
| } |
| return ""; |
| } |
| |
| bool IsAssignment(TOperator op) |
| { |
| switch (op) |
| { |
| case EOpPostIncrement: |
| case EOpPostDecrement: |
| case EOpPreIncrement: |
| case EOpPreDecrement: |
| case EOpAssign: |
| case EOpAddAssign: |
| case EOpSubAssign: |
| case EOpMulAssign: |
| case EOpVectorTimesMatrixAssign: |
| case EOpVectorTimesScalarAssign: |
| case EOpMatrixTimesScalarAssign: |
| case EOpMatrixTimesMatrixAssign: |
| case EOpDivAssign: |
| case EOpIModAssign: |
| case EOpBitShiftLeftAssign: |
| case EOpBitShiftRightAssign: |
| case EOpBitwiseAndAssign: |
| case EOpBitwiseXorAssign: |
| case EOpBitwiseOrAssign: |
| return true; |
| default: |
| return false; |
| } |
| } |
| |
| } // namespace sh |