diff --git a/compiler-rt/lib/floatuntixf.c b/compiler-rt/lib/floatuntixf.c
index a28db10..5a48cafe 100644
--- a/compiler-rt/lib/floatuntixf.c
+++ b/compiler-rt/lib/floatuntixf.c
@@ -1,28 +1,31 @@
-//===-- floatuntixf.c - Implement __floatuntixf ---------------------------===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file implements __floatuntixf for the compiler_rt library.
-//
-//===----------------------------------------------------------------------===//
+/* ===-- floatuntixf.c - Implement __floatuntixf ---------------------------===
+ *
+ *                     The LLVM Compiler Infrastructure
+ *
+ * This file is distributed under the University of Illinois Open Source
+ * License. See LICENSE.TXT for details.
+ *
+ * ===----------------------------------------------------------------------===
+ *
+ * This file implements __floatuntixf for the compiler_rt library.
+ *
+ * ===----------------------------------------------------------------------===
+ */
 
 #if __x86_64
 
 #include "int_lib.h"
 #include <float.h>
 
-// Returns: convert a to a long double, rounding toward even.
+/* Returns: convert a to a long double, rounding toward even. */
 
-// Assumption: long double is a IEEE 80 bit floating point type padded to 128 bits
-//             tu_int is a 128 bit integral type
+/* Assumption: long double is a IEEE 80 bit floating point type padded to 128 bits
+ *             tu_int is a 128 bit integral type
+ */
 
-// gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
-// 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
+/* gggg gggg gggg gggg gggg gggg gggg gggg | gggg gggg gggg gggg seee eeee eeee eeee |
+ * 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm
+ */
 
 si_int __clzti2(ti_int a);
 
@@ -32,17 +35,18 @@
     if (a == 0)
         return 0.0;
     const unsigned N = sizeof(tu_int) * CHAR_BIT;
-    int sd = N - __clzti2(a);  // number of significant digits
-    int e = sd - 1;             // exponent
+    int sd = N - __clzti2(a);  /* number of significant digits */
+    int e = sd - 1;             /* exponent */
     if (sd > LDBL_MANT_DIG)
     {
-        //  start:  0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
-        //  finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
-        //                                                12345678901234567890123456
-        //  1 = msb 1 bit
-        //  P = bit LDBL_MANT_DIG-1 bits to the right of 1
-        //  Q = bit LDBL_MANT_DIG bits to the right of 1
-        //  R = "or" of all bits to the right of Q
+        /*  start:  0000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQxxxxxxxxxxxxxxxxxx
+         *  finish: 000000000000000000000000000000000000001xxxxxxxxxxxxxxxxxxxxxxPQR
+         *                                                12345678901234567890123456
+         *  1 = msb 1 bit
+         *  P = bit LDBL_MANT_DIG-1 bits to the right of 1
+         *  Q = bit LDBL_MANT_DIG bits to the right of 1
+         *  R = "or" of all bits to the right of Q
+	 */
         switch (sd)
         {
         case LDBL_MANT_DIG + 1:
@@ -54,26 +58,26 @@
             a = (a >> (sd - (LDBL_MANT_DIG+2))) |
                 ((a & ((tu_int)(-1) >> ((N + LDBL_MANT_DIG+2) - sd))) != 0);
         };
-        // finish:
-        a |= (a & 4) != 0;  // Or P into R
-        ++a;  // round - this step may add a significant bit
-        a >>= 2;  // dump Q and R
-        // a is now rounded to LDBL_MANT_DIG or LDBL_MANT_DIG+1 bits
+        /* finish: */
+        a |= (a & 4) != 0;  /* Or P into R */
+        ++a;  /* round - this step may add a significant bit */
+        a >>= 2;  /* dump Q and R */
+        /* a is now rounded to LDBL_MANT_DIG or LDBL_MANT_DIG+1 bits */
         if (a & ((tu_int)1 << LDBL_MANT_DIG))
         {
             a >>= 1;
             ++e;
         }
-        // a is now rounded to LDBL_MANT_DIG bits
+        /* a is now rounded to LDBL_MANT_DIG bits */
     }
     else
     {
         a <<= (LDBL_MANT_DIG - sd);
-        // a is now rounded to LDBL_MANT_DIG bits
+        /* a is now rounded to LDBL_MANT_DIG bits */
     }
     long_double_bits fb;
-    fb.u.high.low = (e + 16383);                  // exponent
-    fb.u.low.all = (du_int)a;                     // mantissa
+    fb.u.high.low = (e + 16383);                  /* exponent */
+    fb.u.low.all = (du_int)a;                     /* mantissa */
     return fb.f;
 }
 
