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]

My Small AltiVec Patch - TAKE 2


Ok, hopefully I addressed the various concerns raised by my previous patch.
Instead of custom-mangling vectors, I now custom-mangle newly-created
'bool ...' and 'pixel' scalar types (and renamed the target hook to indicate
that it is intended for scalars only). The fix to rs6000.c:print_operand()
has been conditionalized, since the Darwin PPC assembler requires register
names where many other assemblers forbid them. :-( I've also reworked the
various AltiVec test cases to be triggered on _all_ PPC targets (except for
the '-faltivec' tests, which are Darwin-specific), and then added a run-time
test for the presence of AltiVec functionality. Finally, I added a blurb
about the new target hook in tm.texi.


And yes, I ran DejaGNU and there are no regressions. Plus, I added some
additional tests from Apple's stash, and they work as well. Presently
running a sanity bootstrap one last time -- OK for mainline if all goes well?


--Zem

[gcc/ChangeLog]
2004-02-05  Ziemowit Laski  <zlaski@apple.com>

* c-common.c (vector_size_helper): Make externally visible.
* c-common.h (vector_size_helper): Add prototype.
* hooks.c (hook_constcharptr_tree_null): New hook.
* hooks.h (hook_constcharptr_tree_null): New prototype.
* target-def.h (TARGET_MANGLE_SCALAR_TYPE): New target hook.
* target.h (mangle_scalar_type): New target hook.
* config/darwin.h (TARGET_OPTION_TRANSLATE_TABLE) Refer to
SUBTARGET_OPTION_TRANSLATE_TABLE for architecture-specific options.
* config/i386/darwin.h (SUBTARGET_OPTION_TRANSLATE_TABLE). Define it.
* config/rs6000/altivec.h: #error out if '-maltivec' not specified;
wrap C++-specific portion of header with 'extern "C++"'.
(vector, pixel, bool): #define to __vector, __pixel and __bool.
(__un_args_eq, __bin_args_eq, __tern_args_eq): Move to C-specific
portion of header.
(__altivec_link_error_invalid_argument): Remove prototype; will use
__builtin_altivec_compiletime_error("vec_*") instead.
(vec_*): Fix/complete set of available operation overloads given the
existence of distinct 'vector bool ...' and 'vector pixel' types; tighten
cv-correctness of pointer arguments; in C, always check for correct
argument types before macro expansion.
* config/rs6000/darwin.h (SUBTARGET_OPTION_TRANSLATE_TABLE): New macro
defining Darwin/PowerPC-specific '-f[no-]altivec' and
'-W[no-]altivec-long-deprecated' switches.
* config/rs6000/rs6000-c: #include target.h.
(rs6000_cpu_cpp_builtins): Pre-define '__vector', '__pixel' and '__bool'
macros using '__attribute__((altivec(...)))'; enable C++ mangling of
AltiVec types.
* config/rs6000/rs6000-protos.h (rs6000_mangle_scalar_type): New
prototype.
* config/rs6000/rs6000.c (bool_char_type_node, bool_short_type_node,
bool_int_type_node, pixel_type_node, bool_V16QI_type_node,
bool_V8HI_type_node, bool_V4SI_type_node, pixel_V8HI_type_node):
New type nodes.
(rs6000_warn_altivec_long, rs6000_warn_altivec_long_switch): New, for
handling '-W[no-]altivec-long-deprecated'.
(rs6000_override_options): Handle '-W[no-]altivec-long-deprecated'.
(rs6000_expand_binop_builtin, rs6000_expand_ternop_builtin,
altivec_expand_dst_builtin): Remove casts from integer literals.
(altivec_expand_builtin): Likewise; handle expansion of new
'__builtin_altivec_compiletime_error' function.
(rs6000_init_builtins): Initialize 'vector bool ...' and 'vector pixel'
types, and make them distinct from other vector types; register
'__builtin_altivec_compiletime_error' function.
(print_operand): For Darwin, print a full register name instead of
merely its number.
(rs6000_attribute_table): Add "altivec" attribute.
(rs6000_handle_altivec_attribute, rs6000_mangle_scalar_type): New
functions.
* config/rs6000/rs6000.h (TARGET_OPTIONS): Describe
'-m[no-]-warn-altivec-long' (which '-W[no-]altivec-long-deprecated'
maps to).
(rs6000_warn_altivec_long, rs6000_warn_altivec_long_switch): Forward
declare.
(ALTIVEC_BUILTIN_COMPILETIME_ERROR): New built-in enumeration.
* config/rs6000/t-rs6000 (rs6000-c.o): Depend on $(TARGET_H).
* doc/tm.texi (TARGET_MANGLE_SCALAR_TYPE): Document.


[gcc/cp/ChangeLog]
2004-02-05  Ziemowit Laski  <zlaski@apple.com>

	* Make-lang.in (cp/mangle.o): Depend on $(TARGET_H).
	* mangle.c (write_type): Add call to 'mangle_scalar_type'
	target hook.
	* tree.c (pod_type_p): Treat VECTOR_TYPEs as PODs.
	* typeck.c (build_static_cast, build_reinterpret_cast):
	Allow casts among VECTOR_TYPEs.

[gcc/testsuite/ChangeLog]
2004-02-05  Ziemowit Laski  <zlaski@apple.com>

	* g++.dg/ext/altivec-1.C: Generalize target triple.
	* g++.dg/ext/altivec-[2-5].C: New test cases.
	* g++.dg/ext/altivec_check.h: New file.
	* gcc.dg/altivec-1.c: Generalize target triple;
	include altivec_check.h and call altivec_check().
	* gcc.dg/altivec-[2-5.c: Generalize target triple.
	* gcc.dg/altivec-6.c: New test case.
	* gcc.dg/altivec-[7-9].c: Generalize target triple; add
	type casts as needed.
	* gcc.dg/altivec-10.c: Include altivec_check.h and call
	altivec_check().
	* gcc.dg/altivec-12.c: New test case.
	* gcc.dg/altivec-varargs-1.c: Generalize target triple;
	include altivec_check.h and call altivec_check().
	* gcc.dg/altivec_check.h: New file.


Attachment: altivec-20040205.diff.gz
Description: GNU Zip compressed data


-------------------------------------------------------------- Ziemowit Laski 1 Infinite Loop, MS 301-2K Mac OS X Compiler Group Cupertino, CA USA 95014-2083 Apple Computer, Inc. +1.408.974.6229 Fax .5477

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