Index: libcfa/prelude/Makefile.am
===================================================================
--- libcfa/prelude/Makefile.am	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/Makefile.am	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,69 @@
+######################## -*- Mode: Makefile-Automake -*- ######################
+##
+## 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.
+##
+## Makefile.am --
+##
+## Author           : Peter A. Buhr
+## Created On       : Sun May 31 08:54:01 2015
+## Last Modified By : Peter A. Buhr
+## Last Modified On : Wed Dec 14 15:00:35 2016
+## Update Count     : 205
+###############################################################################
+
+# create object files in directory with source files
+AUTOMAKE_OPTIONS = subdir-objects
+
+# put into lib for now
+cfalibdir = ${CFA_LIBDIR}
+cfalib_DATA = gcc-builtins.cf builtins.cf extras.cf prelude.cf bootloader.c
+noinst_DATA = ../src/libcfa-prelude.c
+
+CC = @CFACC@
+
+$(DEPDIR) :
+	mkdir $(DEPDIR)
+
+$(DEPDIR)/builtins.Po : $(DEPDIR)
+	touch ${@}
+
+# create extra forward types/declarations to reduce inclusion of library files
+extras.cf : ${srcdir}/extras.regx ${srcdir}/extras.c
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f ${srcdir}/extras.regx > extras.cf
+
+# create forward declarations for gcc builtins
+gcc-builtins.cf : gcc-builtins.c ${srcdir}/prototypes.sed
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -I${srcdir} -E -P $< | sed -r -f ${srcdir}/prototypes.sed > $@
+
+gcc-builtins.c : ${srcdir}/builtins.def ${srcdir}/prototypes.awk ${srcdir}/sync-builtins.cf ${srcdir}/prototypes.c
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -I${srcdir} -E ${srcdir}/prototypes.c | awk -f ${srcdir}/prototypes.awk > $@
+
+prelude.cf : prelude-gen.cc
+	${AM_V_GEN}${CXX} ${AM_CXXFLAGS} ${CXXFLAGS} ${<} -o prelude-gen -Wall -Wextra -O2 -g -std=c++14
+	@./prelude-gen > $@
+	@rm ./prelude-gen
+
+builtins.def :
+
+prototypes.awk :
+
+# create forward declarations for cfa builtins
+builtins.cf : builtins.c ${CC}
+	${AM_V_GEN}${CC} -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po
+	${AM_V_at}sed -i 's/builtins.o/builtins.cf/g' $(DEPDIR)/builtins.Po
+
+include $(DEPDIR)/builtins.Po
+
+../src/libcfa-prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
+	${AM_V_GEN}@CFACPP@ -l prelude.cf $@  # use src/cfa-cpp as not in lib until after install
+
+bootloader.c : ${srcdir}/bootloader.cf prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
+	${AM_V_GEN}@CFACPP@ -tpm ${srcdir}/bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
+
+maintainer-clean-local :
+	rm -rf $(DEPDIR)
+
+MAINTAINERCLEANFILES = gcc-builtins.c gcc-builtins.cf builtins.cf extras.cf bootloader.c prelude.cf ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
Index: libcfa/prelude/Makefile.in
===================================================================
--- libcfa/prelude/Makefile.in	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/Makefile.in	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,544 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+######################## -*- Mode: Makefile-Automake -*- ######################
+###############################################################################
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \	]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs	]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = libcfa/prelude
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+SOURCES =
+DIST_SOURCES =
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+am__installdirs = "$(DESTDIR)$(cfalibdir)"
+DATA = $(cfalib_DATA) $(noinst_DATA)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+am__DIST_COMMON = $(srcdir)/Makefile.in
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BACKEND_CC = @BACKEND_CC@
+BUILD_IN_TREE_FLAGS = @BUILD_IN_TREE_FLAGS@
+BUILD_IN_TREE_FLAGS_NOLIB = @BUILD_IN_TREE_FLAGS_NOLIB@
+CC = @CFACC@
+CCAS = @CCAS@
+CCASDEPMODE = @CCASDEPMODE@
+CCASFLAGS = @CCASFLAGS@
+CCDEPMODE = @CCDEPMODE@
+CFACC = @CFACC@
+CFACPP = @CFACPP@
+CFA_BACKEND_CC = @CFA_BACKEND_CC@
+CFA_BINDIR = @CFA_BINDIR@
+CFA_FLAGS = @CFA_FLAGS@
+CFA_INCDIR = @CFA_INCDIR@
+CFA_LIBDIR = @CFA_LIBDIR@
+CFA_NAME = @CFA_NAME@
+CFA_PREFIX = @CFA_PREFIX@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DRIVER_DIR = @DRIVER_DIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GREP = @GREP@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LEX = @LEX@
+LEXLIB = @LEXLIB@
+LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MACHINE_TYPE = @MACHINE_TYPE@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+runstatedir = @runstatedir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# create object files in directory with source files
+AUTOMAKE_OPTIONS = subdir-objects
+
+# put into lib for now
+cfalibdir = ${CFA_LIBDIR}
+cfalib_DATA = gcc-builtins.cf builtins.cf extras.cf prelude.cf bootloader.c
+noinst_DATA = ../src/libcfa-prelude.c
+MAINTAINERCLEANFILES = gcc-builtins.c gcc-builtins.cf builtins.cf extras.cf bootloader.c prelude.cf ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+	        && { if test -f $@; then exit 0; else break; fi; }; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libcfa/prelude/Makefile'; \
+	$(am__cd) $(top_srcdir) && \
+	  $(AUTOMAKE) --foreign libcfa/prelude/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+install-cfalibDATA: $(cfalib_DATA)
+	@$(NORMAL_INSTALL)
+	@list='$(cfalib_DATA)'; test -n "$(cfalibdir)" || list=; \
+	if test -n "$$list"; then \
+	  echo " $(MKDIR_P) '$(DESTDIR)$(cfalibdir)'"; \
+	  $(MKDIR_P) "$(DESTDIR)$(cfalibdir)" || exit 1; \
+	fi; \
+	for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  echo "$$d$$p"; \
+	done | $(am__base_list) | \
+	while read files; do \
+	  echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(cfalibdir)'"; \
+	  $(INSTALL_DATA) $$files "$(DESTDIR)$(cfalibdir)" || exit $$?; \
+	done
+
+uninstall-cfalibDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(cfalib_DATA)'; test -n "$(cfalibdir)" || list=; \
+	files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+	dir='$(DESTDIR)$(cfalibdir)'; $(am__uninstall_files_from_dir)
+tags TAGS:
+
+ctags CTAGS:
+
+cscope cscopelist:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d "$(distdir)/$$file"; then \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+	      find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+	    fi; \
+	    cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+	  else \
+	    test -f "$(distdir)/$$file" \
+	    || cp -p $$d/$$file "$(distdir)/$$file" \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(DATA)
+installdirs:
+	for dir in "$(DESTDIR)$(cfalibdir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	if test -z '$(STRIP)'; then \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	      install; \
+	else \
+	  $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	    install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	    "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+	fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+	-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+	-test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-cfalibDATA
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+	maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-cfalibDATA
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic cscopelist-am \
+	ctags-am distclean distclean-generic distdir dvi dvi-am html \
+	html-am info info-am install install-am install-cfalibDATA \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic maintainer-clean-local mostlyclean \
+	mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \
+	uninstall-am uninstall-cfalibDATA
+
+.PRECIOUS: Makefile
+
+
+$(DEPDIR) :
+	mkdir $(DEPDIR)
+
+$(DEPDIR)/builtins.Po : $(DEPDIR)
+	touch ${@}
+
+# create extra forward types/declarations to reduce inclusion of library files
+extras.cf : ${srcdir}/extras.regx ${srcdir}/extras.c
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -E ${srcdir}/extras.c | grep -f ${srcdir}/extras.regx > extras.cf
+
+# create forward declarations for gcc builtins
+gcc-builtins.cf : gcc-builtins.c ${srcdir}/prototypes.sed
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -I${srcdir} -E -P $< | sed -r -f ${srcdir}/prototypes.sed > $@
+
+gcc-builtins.c : ${srcdir}/builtins.def ${srcdir}/prototypes.awk ${srcdir}/sync-builtins.cf ${srcdir}/prototypes.c
+	${AM_V_GEN}@BACKEND_CC@ @CFA_FLAGS@ -I${srcdir} -E ${srcdir}/prototypes.c | awk -f ${srcdir}/prototypes.awk > $@
+
+prelude.cf : prelude-gen.cc
+	${AM_V_GEN}${CXX} ${AM_CXXFLAGS} ${CXXFLAGS} ${<} -o prelude-gen -Wall -Wextra -O2 -g -std=c++14
+	@./prelude-gen > $@
+	@rm ./prelude-gen
+
+builtins.def :
+
+prototypes.awk :
+
+# create forward declarations for cfa builtins
+builtins.cf : builtins.c ${CC}
+	${AM_V_GEN}${CC} -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po
+	${AM_V_at}sed -i 's/builtins.o/builtins.cf/g' $(DEPDIR)/builtins.Po
+
+include $(DEPDIR)/builtins.Po
+
+../src/libcfa-prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
+	${AM_V_GEN}@CFACPP@ -l prelude.cf $@  # use src/cfa-cpp as not in lib until after install
+
+bootloader.c : ${srcdir}/bootloader.cf prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
+	${AM_V_GEN}@CFACPP@ -tpm ${srcdir}/bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
+
+maintainer-clean-local :
+	rm -rf $(DEPDIR)
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
Index: libcfa/prelude/bootloader.cf
===================================================================
--- libcfa/prelude/bootloader.cf	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/bootloader.cf	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,5 @@
+extern "C" { static inline int invoke_main(int argc, char* argv[], char* envp[]); }
+
+int main(int argc, char* argv[], char* envp[]) {
+	return invoke_main(argc, argv, envp);
+}
Index: libcfa/prelude/builtins.c
===================================================================
--- libcfa/prelude/builtins.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/builtins.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,116 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// builtins.c --
+//
+// Author           : Peter A. Buhr
+// Created On       : Fri Jul 21 16:21:03 2017
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Thu Feb  8 12:47:59 2018
+// Update Count     : 19
+//
+
+// exception implementation
+
+typedef unsigned long long __cfaabi_abi_exception_type_t;
+
+#include "../src/virtual.h"
+#include "../src/exception.h"
+
+void exit( int status, const char fmt[], ... ) __attribute__ (( format(printf, 2, 3), __nothrow__, __leaf__, __noreturn__ ));
+void abort ( const char fmt[], ... ) __attribute__ (( format(printf, 1, 2), __nothrow__, __leaf__, __noreturn__ ));
+
+// increment/decrement unification
+
+static inline forall( dtype T | { T& ?+=?( T&, one_t ); } )
+T& ++? ( T& x ) { return x += 1; }
+
+static inline forall( dtype T | sized(T) | { void ?{}( T&, T ); void ^?{}( T& ); T& ?+=?( T&, one_t ); } )
+T& ?++ ( T& x ) { T tmp = x; x += 1; return tmp; }
+
+static inline forall( dtype T | { T& ?-=?( T&, one_t ); } )
+T& --? ( T& x ) { return x -= 1; }
+
+static inline forall( dtype T | sized(T) | { void ?{}( T&, T ); void ^?{}( T& ); T& ?-=?( T&, one_t ); } )
+T& ?-- ( T& x ) { T tmp = x; x -= 1; return tmp; }
+
+// exponentiation operator implementation
+
+extern "C" {
+	float powf( float x, float y );
+	double pow( double x, double y );
+	long double powl( long double x, long double y );
+	float _Complex cpowf( float _Complex x, _Complex float z );
+	double _Complex cpow( double _Complex x, _Complex double z );
+	long double _Complex cpowl( long double _Complex x, _Complex long double z );
+} // extern "C"
+
+static inline float ?\?( float x, float y ) { return powf( x, y ); }
+static inline double ?\?( double x, double y ) { return pow( x, y ); }
+static inline long double ?\?( long double x, long double y ) { return powl( x, y ); }
+static inline float _Complex ?\?( float _Complex x, _Complex float y ) { return cpowf(x, y ); }
+static inline double _Complex ?\?( double _Complex x, _Complex double y ) { return cpow( x, y ); }
+static inline long double _Complex ?\?( long double _Complex x, _Complex long double y ) { return cpowl( x, y ); }
+
+static inline long int ?\?( long int ep, unsigned long int y ) { // disallow negative exponent
+	if ( y == 0 ) return 1;								// base case
+	if ( ep == 2 ) return ep << (y - 1);				// special case, positive shifting only
+	typeof( ep ) op = 1;								// accumulate odd product
+	for ( ; y > 1; y >>= 1 ) {							// squaring exponentiation, O(log2 y)
+		if ( (y & 1) == 1 ) op *= ep;					// odd ?
+		ep *= ep;
+	} // for
+	return ep * op;
+} // ?\?
+
+static inline forall( otype T | { void ?{}( T & this, one_t ); T ?*?( T, T ); } )
+T ?\?( T ep, unsigned long int y ) {
+	if ( y == 0 ) return 1;
+	T op = 1;
+	for ( ; y > 1; y >>= 1 ) {							// squaring exponentiation, O(log2 y)
+		if ( (y & 1) == 1 ) op = op * ep;				// odd ?
+		ep = ep * ep;
+	} // for
+	return ep * op;
+} // ?\?
+
+// unsigned computation may be faster and larger
+static inline unsigned long int ?\?( unsigned long int ep, unsigned long int y ) { // disallow negative exponent
+	if ( y == 0 ) return 1;								// base case
+	if ( ep == 2 ) return ep << (y - 1);				// special case, positive shifting only
+	typeof( ep ) op = 1;								// accumulate odd product
+	for ( ; y > 1; y >>= 1 ) {							// squaring exponentiation, O(log2 y)
+		if ( (y & 1) == 1 ) op *= ep;					// odd ?
+		ep *= ep;
+	} // for
+	return ep * op;
+} // ?\?
+
+static inline double ?\?( long int x, signed long int y ) {	// allow negative exponent
+	if ( y >=  0 ) return (double)(x \ (unsigned long int)y);
+	else return 1.0 / x \ (unsigned int)(-y);
+} // ?\?
+
+// FIXME (x \ (unsigned long int)y) relies on X ?\?(T, unsigned long) a function that is neither
+// defined, nor passed as an assertion parameter. Without user-defined conversions, cannot specify
+// X as a type that casts to double, yet it doesn't make sense to write functions with that type
+// signature where X is double.
+
+// static inline forall( otype T | { void ?{}( T & this, one_t ); T ?*?( T, T ); double ?/?( double, T ); } )
+// double ?\?( T x, signed long int y ) {
+//     if ( y >=  0 ) return (double)(x \ (unsigned long int)y);
+//     else return 1.0 / x \ (unsigned long int)(-y);
+// } // ?\?
+
+static inline long int ?\=?( long int & x, unsigned long int y ) { x = x \ y; return x; }
+static inline unsigned long int ?\=?( unsigned long int & x, unsigned long int y ) { x = x \ y; return x; }
+static inline int ?\=?( int & x, unsigned long int y ) { x = x \ y; return x; }
+static inline unsigned int ?\=?( unsigned int & x, unsigned long int y ) { x = x \ y; return x; }
+
+// Local Variables: //
+// mode: c //
+// tab-width: 4 //
+// End: //
Index: libcfa/prelude/builtins.def
===================================================================
--- libcfa/prelude/builtins.def	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/builtins.def	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,953 @@
+/* This file contains the definitions and documentation for the
+   builtins used in the GNU compiler.
+   Copyright (C) 2000-2016 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Before including this file, you should define a macro:
+
+     DEF_BUILTIN (ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P,
+                  FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND)
+
+   This macro will be called once for each builtin function.  The
+   ENUM will be of type `enum built_in_function', and will indicate
+   which builtin function is being processed.  The NAME of the builtin
+   function (which will always start with `__builtin_') is a string
+   literal.  The CLASS is of type `enum built_in_class' and indicates
+   what kind of builtin is being processed.
+
+   Some builtins are actually two separate functions.  For example,
+   for `strcmp' there are two builtin functions; `__builtin_strcmp'
+   and `strcmp' itself.  Both behave identically.  Other builtins
+   define only the `__builtin' variant.  If BOTH_P is TRUE, then this
+   builtin has both variants; otherwise, it is has only the first
+   variant.
+
+   TYPE indicates the type of the function.  The symbols correspond to
+   enumerals from builtin-types.def.  If BOTH_P is true, then LIBTYPE
+   is the type of the non-`__builtin_' variant.  Otherwise, LIBTYPE
+   should be ignored.
+
+   If FALLBACK_P is true then, if for some reason, the compiler cannot
+   expand the builtin function directly, it will call the
+   corresponding library function (which does not have the
+   `__builtin_' prefix.
+
+   If NONANSI_P is true, then the non-`__builtin_' variant is not an
+   ANSI/ISO library function, and so we should pretend it does not
+   exist when compiling in ANSI conformant mode.
+
+   ATTRs is an attribute list as defined in builtin-attrs.def that
+   describes the attributes of this builtin function.
+
+   IMPLICIT specifies condition when the builtin can be produced by
+   compiler.  For instance C90 reserves floorf function, but does not
+   define it's meaning.  When user uses floorf we may assume that the
+   floorf has the meaning we expect, but we can't produce floorf by
+   simplifying floor((double)float) since the runtime need not implement
+   it.
+
+   The builtins is registered only if COND is true.  */
+
+/* A macro for builtins where the
+   BUILT_IN_*_CHKP = BUILT_IN_* + BEGIN_CHKP_BUILTINS + 1
+   enums should be defined too.  */
+#ifndef DEF_BUILTIN_CHKP
+#define DEF_BUILTIN_CHKP(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P,	\
+			 FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND)	\
+  DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P,	\
+	      NONANSI_P, ATTRS, IMPLICIT, COND)
+#endif
+
+/* A GCC builtin (like __builtin_saveregs) is provided by the
+   compiler, but does not correspond to a function in the standard
+   library.  */
+#undef DEF_GCC_BUILTIN
+#define DEF_GCC_BUILTIN(ENUM, NAME, TYPE, ATTRS)		\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,	\
+	       false, false, false, ATTRS, true, true)
+
+/* Like DEF_GCC_BUILTIN, except we don't prepend "__builtin_".  */
+#undef DEF_SYNC_BUILTIN
+#define DEF_SYNC_BUILTIN(ENUM, NAME, TYPE, ATTRS)		\
+  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, TYPE, BT_LAST,	\
+	       false, false, false, ATTRS, true, true)
+
+/* A library builtin (like __builtin_strchr) is a builtin equivalent
+   of an ANSI/ISO standard library function.  In addition to the
+   `__builtin' version, we will create an ordinary version (e.g,
+   `strchr') as well.  If we cannot compute the answer using the
+   builtin function, we will fall back to the standard library
+   version.  */
+#undef DEF_LIB_BUILTIN
+#define DEF_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, false, ATTRS, true, true)
+#undef DEF_LIB_BUILTIN_CHKP
+#define DEF_LIB_BUILTIN_CHKP(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN_CHKP (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE,	\
+		    TYPE, true, true, false, ATTRS, true, true)
+
+/* Like DEF_LIB_BUILTIN, except that the function is not one that is
+   specified by ANSI/ISO C.  So, when we're being fully conformant we
+   ignore the version of these builtins that does not begin with
+   __builtin.  */
+#undef DEF_EXT_LIB_BUILTIN
+#define DEF_EXT_LIB_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, true, ATTRS, false, true)
+#undef DEF_EXT_LIB_BUILTIN_CHKP
+#define DEF_EXT_LIB_BUILTIN_CHKP(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN_CHKP (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE,	\
+		    TYPE, true, true, true, ATTRS, false, true)
+
+/* Like DEF_LIB_BUILTIN, except that the function is only a part of
+   the standard in C94 or above.  */
+#undef DEF_C94_BUILTIN
+#define DEF_C94_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc94, ATTRS, targetm.libc_has_function (function_c94), true)
+
+/* Like DEF_LIB_BUILTIN, except that the function is only a part of
+   the standard in C99 or above.  */
+#undef DEF_C99_BUILTIN
+#define DEF_C99_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc99, ATTRS, targetm.libc_has_function (function_c99_misc), true)
+
+/* Like DEF_LIB_BUILTIN, except that the function is only a part of
+   the standard in C11 or above.  */
+#undef DEF_C11_BUILTIN
+#define DEF_C11_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc11, ATTRS, targetm.libc_has_function (function_c11_misc), true)
+
+/* Like DEF_C99_BUILTIN, but for complex math functions.  */
+#undef DEF_C99_COMPL_BUILTIN
+#define DEF_C99_COMPL_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc99, ATTRS, targetm.libc_has_function (function_c99_math_complex), true)
+
+/* Builtin that is specified by C99 and C90 reserve the name for future use.
+   We can still recognize the builtin in C90 mode but we can't produce it
+   implicitly.  */
+#undef DEF_C99_C90RES_BUILTIN
+#define DEF_C99_C90RES_BUILTIN(ENUM, NAME, TYPE, ATTRS)	\
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,	\
+	       true, true, !flag_isoc99, ATTRS, targetm.libc_has_function (function_c99_misc), true)
+
+/* Builtin that C99 reserve the name for future use. We can still recognize
+   the builtin in C99 mode but we can't produce it implicitly.  */
+#undef DEF_EXT_C99RES_BUILTIN
+#define DEF_EXT_C99RES_BUILTIN(ENUM, NAME, TYPE, ATTRS)        \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,   \
+	      true, true, true, ATTRS, false, true)
+
+/* Allocate the enum and the name for a builtin, but do not actually
+   define it here at all.  */
+#undef DEF_BUILTIN_STUB
+#define DEF_BUILTIN_STUB(ENUM, NAME) \
+  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, BT_LAST, BT_LAST, false, false, \
+	       false, ATTR_LAST, false, false)
+
+/* Builtin used by the implementation of OpenACC and OpenMP.  Few of these are
+   actually implemented in the compiler; most are in libgomp.  */
+/* These builtins also need to be enabled in offloading compilers invoked from
+   mkoffload; for that purpose, we're checking the -foffload-abi flag here.  */
+#undef DEF_GOACC_BUILTIN
+#define DEF_GOACC_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+	       false, true, true, ATTRS, false, \
+	       (flag_openacc \
+		|| flag_offload_abi != OFFLOAD_ABI_UNSET))
+#undef DEF_GOACC_BUILTIN_COMPILER
+#define DEF_GOACC_BUILTIN_COMPILER(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+	       flag_openacc, true, true, ATTRS, false, true)
+#undef DEF_GOMP_BUILTIN
+#define DEF_GOMP_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+               false, true, true, ATTRS, false, \
+	       (flag_openacc \
+		|| flag_openmp \
+		|| flag_tree_parallelize_loops > 1 \
+		|| flag_cilkplus \
+		|| flag_offload_abi != OFFLOAD_ABI_UNSET))
+
+/* Builtin used by implementation of Cilk Plus.  Most of these are decomposed
+   by the compiler but a few are implemented in libcilkrts.  */
+#undef DEF_CILK_BUILTIN_STUB
+#define DEF_CILK_BUILTIN_STUB(ENUM, NAME) \
+  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, BT_LAST, BT_LAST, false, false, \
+	       false, ATTR_LAST, false, false)
+
+/* Builtin used by the implementation of GNU TM.  These
+   functions are mapped to the actual implementation of the STM library. */
+#undef DEF_TM_BUILTIN
+#define DEF_TM_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+	       true, true, true, ATTRS, false, flag_tm)
+
+/* Builtin used by the implementation of libsanitizer. These
+   functions are mapped to the actual implementation of the
+   libtsan library. */
+#undef DEF_SANITIZER_BUILTIN
+#define DEF_SANITIZER_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE, TYPE,    \
+	       true, true, true, ATTRS, true, \
+	      (flag_sanitize & (SANITIZE_ADDRESS | SANITIZE_THREAD \
+				| SANITIZE_UNDEFINED | SANITIZE_NONDEFAULT) \
+	       || flag_sanitize_coverage))
+
+#undef DEF_CILKPLUS_BUILTIN
+#define DEF_CILKPLUS_BUILTIN(ENUM, NAME, TYPE, ATTRS)  \
+  DEF_BUILTIN (ENUM, NAME, BUILT_IN_NORMAL, BT_FN_INT_VAR, BT_LAST, \
+  	       false, false, false, ATTRS, false, flag_cilkplus)
+
+/* Builtin used by the implementation of Pointer Bounds Checker.  */
+#undef DEF_CHKP_BUILTIN
+#define DEF_CHKP_BUILTIN(ENUM, NAME, TYPE, ATTRS) \
+  DEF_BUILTIN_CHKP (ENUM, "__builtin_" NAME, BUILT_IN_NORMAL, TYPE,	\
+		    TYPE, true, true, false, ATTRS, true, true)
+
+/* Define an attribute list for math functions that are normally
+   "impure" because some of them may write into global memory for
+   `errno'.  If !flag_errno_math they are instead "const".  */
+#undef ATTR_MATHFN_ERRNO
+#define ATTR_MATHFN_ERRNO (flag_errno_math ? \
+	ATTR_NOTHROW_LEAF_LIST : ATTR_CONST_NOTHROW_LEAF_LIST)
+
+/* Define an attribute list for math functions that are normally
+   "const" but if flag_rounding_math is set they are instead "pure".
+   This distinction accounts for the fact that some math functions
+   check the rounding mode which is akin to examining global
+   memory.  */
+#undef ATTR_MATHFN_FPROUNDING
+#define ATTR_MATHFN_FPROUNDING (flag_rounding_math ? \
+	ATTR_PURE_NOTHROW_LEAF_LIST : ATTR_CONST_NOTHROW_LEAF_LIST)
+
+/* Define an attribute list for math functions that are normally
+   "impure" because some of them may write into global memory for
+   `errno'.  If !flag_errno_math, we can possibly use "pure" or
+   "const" depending on whether we care about FP rounding.  */
+#undef ATTR_MATHFN_FPROUNDING_ERRNO
+#define ATTR_MATHFN_FPROUNDING_ERRNO (flag_errno_math ? \
+	ATTR_NOTHROW_LEAF_LIST : ATTR_MATHFN_FPROUNDING)
+
+/* Define an attribute list for math functions that need to mind FP
+   rounding, but because they store into memory they are never "const"
+   or "pure".  Use of this macro is mainly for documentation and
+   maintenance purposes.  */
+#undef ATTR_MATHFN_FPROUNDING_STORE
+#define ATTR_MATHFN_FPROUNDING_STORE ATTR_NOTHROW_LEAF_LIST
+
+/* Define an attribute list for leaf functions that do not throw
+   exceptions normally, but may throw exceptions when using
+   -fnon-call-exceptions.  */
+#define ATTR_NOTHROWCALL_LEAF_LIST (flag_non_call_exceptions ? \
+	ATTR_LEAF_LIST : ATTR_NOTHROW_LEAF_LIST)
+
+/* Make sure 0 is not a legitimate builtin.  */
+DEF_BUILTIN_STUB(BUILT_IN_NONE, (const char *)0)
+
+/* Category: math builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_ACOS, "acos", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ACOSF, "acosf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ACOSH, "acosh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ACOSHF, "acoshf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ACOSHL, "acoshl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ACOSL, "acosl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C11_BUILTIN        (BUILT_IN_ALIGNED_ALLOC, "aligned_alloc", BT_FN_PTR_SIZE_SIZE, ATTR_MALLOC_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ASIN, "asin", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ASINF, "asinf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ASINH, "asinh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ASINHF, "asinhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ASINHL, "asinhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ASINL, "asinl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_ATAN, "atan", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_ATAN2, "atan2", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ATAN2F, "atan2f", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ATAN2L, "atan2l", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ATANF, "atanf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ATANH, "atanh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ATANHF, "atanhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ATANHL, "atanhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ATANL, "atanl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_CBRT, "cbrt", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_CBRTF, "cbrtf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_CBRTL, "cbrtl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_CEIL, "ceil", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_CEILF, "ceilf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_CEILL, "ceill", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_COPYSIGN, "copysign", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_COPYSIGNF, "copysignf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_COPYSIGNL, "copysignl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_COS, "cos", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_COSF, "cosf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_COSH, "cosh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_COSHF, "coshf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_COSHL, "coshl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_COSL, "cosl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DREM, "drem", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DREMF, "dremf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DREML, "dreml", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ERF, "erf", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ERFC, "erfc", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ERFCF, "erfcf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ERFCL, "erfcl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ERFF, "erff", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ERFL, "erfl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_EXP, "exp", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_EXP10, "exp10", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_EXP10F, "exp10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_EXP10L, "exp10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXP2, "exp2", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXP2F, "exp2f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXP2L, "exp2l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_EXPF, "expf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_EXPL, "expl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXPM1, "expm1", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXPM1F, "expm1f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_EXPM1L, "expm1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_FABS, "fabs", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FABSF, "fabsf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FABSL, "fabsl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FABSD32, "fabsd32", BT_FN_DFLOAT32_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FABSD64, "fabsd64", BT_FN_DFLOAT64_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FABSD128, "fabsd128", BT_FN_DFLOAT128_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FDIM, "fdim", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_FDIMF, "fdimf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_FDIML, "fdiml", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_FLOOR, "floor", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FLOORF, "floorf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FLOORL, "floorl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMA, "fma", BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_FMAF, "fmaf", BT_FN_FLOAT_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_FMAL, "fmal", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_FMAX, "fmax", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMAXF, "fmaxf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMAXL, "fmaxl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMIN, "fmin", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMINF, "fminf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_FMINL, "fminl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_FMOD, "fmod", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FMODF, "fmodf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FMODL, "fmodl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_FREXP, "frexp", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPF, "frexpf", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_FREXPL, "frexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMA, "gamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAF, "gammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAL, "gammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMA_R, "gamma_r", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAF_R, "gammaf_r", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GAMMAL_R, "gammal_r", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_GCC_BUILTIN        (BUILT_IN_HUGE_VAL, "huge_val", BT_FN_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_HUGE_VALF, "huge_valf", BT_FN_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_HUGE_VALL, "huge_vall", BT_FN_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_HYPOT, "hypot", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_HYPOTF, "hypotf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_HYPOTL, "hypotl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_ICEIL, "iceil", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_ICEILF, "iceilf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_ICEILL, "iceill", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_IFLOOR, "ifloor", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_IFLOORF, "ifloorf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_IFLOORL, "ifloorl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ILOGB, "ilogb", BT_FN_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ILOGBF, "ilogbf", BT_FN_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_ILOGBL, "ilogbl", BT_FN_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_INF, "inf", BT_FN_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INFF, "inff", BT_FN_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INFL, "infl", BT_FN_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN	       (BUILT_IN_INFD32, "infd32", BT_FN_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INFD64, "infd64", BT_FN_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INFD128, "infd128", BT_FN_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_IRINT, "irint", BT_FN_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IRINTF, "irintf", BT_FN_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IRINTL, "irintl", BT_FN_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IROUND, "iround", BT_FN_INT_DOUBLE, ATTR_MATHFN_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IROUNDF, "iroundf", BT_FN_INT_FLOAT, ATTR_MATHFN_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_IROUNDL, "iroundl", BT_FN_INT_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J0, "j0", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J0F, "j0f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J0L, "j0l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J1, "j1", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J1F, "j1f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_J1L, "j1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_JN, "jn", BT_FN_DOUBLE_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_JNF, "jnf", BT_FN_FLOAT_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_JNL, "jnl", BT_FN_LONGDOUBLE_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_LCEIL, "lceil", BT_FN_LONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LCEILF, "lceilf", BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LCEILL, "lceill", BT_FN_LONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_LDEXP, "ldexp", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPF, "ldexpf", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LDEXPL, "ldexpl", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_LFLOOR, "lfloor", BT_FN_LONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LFLOORF, "lfloorf", BT_FN_LONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LFLOORL, "lfloorl", BT_FN_LONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_LGAMMA, "lgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_LGAMMAF, "lgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_LGAMMAL, "lgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_LGAMMA_R, "lgamma_r", BT_FN_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_LGAMMAF_R, "lgammaf_r", BT_FN_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_LGAMMAL_R, "lgammal_r", BT_FN_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_GCC_BUILTIN        (BUILT_IN_LLCEIL, "llceil", BT_FN_LONGLONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLCEILF, "llceilf", BT_FN_LONGLONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLCEILL, "llceill", BT_FN_LONGLONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLFLOOR, "llfloor", BT_FN_LONGLONG_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLFLOORF, "llfloorf", BT_FN_LONGLONG_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LLFLOORL, "llfloorl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_LLRINT, "llrint", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLRINTF, "llrintf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLRINTL, "llrintl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLROUND, "llround", BT_FN_LONGLONG_DOUBLE, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLROUNDF, "llroundf", BT_FN_LONGLONG_FLOAT, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LLROUNDL, "llroundl", BT_FN_LONGLONG_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_LOG, "log", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_LOG10, "log10", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LOG10F, "log10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LOG10L, "log10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG1P, "log1p", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG1PF, "log1pf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG1PL, "log1pl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG2, "log2", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG2F, "log2f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOG2L, "log2l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOGB, "logb", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOGBF, "logbf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LOGBL, "logbl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LOGF, "logf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_LOGL, "logl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LRINT, "lrint", BT_FN_LONG_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LRINTF, "lrintf", BT_FN_LONG_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LRINTL, "lrintl", BT_FN_LONG_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LROUND, "lround", BT_FN_LONG_DOUBLE, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LROUNDF, "lroundf", BT_FN_LONG_FLOAT, ATTR_MATHFN_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_LROUNDL, "lroundl", BT_FN_LONG_LONGDOUBLE, ATTR_MATHFN_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_MODF, "modf", BT_FN_DOUBLE_DOUBLE_DOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_MODFF, "modff", BT_FN_FLOAT_FLOAT_FLOATPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_MODFL, "modfl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_NAN, "nan", BT_FN_DOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_C99_BUILTIN        (BUILT_IN_NANF, "nanf", BT_FN_FLOAT_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_C99_BUILTIN        (BUILT_IN_NANL, "nanl", BT_FN_LONGDOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NAND32, "nand32", BT_FN_DFLOAT32_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NAND64, "nand64", BT_FN_DFLOAT64_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NAND128, "nand128", BT_FN_DFLOAT128_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NANS, "nans", BT_FN_DOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NANSF, "nansf", BT_FN_FLOAT_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_GCC_BUILTIN        (BUILT_IN_NANSL, "nansl", BT_FN_LONGDOUBLE_CONST_STRING, ATTR_CONST_NOTHROW_NONNULL)
+DEF_C99_BUILTIN        (BUILT_IN_NEARBYINT, "nearbyint", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_NEARBYINTF, "nearbyintf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_NEARBYINTL, "nearbyintl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTAFTER, "nextafter", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTAFTERF, "nextafterf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTAFTERL, "nextafterl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTTOWARD, "nexttoward", BT_FN_DOUBLE_DOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTTOWARDF, "nexttowardf", BT_FN_FLOAT_FLOAT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_NEXTTOWARDL, "nexttowardl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_POW, "pow", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10, "pow10", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10F, "pow10f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_POW10L, "pow10l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_POWF, "powf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_GCC_BUILTIN        (BUILT_IN_POWI, "powi", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_POWIF, "powif", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_POWIL, "powil", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_POWL, "powl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_REMAINDER, "remainder", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_REMAINDERF, "remainderf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_REMAINDERL, "remainderl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_REMQUO, "remquo", BT_FN_DOUBLE_DOUBLE_DOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_REMQUOF, "remquof", BT_FN_FLOAT_FLOAT_FLOAT_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_REMQUOL, "remquol", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_INTPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_BUILTIN        (BUILT_IN_RINT, "rint", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_RINTF, "rintf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_RINTL, "rintl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_ROUND, "round", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ROUNDF, "roundf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ROUNDL, "roundl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SCALB, "scalb", BT_FN_DOUBLE_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SCALBF, "scalbf", BT_FN_FLOAT_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SCALBL, "scalbl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBLN, "scalbln", BT_FN_DOUBLE_DOUBLE_LONG, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBLNF, "scalblnf", BT_FN_FLOAT_FLOAT_LONG, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBLNL, "scalblnl", BT_FN_LONGDOUBLE_LONGDOUBLE_LONG, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBN, "scalbn", BT_FN_DOUBLE_DOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBNF, "scalbnf", BT_FN_FLOAT_FLOAT_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_SCALBNL, "scalbnl", BT_FN_LONGDOUBLE_LONGDOUBLE_INT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBIT, "signbit", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITF, "signbitf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITL, "signbitl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITD32, "signbitd32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITD64, "signbitd64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNBITD128, "signbitd128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICAND, "significand", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICANDF, "significandf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SIGNIFICANDL, "significandl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_SIN, "sin", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SINCOS, "sincos", BT_FN_VOID_DOUBLE_DOUBLEPTR_DOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SINCOSF, "sincosf", BT_FN_VOID_FLOAT_FLOATPTR_FLOATPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SINCOSL, "sincosl", BT_FN_VOID_LONGDOUBLE_LONGDOUBLEPTR_LONGDOUBLEPTR, ATTR_MATHFN_FPROUNDING_STORE)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SINF, "sinf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_SINH, "sinh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SINHF, "sinhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SINHL, "sinhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SINL, "sinl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_SQRT, "sqrt", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SQRTF, "sqrtf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_SQRTL, "sqrtl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_LIB_BUILTIN        (BUILT_IN_TAN, "tan", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_TANF, "tanf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_LIB_BUILTIN        (BUILT_IN_TANH, "tanh", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_TANHF, "tanhf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_TANHL, "tanhl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_TANL, "tanl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_BUILTIN        (BUILT_IN_TGAMMA, "tgamma", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_TGAMMAF, "tgammaf", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_TGAMMAL, "tgammal", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_C99_BUILTIN        (BUILT_IN_TRUNC, "trunc", BT_FN_DOUBLE_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_TRUNCF, "truncf", BT_FN_FLOAT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_TRUNCL, "truncl", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y0, "y0", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y0F, "y0f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y0L, "y0l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y1, "y1", BT_FN_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y1F, "y1f", BT_FN_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_Y1L, "y1l", BT_FN_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_YN, "yn", BT_FN_DOUBLE_INT_DOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_YNF, "ynf", BT_FN_FLOAT_INT_FLOAT, ATTR_MATHFN_FPROUNDING_ERRNO)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_YNL, "ynl", BT_FN_LONGDOUBLE_INT_LONGDOUBLE, ATTR_MATHFN_FPROUNDING_ERRNO)
+
+/* Category: _Complex math builtins.  */
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CABS, "cabs", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CABSF, "cabsf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CABSL, "cabsl", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOS, "cacos", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSF, "cacosf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSH, "cacosh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSHF, "cacoshf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSHL, "cacoshl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CACOSL, "cacosl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CARG, "carg", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CARGF, "cargf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CARGL, "cargl", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASIN, "casin", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINF, "casinf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINH, "casinh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINHF, "casinhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINHL, "casinhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CASINL, "casinl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATAN, "catan", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANF, "catanf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANH, "catanh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANHF, "catanhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANHL, "catanhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CATANL, "catanl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOS, "ccos", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSF, "ccosf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSH, "ccosh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSHF, "ccoshf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSHL, "ccoshl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CCOSL, "ccosl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CEXP, "cexp", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CEXPF, "cexpf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CEXPL, "cexpl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_CEXPI, "cexpi", BT_FN_COMPLEX_DOUBLE_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_CEXPIF, "cexpif", BT_FN_COMPLEX_FLOAT_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_GCC_BUILTIN        (BUILT_IN_CEXPIL, "cexpil", BT_FN_COMPLEX_LONGDOUBLE_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CIMAG, "cimag", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CIMAGF, "cimagf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CIMAGL, "cimagl", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CLOG, "clog", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CLOGF, "clogf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CLOGL, "clogl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_C99RES_BUILTIN (BUILT_IN_CLOG10, "clog10", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_C99RES_BUILTIN (BUILT_IN_CLOG10F, "clog10f", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_EXT_C99RES_BUILTIN (BUILT_IN_CLOG10L, "clog10l", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CONJ, "conj", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CONJF, "conjf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CONJL, "conjl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPOW, "cpow", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPOWF, "cpowf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPOWL, "cpowl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPROJ, "cproj", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPROJF, "cprojf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CPROJL, "cprojl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CREAL, "creal", BT_FN_DOUBLE_COMPLEX_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CREALF, "crealf", BT_FN_FLOAT_COMPLEX_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CREALL, "creall", BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSIN, "csin", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINF, "csinf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINH, "csinh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINHF, "csinhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINHL, "csinhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSINL, "csinl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSQRT, "csqrt", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSQRTF, "csqrtf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CSQRTL, "csqrtl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTAN, "ctan", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANF, "ctanf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANH, "ctanh", BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANHF, "ctanhf", BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANHL, "ctanhl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+DEF_C99_COMPL_BUILTIN        (BUILT_IN_CTANL, "ctanl", BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, ATTR_MATHFN_FPROUNDING)
+
+/* Category: string/memory builtins.  */
+/* bcmp, bcopy and bzero have traditionally accepted NULL pointers
+   when the length parameter is zero, so don't apply attribute "nonnull".  */
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_BCMP, "bcmp", BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_BCOPY, "bcopy", BT_FN_VOID_CONST_PTR_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_BZERO, "bzero", BT_FN_VOID_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_INDEX, "index", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_MEMCHR, "memchr", BT_FN_PTR_CONST_PTR_INT_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_MEMCMP, "memcmp", BT_FN_INT_CONST_PTR_CONST_PTR_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN_CHKP   (BUILT_IN_MEMCPY, "memcpy", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN_CHKP   (BUILT_IN_MEMMOVE, "memmove", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN_CHKP (BUILT_IN_MEMPCPY, "mempcpy", BT_FN_PTR_PTR_CONST_PTR_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN_CHKP   (BUILT_IN_MEMSET, "memset", BT_FN_PTR_PTR_INT_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_RINDEX, "rindex", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN_CHKP (BUILT_IN_STPCPY, "stpcpy", BT_FN_STRING_STRING_CONST_STRING, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPNCPY, "stpncpy", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRCASECMP, "strcasecmp", BT_FN_INT_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN_CHKP   (BUILT_IN_STRCAT, "strcat", BT_FN_STRING_STRING_CONST_STRING, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN_CHKP   (BUILT_IN_STRCHR, "strchr", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRCMP, "strcmp", BT_FN_INT_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN_CHKP   (BUILT_IN_STRCPY, "strcpy", BT_FN_STRING_STRING_CONST_STRING, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRCSPN, "strcspn", BT_FN_SIZE_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRDUP, "strdup", BT_FN_STRING_CONST_STRING, ATTR_MALLOC_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNDUP, "strndup", BT_FN_STRING_CONST_STRING_SIZE, ATTR_MALLOC_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN_CHKP   (BUILT_IN_STRLEN, "strlen", BT_FN_SIZE_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNCASECMP, "strncasecmp", BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRNCAT, "strncat", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRNCMP, "strncmp", BT_FN_INT_CONST_STRING_CONST_STRING_SIZE, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRNCPY, "strncpy", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRPBRK, "strpbrk", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRRCHR, "strrchr", BT_FN_STRING_CONST_STRING_INT, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRSPN, "strspn", BT_FN_SIZE_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_STRSTR, "strstr", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_PURE_NOTHROW_NONNULL_LEAF)
+
+/* Category: stdio builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_FPRINTF, "fprintf", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPRINTF_UNLOCKED, "fprintf_unlocked", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
+DEF_LIB_BUILTIN        (BUILT_IN_PUTC, "putc", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTC_UNLOCKED, "putc_unlocked", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_FPUTC, "fputc", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTC_UNLOCKED, "fputc_unlocked", BT_FN_INT_INT_FILEPTR, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_FPUTS, "fputs", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPUTS_UNLOCKED, "fputs_unlocked", BT_FN_INT_CONST_STRING_FILEPTR, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_FSCANF, "fscanf", BT_FN_INT_FILEPTR_CONST_STRING_VAR, ATTR_FORMAT_SCANF_2_3)
+DEF_LIB_BUILTIN        (BUILT_IN_FWRITE, "fwrite", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FWRITE_UNLOCKED, "fwrite_unlocked", BT_FN_SIZE_CONST_PTR_SIZE_SIZE_FILEPTR, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_PRINTF, "printf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_UNLOCKED, "printf_unlocked", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_1_2)
+DEF_LIB_BUILTIN        (BUILT_IN_PUTCHAR, "putchar", BT_FN_INT_INT, ATTR_NULL)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTCHAR_UNLOCKED, "putchar_unlocked", BT_FN_INT_INT, ATTR_NULL)
+DEF_LIB_BUILTIN        (BUILT_IN_PUTS, "puts", BT_FN_INT_CONST_STRING, ATTR_NONNULL_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PUTS_UNLOCKED, "puts_unlocked", BT_FN_INT_CONST_STRING, ATTR_NONNULL_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_SCANF, "scanf", BT_FN_INT_CONST_STRING_VAR, ATTR_FORMAT_SCANF_1_2)
+DEF_C99_BUILTIN        (BUILT_IN_SNPRINTF, "snprintf", BT_FN_INT_STRING_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_3_4)
+DEF_LIB_BUILTIN        (BUILT_IN_SPRINTF, "sprintf", BT_FN_INT_STRING_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_2_3)
+DEF_LIB_BUILTIN        (BUILT_IN_SSCANF, "sscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_FORMAT_SCANF_NOTHROW_2_3)
+DEF_LIB_BUILTIN        (BUILT_IN_VFPRINTF, "vfprintf", BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0)
+DEF_C99_BUILTIN        (BUILT_IN_VFSCANF, "vfscanf", BT_FN_INT_FILEPTR_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_2_0)
+DEF_LIB_BUILTIN        (BUILT_IN_VPRINTF, "vprintf", BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_1_0)
+DEF_C99_BUILTIN        (BUILT_IN_VSCANF, "vscanf", BT_FN_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_1_0)
+DEF_C99_BUILTIN        (BUILT_IN_VSNPRINTF, "vsnprintf", BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_3_0)
+DEF_LIB_BUILTIN        (BUILT_IN_VSPRINTF, "vsprintf", BT_FN_INT_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_2_0)
+DEF_C99_BUILTIN        (BUILT_IN_VSSCANF, "vsscanf", BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG, ATTR_FORMAT_SCANF_NOTHROW_2_0)
+
+/* Category: ctype builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_ISALNUM, "isalnum", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISALPHA, "isalpha", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISASCII, "isascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ISBLANK, "isblank", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISCNTRL, "iscntrl", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISDIGIT, "isdigit", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISGRAPH, "isgraph", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISLOWER, "islower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISPRINT, "isprint", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISPUNCT, "ispunct", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISSPACE, "isspace", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISUPPER, "isupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ISXDIGIT, "isxdigit", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_TOASCII, "toascii", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_TOLOWER, "tolower", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_TOUPPER, "toupper", BT_FN_INT_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+
+/* Category: wctype builtins.  */
+DEF_C94_BUILTIN        (BUILT_IN_ISWALNUM, "iswalnum", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWALPHA, "iswalpha", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_ISWBLANK, "iswblank", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWCNTRL, "iswcntrl", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWDIGIT, "iswdigit", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWGRAPH, "iswgraph", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWLOWER, "iswlower", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWPRINT, "iswprint", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWPUNCT, "iswpunct", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWSPACE, "iswspace", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWUPPER, "iswupper", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_ISWXDIGIT, "iswxdigit", BT_FN_INT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_TOWLOWER, "towlower", BT_FN_WINT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_C94_BUILTIN        (BUILT_IN_TOWUPPER, "towupper", BT_FN_WINT_WINT, ATTR_PURE_NOTHROW_LEAF_LIST)
+
+/* Category: integer overflow checking builtins.  */
+DEF_GCC_BUILTIN        (BUILT_IN_ADD_OVERFLOW, "add_overflow", BT_FN_BOOL_VAR, ATTR_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_SUB_OVERFLOW, "sub_overflow", BT_FN_BOOL_VAR, ATTR_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_MUL_OVERFLOW, "mul_overflow", BT_FN_BOOL_VAR, ATTR_NOTHROW_TYPEGENERIC_LEAF)
+/* Clang compatibility.  */
+DEF_GCC_BUILTIN        (BUILT_IN_SADD_OVERFLOW, "sadd_overflow", BT_FN_BOOL_INT_INT_INTPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SADDL_OVERFLOW, "saddl_overflow", BT_FN_BOOL_LONG_LONG_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SADDLL_OVERFLOW, "saddll_overflow", BT_FN_BOOL_LONGLONG_LONGLONG_LONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SSUB_OVERFLOW, "ssub_overflow", BT_FN_BOOL_INT_INT_INTPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SSUBL_OVERFLOW, "ssubl_overflow", BT_FN_BOOL_LONG_LONG_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SSUBLL_OVERFLOW, "ssubll_overflow", BT_FN_BOOL_LONGLONG_LONGLONG_LONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SMUL_OVERFLOW, "smul_overflow", BT_FN_BOOL_INT_INT_INTPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SMULL_OVERFLOW, "smull_overflow", BT_FN_BOOL_LONG_LONG_LONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SMULLL_OVERFLOW, "smulll_overflow", BT_FN_BOOL_LONGLONG_LONGLONG_LONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UADD_OVERFLOW, "uadd_overflow", BT_FN_BOOL_UINT_UINT_UINTPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UADDL_OVERFLOW, "uaddl_overflow", BT_FN_BOOL_ULONG_ULONG_ULONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UADDLL_OVERFLOW, "uaddll_overflow", BT_FN_BOOL_ULONGLONG_ULONGLONG_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_USUB_OVERFLOW, "usub_overflow", BT_FN_BOOL_UINT_UINT_UINTPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_USUBL_OVERFLOW, "usubl_overflow", BT_FN_BOOL_ULONG_ULONG_ULONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_USUBLL_OVERFLOW, "usubll_overflow", BT_FN_BOOL_ULONGLONG_ULONGLONG_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UMUL_OVERFLOW, "umul_overflow", BT_FN_BOOL_UINT_UINT_UINTPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UMULL_OVERFLOW, "umull_overflow", BT_FN_BOOL_ULONG_ULONG_ULONGPTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UMULLL_OVERFLOW, "umulll_overflow", BT_FN_BOOL_ULONGLONG_ULONGLONG_ULONGLONGPTR, ATTR_NOTHROW_LEAF_LIST)
+
+/* Category: miscellaneous builtins.  */
+DEF_LIB_BUILTIN        (BUILT_IN_ABORT, "abort", BT_FN_VOID, ATTR_TMPURE_NORETURN_NOTHROW_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_ABS, "abs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_AGGREGATE_INCOMING_ADDRESS, "aggregate_incoming_address", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ALLOCA, "alloca", BT_FN_PTR_SIZE, ATTR_MALLOC_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_APPLY, "apply", BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_APPLY_ARGS, "apply_args", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_BSWAP16, "bswap16", BT_FN_UINT16_UINT16, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_BSWAP32, "bswap32", BT_FN_UINT32_UINT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_BSWAP64, "bswap64", BT_FN_UINT64_UINT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_CLEAR_CACHE, "__clear_cache", BT_FN_VOID_PTR_PTR, ATTR_NOTHROW_LEAF_LIST)
+/* [trans-mem]: Adjust BUILT_IN_TM_CALLOC if BUILT_IN_CALLOC is changed.  */
+DEF_LIB_BUILTIN        (BUILT_IN_CALLOC, "calloc", BT_FN_PTR_SIZE_SIZE, ATTR_MALLOC_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLASSIFY_TYPE, "classify_type", BT_FN_INT_VAR, ATTR_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLZ, "clz", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLZIMAX, "clzimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLZL, "clzl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLZLL, "clzll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CONSTANT_P, "constant_p", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CTZ, "ctz", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CTZIMAX, "ctzimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CTZL, "ctzl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CTZLL, "ctzll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLRSB, "clrsb", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLRSBIMAX, "clrsbimax", BT_FN_INT_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLRSBL, "clrsbl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_CLRSBLL, "clrsbll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DCGETTEXT, "dcgettext", BT_FN_STRING_CONST_STRING_CONST_STRING_INT, ATTR_FORMAT_ARG_2)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_DGETTEXT, "dgettext", BT_FN_STRING_CONST_STRING_CONST_STRING, ATTR_FORMAT_ARG_2)
+DEF_GCC_BUILTIN        (BUILT_IN_DWARF_CFA, "dwarf_cfa", BT_FN_PTR, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_DWARF_SP_COLUMN, "dwarf_sp_column", BT_FN_UINT, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_EH_RETURN, "eh_return", BT_FN_VOID_PTRMODE_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EH_RETURN_DATA_REGNO, "eh_return_data_regno", BT_FN_INT_INT, ATTR_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECL, "execl", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_SENTINEL_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECLP, "execlp", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_SENTINEL_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECLE, "execle", BT_FN_INT_CONST_STRING_CONST_STRING_VAR, ATTR_NOTHROW_SENTINEL_1)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECV, "execv", BT_FN_INT_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECVP, "execvp", BT_FN_INT_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_EXECVE, "execve", BT_FN_INT_CONST_STRING_PTR_CONST_STRING_PTR_CONST_STRING, ATTR_NOTHROW_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_EXIT, "exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EXPECT, "expect", BT_FN_LONG_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_ASSUME_ALIGNED, "assume_aligned", BT_FN_PTR_CONST_PTR_SIZE_VAR, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EXTEND_POINTER, "extend_pointer", BT_FN_UNWINDWORD_PTR, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_EXTRACT_RETURN_ADDR, "extract_return_addr", BT_FN_PTR_PTR, ATTR_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFS, "ffs", BT_FN_INT_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSIMAX, "ffsimax", BT_FN_INT_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSL, "ffsl", BT_FN_INT_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FFSLL, "ffsll", BT_FN_INT_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN        (BUILT_IN_FORK, "fork", BT_FN_PID, ATTR_NOTHROW_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FRAME_ADDRESS, "frame_address", BT_FN_PTR_UINT, ATTR_NULL)
+/* [trans-mem]: Adjust BUILT_IN_TM_FREE if BUILT_IN_FREE is changed.  */
+DEF_LIB_BUILTIN        (BUILT_IN_FREE, "free", BT_FN_VOID_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FROB_RETURN_ADDR, "frob_return_addr", BT_FN_PTR_PTR, ATTR_NULL)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_GETTEXT, "gettext", BT_FN_STRING_CONST_STRING, ATTR_FORMAT_ARG_1)
+DEF_C99_BUILTIN        (BUILT_IN_IMAXABS, "imaxabs", BT_FN_INTMAX_INTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_INIT_DWARF_REG_SIZES, "init_dwarf_reg_size_table", BT_FN_VOID_PTR, ATTR_NULL)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITE, "finite", BT_FN_INT_DOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITEF, "finitef", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITEL, "finitel", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITED32, "finited32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITED64, "finited64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FINITED128, "finited128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_FPCLASSIFY, "fpclassify", BT_FN_INT_INT_INT_INT_INT_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISFINITE, "isfinite", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISINF_SIGN, "isinf_sign", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ISINF, "isinf", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFF, "isinff", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFL, "isinfl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFD32, "isinfd32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFD64, "isinfd64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISINFD128, "isinfd128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_C90RES_BUILTIN (BUILT_IN_ISNAN, "isnan", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNANF, "isnanf", BT_FN_INT_FLOAT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNANL, "isnanl", BT_FN_INT_LONGDOUBLE, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNAND32, "isnand32", BT_FN_INT_DFLOAT32, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNAND64, "isnand64", BT_FN_INT_DFLOAT64, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_ISNAND128, "isnand128", BT_FN_INT_DFLOAT128, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_ISNORMAL, "isnormal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISGREATER, "isgreater", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISGREATEREQUAL, "isgreaterequal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISLESS, "isless", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISLESSEQUAL, "islessequal", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISLESSGREATER, "islessgreater", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_ISUNORDERED, "isunordered", BT_FN_INT_VAR, ATTR_CONST_NOTHROW_TYPEGENERIC_LEAF)
+DEF_LIB_BUILTIN        (BUILT_IN_LABS, "labs", BT_FN_LONG_LONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN_LLABS, "llabs", BT_FN_LONGLONG_LONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_LONGJMP, "longjmp", BT_FN_VOID_PTR_INT, ATTR_NORETURN_NOTHROW_LIST)
+/* [trans-mem]: Adjust BUILT_IN_TM_MALLOC if BUILT_IN_MALLOC is changed.  */
+DEF_LIB_BUILTIN        (BUILT_IN_MALLOC, "malloc", BT_FN_PTR_SIZE, ATTR_MALLOC_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_NEXT_ARG, "next_arg", BT_FN_PTR_VAR, ATTR_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_PARITY, "parity", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_PARITYIMAX, "parityimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_PARITYL, "parityl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_PARITYLL, "parityll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNT, "popcount", BT_FN_INT_UINT, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTIMAX, "popcountimax", BT_FN_INT_UINTMAX, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTL, "popcountl", BT_FN_INT_ULONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_POPCOUNTLL, "popcountll", BT_FN_INT_ULONGLONG, ATTR_CONST_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_POSIX_MEMALIGN, "posix_memalign", BT_FN_INT_PTRPTR_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_GCC_BUILTIN        (BUILT_IN_PREFETCH, "prefetch", BT_FN_VOID_CONST_PTR_VAR, ATTR_NOVOPS_LEAF_LIST)
+DEF_LIB_BUILTIN        (BUILT_IN_REALLOC, "realloc", BT_FN_PTR_PTR_SIZE, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_RETURN, "return", BT_FN_VOID_PTR, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_RETURN_ADDRESS, "return_address", BT_FN_PTR_UINT, ATTR_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_SAVEREGS, "saveregs", BT_FN_PTR_VAR, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_SETJMP, "setjmp", BT_FN_INT_PTR, ATTR_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRFMON, "strfmon", BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR, ATTR_FORMAT_STRFMON_NOTHROW_3_4)
+DEF_LIB_BUILTIN        (BUILT_IN_STRFTIME, "strftime", BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_PTR, ATTR_FORMAT_STRFTIME_NOTHROW_3_0)
+DEF_GCC_BUILTIN        (BUILT_IN_TRAP, "trap", BT_FN_VOID, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UNREACHABLE, "unreachable", BT_FN_VOID, ATTR_CONST_NORETURN_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_UNWIND_INIT, "unwind_init", BT_FN_VOID, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_UPDATE_SETJMP_BUF, "update_setjmp_buf", BT_FN_VOID_PTR_INT, ATTR_NULL)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_COPY, "va_copy", BT_FN_VOID_VALIST_REF_VALIST_ARG, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_END, "va_end", BT_FN_VOID_VALIST_REF, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_START, "va_start", BT_FN_VOID_VALIST_REF_VAR, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_ARG_PACK, "va_arg_pack", BT_FN_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN        (BUILT_IN_VA_ARG_PACK_LEN, "va_arg_pack_len", BT_FN_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN__EXIT, "_exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+DEF_C99_BUILTIN        (BUILT_IN__EXIT2, "_Exit", BT_FN_VOID_INT, ATTR_NORETURN_NOTHROW_LEAF_LIST)
+
+/* Implementing nested functions.  */
+DEF_BUILTIN_STUB (BUILT_IN_INIT_TRAMPOLINE, "__builtin_init_trampoline")
+DEF_BUILTIN_STUB (BUILT_IN_INIT_HEAP_TRAMPOLINE, "__builtin_init_heap_trampoline")
+DEF_BUILTIN_STUB (BUILT_IN_ADJUST_TRAMPOLINE, "__builtin_adjust_trampoline")
+DEF_BUILTIN_STUB (BUILT_IN_NONLOCAL_GOTO, "__builtin_nonlocal_goto")
+
+/* Implementing __builtin_setjmp.  */
+DEF_BUILTIN_STUB (BUILT_IN_SETJMP_SETUP, "__builtin_setjmp_setup")
+DEF_BUILTIN_STUB (BUILT_IN_SETJMP_RECEIVER, "__builtin_setjmp_receiver")
+
+/* Implementing variable sized local variables.  */
+DEF_BUILTIN_STUB (BUILT_IN_STACK_SAVE, "__builtin_stack_save")
+DEF_BUILTIN_STUB (BUILT_IN_STACK_RESTORE, "__builtin_stack_restore")
+DEF_BUILTIN_STUB (BUILT_IN_ALLOCA_WITH_ALIGN, "__builtin_alloca_with_align")
+
+/* Object size checking builtins.  */
+DEF_GCC_BUILTIN	       (BUILT_IN_OBJECT_SIZE, "object_size", BT_FN_SIZE_CONST_PTR_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_EXT_LIB_BUILTIN_CHKP (BUILT_IN_MEMCPY_CHK, "__memcpy_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN_CHKP (BUILT_IN_MEMMOVE_CHK, "__memmove_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN_CHKP (BUILT_IN_MEMPCPY_CHK, "__mempcpy_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN_CHKP (BUILT_IN_MEMSET_CHK, "__memset_chk", BT_FN_PTR_PTR_INT_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN_CHKP (BUILT_IN_STPCPY_CHK, "__stpcpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STPNCPY_CHK, "__stpncpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN_CHKP (BUILT_IN_STRCAT_CHK, "__strcat_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN_CHKP (BUILT_IN_STRCPY_CHK, "__strcpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNCAT_CHK, "__strncat_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_STRNCPY_CHK, "__strncpy_chk", BT_FN_STRING_STRING_CONST_STRING_SIZE_SIZE, ATTR_NOTHROW_NONNULL_LEAF)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SNPRINTF_CHK, "__snprintf_chk", BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_5_6)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_SPRINTF_CHK, "__sprintf_chk", BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_NOTHROW_4_5)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_VSNPRINTF_CHK, "__vsnprintf_chk", BT_FN_INT_STRING_SIZE_INT_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_5_0)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_VSPRINTF_CHK, "__vsprintf_chk", BT_FN_INT_STRING_INT_SIZE_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_NOTHROW_4_0)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_FPRINTF_CHK, "__fprintf_chk", BT_FN_INT_FILEPTR_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_3_4)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_PRINTF_CHK, "__printf_chk", BT_FN_INT_INT_CONST_STRING_VAR, ATTR_FORMAT_PRINTF_2_3)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_VFPRINTF_CHK, "__vfprintf_chk", BT_FN_INT_FILEPTR_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_3_0)
+DEF_EXT_LIB_BUILTIN    (BUILT_IN_VPRINTF_CHK, "__vprintf_chk", BT_FN_INT_INT_CONST_STRING_VALIST_ARG, ATTR_FORMAT_PRINTF_2_0)
+
+/* Profiling hooks.  */
+DEF_BUILTIN (BUILT_IN_PROFILE_FUNC_ENTER, "__cyg_profile_func_enter", BUILT_IN_NORMAL, BT_FN_VOID_PTR_PTR, BT_LAST,
+	     false, false, false, ATTR_NULL, true, true)
+DEF_BUILTIN (BUILT_IN_PROFILE_FUNC_EXIT, "__cyg_profile_func_exit", BUILT_IN_NORMAL, BT_FN_VOID_PTR_PTR, BT_LAST,
+	     false, false, false, ATTR_NULL, true, true)
+
+/* TLS thread pointer related builtins.  */
+DEF_BUILTIN (BUILT_IN_THREAD_POINTER, "__builtin_thread_pointer",
+	     BUILT_IN_NORMAL, BT_FN_PTR, BT_LAST,
+	     false, false, true, ATTR_CONST_NOTHROW_LIST, true,
+	     targetm.have_tls)
+
+DEF_BUILTIN (BUILT_IN_SET_THREAD_POINTER, "__builtin_set_thread_pointer",
+	     BUILT_IN_NORMAL, BT_FN_VOID_PTR, BT_LAST,
+	     false, false, true, ATTR_NOTHROW_LIST, true,
+	     targetm.have_tls)
+
+/* TLS emulation.  */
+DEF_BUILTIN (BUILT_IN_EMUTLS_GET_ADDRESS, targetm.emutls.get_address,
+	     BUILT_IN_NORMAL,
+	     BT_FN_PTR_PTR,  BT_FN_PTR_PTR,
+	     true, true, true, ATTR_CONST_NOTHROW_NONNULL_LEAF, false,
+	     !targetm.have_tls)
+DEF_BUILTIN (BUILT_IN_EMUTLS_REGISTER_COMMON,
+	     targetm.emutls.register_common, BUILT_IN_NORMAL,
+	     BT_FN_VOID_PTR_WORD_WORD_PTR, BT_FN_VOID_PTR_WORD_WORD_PTR,
+	     true, true, true, ATTR_NOTHROW_LEAF_LIST, false,
+	     !targetm.have_tls)
+
+/* Exception support.  */
+DEF_BUILTIN_STUB (BUILT_IN_UNWIND_RESUME, "__builtin_unwind_resume")
+DEF_BUILTIN_STUB (BUILT_IN_CXA_END_CLEANUP, "__builtin_cxa_end_cleanup")
+DEF_BUILTIN_STUB (BUILT_IN_EH_POINTER, "__builtin_eh_pointer")
+DEF_BUILTIN_STUB (BUILT_IN_EH_FILTER, "__builtin_eh_filter")
+DEF_BUILTIN_STUB (BUILT_IN_EH_COPY_VALUES, "__builtin_eh_copy_values")
+
+/* __FILE__, __LINE__, __FUNCTION__ as builtins.  */
+DEF_GCC_BUILTIN (BUILT_IN_FILE, "FILE", BT_FN_CONST_STRING, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_FUNCTION, "FUNCTION", BT_FN_CONST_STRING, ATTR_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_LINE, "LINE", BT_FN_INT, ATTR_NOTHROW_LEAF_LIST)
+
+#if 0 //Ifdefed out because we hard-coded the proper overloadings of the atomic built-ins
+/* Synchronization Primitives.  */
+#include "sync-builtins.def"
+
+/* Offloading and Multi Processing builtins.  */
+#include "omp-builtins.def"
+
+/* Cilk keywords builtins.  */
+#include "cilk-builtins.def"
+
+/* GTM builtins. */
+#include "gtm-builtins.def"
+
+/* Sanitizer builtins. */
+#include "sanitizer.def"
+
+/* Cilk Plus builtins.  */
+#include "cilkplus.def"
+
+/* Pointer Bounds Checker builtins.  */
+#include "chkp-builtins.def"
+#endif
+
+#undef DEF_BUILTIN_CHKP
+#undef DEF_BUILTIN
Index: libcfa/prelude/extras.c
===================================================================
--- libcfa/prelude/extras.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/extras.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,6 @@
+#include <stddef.h>					// size_t, ptrdiff_t
+#include <stdint.h>					// intX_t, uintX_t, where X is 8, 16, 32, 64
+#include <uchar.h>					// char16_t, char32_t
+#include <wchar.h>					// wchar_t
+#include <stdlib.h>					// malloc, free, exit, atexit, abort
+#include <stdio.h>					// printf
Index: libcfa/prelude/extras.regx
===================================================================
--- libcfa/prelude/extras.regx	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/extras.regx	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,27 @@
+typedef.* size_t;
+typedef.* ptrdiff_t;
+typedef.* __int8_t;
+typedef.* __int16_t;
+typedef.* __int32_t;
+typedef.* __int64_t;
+typedef.* __uint8_t;
+typedef.* __uint16_t;
+typedef.* __uint32_t;
+typedef.* __uint64_t;
+typedef.* int8_t;
+typedef.* int16_t;
+typedef.* int32_t;
+typedef.* int64_t;
+typedef.* uint8_t;
+typedef.* uint16_t;
+typedef.* uint32_t;
+typedef.* uint64_t;
+typedef.* char16_t;
+typedef.* char32_t;
+typedef.* wchar_t;
+extern.*\*malloc\(.*\).*
+extern.* free\(.*\).*
+extern.* exit\(.*\).*
+extern.* atexit\(.*\).*
+extern.* abort\(.*\).*
+extern.* printf\(.*\).*
Index: libcfa/prelude/prelude-gen.cc
===================================================================
--- libcfa/prelude/prelude-gen.cc	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/prelude-gen.cc	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,388 @@
+#include <algorithm>
+#include <array>
+#include <iostream>
+#include <string>
+#include <vector>
+using namespace std;
+
+static struct{
+	const string name;
+	bool isFloat;
+	bool hasComparison;
+} basicTypes[] = {
+	// { "char"                  , false, true , },
+	// { "signed char"           , false, true , },
+	// { "unsigned char"         , false, true , },
+	{ "signed short"          , false, true , },
+	{ "unsigned short"        , false, true , },
+	{ "signed int"            , false, true , },
+	{ "unsigned int"          , false, true , },
+	{ "signed long int"       , false, true , },
+	{ "unsigned long int"     , false, true , },
+	{ "signed long long int"  , false, true , },
+	{ "unsigned long long int", false, true , },
+	{ "float"                 , true , true , },
+	{ "double"                , true , true , },
+	{ "long double"           , true , true , },
+	{ "float _Complex"        , true , false, },
+	{ "double _Complex"       , true , false, },
+	{ "long double _Complex"  , true , false, },
+#if defined(__SIZEOF_INT128__)
+	{ "__int128"              , false, true , },
+	{ "unsigned __int128"     , false, true , },
+#endif
+#if defined(__i386__) || defined(__ia64__) || defined(__x86_64__)
+	{ "__float80"             , true , true , },
+	{ "_Float128"             , true , true , },
+#endif
+};
+
+struct {
+	const string name;
+	bool assignment = false;
+	bool floatCompat = true;
+	bool isComparison = false;
+	bool isEqual = false;
+} arithmeticOperators[] = {
+	{ "?++"  , true , true, false, false },
+	{ "?--"  , true , true, false, false },
+	{ "++?"  , true , true, false, false },
+	{ "--?"  , true , true, false, false },
+	{ "+?"   , false, true , false, false },
+	{ "-?"   , false, true , false, false },
+	{ "~?"   , false, false, false, false },
+	{ "!?"   , false, true , false, true  },
+	{ "?*?"  , false, true , false, false },
+	{ "?/?"  , false, true , false, false },
+	{ "?%?"  , false, false, false, false },
+	{ "?+?"  , false, true , false, false },
+	{ "?-?"  , false, true , false, false },
+	{ "?<<?" , false, false, false, false },
+	{ "?>>?" , false, false, false, false },
+	{ "?<?"  , false, true , true , false },
+	{ "?<=?" , false, true , true , true  },
+	{ "?>?"  , false, true , true , false },
+	{ "?>=?" , false, true , true , true  },
+	{ "?==?" , false, true , false, true  },
+	{ "?!=?" , false, true , false, true  },
+	{ "?&?"  , false, false, false, false },
+	{ "?^?"  , false, false, false, false },
+	{ "?|?"  , false, false, false, false },
+	{ "?=?"  , true , true , false, false },
+	{ "?+=?" , true , true , false, false },
+	{ "?-=?" , true , true , false, false },
+	{ "?*=?" , true , true , false, false },
+	{ "?/=?" , true , true , false, false },
+	{ "?%=?" , true , false, false, false },
+	{ "?<<=?", true , false, false, false },
+	{ "?>>=?", true , false, false, false },
+	{ "?&=?" , true , false, false, false },
+	{ "?|=?" , true , false, false, false },
+	{ "?^=?" , true , false, false, false },
+};
+
+enum ArgType { Normal, PtrDiff, CommPtrDiff };
+
+struct {
+	const string name;
+	bool assignment = false;
+	string diffReturn;
+	ArgType diffArg2 = Normal;
+	string sized;
+} pointerOperators[] = {
+	{ "?++", true, "", Normal, " | sized(DT)" },
+	{ "?--", true, "", Normal, " | sized(DT)" },
+	{ "++?", true, "", Normal, " | sized(DT)" },
+	{ "--?", true, "", Normal, " | sized(DT)" },
+	{ "!?" , false, "int", Normal, "" },
+	{ "?<?", false, "signed int", Normal, "" },
+	{ "?<=?", false, "signed int", Normal, "" },
+	{ "?>?", false, "signed int", Normal, "" },
+	{ "?>=?", false, "signed int", Normal, "" },
+	{ "?==?", false, "signed int", Normal, "" },
+	{ "?!=?", false, "signed int", Normal, "" },
+	{ "?=?", true, "", Normal, "" }, // void * LHS, zero_t RHS ???
+	{ "*?", false, "&", Normal, " | sized(DT)" }, // & ???
+
+	{ "?-?", false, "ptrdiff_t", Normal, " | sized(DT)" },
+	{ "?-?", false, "", PtrDiff, " | sized(DT)" },
+	{ "?-=?", true, "", PtrDiff, " | sized(DT)" },
+
+	{ "?+?", false, "", CommPtrDiff, " | sized(DT)" },
+	{ "?[?]", false, "&", CommPtrDiff, " | sized(DT)" }, // & ???
+	{ "?+=?" , true, "", PtrDiff, " | sized(DT)" },
+};
+
+template<size_t N>
+string mask2string(unsigned int mask, array<string, N> names) {
+	string result = "";
+	int i = 0;
+	for(auto name : names) {
+		if(mask & (1 << i)) {
+			result += name;
+		} else {
+			result.append(name.size(), ' ');
+		}
+		i++;
+	}
+	return result;
+}
+
+template <typename... T>
+constexpr auto make_array(T&&... values) ->
+    std::array<
+        typename std::decay<typename std::common_type<T...>::type>::type,
+        sizeof...(T)>
+{
+    return std::array<
+        typename std::decay<
+            typename std::common_type<T...>::type>::type,
+        sizeof...(T)>{{std::forward<T>(values)...}};
+}
+
+int main() {
+	cout << "# 2 \"prelude.cf\"  // needed for error messages from this file" << endl;
+	cout << "trait sized(dtype T) {};" << endl;
+
+	cout << "//////////////////////////" << endl;
+	cout << "// Arithmetic Operators //" << endl;
+	cout << "//////////////////////////" << endl;
+	cout << endl;
+
+	cout << "signed int ?==?( zero_t, zero_t ),							?!=?( zero_t, zero_t );" << endl;
+	cout << "signed int ?==?( one_t, one_t ),							?!=?( one_t, one_t );" << endl;
+	cout << "signed int ?==?( _Bool, _Bool ),							?!=?( _Bool, _Bool );" << endl;
+	cout << "signed int	!?( _Bool );" << endl;
+
+	for (auto op : arithmeticOperators) {
+		for (auto type : basicTypes ) {
+			auto operands = count(op.name.begin(), op.name.end(), '?');
+			if (! op.floatCompat && type.isFloat) continue;
+			if (op.isComparison && ! type.hasComparison) continue;
+			if (op.assignment) {
+				const char * qualifiers[] = { "", "volatile " };
+				for (auto q : qualifiers){
+					cout << type.name << " " << op.name << "(";
+					cout << q << type.name << " &";
+					for (int i = 1; i < operands; ++i) {
+						cout << ", " << type.name;
+					}
+					cout << ");" << endl;
+				}
+			} else {
+				if (op.isComparison || op.isEqual) cout << "signed int";
+				else cout << type.name;
+				cout << " " << op.name << "(";
+				for (int i = 0; i < operands; ++i) {
+					cout << type.name;
+					if ((i+1) != operands) cout << ", ";
+				}
+				cout << ");" << endl;
+			}
+		}
+		cout << endl;
+	}
+	cout << endl;
+
+	cout << "/////////////////////////////" << endl;
+	cout << "// Arithmetic Constructors //" << endl;
+	cout << "/////////////////////////////" << endl;
+	auto otype = [](const std::string & type, bool do_volatile = false) {
+		cout << "void \t?{} ( " << type << " & );" << endl;
+		cout << "void \t?{} ( " << type << " &, " << type << " );" << endl;
+		cout << type << " \t?=? ( " << type << " &, " << type << " )";
+		if( do_volatile ) {
+			cout << ", \t?=?( volatile " << type << " &, " << type << " )";
+		}
+		cout << ";" << endl;
+		cout << "void \t^?{}( " << type << " & );" << endl;
+	};
+
+	otype("zero_t");
+	otype("one_t");
+	otype("_Bool", true);
+	otype("char", true);
+	otype("signed char", true);
+	otype("unsigned char", true);
+
+	for (auto type : basicTypes) {
+		cout << "void  ?{}(" << type.name << " &);" << endl;
+		cout << "void  ?{}(" << type.name << " &, " << type.name << ");" << endl;
+		cout << "void ^?{}(" << type.name << " &);" << endl;
+		cout << endl;
+	}
+	cout << endl;
+
+	cout << "//////////////////////////" << endl;
+	cout << "// Pointer Constructors //" << endl;
+	cout << "//////////////////////////" << endl;
+	cout << "forall(ftype FT) void  ?{}( FT *&, FT * );" << endl;
+	cout << "forall(ftype FT) void  ?{}( FT * volatile &, FT * );" << endl;
+
+	// generate qualifiers
+	vector<string> qualifiersSingle;
+	vector<pair<const string, const string>> qualifiersPair;
+	const unsigned int NQ = 2;
+	for(unsigned int lhs = 0; lhs < (1<<NQ); lhs++) {
+		// for parameter of default constructor and destructor
+		qualifiersSingle.push_back(mask2string(lhs, make_array("const "s, "volatile "s)));
+
+		// for first and second parameters of copy constructors
+		for(unsigned int rhs = 0; rhs < (1<<NQ); rhs++) {
+			if((lhs & rhs) == rhs) {
+				qualifiersPair.push_back({
+					mask2string(lhs, make_array("const "s, "volatile "s)),
+					mask2string(rhs, make_array("const "s, "volatile "s))
+				});
+			}
+		}
+	}
+
+	for (auto type : { "  DT", "void" }) {
+		for (auto cvq : qualifiersPair) {
+			for (auto is_vol : { "        ", "volatile" }) {
+				cout << "forall(dtype DT) void  ?{}(" << cvq.first << type << " * " << is_vol << " &, " << cvq.second << "DT *);" << endl;
+			}
+		}
+		for (auto cvq : qualifiersSingle) {
+			for (auto is_vol : { "        ", "volatile" }) {
+				cout << "forall(dtype DT) void  ?{}(" << cvq << type << " * " << is_vol << " &);" << endl;
+			}
+			for (auto is_vol : { "        ", "volatile" }) {
+				cout << "forall(dtype DT) void ^?{}(" << cvq << type << " * " << is_vol << " &);" << endl;
+			}
+		}
+	}
+
+	{
+		auto type = "  DT";
+		for (auto is_vol : { "        ", "volatile" }) {
+			for (auto cvq : qualifiersSingle) {
+				cout << "forall(dtype DT) void ?{}( " << cvq << type << " * " << is_vol << " &, zero_t);" << endl;
+			}
+		}
+	}
+
+	cout << endl;
+
+	cout << "forall(ftype FT) void	?{}( FT *	   &, zero_t );	" << endl;
+	cout << "forall(ftype FT) FT *			?=?( FT *	   &, zero_t );" << endl;
+	cout << "forall(ftype FT) FT *			?=?( FT * volatile &, zero_t );" << endl;
+	cout << "forall( ftype FT ) void	?{}( FT *	   & );" << endl;
+	cout << "forall( ftype FT ) void	^?{}( FT *	   & );" << endl;
+	cout << endl;
+
+	cout << "///////////////////////" << endl;
+	cout << "// Pointer Operators //" << endl;
+	cout << "///////////////////////" << endl;
+
+	cout << "forall( ftype FT ) FT *			?=?( FT *&, FT * );" << endl;
+	cout << "forall( ftype FT ) FT *			?=?( FT * volatile &, FT * );" << endl;
+	cout << "forall( ftype FT ) int !?( FT * );" << endl;
+	cout << "forall( ftype FT ) signed int ?==?( FT *, FT * );" << endl;
+	cout << "forall( ftype FT ) signed int ?!=?( FT *, FT * );" << endl;
+	cout << "forall( ftype FT ) FT &		 *?( FT * );" << endl;
+
+
+	for (auto op : pointerOperators) {
+		auto forall = [&op]() {
+			cout << "forall(dtype DT" << op.sized << ") ";
+		};
+		for (auto type : { "DT"/*, "void"*/ } ) {
+			auto operands = count(op.name.begin(), op.name.end(), '?');
+			if (op.assignment) {
+				// const char * qualifiers[] = { "", "volatile ", "const ", "const volatile " };
+				switch(op.diffArg2) {
+					case Normal:
+						if (operands == 1) {
+							for (auto q : qualifiersSingle){
+								for (auto q2 : { "        ", "volatile" }) {
+									forall();
+									cout << q << type << " * " << op.name << "(";
+									cout << q << type << " * " << q2 << " &";
+									cout << ");" << endl;
+								}
+							}
+						} else {
+							for (auto q : qualifiersPair){
+								for (auto q2 : { "        ", "volatile" }) {
+									forall();
+									cout << q.first << type << " * " << op.name << "(";
+									cout << q.first << type << " * " << q2 << " &";
+
+									for (int i = 1; i < operands; ++i) {
+										cout << ", " << q.second << type << " *";
+									}
+									cout << ");" << endl;
+								}
+							}
+						}
+						break;
+					case PtrDiff:
+						for (auto q : qualifiersSingle){
+							for (auto q2 : { "        ", "volatile" }) {
+								forall();
+								cout << q << type << " * " << op.name << "(";
+								cout << q << type << " * " << q2 << " &";
+
+								for (int i = 1; i < operands; ++i) {
+									cout << ", ptrdiff_t";
+								}
+								cout << ");" << endl;
+							}
+						}
+						break;
+					default:
+						abort();
+					}
+			} else {
+				auto name_and_arg1 = [&op, &type](const std::string & q) {
+					if (op.diffReturn == "&") cout << q << type << " &"; // -- qualifiers
+					else if (op.diffReturn != "") cout << op.diffReturn;
+					else cout << q << type << " *";
+					cout << " " << op.name << "(";
+				};
+				switch(op.diffArg2) {
+					case Normal:
+						for (auto q : qualifiersSingle) {
+							forall();
+							name_and_arg1( q );
+							for (int i = 0; i < operands; ++i) {
+								cout << q << type << " *";
+								if ((i+1) != operands) cout << ", ";
+							}
+							cout << ");" << endl;
+						}
+						break;
+					case CommPtrDiff:
+						for (auto q : qualifiersSingle) {
+							forall();
+							name_and_arg1( q );
+							cout << "ptrdiff_t, " << q << type << " *);" << endl;
+						}
+						// fallthrough
+					case PtrDiff:
+						for (auto q : qualifiersSingle) {
+							forall();
+							name_and_arg1( q );
+							cout << q << type << " *, ptrdiff_t);" << endl;
+						}
+						break;
+				}
+			}
+		}
+		cout << endl;
+	}
+	cout << endl;
+
+	for (auto is_vol : { "        ", "volatile" }) {
+		for (auto cvq : qualifiersPair) {
+				cout << "forall(dtype DT) " << cvq.first << "void * ?=?( " << cvq.first << "void * " << is_vol << " &, " << cvq.second << "DT *);" << endl;
+		}
+		for (auto cvq : qualifiersSingle) {
+			cout << "forall(dtype DT) " << cvq <<   "  DT * ?=?( " << cvq << "  DT * " << is_vol << " &, zero_t);" << endl;
+		}
+	}
+	cout << endl;
+}
+
Index: libcfa/prelude/prelude.old.cf
===================================================================
--- libcfa/prelude/prelude.old.cf	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/prelude.old.cf	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,783 @@
+//
+// Copyright (C) Glen Ditchfield 1994, 1999
+//
+// prelude.cf -- Standard Cforall Preample for C99
+//
+// Author           : Glen Ditchfield
+// Created On       : Sat Nov 29 07:23:41 2014
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sun Apr 22 13:21:47 2018
+// Update Count     : 103
+//
+
+# 2 "prelude.cf"  // needed for error messages from this file
+
+// Section numbers from: http://plg.uwaterloo.ca/~cforall/refrat.pdf
+
+// ------------------------------------------------------------
+//
+// Section 6.7.11 Trait Declarations
+// Note: the sized trait is used in declarations later in this
+// file, so it must be out of order.
+//
+// ------------------------------------------------------------
+
+trait sized(dtype T) {};
+
+// ------------------------------------------------------------
+//
+// Section 4.1 Primary Expressions
+//
+// ------------------------------------------------------------
+
+//We have none
+
+// ------------------------------------------------------------
+//
+// Section 4.2 Postfix Operators
+//
+// ------------------------------------------------------------
+
+signed short		?++( signed short & ),			?++( volatile signed short & );
+signed short		?--( signed short & ),			?--( volatile signed short & );
+unsigned short		?++( unsigned short & ),		?++( volatile unsigned short & );
+unsigned short		?--( unsigned short & ),		?--( volatile unsigned short & );
+signed int		?++( signed int & ),			?++( volatile signed int & );
+signed int		?--( signed int & ),			?--( volatile signed int & );
+unsigned int		?++( unsigned int & ),			?++( volatile unsigned int & );
+unsigned int		?--( unsigned int & ),			?--( volatile unsigned int & );
+signed long int		?++( signed long int & ),		?++( volatile signed long int & );
+signed long int		?--( signed long int & ),		?--( volatile signed long int & );
+unsigned long int	?++( unsigned long int & ),		?++( volatile unsigned long int & );
+unsigned long int	?--( unsigned long int & ),		?--( volatile unsigned long int & );
+signed long long int	?++( signed long long int & ),		?++( volatile signed long long int & );
+signed long long int	?--( signed long long int & ),		?--( volatile signed long long int & );
+unsigned long long int	?++( unsigned long long int & ),	?++( volatile unsigned long long int & );
+unsigned long long int	?--( unsigned long long int & ),	?--( volatile unsigned long long int & );
+float			?++( float & ),				?++( volatile float & );
+float			?--( float & ),				?--( volatile float & );
+double			?++( double & ),			?++( volatile double & );
+double			?--( double & ),			?--( volatile double & );
+long double		?++( long double & ),			?++( volatile long double & );
+long double		?--( long double & ),			?--( volatile long double & );
+float _Complex		?++( float _Complex & ),		?++( volatile float _Complex & );
+float _Complex		?--( float _Complex & ),		?--( volatile float _Complex & );
+double _Complex		?++( double _Complex & ),		?++( volatile double _Complex & );
+double _Complex		?--( double _Complex & ),		?--( volatile double _Complex & );
+long double _Complex	?++( long double _Complex & ),		?++( volatile long double _Complex & );
+long double _Complex	?--( long double _Complex & ),		?--( volatile long double _Complex & );
+
+forall( dtype T | sized(T) ) T *			 ?++(		     T *& );
+forall( dtype T | sized(T) ) const T *		 ?++( const	     T *& );
+forall( dtype T | sized(T) ) volatile T *		 ?++(	    volatile T *& );
+forall( dtype T | sized(T) ) const volatile T *	 ?++( const volatile T *& );
+forall( dtype T | sized(T) ) T *			 ?--(		     T *& );
+forall( dtype T | sized(T) ) const T *		 ?--( const	     T *& );
+forall( dtype T | sized(T) ) volatile T *		 ?--(	    volatile T *& );
+forall( dtype T | sized(T) ) const volatile T *	 ?--( const volatile T *& );
+
+forall( dtype T | sized(T) ) T &		 ?[?](		      T *,	    ptrdiff_t );
+forall( dtype T | sized(T) ) const T &	 ?[?]( const	      T *,	    ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T &	 ?[?](       volatile T *,	    ptrdiff_t );
+forall( dtype T | sized(T) ) const volatile T & ?[?]( const volatile T *,	    ptrdiff_t );
+forall( dtype T | sized(T) ) T &		 ?[?](		ptrdiff_t,		  T * );
+forall( dtype T | sized(T) ) const T &	 ?[?](		ptrdiff_t, const	  T * );
+forall( dtype T | sized(T) ) volatile T &	 ?[?](		ptrdiff_t,	 volatile T * );
+forall( dtype T | sized(T) ) const volatile T & ?[?](		ptrdiff_t, const volatile T * );
+
+// ------------------------------------------------------------
+//
+// Section 4.3 Unary Operators
+//
+// ------------------------------------------------------------
+
+signed short	++?( signed short & ),			--?( signed short & );
+signed int		++?( signed int & ),			--?( signed int & );
+unsigned short		++?( unsigned int & ),			--?( unsigned int & );
+unsigned int		++?( unsigned short & ),		--?( unsigned short & );
+signed long int		++?( signed long int & ),		--?( signed long int & );
+unsigned long int	++?( unsigned long int & ),		--?( unsigned long int & );
+signed long long int	++?( signed long long int & ),		--?( signed long long int & );
+unsigned long long int	++?( unsigned long long int & ),	--?( unsigned long long int & );
+float			++?( float & ),				--?( float & );
+double			++?( double & ),			--?( double & );
+long double		++?( long double & ),			--?( long double & );
+float _Complex		++?( float _Complex & ),		--?( float _Complex & );
+double _Complex		++?( double _Complex & ),		--?( double _Complex & );
+long double _Complex	++?( long double _Complex & ),		--?( long double _Complex & );
+
+forall( dtype T | sized(T) ) T *			 ++?(		     T *& );
+forall( dtype T | sized(T) ) const T *		 ++?( const	     T *& );
+forall( dtype T | sized(T) ) volatile T *		 ++?(	    volatile T *& );
+forall( dtype T | sized(T) ) const volatile T *	 ++?( const volatile T *& );
+forall( dtype T | sized(T) ) T *			 --?(		     T *& );
+forall( dtype T | sized(T) ) const T *		 --?( const	     T *& );
+forall( dtype T | sized(T) ) volatile T *		 --?(	    volatile T *& );
+forall( dtype T | sized(T) ) const volatile T *	 --?( const volatile T *& );
+
+forall( dtype T | sized(T) ) T &		 *?(		     T * );
+forall( dtype T | sized(T) ) const T &		 *?( const	     T * );
+forall( dtype T | sized(T) ) volatile T &	 *?(       volatile  T * );
+forall( dtype T | sized(T) ) const volatile T & *?( const volatile  T * );
+forall( ftype FT ) FT &		 *?( FT * );
+
+_Bool			+?( _Bool ),			-?( _Bool );
+signed int		+?( signed int ),		-?( signed int ),		~?( signed int );
+unsigned int		+?( unsigned int ),		-?( unsigned int ),		~?( unsigned int );
+signed long int		+?( signed long int ),		-?( signed long int ),		~?( signed long int );
+unsigned long int	+?( unsigned long int ),	-?( unsigned long int ),	~?( unsigned long int );
+signed long long int	+?( signed long long int ),	-?( signed long long int ),	~?( signed long long int );
+unsigned long long int	+?( unsigned long long int ),	-?( unsigned long long int ),	~?( unsigned long long int );
+float			+?( float ),			-?( float );
+double			+?( double ),			-?( double );
+long double		+?( long double ),		-?( long double );
+float _Complex		+?( float _Complex ),		-?( float _Complex );
+double _Complex		+?( double _Complex ),		-?( double _Complex );
+long double _Complex	+?( long double _Complex ),	-?( long double _Complex );
+
+signed int	!?( signed int ),		!?( unsigned int ),
+		!?( long int ),			!?( unsigned long int ),
+		!?( long long int ),		!?( unsigned long long int ),
+		!?( float ),			!?( double ),			!?( long double ),
+		!?( float _Complex ),		!?( double _Complex ),		!?( long double _Complex );
+
+forall( dtype DT ) int !?(                DT * );
+forall( dtype DT ) int !?( const          DT * );
+forall( dtype DT ) int !?(       volatile DT * );
+forall( dtype DT ) int !?( const volatile DT * );
+forall( ftype FT ) int !?( FT * );
+
+// ------------------------------------------------------------
+//
+// Section 4.5 Multiplicative Operators
+//
+// ------------------------------------------------------------
+
+signed int		?*?( signed int, signed int ),				?/?( signed int, signed int ),			?%?( signed int, signed int );
+unsigned int		?*?( unsigned int, unsigned int ),			?/?( unsigned int, unsigned int ),		?%?( unsigned int, unsigned int );
+signed long int		?*?( signed long int, signed long int ),		?/?( signed long int, signed long int ),	?%?( signed long int, signed long int );
+unsigned long int	?*?( unsigned long int, unsigned long int ),		?/?( unsigned long int, unsigned long int ),	?%?( unsigned long int, unsigned long int );
+signed long long int	?*?( signed long long int, signed long long int ),	?/?( signed long long int, signed long long int ), ?%?( signed long long int, signed long long int );
+unsigned long long int	?*?( unsigned long long int, unsigned long long int ),	?/?( unsigned long long int, unsigned long long int ), ?%?( unsigned long long int, unsigned long long int );
+float			?*?( float, float ),					?/?( float, float );
+double			?*?( double, double ),					?/?( double, double );
+long double		?*?( long double, long double ),			?/?( long double, long double );
+// gcc does not support _Imaginary
+//float _Imaginary	?*?( float _Imaginary, float _Imaginary),		?/?( float _Imaginary, float _Imaginary );
+//double _Imaginary	?*?( double _Imaginary, double _Imaginary),		?/?( double _Imaginary, double _Imaginary );
+//long double _Imaginary	?*?( long double _Imaginary, long double _Imaginary),	?/?( long double _Imaginary, long double _Imaginary );
+float _Complex		?*?( float _Complex, float _Complex ),			?/?( float _Complex, float _Complex );
+double _Complex		?*?( double _Complex, double _Complex ),		?/?( double _Complex, double _Complex );
+long double _Complex	?*?( long double _Complex, long double _Complex ),	?/?( long double _Complex, long double _Complex );
+
+// ------------------------------------------------------------
+//
+// Section 4.6 Additive Operators
+//
+// ------------------------------------------------------------
+
+_Bool			?+?( _Bool, _Bool ),					?-?( _Bool, _Bool );
+signed int		?+?( signed int, signed int ),				?-?( signed int, signed int );
+unsigned int		?+?( unsigned int, unsigned int ),			?-?( unsigned int, unsigned int );
+signed long int		?+?( signed long int, signed long int ),		?-?( signed long int, signed long int );
+unsigned long int	?+?( unsigned long int, unsigned long int ),		?-?( unsigned long int, unsigned long int );
+signed long long int	?+?( signed long long int, long long int  signed),	?-?( signed long long int, signed long long int );
+unsigned long long int	?+?( unsigned long long int, unsigned long long int ),	?-?( unsigned long long int, unsigned long long int );
+float			?+?( float, float ),					?-?( float, float );
+double			?+?( double, double ),					?-?( double, double );
+long double		?+?( long double, long double ),			?-?( long double, long double );
+float _Complex		?+?( float _Complex, float _Complex ),			?-?( float _Complex, float _Complex );
+double _Complex		?+?( double _Complex, double _Complex ),		?-?( double _Complex, double _Complex );
+long double _Complex	?+?( long double _Complex, long double _Complex ),	?-?( long double _Complex, long double _Complex );
+
+forall( dtype T | sized(T) ) T *		?+?(		    T *,	  ptrdiff_t );
+forall( dtype T | sized(T) ) T *		?+?(	      ptrdiff_t,		T * );
+forall( dtype T | sized(T) ) const T *		?+?( const	    T *,	  ptrdiff_t );
+forall( dtype T | sized(T) ) const T *		?+?(	      ptrdiff_t, const		T * );
+forall( dtype T | sized(T) ) volatile T *	?+?(	   volatile T *,	  ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T *	?+?(	      ptrdiff_t,       volatile T * );
+forall( dtype T | sized(T) ) const volatile T *	?+?( const volatile T *,	  ptrdiff_t );
+forall( dtype T | sized(T) ) const volatile T *	?+?(	      ptrdiff_t, const volatile T * );
+forall( dtype T | sized(T) ) T *		?-?(		    T *,	  ptrdiff_t );
+forall( dtype T | sized(T) ) const T *		?-?( const	    T *,	  ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T *	?-?(	   volatile T *,	  ptrdiff_t );
+forall( dtype T | sized(T) ) const volatile T *	?-?( const volatile T *,	  ptrdiff_t );
+forall( dtype T | sized(T) ) ptrdiff_t		?-?( const volatile T *, const volatile T * );
+
+// ------------------------------------------------------------
+//
+// Section 4.7 Bitwise Shift Operators
+//
+// ------------------------------------------------------------
+
+signed int		?<<?( signed int, signed int ),				?>>?( signed int, signed int );
+unsigned int		?<<?( unsigned int, unsigned int ),			?>>?( unsigned int, unsigned int );
+signed long int		?<<?( signed long int, signed long int ),		?>>?( signed long int, signed long int );
+unsigned long int	?<<?( unsigned long int, unsigned long int ),		?>>?( unsigned long int, unsigned long int );
+signed long long int	?<<?( signed long long int, signed long long int ),	?>>?( signed long long int, signed long long int );
+unsigned long long int	?<<?( unsigned long long int, unsigned long long int ),	?>>?( unsigned long long int, unsigned long long int );
+
+// ------------------------------------------------------------
+//
+// Section 4.8 Relational Operators
+//
+// ------------------------------------------------------------
+
+signed int ?<?( _Bool, _Bool ),						?<=?( _Bool, _Bool ),
+	   ?>?( _Bool, _Bool ),						?>=?( _Bool, _Bool );
+signed int ?<?( char, char ),						?<=?( char, char ),
+	   ?>?( char, char ),						?>=?( char, char );
+signed int ?<?( signed char, signed char ),				?<=?( signed char, signed char ),
+	   ?>?( signed char, signed char ),				?>=?( signed char, signed char );
+signed int ?<?( unsigned char, unsigned char ),				?<=?( unsigned char, unsigned char ),
+	   ?>?( unsigned char, unsigned char ),				?>=?( unsigned char, unsigned char );
+signed int ?<?( signed short, signed short ),				?<=?( signed short, signed short ),
+	   ?>?( signed short, signed short ),				?>=?( signed short, signed short );
+signed int ?<?( unsigned short, unsigned short ),			?<=?( unsigned short, unsigned short ),
+	   ?>?( unsigned short, unsigned short ),			?>=?( unsigned short, unsigned short );
+signed int ?<?( signed int, signed int ),				?<=?( signed int, signed int ),
+	   ?>?( signed int, signed int ),				?>=?( signed int, signed int );
+signed int ?<?( unsigned int, unsigned int ),				?<=?( unsigned int, unsigned int ),
+	   ?>?( unsigned int, unsigned int ),				?>=?( unsigned int, unsigned int );
+signed int ?<?( signed long int, signed long int ),			?<=?( signed long int, signed long int ),
+	   ?>?( signed long int, signed long int ),			?>=?( signed long int, signed long int );
+signed int ?<?( unsigned long int, unsigned long int ),			?<=?( unsigned long int, unsigned long int ),
+	   ?>?( unsigned long int, unsigned long int ),			?>=?( unsigned long int, unsigned long int );
+signed int ?<?( signed long long int, signed long long int ),		?<=?( signed long long int, signed long long int ),
+	   ?>?( signed long long int, signed long long int ),		?>=?( signed long long int, signed long long int );
+signed int ?<?( unsigned long long int, unsigned long long int ),	?<=?( unsigned long long int, unsigned long long int ),
+	   ?>?( unsigned long long int, unsigned long long int ),	?>=?( unsigned long long int, unsigned long long int );
+signed int ?<?( float, float ),						?<=?( float, float ),
+	   ?>?( float, float ),						?>=?( float, float );
+signed int ?<?( double, double ),					?<=?( double, double ),
+	   ?>?( double, double ),					?>=?( double, double );
+signed int ?<?( long double, long double ),				?<=?( long double, long double ),
+	   ?>?( long double, long double ),				?>=?( long double, long double );
+
+forall( dtype DT ) signed int ?<?(                 DT *,                DT * );
+forall( dtype DT ) signed int ?<?(  const          DT *, const          DT * );
+forall( dtype DT ) signed int ?<?(        volatile DT *,       volatile DT * );
+forall( dtype DT ) signed int ?<?(  const volatile DT *, const volatile DT * );
+
+forall( dtype DT ) signed int ?>?(                 DT *,                DT * );
+forall( dtype DT ) signed int ?>?(  const          DT *, const          DT * );
+forall( dtype DT ) signed int ?>?(        volatile DT *,       volatile DT * );
+forall( dtype DT ) signed int ?>?(  const volatile DT *, const volatile DT * );
+
+forall( dtype DT ) signed int ?<=?(                 DT *,                DT * );
+forall( dtype DT ) signed int ?<=?(  const          DT *, const          DT * );
+forall( dtype DT ) signed int ?<=?(        volatile DT *,       volatile DT * );
+forall( dtype DT ) signed int ?<=?( const volatile DT *, const volatile DT * );
+
+forall( dtype DT ) signed int ?>=?(                 DT *,                DT * );
+forall( dtype DT ) signed int ?>=?(  const          DT *, const          DT * );
+forall( dtype DT ) signed int ?>=?(        volatile DT *,       volatile DT * );
+forall( dtype DT ) signed int ?>=?( const volatile DT *, const volatile DT * );
+
+// ------------------------------------------------------------
+//
+// Section 4.9 Equality Operators
+//
+// ------------------------------------------------------------
+
+signed int ?==?( _Bool, _Bool ),							?!=?( _Bool, _Bool );
+signed int ?==?( char, char ),								?!=?( char, char );
+signed int ?==?( signed char, signed char ),				?!=?( signed char, signed char );
+signed int ?==?( unsigned char, unsigned char ),			?!=?( unsigned char, unsigned char );
+signed int ?==?( signed short, signed short ),				?!=?( signed short, signed short );
+signed int ?==?( unsigned short, unsigned short ),			?!=?( unsigned short, unsigned short );
+signed int ?==?( signed int, signed int ),					?!=?( signed int, signed int );
+signed int ?==?( unsigned int, unsigned int ),					?!=?( unsigned int, unsigned int );
+signed int ?==?( signed long int, signed long int ),				?!=?( signed long int, signed long int );
+signed int ?==?( unsigned long int, unsigned long int ),			?!=?( unsigned long int, unsigned long int );
+signed int ?==?( signed long long int, long long int  signed),		?!=?( signed long long int, signed long long int );
+signed int ?==?( unsigned long long int, unsigned long long int ),	?!=?( unsigned long long int, unsigned long long int );
+signed int ?==?( float, float ),							?!=?( float, float );
+signed int ?==?( double, double ),							?!=?( double, double );
+signed int ?==?( long double, long double ),					?!=?( long double, long double );
+signed int ?==?( float _Complex, float _Complex ),				?!=?( float _Complex, float _Complex );
+signed int ?==?( double _Complex, double _Complex ),				?!=?( double _Complex, double _Complex );
+signed int ?==?( long double _Complex, long double _Complex ),		?!=?( long double _Complex, long double _Complex );
+signed int ?==?( zero_t, zero_t ),							?!=?( zero_t, zero_t );
+signed int ?==?( one_t, one_t ),							?!=?( one_t, one_t );
+
+forall( dtype DT ) signed int ?==?(		   DT *,		DT * );
+forall( dtype DT ) signed int ?==?( const	   DT *, const		DT * );
+forall( dtype DT ) signed int ?==?(       volatile DT *,       volatile DT * );
+forall( dtype DT ) signed int ?==?( const volatile DT *, const volatile DT * );
+forall( ftype FT ) signed int ?==?( FT *, FT * );
+forall( dtype DT ) signed int ?!=?(		   DT *,		DT * );
+forall( dtype DT ) signed int ?!=?( const	   DT *, const		DT * );
+forall( dtype DT ) signed int ?!=?(       volatile DT *,       volatile DT * );
+forall( dtype DT ) signed int ?!=?( const volatile DT *, const volatile DT * );
+forall( ftype FT ) signed int ?!=?( FT *, FT * );
+
+// forall( dtype DT ) signed int ?==?( const volatile DT   *, const volatile void * );
+// forall( dtype DT ) signed int ?==?( const volatile void *, const volatile DT * );
+// forall( dtype DT ) signed int ?!=?( const volatile DT   *, const volatile void * );
+// forall( dtype DT ) signed int ?!=?( const volatile void *, const volatile DT * );
+
+// forall( dtype DT ) signed int ?==?( const volatile DT *, zero_t );
+// forall( dtype DT ) signed int ?==?( zero_t, const volatile DT * );
+// forall( ftype FT ) signed int ?==?( FT *, zero_t );
+// forall( ftype FT ) signed int ?==?( zero_t, FT * );
+// forall( dtype DT ) signed int ?!=?( const volatile DT *, zero_t );
+// forall( dtype DT ) signed int ?!=?( zero_t, const volatile DT * );
+// forall( ftype FT ) signed int ?!=?( FT *, zero_t );
+// forall( ftype FT ) signed int ?!=?( zero_t, FT * );
+
+// ------------------------------------------------------------
+//
+// Section 4.10 Bitwise AND Operators
+//
+// ------------------------------------------------------------
+
+_Bool			?&?( _Bool, _Bool );
+signed int		?&?( signed int, signed int );
+unsigned int		?&?( unsigned int, unsigned int );
+signed long int		?&?( signed long int, signed long int );
+unsigned long int	?&?( unsigned long int, unsigned long int );
+signed long long int	?&?( signed long long int, signed long long int );
+unsigned long long int	?&?( unsigned long long int, unsigned long long int );
+
+// ------------------------------------------------------------
+//
+// Section 4.11 Bitwise XOR Operators
+//
+// ------------------------------------------------------------
+
+_Bool			?^?( _Bool, _Bool );
+signed int		?^?( signed int, signed int );
+unsigned int		?^?( unsigned int, unsigned int );
+signed long int		?^?( signed long int, signed long int );
+unsigned long int	?^?( unsigned long int, unsigned long int );
+signed long long int	?^?( signed long long int, signed long long int );
+unsigned long long int	?^?( unsigned long long int, unsigned long long int );
+
+// ------------------------------------------------------------
+//
+// Section 4.12 Bitwise OR Operators
+//
+// ------------------------------------------------------------
+
+_Bool			?|?( _Bool, _Bool );
+signed int		?|?( signed int, signed int );
+unsigned int		?|?( unsigned int, unsigned int );
+signed long int		?|?( signed long int, signed long int );
+unsigned long int	?|?( unsigned long int, unsigned long int );
+signed long long int	?|?( signed long long int, signed long long int );
+unsigned long long int	?|?( unsigned long long int, unsigned long long int );
+
+// ------------------------------------------------------------
+//
+// Section 4.16 Assignment Operator
+//
+// ------------------------------------------------------------
+
+forall( ftype FT ) FT *			?=?( FT *&, FT * );
+forall( ftype FT ) FT *			?=?( FT * volatile &, FT * );
+
+forall( dtype DT ) DT *			?=?(		     DT *	   &,			DT * );
+forall( dtype DT ) DT *			?=?(		     DT * volatile &,			DT * );
+forall( dtype DT ) const DT *		?=?( const	     DT *	   &,			DT * );
+forall( dtype DT ) const DT *		?=?( const	     DT * volatile &,			DT * );
+forall( dtype DT ) const DT *		?=?( const	     DT *	   &, const		DT * );
+forall( dtype DT ) const DT *		?=?( const	     DT * volatile &, const		DT * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   &,			DT * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile &,			DT * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT *	   &,	    volatile	DT * );
+forall( dtype DT ) volatile DT *	?=?(	   volatile  DT * volatile &,	    volatile	DT * );
+
+forall( dtype DT ) const volatile DT *	?=?( const volatile  DT *	   &,			DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile &,			DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   &, const		DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile &, const		DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   &,	    volatile	DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile &,	    volatile	DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT *	   &, const volatile	DT * );
+forall( dtype DT ) const volatile DT *  ?=?( const volatile  DT * volatile &, const volatile	DT * );
+
+forall( dtype DT ) void *		 ?=?(		     void *	     &,			DT * );
+forall( dtype DT ) void *		 ?=?(		     void * volatile &,			DT * );
+forall( dtype DT ) const void *		 ?=?( const	     void *	     &,			DT * );
+forall( dtype DT ) const void *		 ?=?( const	     void * volatile &,			DT * );
+forall( dtype DT ) const void *		 ?=?( const	     void *	     &, const		DT * );
+forall( dtype DT ) const void *		 ?=?( const	     void * volatile &, const		DT * );
+forall( dtype DT ) volatile void *	 ?=?(	    volatile void *	     &,			DT * );
+forall( dtype DT ) volatile void *	 ?=?(	    volatile void * volatile &,			DT * );
+forall( dtype DT ) volatile void *	 ?=?(	    volatile void *	     &,	      volatile	DT * );
+forall( dtype DT ) volatile void *	 ?=?(	    volatile void * volatile &,	      volatile	DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void *	     &,			DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile &,			DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void *	     &, const		DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile &, const		DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void *	     &,	      volatile	DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile &,	      volatile	DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void *	     &, const volatile	DT * );
+forall( dtype DT ) const volatile void * ?=?( const volatile void * volatile &, const volatile	DT * );
+
+//forall( dtype DT ) DT *			?=?(		    DT *	  &, zero_t );
+//forall( dtype DT ) DT *			?=?(		    DT * volatile &, zero_t );
+forall( dtype DT ) const DT *		?=?( const	    DT *	  &, zero_t );
+forall( dtype DT ) const DT *		?=?( const	    DT * volatile &, zero_t );
+//forall( dtype DT ) volatile DT *	?=?( volatile	    DT *	  &, zero_t );
+//forall( dtype DT ) volatile DT *	?=?( volatile	    DT * volatile &, zero_t );
+forall( dtype DT ) const volatile DT *	?=?( const volatile DT *	  &, zero_t );
+forall( dtype DT ) const volatile DT *	?=?( const volatile DT * volatile &, zero_t );
+
+forall( ftype FT ) FT *			?=?( FT *	   &, zero_t );
+forall( ftype FT ) FT *			?=?( FT * volatile &, zero_t );
+
+forall( dtype T | sized(T) ) T *		?+=?(		     T *	  &, ptrdiff_t );
+forall( dtype T | sized(T) ) T *		?+=?(		     T * volatile &, ptrdiff_t );
+forall( dtype T | sized(T) ) const T *		?+=?( const	     T *	  &, ptrdiff_t );
+forall( dtype T | sized(T) ) const T *		?+=?( const	     T * volatile &, ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T *	?+=?(	    volatile T *	  &, ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T *	?+=?(	    volatile T * volatile &, ptrdiff_t );
+forall( dtype T | sized(T) ) const volatile T *	?+=?( const volatile T *	  &, ptrdiff_t );
+forall( dtype T | sized(T) ) const volatile T *	?+=?( const volatile T * volatile &, ptrdiff_t );
+forall( dtype T | sized(T) ) T *		?-=?(		     T *	  &, ptrdiff_t );
+forall( dtype T | sized(T) ) T *		?-=?(		     T * volatile &, ptrdiff_t );
+forall( dtype T | sized(T) ) const T *		?-=?( const	     T *	  &, ptrdiff_t );
+forall( dtype T | sized(T) ) const T *		?-=?( const	     T * volatile &, ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T *	?-=?(	    volatile T *	  &, ptrdiff_t );
+forall( dtype T | sized(T) ) volatile T *	?-=?(	    volatile T * volatile &, ptrdiff_t );
+forall( dtype T | sized(T) ) const volatile T *	?-=?( const volatile T *	  &, ptrdiff_t );
+forall( dtype T | sized(T) ) const volatile T *	?-=?( const volatile T * volatile &, ptrdiff_t );
+
+_Bool			?=?( _Bool &, _Bool ),					?=?( volatile _Bool &, _Bool );
+char			?=?( char &, char ),					?=?( volatile char &, char );
+char signed		?=?( char signed &, char signed ),			?=?( volatile char signed &, char signed );
+char unsigned		?=?( char unsigned &, char unsigned ),			?=?( volatile char unsigned &, char unsigned );
+int short		?=?( int short &, int short ),				?=?( volatile int short &, int short );
+int short unsigned	?=?( int short unsigned &, int short unsigned ),	?=?( volatile int short unsigned &, int short unsigned );
+signed int		?=?( signed int &, signed int ),			?=?( volatile signed int &, signed int );
+unsigned int		?=?( unsigned &, unsigned ),				?=?( volatile unsigned &, unsigned );
+signed long int		?=?( signed long int &, signed long int ),		?=?( volatile signed long int &, signed long int );
+unsigned long int	?=?( unsigned long int &, unsigned long int ),		?=?( volatile unsigned long int &, unsigned long int );
+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 );
+zero_t			?=?( zero_t &, zero_t );
+one_t			?=?( one_t &, one_t );
+
+
+char			?*=?( char &, char ),					?*=?( volatile char &, char );
+char signed		?*=?( char signed &, char signed ),			?*=?( volatile char signed &, char signed );
+char unsigned		?*=?( char unsigned &, char unsigned ),			?*=?( volatile char unsigned &, char unsigned );
+int short		?*=?( int short &, int short ),				?*=?( volatile int short &, int short );
+int short unsigned	?*=?( int short unsigned &, int short unsigned ),	?*=?( volatile int short unsigned &, int short unsigned );
+signed int		?*=?( signed int &, signed int ),			?*=?( volatile signed int &, signed int );
+unsigned int		?*=?( unsigned &, unsigned ),				?*=?( volatile unsigned &, unsigned );
+signed long int		?*=?( signed long int &, signed long int ),		?*=?( volatile signed long int &, signed long int );
+unsigned long int	?*=?( unsigned long int &, unsigned long int ),		?*=?( volatile unsigned long int &, unsigned long int );
+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 );
+
+_Bool			?/=?( _Bool &, _Bool ),					?/=?( volatile _Bool &, _Bool );
+char			?/=?( char &, char ),					?/=?( volatile char &, char );
+char signed		?/=?( char signed &, char signed ),			?/=?( volatile char signed &, char signed );
+char unsigned		?/=?( char unsigned &, char unsigned ),			?/=?( volatile char unsigned &, char unsigned );
+int short		?/=?( int short &, int short ),				?/=?( volatile int short &, int short );
+int short unsigned	?/=?( int short unsigned &, int short unsigned ),	?/=?( volatile int short unsigned &, int short unsigned );
+signed int		?/=?( signed int &, signed int ),			?/=?( volatile signed int &, signed int );
+unsigned int		?/=?( unsigned &, unsigned ),				?/=?( volatile unsigned &, unsigned );
+signed long int		?/=?( signed long int &, signed long int ),		?/=?( volatile signed long int &, signed long int );
+unsigned long int	?/=?( unsigned long int &, unsigned long int ),		?/=?( volatile unsigned long int &, unsigned long int );
+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 );
+
+_Bool			?%=?( _Bool &, _Bool ),					?%=?( volatile _Bool &, _Bool );
+char			?%=?( char &, char ),					?%=?( volatile char &, char );
+char signed		?%=?( char signed &, char signed ),			?%=?( volatile char signed &, char signed );
+char unsigned		?%=?( char unsigned &, char unsigned ),			?%=?( volatile char unsigned &, char unsigned );
+int short		?%=?( int short &, int short ),				?%=?( volatile int short &, int short );
+int short unsigned	?%=?( int short unsigned &, int short unsigned ),	?%=?( volatile int short unsigned &, int short unsigned );
+signed int		?%=?( signed int &, signed int ),			?%=?( volatile signed int &, signed int );
+unsigned int		?%=?( unsigned &, unsigned ),				?%=?( volatile unsigned &, unsigned );
+signed long int		?%=?( signed long int &, signed long int ),		?%=?( volatile signed long int &, signed long int );
+unsigned long int	?%=?( unsigned long int &, unsigned long int ),		?%=?( volatile unsigned long int &, unsigned long int );
+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 );
+
+_Bool			?+=?( _Bool &, _Bool ),					?+=?( volatile _Bool &, _Bool );
+char			?+=?( char &, char ),					?+=?( volatile char &, char );
+char signed		?+=?( char signed &, char signed ),			?+=?( volatile char signed &, char signed );
+char unsigned		?+=?( char unsigned &, char unsigned ),			?+=?( volatile char unsigned &, char unsigned );
+int short		?+=?( int short &, int short ),				?+=?( volatile int short &, int short );
+int short unsigned	?+=?( int short unsigned &, int short unsigned ),	?+=?( volatile int short unsigned &, int short unsigned );
+signed int		?+=?( signed int &, signed int ),			?+=?( volatile signed int &, signed int );
+unsigned int		?+=?( unsigned &, unsigned ),				?+=?( volatile unsigned &, unsigned );
+signed long int		?+=?( signed long int &, signed long int ),		?+=?( volatile signed long int &, signed long int );
+unsigned long int	?+=?( unsigned long int &, unsigned long int ),		?+=?( volatile unsigned long int &, unsigned long int );
+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 );
+//signed int128		?+=?( signed int128 &, signed int128 ),			?+=?( volatile signed int128 &, signed int128 );
+//unsigned int128		?+=?( unsigned int128 &, unsigned int128 ),		?+=?( volatile unsigned int128 &, unsigned int128 );
+
+_Bool			?-=?( _Bool &, _Bool ),					?-=?( volatile _Bool &, _Bool );
+char			?-=?( char &, char ),					?-=?( volatile char &, char );
+char signed		?-=?( char signed &, char signed ),			?-=?( volatile char signed &, char signed );
+char unsigned		?-=?( char unsigned &, char unsigned ),			?-=?( volatile char unsigned &, char unsigned );
+int short		?-=?( int short &, int short ),				?-=?( volatile int short &, int short );
+int short unsigned	?-=?( int short unsigned &, int short unsigned ),	?-=?( volatile int short unsigned &, int short unsigned );
+signed int		?-=?( signed int &, signed int ),			?-=?( volatile signed int &, signed int );
+unsigned int		?-=?( unsigned &, unsigned ),				?-=?( volatile unsigned &, unsigned );
+signed long int		?-=?( signed long int &, signed long int ),		?-=?( volatile signed long int &, signed long int );
+unsigned long int	?-=?( unsigned long int &, unsigned long int ),		?-=?( volatile unsigned long int &, unsigned long int );
+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 );
+
+char			?<<=?( char &, char ),					?<<=?( volatile char &, char );
+char signed		?<<=?( char signed &, char signed ),			?<<=?( volatile char signed &, char signed );
+char unsigned		?<<=?( char unsigned &, char unsigned ),		?<<=?( volatile char unsigned &, char unsigned );
+int short		?<<=?( int short &, int short ),			?<<=?( volatile int short &, int short );
+int short unsigned	?<<=?( int short unsigned &, int short unsigned ),	?<<=?( volatile int short unsigned &, int short unsigned );
+signed int		?<<=?( signed int &, signed int ),			?<<=?( volatile signed int &, signed int );
+unsigned int		?<<=?( unsigned &, unsigned ),				?<<=?( volatile unsigned &, unsigned );
+signed long int		?<<=?( signed long int &, signed long int ),		?<<=?( volatile signed long int &, signed long int );
+unsigned long int	?<<=?( unsigned long int &, unsigned long int ),	?<<=?( volatile unsigned long int &, unsigned long int );
+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 );
+
+char			?>>=?( char &, char ),					?>>=?( volatile char &, char );
+char signed		?>>=?( char signed &, char signed ),			?>>=?( volatile char signed &, char signed );
+char unsigned		?>>=?( char unsigned &, char unsigned ),		?>>=?( volatile char unsigned &, char unsigned );
+int short		?>>=?( int short &, int short ),			?>>=?( volatile int short &, int short );
+int short unsigned	?>>=?( int short unsigned &, int short unsigned ),	?>>=?( volatile int short unsigned &, int short unsigned );
+signed int		?>>=?( signed int &, signed int ),			?>>=?( volatile signed int &, signed int );
+unsigned int		?>>=?( unsigned &, unsigned ),				?>>=?( volatile unsigned &, unsigned );
+signed long int		?>>=?( signed long int &, signed long int ),		?>>=?( volatile signed long int &, signed long int );
+unsigned long int	?>>=?( unsigned long int &, unsigned long int ),	?>>=?( volatile unsigned long int &, unsigned long int );
+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 );
+
+_Bool			?&=?( _Bool &, _Bool ),					?&=?( volatile _Bool &, _Bool );
+char			?&=?( char &, char ),					?&=?( volatile char &, char );
+char signed		?&=?( char signed &, char signed ),			?&=?( volatile char signed &, char signed );
+char unsigned		?&=?( char unsigned &, char unsigned ),			?&=?( volatile char unsigned &, char unsigned );
+int short		?&=?( int short &, int short ),				?&=?( volatile int short &, int short );
+int short unsigned	?&=?( int short unsigned &, int short unsigned ),	?&=?( volatile int short unsigned &, int short unsigned );
+signed int		?&=?( signed int &, signed int ),			?&=?( volatile signed int &, signed int );
+unsigned int		?&=?( unsigned &, unsigned ),				?&=?( volatile unsigned &, unsigned );
+signed long int		?&=?( signed long int &, signed long int ),		?&=?( volatile signed long int &, signed long int );
+unsigned long int	?&=?( unsigned long int &, unsigned long int ),		?&=?( volatile unsigned long int &, unsigned long int );
+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 );
+
+_Bool			?|=?( _Bool &, _Bool ),					?|=?( volatile _Bool &, _Bool );
+char			?|=?( char &, char ),					?|=?( volatile char &, char );
+char signed		?|=?( char signed &, char signed ),			?|=?( volatile char signed &, char signed );
+char unsigned		?|=?( char unsigned &, char unsigned ),			?|=?( volatile char unsigned &, char unsigned );
+int short		?|=?( int short &, int short ),				?|=?( volatile int short &, int short );
+int short unsigned	?|=?( int short unsigned &, int short unsigned ),	?|=?( volatile int short unsigned &, int short unsigned );
+signed int		?|=?( signed int &, signed int ),			?|=?( volatile signed int &, signed int );
+unsigned int		?|=?( unsigned &, unsigned ),				?|=?( volatile unsigned &, unsigned );
+signed long int		?|=?( signed long int &, signed long int ),		?|=?( volatile signed long int &, signed long int );
+unsigned long int	?|=?( unsigned long int &, unsigned long int ),		?|=?( volatile unsigned long int &, unsigned long int );
+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 );
+
+_Bool			?^=?( _Bool &, _Bool ),					?^=?( volatile _Bool &, _Bool );
+char			?^=?( char &, char ),					?^=?( volatile char &, char );
+char signed		?^=?( char signed &, char signed ),			?^=?( volatile char signed &, char signed );
+char unsigned		?^=?( char unsigned &, char unsigned ),			?^=?( volatile char unsigned &, char unsigned );
+int short		?^=?( int short &, int short ),				?^=?( volatile int short &, int short );
+int short unsigned	?^=?( int short unsigned &, int short unsigned ),	?^=?( volatile int short unsigned &, int short unsigned );
+signed int		?^=?( signed int &, signed int ),			?^=?( volatile signed int &, signed int );
+unsigned int		?^=?( unsigned &, unsigned ),				?^=?( volatile unsigned &, unsigned );
+signed long int		?^=?( signed long int &, signed long int ),		?^=?( volatile signed long int &, signed long int );
+unsigned long int	?^=?( unsigned long int &, unsigned long int ),		?^=?( volatile unsigned long int &, unsigned long int );
+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 );
+
+float			?=?(  float &, float ), ?=?(  volatile float &, float ),
+			?*=?( float &, float ), ?*=?( volatile float &, float ),
+			?/=?( float &, float ), ?/=?( volatile float &, float ),
+			?+=?( float &, float ), ?+=?( volatile float &, float ),
+			?-=?( float &, float ), ?-=?( volatile float &, float );
+
+double			?=?(  double &, double ), ?=?(  volatile double &, double ),
+			?*=?( double &, double ), ?*=?( volatile double &, double ),
+			?/=?( double &, double ), ?/=?( volatile double &, double ),
+			?+=?( double &, double ), ?+=?( volatile double &, double ),
+			?-=?( double &, double ), ?-=?( volatile double &, double );
+
+long double		?=?(  long double &, long double ), ?=?(  volatile long double &, long double ),
+			?*=?( long double &, long double ), ?*=?( volatile long double &, long double ),
+			?/=?( long double &, long double ), ?/=?( volatile long double &, long double ),
+			?+=?( long double &, long double ), ?+=?( volatile long double &, long double ),
+			?-=?( long double &, long double ), ?-=?( volatile long double &, long double );
+
+float _Complex		?=?(  float _Complex &, float _Complex ), ?=?(  volatile float _Complex &, float _Complex ),
+			?*=?( float _Complex &, float _Complex ), ?*=?( volatile float _Complex &, float _Complex ),
+			?/=?( float _Complex &, float _Complex ), ?/=?( volatile float _Complex &, float _Complex ),
+			?+=?( float _Complex &, float _Complex ), ?+=?( volatile float _Complex &, float _Complex ),
+			?-=?( float _Complex &, float _Complex ), ?-=?( volatile float _Complex &, float _Complex );
+
+double _Complex		?=?(  double _Complex &, double _Complex ), ?=?(  volatile double _Complex &, double _Complex ),
+			?*=?( double _Complex &, double _Complex ), ?*=?( volatile double _Complex &, double _Complex ),
+			?/=?( double _Complex &, double _Complex ), ?/=?( volatile double _Complex &, double _Complex ),
+			?+=?( double _Complex &, double _Complex ), ?+=?( volatile double _Complex &, double _Complex ),
+			?-=?( double _Complex &, double _Complex ), ?-=?( volatile double _Complex &, double _Complex );
+
+long double _Complex	?=?(  long double _Complex &, long double _Complex ), ?=?(  volatile long double _Complex &, long double _Complex ),
+			?*=?( long double _Complex &, long double _Complex ), ?*=?( volatile long double _Complex &, long double _Complex ),
+			?/=?( long double _Complex &, long double _Complex ), ?/=?( volatile long double _Complex &, long double _Complex ),
+			?+=?( long double _Complex &, long double _Complex ), ?+=?( volatile long double _Complex &, long double _Complex ),
+			?-=?( long double _Complex &, long double _Complex ), ?-=?( volatile long double _Complex &, long double _Complex );
+
+
+// ------------------------------------------------------------
+//
+// Section ??? Constructors and Destructors
+//
+// ------------------------------------------------------------
+
+// default ctor
+void	?{}( _Bool & );
+void	?{}( char & );
+void	?{}( unsigned char & );
+void	?{}( char signed & );
+void	?{}( int short & );
+void	?{}( int short unsigned & );
+void	?{}( signed int & );
+void	?{}( unsigned int & );
+void	?{}( signed long int & );
+void	?{}( unsigned long int & );
+void	?{}( signed long long int & );
+void	?{}( unsigned long long int & );
+void	?{}( float & );
+void	?{}( double & );
+void	?{}( long double & );
+void	?{}( float _Complex & );
+void	?{}( double _Complex & );
+void	?{}( long double _Complex & );
+void	?{}( zero_t & );
+void	?{}( one_t & );
+
+// copy ctor
+void	?{}( _Bool &, _Bool );
+void	?{}( char &, char );
+void	?{}( unsigned char &, unsigned char );
+void	?{}( char signed &, char signed );
+void	?{}( int short &, int short );
+void	?{}( int short unsigned &, int short unsigned );
+void	?{}( signed int &, signed int);
+void	?{}( unsigned int &, unsigned int);
+void	?{}( signed long int &, signed long int);
+void	?{}( unsigned long int &, unsigned long int);
+void	?{}( signed long long int &, signed long long int);
+void	?{}( unsigned long long int &, unsigned long long int);
+void	?{}( float &, float);
+void	?{}( double &, double);
+void	?{}( long double &, long double);
+void	?{}( float _Complex &, float _Complex);
+void	?{}( double _Complex &, double _Complex);
+void	?{}( long double _Complex &, long double _Complex);
+void	?{}( zero_t &, zero_t );
+void	?{}( one_t &, one_t );
+
+// dtor
+void	^?{}( _Bool & );
+void	^?{}( char & );
+void	^?{}( char unsigned & );
+void	^?{}( char signed & );
+void	^?{}( int short & );
+void	^?{}( int short unsigned & );
+void	^?{}( signed int & );
+void	^?{}( unsigned int & );
+void	^?{}( signed long int & );
+void	^?{}( unsigned long int & );
+void	^?{}( signed long long int & );
+void	^?{}( unsigned long long int & );
+void	^?{}( float & );
+void	^?{}( double & );
+void	^?{}( long double & );
+void	^?{}( float _Complex & );
+void	^?{}( double _Complex & );
+void	^?{}( long double _Complex & );
+void	^?{}( zero_t & );
+void	^?{}( one_t & );
+
+// // default ctor
+// forall( dtype DT ) void	 ?{}(		     DT ** );
+// forall( dtype DT ) void	 ?{}( const	     DT ** );
+// forall( dtype DT ) void	 ?{}(	    volatile DT ** );
+// forall( dtype DT ) void	 ?{}( const volatile DT ** );
+
+// // copy ctor
+// forall( dtype DT ) void	 ?{}(		     DT **, DT* );
+// forall( dtype DT ) void	 ?{}( const	     DT **, DT* );
+// forall( dtype DT ) void	 ?{}(	    volatile DT **, DT* );
+// forall( dtype DT ) void	 ?{}( const volatile DT **, DT* );
+
+// // dtor
+// forall( dtype DT ) void	^?{}(		     DT ** );
+// forall( dtype DT ) void	^?{}( const	     DT ** );
+// forall( dtype DT ) void	^?{}(	    volatile DT ** );
+// forall( dtype DT ) void	^?{}( const volatile DT ** );
+
+// copied from assignment section
+// copy constructors
+forall( ftype FT ) void ?{}( FT *&, FT * );
+forall( ftype FT ) void ?{}( FT * volatile &, FT * );
+
+forall( dtype DT ) void ?{}(		     DT *	   &,			DT * );
+forall( dtype DT ) void ?{}( const	     DT *	   &,			DT * );
+forall( dtype DT ) void ?{}( const	     DT *	   &, const		DT * );
+forall( dtype DT ) void ?{}(	   volatile  DT *	   &,			DT * );
+forall( dtype DT ) void ?{}(	   volatile  DT *	   &,	    volatile	DT * );
+forall( dtype DT ) void ?{}( const volatile  DT *	   &,			DT * );
+forall( dtype DT ) void ?{}( const volatile  DT *	   &, const		DT * );
+forall( dtype DT ) void ?{}( const volatile  DT *	   &,	    volatile	DT * );
+forall( dtype DT ) void ?{}( const volatile  DT *	   &, const volatile	DT * );
+
+forall( dtype DT ) void ?{}(		     void *	     &,			DT * );
+forall( dtype DT ) void ?{}( const	     void *	     &,			DT * );
+forall( dtype DT ) void ?{}( const	     void *	     &, const		DT * );
+forall( dtype DT ) void ?{}(	    volatile void *	     &,			DT * );
+forall( dtype DT ) void ?{}(	    volatile void *	     &,	      volatile	DT * );
+forall( dtype DT ) void ?{}( const volatile void *	     &,			DT * );
+forall( dtype DT ) void ?{}( const volatile void *	     &, const		DT * );
+forall( dtype DT ) void ?{}( const volatile void *	     &,	      volatile	DT * );
+forall( dtype DT ) void ?{}( const volatile void *	     &, const volatile	DT * );
+
+//forall( dtype DT ) void ?{}(		    DT *	  &, zero_t );
+//forall( dtype DT ) void ?{}(		    DT * volatile &, zero_t );
+forall( dtype DT ) void ?{}( const	    DT *	  &, zero_t );
+//forall( dtype DT ) void ?{}( volatile	    DT *	  &, zero_t );
+//forall( dtype DT ) void ?{}( volatile	    DT * volatile &, zero_t );
+forall( dtype DT ) void ?{}( const volatile DT *	  &, zero_t );
+
+forall( ftype FT ) void	?{}( FT *	   &, zero_t );
+
+// default ctors
+forall( ftype FT ) void	?{}( FT *	   & );
+
+forall( dtype DT ) void	?{}(		     DT *	   &);
+forall( dtype DT ) void	?{}( const	     DT *	   &);
+forall( dtype DT ) void	?{}(	   volatile  DT *	   &);
+forall( dtype DT ) void ?{}( const volatile  DT *	   &);
+
+void 	?{}(		    void *	    &);
+void 	?{}( const	    void *	    &);
+void 	?{}(	   volatile void *	    &);
+void 	?{}( const volatile void *	    &);
+
+// dtors
+forall( ftype FT ) void	^?{}( FT *	   & );
+
+forall( dtype DT ) void	^?{}(		     DT *	   &);
+forall( dtype DT ) void	^?{}( const	     DT *	   &);
+forall( dtype DT ) void	^?{}(	   volatile  DT *	   &);
+forall( dtype DT ) void ^?{}( const volatile  DT *	   &);
+
+void ^?{}(		    void *	    &);
+void ^?{}( const	    void *	    &);
+void ^?{}(	   volatile void *	    &);
+void ^?{}( const   volatile void *	    &);
+
+// Local Variables: //
+// mode: c //
+// tab-width: 8 //
+// End: //
Index: libcfa/prelude/prototypes.awk
===================================================================
--- libcfa/prelude/prototypes.awk	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/prototypes.awk	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,160 @@
+#
+# 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.
+#
+# prototypes.awk --
+#
+# Author           : Peter A. Buhr
+# Created On       : Sat May 16 07:57:37 2015
+# Last Modified By : Peter A. Buhr
+# Last Modified On : Tue Jul  5 14:32:52 2016
+# Update Count     : 32
+#
+
+# http://llvm.org/svn/llvm-project/cfe/trunk/include/clang/Basic/Builtins.def
+
+BEGIN {
+  FS = "[( )]"
+    # order so string search is longest string
+    i=-1
+    types[i+=1] = "BOOL";						          vtypes[i] = "_Bool"
+    types[i+=1] = "UINTMAX";					        vtypes[i] = "unsigned long int"
+    types[i+=1] = "UINT16";					          vtypes[i] = "short int"
+    types[i+=1] = "UINT32";					          vtypes[i] = "int"
+    types[i+=1] = "UINT64";					          vtypes[i] = "long long int"
+    types[i+=1] = "UINT";						          vtypes[i] = "unsigned int"
+    types[i+=1] = "INTMAX";					          vtypes[i] = "long int"
+    types[i+=1] = "INTPTR";					          vtypes[i] = "int *"
+    types[i+=1] = "WINT";						          vtypes[i] = "unsigned int"
+    types[i+=1] = "INT";						          vtypes[i] = "int"
+    types[i+=1] = "ULONGLONG";				        vtypes[i] = "unsigned long long"
+    types[i+=1] = "ULONG";					          vtypes[i] = "unsigned long"
+    types[i+=1] = "UNSIGNED";					        vtypes[i] = "unsigned"
+    types[i+=1] = "COMPLEX_LONGDOUBLE";		    vtypes[i] = "_Complex long double"
+    types[i+=1] = "COMPLEX_DOUBLE";			      vtypes[i] = "_Complex double"
+    types[i+=1] = "COMPLEX_FLOAT";			      vtypes[i] = "_Complex float"
+    types[i+=1] = "LONGDOUBLEPTR";			      vtypes[i] = "long double *"
+    types[i+=1] = "LONGDOUBLE";				        vtypes[i] = "long double"
+    types[i+=1] = "LONGLONG";					        vtypes[i] = "long long"
+    types[i+=1] = "LONG";						          vtypes[i] = "long"
+    types[i+=1] = "DFLOAT32";					        vtypes[i] = "__Unsupported"
+    types[i+=1] = "DFLOAT64";					        vtypes[i] = "__Unsupported"
+    types[i+=1] = "DFLOAT128";				        vtypes[i] = "__Unsupported"
+    types[i+=1] = "DOUBLEPTR";			    	    vtypes[i] = "double *"
+    types[i+=1] = "DOUBLE";					          vtypes[i] = "double"
+    types[i+=1] = "FLOATPTR";					        vtypes[i] = "float *"
+    types[i+=1] = "FLOAT128X";						    vtypes[i] = "__Unsupported"
+    types[i+=1] = "FLOAT128";						      vtypes[i] = "__Unsupported"
+    types[i+=1] = "FLOAT64X";						      vtypes[i] = "__Unsupported"
+    types[i+=1] = "FLOAT64";						      vtypes[i] = "__Unsupported"
+    types[i+=1] = "FLOAT32X";						      vtypes[i] = "__Unsupported"
+    types[i+=1] = "FLOAT32";						      vtypes[i] = "__Unsupported"
+    types[i+=1] = "FLOAT16";						      vtypes[i] = "__Unsupported"
+    types[i+=1] = "FLOAT";					          vtypes[i] = "float"
+    types[i+=1] = "CONST_VPTR";					      vtypes[i] = "const volatile void *"
+    types[i+=1] = "CONST_PTR";				        vtypes[i] = "const void *"
+    types[i+=1] = "CONST_STRING";				      vtypes[i] = "const char *"
+    types[i+=1] = "CONST_TM_PTR";			        vtypes[i] = "const struct tm *"
+    types[i+=1] = "PTR_FN_VOID_VAR_PTR_SIZE";	vtypes[i] = ""
+    types[i+=1] = "PTR_CONST_STRING";			    vtypes[i] = "char *const"
+    types[i+=1] = "PTRMODE_PTR";				      vtypes[i] = ""
+    types[i+=1] = "PTRPTR";					          vtypes[i] = "void **"
+    types[i+=1] = "VPTR";					            vtypes[i] = "volatile void *"
+    types[i+=1] = "PTR";						          vtypes[i] = "void *"
+    types[i+=1] = "VOID";						          vtypes[i] = "void"
+    types[i+=1] = "STRING";					          vtypes[i] = "char *"
+    types[i+=1] = "FILEPTR";					        vtypes[i] = "struct _IO_FILE *"
+    types[i+=1] = "SIZE";						          vtypes[i] = "unsigned long"
+    types[i+=1] = "VAR";						          vtypes[i] = "..."
+    types[i+=1] = "VALIST_ARG";				        vtypes[i] = "__builtin_va_list"
+    types[i+=1] = "VALIST_REF";				        vtypes[i] = "__builtin_va_list"
+    types[i+=1] = "UNWINDWORD";				        vtypes[i] = "void *"
+    types[i+=1] = "WORD";						          vtypes[i] = ""
+    types[i+=1] = "SSIZE";					          vtypes[i] = "long int"
+    types[i+=1] = "PID";						          vtypes[i] = "int"
+    types[i+=1] = "I16";						          vtypes[i] = "__int128"
+    types[i+=1] = "I8";						            vtypes[i] = "long long int"
+    types[i+=1] = "I4";						            vtypes[i] = "int"
+    types[i+=1] = "I2";						            vtypes[i] = "short"
+    types[i+=1] = "I1";						            vtypes[i] = "char"
+    N = i + 1
+} # BEGIN
+
+/BT_FN/ {
+    for (i = 1; i <= NF; i++) {
+      if( match($i, "BT_FN") != 0 ) {
+        prototypes[$i] = $i
+      }
+    }
+  }
+
+END {
+    printf( "#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) TYPE(NAME)\n" );
+    printf( "#define FUNC_SIMPLE(RETURN, NAME, ARGS...) RETURN NAME(ARGS);\n" );
+    printf( "#define BT_LAST(NAME) FUNC_SIMPLE(void, NAME)\n\n" );
+
+    # generate C types for macros names
+    for ( i = 0; i < N; i += 1 ) {
+		printf( "#define BT_%s %s\n", types[i], vtypes[i] )
+    } # for
+    printf( "\n" )
+
+    for ( prototype in prototypes ) {
+      # printf( "//\"%s\"\n", prototype )
+      if ( index( "BT_LAST", prototype ) == 1 ) {
+        continue
+      } # if
+
+      printf( "#define %s(NAME) FUNC_SIMPLE(", prototype )
+
+      if ( sub( "BT_FN_", "", prototype ) == 0 ) {
+        printf( "\n********** BAD MACRO NAME \"%s\" **********\n", prototype )
+        exit 0
+      } # if
+
+      # generate function return type as macro
+      for ( t = 0; t < N; t += 1 ) {					# find longest match
+        type = types[t];
+        if ( index( prototype, type ) == 1 ) {		# found match
+          printf( "BT_%s, NAME", type )
+          sub( type, "", prototype )
+          break;
+        } # if
+      } # for
+
+      # generate function parameter types as macro
+      if ( index( prototype, "VAR" ) != 2 ) {			# C-style empty parameters ?
+        for ( p = 0; length( prototype ) > 0; p += 1 ) { # until all parameters types are removed
+          sub( "_", "", prototype)				# remove "_"
+          printf( ", ", type )
+          temp = prototype
+          for ( t = 0; t < N; t += 1 ) {			# find longest match
+            type = types[t];
+            if ( index( prototype, type ) == 1 ) { # found match
+              printf( "BT_%s", type )
+              sub( type, "", prototype )
+              break;
+            } # if
+          } # for
+          if ( temp == prototype ) {				# no match found for parameter in macro table
+            printf( "\n********** MISSING TYPE \"%s\" **********\n", prototype )
+            exit 0
+          } # if
+        } # for
+      } # if
+      printf( ")\n" )
+    } # for
+
+	# extras
+	printf( "\n#include \"builtins.def\"\n\n" );
+	printf( "\n#include \"sync-builtins.cf\"\n\n" );
+	printf( "extern const char *__PRETTY_FUNCTION__;\n" );
+} # END
+
+# Local Variables: #
+# tab-width: 4 #
+# mode: awk #
+# compile-command: "make install" #
+# End: #
Index: libcfa/prelude/prototypes.c
===================================================================
--- libcfa/prelude/prototypes.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/prototypes.c	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,2 @@
+#define DEF_BUILTIN(ENUM, NAME, CLASS, TYPE, LIBTYPE, BOTH_P, FALLBACK_P, NONANSI_P, ATTRS, IMPLICIT, COND) TYPE(NAME)
+#include "builtins.def"
Index: libcfa/prelude/prototypes.sed
===================================================================
--- libcfa/prelude/prototypes.sed	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/prototypes.sed	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,22 @@
+s/; /;\n/g  				#Make multi declaration lines into multiple lines
+/targetm/s/.*//				#Remove targetm declarations
+/__Unsupported/s/.*//			#Remove Unsupported types declarations
+s/void \(const char \*\)0\(\);//	#Remove void (const char \*)0();
+s/\"//g 					#Remove extraenous quotes in declarations
+/__builtin_/s/_ /_/g			#Remove extraenous spaces in declarations
+
+#Fix gcc overloading
+# various sed rules for the gcc sync builtins which are overloaded
+# kept here because they generate an acceptable approximate of the correct prototypes
+
+#/__sync_/s/_[0-9][0-9]*\(.*\)/\(\);/g	#hack since it will accept any parameters
+#/__atomic_/s/_[0-9][0-9]*\(.*\)/\(\);/g	#hack since it will accept any parameters
+
+#/_16/s/void \*/__int128 \*/g
+#/_8/s/void \*/long long int \*/g
+#/_4/s/void \*/int \*/g
+#/_2/s/void \*/short \*/g
+#/_1/s/void \*/char \*/g
+
+#s/([a-zA-Z0-9_ ]+)\s+__sync([a-z_]+)_([0-9]+)\((.*)\);/\1 __sync\2\(\4\,...); \1 __sync\2_\3\(\4\,...);/
+#s/([a-zA-Z0-9_ ]+)\s+__atomic([a-z_]+)_([0-9]+)\((.*)\);/\1 __atomic\2\(\4\); \1 __atomic\2_\3\(\4\);/
Index: libcfa/prelude/sync-builtins.cf
===================================================================
--- libcfa/prelude/sync-builtins.cf	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/sync-builtins.cf	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,889 @@
+char __sync_fetch_and_add(volatile char *, char,...);
+char __sync_fetch_and_add_1(volatile char *, char,...);
+signed char __sync_fetch_and_add(volatile signed char *, signed char,...);
+signed char __sync_fetch_and_add_1(volatile signed char *, signed char,...);
+unsigned char __sync_fetch_and_add(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_fetch_and_add_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_fetch_and_add(volatile signed short *, signed short,...);
+signed short __sync_fetch_and_add_2(volatile signed short *, signed short,...);
+unsigned short __sync_fetch_and_add(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_fetch_and_add_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_fetch_and_add(volatile signed int *, signed int,...);
+signed int __sync_fetch_and_add_4(volatile signed int *, signed int,...);
+unsigned int __sync_fetch_and_add(volatile unsigned int *, unsigned int,...);
+unsigned int __sync_fetch_and_add_4(volatile unsigned int *, unsigned int,...);
+signed long long int __sync_fetch_and_add(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_fetch_and_add_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_fetch_and_add(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_fetch_and_add_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_fetch_and_add(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_fetch_and_add_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_fetch_and_add(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_fetch_and_add_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+char __sync_fetch_and_sub(volatile char *, char,...);
+char __sync_fetch_and_sub_1(volatile char *, char,...);
+signed char __sync_fetch_and_sub(volatile signed char *, signed char,...);
+signed char __sync_fetch_and_sub_1(volatile signed char *, signed char,...);
+unsigned char __sync_fetch_and_sub(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_fetch_and_sub_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_fetch_and_sub(volatile signed short *, signed short,...);
+signed short __sync_fetch_and_sub_2(volatile signed short *, signed short,...);
+unsigned short __sync_fetch_and_sub(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_fetch_and_sub_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_fetch_and_sub(volatile signed int *, signed int,...);
+signed int __sync_fetch_and_sub_4(volatile signed int *, signed int,...);
+unsigned int __sync_fetch_and_sub(volatile unsigned int *, unsigned int,...);
+unsigned int __sync_fetch_and_sub_4(volatile unsigned int *, unsigned int,...);
+signed long long int __sync_fetch_and_sub(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_fetch_and_sub_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_fetch_and_sub(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_fetch_and_sub_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_fetch_and_sub(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_fetch_and_sub_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_fetch_and_sub(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_fetch_and_sub_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+char __sync_fetch_and_or(volatile char *, char,...);
+char __sync_fetch_and_or_1(volatile char *, char,...);
+signed char __sync_fetch_and_or(volatile signed char *, signed char,...);
+signed char __sync_fetch_and_or_1(volatile signed char *, signed char,...);
+unsigned char __sync_fetch_and_or(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_fetch_and_or_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_fetch_and_or(volatile signed short *, signed short,...);
+signed short __sync_fetch_and_or_2(volatile signed short *, signed short,...);
+unsigned short __sync_fetch_and_or(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_fetch_and_or_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_fetch_and_or(volatile signed int *, signed int,...);
+signed int __sync_fetch_and_or_4(volatile signed int *, signed int,...);
+unsigned int __sync_fetch_and_or(volatile unsigned int *, unsigned int,...);
+unsigned int __sync_fetch_and_or_4(volatile unsigned int *, unsigned int,...);
+signed long long int __sync_fetch_and_or(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_fetch_and_or_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_fetch_and_or(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_fetch_and_or_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_fetch_and_or(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_fetch_and_or_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_fetch_and_or(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_fetch_and_or_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+char __sync_fetch_and_and(volatile char *, char,...);
+char __sync_fetch_and_and_1(volatile char *, char,...);
+signed char __sync_fetch_and_and(volatile signed char *, signed char,...);
+signed char __sync_fetch_and_and_1(volatile signed char *, signed char,...);
+unsigned char __sync_fetch_and_and(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_fetch_and_and_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_fetch_and_and(volatile signed short *, signed short,...);
+signed short __sync_fetch_and_and_2(volatile signed short *, signed short,...);
+unsigned short __sync_fetch_and_and(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_fetch_and_and_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_fetch_and_and(volatile signed int *, signed int,...);
+signed int __sync_fetch_and_and_4(volatile signed int *, signed int,...);
+unsigned int __sync_fetch_and_and(volatile unsigned int *, unsigned int,...);
+unsigned int __sync_fetch_and_and_4(volatile unsigned int *, unsigned int,...);
+signed long long int __sync_fetch_and_and(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_fetch_and_and_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_fetch_and_and(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_fetch_and_and_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_fetch_and_and(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_fetch_and_and_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_fetch_and_and(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_fetch_and_and_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+char __sync_fetch_and_xor(volatile char *, char,...);
+char __sync_fetch_and_xor_1(volatile char *, char,...);
+signed char __sync_fetch_and_xor(volatile signed char *, signed char,...);
+signed char __sync_fetch_and_xor_1(volatile signed char *, signed char,...);
+unsigned char __sync_fetch_and_xor(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_fetch_and_xor_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_fetch_and_xor(volatile signed short *, signed short,...);
+signed short __sync_fetch_and_xor_2(volatile signed short *, signed short,...);
+unsigned short __sync_fetch_and_xor(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_fetch_and_xor_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_fetch_and_xor(volatile signed int *, signed int,...);
+signed int __sync_fetch_and_xor_4(volatile signed int *, signed int,...);
+unsigned int __sync_fetch_and_xor(volatile unsigned int *, unsigned int,...);
+unsigned int __sync_fetch_and_xor_4(volatile unsigned int *, unsigned int,...);
+signed long long int __sync_fetch_and_xor(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_fetch_and_xor_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_fetch_and_xor(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_fetch_and_xor_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_fetch_and_xor(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_fetch_and_xor_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_fetch_and_xor(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_fetch_and_xor_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+char __sync_fetch_and_nand(volatile char *, char,...);
+char __sync_fetch_and_nand_1(volatile char *, char,...);
+signed char __sync_fetch_and_nand(volatile signed char *, signed char,...);
+signed char __sync_fetch_and_nand_1(volatile signed char *, signed char,...);
+unsigned char __sync_fetch_and_nand(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_fetch_and_nand_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_fetch_and_nand(volatile signed short *, signed short,...);
+signed short __sync_fetch_and_nand_2(volatile signed short *, signed short,...);
+unsigned short __sync_fetch_and_nand(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_fetch_and_nand_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_fetch_and_nand(volatile signed int *, signed int,...);
+signed int __sync_fetch_and_nand_4(volatile signed int *, signed int,...);
+unsigned int __sync_fetch_and_nand(volatile unsigned int *, unsigned int,...);
+unsigned int __sync_fetch_and_nand_4(volatile unsigned int *, unsigned int,...);
+signed long long int __sync_fetch_and_nand(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_fetch_and_nand_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_fetch_and_nand(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_fetch_and_nand_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_fetch_and_nand(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_fetch_and_nand_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_fetch_and_nand(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_fetch_and_nand_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+char __sync_add_and_fetch(volatile char *, char,...);
+char __sync_add_and_fetch_1(volatile char *, char,...);
+signed char __sync_add_and_fetch(volatile signed char *, signed char,...);
+signed char __sync_add_and_fetch_1(volatile signed char *, signed char,...);
+unsigned char __sync_add_and_fetch(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_add_and_fetch_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_add_and_fetch(volatile signed short *, signed short,...);
+signed short __sync_add_and_fetch_2(volatile signed short *, signed short,...);
+unsigned short __sync_add_and_fetch(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_add_and_fetch_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_add_and_fetch(volatile signed int *, signed int,...);
+signed int __sync_add_and_fetch_4(volatile signed int *, signed int,...);
+signed int __sync_add_and_fetch(volatile signed int *, signed int,...);
+signed int __sync_add_and_fetch_4(volatile signed int *, signed int,...);
+signed long long int __sync_add_and_fetch(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_add_and_fetch_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_add_and_fetch(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_add_and_fetch_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_add_and_fetch(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_add_and_fetch_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_add_and_fetch(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_add_and_fetch_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+char __sync_sub_and_fetch(volatile char *, char,...);
+char __sync_sub_and_fetch_1(volatile char *, char,...);
+signed char __sync_sub_and_fetch(volatile signed char *, signed char,...);
+signed char __sync_sub_and_fetch_1(volatile signed char *, signed char,...);
+unsigned char __sync_sub_and_fetch(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_sub_and_fetch_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_sub_and_fetch(volatile signed short *, signed short,...);
+signed short __sync_sub_and_fetch_2(volatile signed short *, signed short,...);
+unsigned short __sync_sub_and_fetch(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_sub_and_fetch_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_sub_and_fetch(volatile signed int *, signed int,...);
+signed int __sync_sub_and_fetch_4(volatile signed int *, signed int,...);
+unsigned int __sync_sub_and_fetch(volatile unsigned int *, unsigned int,...);
+unsigned int __sync_sub_and_fetch_4(volatile unsigned int *, unsigned int,...);
+signed long long int __sync_sub_and_fetch(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_sub_and_fetch_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_sub_and_fetch(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_sub_and_fetch_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_sub_and_fetch(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_sub_and_fetch_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_sub_and_fetch(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_sub_and_fetch_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+char __sync_or_and_fetch(volatile char *, char,...);
+char __sync_or_and_fetch_1(volatile char *, char,...);
+signed char __sync_or_and_fetch(volatile signed char *, signed char,...);
+signed char __sync_or_and_fetch_1(volatile signed char *, signed char,...);
+unsigned char __sync_or_and_fetch(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_or_and_fetch_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_or_and_fetch(volatile signed short *, signed short,...);
+signed short __sync_or_and_fetch_2(volatile signed short *, signed short,...);
+unsigned short __sync_or_and_fetch(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_or_and_fetch_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_or_and_fetch(volatile signed int *, signed int,...);
+signed int __sync_or_and_fetch_4(volatile signed int *, signed int,...);
+unsigned int __sync_or_and_fetch(volatile unsigned int *, unsigned int,...);
+unsigned int __sync_or_and_fetch_4(volatile unsigned int *, unsigned int,...);
+signed long long int __sync_or_and_fetch(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_or_and_fetch_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_or_and_fetch(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_or_and_fetch_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_or_and_fetch(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_or_and_fetch_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_or_and_fetch(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_or_and_fetch_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+char __sync_and_and_fetch(volatile char *, char,...);
+char __sync_and_and_fetch_1(volatile char *, char,...);
+signed char __sync_and_and_fetch(volatile signed char *, signed char,...);
+signed char __sync_and_and_fetch_1(volatile signed char *, signed char,...);
+unsigned char __sync_and_and_fetch(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_and_and_fetch_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_and_and_fetch(volatile signed short *, signed short,...);
+signed short __sync_and_and_fetch_2(volatile signed short *, signed short,...);
+unsigned short __sync_and_and_fetch(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_and_and_fetch_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_and_and_fetch(volatile signed int *, signed int,...);
+signed int __sync_and_and_fetch_4(volatile signed int *, signed int,...);
+unsigned int __sync_and_and_fetch(volatile unsigned int *, unsigned int,...);
+unsigned int __sync_and_and_fetch_4(volatile unsigned int *, unsigned int,...);
+signed long long int __sync_and_and_fetch(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_and_and_fetch_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_and_and_fetch(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_and_and_fetch_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_and_and_fetch(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_and_and_fetch_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_and_and_fetch(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_and_and_fetch_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+char __sync_xor_and_fetch(volatile char *, char,...);
+char __sync_xor_and_fetch_1(volatile char *, char,...);
+signed char __sync_xor_and_fetch(volatile signed char *, signed char,...);
+signed char __sync_xor_and_fetch_1(volatile signed char *, signed char,...);
+unsigned char __sync_xor_and_fetch(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_xor_and_fetch_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_xor_and_fetch(volatile signed short *, signed short,...);
+signed short __sync_xor_and_fetch_2(volatile signed short *, signed short,...);
+unsigned short __sync_xor_and_fetch(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_xor_and_fetch_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_xor_and_fetch(volatile signed int *, signed int,...);
+signed int __sync_xor_and_fetch_4(volatile signed int *, signed int,...);
+unsigned int __sync_xor_and_fetch(volatile unsigned int *, unsigned int,...);
+unsigned int __sync_xor_and_fetch_4(volatile unsigned int *, unsigned int,...);
+signed long long int __sync_xor_and_fetch(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_xor_and_fetch_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_xor_and_fetch(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_xor_and_fetch_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_xor_and_fetch(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_xor_and_fetch_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_xor_and_fetch(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_xor_and_fetch_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+char __sync_nand_and_fetch(volatile char *, char,...);
+char __sync_nand_and_fetch_1(volatile char *, char,...);
+signed char __sync_nand_and_fetch(volatile signed char *, signed char,...);
+signed char __sync_nand_and_fetch_1(volatile signed char *, signed char,...);
+unsigned char __sync_nand_and_fetch(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_nand_and_fetch_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_nand_and_fetch(volatile signed short *, signed short,...);
+signed short __sync_nand_and_fetch_2(volatile signed short *, signed short,...);
+unsigned short __sync_nand_and_fetch(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_nand_and_fetch_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_nand_and_fetch(volatile signed int *, signed int,...);
+signed int __sync_nand_and_fetch_4(volatile signed int *, signed int,...);
+unsigned int __sync_nand_and_fetch(volatile unsigned int *, unsigned int,...);
+unsigned int __sync_nand_and_fetch_4(volatile unsigned int *, unsigned int,...);
+signed long long int __sync_nand_and_fetch(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_nand_and_fetch_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_nand_and_fetch(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_nand_and_fetch_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_nand_and_fetch(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_nand_and_fetch_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_nand_and_fetch(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_nand_and_fetch_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+_Bool __sync_bool_compare_and_swap(volatile char *, char, char,...);
+_Bool __sync_bool_compare_and_swap_1(volatile char *, char, char,...);
+_Bool __sync_bool_compare_and_swap(volatile signed char *, signed char, signed char,...);
+_Bool __sync_bool_compare_and_swap_1(volatile signed char *, signed char, signed char,...);
+_Bool __sync_bool_compare_and_swap(volatile unsigned char *, unsigned char, unsigned char,...);
+_Bool __sync_bool_compare_and_swap_1(volatile unsigned char *, unsigned char, unsigned char,...);
+_Bool __sync_bool_compare_and_swap(volatile short *, signed short, signed short,...);
+_Bool __sync_bool_compare_and_swap_2(volatile short *, signed short, signed short,...);
+_Bool __sync_bool_compare_and_swap(volatile short *, unsigned short, unsigned short,...);
+_Bool __sync_bool_compare_and_swap_2(volatile short *, unsigned short, unsigned short,...);
+_Bool __sync_bool_compare_and_swap(volatile signed int *, signed int, signed int,...);
+_Bool __sync_bool_compare_and_swap_4(volatile signed int *, signed int, signed int,...);
+_Bool __sync_bool_compare_and_swap(volatile unsigned int *, unsigned int, unsigned int,...);
+_Bool __sync_bool_compare_and_swap_4(volatile unsigned int *, unsigned int, unsigned int,...);
+_Bool __sync_bool_compare_and_swap(volatile signed long long int *, signed long long int, signed long long int,...);
+_Bool __sync_bool_compare_and_swap_8(volatile signed long long int *, signed long long int, signed long long int,...);
+_Bool __sync_bool_compare_and_swap(volatile unsigned long long int *, unsigned long long int, unsigned long long int,...);
+_Bool __sync_bool_compare_and_swap_8(volatile unsigned long long int *, unsigned long long int, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+_Bool __sync_bool_compare_and_swap(volatile signed __int128 *, signed __int128, signed __int128,...);
+_Bool __sync_bool_compare_and_swap_16(volatile signed __int128 *, signed __int128, signed __int128,...);
+_Bool __sync_bool_compare_and_swap(volatile unsigned __int128 *, unsigned __int128, unsigned __int128,...);
+_Bool __sync_bool_compare_and_swap_16(volatile unsigned __int128 *, unsigned __int128, unsigned __int128,...);
+#endif
+
+char __sync_val_compare_and_swap(volatile char *, char, char,...);
+char __sync_val_compare_and_swap_1(volatile char *, char, char,...);
+signed char __sync_val_compare_and_swap(volatile signed char *, signed char, signed char,...);
+signed char __sync_val_compare_and_swap_1(volatile signed char *, signed char, signed char,...);
+unsigned char __sync_val_compare_and_swap(volatile unsigned char *, unsigned char, unsigned char,...);
+unsigned char __sync_val_compare_and_swap_1(volatile unsigned char *, unsigned char, unsigned char,...);
+signed short __sync_val_compare_and_swap(volatile signed short *, signed short, signed short,...);
+signed short __sync_val_compare_and_swap_2(volatile signed short *, signed short, signed short,...);
+unsigned short __sync_val_compare_and_swap(volatile unsigned short *, unsigned short, unsigned short,...);
+unsigned short __sync_val_compare_and_swap_2(volatile unsigned short *, unsigned short, unsigned short,...);
+signed int __sync_val_compare_and_swap(volatile signed int *, signed int, signed int,...);
+signed int __sync_val_compare_and_swap_4(volatile signed int *, signed int, signed int,...);
+unsigned int __sync_val_compare_and_swap(volatile unsigned int *, unsigned int, unsigned int,...);
+unsigned int __sync_val_compare_and_swap_4(volatile unsigned int *, unsigned int, unsigned int,...);
+signed long long int __sync_val_compare_and_swap(volatile signed long long int *, signed long long int, signed long long int,...);
+signed long long int __sync_val_compare_and_swap_8(volatile signed long long int *, signed long long int, signed long long int,...);
+unsigned long long int __sync_val_compare_and_swap(volatile unsigned long long int *, unsigned long long int, unsigned long long int,...);
+unsigned long long int __sync_val_compare_and_swap_8(volatile unsigned long long int *, unsigned long long int, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_val_compare_and_swap(volatile signed __int128 *, signed __int128, signed __int128,...);
+signed __int128 __sync_val_compare_and_swap_16(volatile signed __int128 *, signed __int128, signed __int128,...);
+unsigned __int128 __sync_val_compare_and_swap(volatile unsigned __int128 *, unsigned __int128, unsigned __int128,...);
+unsigned __int128 __sync_val_compare_and_swap_16(volatile unsigned __int128 *, unsigned __int128, unsigned __int128,...);
+#endif
+
+char __sync_lock_test_and_set(volatile char *, char,...);
+char __sync_lock_test_and_set_1(volatile char *, char,...);
+signed char __sync_lock_test_and_set(volatile signed char *, signed char,...);
+signed char __sync_lock_test_and_set_1(volatile signed char *, signed char,...);
+unsigned char __sync_lock_test_and_set(volatile unsigned char *, unsigned char,...);
+unsigned char __sync_lock_test_and_set_1(volatile unsigned char *, unsigned char,...);
+signed short __sync_lock_test_and_set(volatile signed short *, signed short,...);
+signed short __sync_lock_test_and_set_2(volatile signed short *, signed short,...);
+unsigned short __sync_lock_test_and_set(volatile unsigned short *, unsigned short,...);
+unsigned short __sync_lock_test_and_set_2(volatile unsigned short *, unsigned short,...);
+signed int __sync_lock_test_and_set(volatile signed int *, signed int,...);
+signed int __sync_lock_test_and_set_4(volatile signed int *, signed int,...);
+unsigned int __sync_lock_test_and_set(volatile unsigned int *, unsigned int,...);
+unsigned int __sync_lock_test_and_set_4(volatile unsigned int *, unsigned int,...);
+signed long long int __sync_lock_test_and_set(volatile signed long long int *, signed long long int,...);
+signed long long int __sync_lock_test_and_set_8(volatile signed long long int *, signed long long int,...);
+unsigned long long int __sync_lock_test_and_set(volatile unsigned long long int *, unsigned long long int,...);
+unsigned long long int __sync_lock_test_and_set_8(volatile unsigned long long int *, unsigned long long int,...);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __sync_lock_test_and_set(volatile signed __int128 *, signed __int128,...);
+signed __int128 __sync_lock_test_and_set_16(volatile signed __int128 *, signed __int128,...);
+unsigned __int128 __sync_lock_test_and_set(volatile unsigned __int128 *, unsigned __int128,...);
+unsigned __int128 __sync_lock_test_and_set_16(volatile unsigned __int128 *, unsigned __int128,...);
+#endif
+
+void __sync_lock_release(volatile char *,...);
+void __sync_lock_release_1(volatile char *,...);
+void __sync_lock_release(volatile signed char *,...);
+void __sync_lock_release_1(volatile signed char *,...);
+void __sync_lock_release(volatile unsigned char *,...);
+void __sync_lock_release_1(volatile unsigned char *,...);
+void __sync_lock_release(volatile signed short *,...);
+void __sync_lock_release_2(volatile signed short *,...);
+void __sync_lock_release(volatile unsigned short *,...);
+void __sync_lock_release_2(volatile unsigned short *,...);
+void __sync_lock_release(volatile signed int *,...);
+void __sync_lock_release_4(volatile signed int *,...);
+void __sync_lock_release(volatile unsigned int *,...);
+void __sync_lock_release_4(volatile unsigned int *,...);
+void __sync_lock_release(volatile signed long long int *,...);
+void __sync_lock_release_8(volatile signed long long int *,...);
+void __sync_lock_release(volatile unsigned long long int *,...);
+void __sync_lock_release_8(volatile unsigned long long int *,...);
+#if defined(__SIZEOF_INT128__)
+void __sync_lock_release(volatile signed __int128 *,...);
+void __sync_lock_release_16(volatile signed __int128 *,...);
+void __sync_lock_release(volatile unsigned __int128 *,...);
+void __sync_lock_release_16(volatile unsigned __int128 *,...);
+#endif
+
+void __sync_synchronize();
+
+
+
+
+_Bool __atomic_test_and_set(volatile _Bool *, int);
+_Bool __atomic_test_and_set(volatile char *, int);
+_Bool __atomic_test_and_set(volatile signed char *, int);
+_Bool __atomic_test_and_set(volatile unsigned char *, int);
+_Bool __atomic_test_and_set(volatile signed short *, int);
+_Bool __atomic_test_and_set(volatile unsigned short *, int);
+_Bool __atomic_test_and_set(volatile signed int *, int);
+_Bool __atomic_test_and_set(volatile unsigned int *, int);
+_Bool __atomic_test_and_set(volatile signed long long int *, int);
+_Bool __atomic_test_and_set(volatile unsigned long long int *, int);
+#if defined(__SIZEOF_INT128__)
+_Bool __atomic_test_and_set(volatile signed __int128 *, int);
+_Bool __atomic_test_and_set(volatile unsigned __int128 *, int);
+#endif
+
+void __atomic_clear(volatile _Bool *, int);
+void __atomic_clear(volatile char *, int);
+void __atomic_clear(volatile signed char *, int);
+void __atomic_clear(volatile unsigned char *, int);
+void __atomic_clear(volatile signed short *, int);
+void __atomic_clear(volatile unsigned short *, int);
+void __atomic_clear(volatile signed int *, int);
+void __atomic_clear(volatile unsigned int *, int);
+void __atomic_clear(volatile signed long long int *, int);
+void __atomic_clear(volatile unsigned long long int *, int);
+#if defined(__SIZEOF_INT128__)
+void __atomic_clear(volatile signed __int128 *, int);
+void __atomic_clear(volatile unsigned __int128 *, int);
+#endif
+
+char __atomic_exchange_n(volatile char *, volatile char *, int);
+char __atomic_exchange_1(volatile char *, char, int);
+void __atomic_exchange(volatile char *, volatile char *, volatile char *, int);
+signed char __atomic_exchange_n(volatile signed char *, volatile signed char *, int);
+signed char __atomic_exchange_1(volatile signed char *, signed char, int);
+void __atomic_exchange(volatile signed char *, volatile signed char *, volatile signed char *, int);
+unsigned char __atomic_exchange_n(volatile unsigned char *, volatile unsigned char *, int);
+unsigned char __atomic_exchange_1(volatile unsigned char *, unsigned char, int);
+void __atomic_exchange(volatile unsigned char *, volatile unsigned char *, volatile unsigned char *, int);
+signed short __atomic_exchange_n(volatile signed short *, volatile signed short *, int);
+signed short __atomic_exchange_2(volatile signed short *, signed short, int);
+void __atomic_exchange(volatile signed short *, volatile signed short *, volatile signed short *, int);
+unsigned short __atomic_exchange_n(volatile unsigned short *, volatile unsigned short *, int);
+unsigned short __atomic_exchange_2(volatile unsigned short *, unsigned short, int);
+void __atomic_exchange(volatile unsigned short *, volatile unsigned short *, volatile unsigned short *, int);
+signed int __atomic_exchange_n(volatile signed int *, volatile signed int *, int);
+signed int __atomic_exchange_4(volatile signed int *, signed int, int);
+void __atomic_exchange(volatile signed int *, volatile signed int *, volatile signed int *, int);
+unsigned int __atomic_exchange_n(volatile unsigned int *, volatile unsigned int *, int);
+unsigned int __atomic_exchange_4(volatile unsigned int *, unsigned int, int);
+void __atomic_exchange(volatile unsigned int *, volatile unsigned int *, volatile unsigned int *, int);
+signed long long int __atomic_exchange_n(volatile signed long long int *, volatile signed long long int *, int);
+signed long long int __atomic_exchange_8(volatile signed long long int *, signed long long int, int);
+void __atomic_exchange(volatile signed long long int *, volatile signed long long int *, volatile signed long long int *, int);
+unsigned long long int __atomic_exchange_n(volatile unsigned long long int *, volatile unsigned long long int *, int);
+unsigned long long int __atomic_exchange_8(volatile unsigned long long int *, unsigned long long int, int);
+void __atomic_exchange(volatile unsigned long long int *, volatile unsigned long long int *, volatile unsigned long long int *, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_exchange_n(volatile signed __int128 *, volatile signed __int128 *, int);
+signed __int128 __atomic_exchange_16(volatile signed __int128 *, signed __int128, int);
+void __atomic_exchange(volatile signed __int128 *, volatile signed __int128 *, volatile signed __int128 *, int);
+unsigned __int128 __atomic_exchange_n(volatile unsigned __int128 *, volatile unsigned __int128 *, int);
+unsigned __int128 __atomic_exchange_16(volatile unsigned __int128 *, unsigned __int128, int);
+void __atomic_exchange(volatile unsigned __int128 *, volatile unsigned __int128 *, volatile unsigned __int128 *, int);
+#endif
+
+_Bool __atomic_load_n(const volatile _Bool *, int);
+void __atomic_load(const volatile _Bool *, volatile _Bool *, int);
+char __atomic_load_n(const volatile char *, int);
+char __atomic_load_1(const volatile char *, int);
+void __atomic_load(const volatile char *, volatile char *, int);
+signed char __atomic_load_n(const volatile signed char *, int);
+signed char __atomic_load_1(const volatile signed char *, int);
+void __atomic_load(const volatile signed char *, volatile signed char *, int);
+unsigned char __atomic_load_n(const volatile unsigned char *, int);
+unsigned char __atomic_load_1(const volatile unsigned char *, int);
+void __atomic_load(const volatile unsigned char *, volatile unsigned char *, int);
+signed short __atomic_load_n(const volatile signed short *, int);
+signed short __atomic_load_2(const volatile signed short *, int);
+void __atomic_load(const volatile signed short *, volatile signed short *, int);
+unsigned short __atomic_load_n(const volatile unsigned short *, int);
+unsigned short __atomic_load_2(const volatile unsigned short *, int);
+void __atomic_load(const volatile unsigned short *, volatile unsigned short *, int);
+signed int __atomic_load_n(const volatile signed int *, int);
+signed int __atomic_load_4(const volatile signed int *, int);
+void __atomic_load(const volatile signed int *, volatile signed int *, int);
+unsigned int __atomic_load_n(const volatile unsigned int *, int);
+unsigned int __atomic_load_4(const volatile unsigned int *, int);
+void __atomic_load(const volatile unsigned int *, volatile unsigned int *, int);
+signed long long int __atomic_load_n(const volatile signed long long int *, int);
+signed long long int __atomic_load_8(const volatile signed long long int *, int);
+void __atomic_load(const volatile signed long long int *, volatile signed long long int *, int);
+unsigned long long int __atomic_load_n(const volatile unsigned long long int *, int);
+unsigned long long int __atomic_load_8(const volatile unsigned long long int *, int);
+void __atomic_load(const volatile unsigned long long int *, volatile unsigned long long int *, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_load_n(const volatile signed __int128 *, int);
+signed __int128 __atomic_load_16(const volatile signed __int128 *, int);
+void __atomic_load(const volatile signed __int128 *, volatile signed __int128 *, int);
+unsigned __int128 __atomic_load_n(const volatile unsigned __int128 *, int);
+unsigned __int128 __atomic_load_16(const volatile unsigned __int128 *, int);
+void __atomic_load(const volatile unsigned __int128 *, volatile unsigned __int128 *, int);
+#endif
+
+_Bool __atomic_compare_exchange_n(volatile char *, char *, char, _Bool, int, int);
+_Bool __atomic_compare_exchange_1(volatile char *, char *, char, _Bool, int, int);
+_Bool __atomic_compare_exchange  (volatile char *, char *, char *, _Bool, int, int);
+_Bool __atomic_compare_exchange_n(volatile signed char *, signed char *, signed char, _Bool, int, int);
+_Bool __atomic_compare_exchange_1(volatile signed char *, signed char *, signed char, _Bool, int, int);
+_Bool __atomic_compare_exchange  (volatile signed char *, signed char *, signed char *, _Bool, int, int);
+_Bool __atomic_compare_exchange_n(volatile unsigned char *, unsigned char *, unsigned char, _Bool, int, int);
+_Bool __atomic_compare_exchange_1(volatile unsigned char *, unsigned char *, unsigned char, _Bool, int, int);
+_Bool __atomic_compare_exchange  (volatile unsigned char *, unsigned char *, unsigned char *, _Bool, int, int);
+_Bool __atomic_compare_exchange_n(volatile signed short *, signed short *, signed short, _Bool, int, int);
+_Bool __atomic_compare_exchange_2(volatile signed short *, signed short *, signed short, _Bool, int, int);
+_Bool __atomic_compare_exchange  (volatile signed short *, signed short *, signed short *, _Bool, int, int);
+_Bool __atomic_compare_exchange_n(volatile unsigned short *, unsigned short *, unsigned short, _Bool, int, int);
+_Bool __atomic_compare_exchange_2(volatile unsigned short *, unsigned short *, unsigned short, _Bool, int, int);
+_Bool __atomic_compare_exchange  (volatile unsigned short *, unsigned short *, unsigned short *, _Bool, int, int);
+_Bool __atomic_compare_exchange_n(volatile signed int *, signed int *, signed int, _Bool, int, int);
+_Bool __atomic_compare_exchange_4(volatile signed int *, signed int *, signed int, _Bool, int, int);
+_Bool __atomic_compare_exchange  (volatile signed int *, signed int *, signed int *, _Bool, int, int);
+_Bool __atomic_compare_exchange_n(volatile unsigned int *, unsigned int *, unsigned int, _Bool, int, int);
+_Bool __atomic_compare_exchange_4(volatile unsigned int *, unsigned int *, unsigned int, _Bool, int, int);
+_Bool __atomic_compare_exchange  (volatile unsigned int *, unsigned int *, unsigned int *, _Bool, int, int);
+_Bool __atomic_compare_exchange_n(volatile signed long long int *, signed long long int *, signed long long int, _Bool, int, int);
+_Bool __atomic_compare_exchange_8(volatile signed long long int *, signed long long int *, signed long long int, _Bool, int, int);
+_Bool __atomic_compare_exchange  (volatile signed long long int *, signed long long int *, signed long long int *, _Bool, int, int);
+_Bool __atomic_compare_exchange_n(volatile unsigned long long int *, unsigned long long int *, unsigned long long int, _Bool, int, int);
+_Bool __atomic_compare_exchange_8(volatile unsigned long long int *, unsigned long long int *, unsigned long long int, _Bool, int, int);
+_Bool __atomic_compare_exchange  (volatile unsigned long long int *, unsigned long long int *, unsigned long long int *, _Bool, int, int);
+#if defined(__SIZEOF_INT128__)
+_Bool __atomic_compare_exchange_n (volatile signed __int128 *, signed __int128 *, signed __int128, _Bool, int, int);
+_Bool __atomic_compare_exchange_16(volatile signed __int128 *, signed __int128 *, signed __int128, _Bool, int, int);
+_Bool __atomic_compare_exchange   (volatile signed __int128 *, signed __int128 *, signed __int128 *, _Bool, int, int);
+_Bool __atomic_compare_exchange_n (volatile unsigned __int128 *, unsigned __int128 *, unsigned __int128, _Bool, int, int);
+_Bool __atomic_compare_exchange_16(volatile unsigned __int128 *, unsigned __int128 *, unsigned __int128, _Bool, int, int);
+_Bool __atomic_compare_exchange   (volatile unsigned __int128 *, unsigned __int128 *, unsigned __int128 *, _Bool, int, int);
+#endif
+
+void __atomic_store_n(volatile _Bool *, _Bool, int);
+void __atomic_store(volatile _Bool *, _Bool *, int);
+void __atomic_store_n(volatile char *, char, int);
+void __atomic_store_1(volatile char *, char, int);
+void __atomic_store(volatile char *, char *, int);
+void __atomic_store_n(volatile signed char *, signed char, int);
+void __atomic_store_1(volatile signed char *, signed char, int);
+void __atomic_store(volatile signed char *, signed char *, int);
+void __atomic_store_n(volatile unsigned char *, unsigned char, int);
+void __atomic_store_1(volatile unsigned char *, unsigned char, int);
+void __atomic_store(volatile unsigned char *, unsigned char *, int);
+void __atomic_store_n(volatile signed short *, signed short, int);
+void __atomic_store_2(volatile signed short *, signed short, int);
+void __atomic_store(volatile signed short *, signed short *, int);
+void __atomic_store_n(volatile unsigned short *, unsigned short, int);
+void __atomic_store_2(volatile unsigned short *, unsigned short, int);
+void __atomic_store(volatile unsigned short *, unsigned short *, int);
+void __atomic_store_n(volatile signed int *, signed int, int);
+void __atomic_store_4(volatile signed int *, signed int, int);
+void __atomic_store(volatile signed int *, signed int *, int);
+void __atomic_store_n(volatile unsigned int *, unsigned int, int);
+void __atomic_store_4(volatile unsigned int *, unsigned int, int);
+void __atomic_store(volatile unsigned int *, unsigned int *, int);
+void __atomic_store_n(volatile signed long long int *, signed long long int, int);
+void __atomic_store_8(volatile signed long long int *, signed long long int, int);
+void __atomic_store(volatile signed long long int *, signed long long int *, int);
+void __atomic_store_n(volatile unsigned long long int *, unsigned long long int, int);
+void __atomic_store_8(volatile unsigned long long int *, unsigned long long int, int);
+void __atomic_store(volatile unsigned long long int *, unsigned long long int *, int);
+#if defined(__SIZEOF_INT128__)
+void __atomic_store_n(volatile signed __int128 *, signed __int128, int);
+void __atomic_store_16(volatile signed __int128 *, signed __int128, int);
+void __atomic_store(volatile signed __int128 *, signed __int128 *, int);
+void __atomic_store_n(volatile unsigned __int128 *, unsigned __int128, int);
+void __atomic_store_16(volatile unsigned __int128 *, unsigned __int128, int);
+void __atomic_store(volatile unsigned __int128 *, unsigned __int128 *, int);
+#endif
+
+char __atomic_add_fetch  (volatile char *, char, int);
+char __atomic_add_fetch_1(volatile char *, char, int);
+signed char __atomic_add_fetch  (volatile signed char *, signed char, int);
+signed char __atomic_add_fetch_1(volatile signed char *, signed char, int);
+unsigned char __atomic_add_fetch  (volatile unsigned char *, unsigned char, int);
+unsigned char __atomic_add_fetch_1(volatile unsigned char *, unsigned char, int);
+signed short __atomic_add_fetch  (volatile signed short *, signed short, int);
+signed short __atomic_add_fetch_2(volatile signed short *, signed short, int);
+unsigned short __atomic_add_fetch  (volatile unsigned short *, unsigned short, int);
+unsigned short __atomic_add_fetch_2(volatile unsigned short *, unsigned short, int);
+signed int __atomic_add_fetch  (volatile signed int *, signed int, int);
+signed int __atomic_add_fetch_4(volatile signed int *, signed int, int);
+unsigned int __atomic_add_fetch  (volatile unsigned int *, unsigned int, int);
+unsigned int __atomic_add_fetch_4(volatile unsigned int *, unsigned int, int);
+signed long long int __atomic_add_fetch  (volatile signed long long int *, signed long long int, int);
+signed long long int __atomic_add_fetch_8(volatile signed long long int *, signed long long int, int);
+unsigned long long int __atomic_add_fetch  (volatile unsigned long long int *, unsigned long long int, int);
+unsigned long long int __atomic_add_fetch_8(volatile unsigned long long int *, unsigned long long int, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_add_fetch   (volatile signed __int128 *, signed __int128, int);
+signed __int128 __atomic_add_fetch_16(volatile signed __int128 *, signed __int128, int);
+unsigned __int128 __atomic_add_fetch   (volatile unsigned __int128 *, unsigned __int128, int);
+unsigned __int128 __atomic_add_fetch_16(volatile unsigned __int128 *, unsigned __int128, int);
+#endif
+
+char __atomic_sub_fetch  (volatile char *, char, int);
+char __atomic_sub_fetch_1(volatile char *, char, int);
+signed char __atomic_sub_fetch  (volatile signed char *, signed char, int);
+signed char __atomic_sub_fetch_1(volatile signed char *, signed char, int);
+unsigned char __atomic_sub_fetch  (volatile unsigned char *, unsigned char, int);
+unsigned char __atomic_sub_fetch_1(volatile unsigned char *, unsigned char, int);
+signed short __atomic_sub_fetch  (volatile signed short *, signed short, int);
+signed short __atomic_sub_fetch_2(volatile signed short *, signed short, int);
+unsigned short __atomic_sub_fetch  (volatile unsigned short *, unsigned short, int);
+unsigned short __atomic_sub_fetch_2(volatile unsigned short *, unsigned short, int);
+signed int __atomic_sub_fetch  (volatile signed int *, signed int, int);
+signed int __atomic_sub_fetch_4(volatile signed int *, signed int, int);
+unsigned int __atomic_sub_fetch  (volatile unsigned int *, unsigned int, int);
+unsigned int __atomic_sub_fetch_4(volatile unsigned int *, unsigned int, int);
+signed long long int __atomic_sub_fetch  (volatile signed long long int *, signed long long int, int);
+signed long long int __atomic_sub_fetch_8(volatile signed long long int *, signed long long int, int);
+unsigned long long int __atomic_sub_fetch  (volatile unsigned long long int *, unsigned long long int, int);
+unsigned long long int __atomic_sub_fetch_8(volatile unsigned long long int *, unsigned long long int, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_sub_fetch   (volatile signed __int128 *, signed __int128, int);
+signed __int128 __atomic_sub_fetch_16(volatile signed __int128 *, signed __int128, int);
+unsigned __int128 __atomic_sub_fetch   (volatile unsigned __int128 *, unsigned __int128, int);
+unsigned __int128 __atomic_sub_fetch_16(volatile unsigned __int128 *, unsigned __int128, int);
+#endif
+
+char __atomic_and_fetch  (volatile char *, char, int);
+char __atomic_and_fetch_1(volatile char *, char, int);
+signed char __atomic_and_fetch  (volatile signed char *, signed char, int);
+signed char __atomic_and_fetch_1(volatile signed char *, signed char, int);
+unsigned char __atomic_and_fetch  (volatile unsigned char *, unsigned char, int);
+unsigned char __atomic_and_fetch_1(volatile unsigned char *, unsigned char, int);
+signed short __atomic_and_fetch  (volatile signed short *, signed short, int);
+signed short __atomic_and_fetch_2(volatile signed short *, signed short, int);
+unsigned short __atomic_and_fetch  (volatile unsigned short *, unsigned short, int);
+unsigned short __atomic_and_fetch_2(volatile unsigned short *, unsigned short, int);
+signed int __atomic_and_fetch  (volatile signed int *, signed int, int);
+signed int __atomic_and_fetch_4(volatile signed int *, signed int, int);
+unsigned int __atomic_and_fetch  (volatile unsigned int *, unsigned int, int);
+unsigned int __atomic_and_fetch_4(volatile unsigned int *, unsigned int, int);
+signed long long int __atomic_and_fetch  (volatile signed long long int *, signed long long int, int);
+signed long long int __atomic_and_fetch_8(volatile signed long long int *, signed long long int, int);
+unsigned long long int __atomic_and_fetch  (volatile unsigned long long int *, unsigned long long int, int);
+unsigned long long int __atomic_and_fetch_8(volatile unsigned long long int *, unsigned long long int, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_and_fetch   (volatile signed __int128 *, signed __int128, int);
+signed __int128 __atomic_and_fetch_16(volatile signed __int128 *, signed __int128, int);
+unsigned __int128 __atomic_and_fetch   (volatile unsigned __int128 *, unsigned __int128, int);
+unsigned __int128 __atomic_and_fetch_16(volatile unsigned __int128 *, unsigned __int128, int);
+#endif
+
+char __atomic_nand_fetch  (volatile char *, char, int);
+char __atomic_nand_fetch_1(volatile char *, char, int);
+signed char __atomic_nand_fetch  (volatile signed char *, signed char, int);
+signed char __atomic_nand_fetch_1(volatile signed char *, signed char, int);
+unsigned char __atomic_nand_fetch  (volatile unsigned char *, unsigned char, int);
+unsigned char __atomic_nand_fetch_1(volatile unsigned char *, unsigned char, int);
+signed short __atomic_nand_fetch  (volatile signed short *, signed short, int);
+signed short __atomic_nand_fetch_2(volatile signed short *, signed short, int);
+unsigned short __atomic_nand_fetch  (volatile unsigned short *, unsigned short, int);
+unsigned short __atomic_nand_fetch_2(volatile unsigned short *, unsigned short, int);
+signed int __atomic_nand_fetch  (volatile signed int *, signed int, int);
+signed int __atomic_nand_fetch_4(volatile signed int *, signed int, int);
+unsigned int __atomic_nand_fetch  (volatile unsigned int *, unsigned int, int);
+unsigned int __atomic_nand_fetch_4(volatile unsigned int *, unsigned int, int);
+signed long long int __atomic_nand_fetch  (volatile signed long long int *, signed long long int, int);
+signed long long int __atomic_nand_fetch_8(volatile signed long long int *, signed long long int, int);
+unsigned long long int __atomic_nand_fetch  (volatile unsigned long long int *, unsigned long long int, int);
+unsigned long long int __atomic_nand_fetch_8(volatile unsigned long long int *, unsigned long long int, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_nand_fetch   (volatile signed __int128 *, signed __int128, int);
+signed __int128 __atomic_nand_fetch_16(volatile signed __int128 *, signed __int128, int);
+unsigned __int128 __atomic_nand_fetch   (volatile unsigned __int128 *, unsigned __int128, int);
+unsigned __int128 __atomic_nand_fetch_16(volatile unsigned __int128 *, unsigned __int128, int);
+#endif
+
+char __atomic_xor_fetch  (volatile char *, char, int);
+char __atomic_xor_fetch_1(volatile char *, char, int);
+signed char __atomic_xor_fetch  (volatile signed char *, signed char, int);
+signed char __atomic_xor_fetch_1(volatile signed char *, signed char, int);
+unsigned char __atomic_xor_fetch  (volatile unsigned char *, unsigned char, int);
+unsigned char __atomic_xor_fetch_1(volatile unsigned char *, unsigned char, int);
+signed short __atomic_xor_fetch  (volatile signed short *, signed short, int);
+signed short __atomic_xor_fetch_2(volatile signed short *, signed short, int);
+unsigned short __atomic_xor_fetch  (volatile unsigned short *, unsigned short, int);
+unsigned short __atomic_xor_fetch_2(volatile unsigned short *, unsigned short, int);
+signed int __atomic_xor_fetch  (volatile signed int *, signed int, int);
+signed int __atomic_xor_fetch_4(volatile signed int *, signed int, int);
+unsigned int __atomic_xor_fetch  (volatile unsigned int *, unsigned int, int);
+unsigned int __atomic_xor_fetch_4(volatile unsigned int *, unsigned int, int);
+signed long long int __atomic_xor_fetch  (volatile signed long long int *, signed long long int, int);
+signed long long int __atomic_xor_fetch_8(volatile signed long long int *, signed long long int, int);
+unsigned long long int __atomic_xor_fetch  (volatile unsigned long long int *, unsigned long long int, int);
+unsigned long long int __atomic_xor_fetch_8(volatile unsigned long long int *, unsigned long long int, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_xor_fetch   (volatile signed __int128 *, signed __int128, int);
+signed __int128 __atomic_xor_fetch_16(volatile signed __int128 *, signed __int128, int);
+unsigned __int128 __atomic_xor_fetch   (volatile unsigned __int128 *, unsigned __int128, int);
+unsigned __int128 __atomic_xor_fetch_16(volatile unsigned __int128 *, unsigned __int128, int);
+#endif
+
+char __atomic_or_fetch  (volatile char *, char, int);
+char __atomic_or_fetch_1(volatile char *, char, int);
+signed char __atomic_or_fetch  (volatile signed char *, signed char, int);
+signed char __atomic_or_fetch_1(volatile signed char *, signed char, int);
+unsigned char __atomic_or_fetch  (volatile unsigned char *, unsigned char, int);
+unsigned char __atomic_or_fetch_1(volatile unsigned char *, unsigned char, int);
+signed short __atomic_or_fetch  (volatile signed short *, signed short, int);
+signed short __atomic_or_fetch_2(volatile signed short *, signed short, int);
+unsigned short __atomic_or_fetch  (volatile unsigned short *, unsigned short, int);
+unsigned short __atomic_or_fetch_2(volatile unsigned short *, unsigned short, int);
+signed int __atomic_or_fetch  (volatile signed int *, signed int, int);
+signed int __atomic_or_fetch_4(volatile signed int *, signed int, int);
+unsigned int __atomic_or_fetch  (volatile unsigned int *, unsigned int, int);
+unsigned int __atomic_or_fetch_4(volatile unsigned int *, unsigned int, int);
+signed long long int __atomic_or_fetch  (volatile signed long long int *, signed long long int, int);
+signed long long int __atomic_or_fetch_8(volatile signed long long int *, signed long long int, int);
+unsigned long long int __atomic_or_fetch  (volatile unsigned long long int *, unsigned long long int, int);
+unsigned long long int __atomic_or_fetch_8(volatile unsigned long long int *, unsigned long long int, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_or_fetch   (volatile signed __int128 *, signed __int128, int);
+signed __int128 __atomic_or_fetch_16(volatile signed __int128 *, signed __int128, int);
+unsigned __int128 __atomic_or_fetch   (volatile unsigned __int128 *, unsigned __int128, int);
+unsigned __int128 __atomic_or_fetch_16(volatile unsigned __int128 *, unsigned __int128, int);
+#endif
+
+char __atomic_fetch_add  (volatile char *, char, int);
+char __atomic_fetch_add_1(volatile char *, char, int);
+signed char __atomic_fetch_add  (volatile signed char *, signed char, int);
+signed char __atomic_fetch_add_1(volatile signed char *, signed char, int);
+unsigned char __atomic_fetch_add  (volatile unsigned char *, unsigned char, int);
+unsigned char __atomic_fetch_add_1(volatile unsigned char *, unsigned char, int);
+signed short __atomic_fetch_add  (volatile signed short *, signed short, int);
+signed short __atomic_fetch_add_2(volatile signed short *, signed short, int);
+unsigned short __atomic_fetch_add  (volatile unsigned short *, unsigned short, int);
+unsigned short __atomic_fetch_add_2(volatile unsigned short *, unsigned short, int);
+signed int __atomic_fetch_add  (volatile signed int *, signed int, int);
+signed int __atomic_fetch_add_4(volatile signed int *, signed int, int);
+unsigned int __atomic_fetch_add  (volatile unsigned int *, unsigned int, int);
+unsigned int __atomic_fetch_add_4(volatile unsigned int *, unsigned int, int);
+signed long long int __atomic_fetch_add  (volatile signed long long int *, signed long long int, int);
+signed long long int __atomic_fetch_add_8(volatile signed long long int *, signed long long int, int);
+unsigned long long int __atomic_fetch_add  (volatile unsigned long long int *, unsigned long long int, int);
+unsigned long long int __atomic_fetch_add_8(volatile unsigned long long int *, unsigned long long int, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_fetch_add   (volatile signed __int128 *, signed __int128, int);
+signed __int128 __atomic_fetch_add_16(volatile signed __int128 *, signed __int128, int);
+unsigned __int128 __atomic_fetch_add   (volatile unsigned __int128 *, unsigned __int128, int);
+unsigned __int128 __atomic_fetch_add_16(volatile unsigned __int128 *, unsigned __int128, int);
+#endif
+
+char __atomic_fetch_sub  (volatile char *, char, int);
+char __atomic_fetch_sub_1(volatile char *, char, int);
+signed char __atomic_fetch_sub  (volatile signed char *, signed char, int);
+signed char __atomic_fetch_sub_1(volatile signed char *, signed char, int);
+unsigned char __atomic_fetch_sub  (volatile unsigned char *, unsigned char, int);
+unsigned char __atomic_fetch_sub_1(volatile unsigned char *, unsigned char, int);
+signed short __atomic_fetch_sub  (volatile signed short *, signed short, int);
+signed short __atomic_fetch_sub_2(volatile signed short *, signed short, int);
+unsigned short __atomic_fetch_sub  (volatile unsigned short *, unsigned short, int);
+unsigned short __atomic_fetch_sub_2(volatile unsigned short *, unsigned short, int);
+signed int __atomic_fetch_sub  (volatile signed int *, signed int, int);
+signed int __atomic_fetch_sub_4(volatile signed int *, signed int, int);
+unsigned int __atomic_fetch_sub  (volatile unsigned int *, unsigned int, int);
+unsigned int __atomic_fetch_sub_4(volatile unsigned int *, unsigned int, int);
+signed long long int __atomic_fetch_sub  (volatile signed long long int *, signed long long int, int);
+signed long long int __atomic_fetch_sub_8(volatile signed long long int *, signed long long int, int);
+unsigned long long int __atomic_fetch_sub  (volatile unsigned long long int *, unsigned long long int, int);
+unsigned long long int __atomic_fetch_sub_8(volatile unsigned long long int *, unsigned long long int, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_fetch_sub   (volatile signed  __int128 *, signed __int128, int);
+signed __int128 __atomic_fetch_sub_16(volatile signed  __int128 *, signed __int128, int);
+unsigned __int128 __atomic_fetch_sub   (volatile unsigned  __int128 *, unsigned __int128, int);
+unsigned __int128 __atomic_fetch_sub_16(volatile unsigned  __int128 *, unsigned __int128, int);
+#endif
+
+char __atomic_fetch_and  (volatile char *, char, int);
+char __atomic_fetch_and_1(volatile char *, char, int);
+signed char __atomic_fetch_and  (volatile signed char *, signed char, int);
+signed char __atomic_fetch_and_1(volatile signed char *, signed char, int);
+unsigned char __atomic_fetch_and  (volatile unsigned char *, unsigned char, int);
+unsigned char __atomic_fetch_and_1(volatile unsigned char *, unsigned char, int);
+signed short __atomic_fetch_and  (volatile signed short *, signed short, int);
+signed short __atomic_fetch_and_2(volatile signed short *, signed short, int);
+unsigned short __atomic_fetch_and  (volatile unsigned short *, unsigned short, int);
+unsigned short __atomic_fetch_and_2(volatile unsigned short *, unsigned short, int);
+signed int __atomic_fetch_and  (volatile signed int *, signed int, int);
+signed int __atomic_fetch_and_4(volatile signed int *, signed int, int);
+unsigned int __atomic_fetch_and  (volatile unsigned int *, unsigned int, int);
+unsigned int __atomic_fetch_and_4(volatile unsigned int *, unsigned int, int);
+signed long long int __atomic_fetch_and  (volatile signed long long int *, signed long long int, int);
+signed long long int __atomic_fetch_and_8(volatile signed long long int *, signed long long int, int);
+unsigned long long int __atomic_fetch_and  (volatile unsigned long long int *, unsigned long long int, int);
+unsigned long long int __atomic_fetch_and_8(volatile unsigned long long int *, unsigned long long int, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_fetch_and   (volatile signed __int128 *, signed __int128, int);
+signed __int128 __atomic_fetch_and_16(volatile signed __int128 *, signed __int128, int);
+unsigned __int128 __atomic_fetch_and   (volatile unsigned __int128 *, unsigned __int128, int);
+unsigned __int128 __atomic_fetch_and_16(volatile unsigned __int128 *, unsigned __int128, int);
+#endif
+
+char __atomic_fetch_nand  (volatile char *, char, int);
+char __atomic_fetch_nand_1(volatile char *, char, int);
+signed char __atomic_fetch_nand  (volatile signed char *, signed char, int);
+signed char __atomic_fetch_nand_1(volatile signed char *, signed char, int);
+unsigned char __atomic_fetch_nand  (volatile unsigned char *, unsigned char, int);
+unsigned char __atomic_fetch_nand_1(volatile unsigned char *, unsigned char, int);
+signed short __atomic_fetch_nand  (volatile signed short *, signed short, int);
+signed short __atomic_fetch_nand_2(volatile signed short *, signed short, int);
+unsigned short __atomic_fetch_nand  (volatile unsigned short *, unsigned short, int);
+unsigned short __atomic_fetch_nand_2(volatile unsigned short *, unsigned short, int);
+signed int __atomic_fetch_nand  (volatile signed int *, signed int, int);
+signed int __atomic_fetch_nand_4(volatile signed int *, signed int, int);
+unsigned int __atomic_fetch_nand  (volatile unsigned int *, unsigned int, int);
+unsigned int __atomic_fetch_nand_4(volatile unsigned int *, unsigned int, int);
+signed long long int __atomic_fetch_nand  (volatile signed long long int *, signed long long int, int);
+signed long long int __atomic_fetch_nand_8(volatile signed long long int *, signed long long int, int);
+unsigned long long int __atomic_fetch_nand  (volatile unsigned long long int *, unsigned long long int, int);
+unsigned long long int __atomic_fetch_nand_8(volatile unsigned long long int *, unsigned long long int, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_fetch_nand   (volatile signed __int128 *, signed __int128, int);
+signed __int128 __atomic_fetch_nand_16(volatile signed __int128 *, signed __int128, int);
+unsigned __int128 __atomic_fetch_nand   (volatile unsigned __int128 *, unsigned __int128, int);
+unsigned __int128 __atomic_fetch_nand_16(volatile unsigned __int128 *, unsigned __int128, int);
+#endif
+
+char __atomic_fetch_xor  (volatile char *, char, int);
+char __atomic_fetch_xor_1(volatile char *, char, int);
+signed char __atomic_fetch_xor  (volatile signed char *, signed char, int);
+signed char __atomic_fetch_xor_1(volatile signed char *, signed char, int);
+unsigned char __atomic_fetch_xor  (volatile unsigned char *, unsigned char, int);
+unsigned char __atomic_fetch_xor_1(volatile unsigned char *, unsigned char, int);
+signed short __atomic_fetch_xor  (volatile signed short *, signed short, int);
+signed short __atomic_fetch_xor_2(volatile signed short *, signed short, int);
+unsigned short __atomic_fetch_xor  (volatile unsigned short *, unsigned short, int);
+unsigned short __atomic_fetch_xor_2(volatile unsigned short *, unsigned short, int);
+signed int __atomic_fetch_xor  (volatile signed int *, signed int, int);
+signed int __atomic_fetch_xor_4(volatile signed int *, signed int, int);
+unsigned int __atomic_fetch_xor  (volatile unsigned int *, unsigned int, int);
+unsigned int __atomic_fetch_xor_4(volatile unsigned int *, unsigned int, int);
+signed long long int __atomic_fetch_xor  (volatile signed long long int *, signed long long int, int);
+signed long long int __atomic_fetch_xor_8(volatile signed long long int *, signed long long int, int);
+unsigned long long int __atomic_fetch_xor  (volatile unsigned long long int *, unsigned long long int, int);
+unsigned long long int __atomic_fetch_xor_8(volatile unsigned long long int *, unsigned long long int, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_fetch_xor   (volatile signed __int128 *, signed __int128, int);
+signed __int128 __atomic_fetch_xor_16(volatile signed __int128 *, signed __int128, int);
+unsigned __int128 __atomic_fetch_xor   (volatile unsigned __int128 *, unsigned __int128, int);
+unsigned __int128 __atomic_fetch_xor_16(volatile unsigned __int128 *, unsigned __int128, int);
+#endif
+
+char __atomic_fetch_or  (volatile char *, char, int);
+char __atomic_fetch_or_1(volatile char *, char, int);
+signed char __atomic_fetch_or  (volatile signed char *, signed char, int);
+signed char __atomic_fetch_or_1(volatile signed char *, signed char, int);
+unsigned char __atomic_fetch_or  (volatile unsigned char *, unsigned char, int);
+unsigned char __atomic_fetch_or_1(volatile unsigned char *, unsigned char, int);
+signed short __atomic_fetch_or  (volatile signed short *, signed short, int);
+signed short __atomic_fetch_or_2(volatile signed short *, signed short, int);
+unsigned short __atomic_fetch_or  (volatile unsigned short *, unsigned short, int);
+unsigned short __atomic_fetch_or_2(volatile unsigned short *, unsigned short, int);
+signed int __atomic_fetch_or  (volatile signed int *, signed int, int);
+signed int __atomic_fetch_or_4(volatile signed int *, signed int, int);
+unsigned int __atomic_fetch_or  (volatile unsigned int *, unsigned int, int);
+unsigned int __atomic_fetch_or_4(volatile unsigned int *, unsigned int, int);
+signed long long int __atomic_fetch_or  (volatile signed long long int *, signed long long int, int);
+signed long long int __atomic_fetch_or_8(volatile signed long long int *, signed long long int, int);
+unsigned long long int __atomic_fetch_or  (volatile unsigned long long int *, unsigned long long int, int);
+unsigned long long int __atomic_fetch_or_8(volatile unsigned long long int *, unsigned long long int, int);
+#if defined(__SIZEOF_INT128__)
+signed __int128 __atomic_fetch_or   (volatile signed __int128 *, signed __int128, int);
+signed __int128 __atomic_fetch_or_16(volatile signed __int128 *, signed __int128, int);
+unsigned __int128 __atomic_fetch_or   (volatile unsigned __int128 *, unsigned __int128, int);
+unsigned __int128 __atomic_fetch_or_16(volatile unsigned __int128 *, unsigned __int128, int);
+#endif
+
+_Bool __atomic_always_lock_free(unsigned long, const volatile void *);
+_Bool __atomic_is_lock_free(unsigned long, const volatile void *);
+
+void __atomic_thread_fence (int);
+void __atomic_signal_fence (int);
+void __atomic_feraiseexcept(int);
Index: libcfa/prelude/sync-builtins.def
===================================================================
--- libcfa/prelude/sync-builtins.def	(revision bf71cfdb7285490eee552b461158846f626cc52f)
+++ libcfa/prelude/sync-builtins.def	(revision bf71cfdb7285490eee552b461158846f626cc52f)
@@ -0,0 +1,614 @@
+/* This file contains the definitions and documentation for the
+   synchronization builtins used in the GNU compiler.
+   Copyright (C) 2005-2016 Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 3, or (at your option) any later
+version.
+
+GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+
+/* Before including this file, you should define a macro:
+
+     DEF_SYNC_BUILTIN (ENUM, NAME, TYPE, ATTRS)
+
+   See builtins.def for details.  */
+
+/* Synchronization Primitives.  The "_N" version is the one that the user
+   is supposed to be using.  It's overloaded, and is resolved to one of the
+   "_1" through "_16" versions, plus some extra casts.  */
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_N, "__sync_fetch_and_add",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_1, "__sync_fetch_and_add_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_2, "__sync_fetch_and_add_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_4, "__sync_fetch_and_add_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_8, "__sync_fetch_and_add_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_ADD_16, "__sync_fetch_and_add_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_N, "__sync_fetch_and_sub",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_1, "__sync_fetch_and_sub_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_2, "__sync_fetch_and_sub_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_4, "__sync_fetch_and_sub_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_8, "__sync_fetch_and_sub_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_SUB_16, "__sync_fetch_and_sub_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_N, "__sync_fetch_and_or",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_1, "__sync_fetch_and_or_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_2, "__sync_fetch_and_or_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_4, "__sync_fetch_and_or_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_8, "__sync_fetch_and_or_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_OR_16, "__sync_fetch_and_or_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_N, "__sync_fetch_and_and",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_1, "__sync_fetch_and_and_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_2, "__sync_fetch_and_and_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_4, "__sync_fetch_and_and_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_8, "__sync_fetch_and_and_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_AND_16, "__sync_fetch_and_and_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_N, "__sync_fetch_and_xor",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_1, "__sync_fetch_and_xor_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_2, "__sync_fetch_and_xor_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_4, "__sync_fetch_and_xor_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_8, "__sync_fetch_and_xor_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_XOR_16, "__sync_fetch_and_xor_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_N, "__sync_fetch_and_nand",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_1, "__sync_fetch_and_nand_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_2, "__sync_fetch_and_nand_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_4, "__sync_fetch_and_nand_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_8, "__sync_fetch_and_nand_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_FETCH_AND_NAND_16, "__sync_fetch_and_nand_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_N, "__sync_add_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_1, "__sync_add_and_fetch_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_2, "__sync_add_and_fetch_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_4, "__sync_add_and_fetch_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_8, "__sync_add_and_fetch_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_ADD_AND_FETCH_16, "__sync_add_and_fetch_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_N, "__sync_sub_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_1, "__sync_sub_and_fetch_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_2, "__sync_sub_and_fetch_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_4, "__sync_sub_and_fetch_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_8, "__sync_sub_and_fetch_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SUB_AND_FETCH_16, "__sync_sub_and_fetch_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_N, "__sync_or_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_1, "__sync_or_and_fetch_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_2, "__sync_or_and_fetch_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_4, "__sync_or_and_fetch_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_8, "__sync_or_and_fetch_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_OR_AND_FETCH_16, "__sync_or_and_fetch_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_N, "__sync_and_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_1, "__sync_and_and_fetch_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_2, "__sync_and_and_fetch_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_4, "__sync_and_and_fetch_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_8, "__sync_and_and_fetch_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_AND_AND_FETCH_16, "__sync_and_and_fetch_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_N, "__sync_xor_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_1, "__sync_xor_and_fetch_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_2, "__sync_xor_and_fetch_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_4, "__sync_xor_and_fetch_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_8, "__sync_xor_and_fetch_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_XOR_AND_FETCH_16, "__sync_xor_and_fetch_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_N, "__sync_nand_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_1, "__sync_nand_and_fetch_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_2, "__sync_nand_and_fetch_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_4, "__sync_nand_and_fetch_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_8, "__sync_nand_and_fetch_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_NAND_AND_FETCH_16, "__sync_nand_and_fetch_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_N,
+		  "__sync_bool_compare_and_swap",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1,
+		  "__sync_bool_compare_and_swap_1",
+		  BT_FN_BOOL_VPTR_I1_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2,
+		  "__sync_bool_compare_and_swap_2",
+		  BT_FN_BOOL_VPTR_I2_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4,
+		  "__sync_bool_compare_and_swap_4",
+		  BT_FN_BOOL_VPTR_I4_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8,
+		  "__sync_bool_compare_and_swap_8",
+		  BT_FN_BOOL_VPTR_I8_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16,
+		  "__sync_bool_compare_and_swap_16",
+		  BT_FN_BOOL_VPTR_I16_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_N,
+		  "__sync_val_compare_and_swap",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1,
+		  "__sync_val_compare_and_swap_1",
+		  BT_FN_I1_VPTR_I1_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2,
+		  "__sync_val_compare_and_swap_2",
+		  BT_FN_I2_VPTR_I2_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4,
+		  "__sync_val_compare_and_swap_4",
+		  BT_FN_I4_VPTR_I4_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8,
+		  "__sync_val_compare_and_swap_8",
+		  BT_FN_I8_VPTR_I8_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_16,
+		  "__sync_val_compare_and_swap_16",
+		  BT_FN_I16_VPTR_I16_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_N,
+		  "__sync_lock_test_and_set",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_1,
+		  "__sync_lock_test_and_set_1",
+		  BT_FN_I1_VPTR_I1, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_2,
+		  "__sync_lock_test_and_set_2",
+		  BT_FN_I2_VPTR_I2, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_4,
+		  "__sync_lock_test_and_set_4",
+		  BT_FN_I4_VPTR_I4, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_8,
+		  "__sync_lock_test_and_set_8",
+		  BT_FN_I8_VPTR_I8, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_TEST_AND_SET_16,
+		  "__sync_lock_test_and_set_16",
+		  BT_FN_I16_VPTR_I16, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_N, "__sync_lock_release",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_1, "__sync_lock_release_1",
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_2, "__sync_lock_release_2",
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_4, "__sync_lock_release_4",
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_8, "__sync_lock_release_8",
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_LOCK_RELEASE_16, "__sync_lock_release_16",
+		  BT_FN_VOID_VPTR, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_SYNC_SYNCHRONIZE, "__sync_synchronize",
+		  BT_FN_VOID, ATTR_NOTHROWCALL_LEAF_LIST)
+
+/* __sync* builtins for the C++ memory model.  */
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_TEST_AND_SET, "__atomic_test_and_set",
+		  BT_FN_BOOL_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_CLEAR, "__atomic_clear", BT_FN_VOID_VPTR_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE,
+		  "__atomic_exchange",
+		  BT_FN_VOID_SIZE_VPTR_PTR_PTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_N,
+		  "__atomic_exchange_n",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_1,
+		  "__atomic_exchange_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_2,
+		  "__atomic_exchange_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_4,
+		  "__atomic_exchange_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_8,
+		  "__atomic_exchange_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_EXCHANGE_16,
+		  "__atomic_exchange_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD,
+		  "__atomic_load",
+		  BT_FN_VOID_SIZE_CONST_VPTR_PTR_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_N,
+		  "__atomic_load_n",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_1,
+		  "__atomic_load_1",
+		  BT_FN_I1_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_2,
+		  "__atomic_load_2",
+		  BT_FN_I2_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_4,
+		  "__atomic_load_4",
+		  BT_FN_I4_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_8,
+		  "__atomic_load_8",
+		  BT_FN_I8_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_LOAD_16,
+		  "__atomic_load_16",
+		  BT_FN_I16_CONST_VPTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE,
+		  "__atomic_compare_exchange",
+		  BT_FN_BOOL_SIZE_VPTR_PTR_PTR_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_N,
+		  "__atomic_compare_exchange_n",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1,
+		  "__atomic_compare_exchange_1",
+		  BT_FN_BOOL_VPTR_PTR_I1_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2,
+		  "__atomic_compare_exchange_2",
+		  BT_FN_BOOL_VPTR_PTR_I2_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4,
+		  "__atomic_compare_exchange_4",
+		  BT_FN_BOOL_VPTR_PTR_I4_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8,
+		  "__atomic_compare_exchange_8",
+		  BT_FN_BOOL_VPTR_PTR_I8_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16,
+		  "__atomic_compare_exchange_16",
+		  BT_FN_BOOL_VPTR_PTR_I16_BOOL_INT_INT,
+		  ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE,
+		  "__atomic_store",
+		  BT_FN_VOID_SIZE_VPTR_PTR_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_N,
+		  "__atomic_store_n",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_1,
+		  "__atomic_store_1",
+		  BT_FN_VOID_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_2,
+		  "__atomic_store_2",
+		  BT_FN_VOID_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_4,
+		  "__atomic_store_4",
+		  BT_FN_VOID_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_8,
+		  "__atomic_store_8",
+		  BT_FN_VOID_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_STORE_16,
+		  "__atomic_store_16",
+		  BT_FN_VOID_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_N,
+		  "__atomic_add_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_1,
+		  "__atomic_add_fetch_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_2,
+		  "__atomic_add_fetch_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_4,
+		  "__atomic_add_fetch_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_8,
+		  "__atomic_add_fetch_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ADD_FETCH_16,
+		  "__atomic_add_fetch_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_N,
+		  "__atomic_sub_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_1,
+		  "__atomic_sub_fetch_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_2,
+		  "__atomic_sub_fetch_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_4,
+		  "__atomic_sub_fetch_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_8,
+		  "__atomic_sub_fetch_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SUB_FETCH_16,
+		  "__atomic_sub_fetch_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_N,
+		  "__atomic_and_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_1,
+		  "__atomic_and_fetch_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_2,
+		  "__atomic_and_fetch_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_4,
+		  "__atomic_and_fetch_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_8,
+		  "__atomic_and_fetch_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_AND_FETCH_16,
+		  "__atomic_and_fetch_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_N,
+		  "__atomic_nand_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_1,
+		  "__atomic_nand_fetch_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_2,
+		  "__atomic_nand_fetch_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_4,
+		  "__atomic_nand_fetch_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_8,
+		  "__atomic_nand_fetch_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_NAND_FETCH_16,
+		  "__atomic_nand_fetch_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_N,
+		  "__atomic_xor_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_1,
+		  "__atomic_xor_fetch_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_2,
+		  "__atomic_xor_fetch_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_4,
+		  "__atomic_xor_fetch_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_8,
+		  "__atomic_xor_fetch_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_XOR_FETCH_16,
+		  "__atomic_xor_fetch_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_N,
+		  "__atomic_or_fetch",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_1,
+		  "__atomic_or_fetch_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_2,
+		  "__atomic_or_fetch_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_4,
+		  "__atomic_or_fetch_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_8,
+		  "__atomic_or_fetch_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_OR_FETCH_16,
+		  "__atomic_or_fetch_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_N,
+		  "__atomic_fetch_add",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_1,
+		  "__atomic_fetch_add_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_2,
+		  "__atomic_fetch_add_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_4,
+		  "__atomic_fetch_add_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_8,
+		  "__atomic_fetch_add_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_ADD_16,
+		  "__atomic_fetch_add_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_N,
+		  "__atomic_fetch_sub",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_1,
+		  "__atomic_fetch_sub_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_2,
+		  "__atomic_fetch_sub_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_4,
+		  "__atomic_fetch_sub_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_8,
+		  "__atomic_fetch_sub_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_SUB_16,
+		  "__atomic_fetch_sub_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_N,
+		  "__atomic_fetch_and",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_1,
+		  "__atomic_fetch_and_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_2,
+		  "__atomic_fetch_and_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_4,
+		  "__atomic_fetch_and_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_8,
+		  "__atomic_fetch_and_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_AND_16,
+		  "__atomic_fetch_and_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_N,
+		  "__atomic_fetch_nand",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_1,
+		  "__atomic_fetch_nand_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_2,
+		  "__atomic_fetch_nand_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_4,
+		  "__atomic_fetch_nand_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_8,
+		  "__atomic_fetch_nand_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_NAND_16,
+		  "__atomic_fetch_nand_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_N,
+		  "__atomic_fetch_xor",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_1,
+		  "__atomic_fetch_xor_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_2,
+		  "__atomic_fetch_xor_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_4,
+		  "__atomic_fetch_xor_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_8,
+		  "__atomic_fetch_xor_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_XOR_16,
+		  "__atomic_fetch_xor_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_N,
+		  "__atomic_fetch_or",
+		  BT_FN_VOID_VAR, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_1,
+		  "__atomic_fetch_or_1",
+		  BT_FN_I1_VPTR_I1_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_2,
+		  "__atomic_fetch_or_2",
+		  BT_FN_I2_VPTR_I2_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_4,
+		  "__atomic_fetch_or_4",
+		  BT_FN_I4_VPTR_I4_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_8,
+		  "__atomic_fetch_or_8",
+		  BT_FN_I8_VPTR_I8_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FETCH_OR_16,
+		  "__atomic_fetch_or_16",
+		  BT_FN_I16_VPTR_I16_INT, ATTR_NOTHROWCALL_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_ALWAYS_LOCK_FREE,
+		  "__atomic_always_lock_free",
+		  BT_FN_BOOL_SIZE_CONST_VPTR, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_IS_LOCK_FREE,
+		  "__atomic_is_lock_free",
+		  BT_FN_BOOL_SIZE_CONST_VPTR, ATTR_CONST_NOTHROW_LEAF_LIST)
+
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_THREAD_FENCE,
+		  "__atomic_thread_fence",
+		  BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST)
+
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_SIGNAL_FENCE,
+		  "__atomic_signal_fence",
+		  BT_FN_VOID_INT, ATTR_NOTHROW_LEAF_LIST)
+
+/* This one is actually a function in libatomic and not expected to be
+   inlined, declared here for convenience of targets generating calls
+   to it.  */
+DEF_SYNC_BUILTIN (BUILT_IN_ATOMIC_FERAISEEXCEPT,
+		  "__atomic_feraiseexcept",
+		  BT_FN_VOID_INT, ATTR_LEAF_LIST)
