Bug 12916 - No vector ABI
Summary: No vector ABI
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 3.4.0
: P2 enhancement
Target Milestone: 4.0.0
Assignee: Eric Botcazou
URL:
Keywords: ABI, ice-on-valid-code
: 10383 (view as bug list)
Depends on:
Blocks: 9200 10383
  Show dependency treegraph
 
Reported: 2003-11-05 19:57 UTC by Eric Botcazou
Modified: 2010-10-27 17:02 UTC (History)
2 users (show)

See Also:
Host: sparc*-*-*
Target: sparc*-*-*
Build: sparc*-*-*
Known to work:
Known to fail:
Last reconfirmed: 2003-11-05 20:12:16


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Eric Botcazou 2003-11-05 19:57:16 UTC
The SPARC back-end has no vector ABI, so it ICEs as soon as a vector argument is
being passed through a function.
Comment 1 Eric Botcazou 2003-11-05 21:38:25 UTC
I'll give it a try for 3.5.
Comment 2 Eric Botcazou 2004-02-11 20:53:55 UTC
*** Bug 10383 has been marked as a duplicate of this bug. ***
Comment 3 GCC Commits 2004-02-19 09:02:59 UTC
Subject: Bug 12916

CVSROOT:	/cvs/gcc
Module name:	gcc
Changes by:	ebotcazou@gcc.gnu.org	2004-02-19 09:02:48

Modified files:
	gcc            : ChangeLog 
	gcc/config/sparc: sparc.c sparc.h 

Log message:
	PR target/12916
	* config/sparc/sparc.h (NPARM_REGS): Delete.
	(BASE_RETURN_VALUE_REG): Likewise.
	(BASE_OUTGOING_VALUE_REG): Likewise.
	(BASE_PASSING_ARG_REG): Likewise.
	(BASE_INCOMING_ARG_REG): Likewise.
	* config/sparc/sparc.c (sparc_strict_argument_naming): Test
	TARGET_ARCH64, not TARGET_V9.
	(function_arg_slotno): Dispatch based on the mode class.
	Handle vector modes like floating-point modes.
	(function_arg_record_value_1): Handle vector types like
	floating-point types.
	(function_arg_record_value_2): Likewise.
	Calculate regno after mode transformation.
	(function_arg): Handle vector modes like floating-point modes.
	(function_arg_partial_nregs): Replace NPARM_REGS by SPARC_INT_ARG_MAX.
	If ARCH64, do not recheck alignment.
	(function_arg_pass_by_reference): Reorder the conditions.
	(sparc_return_in_memory): Move after function_arg_padding.
	Implement calling conventions for vector modes.
	(sparc_struct_value_rtx): Move after sparc_return_in_memory.
	(function_value): Move scope of 'regbase'.
	Implement calling conventions for vector modes.
	(sparc_builtin_saveregs): Replace NPARM_REGS by SPARC_INT_ARG_MAX
	and BASE_INCOMING_ARG_REG by SPARC_INCOMING_INT_ARG_FIRST.
	(sparc_va_arg): Use function_arg_pass_by_reference to test whether
	the argument is passed by reference.
	(sparc_type_code): Handle vector types.

Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.2841&r2=2.2842
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sparc/sparc.c.diff?cvsroot=gcc&r1=1.290&r2=1.291
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/sparc/sparc.h.diff?cvsroot=gcc&r1=1.243&r2=1.244

Comment 4 Eric Botcazou 2004-02-19 09:08:00 UTC
See http://gcc.gnu.org/ml/gcc-patches/2004-02/msg01726.html