Index: libcfa/src/Makefile.am
===================================================================
--- libcfa/src/Makefile.am	(revision 5251c6b3e179b007a0d6e799699a2ace9204dda2)
+++ libcfa/src/Makefile.am	(revision 4f4ae60ebc9e71ae1b57987f977afa6d66313862)
@@ -104,4 +104,5 @@
 	interpose.cfa \
 	lsda.h \
+	prelude-inline.cfa \
 	startup.cfa \
 	startup.hfa \
Index: libcfa/src/prelude-inline.cfa
===================================================================
--- libcfa/src/prelude-inline.cfa	(revision 4f4ae60ebc9e71ae1b57987f977afa6d66313862)
+++ libcfa/src/prelude-inline.cfa	(revision 4f4ae60ebc9e71ae1b57987f977afa6d66313862)
@@ -0,0 +1,104 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// prelude-inline.cfa -- Create the external prelude definitions.
+//
+// Author           : Andrew Beach
+// Created On       : Thu Dec 19  9:40:00 2024
+// Last Modified By : Andrew Beach
+// Created On       : Thu Dec 23 14:01:00 2024
+// Update Count     : 0
+//
+
+// There are:
+// 1.  No includes, because everything should be in the prelude somewhere.
+// 2.  No bodies, because those are also in the prelude for inlining.
+//
+// In C99 inline is used to mark functions that are avalible for inlining but
+// do not belong to the current translation unit, so no definition will be
+// inluded. The declarations in this file say that they do belong to this
+// translation unit. Uses of these features that were not inlined will refer
+// to these declarations are standard library functions.
+
+#pragma GCC visibility push(default)
+
+forall( T & )
+extern inline void ^?{}( __Destructor(T) & x );
+
+forall( T & )
+extern inline T & identity( T & i );
+
+extern inline void  ?{}( generator$ & this );
+extern inline void ^?{}( generator$ & );
+
+forall( T & | is_generator( T ) )
+extern inline T & resume( T & gen );
+
+extern inline {
+	forall( T& | is_value(T) | { T ?+=?( T &, one_t ); } )
+	T ++?( T & x );
+
+	forall( T& | is_value(T) | { T ?+=?( T &, one_t ); } )
+	T ?++( T & x );
+
+	forall( T& | is_value(T) | { T ?-=?( T &, one_t ); } )
+	T --?( T & x );
+
+	forall( T& | is_value(T) | { T ?-=?( T &, one_t ); } )
+	T ?--( T & x );
+
+	forall( T& | is_value(T) | { int ?!=?( T, zero_t ); } )
+	int !?( T & x );
+} // distribution
+
+
+#if defined(__SIZEOF_INT128__)
+extern inline void ?{}( unsigned int128 & this, unsigned long int h, unsigned long int l );
+#endif // __SIZEOF_INT128__
+
+extern inline {
+	float ?\?( float x, float y );
+	double ?\?( double x, double y );
+	long double ?\?( long double x, long double y );
+	float _Complex ?\?( float _Complex x, _Complex float y );
+	double _Complex ?\?( double _Complex x, _Complex double y );
+	long double _Complex ?\?( long double _Complex x, _Complex long double y );
+} // distribution
+
+extern inline {
+	int ?\=?( int & x, unsigned int y );
+	long int ?\=?( long int & x, unsigned long int y );
+	long long int ?\=?( long long int & x, unsigned long long int y );
+	unsigned int ?\=?( unsigned int & x, unsigned int y );
+	unsigned long int ?\=?( unsigned long int & x, unsigned long int y );
+	unsigned long long int ?\=?( unsigned long long int & x, unsigned long long int y );
+} // distribution
+
+extern inline
+forall( E | Serial( E ) ) {
+	E fromInt( int i );
+	E succ( E e );
+	E pred( E e );
+	int Countof( E );
+}
+
+extern inline
+forall( E | CfaEnum( E ) ) {
+	int ?==?( E l, E r );
+	int ?!=?( E l, E r );
+	int ?<?( E l, E r );
+	int ?<=?( E l, E r );
+	int ?>?( E l, E r );
+	int ?>=?( E l, E r );
+}
+
+extern inline
+forall( E | Serial( E ) ) {
+	E ?+=?( E & l, one_t );
+	E ?-=?( E & l, one_t );
+	E ?+=?( E & l, int i );
+	E ?-=?( E & l, int i );
+}
