diff --git a/lib/clzti2.c b/lib/clzti2.c
index eb05e2e..805688f 100644
--- a/lib/clzti2.c
+++ b/lib/clzti2.c
@@ -25,8 +25,8 @@
 {
     twords x;
     x.all = a;
-    const di_int f = -(x.high == 0);
-    return __builtin_clzll((x.high & ~f) | (x.low & f)) +
+    const di_int f = -(x.s.high == 0);
+    return __builtin_clzll((x.s.high & ~f) | (x.s.low & f)) +
            ((si_int)f & ((si_int)(sizeof(di_int) * CHAR_BIT)));
 }
 
diff --git a/lib/cmpti2.c b/lib/cmpti2.c
index b6b696d..90b3b75 100644
--- a/lib/cmpti2.c
+++ b/lib/cmpti2.c
@@ -28,13 +28,13 @@
     x.all = a;
     twords y;
     y.all = b;
-    if (x.high < y.high)
+    if (x.s.high < y.s.high)
         return 0;
-    if (x.high > y.high)
+    if (x.s.high > y.s.high)
         return 2;
-    if (x.low < y.low)
+    if (x.s.low < y.s.low)
         return 0;
-    if (x.low > y.low)
+    if (x.s.low > y.s.low)
         return 2;
     return 1;
 }
diff --git a/lib/ctzti2.c b/lib/ctzti2.c
index fdfac0d..f2d41fe 100644
--- a/lib/ctzti2.c
+++ b/lib/ctzti2.c
@@ -25,8 +25,8 @@
 {
     twords x;
     x.all = a;
-    const di_int f = -(x.low == 0);
-    return __builtin_ctzll((x.high & f) | (x.low & ~f)) +
+    const di_int f = -(x.s.low == 0);
+    return __builtin_ctzll((x.s.high & f) | (x.s.low & ~f)) +
               ((si_int)f & ((si_int)(sizeof(di_int) * CHAR_BIT)));
 }
 
diff --git a/lib/ffsti2.c b/lib/ffsti2.c
index 668b542..0139eb1 100644
--- a/lib/ffsti2.c
+++ b/lib/ffsti2.c
@@ -25,13 +25,13 @@
 {
     twords x;
     x.all = a;
-    if (x.low == 0)
+    if (x.s.low == 0)
     {
-        if (x.high == 0)
+        if (x.s.high == 0)
             return 0;
-        return __builtin_ctzll(x.high) + (1 + sizeof(di_int) * CHAR_BIT);
+        return __builtin_ctzll(x.s.high) + (1 + sizeof(di_int) * CHAR_BIT);
     }
-    return __builtin_ctzll(x.low) + 1;
+    return __builtin_ctzll(x.s.low) + 1;
 }
 
 #endif /* __x86_64 */
diff --git a/lib/fixdfti.c b/lib/fixdfti.c
index 00b6cfc..359b84e 100644
--- a/lib/fixdfti.c
+++ b/lib/fixdfti.c
@@ -30,10 +30,10 @@
 {
     double_bits fb;
     fb.f = a;
-    int e = ((fb.u.high & 0x7FF00000) >> 20) - 1023;
+    int e = ((fb.u.s.high & 0x7FF00000) >> 20) - 1023;
     if (e < 0)
         return 0;
-    ti_int s = (si_int)(fb.u.high & 0x80000000) >> 31;
+    ti_int s = (si_int)(fb.u.s.high & 0x80000000) >> 31;
     ti_int r = 0x0010000000000000uLL | (0x000FFFFFFFFFFFFFuLL & fb.u.all);
     if (e > 52)
         r <<= (e - 52);
diff --git a/lib/fixunsdfti.c b/lib/fixunsdfti.c
index f765c00..c1cd72d 100644
--- a/lib/fixunsdfti.c
+++ b/lib/fixunsdfti.c
@@ -33,8 +33,8 @@
 {
     double_bits fb;
     fb.f = a;
-    int e = ((fb.u.high & 0x7FF00000) >> 20) - 1023;
-    if (e < 0 || (fb.u.high & 0x80000000))
+    int e = ((fb.u.s.high & 0x7FF00000) >> 20) - 1023;
+    if (e < 0 || (fb.u.s.high & 0x80000000))
         return 0;
     tu_int r = 0x0010000000000000uLL | (fb.u.all & 0x000FFFFFFFFFFFFFuLL);
     if (e > 52)
diff --git a/lib/fixunsxfti.c b/lib/fixunsxfti.c
index 96c7c48..d0bd512 100644
--- a/lib/fixunsxfti.c
+++ b/lib/fixunsxfti.c
@@ -35,8 +35,8 @@
 {
     long_double_bits fb;
     fb.f = a;
-    int e = (fb.u.high.low & 0x00007FFF) - 16383;
-    if (e < 0 || (fb.u.high.low & 0x00008000))
+    int e = (fb.u.high.s.low & 0x00007FFF) - 16383;
+    if (e < 0 || (fb.u.high.s.low & 0x00008000))
         return 0;
     tu_int r = fb.u.low.all;
     if (e > 63)
diff --git a/lib/fixxfti.c b/lib/fixxfti.c
index 70d0e17..c224801 100644
--- a/lib/fixxfti.c
+++ b/lib/fixxfti.c
@@ -32,10 +32,10 @@
 {
     long_double_bits fb;
     fb.f = a;
-    int e = (fb.u.high.low & 0x00007FFF) - 16383;
+    int e = (fb.u.high.s.low & 0x00007FFF) - 16383;
     if (e < 0)
         return 0;
-    ti_int s = -(si_int)((fb.u.high.low & 0x00008000) >> 15);
+    ti_int s = -(si_int)((fb.u.high.s.low & 0x00008000) >> 15);
     ti_int r = fb.u.low.all;
     if (e > 63)
         r <<= (e - 63);
diff --git a/lib/floattidf.c b/lib/floattidf.c
index b74fa5e..274f585 100644
--- a/lib/floattidf.c
+++ b/lib/floattidf.c
@@ -76,10 +76,10 @@
         /* a is now rounded to DBL_MANT_DIG bits */
     }
     double_bits fb;
-    fb.u.high = ((su_int)s & 0x80000000) |        /* sign */
+    fb.u.s.high = ((su_int)s & 0x80000000) |        /* sign */
                 ((e + 1023) << 20)      |        /* exponent */
                 ((su_int)(a >> 32) & 0x000FFFFF); /* mantissa-high */
-    fb.u.low = (su_int)a;                         /* mantissa-low */
+    fb.u.s.low = (su_int)a;                         /* mantissa-low */
     return fb.f;
 }
 
diff --git a/lib/floattixf.c b/lib/floattixf.c
index d550296..77d9060 100644
--- a/lib/floattixf.c
+++ b/lib/floattixf.c
@@ -78,7 +78,7 @@
         /* a is now rounded to LDBL_MANT_DIG bits */
     }
     long_double_bits fb;
-    fb.u.high.low = ((su_int)s & 0x8000) |        /* sign */
+    fb.u.high.s.low = ((su_int)s & 0x8000) |        /* sign */
                     (e + 16383);                  /* exponent */
     fb.u.low.all = (du_int)a;                     /* mantissa */
     return fb.f;
diff --git a/lib/floatuntidf.c b/lib/floatuntidf.c
index 2e8369e..51d8b28 100644
--- a/lib/floatuntidf.c
+++ b/lib/floatuntidf.c
@@ -74,9 +74,9 @@
         /* a is now rounded to DBL_MANT_DIG bits */
     }
     double_bits fb;
-    fb.u.high = ((e + 1023) << 20)      |        /* exponent */
+    fb.u.s.high = ((e + 1023) << 20)      |        /* exponent */
                 ((su_int)(a >> 32) & 0x000FFFFF); /* mantissa-high */
-    fb.u.low = (su_int)a;                         /* mantissa-low */
+    fb.u.s.low = (su_int)a;                         /* mantissa-low */
     return fb.f;
 }
 
diff --git a/lib/floatuntixf.c b/lib/floatuntixf.c
index 5a48caf..e82d0c1 100644
--- a/lib/floatuntixf.c
+++ b/lib/floatuntixf.c
@@ -76,7 +76,7 @@
         /* a is now rounded to LDBL_MANT_DIG bits */
     }
     long_double_bits fb;
-    fb.u.high.low = (e + 16383);                  /* exponent */
+    fb.u.high.s.low = (e + 16383);                  /* exponent */
     fb.u.low.all = (du_int)a;                     /* mantissa */
     return fb.f;
 }
diff --git a/lib/multi3.c b/lib/multi3.c
index 9ba730e..13a3867 100644
--- a/lib/multi3.c
+++ b/lib/multi3.c
@@ -50,8 +50,8 @@
     twords y;
     y.all = b;
     twords r;
-    r.all = __mulddi3(x.low, y.low);
-    r.s.high += x.high * y.low + x.low * y.high;
+    r.all = __mulddi3(x.s.low, y.s.low);
+    r.s.high += x.s.high * y.s.low + x.s.low * y.s.high;
     return r.all;
 }
 
diff --git a/lib/parityti2.c b/lib/parityti2.c
index 8ef5368..650d417 100644
--- a/lib/parityti2.c
+++ b/lib/parityti2.c
@@ -25,7 +25,7 @@
 {
     twords x;
     x.all = a;
-    return __paritydi2(x.high ^ x.low);
+    return __paritydi2(x.s.high ^ x.s.low);
 }
 
 #endif
diff --git a/lib/ucmpti2.c b/lib/ucmpti2.c
index ba32b84..0e7eea3 100644
--- a/lib/ucmpti2.c
+++ b/lib/ucmpti2.c
@@ -28,13 +28,13 @@
     x.all = a;
     utwords y;
     y.all = b;
-    if (x.high < y.high)
+    if (x.s.high < y.s.high)
         return 0;
-    if (x.high > y.high)
+    if (x.s.high > y.s.high)
         return 2;
-    if (x.low < y.low)
+    if (x.s.low < y.s.low)
         return 0;
-    if (x.low > y.low)
+    if (x.s.low > y.s.low)
         return 2;
     return 1;
 }
