Home | History | Annotate | Line # | Download | only in rs6000
      1      1.1  mrg # Support for adding __float128 to the powerpc.
      2      1.1  mrg 
      3      1.1  mrg # The standard 128-bit floating point support functions are TFmode.  Most
      4      1.1  mrg # PowerPC targets use a long double format that has a pair of doubles to give
      5      1.1  mrg # you more precision, but no extra expoenent range.  This long double format is
      6      1.1  mrg # mostly compatible with the format used by the IBM XL compilers.  Some of the
      7      1.1  mrg # names used by the IBM double-double format use TF in them, so we rename
      8      1.1  mrg # all of the functions provided for the new IEEE 128-bit support.
      9      1.1  mrg #
     10      1.1  mrg # We use the TF functions in soft-fp for 128-bit floating point support, using
     11      1.1  mrg # sed to transform the names in the files from TF names to KF names.
     12      1.1  mrg 
     13      1.1  mrg # Emulator functions from the soft-fp directory
     14      1.1  mrg fp128_softfp_funcs	= addkf3 subkf3 mulkf3 divkf3 negkf2 \
     15      1.1  mrg 			  unordkf2 eqkf2 gekf2 lekf2 \
     16      1.1  mrg 			  extendsfkf2 extenddfkf2 trunckfsf2 trunckfdf2 \
     17      1.1  mrg 			  fixkfsi fixkfdi fixunskfsi fixunskfdi \
     18      1.1  mrg 			  floatsikf floatdikf floatunsikf floatundikf
     19      1.1  mrg 
     20      1.1  mrg fp128_softfp_src	= $(addsuffix -sw.c,$(fp128_softfp_funcs))
     21      1.1  mrg fp128_softfp_static_obj	= $(addsuffix -sw$(objext),$(fp128_softfp_funcs))
     22      1.1  mrg fp128_softfp_shared_obj	= $(addsuffix -sw_s$(objext),$(fp128_softfp_funcs))
     23      1.1  mrg fp128_softfp_obj	= $(fp128_softfp_static_obj) $(fp128_softfp_shared_obj)
     24      1.1  mrg 
     25  1.1.1.5  mrg # Decimal <-> _Float128 conversions
     26  1.1.1.5  mrg fp128_dec_funcs		= _kf_to_sd _kf_to_dd _kf_to_td \
     27  1.1.1.5  mrg 			  _sd_to_kf _dd_to_kf _td_to_kf
     28  1.1.1.5  mrg 
     29  1.1.1.5  mrg # Decimal <-> __ibm128 conversions
     30  1.1.1.5  mrg ibm128_dec_funcs	= _tf_to_sd _tf_to_dd _tf_to_td \
     31  1.1.1.5  mrg 			  _sd_to_tf _dd_to_tf _td_to_tf
     32  1.1.1.5  mrg 
     33      1.1  mrg # New functions for software emulation
     34  1.1.1.5  mrg fp128_ppc_funcs		= floattikf-sw floatuntikf-sw \
     35  1.1.1.5  mrg 			  fixkfti-sw fixunskfti-sw \
     36      1.1  mrg 			  extendkftf2-sw trunctfkf2-sw \
     37  1.1.1.4  mrg 			  sfp-exceptions _mulkc3 _divkc3 _powikf2
     38      1.1  mrg 
     39  1.1.1.5  mrg ifeq ($(decimal_float),yes)
     40  1.1.1.5  mrg fp128_ppc_funcs        += $(fp128_dec_funcs)
     41  1.1.1.5  mrg endif
     42  1.1.1.5  mrg 
     43      1.1  mrg fp128_ppc_src		= $(addprefix $(srcdir)/config/rs6000/,$(addsuffix \
     44      1.1  mrg 				.c,$(fp128_ppc_funcs)))
     45      1.1  mrg fp128_ppc_static_obj	= $(addsuffix $(objext),$(fp128_ppc_funcs))
     46      1.1  mrg fp128_ppc_shared_obj	= $(addsuffix _s$(objext),$(fp128_ppc_funcs))
     47      1.1  mrg fp128_ppc_obj		= $(fp128_ppc_static_obj) $(fp128_ppc_shared_obj)
     48      1.1  mrg 
     49      1.1  mrg # All functions
     50      1.1  mrg fp128_funcs		= $(fp128_softfp_funcs) $(fp128_ppc_funcs) \
     51  1.1.1.5  mrg 			  $(fp128_hw_funcs) $(fp128_ifunc_funcs) \
     52  1.1.1.5  mrg 			  $(fp128_3_1_hw_funcs)
     53      1.1  mrg 
     54      1.1  mrg fp128_src		= $(fp128_softfp_src) $(fp128_ppc_src) \
     55  1.1.1.5  mrg 			  $(fp128_hw_src) $(fp128_ifunc_src) \
     56  1.1.1.5  mrg 			  $(fp128_3_1_hw_src)
     57      1.1  mrg 
     58      1.1  mrg fp128_obj		= $(fp128_softfp_obj) $(fp128_ppc_obj) \
     59  1.1.1.5  mrg 			  $(fp128_hw_obj) $(fp128_ifunc_obj) \
     60  1.1.1.5  mrg 			  $(fp128_3_1_hw_obj)
     61      1.1  mrg 
     62      1.1  mrg fp128_sed		= $(srcdir)/config/rs6000/float128-sed$(fp128_sed_hw)
     63      1.1  mrg fp128_dep		= $(fp128_sed) $(srcdir)/config/rs6000/t-float128
     64      1.1  mrg 
     65      1.1  mrg fp128_includes		= $(srcdir)/soft-fp/double.h \
     66      1.1  mrg 			  $(srcdir)/soft-fp/op-1.h \
     67      1.1  mrg 			  $(srcdir)/soft-fp/op-4.h \
     68      1.1  mrg 			  $(srcdir)/soft-fp/op-common.h \
     69      1.1  mrg 			  $(srcdir)/soft-fp/single.h \
     70      1.1  mrg 			  $(srcdir)/soft-fp/extended.h \
     71      1.1  mrg 			  $(srcdir)/soft-fp/op-2.h \
     72      1.1  mrg 			  $(srcdir)/soft-fp/op-8.h \
     73      1.1  mrg 			  $(srcdir)/soft-fp/quad.h \
     74      1.1  mrg 			  $(srcdir)/soft-fp/soft-fp.h
     75      1.1  mrg 
     76      1.1  mrg # Build the emulator without ISA 3.0 hardware support.
     77      1.1  mrg FP128_CFLAGS_SW		 = -Wno-type-limits -mvsx -mfloat128 \
     78  1.1.1.4  mrg 			   -mno-float128-hardware -mno-gnu-attribute \
     79      1.1  mrg 			   -I$(srcdir)/soft-fp \
     80      1.1  mrg 			   -I$(srcdir)/config/rs6000 \
     81      1.1  mrg 			   $(FLOAT128_HW_INSNS)
     82      1.1  mrg 
     83      1.1  mrg $(fp128_softfp_obj)	 : INTERNAL_CFLAGS += $(FP128_CFLAGS_SW)
     84      1.1  mrg $(fp128_ppc_obj)	 : INTERNAL_CFLAGS += $(FP128_CFLAGS_SW)
     85      1.1  mrg $(fp128_obj)		 : $(fp128_includes)
     86      1.1  mrg $(fp128_obj)		 : $(srcdir)/config/rs6000/quad-float128.h
     87      1.1  mrg 
     88  1.1.1.5  mrg # Force the TF mode to/from decimal functions to be compiled with IBM long
     89  1.1.1.5  mrg # double.  Add building the KF mode to/from decimal conversions with explict
     90  1.1.1.5  mrg # IEEE long double.
     91  1.1.1.5  mrg fp128_dec_objs		= $(addsuffix $(objext),$(fp128_dec_funcs)) \
     92  1.1.1.5  mrg 			  $(addsuffix _s$(objext),$(fp128_dec_funcs))
     93  1.1.1.5  mrg 
     94  1.1.1.5  mrg ibm128_dec_objs		= $(addsuffix $(objext),$(ibm128_dec_funcs)) \
     95  1.1.1.5  mrg 			  $(addsuffix _s$(objext),$(ibm128_dec_funcs))
     96  1.1.1.5  mrg 
     97  1.1.1.5  mrg FP128_CFLAGS_DECIMAL	= -mno-gnu-attribute -Wno-psabi -mabi=ieeelongdouble
     98  1.1.1.5  mrg IBM128_CFLAGS_DECIMAL	= -mno-gnu-attribute -Wno-psabi -mabi=ibmlongdouble
     99  1.1.1.5  mrg 
    100  1.1.1.5  mrg $(fp128_dec_objs)	: INTERNAL_CFLAGS += $(FP128_CFLAGS_DECIMAL)
    101  1.1.1.5  mrg $(ibm128_dec_objs)	: INTERNAL_CFLAGS += $(IBM128_CFLAGS_DECIMAL)
    102  1.1.1.5  mrg 
    103      1.1  mrg $(fp128_softfp_src) : $(srcdir)/soft-fp/$(subst -sw,,$(subst kf,tf,$@)) $(fp128_dep)
    104      1.1  mrg 	@src="$(srcdir)/soft-fp/$(subst -sw,,$(subst kf,tf,$@))"; \
    105      1.1  mrg 	echo "Create $@"; \
    106      1.1  mrg 	(echo "/* file created from $$src */"; \
    107      1.1  mrg 	 echo; \
    108      1.1  mrg 	 sed -f $(fp128_sed) < $$src) > $@
    109      1.1  mrg 
    110      1.1  mrg .PHONY: test clean-float128
    111      1.1  mrg 
    112      1.1  mrg test:
    113      1.1  mrg 	@echo "fp128_src:"; \
    114      1.1  mrg 	for x in $(fp128_src); do echo "    $$x"; done; \
    115      1.1  mrg 	echo; \
    116      1.1  mrg 	echo "fp128_obj:"; \
    117      1.1  mrg 	for x in $(fp128_obj); do echo "    $$x"; done;
    118      1.1  mrg 
    119      1.1  mrg clean-float128:
    120  1.1.1.4  mrg 	-rm -f $(fp128_softfp_src) $(fp128_hardfp_src)
    121      1.1  mrg 	@$(MULTICLEAN) multi-clean DO=clean-float128
    122      1.1  mrg 
    123      1.1  mrg # For now, only put it in the static library
    124      1.1  mrg # LIB2ADD += $(fp128_src)
    125      1.1  mrg 
    126      1.1  mrg LIB2ADD_ST += $(fp128_src)
    127