# Copyright 2012 The ANGLE Project Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#

# This script generates a function that converts 16-bit precision floating
# point numbers to 32-bit.
# It is based on ftp://ftp.fox-toolkit.org/pub/fasthalffloatconversion.pdf.

#include "common/mathutil.h"


def convertMantissa(i):
    if i == 0:
        return 0
    elif i < 1024:
        m = i << 13
        e = 0x38800000
        while not (m & 0x00800000):
            e -= 0x00800000
            m = m << 1
        m &= ~0x00800000
        return m | e
    else:
        return 0x38000000 + ((i - 1024) << 13)


def convertExponent(i):
    if i == 0:
        return 0
    elif i in range(1, 31):
        return i << 23
    elif i == 31:
        return 0x47800000
    elif i == 32:
        return 0x80000000
    elif i in range(33, 63):
        return 0x80000000 + ((i - 32) << 23)
    else:
        return 0xC7800000


def convertOffset(i):
    if i == 0 or i == 32:
        return 0
    else:
        return 1024


print("""//
// Copyright 2012 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//

// This file is automatically generated.

#include "common/mathutil.h"

namespace gl
{
""")

print("const static unsigned g_mantissa[2048] = {")
for i in range(0, 2048):
    print("    %#010x," % convertMantissa(i))
print("};\n")

print("const static unsigned g_exponent[64] = {")
for i in range(0, 64):
    print("    %#010x," % convertExponent(i))
print("};\n")

print("const static unsigned g_offset[64] = {")
for i in range(0, 64):
    print("    %#010x," % convertOffset(i))
print("};\n")

print("""float float16ToFloat32(unsigned short h)
{
    unsigned i32 = g_mantissa[g_offset[h >> 10] + (h & 0x3ff)] + g_exponent[h >> 10];
    return bitCast<float>(i32);
}
}
""")
