From 5d7e2352e7369ca4f75b3f883749f908cc82ecde Mon Sep 17 00:00:00 2001 From: Romain Guy Date: Mon, 14 Nov 2016 09:20:39 -0800 Subject: [PATCH] Add @HalfFloat annotation for fp16 data types stored in shorts This CL has a companion CL to add the @HalfFloat annotation to the support library. Test: cts-tradefed run singleCommand cts-dev --module CtsUtilTestCases --test android.util.cts.HalfTest Bug: 29940137 Change-Id: I4e1dc456687c1c026437150e9cc94a54f3264d4e --- core/java/android/annotation/HalfFloat.java | 48 +++++++++++ core/java/android/util/Half.java | 93 +++++++++++---------- 2 files changed, 97 insertions(+), 44 deletions(-) create mode 100644 core/java/android/annotation/HalfFloat.java diff --git a/core/java/android/annotation/HalfFloat.java b/core/java/android/annotation/HalfFloat.java new file mode 100644 index 0000000000000..d3e9f08dee9e2 --- /dev/null +++ b/core/java/android/annotation/HalfFloat.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * 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. + */ +package android.annotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.LOCAL_VARIABLE; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.SOURCE; + +/** + *

Denotes that the annotated element represents a half-precision floating point + * value. Such values are stored in short data types and can be manipulated with + * the {@link android.util.Half} class. If applied to an array of short, every + * element in the array represents a half-precision float.

+ * + *

Example:

+ * + *
{@code
+ * public abstract void setPosition(@HalfFloat short x, @HalfFloat short y, @HalfFloat short z);
+ * }
+ * + * @see android.util.Half + * @see android.util.Half#valueOf(float) + * @see android.util.Half#toFloat(short) + * + * @hide + */ +@Retention(SOURCE) +@Target({PARAMETER, METHOD, LOCAL_VARIABLE, FIELD}) +public @interface HalfFloat { +} diff --git a/core/java/android/util/Half.java b/core/java/android/util/Half.java index 08fb948a1bb6f..1abc10d63509c 100644 --- a/core/java/android/util/Half.java +++ b/core/java/android/util/Half.java @@ -16,12 +16,15 @@ package android.util; +import android.annotation.HalfFloat; + /** *

Half is a utility class to manipulate half-precision 16-bit * IEEE 754 - * floating point data types (also called fp16 or binary16). A half-precision - * float is stored in a short data type. A half-precision float can be - * created from or converted to single-precision floats.

+ * floating point data types (also called fp16 or binary16). A half-precision float can be + * created from or converted to single-precision floats, and is stored in a short data type. + * To distinguish short values holding half-precision floats from regular short values, + * it is recommended to use the @HalfFloat annotation.

* *

The IEEE 754 standard specifies an fp16 as having the following format:

*