162306a36Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci#
362306a36Sopenharmony_ci# Makefile for alpha-specific library files..
462306a36Sopenharmony_ci#
562306a36Sopenharmony_ci
662306a36Sopenharmony_ciasflags-y := $(KBUILD_CFLAGS)
762306a36Sopenharmony_ciccflags-y := -Werror
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci# Many of these routines have implementations tuned for ev6.
1062306a36Sopenharmony_ci# Choose them iff we're targeting ev6 specifically.
1162306a36Sopenharmony_ciev6-$(CONFIG_ALPHA_EV6) := ev6-
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci# Several make use of the cttz instruction introduced in ev67.
1462306a36Sopenharmony_ciev67-$(CONFIG_ALPHA_EV67) := ev67-
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cilib-y =	__divqu.o __remqu.o __divlu.o __remlu.o \
1762306a36Sopenharmony_ci	udiv-qrnnd.o \
1862306a36Sopenharmony_ci	udelay.o \
1962306a36Sopenharmony_ci	$(ev6-y)memset.o \
2062306a36Sopenharmony_ci	$(ev6-y)memcpy.o \
2162306a36Sopenharmony_ci	memmove.o \
2262306a36Sopenharmony_ci	checksum.o \
2362306a36Sopenharmony_ci	csum_partial_copy.o \
2462306a36Sopenharmony_ci	$(ev67-y)strlen.o \
2562306a36Sopenharmony_ci	stycpy.o \
2662306a36Sopenharmony_ci	styncpy.o \
2762306a36Sopenharmony_ci	$(ev67-y)strchr.o \
2862306a36Sopenharmony_ci	$(ev67-y)strrchr.o \
2962306a36Sopenharmony_ci	$(ev6-y)memchr.o \
3062306a36Sopenharmony_ci	$(ev6-y)copy_user.o \
3162306a36Sopenharmony_ci	$(ev6-y)clear_user.o \
3262306a36Sopenharmony_ci	$(ev6-y)csum_ipv6_magic.o \
3362306a36Sopenharmony_ci	$(ev6-y)clear_page.o \
3462306a36Sopenharmony_ci	$(ev6-y)copy_page.o \
3562306a36Sopenharmony_ci	fpreg.o \
3662306a36Sopenharmony_ci	callback_srm.o srm_puts.o srm_printk.o \
3762306a36Sopenharmony_ci	fls.o
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci# The division routines are built from single source, with different defines.
4062306a36Sopenharmony_ciAFLAGS___divqu.o = -DDIV
4162306a36Sopenharmony_ciAFLAGS___remqu.o =       -DREM
4262306a36Sopenharmony_ciAFLAGS___divlu.o = -DDIV       -DINTSIZE
4362306a36Sopenharmony_ciAFLAGS___remlu.o =       -DREM -DINTSIZE
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci$(addprefix $(obj)/,__divqu.o __remqu.o __divlu.o __remlu.o): \
4662306a36Sopenharmony_ci						$(src)/$(ev6-y)divide.S FORCE
4762306a36Sopenharmony_ci	$(call if_changed_rule,as_o_S)
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci# There are direct branches between {str*cpy,str*cat} and stx*cpy.
5062306a36Sopenharmony_ci# Ensure the branches are within range by merging these objects.
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciLDFLAGS_stycpy.o := -r
5362306a36Sopenharmony_ciLDFLAGS_styncpy.o := -r
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci$(obj)/stycpy.o: $(obj)/strcpy.o $(obj)/$(ev67-y)strcat.o \
5662306a36Sopenharmony_ci		 $(obj)/$(ev6-y)stxcpy.o FORCE
5762306a36Sopenharmony_ci	$(call if_changed,ld)
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci$(obj)/styncpy.o: $(obj)/strncpy.o $(obj)/$(ev67-y)strncat.o \
6062306a36Sopenharmony_ci		 $(obj)/$(ev6-y)stxncpy.o FORCE
6162306a36Sopenharmony_ci	$(call if_changed,ld)
62