1f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar/*
2f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar * Copyright (C) 2016 The Android Open Source Project
3f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar *
4f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar * Licensed under the Apache License, Version 2.0 (the "License");
5f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar * you may not use this file except in compliance with the License.
6f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar * You may obtain a copy of the License at
7f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar *
8f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar *      http://www.apache.org/licenses/LICENSE-2.0
9f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar *
10f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar * Unless required by applicable law or agreed to in writing, software
11f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar * distributed under the License is distributed on an "AS IS" BASIS,
12f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar * See the License for the specific language governing permissions and
14f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar * limitations under the License.
15f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar */
16f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar
17f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar#ifndef RS_RUNTIME_RS_F16_UTIL
18f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar#define RS_RUNTIME_RS_F16_UTIL
19f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar
20f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainartypedef union {
21f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar  half hval;
22f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar  short sval;
23f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar} fp16_shape_type;
24f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar
25f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar/* half h = unsigned short s; */
26f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar#define SET_HALF_WORD(h, s) \
27f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainardo {                        \
28f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar  fp16_shape_type fp16_u;   \
29f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar  fp16_u.sval = (s);        \
30f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar  (h) = fp16_u.hval;        \
31f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar} while (0)
32f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar
33f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar/* unsigned short s = half h; */
34f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar#define GET_HALF_WORD(s, h) \
35f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainardo {                        \
36f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar  fp16_shape_type fp16_u;   \
37f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar  fp16_u.hval = (h);        \
38f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar  (s) = fp16_u.sval;        \
39f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar} while (0)
40f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar
41f9760483073d9f452e4701fbf367dc518f7e6531Pirama Arumuga Nainar#endif // RS_RUNTIME_RS_F16_UTIL
42