diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2020-08-19 17:14:13 +0200 |
---|---|---|
committer | Uros Bizjak <ubizjak@gmail.com> | 2020-08-19 17:14:55 +0200 |
commit | 4432066509441cb6ec3e6688a523f9946e7b5d21 (patch) | |
tree | 8f22c4e7b5387864d56bf89b31e7fd99a70434e9 | |
parent | 459f6f68a75fe88e7c8309ca8ad3244a532b0d8e (diff) | |
download | gcc-4432066509441cb6ec3e6688a523f9946e7b5d21.zip gcc-4432066509441cb6ec3e6688a523f9946e7b5d21.tar.gz gcc-4432066509441cb6ec3e6688a523f9946e7b5d21.tar.bz2 |
i386: Use code_for_ instead of gen_ for parameterized names more.
Some builtins are better expanded to patterns with
parametrized names via code_for_ than gen_ helpers.
No functional changes.
2020-08-19 Uroš Bizjak <ubizjak@gmail.com>
gcc/ChangeLog:
* config/i386/i386-expand.c (ix86_expand_builtin)
[case IX86_BUILTIN_ENQCMD, case IX86_BUILTIN_ENQCMDS]:
Rewrite expansion to use code_for_enqcmd.
[case IX86_BUILTIN_WRSSD, case IX86_BUILTIN_WRSSQ]:
Rewrite expansion to use code_for_wrss.
[case IX86_BUILTIN_WRUSSD, case IX86_BUILTIN_WRUSSD]:
Rewrite expansion to use code_for_wrss.
-rw-r--r-- | gcc/config/i386/i386-expand.c | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c index 68fbe83..6161863 100644 --- a/gcc/config/i386/i386-expand.c +++ b/gcc/config/i386/i386-expand.c @@ -11433,24 +11433,24 @@ ix86_expand_builtin (tree exp, rtx target, rtx subtarget, } else { - rtx pat; + if (target == 0 + || !register_operand (target, SImode)) + target = gen_reg_rtx (SImode); - target = gen_reg_rtx (SImode); emit_move_insn (target, const0_rtx); target = gen_rtx_SUBREG (QImode, target, 0); - if (fcode == IX86_BUILTIN_ENQCMD) - pat = gen_enqcmd (UNSPECV_ENQCMD, Pmode, op0, op1); - else - pat = gen_enqcmd (UNSPECV_ENQCMDS, Pmode, op0, op1); - - emit_insn (pat); - - emit_insn (gen_rtx_SET (gen_rtx_STRICT_LOW_PART (VOIDmode, target), - gen_rtx_fmt_ee (EQ, QImode, - SET_DEST (pat), - const0_rtx))); + int unspecv = (fcode == IX86_BUILTIN_ENQCMD + ? UNSPECV_ENQCMD + : UNSPECV_ENQCMDS); + icode = code_for_enqcmd (unspecv, Pmode); + emit_insn (GEN_FCN (icode) (op0, op1)); + emit_insn + (gen_rtx_SET (gen_rtx_STRICT_LOW_PART (VOIDmode, target), + gen_rtx_fmt_ee (EQ, QImode, + gen_rtx_REG (CCZmode, FLAGS_REG), + const0_rtx))); return SUBREG_REG (target); } @@ -12839,10 +12839,12 @@ rdseed_step: } op1 = gen_rtx_MEM (mode, op1); - emit_insn ((fcode == IX86_BUILTIN_WRSSD - || fcode == IX86_BUILTIN_WRSSQ) - ? gen_wrss (mode, op0, op1) - : gen_wruss (mode, op0, op1)); + icode = ((fcode == IX86_BUILTIN_WRSSD + || fcode == IX86_BUILTIN_WRSSQ) + ? code_for_wrss (mode) + : code_for_wruss (mode)); + emit_insn (GEN_FCN (icode) (op0, op1)); + return 0; default: |