Hi Eric, > This started as a simple fix for a small issue (passing floating-point vectors > to variadic functions in 64-bit mode) and then evolved into a small cleanup of > the code implementing the calling conventions of the 2 SPARC ABIs. > > Tested and compat-regtested on SPARC/Solaris 11, applied on the mainline. > > > 2018-11-29 Eric Botcazou > > PR target/87807 > * config/sparc/sparc-modes.def: Minor tweak. > * config/sparc/sparc.c: Minor reordering. > (sparc_pass_by_reference): Move around. > (traverse_record_type): Change offset from HOST_WIDE_INT to int. > (classify_registers): Likewise for bitpos. > (function_arg_slotno): Remove dead test and tweak comments. > : Remove useless assertion and test whether the > parameter is named in order to pass it in FP registers. Return > the regno for floating-point vector types. > (compute_int_layout): Change bitpos from HOST_WIDE_INT to int. > (compute_fp_layout): Likewise. > (count_registers): Likewise. > (assign_int_registers): Likewise. > (assign_fp_registers): Likewise. > (assign_registers): Likewise. > (function_arg_record_value): Change size from HOST_WIDE_INT to int > and use CEIL_NWORDS to compute the number of registers. > (function_arg_union_value): Minor tweaks. > (function_arg_vector_value): Add slotno and named parameters, use > CEIL_NWORDS to compute the number of registers. > (sparc_function_arg_1): Rework handling of vector types. Change > size from HOST_WIDE_INT to int. > (sparc_arg_partial_bytes): Rework handling of 32-bit ABI and deal > with vector types for the 64-bt ABI. > (sparc_function_arg_advance): Likewise. > (sparc_return_in_memory): Add reference to -fpcc-struct-return. > (sparc_struct_value_rtx): Return NULL_RTX instead of 0. > (sparc_function_value_1): Rework handling of vector types. Change > size from HOST_WIDE_INT to int. > > > 2018-11-29 Eric Botcazou > > * gcc.target/sparc/20181129-1.c: New test. > * gcc.target/sparc/20181129-2.c: Likewise. unfortunately, the new tests FAIL to compile, both 32 and 64-bit: +FAIL: gcc.target/sparc/20181129-1.c (test for excess errors) +UNRESOLVED: gcc.target/sparc/20181129-1.c compilation failed to produce executable +FAIL: gcc.target/sparc/20181129-2.c (test for excess errors) +UNRESOLVED: gcc.target/sparc/20181129-2.c compilation failed to produce executable Excess errors: /vol/gcc/src/hg/trunk/local/gcc/testsuite/gcc.target/sparc/20181129-1.c:17:3: error: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] /vol/gcc/src/hg/trunk/local/gcc/testsuite/gcc.target/sparc/20181129-2.c: In function 'f': /vol/gcc/src/hg/trunk/local/gcc/testsuite/gcc.target/sparc/20181129-2.c:17:3: error: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] The following patch fixes this by building as C99. Alternatively, it would work just as well to split the x declaration and initialization. Tested on sparc-sun-solaris2.11. Ok for mainline? Rainer -- ----------------------------------------------------------------------------- Rainer Orth, Center for Biotechnology, Bielefeld University 2018-12-04 Rainer Orth * gcc.target/sparc/20181129-1.c: Compile with -std=c99. * gcc.target/sparc/20181129-2.c: Likewise.