This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH], PowerPC IEEE 128-bit patch #7


There are 3 patches left in the basic IEEE 128-bit floating point support for
the compiler. I will submit these at the same time. They are split to make the
review process similar.  Patch #5 and #6 are indpendent of each other and can
be applied in either order. Patch #7 assumes that patches 1-6 have been
applied.

Patch #5 adds the following:
 * Support for the reload handlers that will be enabled in patch #7.
 * Adds IFmode/KFmode to other iterators as appropriate.
 * Adds the basic negate, absolute value, and negative absolute value support.
 * Adds the insns for the 128-bit pack/unpack routines.

Patch #6 adds the following:
 * Adds support for comparisons.
 * Updates the cannot change mode support.

Patch #7 finishes up the initial basic support.
 * It defines macros for IEEE 128-bit floating point users.
 * It defines the basic move support.
 * It sets up the calling sequence.
 * It registers the __float128 and __ibm128 keywords.
 * It sets up the various handler functions.
 * It adds 'q' and 'Q' as the suffix for IEEE 128-bit floating point.
 * It adds target attribute/pragma support for the IEEE 128-bit options.
 * It treats IEEE 128-bit in VSX register modes as vector.
 * It uses a unique mangling for IEEE 128-bit in VSX registers.
 * It moves vector modes tieable above scalar floating point.
 * It adds a simple minded test to make sure IEEE args are passed as vectors.

Things to be done:
 * Work with GDB to add debug support.
 * Work with GLIBC to add basic software emulation support.
 * Work with GLIBC on other IEEE 128-bit support.
 * Look into Complex support.
 * Look into libquadmath support.
 * Enable -mfloat128-software if -mvsx.
 * Add more tests.
 * Fix bugs that show up if -mabi=ieeelongdouble is used.

Each patch bootstraps without error and has no regressions. Are they ok to
install in the trunk?

This is patch #7:

[gcc]
2015-08-13  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Define user
	macros for IEEE 128-bit floating point in VSX registers.

	* config/rs6000/rs6000.c (TARGET_C_MODE_FOR_SUFFIX): Add 'q' or
	'Q' as the suffix for IEEE 128-bit floating point in VSX
	registers.
	(rs6000_c_mode_for_suffix): Likewise.
	(rs6000_init_hard_regno_mode_ok): Set up IEEE 128-bit floating
	point in VSX register mode support.
	(rs6000_gen_le_vsx_permute): Use ROTATE instead of VEC_SELECT for
	IEEE 128-bit floating point in VSX registers.
	(init_cumulative_args): When calling the library support
	functions, suppress passing values to IEEE 128-bit floating point
	in VSX registers in both the GPRs and VSX registers.
	(rs6000_function_arg): Likewise.
	(rs6000_arg_partial_bytes): Likewise.
	(rs6000_init_builtins): Likewise.
	(init_float128_ibm): Split 128-bit floating point support into two
	functions, and add support for IEEE 128-bit floating point in VSX
	registers.
	(init_float128_ieee): Likewise.
	(rs6000_init_libfuncs): Likewise.
	(rs6000_mangle_type): Use U10__float128 as the mangled type for
	IEEE 128-bit floating point in VSX registers.
	(struct rs6000_opt_var): Fix typo.
	(struct rs6000_float128_var): Add target attribute and pragma
	support for the IEEE 128-bit floating point in VSX registers.
	(rs6000_float128_vars): Likewise.
	(rs6000_inner_target_options): Likewise.

	* config/rs6000/rs6000.h (ALTIVEC_VECTOR_MODE): Treat IEEE 128-bit
	floating point in vector registers as a vector type.
	(MODES_TIEABLE_P): Move vector tests above floating point scalar
	tests, so that IEEE 128-bit floating point in VSX registers ties
	like a vector operand and not a scalar floating point operand.
	(struct rs6000_args): Add libcall field to support IEEE 128-bit
	floating point in VSX registers.

	* doc/extend.texi (additional floating types): Document PowerPC
	use of __float128 and __ibm128 types.

	* doc/invoke.texi (RS/6000 and PowerPC Options): Document
	-mfloat128-software and -mfloat128-none.

[gcc/testsuite]
2015-08-13  Michael Meissner  <meissner@linux.vnet.ibm.com>

	* gcc.target/powerpc/float128-call.c: New function, test whether
	IEEE 128-bit floating point in VSX registers is passed correctly.

-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meissner@linux.vnet.ibm.com, phone: +1 (978) 899-4797

Attachment: ieee128-patch07b
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]