Deleted Added
full compact
i386.c (219374) i386.c (219639)
1/* Subroutines used for code generation on IA-32.
2 Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
3 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by

--- 5 unchanged lines hidden (view full) ---

14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING. If not, write to
19the Free Software Foundation, 51 Franklin Street, Fifth Floor,
20Boston, MA 02110-1301, USA. */
21
1/* Subroutines used for code generation on IA-32.
2 Copyright (C) 1988, 1992, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
3 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by

--- 5 unchanged lines hidden (view full) ---

14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING. If not, write to
19the Free Software Foundation, 51 Franklin Street, Fifth Floor,
20Boston, MA 02110-1301, USA. */
21
22/* $FreeBSD: head/contrib/gcc/config/i386/i386.c 219374 2011-03-07 14:48:22Z mm $ */
22/* $FreeBSD: head/contrib/gcc/config/i386/i386.c 219639 2011-03-14 13:31:34Z mm $ */
23
24#include "config.h"
25#include "system.h"
26#include "coretypes.h"
27#include "tm.h"
28#include "rtl.h"
29#include "tree.h"
30#include "tm_p.h"

--- 1475 unchanged lines hidden (view full) ---

1506 target_flags &= ~(MASK_3DNOW | MASK_3DNOW_A);
1507 target_flags_explicit |= MASK_3DNOW | MASK_3DNOW_A;
1508 }
1509 return true;
1510
1511 case OPT_msse:
1512 if (!value)
1513 {
23
24#include "config.h"
25#include "system.h"
26#include "coretypes.h"
27#include "tm.h"
28#include "rtl.h"
29#include "tree.h"
30#include "tm_p.h"

--- 1475 unchanged lines hidden (view full) ---

1506 target_flags &= ~(MASK_3DNOW | MASK_3DNOW_A);
1507 target_flags_explicit |= MASK_3DNOW | MASK_3DNOW_A;
1508 }
1509 return true;
1510
1511 case OPT_msse:
1512 if (!value)
1513 {
1514 target_flags &= ~(MASK_SSE2 | MASK_SSE3);
1515 target_flags_explicit |= MASK_SSE2 | MASK_SSE3;
1514 target_flags &= ~(MASK_SSE2 | MASK_SSE3 | MASK_SSSE3);
1515 target_flags_explicit |= MASK_SSE2 | MASK_SSE3 | MASK_SSSE3;
1516 }
1517 return true;
1518
1519 case OPT_msse2:
1520 if (!value)
1521 {
1516 }
1517 return true;
1518
1519 case OPT_msse2:
1520 if (!value)
1521 {
1522 target_flags &= ~MASK_SSE3;
1523 target_flags_explicit |= MASK_SSE3;
1522 target_flags &= ~(MASK_SSE3 | MASK_SSSE3);
1523 target_flags_explicit |= MASK_SSE3 | MASK_SSSE3;
1524 }
1525 return true;
1526
1524 }
1525 return true;
1526
1527 case OPT_msse3:
1528 if (!value)
1529 {
1530 target_flags &= ~MASK_SSSE3;
1531 target_flags_explicit |= MASK_SSSE3;
1532 }
1533 return true;
1534
1527 default:
1528 return true;
1529 }
1530}
1531
1532/* Sometimes certain combinations of command options do not make
1533 sense on a particular target machine. You can define a macro
1534 `OVERRIDE_OPTIONS' to take account of this. This macro, if

--- 49 unchanged lines hidden (view full) ---

1584 {
1585 PTA_SSE = 1,
1586 PTA_SSE2 = 2,
1587 PTA_SSE3 = 4,
1588 PTA_MMX = 8,
1589 PTA_PREFETCH_SSE = 16,
1590 PTA_3DNOW = 32,
1591 PTA_3DNOW_A = 64,
1535 default:
1536 return true;
1537 }
1538}
1539
1540/* Sometimes certain combinations of command options do not make
1541 sense on a particular target machine. You can define a macro
1542 `OVERRIDE_OPTIONS' to take account of this. This macro, if

--- 49 unchanged lines hidden (view full) ---

1592 {
1593 PTA_SSE = 1,
1594 PTA_SSE2 = 2,
1595 PTA_SSE3 = 4,
1596 PTA_MMX = 8,
1597 PTA_PREFETCH_SSE = 16,
1598 PTA_3DNOW = 32,
1599 PTA_3DNOW_A = 64,
1592 PTA_64BIT = 128
1600 PTA_64BIT = 128,
1601 PTA_SSSE3 = 256
1593 } flags;
1594 }
1595 const processor_alias_table[] =
1596 {
1597 {"i386", PROCESSOR_I386, 0},
1598 {"i486", PROCESSOR_I486, 0},
1599 {"i586", PROCESSOR_PENTIUM, 0},
1600 {"pentium", PROCESSOR_PENTIUM, 0},

--- 11 unchanged lines hidden (view full) ---

1612 {"pentium4", PROCESSOR_PENTIUM4, PTA_SSE | PTA_SSE2
1613 | PTA_MMX | PTA_PREFETCH_SSE},
1614 {"pentium4m", PROCESSOR_PENTIUM4, PTA_SSE | PTA_SSE2
1615 | PTA_MMX | PTA_PREFETCH_SSE},
1616 {"prescott", PROCESSOR_NOCONA, PTA_SSE | PTA_SSE2 | PTA_SSE3
1617 | PTA_MMX | PTA_PREFETCH_SSE},
1618 {"nocona", PROCESSOR_NOCONA, PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_64BIT
1619 | PTA_MMX | PTA_PREFETCH_SSE},
1602 } flags;
1603 }
1604 const processor_alias_table[] =
1605 {
1606 {"i386", PROCESSOR_I386, 0},
1607 {"i486", PROCESSOR_I486, 0},
1608 {"i586", PROCESSOR_PENTIUM, 0},
1609 {"pentium", PROCESSOR_PENTIUM, 0},

--- 11 unchanged lines hidden (view full) ---

1621 {"pentium4", PROCESSOR_PENTIUM4, PTA_SSE | PTA_SSE2
1622 | PTA_MMX | PTA_PREFETCH_SSE},
1623 {"pentium4m", PROCESSOR_PENTIUM4, PTA_SSE | PTA_SSE2
1624 | PTA_MMX | PTA_PREFETCH_SSE},
1625 {"prescott", PROCESSOR_NOCONA, PTA_SSE | PTA_SSE2 | PTA_SSE3
1626 | PTA_MMX | PTA_PREFETCH_SSE},
1627 {"nocona", PROCESSOR_NOCONA, PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_64BIT
1628 | PTA_MMX | PTA_PREFETCH_SSE},
1620 {"core2", PROCESSOR_CORE2, PTA_SSE | PTA_SSE2 | PTA_SSE3
1629 {"core2", PROCESSOR_CORE2, PTA_SSE | PTA_SSE2 | PTA_SSE3 | PTA_SSSE3
1621 | PTA_64BIT | PTA_MMX
1622 | PTA_PREFETCH_SSE},
1623 {"geode", PROCESSOR_GEODE, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW
1624 | PTA_3DNOW_A},
1625 {"k6", PROCESSOR_K6, PTA_MMX},
1626 {"k6-2", PROCESSOR_K6, PTA_MMX | PTA_3DNOW},
1627 {"k6-3", PROCESSOR_K6, PTA_MMX | PTA_3DNOW},
1628 {"athlon", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW

--- 177 unchanged lines hidden (view full) ---

1806 && !(target_flags_explicit & MASK_SSE))
1807 target_flags |= MASK_SSE;
1808 if (processor_alias_table[i].flags & PTA_SSE2
1809 && !(target_flags_explicit & MASK_SSE2))
1810 target_flags |= MASK_SSE2;
1811 if (processor_alias_table[i].flags & PTA_SSE3
1812 && !(target_flags_explicit & MASK_SSE3))
1813 target_flags |= MASK_SSE3;
1630 | PTA_64BIT | PTA_MMX
1631 | PTA_PREFETCH_SSE},
1632 {"geode", PROCESSOR_GEODE, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW
1633 | PTA_3DNOW_A},
1634 {"k6", PROCESSOR_K6, PTA_MMX},
1635 {"k6-2", PROCESSOR_K6, PTA_MMX | PTA_3DNOW},
1636 {"k6-3", PROCESSOR_K6, PTA_MMX | PTA_3DNOW},
1637 {"athlon", PROCESSOR_ATHLON, PTA_MMX | PTA_PREFETCH_SSE | PTA_3DNOW

--- 177 unchanged lines hidden (view full) ---

1815 && !(target_flags_explicit & MASK_SSE))
1816 target_flags |= MASK_SSE;
1817 if (processor_alias_table[i].flags & PTA_SSE2
1818 && !(target_flags_explicit & MASK_SSE2))
1819 target_flags |= MASK_SSE2;
1820 if (processor_alias_table[i].flags & PTA_SSE3
1821 && !(target_flags_explicit & MASK_SSE3))
1822 target_flags |= MASK_SSE3;
1823 if (processor_alias_table[i].flags & PTA_SSSE3
1824 && !(target_flags_explicit & MASK_SSSE3))
1825 target_flags |= MASK_SSSE3;
1814 if (processor_alias_table[i].flags & PTA_PREFETCH_SSE)
1815 x86_prefetch_sse = true;
1816 if (TARGET_64BIT && !(processor_alias_table[i].flags & PTA_64BIT))
1817 error ("CPU you selected does not support x86-64 "
1818 "instruction set");
1819 break;
1820 }
1821

--- 160 unchanged lines hidden (view full) ---

1982 if (x86_arch_always_fancy_math_387 & (1 << ix86_arch))
1983 target_flags &= ~MASK_NO_FANCY_MATH_387;
1984
1985 /* Likewise, if the target doesn't have a 387, or we've specified
1986 software floating point, don't use 387 inline intrinsics. */
1987 if (!TARGET_80387)
1988 target_flags |= MASK_NO_FANCY_MATH_387;
1989
1826 if (processor_alias_table[i].flags & PTA_PREFETCH_SSE)
1827 x86_prefetch_sse = true;
1828 if (TARGET_64BIT && !(processor_alias_table[i].flags & PTA_64BIT))
1829 error ("CPU you selected does not support x86-64 "
1830 "instruction set");
1831 break;
1832 }
1833

--- 160 unchanged lines hidden (view full) ---

1994 if (x86_arch_always_fancy_math_387 & (1 << ix86_arch))
1995 target_flags &= ~MASK_NO_FANCY_MATH_387;
1996
1997 /* Likewise, if the target doesn't have a 387, or we've specified
1998 software floating point, don't use 387 inline intrinsics. */
1999 if (!TARGET_80387)
2000 target_flags |= MASK_NO_FANCY_MATH_387;
2001
2002 /* Turn on SSE3 builtins for -mssse3. */
2003 if (TARGET_SSSE3)
2004 target_flags |= MASK_SSE3;
2005
1990 /* Turn on SSE2 builtins for -msse3. */
1991 if (TARGET_SSE3)
1992 target_flags |= MASK_SSE2;
1993
1994 /* Turn on SSE builtins for -msse2. */
1995 if (TARGET_SSE2)
1996 target_flags |= MASK_SSE;
1997

--- 12690 unchanged lines hidden (view full) ---

14688 IX86_BUILTIN_ADDSUBPD,
14689 IX86_BUILTIN_HADDPD,
14690 IX86_BUILTIN_HSUBPD,
14691 IX86_BUILTIN_LDDQU,
14692
14693 IX86_BUILTIN_MONITOR,
14694 IX86_BUILTIN_MWAIT,
14695
2006 /* Turn on SSE2 builtins for -msse3. */
2007 if (TARGET_SSE3)
2008 target_flags |= MASK_SSE2;
2009
2010 /* Turn on SSE builtins for -msse2. */
2011 if (TARGET_SSE2)
2012 target_flags |= MASK_SSE;
2013

--- 12690 unchanged lines hidden (view full) ---

14704 IX86_BUILTIN_ADDSUBPD,
14705 IX86_BUILTIN_HADDPD,
14706 IX86_BUILTIN_HSUBPD,
14707 IX86_BUILTIN_LDDQU,
14708
14709 IX86_BUILTIN_MONITOR,
14710 IX86_BUILTIN_MWAIT,
14711
14712 /* SSSE3. */
14713 IX86_BUILTIN_PHADDW,
14714 IX86_BUILTIN_PHADDD,
14715 IX86_BUILTIN_PHADDSW,
14716 IX86_BUILTIN_PHSUBW,
14717 IX86_BUILTIN_PHSUBD,
14718 IX86_BUILTIN_PHSUBSW,
14719 IX86_BUILTIN_PMADDUBSW,
14720 IX86_BUILTIN_PMULHRSW,
14721 IX86_BUILTIN_PSHUFB,
14722 IX86_BUILTIN_PSIGNB,
14723 IX86_BUILTIN_PSIGNW,
14724 IX86_BUILTIN_PSIGND,
14725 IX86_BUILTIN_PALIGNR,
14726 IX86_BUILTIN_PABSB,
14727 IX86_BUILTIN_PABSW,
14728 IX86_BUILTIN_PABSD,
14729
14730 IX86_BUILTIN_PHADDW128,
14731 IX86_BUILTIN_PHADDD128,
14732 IX86_BUILTIN_PHADDSW128,
14733 IX86_BUILTIN_PHSUBW128,
14734 IX86_BUILTIN_PHSUBD128,
14735 IX86_BUILTIN_PHSUBSW128,
14736 IX86_BUILTIN_PMADDUBSW128,
14737 IX86_BUILTIN_PMULHRSW128,
14738 IX86_BUILTIN_PSHUFB128,
14739 IX86_BUILTIN_PSIGNB128,
14740 IX86_BUILTIN_PSIGNW128,
14741 IX86_BUILTIN_PSIGND128,
14742 IX86_BUILTIN_PALIGNR128,
14743 IX86_BUILTIN_PABSB128,
14744 IX86_BUILTIN_PABSW128,
14745 IX86_BUILTIN_PABSD128,
14746
14696 IX86_BUILTIN_VEC_INIT_V2SI,
14697 IX86_BUILTIN_VEC_INIT_V4HI,
14698 IX86_BUILTIN_VEC_INIT_V8QI,
14699 IX86_BUILTIN_VEC_EXT_V2DF,
14700 IX86_BUILTIN_VEC_EXT_V2DI,
14701 IX86_BUILTIN_VEC_EXT_V4SF,
14702 IX86_BUILTIN_VEC_EXT_V4SI,
14703 IX86_BUILTIN_VEC_EXT_V8HI,

--- 325 unchanged lines hidden (view full) ---

15029 { MASK_SSE2, CODE_FOR_sse2_cvtss2sd, 0, IX86_BUILTIN_CVTSS2SD, 0, 0 },
15030
15031 /* SSE3 MMX */
15032 { MASK_SSE3, CODE_FOR_sse3_addsubv4sf3, "__builtin_ia32_addsubps", IX86_BUILTIN_ADDSUBPS, 0, 0 },
15033 { MASK_SSE3, CODE_FOR_sse3_addsubv2df3, "__builtin_ia32_addsubpd", IX86_BUILTIN_ADDSUBPD, 0, 0 },
15034 { MASK_SSE3, CODE_FOR_sse3_haddv4sf3, "__builtin_ia32_haddps", IX86_BUILTIN_HADDPS, 0, 0 },
15035 { MASK_SSE3, CODE_FOR_sse3_haddv2df3, "__builtin_ia32_haddpd", IX86_BUILTIN_HADDPD, 0, 0 },
15036 { MASK_SSE3, CODE_FOR_sse3_hsubv4sf3, "__builtin_ia32_hsubps", IX86_BUILTIN_HSUBPS, 0, 0 },
14747 IX86_BUILTIN_VEC_INIT_V2SI,
14748 IX86_BUILTIN_VEC_INIT_V4HI,
14749 IX86_BUILTIN_VEC_INIT_V8QI,
14750 IX86_BUILTIN_VEC_EXT_V2DF,
14751 IX86_BUILTIN_VEC_EXT_V2DI,
14752 IX86_BUILTIN_VEC_EXT_V4SF,
14753 IX86_BUILTIN_VEC_EXT_V4SI,
14754 IX86_BUILTIN_VEC_EXT_V8HI,

--- 325 unchanged lines hidden (view full) ---

15080 { MASK_SSE2, CODE_FOR_sse2_cvtss2sd, 0, IX86_BUILTIN_CVTSS2SD, 0, 0 },
15081
15082 /* SSE3 MMX */
15083 { MASK_SSE3, CODE_FOR_sse3_addsubv4sf3, "__builtin_ia32_addsubps", IX86_BUILTIN_ADDSUBPS, 0, 0 },
15084 { MASK_SSE3, CODE_FOR_sse3_addsubv2df3, "__builtin_ia32_addsubpd", IX86_BUILTIN_ADDSUBPD, 0, 0 },
15085 { MASK_SSE3, CODE_FOR_sse3_haddv4sf3, "__builtin_ia32_haddps", IX86_BUILTIN_HADDPS, 0, 0 },
15086 { MASK_SSE3, CODE_FOR_sse3_haddv2df3, "__builtin_ia32_haddpd", IX86_BUILTIN_HADDPD, 0, 0 },
15087 { MASK_SSE3, CODE_FOR_sse3_hsubv4sf3, "__builtin_ia32_hsubps", IX86_BUILTIN_HSUBPS, 0, 0 },
15037 { MASK_SSE3, CODE_FOR_sse3_hsubv2df3, "__builtin_ia32_hsubpd", IX86_BUILTIN_HSUBPD, 0, 0 }
15088 { MASK_SSE3, CODE_FOR_sse3_hsubv2df3, "__builtin_ia32_hsubpd", IX86_BUILTIN_HSUBPD, 0, 0 },
15089
15090 /* SSSE3 */
15091 { MASK_SSSE3, CODE_FOR_ssse3_phaddwv8hi3, "__builtin_ia32_phaddw128", IX86_BUILTIN_PHADDW128, 0, 0 },
15092 { MASK_SSSE3, CODE_FOR_ssse3_phaddwv4hi3, "__builtin_ia32_phaddw", IX86_BUILTIN_PHADDW, 0, 0 },
15093 { MASK_SSSE3, CODE_FOR_ssse3_phadddv4si3, "__builtin_ia32_phaddd128", IX86_BUILTIN_PHADDD128, 0, 0 },
15094 { MASK_SSSE3, CODE_FOR_ssse3_phadddv2si3, "__builtin_ia32_phaddd", IX86_BUILTIN_PHADDD, 0, 0 },
15095 { MASK_SSSE3, CODE_FOR_ssse3_phaddswv8hi3, "__builtin_ia32_phaddsw128", IX86_BUILTIN_PHADDSW128, 0, 0 },
15096 { MASK_SSSE3, CODE_FOR_ssse3_phaddswv4hi3, "__builtin_ia32_phaddsw", IX86_BUILTIN_PHADDSW, 0, 0 },
15097 { MASK_SSSE3, CODE_FOR_ssse3_phsubwv8hi3, "__builtin_ia32_phsubw128", IX86_BUILTIN_PHSUBW128, 0, 0 },
15098 { MASK_SSSE3, CODE_FOR_ssse3_phsubwv4hi3, "__builtin_ia32_phsubw", IX86_BUILTIN_PHSUBW, 0, 0 },
15099 { MASK_SSSE3, CODE_FOR_ssse3_phsubdv4si3, "__builtin_ia32_phsubd128", IX86_BUILTIN_PHSUBD128, 0, 0 },
15100 { MASK_SSSE3, CODE_FOR_ssse3_phsubdv2si3, "__builtin_ia32_phsubd", IX86_BUILTIN_PHSUBD, 0, 0 },
15101 { MASK_SSSE3, CODE_FOR_ssse3_phsubswv8hi3, "__builtin_ia32_phsubsw128", IX86_BUILTIN_PHSUBSW128, 0, 0 },
15102 { MASK_SSSE3, CODE_FOR_ssse3_phsubswv4hi3, "__builtin_ia32_phsubsw", IX86_BUILTIN_PHSUBSW, 0, 0 },
15103 { MASK_SSSE3, CODE_FOR_ssse3_pmaddubswv8hi3, "__builtin_ia32_pmaddubsw128", IX86_BUILTIN_PMADDUBSW128, 0, 0 },
15104 { MASK_SSSE3, CODE_FOR_ssse3_pmaddubswv4hi3, "__builtin_ia32_pmaddubsw", IX86_BUILTIN_PMADDUBSW, 0, 0 },
15105 { MASK_SSSE3, CODE_FOR_ssse3_pmulhrswv8hi3, "__builtin_ia32_pmulhrsw128", IX86_BUILTIN_PMULHRSW128, 0, 0 },
15106 { MASK_SSSE3, CODE_FOR_ssse3_pmulhrswv4hi3, "__builtin_ia32_pmulhrsw", IX86_BUILTIN_PMULHRSW, 0, 0 },
15107 { MASK_SSSE3, CODE_FOR_ssse3_pshufbv16qi3, "__builtin_ia32_pshufb128", IX86_BUILTIN_PSHUFB128, 0, 0 },
15108 { MASK_SSSE3, CODE_FOR_ssse3_pshufbv8qi3, "__builtin_ia32_pshufb", IX86_BUILTIN_PSHUFB, 0, 0 },
15109 { MASK_SSSE3, CODE_FOR_ssse3_psignv16qi3, "__builtin_ia32_psignb128", IX86_BUILTIN_PSIGNB128, 0, 0 },
15110 { MASK_SSSE3, CODE_FOR_ssse3_psignv8qi3, "__builtin_ia32_psignb", IX86_BUILTIN_PSIGNB, 0, 0 },
15111 { MASK_SSSE3, CODE_FOR_ssse3_psignv8hi3, "__builtin_ia32_psignw128", IX86_BUILTIN_PSIGNW128, 0, 0 },
15112 { MASK_SSSE3, CODE_FOR_ssse3_psignv4hi3, "__builtin_ia32_psignw", IX86_BUILTIN_PSIGNW, 0, 0 },
15113 { MASK_SSSE3, CODE_FOR_ssse3_psignv4si3, "__builtin_ia32_psignd128", IX86_BUILTIN_PSIGND128, 0, 0 },
15114 { MASK_SSSE3, CODE_FOR_ssse3_psignv2si3, "__builtin_ia32_psignd", IX86_BUILTIN_PSIGND, 0, 0 }
15038};
15039
15040static const struct builtin_description bdesc_1arg[] =
15041{
15042 { MASK_SSE | MASK_3DNOW_A, CODE_FOR_mmx_pmovmskb, 0, IX86_BUILTIN_PMOVMSKB, 0, 0 },
15043 { MASK_SSE, CODE_FOR_sse_movmskps, 0, IX86_BUILTIN_MOVMSKPS, 0, 0 },
15044
15045 { MASK_SSE, CODE_FOR_sqrtv4sf2, 0, IX86_BUILTIN_SQRTPS, 0, 0 },

--- 30 unchanged lines hidden (view full) ---

15076
15077 { MASK_SSE2, CODE_FOR_sse2_cvtps2dq, 0, IX86_BUILTIN_CVTPS2DQ, 0, 0 },
15078 { MASK_SSE2, CODE_FOR_sse2_cvtps2pd, 0, IX86_BUILTIN_CVTPS2PD, 0, 0 },
15079 { MASK_SSE2, CODE_FOR_sse2_cvttps2dq, 0, IX86_BUILTIN_CVTTPS2DQ, 0, 0 },
15080
15081 /* SSE3 */
15082 { MASK_SSE3, CODE_FOR_sse3_movshdup, 0, IX86_BUILTIN_MOVSHDUP, 0, 0 },
15083 { MASK_SSE3, CODE_FOR_sse3_movsldup, 0, IX86_BUILTIN_MOVSLDUP, 0, 0 },
15115};
15116
15117static const struct builtin_description bdesc_1arg[] =
15118{
15119 { MASK_SSE | MASK_3DNOW_A, CODE_FOR_mmx_pmovmskb, 0, IX86_BUILTIN_PMOVMSKB, 0, 0 },
15120 { MASK_SSE, CODE_FOR_sse_movmskps, 0, IX86_BUILTIN_MOVMSKPS, 0, 0 },
15121
15122 { MASK_SSE, CODE_FOR_sqrtv4sf2, 0, IX86_BUILTIN_SQRTPS, 0, 0 },

--- 30 unchanged lines hidden (view full) ---

15153
15154 { MASK_SSE2, CODE_FOR_sse2_cvtps2dq, 0, IX86_BUILTIN_CVTPS2DQ, 0, 0 },
15155 { MASK_SSE2, CODE_FOR_sse2_cvtps2pd, 0, IX86_BUILTIN_CVTPS2PD, 0, 0 },
15156 { MASK_SSE2, CODE_FOR_sse2_cvttps2dq, 0, IX86_BUILTIN_CVTTPS2DQ, 0, 0 },
15157
15158 /* SSE3 */
15159 { MASK_SSE3, CODE_FOR_sse3_movshdup, 0, IX86_BUILTIN_MOVSHDUP, 0, 0 },
15160 { MASK_SSE3, CODE_FOR_sse3_movsldup, 0, IX86_BUILTIN_MOVSLDUP, 0, 0 },
15161
15162 /* SSSE3 */
15163 { MASK_SSSE3, CODE_FOR_absv16qi2, "__builtin_ia32_pabsb128", IX86_BUILTIN_PABSB128, 0, 0 },
15164 { MASK_SSSE3, CODE_FOR_absv8qi2, "__builtin_ia32_pabsb", IX86_BUILTIN_PABSB, 0, 0 },
15165 { MASK_SSSE3, CODE_FOR_absv8hi2, "__builtin_ia32_pabsw128", IX86_BUILTIN_PABSW128, 0, 0 },
15166 { MASK_SSSE3, CODE_FOR_absv4hi2, "__builtin_ia32_pabsw", IX86_BUILTIN_PABSW, 0, 0 },
15167 { MASK_SSSE3, CODE_FOR_absv4si2, "__builtin_ia32_pabsd128", IX86_BUILTIN_PABSD128, 0, 0 },
15168 { MASK_SSSE3, CODE_FOR_absv2si2, "__builtin_ia32_pabsd", IX86_BUILTIN_PABSD, 0, 0 },
15084};
15085
15086static void
15087ix86_init_builtins (void)
15088{
15089 if (TARGET_MMX)
15090 ix86_init_mmx_sse_builtins ();
15091}

--- 118 unchanged lines hidden (view full) ---

15210 pdi_type_node, long_long_unsigned_type_node,
15211 NULL_TREE);
15212 tree void_ftype_pv2di_v2di
15213 = build_function_type_list (void_type_node,
15214 pv2di_type_node, V2DI_type_node, NULL_TREE);
15215 /* Normal vector unops. */
15216 tree v4sf_ftype_v4sf
15217 = build_function_type_list (V4SF_type_node, V4SF_type_node, NULL_TREE);
15169};
15170
15171static void
15172ix86_init_builtins (void)
15173{
15174 if (TARGET_MMX)
15175 ix86_init_mmx_sse_builtins ();
15176}

--- 118 unchanged lines hidden (view full) ---

15295 pdi_type_node, long_long_unsigned_type_node,
15296 NULL_TREE);
15297 tree void_ftype_pv2di_v2di
15298 = build_function_type_list (void_type_node,
15299 pv2di_type_node, V2DI_type_node, NULL_TREE);
15300 /* Normal vector unops. */
15301 tree v4sf_ftype_v4sf
15302 = build_function_type_list (V4SF_type_node, V4SF_type_node, NULL_TREE);
15303 tree v16qi_ftype_v16qi
15304 = build_function_type_list (V16QI_type_node, V16QI_type_node, NULL_TREE);
15305 tree v8hi_ftype_v8hi
15306 = build_function_type_list (V8HI_type_node, V8HI_type_node, NULL_TREE);
15307 tree v4si_ftype_v4si
15308 = build_function_type_list (V4SI_type_node, V4SI_type_node, NULL_TREE);
15309 tree v8qi_ftype_v8qi
15310 = build_function_type_list (V8QI_type_node, V8QI_type_node, NULL_TREE);
15311 tree v4hi_ftype_v4hi
15312 = build_function_type_list (V4HI_type_node, V4HI_type_node, NULL_TREE);
15218
15219 /* Normal vector binops. */
15220 tree v4sf_ftype_v4sf_v4sf
15221 = build_function_type_list (V4SF_type_node,
15222 V4SF_type_node, V4SF_type_node, NULL_TREE);
15223 tree v8qi_ftype_v8qi_v8qi
15224 = build_function_type_list (V8QI_type_node,
15225 V8QI_type_node, V8QI_type_node, NULL_TREE);
15226 tree v4hi_ftype_v4hi_v4hi
15227 = build_function_type_list (V4HI_type_node,
15228 V4HI_type_node, V4HI_type_node, NULL_TREE);
15229 tree v2si_ftype_v2si_v2si
15230 = build_function_type_list (V2SI_type_node,
15231 V2SI_type_node, V2SI_type_node, NULL_TREE);
15232 tree di_ftype_di_di
15233 = build_function_type_list (long_long_unsigned_type_node,
15234 long_long_unsigned_type_node,
15235 long_long_unsigned_type_node, NULL_TREE);
15236
15313
15314 /* Normal vector binops. */
15315 tree v4sf_ftype_v4sf_v4sf
15316 = build_function_type_list (V4SF_type_node,
15317 V4SF_type_node, V4SF_type_node, NULL_TREE);
15318 tree v8qi_ftype_v8qi_v8qi
15319 = build_function_type_list (V8QI_type_node,
15320 V8QI_type_node, V8QI_type_node, NULL_TREE);
15321 tree v4hi_ftype_v4hi_v4hi
15322 = build_function_type_list (V4HI_type_node,
15323 V4HI_type_node, V4HI_type_node, NULL_TREE);
15324 tree v2si_ftype_v2si_v2si
15325 = build_function_type_list (V2SI_type_node,
15326 V2SI_type_node, V2SI_type_node, NULL_TREE);
15327 tree di_ftype_di_di
15328 = build_function_type_list (long_long_unsigned_type_node,
15329 long_long_unsigned_type_node,
15330 long_long_unsigned_type_node, NULL_TREE);
15331
15332 tree di_ftype_di_di_int
15333 = build_function_type_list (long_long_unsigned_type_node,
15334 long_long_unsigned_type_node,
15335 long_long_unsigned_type_node,
15336 integer_type_node, NULL_TREE);
15337
15237 tree v2si_ftype_v2sf
15238 = build_function_type_list (V2SI_type_node, V2SF_type_node, NULL_TREE);
15239 tree v2sf_ftype_v2si
15240 = build_function_type_list (V2SF_type_node, V2SI_type_node, NULL_TREE);
15241 tree v2si_ftype_v2si
15242 = build_function_type_list (V2SI_type_node, V2SI_type_node, NULL_TREE);
15243 tree v2sf_ftype_v2sf
15244 = build_function_type_list (V2SF_type_node, V2SF_type_node, NULL_TREE);

--- 85 unchanged lines hidden (view full) ---

15330 tree v2di_ftype_v2df_v2df
15331 = build_function_type_list (V2DI_type_node,
15332 V2DF_type_node, V2DF_type_node, NULL_TREE);
15333 tree v2df_ftype_v2df
15334 = build_function_type_list (V2DF_type_node, V2DF_type_node, NULL_TREE);
15335 tree v2di_ftype_v2di_int
15336 = build_function_type_list (V2DI_type_node,
15337 V2DI_type_node, integer_type_node, NULL_TREE);
15338 tree v2si_ftype_v2sf
15339 = build_function_type_list (V2SI_type_node, V2SF_type_node, NULL_TREE);
15340 tree v2sf_ftype_v2si
15341 = build_function_type_list (V2SF_type_node, V2SI_type_node, NULL_TREE);
15342 tree v2si_ftype_v2si
15343 = build_function_type_list (V2SI_type_node, V2SI_type_node, NULL_TREE);
15344 tree v2sf_ftype_v2sf
15345 = build_function_type_list (V2SF_type_node, V2SF_type_node, NULL_TREE);

--- 85 unchanged lines hidden (view full) ---

15431 tree v2di_ftype_v2df_v2df
15432 = build_function_type_list (V2DI_type_node,
15433 V2DF_type_node, V2DF_type_node, NULL_TREE);
15434 tree v2df_ftype_v2df
15435 = build_function_type_list (V2DF_type_node, V2DF_type_node, NULL_TREE);
15436 tree v2di_ftype_v2di_int
15437 = build_function_type_list (V2DI_type_node,
15438 V2DI_type_node, integer_type_node, NULL_TREE);
15439 tree v2di_ftype_v2di_v2di_int
15440 = build_function_type_list (V2DI_type_node, V2DI_type_node,
15441 V2DI_type_node, integer_type_node, NULL_TREE);
15338 tree v4si_ftype_v4si_int
15339 = build_function_type_list (V4SI_type_node,
15340 V4SI_type_node, integer_type_node, NULL_TREE);
15341 tree v8hi_ftype_v8hi_int
15342 = build_function_type_list (V8HI_type_node,
15343 V8HI_type_node, integer_type_node, NULL_TREE);
15344 tree v4si_ftype_v8hi_v8hi
15345 = build_function_type_list (V4SI_type_node,

--- 100 unchanged lines hidden (view full) ---

15446
15447 if (d->icode == CODE_FOR_sse2_maskcmpv2df3
15448 || d->icode == CODE_FOR_sse2_vmmaskcmpv2df3)
15449 type = v2di_ftype_v2df_v2df;
15450
15451 def_builtin (d->mask, d->name, type, d->code);
15452 }
15453
15442 tree v4si_ftype_v4si_int
15443 = build_function_type_list (V4SI_type_node,
15444 V4SI_type_node, integer_type_node, NULL_TREE);
15445 tree v8hi_ftype_v8hi_int
15446 = build_function_type_list (V8HI_type_node,
15447 V8HI_type_node, integer_type_node, NULL_TREE);
15448 tree v4si_ftype_v8hi_v8hi
15449 = build_function_type_list (V4SI_type_node,

--- 100 unchanged lines hidden (view full) ---

15550
15551 if (d->icode == CODE_FOR_sse2_maskcmpv2df3
15552 || d->icode == CODE_FOR_sse2_vmmaskcmpv2df3)
15553 type = v2di_ftype_v2df_v2df;
15554
15555 def_builtin (d->mask, d->name, type, d->code);
15556 }
15557
15558 /* Add all builtins that are more or less simple operations on 1 operand. */
15559 for (i = 0, d = bdesc_1arg; i < ARRAY_SIZE (bdesc_1arg); i++, d++)
15560 {
15561 enum machine_mode mode;
15562 tree type;
15563
15564 if (d->name == 0)
15565 continue;
15566 mode = insn_data[d->icode].operand[1].mode;
15567
15568 switch (mode)
15569 {
15570 case V16QImode:
15571 type = v16qi_ftype_v16qi;
15572 break;
15573 case V8HImode:
15574 type = v8hi_ftype_v8hi;
15575 break;
15576 case V4SImode:
15577 type = v4si_ftype_v4si;
15578 break;
15579 case V2DFmode:
15580 type = v2df_ftype_v2df;
15581 break;
15582 case V4SFmode:
15583 type = v4sf_ftype_v4sf;
15584 break;
15585 case V8QImode:
15586 type = v8qi_ftype_v8qi;
15587 break;
15588 case V4HImode:
15589 type = v4hi_ftype_v4hi;
15590 break;
15591 case V2SImode:
15592 type = v2si_ftype_v2si;
15593 break;
15594
15595 default:
15596 abort ();
15597 }
15598
15599 def_builtin (d->mask, d->name, type, d->code);
15600 }
15601
15454 /* Add the remaining MMX insns with somewhat more complicated types. */
15455 def_builtin (MASK_MMX, "__builtin_ia32_emms", void_ftype_void, IX86_BUILTIN_EMMS);
15456 def_builtin (MASK_MMX, "__builtin_ia32_psllw", v4hi_ftype_v4hi_di, IX86_BUILTIN_PSLLW);
15457 def_builtin (MASK_MMX, "__builtin_ia32_pslld", v2si_ftype_v2si_di, IX86_BUILTIN_PSLLD);
15458 def_builtin (MASK_MMX, "__builtin_ia32_psllq", di_ftype_di_di, IX86_BUILTIN_PSLLQ);
15459
15460 def_builtin (MASK_MMX, "__builtin_ia32_psrlw", v4hi_ftype_v4hi_di, IX86_BUILTIN_PSRLW);
15461 def_builtin (MASK_MMX, "__builtin_ia32_psrld", v2si_ftype_v2si_di, IX86_BUILTIN_PSRLD);

--- 183 unchanged lines hidden (view full) ---

15645 v4sf_ftype_v4sf,
15646 IX86_BUILTIN_MOVSHDUP);
15647 def_builtin (MASK_SSE3, "__builtin_ia32_movsldup",
15648 v4sf_ftype_v4sf,
15649 IX86_BUILTIN_MOVSLDUP);
15650 def_builtin (MASK_SSE3, "__builtin_ia32_lddqu",
15651 v16qi_ftype_pcchar, IX86_BUILTIN_LDDQU);
15652
15602 /* Add the remaining MMX insns with somewhat more complicated types. */
15603 def_builtin (MASK_MMX, "__builtin_ia32_emms", void_ftype_void, IX86_BUILTIN_EMMS);
15604 def_builtin (MASK_MMX, "__builtin_ia32_psllw", v4hi_ftype_v4hi_di, IX86_BUILTIN_PSLLW);
15605 def_builtin (MASK_MMX, "__builtin_ia32_pslld", v2si_ftype_v2si_di, IX86_BUILTIN_PSLLD);
15606 def_builtin (MASK_MMX, "__builtin_ia32_psllq", di_ftype_di_di, IX86_BUILTIN_PSLLQ);
15607
15608 def_builtin (MASK_MMX, "__builtin_ia32_psrlw", v4hi_ftype_v4hi_di, IX86_BUILTIN_PSRLW);
15609 def_builtin (MASK_MMX, "__builtin_ia32_psrld", v2si_ftype_v2si_di, IX86_BUILTIN_PSRLD);

--- 183 unchanged lines hidden (view full) ---

15793 v4sf_ftype_v4sf,
15794 IX86_BUILTIN_MOVSHDUP);
15795 def_builtin (MASK_SSE3, "__builtin_ia32_movsldup",
15796 v4sf_ftype_v4sf,
15797 IX86_BUILTIN_MOVSLDUP);
15798 def_builtin (MASK_SSE3, "__builtin_ia32_lddqu",
15799 v16qi_ftype_pcchar, IX86_BUILTIN_LDDQU);
15800
15801 /* SSSE3. */
15802 def_builtin (MASK_SSSE3, "__builtin_ia32_palignr128",
15803 v2di_ftype_v2di_v2di_int, IX86_BUILTIN_PALIGNR128);
15804 def_builtin (MASK_SSSE3, "__builtin_ia32_palignr", di_ftype_di_di_int,
15805 IX86_BUILTIN_PALIGNR);
15806
15653 /* Access to the vec_init patterns. */
15654 ftype = build_function_type_list (V2SI_type_node, integer_type_node,
15655 integer_type_node, NULL_TREE);
15656 def_builtin (MASK_MMX, "__builtin_ia32_vec_init_v2si",
15657 ftype, IX86_BUILTIN_VEC_INIT_V2SI);
15658
15659 ftype = build_function_type_list (V4HI_type_node, short_integer_type_node,
15660 short_integer_type_node,

--- 482 unchanged lines hidden (view full) ---

16143{
16144 const struct builtin_description *d;
16145 size_t i;
16146 enum insn_code icode;
16147 tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
16148 tree arglist = TREE_OPERAND (exp, 1);
16149 tree arg0, arg1, arg2;
16150 rtx op0, op1, op2, pat;
15807 /* Access to the vec_init patterns. */
15808 ftype = build_function_type_list (V2SI_type_node, integer_type_node,
15809 integer_type_node, NULL_TREE);
15810 def_builtin (MASK_MMX, "__builtin_ia32_vec_init_v2si",
15811 ftype, IX86_BUILTIN_VEC_INIT_V2SI);
15812
15813 ftype = build_function_type_list (V4HI_type_node, short_integer_type_node,
15814 short_integer_type_node,

--- 482 unchanged lines hidden (view full) ---

16297{
16298 const struct builtin_description *d;
16299 size_t i;
16300 enum insn_code icode;
16301 tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
16302 tree arglist = TREE_OPERAND (exp, 1);
16303 tree arg0, arg1, arg2;
16304 rtx op0, op1, op2, pat;
16151 enum machine_mode tmode, mode0, mode1, mode2;
16305 enum machine_mode tmode, mode0, mode1, mode2, mode3;
16152 unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
16153
16154 switch (fcode)
16155 {
16156 case IX86_BUILTIN_EMMS:
16157 emit_insn (gen_mmx_emms ());
16158 return 0;
16159

--- 453 unchanged lines hidden (view full) ---

16613 op1 = copy_to_mode_reg (SImode, op1);
16614 emit_insn (gen_sse3_mwait (op0, op1));
16615 return 0;
16616
16617 case IX86_BUILTIN_LDDQU:
16618 return ix86_expand_unop_builtin (CODE_FOR_sse3_lddqu, arglist,
16619 target, 1);
16620
16306 unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
16307
16308 switch (fcode)
16309 {
16310 case IX86_BUILTIN_EMMS:
16311 emit_insn (gen_mmx_emms ());
16312 return 0;
16313

--- 453 unchanged lines hidden (view full) ---

16767 op1 = copy_to_mode_reg (SImode, op1);
16768 emit_insn (gen_sse3_mwait (op0, op1));
16769 return 0;
16770
16771 case IX86_BUILTIN_LDDQU:
16772 return ix86_expand_unop_builtin (CODE_FOR_sse3_lddqu, arglist,
16773 target, 1);
16774
16775 case IX86_BUILTIN_PALIGNR:
16776 case IX86_BUILTIN_PALIGNR128:
16777 if (fcode == IX86_BUILTIN_PALIGNR)
16778 {
16779 icode = CODE_FOR_ssse3_palignrdi;
16780 mode = DImode;
16781 }
16782 else
16783 {
16784 icode = CODE_FOR_ssse3_palignrti;
16785 mode = V2DImode;
16786 }
16787 arg0 = TREE_VALUE (arglist);
16788 arg1 = TREE_VALUE (TREE_CHAIN (arglist));
16789 arg2 = TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist)));
16790 op0 = expand_expr (arg0, NULL_RTX, VOIDmode, 0);
16791 op1 = expand_expr (arg1, NULL_RTX, VOIDmode, 0);
16792 op2 = expand_expr (arg2, NULL_RTX, VOIDmode, 0);
16793 tmode = insn_data[icode].operand[0].mode;
16794 mode1 = insn_data[icode].operand[1].mode;
16795 mode2 = insn_data[icode].operand[2].mode;
16796 mode3 = insn_data[icode].operand[3].mode;
16797
16798 if (! (*insn_data[icode].operand[1].predicate) (op0, mode1))
16799 {
16800 op0 = copy_to_reg (op0);
16801 op0 = simplify_gen_subreg (mode1, op0, GET_MODE (op0), 0);
16802 }
16803 if (! (*insn_data[icode].operand[2].predicate) (op1, mode2))
16804 {
16805 op1 = copy_to_reg (op1);
16806 op1 = simplify_gen_subreg (mode2, op1, GET_MODE (op1), 0);
16807 }
16808 if (! (*insn_data[icode].operand[3].predicate) (op2, mode3))
16809 {
16810 error ("shift must be an immediate");
16811 return const0_rtx;
16812 }
16813 target = gen_reg_rtx (mode);
16814 pat = GEN_FCN (icode) (simplify_gen_subreg (tmode, target, mode, 0),
16815 op0, op1, op2);
16816 if (! pat)
16817 return 0;
16818 emit_insn (pat);
16819 return target;
16820
16621 case IX86_BUILTIN_VEC_INIT_V2SI:
16622 case IX86_BUILTIN_VEC_INIT_V4HI:
16623 case IX86_BUILTIN_VEC_INIT_V8QI:
16624 return ix86_expand_vec_init_builtin (TREE_TYPE (exp), arglist, target);
16625
16626 case IX86_BUILTIN_VEC_EXT_V2DF:
16627 case IX86_BUILTIN_VEC_EXT_V2DI:
16628 case IX86_BUILTIN_VEC_EXT_V4SF:

--- 2671 unchanged lines hidden ---
16821 case IX86_BUILTIN_VEC_INIT_V2SI:
16822 case IX86_BUILTIN_VEC_INIT_V4HI:
16823 case IX86_BUILTIN_VEC_INIT_V8QI:
16824 return ix86_expand_vec_init_builtin (TREE_TYPE (exp), arglist, target);
16825
16826 case IX86_BUILTIN_VEC_EXT_V2DF:
16827 case IX86_BUILTIN_VEC_EXT_V2DI:
16828 case IX86_BUILTIN_VEC_EXT_V4SF:

--- 2671 unchanged lines hidden ---