Initial checkin of TOSA reference_model and tests

Change-Id: I2f8e7fa63e2ae40203e57d2cc8814bde3b312cb6
Signed-off-by: Eric Kunze <eric.kunze@arm.com>
diff --git a/serialization/operator.def b/serialization/operator.def
new file mode 100644
index 0000000..66d3784
--- /dev/null
+++ b/serialization/operator.def
@@ -0,0 +1,123 @@
+
+// Copyright (c) 2020, ARM Limited.
+//
+//    Licensed under the Apache License, Version 2.0 (the "License");
+//    you may not use this file except in compliance with the License.
+//    You may obtain a copy of the License at
+//
+//         http://www.apache.org/licenses/LICENSE-2.0
+//
+//    Unless required by applicable law or agreed to in writing, software
+//    distributed under the License is distributed on an "AS IS" BASIS,
+//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//    See the License for the specific language governing permissions and
+//    limitations under the License.
+
+/*
+  Syntax:
+    DEF_OPERATOR(MLIR_NAME, SCHEMA_NAME, REF_IMPL_NAME, OPTIONS, QUANT_INFO)
+
+  Description:
+    MLIR_NAME: the symbolic string of this op, must match tosa_ops.td
+    SCHEMA_NAME: corresponding operator name, must match "enum Op" in serialization/tosa.fbs
+    REF_IMPL_NAME: name used internally in tosa reference implementation
+    OPTIONS: compile time constant options of this op, corresponding to operator_option.def
+    QUANT_INFO: quantization infomation of this op, corresponding to quant_info.def
+*/
+
+
+/* tensor operators */
+DEF_OPERATOR(argmax,                  ARGMAX,                   ArgMax,                 Axis,             None)
+DEF_OPERATOR(avg_pool2d,              AVG_POOL2D,               AvgPool2d,              Pool2d,           Unary)
+DEF_OPERATOR(conv2d,                  CONV2D,                   Conv2d,                 Conv2d,           Conv)
+DEF_OPERATOR(conv3d,                  CONV3D,                   Conv3d,                 None,             None)
+DEF_OPERATOR(depthwise_conv2d,        DEPTHWISE_CONV2D,         DepthwiseConv2d,        Conv2d,           Conv)
+DEF_OPERATOR(fully_connected,         FULLY_CONNECTED,          FullyConnected,         None,             Conv)
+DEF_OPERATOR(matmul,                  MATMUL,                   MatMul,                 None,             MatMul)
+DEF_OPERATOR(max_pool2d,              MAX_POOL2D,               MaxPool2d,              Pool2d,           None)
+DEF_OPERATOR(transpose_conv2d,        TRANSPOSE_CONV2D,         TransposeConv2d,        TransposeConv2d,  Conv)
+
+/* activation */
+DEF_OPERATOR(clamp,                   CLAMP,                    Clamp,                  Clamp,            None)
+DEF_OPERATOR(reluN,                   RELUN,                    ReluN,                  ReluN,            None)
+DEF_OPERATOR(sigmoid,                 SIGMOID,                  Sigmoid,                None,             None)
+DEF_OPERATOR(tanh,                    TANH,                     Tanh,                   None,             None)
+
+/* elementwise - binary */
+DEF_OPERATOR(add,                     ADD,                      Add,                    None,             None)
+DEF_OPERATOR(arithmetic_right_shift,  ARITHMETIC_RIGHT_SHIFT,   ArithmeticRightShift,   None,             None)
+DEF_OPERATOR(bitwise_and,             BITWISE_AND,              BitwiseAnd,             None,             None)
+DEF_OPERATOR(bitwise_or,              BITWISE_OR,               BitwiseOr,              None,             None)
+DEF_OPERATOR(bitwise_xor,             BITWISE_XOR,              BitwiseXor,             None,             None)
+DEF_OPERATOR(logical_and,             LOGICAL_AND,              LogicalAnd,             None,             None)
+DEF_OPERATOR(logical_left_shift,      LOGICAL_LEFT_SHIFT,       LogicalLeftShift,       None,             None)
+DEF_OPERATOR(logical_right_shift,     LOGICAL_RIGHT_SHIFT,      LogicalRightShift,      None,             None)
+DEF_OPERATOR(logical_or,              LOGICAL_OR,               LogicalOr,              None,             None)
+DEF_OPERATOR(logical_xor,             LOGICAL_XOR,              LogicalXor,             None,             None)
+DEF_OPERATOR(maximum,                 MAXIMUM,                  Maximum,                None,             None)
+DEF_OPERATOR(minimum,                 MINIMUM,                  Minimum,                None,             None)
+DEF_OPERATOR(mul,                     MUL,                      Mul,                    None,             None)
+DEF_OPERATOR(pow,                     POW,                      Pow,                    None,             None)
+DEF_OPERATOR(sub,                     SUB,                      Sub,                    None,             None)
+DEF_OPERATOR(table,                   TABLE,                    Table,                  None,             None)
+
+/* elementwise - unary */
+DEF_OPERATOR(abs,                     ABS,                      Abs,                    None,             None)
+DEF_OPERATOR(bitwise_not,             BITWISE_NOT,              BitwiseNot,             None,             None)
+DEF_OPERATOR(ceil,                    CEIL,                     Ceil,                   None,             None)
+DEF_OPERATOR(clz,                     CLZ,                      Clz,                    None,             None)
+DEF_OPERATOR(exp,                     EXP,                      Exp,                    None,             None)
+DEF_OPERATOR(floor,                   FLOOR,                    Floor,                  None,             None)
+DEF_OPERATOR(log,                     LOG,                      Log,                    None,             None)
+DEF_OPERATOR(logical_not,             LOGICAL_NOT,              LogicalNot,             None,             None)
+DEF_OPERATOR(negate,                  NEGATE,                   Negate,                 None,             Unary)
+DEF_OPERATOR(reciprocal,              RECIPROCAL,               Reciprocal,             None,             None)
+DEF_OPERATOR(rsqrt,                   RSQRT,                    Rsqrt,                  None,             None)
+
+/* elementwise - ternary */
+DEF_OPERATOR(select,                  SELECT,                   Select,                 None,             None)
+
+/* logical */
+DEF_OPERATOR(equal,                   EQUAL,                    Equal,                  None,             None)
+DEF_OPERATOR(greater,                 GREATER,                  Greater,                None,             None)
+DEF_OPERATOR(greater_equal,           GREATER_EQUAL,            GreaterEqual,           None,             None)
+
+/* reduction */
+DEF_OPERATOR(reduce_any,              REDUCE_ANY,               ReduceAny,              Reduce,           None)
+DEF_OPERATOR(reduce_all,              REDUCE_ALL,               ReduceAll,              Reduce,           None)
+DEF_OPERATOR(reduce_max,              REDUCE_MAX,               ReduceMax,              Reduce,           None)
+DEF_OPERATOR(reduce_min,              REDUCE_MIN,               ReduceMin,              Reduce,           None)
+DEF_OPERATOR(reduce_prod,             REDUCE_PRODUCT,           ReduceProduct,          Reduce,           None)
+DEF_OPERATOR(reduce_sum,              REDUCE_SUM,               ReduceSum,              Reduce,           None)
+
+/* memory operation */
+DEF_OPERATOR(concat,                  CONCAT,                   Concat,                 Axis,             None)
+DEF_OPERATOR(pad,                     PAD,                      Pad,                    None,             Pad)
+DEF_OPERATOR(reshape,                 RESHAPE,                  Reshape,                Reshape,          None)
+DEF_OPERATOR(reverse,                 REVERSE,                  Reverse,                Reverse,          None)
+DEF_OPERATOR(slice,                   SLICE,                    Slice,                  Slice,            None)
+DEF_OPERATOR(tile,                    TILE,                     Tile,                   Tile,             None)
+DEF_OPERATOR(transpose,               TRANSPOSE,                Transpose,              None,             None)
+
+/* gather/scatter */
+DEF_OPERATOR(gather,                  GATHER,                   Gather,                 Axis,             None)
+
+/* image */
+DEF_OPERATOR(resize,                  RESIZE,                   Resize,                 Resize,           None)
+
+/* quantization */
+DEF_OPERATOR(cast,                    CAST,                     Cast,                   None,             None)
+DEF_OPERATOR(rescale,                 RESCALE,                  Rescale,                Rescale,          None)
+
+/* data nodes */
+DEF_OPERATOR(const,                   CONST,                    Const,                  None,             None)
+DEF_OPERATOR(placeholder,             PLACEHOLDER,              Placeholder,            None,             None)
+DEF_OPERATOR(identity,                IDENTITY,                 Identity,               None,             None)
+DEF_OPERATOR(identityn,               IDENTITYN,                IdentityN,              None,             None)
+
+/* custom operations */
+DEF_OPERATOR(custom,                  CUSTOM,                   Custom,                 None,             None)
+
+/* control flow operators */
+DEF_OPERATOR(cond_if,                 COND_IF,                  CondIf,                 CondIf,           None)
+DEF_OPERATOR(while_loop,              WHILE_LOOP,               WhileLoop,              WhileLoop,        None)