Index: src/prelude/Makefile.am
===================================================================
--- src/prelude/Makefile.am	(revision 13073be42dba9d23e1eb3322d700f265381ae024)
+++ src/prelude/Makefile.am	(revision cb4bbb6de3060dfc3c911c1f4a0f4e1e4f3aff30)
@@ -37,8 +37,8 @@
 # create forward declarations for gcc builtins
 gcc-builtins.cf : gcc-builtins.c prototypes.sed
-	${AM_V_GEN}@BACKEND_CC@ -E -P $< | sed -r -f prototypes.sed > $@
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E -P $< | sed -r -f prototypes.sed > $@
 
 gcc-builtins.c : builtins.def prototypes.awk sync-builtins.cf
-	${AM_V_GEN}@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E prototypes.c | awk -f prototypes.awk > $@
 
 builtins.def :
Index: src/prelude/Makefile.in
===================================================================
--- src/prelude/Makefile.in	(revision 13073be42dba9d23e1eb3322d700f265381ae024)
+++ src/prelude/Makefile.in	(revision cb4bbb6de3060dfc3c911c1f4a0f4e1e4f3aff30)
@@ -506,8 +506,8 @@
 # create forward declarations for gcc builtins
 gcc-builtins.cf : gcc-builtins.c prototypes.sed
-	${AM_V_GEN}@BACKEND_CC@ -E -P $< | sed -r -f prototypes.sed > $@
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E -P $< | sed -r -f prototypes.sed > $@
 
 gcc-builtins.c : builtins.def prototypes.awk sync-builtins.cf
-	${AM_V_GEN}@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E prototypes.c | awk -f prototypes.awk > $@
 
 builtins.def :
Index: src/prelude/prelude.cf
===================================================================
--- src/prelude/prelude.cf	(revision 13073be42dba9d23e1eb3322d700f265381ae024)
+++ src/prelude/prelude.cf	(revision cb4bbb6de3060dfc3c911c1f4a0f4e1e4f3aff30)
@@ -458,5 +458,4 @@
 signed long long int	?=?( signed long long int &, signed long long int ),	?=?( volatile signed long long int &, signed long long int );
 unsigned long long int	?=?( unsigned long long int &, unsigned long long int ), ?=?( volatile unsigned long long int &, unsigned long long int );
-__int128	?=?( __int128 &, __int128 ),	?=?( volatile __int128 &, __int128 );
 zero_t			?=?( zero_t &, zero_t );
 one_t			?=?( one_t &, one_t );
Index: src/prelude/sync-builtins.cf
===================================================================
--- src/prelude/sync-builtins.cf	(revision 13073be42dba9d23e1eb3322d700f265381ae024)
+++ src/prelude/sync-builtins.cf	(revision cb4bbb6de3060dfc3c911c1f4a0f4e1e4f3aff30)
@@ -7,6 +7,8 @@
 long long int __sync_fetch_and_add(volatile long long int *, long long int,...);
 long long int __sync_fetch_and_add_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_fetch_and_add(volatile __int128 *, __int128,...);
 __int128 __sync_fetch_and_add_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_fetch_and_sub(volatile char *, char,...);
@@ -18,6 +20,8 @@
 long long int __sync_fetch_and_sub(volatile long long int *, long long int,...);
 long long int __sync_fetch_and_sub_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_fetch_and_sub(volatile __int128 *, __int128,...);
 __int128 __sync_fetch_and_sub_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_fetch_and_or(volatile char *, char,...);
@@ -29,6 +33,8 @@
 long long int __sync_fetch_and_or(volatile long long int *, long long int,...);
 long long int __sync_fetch_and_or_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_fetch_and_or(volatile __int128 *, __int128,...);
 __int128 __sync_fetch_and_or_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_fetch_and_and(volatile char *, char,...);
@@ -40,6 +46,8 @@
 long long int __sync_fetch_and_and(volatile long long int *, long long int,...);
 long long int __sync_fetch_and_and_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_fetch_and_and(volatile __int128 *, __int128,...);
 __int128 __sync_fetch_and_and_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_fetch_and_xor(volatile char *, char,...);
@@ -51,6 +59,8 @@
 long long int __sync_fetch_and_xor(volatile long long int *, long long int,...);
 long long int __sync_fetch_and_xor_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_fetch_and_xor(volatile __int128 *, __int128,...);
 __int128 __sync_fetch_and_xor_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_fetch_and_nand(volatile char *, char,...);
@@ -62,6 +72,8 @@
 long long int __sync_fetch_and_nand(volatile long long int *, long long int,...);
 long long int __sync_fetch_and_nand_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_fetch_and_nand(volatile __int128 *, __int128,...);
 __int128 __sync_fetch_and_nand_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_add_and_fetch(volatile char *, char,...);
@@ -73,6 +85,8 @@
 long long int __sync_add_and_fetch(volatile long long int *, long long int,...);
 long long int __sync_add_and_fetch_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_add_and_fetch(volatile __int128 *, __int128,...);
 __int128 __sync_add_and_fetch_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_sub_and_fetch(volatile char *, char,...);
@@ -84,6 +98,8 @@
 long long int __sync_sub_and_fetch(volatile long long int *, long long int,...);
 long long int __sync_sub_and_fetch_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_sub_and_fetch(volatile __int128 *, __int128,...);
 __int128 __sync_sub_and_fetch_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_or_and_fetch(volatile char *, char,...);
@@ -95,6 +111,8 @@
 long long int __sync_or_and_fetch(volatile long long int *, long long int,...);
 long long int __sync_or_and_fetch_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_or_and_fetch(volatile __int128 *, __int128,...);
 __int128 __sync_or_and_fetch_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_and_and_fetch(volatile char *, char,...);
@@ -106,6 +124,8 @@
 long long int __sync_and_and_fetch(volatile long long int *, long long int,...);
 long long int __sync_and_and_fetch_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_and_and_fetch(volatile __int128 *, __int128,...);
 __int128 __sync_and_and_fetch_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_xor_and_fetch(volatile char *, char,...);
@@ -117,6 +137,8 @@
 long long int __sync_xor_and_fetch(volatile long long int *, long long int,...);
 long long int __sync_xor_and_fetch_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_xor_and_fetch(volatile __int128 *, __int128,...);
 __int128 __sync_xor_and_fetch_16(volatile __int128 *, __int128,...);
+#endif
 
 char __sync_nand_and_fetch(volatile char *, char,...);
@@ -128,6 +150,8 @@
 long long int __sync_nand_and_fetch(volatile long long int *, long long int,...);
 long long int __sync_nand_and_fetch_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_nand_and_fetch(volatile __int128 *, __int128,...);
 __int128 __sync_nand_and_fetch_16(volatile __int128 *, __int128,...);
+#endif
 
 _Bool __sync_bool_compare_and_swap(volatile char *, char, char,...);
@@ -139,6 +163,8 @@
 _Bool __sync_bool_compare_and_swap(volatile long long int *, long long int, long long int,...);
 _Bool __sync_bool_compare_and_swap_8(volatile long long int *, long long int, long long int,...);
+#if defined(__SIZEOF_INT128__)
 _Bool __sync_bool_compare_and_swap(volatile __int128 *, __int128, __int128,...);
 _Bool __sync_bool_compare_and_swap_16(volatile __int128 *, __int128, __int128,...);
+#endif
 
 char __sync_val_compare_and_swap(volatile char *, char, char,...);
@@ -150,6 +176,8 @@
 long long int __sync_val_compare_and_swap(volatile long long int *, long long int, long long int,...);
 long long int __sync_val_compare_and_swap_8(volatile long long int *, long long int, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_val_compare_and_swap(volatile __int128 *, __int128, __int128,...);
 __int128 __sync_val_compare_and_swap_16(volatile __int128 *, __int128, __int128,...);
+#endif
 
 char __sync_lock_test_and_set(volatile char *, char,...);
@@ -161,6 +189,8 @@
 long long int __sync_lock_test_and_set(volatile long long int *, long long int,...);
 long long int __sync_lock_test_and_set_8(volatile long long int *, long long int,...);
+#if defined(__SIZEOF_INT128__)
 __int128 __sync_lock_test_and_set(volatile __int128 *, __int128,...);
 __int128 __sync_lock_test_and_set_16(volatile __int128 *, __int128,...);
+#endif
 
 void __sync_lock_release(volatile char *,...);
@@ -172,6 +202,8 @@
 void __sync_lock_release(volatile long long int *,...);
 void __sync_lock_release_8(volatile long long int *,...);
+#if defined(__SIZEOF_INT128__)
 void __sync_lock_release(volatile __int128 *,...);
 void __sync_lock_release_16(volatile __int128 *,...);
+#endif
 
 void __sync_synchronize();
@@ -185,5 +217,8 @@
 _Bool __atomic_test_and_set(volatile int *, int);
 _Bool __atomic_test_and_set(volatile long long int *, int);
+#if defined(__SIZEOF_INT128__)
 _Bool __atomic_test_and_set(volatile __int128 *, int);
+#endif
+
 void __atomic_clear(volatile _Bool *, int);
 void __atomic_clear(volatile char *, int);
@@ -191,5 +226,7 @@
 void __atomic_clear(volatile int *, int);
 void __atomic_clear(volatile long long int *, int);
+#if defined(__SIZEOF_INT128__)
 void __atomic_clear(volatile __int128 *, int);
+#endif
 
 char __atomic_exchange_n(volatile char *, volatile char *, int);
@@ -205,7 +242,9 @@
 long long int __atomic_exchange_8(volatile long long int *, long long int, int);
 void __atomic_exchange(volatile long long int *, volatile long long int *, volatile long long int *, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_exchange_n(volatile __int128 *, volatile __int128 *, int);
 __int128 __atomic_exchange_16(volatile __int128 *, __int128, int);
 void __atomic_exchange(volatile __int128 *, volatile __int128 *, volatile __int128 *, int);
+#endif
 
 char __atomic_load_n(const volatile char *, int);
@@ -221,7 +260,9 @@
 long long int __atomic_load_8(const volatile long long int *, int);
 void __atomic_load(const volatile long long int *, volatile long long int *, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_load_n(const volatile __int128 *, int);
 __int128 __atomic_load_16(const volatile __int128 *, int);
 void __atomic_load(const volatile __int128 *, volatile __int128 *, int);
+#endif
 
 _Bool __atomic_compare_exchange_n(volatile char *, char *, char, _Bool, int, int);
@@ -237,7 +278,9 @@
 _Bool __atomic_compare_exchange_8(volatile long long int *, long long int *, long long int, _Bool, int, int);
 _Bool __atomic_compare_exchange  (volatile long long int *, long long int *, long long int *, _Bool, int, int);
+#if defined(__SIZEOF_INT128__)
 _Bool __atomic_compare_exchange_n (volatile __int128 *, __int128 *, __int128, _Bool, int, int);
 _Bool __atomic_compare_exchange_16(volatile __int128 *, __int128 *, __int128, _Bool, int, int);
 _Bool __atomic_compare_exchange   (volatile __int128 *, __int128 *, __int128 *, _Bool, int, int);
+#endif
 
 void __atomic_store_n(volatile _Bool *, _Bool, int);
@@ -256,7 +299,9 @@
 void __atomic_store_8(volatile long long int *, long long int, int);
 void __atomic_store(volatile long long int *, long long int *, int);
+#if defined(__SIZEOF_INT128__)
 void __atomic_store_n(volatile __int128 *, __int128, int);
 void __atomic_store_16(volatile __int128 *, __int128, int);
 void __atomic_store(volatile __int128 *, __int128 *, int);
+#endif
 
 char __atomic_add_fetch  (volatile char *, char, int);
@@ -268,6 +313,8 @@
 long long int __atomic_add_fetch  (volatile long long int *, long long int, int);
 long long int __atomic_add_fetch_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_add_fetch   (volatile __int128 *, __int128, int);
 __int128 __atomic_add_fetch_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_sub_fetch  (volatile char *, char, int);
@@ -279,6 +326,8 @@
 long long int __atomic_sub_fetch  (volatile long long int *, long long int, int);
 long long int __atomic_sub_fetch_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_sub_fetch   (volatile __int128 *, __int128, int);
 __int128 __atomic_sub_fetch_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_and_fetch  (volatile char *, char, int);
@@ -290,6 +339,8 @@
 long long int __atomic_and_fetch  (volatile long long int *, long long int, int);
 long long int __atomic_and_fetch_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_and_fetch   (volatile __int128 *, __int128, int);
 __int128 __atomic_and_fetch_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_nand_fetch  (volatile char *, char, int);
@@ -301,6 +352,8 @@
 long long int __atomic_nand_fetch  (volatile long long int *, long long int, int);
 long long int __atomic_nand_fetch_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_nand_fetch   (volatile __int128 *, __int128, int);
 __int128 __atomic_nand_fetch_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_xor_fetch  (volatile char *, char, int);
@@ -312,6 +365,8 @@
 long long int __atomic_xor_fetch  (volatile long long int *, long long int, int);
 long long int __atomic_xor_fetch_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_xor_fetch   (volatile __int128 *, __int128, int);
 __int128 __atomic_xor_fetch_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_or_fetch  (volatile char *, char, int);
@@ -323,6 +378,8 @@
 long long int __atomic_or_fetch  (volatile long long int *, long long int, int);
 long long int __atomic_or_fetch_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_or_fetch   (volatile __int128 *, __int128, int);
 __int128 __atomic_or_fetch_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_fetch_add  (volatile char *, char, int);
@@ -334,6 +391,8 @@
 long long int __atomic_fetch_add  (volatile long long int *, long long int, int);
 long long int __atomic_fetch_add_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_fetch_add   (volatile __int128 *, __int128, int);
 __int128 __atomic_fetch_add_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_fetch_sub  (volatile char *, char, int);
@@ -345,6 +404,8 @@
 long long int __atomic_fetch_sub  (volatile long long int *, long long int, int);
 long long int __atomic_fetch_sub_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_fetch_sub   (volatile __int128 *, __int128, int);
 __int128 __atomic_fetch_sub_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_fetch_and  (volatile char *, char, int);
@@ -356,6 +417,8 @@
 long long int __atomic_fetch_and  (volatile long long int *, long long int, int);
 long long int __atomic_fetch_and_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_fetch_and   (volatile __int128 *, __int128, int);
 __int128 __atomic_fetch_and_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_fetch_nand  (volatile char *, char, int);
@@ -367,6 +430,8 @@
 long long int __atomic_fetch_nand  (volatile long long int *, long long int, int);
 long long int __atomic_fetch_nand_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_fetch_nand   (volatile __int128 *, __int128, int);
 __int128 __atomic_fetch_nand_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_fetch_xor  (volatile char *, char, int);
@@ -378,6 +443,8 @@
 long long int __atomic_fetch_xor  (volatile long long int *, long long int, int);
 long long int __atomic_fetch_xor_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_fetch_xor   (volatile __int128 *, __int128, int);
 __int128 __atomic_fetch_xor_16(volatile __int128 *, __int128, int);
+#endif
 
 char __atomic_fetch_or  (volatile char *, char, int);
@@ -389,6 +456,8 @@
 long long int __atomic_fetch_or  (volatile long long int *, long long int, int);
 long long int __atomic_fetch_or_8(volatile long long int *, long long int, int);
+#if defined(__SIZEOF_INT128__)
 __int128 __atomic_fetch_or   (volatile __int128 *, __int128, int);
 __int128 __atomic_fetch_or_16(volatile __int128 *, __int128, int);
+#endif
 
 _Bool __atomic_always_lock_free(unsigned long, const volatile void *);
