On TARGET_CPU_ZARCH && !TARGET_64BIT, we can use a similiar lean mcount call sequence to TARGET_64BIT. The longer sequences are now used only on deprecated g5/g6 CPUs.
Tested on s390-ibm-linux-gnu on RHEL 7.2. gcc/ChangeLog: * config/s390/s390.c (s390_function_profiler): Add a new sequence for z900+ CPUs in 31-bit mode. --- This change was mentioned in the s390 split-stack thread. gcc/ChangeLog | 5 +++++ gcc/config/s390/s390.c | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0e77409..94b9bd0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-01-21 Marcin Kościelnicki <koria...@0x04.net> + + * config/s390/s390.c (s390_function_profiler): Add a new sequence + for z900+ CPUs in 31-bit mode. + 2016-01-21 Richard Biener <rguent...@suse.de> * graphite-optimize-isl.c (get_schedule_map): Fix typo. diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c index 3be64de..eb26f18 100644 --- a/gcc/config/s390/s390.c +++ b/gcc/config/s390/s390.c @@ -11974,6 +11974,13 @@ s390_function_profiler (FILE *file, int labelno) output_asm_insn ("brasl\t%0,%4", op); output_asm_insn ("lg\t%0,%1", op); } + else if (TARGET_CPU_ZARCH) + { + output_asm_insn ("st\t%0,%1", op); + output_asm_insn ("larl\t%2,%3", op); + output_asm_insn ("brasl\t%0,%4", op); + output_asm_insn ("l\t%0,%1", op); + } else if (!flag_pic) { op[6] = gen_label_rtx (); -- 2.7.0