1d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang/*
2d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang * Copyright (C) 2017 The Android Open Source Project
3d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang *
4d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang * Licensed under the Apache License, Version 2.0 (the "License");
5d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang * you may not use this file except in compliance with the License.
6d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang * You may obtain a copy of the License at
7d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang *
8d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang *      http://www.apache.org/licenses/LICENSE-2.0
9d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang *
10d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang * Unless required by applicable law or agreed to in writing, software
11d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang * distributed under the License is distributed on an "AS IS" BASIS,
12d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang * See the License for the specific language governing permissions and
14d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang * limitations under the License.
15d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang */
16d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang
17d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang#include "Operations.h"
18d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang#include "OperationsUtils.h"
19d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang
20d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang#include "internal/optimized/optimized_ops.h"
21d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang
22d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wangnamespace android {
23d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wangnamespace nn {
24d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang
25d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wangbool l2normFloat32(const float* inputData, const Shape& inputShape,
26d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang                   float* outputData, const Shape& outputShape) {
27d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang    optimized_ops::L2Normalization<FusedActivationFunctionType::kNone>(
28d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang            inputData, convertShapeToDims(inputShape),
29d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang            outputData, convertShapeToDims(outputShape));
30d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang
31d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang    return true;
32d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang}
33d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang
34d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wangbool l2normQuant8(const uint8_t* inputData, const Shape& inputShape,
35d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang                  uint8_t* outputData, const Shape& outputShape) {
36d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang    optimized_ops::L2Normalization(
37d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang            inputData, convertShapeToDims(inputShape),
38d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang            inputShape.offset,
39d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang            outputData, convertShapeToDims(outputShape));
40d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang
41d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang    return true;
42d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang}
43d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang
44d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wangbool localResponseNormFloat32(const float* inputData, const Shape& inputShape,
45d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang                              int32_t radius, float bias, float alpha, float beta,
46d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang                              float* outputData, const Shape& outputShape) {
47d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang    optimized_ops::LocalResponseNormalization(
48d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang            inputData, convertShapeToDims(inputShape),
49d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang            radius, bias, alpha, beta,
50d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang            outputData, convertShapeToDims(outputShape));
51d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang
52d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang    return true;
53d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang}
54d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang}  // namespace nn
55d9bef406eb022b143bb2fa7d98bc4b4cdc79de06Miao Wang}  // namespace android
56