public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: YunQiang Su <syq@debian.org>
To: Dragan Mladjenovic <OT_Dragan.Mladjenovic@mediatek.com>
Cc: "gcc-patches@gcc.gnu.org" <gcc-patches@gcc.gnu.org>,
	Jeff Law <law@gcc.gnu.org>,  Matthew Fortune <mfortune@gmail.com>,
	Jakub Jelinek <jakub@redhat.com>,
	 YunQiang Su <yunqiang.su@cipunited.com>,
	 "Petar.Jovanovic@syrmia.com" <Petar.Jovanovic@syrmia.com>,
	 Faraz Shahbazker <Faraz.Shahbazker@mediatek.com>,
	 Vince Del Vecchio <Vince.DelVecchio@mediatek.com>
Subject: Re: [RFC 1/7] Avoid references to register names in instruction output patterns.
Date: Tue, 28 Sep 2021 17:28:47 +0800	[thread overview]
Message-ID: <CAKcpw6WZx7PjdfKUtGCm7UwmOC2czKkB6wzqX8c1sOhetqYEeA@mail.gmail.com> (raw)
In-Reply-To: <b2736d80ca95497daa011a4d135b0994@MTKMBS62N1.mediatek.inc>

Dragan Mladjenovic via Gcc-patches <gcc-patches@gcc.gnu.org>
于2021年9月26日周日 下午9:26写道:
>
> This allows us to choose the different names if needed in the future.
>

I try to apply this patch to current gcc, I get this error:
/build/mips-mti-elf/srcs-gcc/gcc/testsuite/gcc.c-torture/compile/20010226-1.c:
In function 'foo':^M
/build/mips-mti-elf/srcs-gcc/gcc/testsuite/gcc.c-torture/compile/20010226-1.c:24:1:
internal compiler error: output_operand: invalid %-code^M
0xa435c4 output_operand_lossage(char const*, ...)^M
        ../../srcs-gcc/gcc/final.c:3235^M
0xa43ec6 output_asm_insn(char const*, rtx_def**)^M
        ../../srcs-gcc/gcc/final.c:3604^M
0xa482c7 output_asm_insn(char const*, rtx_def**)^M
        ../../srcs-gcc/gcc/final.c:3466^M
0xa482c7 final_scan_insn_1^M
        ../../srcs-gcc/gcc/final.c:2894^M
0xa485bb final_scan_insn(rtx_insn*, _IO_FILE*, int, int, int*)^M
        ../../srcs-gcc/gcc/final.c:2940^M
0xa486a6 final_1^M
        ../../srcs-gcc/gcc/final.c:1997^M
0xa49262 rest_of_handle_final^M
        ../../srcs-gcc/gcc/final.c:4285^M
0xa49262 execute^M
        ../../srcs-gcc/gcc/final.c:4363^M
Please submit a full bug report,^M
with preprocessed source if appropriate.^M
Please include the complete backtrace with any bug report.^M
See <https://gcc.gnu.org/bugs/> for instructions.^M
compiler exited with status 1

> gcc/ChangeLog:
>
>         * config/mips/mips.c (mips_print_operand_punctuation):
>         Handle '&' punctuation.
>         (mips_output_probe_stack_range): Use '%.' instead of $0.
>         * config/mips/mips.h (GLOBAL_POINTER_REGNUM): Move to ...
>         * config/mips/mips.md (GLOBAL_POINTER_REGNUM): ... here.
>         (trap, *conditional_trap_reg<mode>, *msac, *muls,
>         *muls<u>_di, <u>msubsidi4): Use '%.' instead of $0.
>         (clear_hazard_<mode>): Use '%&' instead of $31.
> ---
>  gcc/config/mips/mips.c  |  9 +++++++--
>  gcc/config/mips/mips.h  |  4 ----
>  gcc/config/mips/mips.md | 17 +++++++++--------
>  3 files changed, 16 insertions(+), 14 deletions(-)
>  3 files changed, 16 insertions(+), 14 deletions(-)
>
> diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
> index ce60c5500b7..ab63575eb26 100644
> --- a/gcc/config/mips/mips.c
> +++ b/gcc/config/mips/mips.c
> @@ -8816,6 +8816,7 @@ mips_pop_asm_switch (struct mips_asm_switch *asm_switch)
>     '^' Print the name of the pic call-through register (t9 or $25).
>     '+' Print the name of the gp register (usually gp or $28).
>     '$' Print the name of the stack pointer register (sp or $29).
> +   '&' Print the name of the return register (ra or $31).
>     ':'  Print "c" to use the compact version if the delay slot is a nop.
>     '!'  Print "s" to use the short version if the delay slot contains a
>         16-bit instruction.
> @@ -8902,6 +8903,10 @@ mips_print_operand_punctuation (FILE *file, int ch)
>        fputs (reg_names[STACK_POINTER_REGNUM], file);
>        break;
>
> +    case '&':
> +      fputs (reg_names[RETURN_ADDR_REGNUM], file);
> +      break;
> +
>      case ':':
>        /* When final_sequence is 0, the delay slot will be a nop.  We can
>          use the compact version where available.  The %: formatter will
> @@ -12133,9 +12138,9 @@ mips_output_probe_stack_range (rtx reg1, rtx reg2)
>    strcpy (tmp, "%(%<bne\t%0,%1,");
>    output_asm_insn (strcat (tmp, &loop_lab[1]), xops);
>    if (TARGET_64BIT)
> -    output_asm_insn ("sd\t$0,0(%0)%)", xops);
> +    output_asm_insn ("sd\t%.,0(%0)%)", xops);
>    else
> -    output_asm_insn ("sw\t$0,0(%0)%)", xops);
> +    output_asm_insn ("sw\t%.,0(%0)%)", xops);
>

I guess the problem is due to this.

>    return "";
>  }
> diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h
> index f4e30ba3fdb..a44ccada0bc 100644
> --- a/gcc/config/mips/mips.h
> +++ b/gcc/config/mips/mips.h
> @@ -2064,10 +2064,6 @@ FP_ASM_SPEC "\
>     function address than to call an address kept in a register.  */
>  #define NO_FUNCTION_CSE 1
>
> -/* The ABI-defined global pointer.  Sometimes we use a different
> -   register in leaf functions: see PIC_OFFSET_TABLE_REGNUM.  */
> -#define GLOBAL_POINTER_REGNUM (GP_REG_FIRST + 28)
> -
>  /* We normally use $28 as the global pointer.  However, when generating
>     n32/64 PIC, it is better for leaf functions to use a call-clobbered
>     register instead.  They can then avoid saving and restoring $28
> diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
> index dee71dc1fb0..1c8b3b98b20 100644
> --- a/gcc/config/mips/mips.md
> +++ b/gcc/config/mips/mips.md
> @@ -167,6 +167,7 @@
>     (GET_FCSR_REGNUM            2)
>     (SET_FCSR_REGNUM            4)
>     (PIC_FUNCTION_ADDR_REGNUM   25)
> +   (GLOBAL_POINTER_REGNUM      28)
>     (RETURN_ADDR_REGNUM         31)
>     (CPRESTORE_SLOT_REGNUM      76)
>     (GOT_VERSION_REGNUM         79)
> @@ -1205,7 +1206,7 @@
>    ""
>  {
>    if (ISA_HAS_COND_TRAP)
> -    return "teq\t$0,$0";
> +    return "teq\t%.,%.";
>    else if (TARGET_MIPS16)
>      return "break 0";
>    else
> @@ -1230,7 +1231,7 @@
>                                  (match_operand:GPR 2 "reg_or_0_operand" "dJ")])
>             (const_int 0))]
>    "ISA_HAS_COND_TRAP && !ISA_HAS_COND_TRAPI"
> -  "t%C0\t%z1,%2"
> +  "t%C0\t%z1,%z2"
>    [(set_attr "type" "trap")])
>
>  (define_insn "*conditional_trap<mode>"
> @@ -1860,7 +1861,7 @@
>    else if (TARGET_MIPS5500)
>      return "msub\t%2,%3";
>    else
> -    return "msac\t$0,%2,%3";
> +    return "msac\t%.,%2,%3";
>  }
>    [(set_attr "type"     "imadd")
>     (set_attr "accum_in"        "1")
> @@ -2060,7 +2061,7 @@
>     (clobber (match_scratch:SI 3 "=X,l"))]
>    "ISA_HAS_MULS"
>    "@
> -   muls\t$0,%1,%2
> +   muls\t%.,%1,%2
>     muls\t%0,%1,%2"
>    [(set_attr "type"     "imul,imul3")
>     (set_attr "mode"     "SI")])
> @@ -2243,7 +2244,7 @@
>           (any_extend:DI (match_operand:SI 1 "register_operand" "d"))
>           (any_extend:DI (match_operand:SI 2 "register_operand" "d")))))]
>    "!TARGET_64BIT && ISA_HAS_MULS"
> -  "muls<u>\t$0,%1,%2"
> +  "muls<u>\t%.,%1,%2"
>    [(set_attr "type" "imul")
>     (set_attr "mode" "SI")])
>
> @@ -2268,7 +2269,7 @@
>    else if (TARGET_MIPS5500 || GENERATE_MADD_MSUB)
>      return "msub<u>\t%1,%2";
>    else
> -    return "msac<u>\t$0,%1,%2";
> +    return "msac<u>\t%.,%1,%2";
>  }
>    [(set_attr "type" "imadd")
>     (set_attr "accum_in"        "3")
> @@ -5622,8 +5623,8 @@
>  {
>    return "%(%<bal\t1f\n"
>           "\tnop\n"
> -         "1:\t<d>addiu\t$31,$31,12\n"
> -         "\tjr.hb\t$31\n"
> +         "1:\t<d>addiu\t%&,%&,12\n"
> +         "\tjr.hb\t%&\n"
>           "\tnop%>%)";
>  }

      reply	other threads:[~2021-09-28  9:28 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-26 13:24 Dragan Mladjenovic
2021-09-28  9:28 ` YunQiang Su [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAKcpw6WZx7PjdfKUtGCm7UwmOC2czKkB6wzqX8c1sOhetqYEeA@mail.gmail.com \
    --to=syq@debian.org \
    --cc=Faraz.Shahbazker@mediatek.com \
    --cc=OT_Dragan.Mladjenovic@mediatek.com \
    --cc=Petar.Jovanovic@syrmia.com \
    --cc=Vince.DelVecchio@mediatek.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jakub@redhat.com \
    --cc=law@gcc.gnu.org \
    --cc=mfortune@gmail.com \
    --cc=yunqiang.su@cipunited.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).