12d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# These are the functions which clang needs when it is targeting a previous
2868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# version of the OS. The issue is that the backend may use functions which were
3868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# not present in the libgcc that shipped on the platform. In such cases, we link
4868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# with a version of the library which contains private_extern definitions of all
5868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# the extra functions which might be referenced.
6868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
7868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverDescription := Static runtime libraries for embedded clang/Darwin
8868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
92d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# A function that ensures we don't try to build for architectures that we
102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines# don't have working toolchains for.
112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesCheckArches = \
122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines  $(shell \
132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    result=""; \
142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    for arch in $(1); do \
152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      if $(CC) -arch $$arch -c \
162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	  -integrated-as \
172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	  $(ProjSrcRoot)/make/platform/clang_macho_embedded_test_input.c \
182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	  -o /dev/null > /dev/null 2> /dev/null; then \
192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines        result="$$result$$arch "; \
202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      else \
212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	printf 1>&2 \
222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	  "warning: clang_macho_embedded.mk: dropping arch '$$arch' from lib '$(2)'\n"; \
232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines      fi; \
242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    done; \
252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines    echo $$result)
262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines
27868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverXCRun = \
28868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover  $(shell \
29868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover    result=`xcrun -find $(1) 2> /dev/null`; \
30868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover    if [ "$$?" != "0" ]; then result=$(1); fi; \
31868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover    echo $$result)
32868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
33868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover###
34868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
35868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCC       := $(call XCRun,clang)
36868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverAR       := $(call XCRun,ar)
37868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverRANLIB   := $(call XCRun,ranlib)
38868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverSTRIP    := $(call XCRun,strip)
39868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverLIPO     := $(call XCRun,lipo)
40868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverDSYMUTIL := $(call XCRun,dsymutil)
41868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
42868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverConfigs :=
43868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverUniversalArchs :=
44868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
45868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# Soft-float version of the runtime. No floating-point instructions will be used
46868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# and the ABI (out of necessity) passes floating values in normal registers:
47868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# non-VFP variant of the AAPCS.
482d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesUniversalArchs.soft_static := $(call CheckArches,armv6m armv7m armv7em armv7,soft_static)
492d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesConfigs += $(if $(UniversalArchs.soft_static),soft_static)
50868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
51868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# Hard-float version of the runtime. On ARM VFP instructions and registers are
52868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# allowed, and floating point values get passed in them. VFP variant of the
53868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# AAPCS.
542d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesUniversalArchs.hard_static := $(call CheckArches,armv7em armv7 i386 x86_64,hard_static)
552d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesConfigs += $(if $(UniversalArchs.hard_static),hard_static)
56868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
572d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesUniversalArchs.soft_pic := $(call CheckArches,armv6m armv7m armv7em armv7,soft_pic)
582d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesConfigs += $(if $(UniversalArchs.soft_pic),soft_pic)
59868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
602d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesUniversalArchs.hard_pic := $(call CheckArches,armv7em armv7 i386 x86_64,hard_pic)
612d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesConfigs += $(if $(UniversalArchs.hard_pic),hard_pic)
62868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
63868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS := -Wall -Werror -Oz -fomit-frame-pointer -ffreestanding
64868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
65868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverPIC_CFLAGS := -fPIC
66868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverSTATIC_CFLAGS := -static
67868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
68868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS_SOFT := -mfloat-abi=soft
69868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS_HARD := -mfloat-abi=hard
70868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
71868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS_ARMV7 := -target thumbv7-apple-darwin-eabi
72868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS_I386  := -march=pentium
73868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
74868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS.soft_static := $(CFLAGS) $(STATIC_CFLAGS) $(CFLAGS_SOFT)
75868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS.hard_static := $(CFLAGS) $(STATIC_CFLAGS) $(CFLAGS_HARD)
76868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS.soft_pic    := $(CFLAGS) $(PIC_CFLAGS) $(CFLAGS_SOFT)
77868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS.hard_pic    := $(CFLAGS) $(PIC_CFLAGS) $(CFLAGS_HARD)
78868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
79868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS.soft_static.armv7 := $(CFLAGS.soft_static) $(CFLAGS_ARMV7)
80868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS.hard_static.armv7 := $(CFLAGS.hard_static) $(CFLAGS_ARMV7)
81868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS.soft_pic.armv7    := $(CFLAGS.soft_pic) $(CFLAGS_ARMV7)
82868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS.hard_pic.armv7    := $(CFLAGS.hard_pic) $(CFLAGS_ARMV7)
83868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
84868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# x86 platforms ignore -mfloat-abi options and complain about doing so. Despite
85868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# this they're hard-float.
86868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS.hard_static.i386   := $(CFLAGS) $(STATIC_CFLAGS) $(CFLAGS_I386)
87868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS.hard_pic.i386      := $(CFLAGS) $(PIC_CFLAGS) $(CFLAGS_I386)
88868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS.hard_static.x86_64 := $(CFLAGS) $(STATIC_CFLAGS)
89868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCFLAGS.hard_pic.x86_64    := $(CFLAGS) $(PIC_CFLAGS)
90868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
91868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# Functions not wanted:
92868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover#   + eprintf is obsolete anyway
93868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover#   + *vfp: designed for Thumb1 CPUs with VFPv2
94868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
95868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverCOMMON_FUNCTIONS := \
96868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	absvdi2 \
97868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	absvsi2 \
98868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	addvdi3 \
99868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	addvsi3 \
100868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	ashldi3 \
101868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	ashrdi3 \
102868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	bswapdi2 \
103868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	bswapsi2 \
104868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	clzdi2 \
105868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	clzsi2 \
106868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	cmpdi2 \
107868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	ctzdi2 \
108868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	ctzsi2 \
109868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	divdc3 \
110868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	divdi3 \
111868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	divsc3 \
112868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	divmodsi4 \
113868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	udivmodsi4 \
114868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	do_global_dtors \
115868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	ffsdi2 \
116868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	fixdfdi \
117868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	fixsfdi \
118868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	fixunsdfdi \
119868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	fixunsdfsi \
120868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	fixunssfdi \
121868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	fixunssfsi \
122868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	floatdidf \
123868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	floatdisf \
124868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	floatundidf \
125868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	floatundisf \
126868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	gcc_bcmp \
127868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	lshrdi3 \
128868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	moddi3 \
129868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	muldc3 \
130868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	muldi3 \
131868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	mulsc3 \
132868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	mulvdi3 \
133868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	mulvsi3 \
134868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	negdi2 \
135868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	negvdi2 \
136868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	negvsi2 \
137868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	paritydi2 \
138868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	paritysi2 \
139868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	popcountdi2 \
140868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	popcountsi2 \
141868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	powidf2 \
142868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	powisf2 \
143868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	subvdi3 \
144868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	subvsi3 \
145868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	ucmpdi2 \
146868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	udiv_w_sdiv \
147868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	udivdi3 \
148868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	udivmoddi4 \
149868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	umoddi3 \
150868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	adddf3 \
151868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	addsf3 \
152868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	cmpdf2 \
153868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	cmpsf2 \
154868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	div0 \
155868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	divdf3 \
156868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	divsf3 \
157868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	divsi3 \
158868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	extendsfdf2 \
159868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	ffssi2 \
160868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	fixdfsi \
161868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	fixsfsi \
162868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	floatsidf \
163868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	floatsisf \
164868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	floatunsidf \
165868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	floatunsisf \
166868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	comparedf2 \
167868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	comparesf2 \
168868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	modsi3 \
169868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	muldf3 \
170868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	mulsf3 \
171868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	negdf2 \
172868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	negsf2 \
173868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	subdf3 \
174868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	subsf3 \
175868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	truncdfsf2 \
176868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	udivsi3 \
177868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	umodsi3 \
178868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	unorddf2 \
179868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	unordsf2
180868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
181868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverARM_FUNCTIONS := \
182868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_cdcmpeq \
183868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_cdrcmple \
184868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_cfcmpeq \
185868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_cfrcmple \
186868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_dcmpeq \
187868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_dcmpge \
188868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_dcmpgt \
189868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_dcmple \
190868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_dcmplt \
191868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_drsub \
192868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_fcmpeq \
193868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_fcmpge \
194868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_fcmpgt \
195868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_fcmple \
196868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_fcmplt \
197868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_frsub \
198868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_idivmod \
199868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_uidivmod \
200868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
201868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# ARM Assembly implementation which requires Thumb2 (i.e. won't work on v6M).
202868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverTHUMB2_FUNCTIONS := \
203868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	switch16 \
204868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	switch32 \
205868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	switch8 \
206868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	switchu8 \
2072d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_add_4 \
2082d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_sub_4 \
2092d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_and_4 \
2102d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_or_4 \
2112d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_xor_4 \
2122d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_nand_4 \
2132d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_max_4 \
2142d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_umax_4 \
2152d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_min_4 \
2162d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_umin_4 \
2172d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_add_8 \
2182d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_sub_8 \
2192d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_and_8 \
2202d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_or_8 \
2212d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_xor_8 \
2222d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_nand_8 \
2232d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_max_8 \
2242d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_umax_8 \
2252d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_min_8 \
2262d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines	sync_fetch_and_umin_8
227868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
228868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverI386_FUNCTIONS :=  \
229868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	i686.get_pc_thunk.eax \
230868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	i686.get_pc_thunk.ebp \
231868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	i686.get_pc_thunk.ebx \
232868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	i686.get_pc_thunk.ecx \
233868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	i686.get_pc_thunk.edi \
234868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	i686.get_pc_thunk.edx \
235868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	i686.get_pc_thunk.esi
236868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
237868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# FIXME: Currently, compiler-rt is missing implementations for a number of the
238868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover# functions. Filter them out for now.
239868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverMISSING_FUNCTIONS := \
240868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	cmpdf2 cmpsf2 div0 \
241868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	ffssi2 \
242868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	udiv_w_sdiv unorddf2 unordsf2 bswapdi2 \
243868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	bswapsi2 \
244868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	gcc_bcmp \
245868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	do_global_dtors \
246868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	i686.get_pc_thunk.eax i686.get_pc_thunk.ebp i686.get_pc_thunk.ebx \
247868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	i686.get_pc_thunk.ecx i686.get_pc_thunk.edi i686.get_pc_thunk.edx \
248868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	i686.get_pc_thunk.esi \
249868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_cdcmpeq aeabi_cdrcmple aeabi_cfcmpeq aeabi_cfrcmple aeabi_dcmpeq \
250868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_dcmpge aeabi_dcmpgt aeabi_dcmple aeabi_dcmplt aeabi_drsub \
251868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_fcmpeq \ aeabi_fcmpge aeabi_fcmpgt aeabi_fcmple aeabi_fcmplt \
252868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	aeabi_frsub aeabi_idivmod aeabi_uidivmod
253868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
254868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS_ARMV6M  := $(COMMON_FUNCTIONS) $(ARM_FUNCTIONS)
255868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS_ARM_ALL := $(COMMON_FUNCTIONS) $(ARM_FUNCTIONS) $(THUMB2_FUNCTIONS)
256868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS_I386    := $(COMMON_FUNCTIONS) $(I386_FUNCTIONS)
257868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS_X86_64  := $(COMMON_FUNCTIONS)
258868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
259868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS_ARMV6M := \
260868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	$(filter-out $(MISSING_FUNCTIONS),$(FUNCTIONS_ARMV6M))
261868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS_ARM_ALL := \
262868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	$(filter-out $(MISSING_FUNCTIONS),$(FUNCTIONS_ARM_ALL))
263868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS_I386 := \
264868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	$(filter-out $(MISSING_FUNCTIONS),$(FUNCTIONS_I386))
265868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS_X86_64 := \
266868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover	$(filter-out $(MISSING_FUNCTIONS),$(FUNCTIONS_X86_64))
267868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
268868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.soft_static.armv6m := $(FUNCTIONS_ARMV6M)
269868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.soft_pic.armv6m    := $(FUNCTIONS_ARMV6M)
270868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
271868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.soft_static.armv7m := $(FUNCTIONS_ARM_ALL)
272868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.soft_pic.armv7m    := $(FUNCTIONS_ARM_ALL)
273868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
274868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.soft_static.armv7em := $(FUNCTIONS_ARM_ALL)
275868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.hard_static.armv7em := $(FUNCTIONS_ARM_ALL)
276868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.soft_pic.armv7em    := $(FUNCTIONS_ARM_ALL)
277868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.hard_pic.armv7em    := $(FUNCTIONS_ARM_ALL)
278868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
279868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.soft_static.armv7 := $(FUNCTIONS_ARM_ALL)
280868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.hard_static.armv7 := $(FUNCTIONS_ARM_ALL)
281868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.soft_pic.armv7    := $(FUNCTIONS_ARM_ALL)
282868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.hard_pic.armv7    := $(FUNCTIONS_ARM_ALL)
283868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
284868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.hard_static.i386 := $(FUNCTIONS_I386)
285868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.hard_pic.i386    := $(FUNCTIONS_I386)
286868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim Northover
287868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.hard_static.x86_64 := $(FUNCTIONS_X86_64)
288868082b4f9eb6fd7f2f9c9cc36002afbfdf17802Tim NorthoverFUNCTIONS.hard_pic.x86_64    := $(FUNCTIONS_X86_64)
289