# 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 = 0
        while not (m & 0x00800000):
            e -= 0x00800000
            m = m << 1
        m &= ~0x00800000
        e += 0x38800000
        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.

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);
}
}
"""
