diff --git a/src/OpenGL/libGLES_CM/mathutil.h b/src/OpenGL/libGLES_CM/mathutil.h
index 89c2e54..7f62c5b 100644
--- a/src/OpenGL/libGLES_CM/mathutil.h
+++ b/src/OpenGL/libGLES_CM/mathutil.h
@@ -1,13 +1,16 @@
-// SwiftShader Software Renderer
+// Copyright 2016 The SwiftShader Authors. All Rights Reserved.
 //
-// Copyright(c) 2005-2012 TransGaming Inc.
+// 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
 //
-// All rights reserved. No part of this software may be copied, distributed, transmitted,
-// transcribed, stored in a retrieval system, translated into any human or computer
-// language by any means, or disclosed to third parties without the explicit written
-// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
-// or implied, including but not limited to any patent rights, are granted to you.
+//    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.
 
 // mathutil.h: Math and bit manipulation functions.
 
@@ -21,27 +24,27 @@
 {
 inline bool isPow2(int x)
 {
-    return (x & (x - 1)) == 0 && (x != 0);
+	return (x & (x - 1)) == 0 && (x != 0);
 }
 
 inline int log2(int x)
 {
-    int r = 0;
-    while((x >> r) > 1) r++;
-    return r;
+	int r = 0;
+	while((x >> r) > 1) r++;
+	return r;
 }
 
 inline unsigned int ceilPow2(unsigned int x)
 {
-    if(x != 0) x--;
-    x |= x >> 1;
-    x |= x >> 2;
-    x |= x >> 4;
-    x |= x >> 8;
-    x |= x >> 16;
-    x++;
+	if(x != 0) x--;
+	x |= x >> 1;
+	x |= x >> 2;
+	x |= x >> 4;
+	x |= x >> 8;
+	x |= x >> 16;
+	x++;
 
-    return x;
+	return x;
 }
 
 using sw::clamp;
@@ -50,20 +53,20 @@
 template<const int n>
 inline unsigned int unorm(float x)
 {
-    const unsigned int max = 0xFFFFFFFF >> (32 - n);
+	const unsigned int max = 0xFFFFFFFF >> (32 - n);
 
-    if(x > 1)
-    {
-        return max;
-    }
-    else if(x < 0)
-    {
-        return 0;
-    }
-    else
-    {
-        return (unsigned int)(max * x + 0.5f);
-    }
+	if(x > 1)
+	{
+		return max;
+	}
+	else if(x < 0)
+	{
+		return 0;
+	}
+	else
+	{
+		return (unsigned int)(max * x + 0.5f);
+	}
 }
 }
 
