diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2008-05-26 14:21:40 +0000 |
---|---|---|
committer | H.J. Lu <hongjiu.lu@intel.com> | 2008-05-26 14:21:40 +0000 |
commit | 58421e97032d5d9f59764b5b362173d08807ebda (patch) | |
tree | da0e0d01a38d25253f98feec1897548634442ae0 | |
parent | 1c74653e0fb2e44e5e281fd59c4c477787a149ed (diff) |
2008-05-26 H.J. Lu <hongjiu.lu@intel.com>
* config/i386/i386.md (*movsi_1): Use "%v" and "%d0" for AVX
support.
(*movsf_1): Likewise.
(*movdf_integer_rex64): Likewise.
(*extendsfdf2_mixed): Likewise.
(*truncdfsf_fast_mixed): Likewise.
(*truncdfsf_fast_sse): Likewise.
(*truncdfsf_mixed): Likewise.
(fix_trunc<mode>di_sse): Likewise.
(*extendsfdf2_sse): Likewise.
(fix_trunc<mode>si_sse): Likewise.
(*float<SSEMODEI24:mode><MODEF:mode>2_sse_interunit): Likewise.
(*rcpsf2_sse): Likewise.
(*rsqrtsf2_sse): Likewise.
(*sqrt<mode>2_sse): Likewise.
(sse4_1_round<mode>2): Likewise.
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/ix86/avx@135928 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog.avx | 19 | ||||
-rw-r--r-- | gcc/config/i386/i386.md | 111 |
2 files changed, 54 insertions, 76 deletions
diff --git a/gcc/ChangeLog.avx b/gcc/ChangeLog.avx index 2107d6e9bf0..38b61b2560a 100644 --- a/gcc/ChangeLog.avx +++ b/gcc/ChangeLog.avx @@ -1,3 +1,22 @@ +2008-05-26 H.J. Lu <hongjiu.lu@intel.com> + + * config/i386/i386.md (*movsi_1): Use "%v" and "%d0" for AVX + support. + (*movsf_1): Likewise. + (*movdf_integer_rex64): Likewise. + (*extendsfdf2_mixed): Likewise. + (*truncdfsf_fast_mixed): Likewise. + (*truncdfsf_fast_sse): Likewise. + (*truncdfsf_mixed): Likewise. + (fix_trunc<mode>di_sse): Likewise. + (*extendsfdf2_sse): Likewise. + (fix_trunc<mode>si_sse): Likewise. + (*float<SSEMODEI24:mode><MODEF:mode>2_sse_interunit): Likewise. + (*rcpsf2_sse): Likewise. + (*rsqrtsf2_sse): Likewise. + (*sqrt<mode>2_sse): Likewise. + (sse4_1_round<mode>2): Likewise. + 2008-05-25 H.J. Lu <hongjiu.lu@intel.com> * config/i386/i386.md (*sse_prologue_save_insn): Support AVX. diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index b7f380ade60..bc2bcb5aff1 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -1509,26 +1509,20 @@ { case TYPE_SSELOG1: if (get_attr_mode (insn) == MODE_TI) - return TARGET_AVX ? "vpxor\t%0, %0, %0" - : "pxor\t%0, %0"; - return TARGET_AVX ? "vxorps\t%0, %0, %0" - : "xorps\t%0, %0"; + return "%vpxor\t%0, %d0"; + return "%vxorps\t%0, %d0"; case TYPE_SSEMOV: switch (get_attr_mode (insn)) { case MODE_TI: - return TARGET_AVX ? "vmovdqa\t{%1, %0|%0, %1}" - : "movdqa\t{%1, %0|%0, %1}"; + return "%vmovdqa\t{%1, %0|%0, %1}"; case MODE_V4SF: - return TARGET_AVX ? "vmovaps\t{%1, %0|%0, %1}" - : "movaps\t{%1, %0|%0, %1}"; + return "%vmovaps\t{%1, %0|%0, %1}"; case MODE_SI: - return TARGET_AVX ? "vmovd\t{%1, %0|%0, %1}" - : "movd\t{%1, %0|%0, %1}"; + return "%vmovd\t{%1, %0|%0, %1}"; case MODE_SF: - return TARGET_AVX ? "vmovss\t{%1, %0|%0, %1}" - : "movss\t{%1, %0|%0, %1}"; + return "%vmovss\t{%1, %0|%0, %1}"; default: gcc_unreachable (); } @@ -2364,7 +2358,7 @@ return "movq\t{%1, %0|%0, %1}"; case TYPE_SSELOG1: - return TARGET_AVX ? "vpxor\t%0, %0, %0" : "pxor\t%0, %0"; + return "%vpxor\t%0, %d0"; case TYPE_MMXADD: return "pxor\t%0, %0"; @@ -2747,16 +2741,14 @@ return "mov{l}\t{%1, %0|%0, %1}"; case 5: if (get_attr_mode (insn) == MODE_TI) - return TARGET_AVX ? "vpxor\t%0, %0, %0" : "pxor\t%0, %0"; + return "%vpxor\t%0, %d0"; else - return TARGET_AVX ? "vxorps\t%0, %0, %0": "xorps\t%0, %0"; + return "%vxorps\t%0, %d0"; case 6: if (get_attr_mode (insn) == MODE_V4SF) - return TARGET_AVX ? "vmovaps\t{%1, %0|%0, %1}" - : "movaps\t{%1, %0|%0, %1}"; + return "%vmovaps\t{%1, %0|%0, %1}"; else - return TARGET_AVX ? "vmovss\t{%1, %0, %0|%0, %0, %1}" - : "movss\t{%1, %0|%0, %1}"; + return "%vmovss\t{%1, %d0|%d0, %1}"; case 7: if (TARGET_AVX) return REG_P (operands[1]) ? "vmovss\t{%1, %0, %0|%0, %0, %1}" @@ -2764,14 +2756,12 @@ else return "movss\t{%1, %0|%0, %1}"; case 8: - return TARGET_AVX ? "vmovss\t{%1, %0|%0, %1}" - : "movss\t{%1, %0|%0, %1}"; + return "%vmovss\t{%1, %0|%0, %1}"; case 9: case 10: case 14: case 15: return "movd\t{%1, %0|%0, %1}"; case 12: case 13: - return TARGET_AVX ? "vmovd\t{%1, %0|%0, %1}" - : "movd\t{%1, %0|%0, %1}"; + return "%vmovd\t{%1, %0|%0, %1}"; case 11: return "movq\t{%1, %0|%0, %1}"; @@ -3077,11 +3067,11 @@ switch (get_attr_mode (insn)) { case MODE_V4SF: - return TARGET_AVX ? "vxorps\t%0, %0, %0" : "xorps\t%0, %0"; + return "%vxorps\t%0, %d0"; case MODE_V2DF: - return TARGET_AVX ? "vxorpd\t%0, %0, %0" : "xorpd\t%0, %0"; + return "%vxorpd\t%0, %d0"; case MODE_TI: - return TARGET_AVX ? "vpxor\t%0, %0, %0" : "pxor\t%0, %0"; + return "%vpxor\t%0, %d0"; default: gcc_unreachable (); } @@ -3091,17 +3081,13 @@ switch (get_attr_mode (insn)) { case MODE_V4SF: - return TARGET_AVX ? "vmovaps\t{%1, %0|%0, %1}" - : "movaps\t{%1, %0|%0, %1}"; + return "%vmovaps\t{%1, %0|%0, %1}"; case MODE_V2DF: - return TARGET_AVX ? "vmovapd\t{%1, %0|%0, %1}" - : "movapd\t{%1, %0|%0, %1}"; + return "%vmovapd\t{%1, %0|%0, %1}"; case MODE_TI: - return TARGET_AVX ? "vmovdqa\t{%1, %0|%0, %1}" - : "movdqa\t{%1, %0|%0, %1}"; + return "%vmovdqa\t{%1, %0|%0, %1}"; case MODE_DI: - return TARGET_AVX ? "vmovq\t{%1, %0|%0, %1}" - : "movq\t{%1, %0|%0, %1}"; + return "%vmovq\t{%1, %0|%0, %1}"; case MODE_DF: if (TARGET_AVX) { @@ -3113,21 +3099,16 @@ else return "movsd\t{%1, %0|%0, %1}"; case MODE_V1DF: - return TARGET_AVX ? "vmovlpd\t{%1, %0|%0, %1}" - : "movlpd\t{%1, %0|%0, %1}"; + return "%vmovlpd\t{%1, %d0|%d0, %1}"; case MODE_V2SF: - return TARGET_AVX ? "vmovlps\t{%1, %0|%0, %1}" - : "movlps\t{%1, %0|%0, %1}"; + return "%vmovlps\t{%1, %d0|%d0, %1}"; default: gcc_unreachable (); } case 9: case 10: - if (TARGET_AVX) - return "vmovq\t{%1, %0|%0, %1}"; - else - return "movd\t{%1, %0|%0, %1}"; + return "%vmovq\t{%1, %0|%0, %1}"; default: gcc_unreachable(); @@ -4265,10 +4246,7 @@ return output_387_reg_move (insn, operands); case 2: - if (TARGET_AVX) - return "vcvtss2sd\t{%1, %0, %0|%0, %0, %1}"; - else - return "cvtss2sd\t{%1, %0|%0, %1}"; + return "%vcvtss2sd\t{%1, %d0|%d0, %1}"; default: gcc_unreachable (); @@ -4282,8 +4260,7 @@ [(set (match_operand:DF 0 "nonimmediate_operand" "=x") (float_extend:DF (match_operand:SF 1 "nonimmediate_operand" "xm")))] "TARGET_SSE2 && TARGET_SSE_MATH" - "* return TARGET_AVX ? \"vcvtss2sd\t{%1, %0, %0|%0, %0, %1}\" - : \"cvtss2sd\t{%1, %0|%0, %1}\";" + "%vcvtss2sd\t{%1, %d0|%d0, %1}" [(set_attr "type" "ssecvt") (set_attr "prefix" "maybe_vex") (set_attr "mode" "DF")]) @@ -4414,10 +4391,7 @@ case 0: return output_387_reg_move (insn, operands); case 1: - if (TARGET_AVX) - return "vcvtsd2ss\t{%1, %0, %0|%0, %0, %1}"; - else - return "cvtsd2ss\t{%1, %0|%0, %1}"; + return "%vcvtsd2ss\t{%1, %d0|%d0, %1}"; default: gcc_unreachable (); } @@ -4433,8 +4407,7 @@ (float_truncate:SF (match_operand:DF 1 "nonimmediate_operand" "xm")))] "TARGET_SSE2 && TARGET_SSE_MATH" - "* return TARGET_AVX ? \"vcvtsd2ss\t{%1, %0, %0|%0, %0, %1}\" - : \"cvtsd2ss\t{%1, %0|%0, %1}\";" + "%vcvtsd2ss\t{%1, %d0|%d0, %1}" [(set_attr "type" "ssecvt") (set_attr "prefix" "maybe_vex") (set_attr "mode" "SF")]) @@ -4463,10 +4436,7 @@ case 1: return "#"; case 2: - if (TARGET_AVX) - return "vcvtsd2ss\t{%1, %0, %0|%0, %0, %1}"; - else - return "cvtsd2ss\t{%1, %0|%0, %1}"; + return "%vcvtsd2ss\t{%1, %d0|%d0, %1}"; default: gcc_unreachable (); } @@ -4757,8 +4727,7 @@ (fix:DI (match_operand:MODEF 1 "nonimmediate_operand" "x,m")))] "TARGET_64BIT && SSE_FLOAT_MODE_P (<MODE>mode) && (!TARGET_FISTTP || TARGET_SSE_MATH)" - "* return TARGET_AVX ? \"vcvtts<ssemodefsuffix>2si{q}\t{%1, %0|%0, %1}\" - : \"cvtts<ssemodefsuffix>2si{q}\t{%1, %0|%0, %1}\";" + "%vcvtts<ssemodefsuffix>2si{q}\t{%1, %0|%0, %1}" [(set_attr "type" "sseicvt") (set_attr "prefix" "maybe_vex") (set_attr "mode" "<MODE>") @@ -4770,9 +4739,7 @@ (fix:SI (match_operand:MODEF 1 "nonimmediate_operand" "x,m")))] "SSE_FLOAT_MODE_P (<MODE>mode) && (!TARGET_FISTTP || TARGET_SSE_MATH)" - "* return TARGET_AVX - ? \"vcvtts<ssemodefsuffix>2si\t{%1, %0|%0, %1}\" - :\"cvtts<ssemodefsuffix>2si\t{%1, %0|%0, %1}\";" + "%vcvtts<ssemodefsuffix>2si\t{%1, %0|%0, %1}" [(set_attr "type" "sseicvt") (set_attr "prefix" "maybe_vex") (set_attr "mode" "<MODE>") @@ -5444,11 +5411,7 @@ "(<SSEMODEI24:MODE>mode != DImode || TARGET_64BIT) && SSE_FLOAT_MODE_P (<MODEF:MODE>mode) && TARGET_SSE_MATH && (TARGET_INTER_UNIT_CONVERSIONS || optimize_size)" - "* return TARGET_AVX - ? \"vcvtsi2s<MODEF:ssemodefsuffix><SSEMODEI24:rex64suffix>\t\" - \"{%1, %0, %0|%0, %0, %1}\" - : \"cvtsi2s<MODEF:ssemodefsuffix><SSEMODEI24:rex64suffix>\t\" - \"{%1, %0|%0, %1}\";" + "%vcvtsi2s<MODEF:ssemodefsuffix><SSEMODEI24:rex64suffix>\t{%1, %d0|%d0, %1}" [(set_attr "type" "sseicvt") (set_attr "prefix" "maybe_vex") (set_attr "mode" "<MODEF:MODE>") @@ -16196,8 +16159,7 @@ (unspec:SF [(match_operand:SF 1 "nonimmediate_operand" "xm")] UNSPEC_RCP))] "TARGET_SSE_MATH" - "* return TARGET_AVX ? \"vrcpss\t{%1, %0, %0|%0, %0, %1}\" - : \"rcpss\t{%1, %0|%0, %1}\";" + "%vrcpss\t{%1, %d0|%d0, %1}" [(set_attr "type" "sse") (set_attr "prefix" "maybe_vex") (set_attr "mode" "SF")]) @@ -16774,8 +16736,7 @@ (unspec:SF [(match_operand:SF 1 "nonimmediate_operand" "xm")] UNSPEC_RSQRT))] "TARGET_SSE_MATH" - "* return TARGET_AVX ? \"vrsqrtss\t{%1, %0, %0|%0, %0, %1}\" - : \"rsqrtss\t{%1, %0|%0, %1}\";" + "%vrsqrtss\t{%1, %d0|%d0, %1}" [(set_attr "type" "sse") (set_attr "prefix" "maybe_vex") (set_attr "mode" "SF")]) @@ -16795,8 +16756,7 @@ (sqrt:MODEF (match_operand:MODEF 1 "nonimmediate_operand" "xm")))] "SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH" - "* return TARGET_AVX ? \"vsqrts<ssemodefsuffix>\t{%1, %0, %0|%0, %0, %1}\" - : \"sqrts<ssemodefsuffix>\t{%1, %0|%0, %1}\";" + "%vsqrts<ssemodefsuffix>\t{%1, %d0|%d0, %1}" [(set_attr "type" "sse") (set_attr "mode" "<MODE>") (set_attr "prefix" "maybe_vex") @@ -17854,8 +17814,7 @@ (match_operand:SI 2 "const_0_to_15_operand" "n")] UNSPEC_ROUND))] "TARGET_ROUND" - "* return TARGET_AVX ? \"vrounds<ssemodefsuffix>\t{%2, %1, %0, %0|%0, %0, %1, %2}\" - : \"rounds<ssemodefsuffix>\t{%2, %1, %0|%0, %1, %2}\";" + "%vrounds<ssemodefsuffix>\t{%2, %1, %d0|%d0, %1, %2}" [(set_attr "type" "ssecvt") (set_attr "prefix_extra" "1") (set_attr "prefix" "maybe_vex") |