COMPMID-1730: Document best practices

Change-Id: I720a3beeb0c6503938f637b42fc45741e4aa1ab5
Signed-off-by: Michele Di Giorgio <michele.digiorgio@arm.com>
Reviewed-on: https://review.mlplatform.org/c/2263
Reviewed-by: Manuel Bottini <manuel.bottini@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Michalis Spyrou <michalis.spyrou@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
diff --git a/docs/06_functions_list.dox b/docs/06_functions_list.dox
new file mode 100644
index 0000000..48016ed
--- /dev/null
+++ b/docs/06_functions_list.dox
@@ -0,0 +1,366 @@
+///
+/// Copyright (c) 2018-2019 ARM Limited.
+///
+/// SPDX-License-Identifier: MIT
+///
+/// Permission is hereby granted, free of charge, to any person obtaining a copy
+/// of this software and associated documentation files (the "Software"), to
+/// deal in the Software without restriction, including without limitation the
+/// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+/// sell copies of the Software, and to permit persons to whom the Software is
+/// furnished to do so, subject to the following conditions:
+///
+/// The above copyright notice and this permission notice shall be included in all
+/// copies or substantial portions of the Software.
+///
+/// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+/// SOFTWARE.
+///
+namespace arm_compute
+{
+/**
+
+@page functions_list List of functions
+
+@tableofcontents
+
+@section S6_1 NEON functions
+
+- @ref IFunction
+    - @ref INESimpleFunction
+        - @ref NEAbsoluteDifference
+        - @ref NEArithmeticAddition
+        - @ref NEArithmeticSubtraction
+        - @ref NEBox3x3
+        - @ref NECast
+        - @ref NEConvolution3x3
+        - @ref NEConvolutionRectangle
+        - @ref NEDilate
+        - @ref NEElementwiseComparison
+        - @ref NEElementwiseComparisonStatic
+        - @ref NEElementwiseDivision
+        - @ref NEElementwiseMax
+        - @ref NEElementwiseMin
+        - @ref NEElementwiseSquaredDiff
+        - @ref NEErode
+        - @ref NEExpLayer
+        - @ref NEGaussian3x3
+        - @ref NEIntegralImage
+        - @ref NEMedian3x3
+        - @ref NENonLinearFilter
+        - @ref NENonMaximaSuppression3x3
+        - @ref NEPixelWiseMultiplication
+        - @ref NEPReluLayer
+        - @ref NERemap
+        - @ref NERsqrtLayer
+        - @ref NEScharr3x3
+        - @ref NESelect
+        - @ref NESobel3x3
+        - @ref NEStridedSlice
+        - @ref NEWarpAffine
+        - @ref NEWarpPerspective
+    - @ref INESimpleFunctionNoBorder
+        - @ref NEAccumulate
+        - @ref NEAccumulateSquared
+        - @ref NEAccumulateWeighted
+        - @ref NEActivationLayer
+        - @ref NEBatchToSpaceLayer
+        - @ref NEBitwiseAnd
+        - @ref NEBitwiseNot
+        - @ref NEBitwiseOr
+        - @ref NEBitwiseXor
+        - @ref NEChannelCombine
+        - @ref NEChannelExtract
+        - @ref NEChannelShuffleLayer
+        - @ref NECol2Im
+        - @ref NEColorConvert
+        - @ref NECopy
+        - @ref NEDepthConvertLayer
+        - @ref NEFlattenLayer
+        - @ref NEFloor
+        - @ref NEFullyConnectedLayerReshapeWeights
+        - @ref NEGather
+        - @ref NEGEMMInterleave4x4
+        - @ref NEGEMMLowpQuantizeDownInt32ToUint8Scale
+        - @ref NEGEMMLowpQuantizeDownInt32ToUint8ScaleByFixedPoint
+        - @ref NEGEMMTranspose1xW
+        - @ref NEHOGDetector
+        - @ref NEMagnitude
+        - @ref NEMeanStdDevNormalizationLayer
+        - @ref NEPermute
+        - @ref NEPhase
+        - @ref NEPriorBoxLayer
+        - @ref NEReorgLayer
+        - @ref NEReshapeLayer
+        - @ref NEReverse
+        - @ref NESlice
+        - @ref NETableLookup
+        - @ref NEThreshold
+        - @ref NETile
+        - @ref NETranspose
+        - @ref NEYOLOLayer
+    - @ref NEArgMinMaxLayer
+    - @ref NEBatchNormalizationLayer
+    - @ref NECannyEdge
+    - @ref NEComplexPixelWiseMultiplication
+    - @ref NEConcatenateLayer
+    - @ref NEConvertFullyConnectedWeights
+    - @ref NEConvolutionLayer
+    - @ref NEConvolutionLayerReshapeWeights
+    - @ref NEConvolutionSquare &lt;matrix_size&gt;
+    - @ref NECropResize
+    - @ref NEDeconvolutionLayer
+    - @ref NEDepthwiseConvolutionAssemblyDispatch
+    - @ref NEDepthwiseConvolutionLayer
+    - @ref NEDepthwiseConvolutionLayerOptimized
+    - @ref NEDequantizationLayer
+    - @ref NEDerivative
+    - @ref NEDirectConvolutionLayer
+    - @ref NEEqualizeHistogram
+    - @ref NEFastCorners
+    - @ref NEFFT1D
+    - @ref NEFFT2D
+    - @ref NEFFTConvolutionLayer
+    - @ref NEFillBorder
+    - @ref NEFullyConnectedLayer
+    - @ref NEFuseBatchNormalization
+    - @ref NEGaussian5x5
+    - @ref NEGaussianPyramid
+        - @ref NEGaussianPyramidHalf
+        - @ref NEGaussianPyramidOrb
+    - @ref NEGEMM
+    - @ref NEGEMMAssemblyDispatch
+    - @ref NEGEMMConvolutionLayer
+    - @ref NEGEMMLowpAssemblyMatrixMultiplyCore
+    - @ref NEGEMMLowpMatrixMultiplyCore
+    - @ref NEHarrisCorners
+    - @ref NEHistogram
+    - @ref NEHOGDescriptor
+    - @ref NEHOGGradient
+    - @ref NEHOGMultiDetection
+    - @ref NEIm2Col
+    - @ref NEL2NormalizeLayer
+    - @ref NELaplacianPyramid
+    - @ref NELaplacianReconstruct
+    - @ref NELocallyConnectedLayer
+    - @ref NELSTMLayer
+    - @ref NELSTMLayerQuantized
+    - @ref NEMeanStdDev
+    - @ref NEMinMaxLocation
+    - @ref NENormalizationLayer
+    - @ref NEOpticalFlow
+    - @ref NEPadLayer
+    - @ref NEPoolingLayer
+    - @ref NEQuantizationLayer
+    - @ref NERange
+    - @ref NEReduceMean
+    - @ref NEReductionOperation
+    - @ref NERNNLayer
+    - @ref NEROIPoolingLayer
+    - @ref NEScale
+    - @ref NESimpleAssemblyFunction
+    - @ref NESobel5x5
+    - @ref NESobel7x7
+    - @ref NESoftmaxLayer
+    - @ref NESpaceToBatchLayer
+    - @ref NESpaceToDepthLayer
+    - @ref NESplit
+    - @ref NEStackLayer
+    - @ref NEUnstack
+    - @ref NEUpsampleLayer
+    - @ref NEWinogradConvolutionLayer
+
+@section S6_2 OpenCL functions
+
+- @ref IFunction
+    - @ref CLBatchNormalizationLayer
+    - @ref CLBatchToSpaceLayer
+    - @ref CLCannyEdge
+    - @ref CLComplexPixelWiseMultiplication
+    - @ref CLConcatenateLayer
+    - @ref CLConvolutionLayer
+    - @ref CLConvolutionLayerReshapeWeights
+    - @ref CLConvolutionSquare &lt;matrix_size&gt;
+    - @ref CLCropResize
+    - @ref CLDeconvolutionLayer
+    - @ref CLDeconvolutionLayerUpsample
+    - @ref CLDepthToSpaceLayer
+    - @ref CLDepthwiseConvolutionLayer
+    - @ref CLDepthwiseConvolutionLayer3x3
+    - @ref CLDequantizationLayer
+    - @ref CLDirectConvolutionLayer
+    - @ref CLDirectDeconvolutionLayer
+    - @ref CLEqualizeHistogram
+    - @ref CLFastCorners
+    - @ref CLFFT1D
+    - @ref CLFFT2D
+    - @ref CLFFTConvolutionLayer
+    - @ref CLFullyConnectedLayer
+    - @ref CLFuseBatchNormalization
+    - @ref CLGaussian5x5
+    - @ref CLGaussianPyramid
+        - @ref CLGaussianPyramidHalf
+        - @ref CLGaussianPyramidOrb
+    - @ref CLGEMM
+    - @ref CLGEMMConvolutionLayer
+    - @ref CLGEMMDeconvolutionLayer
+    - @ref CLGEMMLowpMatrixMultiplyCore
+    - @ref CLGenerateProposalsLayer
+    - @ref CLHarrisCorners
+    - @ref CLHistogram
+    - @ref CLHOGDescriptor
+    - @ref CLHOGDetector
+    - @ref CLHOGGradient
+    - @ref CLHOGMultiDetection
+    - @ref CLIntegralImage
+    - @ref CLL2NormalizeLayer
+    - @ref CLLaplacianPyramid
+    - @ref CLLaplacianReconstruct
+    - @ref CLLocallyConnectedLayer
+    - @ref CLLSTMLayer
+    - @ref CLLSTMLayerQuantized
+    - @ref CLMeanStdDev
+    - @ref CLMinMaxLocation
+    - @ref CLNormalizationLayer
+    - @ref CLNormalizePlanarYUVLayer
+    - @ref CLOpticalFlow
+    - @ref CLPadLayer
+    - @ref CLQuantizationLayer
+    - @ref CLReduceMean
+    - @ref CLReductionOperation
+    - @ref CLRNNLayer
+    - @ref CLSobel5x5
+    - @ref CLSobel7x7
+    - @ref CLSoftmaxLayer
+    - @ref CLSpaceToBatchLayer
+    - @ref CLSpaceToDepthLayer
+    - @ref CLSplit
+    - @ref CLStackLayer
+    - @ref CLUnstack
+    - @ref CLUpsampleLayer
+    - @ref CLWinogradConvolutionLayer
+    - @ref ICLSimpleFunction
+        - @ref CLAbsoluteDifference
+        - @ref CLAccumulate
+        - @ref CLAccumulateSquared
+        - @ref CLAccumulateWeighted
+        - @ref CLActivationLayer
+        - @ref CLArgMinMaxLayer
+        - @ref CLArithmeticAddition
+        - @ref CLArithmeticDivision
+        - @ref CLArithmeticSubtraction
+        - @ref CLBitwiseAnd
+        - @ref CLBitwiseNot
+        - @ref CLBitwiseOr
+        - @ref CLBitwiseXor
+        - @ref CLBoundingBoxTransform
+        - @ref CLBox3x3
+        - @ref CLCast
+        - @ref CLChannelCombine
+        - @ref CLChannelExtract
+        - @ref CLChannelShuffleLayer
+        - @ref CLColorConvert
+        - @ref CLComparison
+        - @ref CLComparisonStatic
+        - @ref CLComputeAllAnchors
+        - @ref CLConvertFullyConnectedWeights
+        - @ref CLConvolution3x3
+        - @ref CLConvolutionRectangle
+        - @ref CLCopy
+        - @ref CLDepthConvertLayer
+        - @ref CLDerivative
+        - @ref CLDilate
+        - @ref CLElementwiseMax
+        - @ref CLElementwiseMin
+        - @ref CLElementwiseSquaredDiff
+        - @ref CLErode
+        - @ref CLExpLayer
+        - @ref CLFillBorder
+        - @ref CLFlattenLayer
+        - @ref CLFloor
+        - @ref CLFullyConnectedLayerReshapeWeights
+        - @ref CLGather
+        - @ref CLGaussian3x3
+        - @ref CLGEMMLowpQuantizeDownInt32ToUint8Scale
+        - @ref CLGEMMLowpQuantizeDownInt32ToUint8ScaleByFixedPoint
+        - @ref CLGEMMLowpQuantizeDownInt32ToUint8ScaleByFloat
+        - @ref CLMagnitude
+        - @ref CLMeanStdDevNormalizationLayer
+        - @ref CLMedian3x3
+        - @ref CLNonLinearFilter
+        - @ref CLNonMaximaSuppression3x3
+        - @ref CLPermute
+        - @ref CLPhase
+        - @ref CLPixelWiseMultiplication
+        - @ref CLPoolingLayer
+        - @ref CLPReluLayer
+        - @ref CLPriorBoxLayer
+        - @ref CLRange
+        - @ref CLRemap
+        - @ref CLReorgLayer
+        - @ref CLReshapeLayer
+        - @ref CLReverse
+        - @ref CLROIAlignLayer
+        - @ref CLROIPoolingLayer
+        - @ref CLRsqrtLayer
+        - @ref CLScale
+        - @ref CLScharr3x3
+        - @ref CLSelect
+        - @ref CLSlice
+        - @ref CLSobel3x3
+        - @ref CLStridedSlice
+        - @ref CLTableLookup
+        - @ref CLThreshold
+        - @ref CLTile
+        - @ref CLTranspose
+        - @ref CLWarpAffine
+        - @ref CLWarpPerspective
+        - @ref CLWinogradInputTransform
+        - @ref CLYOLOLayer
+
+@section S6_3 GLES Compute functions
+
+- @ref IFunction
+    - @ref GCBatchNormalizationLayer
+    - @ref GCConcatenateLayer
+    - @ref GCConvolutionLayer
+    - @ref GCConvolutionLayerReshapeWeights
+    - @ref GCDepthwiseConvolutionLayer3x3
+    - @ref GCDirectConvolutionLayer
+    - @ref GCDropoutLayer
+    - @ref GCFullyConnectedLayer
+    - @ref GCGEMM
+    - @ref GCNormalizationLayer
+    - @ref GCNormalizePlanarYUVLayer
+    - @ref GCPoolingLayer
+    - @ref GCSoftmaxLayer
+    - @ref IGCSimpleFunction
+        - @ref GCAbsoluteDifference
+        - @ref GCActivationLayer
+        - @ref GCArithmeticAddition
+        - @ref GCFillBorder
+        - @ref GCFullyConnectedLayerReshapeWeights
+        - @ref GCGEMMInterleave4x4
+        - @ref GCGEMMTranspose1xW
+        - @ref GCPixelWiseMultiplication
+        - @ref GCScale
+        - @ref GCTensorShift
+        - @ref GCTranspose
+
+@section S6_4 CPP functions
+
+ - @ref IFunction
+    - @ref CPPDetectionOutputLayer
+    - @ref ICPPSimpleFunction
+        - @ref CPPBoxWithNonMaximaSuppressionLimit
+        - @ref CPPPermute
+        - @ref CPPTopKV
+        - @ref CPPUpsample
+
+*/
+} // namespace