Hash :
75782629
        
        Author :
  
        
        Date :
2015-09-25T11:28:50
        
      
Fix possible compiler errors on linux Change-Id: Ifc45446c749690eddc406f66f144304262f04664 Reviewed-on: https://chromium-review.googlesource.com/302478 Reviewed-by: Corentin Wallez <cwallez@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Tested-by: Corentin Wallez <cwallez@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
# Copyright (c) 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 (c) 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);
}
}
"""