URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [config/] [c6x/] [c6x-mult.md] - Rev 709
Compare with Previous | Blame | View Log
;; -*- buffer-read-only: t -*-;; Generated automatically from c6x-mult.md.in by genmult.sh;; Multiplication patterns for TI C6X.;; This file is processed by genmult.sh to produce two variants of each;; pattern, a normal one and a real_mult variant for modulo scheduling.;; Copyright (C) 2010, 2011 Free Software Foundation, Inc.;; Contributed by Bernd Schmidt <bernds@codesourcery.com>;; Contributed by CodeSourcery.;;;; This file is part of GCC.;;;; GCC is free software; you can redistribute it and/or modify;; it under the terms of the GNU General Public License as published by;; the Free Software Foundation; either version 3, or (at your option);; any later version.;;;; GCC is distributed in the hope that it will be useful,;; but WITHOUT ANY WARRANTY; without even the implied warranty of;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the;; GNU General Public License for more details.;;;; You should have received a copy of the GNU General Public License;; along with GCC; see the file COPYING3. If not see;; <http://www.gnu.org/licenses/>.;; -------------------------------------------------------------------------;; Miscellaneous insns that execute on the M units;; -------------------------------------------------------------------------(define_insn "rotlsi3"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(rotate:SI (match_operand:SI 1 "register_operand" "a,b,?b,?a")(match_operand:SI 2 "reg_or_ucst5_operand" "aIu5,bIu5,aIu5,bIu5")))]"TARGET_INSNS_64""%|%.\\trotl\\t%$\\t%1, %2, %0"[(set_attr "units" "m")(set_attr "type" "mpy2")(set_attr "cross" "n,n,y,y")])(define_insn "bitrevsi2"[(set (match_operand:SI 0 "register_operand" "=a,a,b,b")(unspec:SI [(match_operand:SI 1 "register_operand" "a,?b,b,?a")]UNSPEC_BITREV))]"TARGET_INSNS_64""%|%.\\tbitr\\t%$\\t%1, %0"[(set_attr "units" "m")(set_attr "type" "mpy2")(set_attr "cross" "n,y,n,y")]);; Vector average.(define_insn "avgv2hi3"[(set (match_operand:V2HI 0 "register_operand" "=a,b,a,b")(unspec:V2HI [(match_operand:V2HI 1 "register_operand" "a,b,?b,?a")(match_operand:V2HI 2 "register_operand" "a,b,a,b")] UNSPEC_AVG))]"TARGET_INSNS_64""%|%.\\tavg2\\t%$\\t%1, %2, %0"[(set_attr "units" "m")(set_attr "type" "mpy2")(set_attr "cross" "n,n,y,y")])(define_insn "uavgv4qi3"[(set (match_operand:V4QI 0 "register_operand" "=a,b,a,b")(unspec:V4QI [(match_operand:V4QI 1 "register_operand" "a,b,?b,?a")(match_operand:V4QI 2 "register_operand" "a,b,a,b")] UNSPEC_AVG))]"TARGET_INSNS_64""%|%.\\tavgu4\\t%$\\t%1, %2, %0"[(set_attr "units" "m")(set_attr "type" "mpy2")(set_attr "cross" "n,n,y,y")]);; -------------------------------------------------------------------------;; Multiplication;; -------------------------------------------------------------------------(define_insn "mulhi3"[(set (match_operand:HI 0 "register_operand" "=a,b,a,b")(mult:HI (match_operand:HI 1 "register_operand" "a,b,?b,?a")(match_operand:HI 2 "reg_or_scst5_operand" "aIs5,bIs5,aIs5,bIs5")))]"""%|%.\\tmpy\\t%$\\t%2, %1, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "op_pattern" "sxs")(set_attr "cross" "n,n,y,y")])(define_insn "mulhisi3_const"[(set (match_operand:SI 0 "register_operand" "=a,b,ab")(mult:SI (sign_extend:SI(match_operand:HI 1 "register_operand" "a,b,?ab"))(match_operand:HI 2 "scst5_operand" "Is5,Is5,Is5")))]"""%|%.\\tmpy\\t%$\\t%2, %1, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y")])(define_insn "*mulhisi3_insn"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (sign_extend:SI(match_operand:HI 1 "register_operand" "%a,b,?a,?b"))(sign_extend:SI(match_operand:HI 2 "reg_or_scst5_operand" "a,b,b,a"))))]"""%|%.\\tmpy\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "op_pattern" "ssx")(set_attr "cross" "n,n,y,y")])(define_insn "mulhisi3_lh"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (sign_extend:SI(match_operand:HI 1 "register_operand" "a,b,?a,?b"))(ashiftrt:SI(match_operand:SI 2 "register_operand" "a,b,b,a")(const_int 16))))]"""%|%.\\tmpylh\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulhisi3_hl"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (ashiftrt:SI(match_operand:SI 1 "register_operand" "a,b,?a,?b")(const_int 16))(sign_extend:SI(match_operand:HI 2 "register_operand" "a,b,b,a"))))]"""%|%.\\tmpyhl\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulhisi3_hh"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (ashiftrt:SI(match_operand:SI 1 "register_operand" "%a,b,?a,?b")(const_int 16))(ashiftrt:SI(match_operand:SI 2 "register_operand" "a,b,b,a")(const_int 16))))]"""%|%.\\tmpyh\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "umulhisi3"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (zero_extend:SI(match_operand:HI 1 "register_operand" "%a,b,?a,?b"))(zero_extend:SI(match_operand:HI 2 "register_operand" "a,b,b,a"))))]"""%|%.\\tmpyu\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "umulhisi3_lh"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (zero_extend:SI(match_operand:HI 1 "register_operand" "a,b,?a,?b"))(lshiftrt:SI(match_operand:SI 2 "register_operand" "a,b,b,a")(const_int 16))))]"""%|%.\\tmpylhu\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "umulhisi3_hl"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (lshiftrt:SI(match_operand:SI 1 "register_operand" "a,b,?a,?b")(const_int 16))(zero_extend:SI(match_operand:HI 2 "register_operand" "a,b,b,a"))))]"""%|%.\\tmpyhlu\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "umulhisi3_hh"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (lshiftrt:SI(match_operand:SI 1 "register_operand" "%a,b,?a,?b")(const_int 16))(lshiftrt:SI(match_operand:SI 2 "register_operand" "a,b,b,a")(const_int 16))))]"""%|%.\\tmpyhu\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "usmulhisi3_const"[(set (match_operand:SI 0 "register_operand" "=a,b,ab")(mult:SI (zero_extend:SI(match_operand:HI 1 "register_operand" "a,b,?ab"))(match_operand:SI 2 "scst5_operand" "Is5,Is5,Is5")))]"""%|%.\\tmpysu\\t%$\\t%2, %1, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y")])(define_insn "*usmulhisi3_insn"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (zero_extend:SI(match_operand:HI 1 "register_operand" "a,b,?a,?b"))(sign_extend:SI(match_operand:HI 2 "reg_or_scst5_operand" "aIs5,bIs5,bIs5,aIs5"))))]"""%|%.\\tmpyus\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "usmulhisi3_lh"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (zero_extend:SI(match_operand:HI 1 "register_operand" "a,b,?a,?b"))(ashiftrt:SI(match_operand:SI 2 "register_operand" "a,b,b,a")(const_int 16))))]"""%|%.\\tmpyluhs\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "usmulhisi3_hl"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (lshiftrt:SI(match_operand:SI 1 "register_operand" "a,b,?a,?b")(const_int 16))(sign_extend:SI(match_operand:HI 2 "register_operand" "a,b,b,a"))))]"""%|%.\\tmpyhuls\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "usmulhisi3_hh"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (lshiftrt:SI(match_operand:SI 1 "register_operand" "a,b,?a,?b")(const_int 16))(ashiftrt:SI(match_operand:SI 2 "register_operand" "a,b,b,a")(const_int 16))))]"""%|%.\\tmpyhus\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulsi3_insn"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(mult:SI (match_operand:SI 1 "register_operand" "%a,b,?a,?b")(match_operand:SI 2 "register_operand" "a,b,b,a")))]"TARGET_MPY32""%|%.\\tmpy32\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "<u>mulsidi3"[(set (match_operand:DI 0 "register_operand" "=a,b,a,b")(mult:DI (any_ext:DI(match_operand:SI 1 "register_operand" "%a,b,?a,?b"))(any_ext:DI(match_operand:SI 2 "register_operand" "a,b,b,a"))))]"TARGET_MPY32""%|%.\\tmpy32<u>\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "usmulsidi3"[(set (match_operand:DI 0 "register_operand" "=a,b,a,b")(mult:DI (zero_extend:DI(match_operand:SI 1 "register_operand" "a,b,?a,?b"))(sign_extend:DI(match_operand:SI 2 "register_operand" "a,b,b,a"))))]"TARGET_MPY32""%|%.\\tmpy32us\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")]);; Widening vector multiply and dot product(define_insn "mulv2hiv2si3"[(set (match_operand:V2SI 0 "register_operand" "=a,b,a,b")(mult:V2SI(sign_extend:V2SI (match_operand:V2HI 1 "register_operand" "a,b,a,b"))(sign_extend:V2SI (match_operand:V2HI 2 "register_operand" "a,b,?b,?a"))))]"TARGET_INSNS_64""%|%.\\tmpy2\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "umulv4qiv4hi3"[(set (match_operand:V4HI 0 "register_operand" "=a,b,a,b")(mult:V4HI(zero_extend:V4HI (match_operand:V4QI 1 "register_operand" "a,b,a,b"))(zero_extend:V4HI (match_operand:V4QI 2 "register_operand" "a,b,?b,?a"))))]"TARGET_INSNS_64""%|%.\\tmpyu4\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "usmulv4qiv4hi3"[(set (match_operand:V4HI 0 "register_operand" "=a,b,a,b")(mult:V4HI(zero_extend:V4HI (match_operand:V4QI 1 "register_operand" "a,b,?b,?a"))(sign_extend:V4HI (match_operand:V4QI 2 "register_operand" "a,b,a,b"))))]"TARGET_INSNS_64""%|%.\\tmpyus4\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "dotv2hi"[(set (match_operand:SI 0 "register_operand" "=a,b,a,b")(plus:SI(mult:SI(sign_extend:SI(vec_select:HI(match_operand:V2HI 1 "register_operand" "a,b,a,b")(parallel [(const_int 0)])))(sign_extend:SI(vec_select:HI(match_operand:V2HI 2 "register_operand" "a,b,?b,?a")(parallel [(const_int 0)]))))(mult:SI(sign_extend:SI(vec_select:HI (match_dup 1) (parallel [(const_int 1)])))(sign_extend:SI(vec_select:HI (match_dup 2) (parallel [(const_int 1)]))))))]"TARGET_INSNS_64""%|%.\\tdotp2\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")]);; Fractional multiply(define_insn "mulv2hqv2sq3"[(set (match_operand:V2SQ 0 "register_operand" "=a,b,a,b")(ss_mult:V2SQ(fract_convert:V2SQ(match_operand:V2HQ 1 "register_operand" "%a,b,?a,?b"))(fract_convert:V2SQ(match_operand:V2HQ 2 "register_operand" "a,b,b,a"))))]"""%|%.\\tsmpy2\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulhqsq3"[(set (match_operand:SQ 0 "register_operand" "=a,b,a,b")(ss_mult:SQ(fract_convert:SQ(match_operand:HQ 1 "register_operand" "%a,b,?a,?b"))(fract_convert:SQ(match_operand:HQ 2 "register_operand" "a,b,b,a"))))]"""%|%.\\tsmpy\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulhqsq3_lh"[(set (match_operand:SQ 0 "register_operand" "=a,b,a,b")(ss_mult:SQ(fract_convert:SQ(match_operand:HQ 1 "register_operand" "a,b,?a,?b"))(fract_convert:SQ(truncate:HQ (match_operand:SQ 2 "register_operand" "a,b,b,a")))))]"""%|%.\\tsmpylh\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulhqsq3_hl"[(set (match_operand:SQ 0 "register_operand" "=a,b,a,b")(ss_mult:SQ(fract_convert:SQ(truncate:HQ (match_operand:SQ 1 "register_operand" "a,b,b,a")))(fract_convert:SQ(match_operand:HQ 2 "register_operand" "a,b,b,a"))))]"""%|%.\\tsmpyhl\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulhqsq3_hh"[(set (match_operand:SQ 0 "register_operand" "=a,b,a,b")(ss_mult:SQ(fract_convert:SQ(truncate:HQ (match_operand:SQ 1 "register_operand" "a,b,b,a")))(fract_convert:SQ(truncate:HQ (match_operand:SQ 2 "register_operand" "a,b,b,a")))))]"""%|%.\\tsmpyh\\t%$\\t%1, %2, %0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")]);; Multiplication patterns for TI C6X.;; This file is processed by genmult.sh to produce two variants of each;; pattern, a normal one and a real_mult variant for modulo scheduling.;; Copyright (C) 2010, 2011 Free Software Foundation, Inc.;; Contributed by Bernd Schmidt <bernds@codesourcery.com>;; Contributed by CodeSourcery.;;;; This file is part of GCC.;;;; GCC is free software; you can redistribute it and/or modify;; it under the terms of the GNU General Public License as published by;; the Free Software Foundation; either version 3, or (at your option);; any later version.;;;; GCC is distributed in the hope that it will be useful,;; but WITHOUT ANY WARRANTY; without even the implied warranty of;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the;; GNU General Public License for more details.;;;; You should have received a copy of the GNU General Public License;; along with GCC; see the file COPYING3. If not see;; <http://www.gnu.org/licenses/>.;; -------------------------------------------------------------------------;; Miscellaneous insns that execute on the M units;; -------------------------------------------------------------------------(define_insn "rotlsi3_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(rotate:SI (match_operand:SI 1 "register_operand" "a,b,?b,?a")(match_operand:SI 2 "reg_or_ucst5_operand" "aIu5,bIu5,aIu5,bIu5"))] UNSPEC_REAL_MULT)]"TARGET_INSNS_64""%|%.\\trotl\\t%$\\t%1, %2, %k0"[(set_attr "units" "m")(set_attr "type" "mpy2")(set_attr "cross" "n,n,y,y")])(define_insn "bitrevsi2_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JA,JB,JB")(unspec:SI [(match_operand:SI 1 "register_operand" "a,?b,b,?a")]UNSPEC_BITREV)] UNSPEC_REAL_MULT)]"TARGET_INSNS_64""%|%.\\tbitr\\t%$\\t%1, %k0"[(set_attr "units" "m")(set_attr "type" "mpy2")(set_attr "cross" "n,y,n,y")]);; Vector average.(define_insn "avgv2hi3_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(unspec:V2HI [(match_operand:V2HI 1 "register_operand" "a,b,?b,?a")(match_operand:V2HI 2 "register_operand" "a,b,a,b")] UNSPEC_AVG)] UNSPEC_REAL_MULT)]"TARGET_INSNS_64""%|%.\\tavg2\\t%$\\t%1, %2, %k0"[(set_attr "units" "m")(set_attr "type" "mpy2")(set_attr "cross" "n,n,y,y")])(define_insn "uavgv4qi3_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(unspec:V4QI [(match_operand:V4QI 1 "register_operand" "a,b,?b,?a")(match_operand:V4QI 2 "register_operand" "a,b,a,b")] UNSPEC_AVG)] UNSPEC_REAL_MULT)]"TARGET_INSNS_64""%|%.\\tavgu4\\t%$\\t%1, %2, %k0"[(set_attr "units" "m")(set_attr "type" "mpy2")(set_attr "cross" "n,n,y,y")]);; -------------------------------------------------------------------------;; Multiplication;; -------------------------------------------------------------------------(define_insn "mulhi3_real"[(unspec [(match_operand:HI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:HI (match_operand:HI 1 "register_operand" "a,b,?b,?a")(match_operand:HI 2 "reg_or_scst5_operand" "aIs5,bIs5,aIs5,bIs5"))] UNSPEC_REAL_MULT)]"""%|%.\\tmpy\\t%$\\t%2, %1, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "op_pattern" "sxs")(set_attr "cross" "n,n,y,y")])(define_insn "mulhisi3_const_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JAJB")(mult:SI (sign_extend:SI(match_operand:HI 1 "register_operand" "a,b,?ab"))(match_operand:HI 2 "scst5_operand" "Is5,Is5,Is5"))] UNSPEC_REAL_MULT)]"""%|%.\\tmpy\\t%$\\t%2, %1, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y")])(define_insn "*mulhisi3_insn_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (sign_extend:SI(match_operand:HI 1 "register_operand" "%a,b,?a,?b"))(sign_extend:SI(match_operand:HI 2 "reg_or_scst5_operand" "a,b,b,a")))] UNSPEC_REAL_MULT)]"""%|%.\\tmpy\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "op_pattern" "ssx")(set_attr "cross" "n,n,y,y")])(define_insn "mulhisi3_lh_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (sign_extend:SI(match_operand:HI 1 "register_operand" "a,b,?a,?b"))(ashiftrt:SI(match_operand:SI 2 "register_operand" "a,b,b,a")(const_int 16)))] UNSPEC_REAL_MULT)]"""%|%.\\tmpylh\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulhisi3_hl_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (ashiftrt:SI(match_operand:SI 1 "register_operand" "a,b,?a,?b")(const_int 16))(sign_extend:SI(match_operand:HI 2 "register_operand" "a,b,b,a")))] UNSPEC_REAL_MULT)]"""%|%.\\tmpyhl\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulhisi3_hh_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (ashiftrt:SI(match_operand:SI 1 "register_operand" "%a,b,?a,?b")(const_int 16))(ashiftrt:SI(match_operand:SI 2 "register_operand" "a,b,b,a")(const_int 16)))] UNSPEC_REAL_MULT)]"""%|%.\\tmpyh\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "umulhisi3_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (zero_extend:SI(match_operand:HI 1 "register_operand" "%a,b,?a,?b"))(zero_extend:SI(match_operand:HI 2 "register_operand" "a,b,b,a")))] UNSPEC_REAL_MULT)]"""%|%.\\tmpyu\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "umulhisi3_lh_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (zero_extend:SI(match_operand:HI 1 "register_operand" "a,b,?a,?b"))(lshiftrt:SI(match_operand:SI 2 "register_operand" "a,b,b,a")(const_int 16)))] UNSPEC_REAL_MULT)]"""%|%.\\tmpylhu\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "umulhisi3_hl_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (lshiftrt:SI(match_operand:SI 1 "register_operand" "a,b,?a,?b")(const_int 16))(zero_extend:SI(match_operand:HI 2 "register_operand" "a,b,b,a")))] UNSPEC_REAL_MULT)]"""%|%.\\tmpyhlu\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "umulhisi3_hh_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (lshiftrt:SI(match_operand:SI 1 "register_operand" "%a,b,?a,?b")(const_int 16))(lshiftrt:SI(match_operand:SI 2 "register_operand" "a,b,b,a")(const_int 16)))] UNSPEC_REAL_MULT)]"""%|%.\\tmpyhu\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "usmulhisi3_const_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JAJB")(mult:SI (zero_extend:SI(match_operand:HI 1 "register_operand" "a,b,?ab"))(match_operand:SI 2 "scst5_operand" "Is5,Is5,Is5"))] UNSPEC_REAL_MULT)]"""%|%.\\tmpysu\\t%$\\t%2, %1, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y")])(define_insn "*usmulhisi3_insn_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (zero_extend:SI(match_operand:HI 1 "register_operand" "a,b,?a,?b"))(sign_extend:SI(match_operand:HI 2 "reg_or_scst5_operand" "aIs5,bIs5,bIs5,aIs5")))] UNSPEC_REAL_MULT)]"""%|%.\\tmpyus\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "usmulhisi3_lh_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (zero_extend:SI(match_operand:HI 1 "register_operand" "a,b,?a,?b"))(ashiftrt:SI(match_operand:SI 2 "register_operand" "a,b,b,a")(const_int 16)))] UNSPEC_REAL_MULT)]"""%|%.\\tmpyluhs\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "usmulhisi3_hl_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (lshiftrt:SI(match_operand:SI 1 "register_operand" "a,b,?a,?b")(const_int 16))(sign_extend:SI(match_operand:HI 2 "register_operand" "a,b,b,a")))] UNSPEC_REAL_MULT)]"""%|%.\\tmpyhuls\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "usmulhisi3_hh_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (lshiftrt:SI(match_operand:SI 1 "register_operand" "a,b,?a,?b")(const_int 16))(ashiftrt:SI(match_operand:SI 2 "register_operand" "a,b,b,a")(const_int 16)))] UNSPEC_REAL_MULT)]"""%|%.\\tmpyhus\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulsi3_insn_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:SI (match_operand:SI 1 "register_operand" "%a,b,?a,?b")(match_operand:SI 2 "register_operand" "a,b,b,a"))] UNSPEC_REAL_MULT)]"TARGET_MPY32""%|%.\\tmpy32\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "<u>mulsidi3_real"[(unspec [(match_operand:DI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:DI (any_ext:DI(match_operand:SI 1 "register_operand" "%a,b,?a,?b"))(any_ext:DI(match_operand:SI 2 "register_operand" "a,b,b,a")))] UNSPEC_REAL_MULT)]"TARGET_MPY32""%|%.\\tmpy32<u>\\t%$\\t%1, %2, %K0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "usmulsidi3_real"[(unspec [(match_operand:DI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:DI (zero_extend:DI(match_operand:SI 1 "register_operand" "a,b,?a,?b"))(sign_extend:DI(match_operand:SI 2 "register_operand" "a,b,b,a")))] UNSPEC_REAL_MULT)]"TARGET_MPY32""%|%.\\tmpy32us\\t%$\\t%1, %2, %K0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")]);; Widening vector multiply and dot product(define_insn "mulv2hiv2si3_real"[(unspec [(match_operand:V2SI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:V2SI(sign_extend:V2SI (match_operand:V2HI 1 "register_operand" "a,b,a,b"))(sign_extend:V2SI (match_operand:V2HI 2 "register_operand" "a,b,?b,?a")))] UNSPEC_REAL_MULT)]"TARGET_INSNS_64""%|%.\\tmpy2\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "umulv4qiv4hi3_real"[(unspec [(match_operand:V4HI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:V4HI(zero_extend:V4HI (match_operand:V4QI 1 "register_operand" "a,b,a,b"))(zero_extend:V4HI (match_operand:V4QI 2 "register_operand" "a,b,?b,?a")))] UNSPEC_REAL_MULT)]"TARGET_INSNS_64""%|%.\\tmpyu4\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "usmulv4qiv4hi3_real"[(unspec [(match_operand:V4HI 0 "const_int_operand" "=JA,JB,JA,JB")(mult:V4HI(zero_extend:V4HI (match_operand:V4QI 1 "register_operand" "a,b,?b,?a"))(sign_extend:V4HI (match_operand:V4QI 2 "register_operand" "a,b,a,b")))] UNSPEC_REAL_MULT)]"TARGET_INSNS_64""%|%.\\tmpyus4\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "dotv2hi_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(plus:SI(mult:SI(sign_extend:SI(vec_select:HI(match_operand:V2HI 1 "register_operand" "a,b,a,b")(parallel [(const_int 0)])))(sign_extend:SI(vec_select:HI(match_operand:V2HI 2 "register_operand" "a,b,?b,?a")(parallel [(const_int 0)]))))(mult:SI(sign_extend:SI(vec_select:HI (match_dup 1) (parallel [(const_int 1)])))(sign_extend:SI(vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))] UNSPEC_REAL_MULT)]"TARGET_INSNS_64""%|%.\\tdotp2\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")]);; Fractional multiply(define_insn "mulv2hqv2sq3_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(ss_mult:V2SQ(fract_convert:V2SQ(match_operand:V2HQ 1 "register_operand" "%a,b,?a,?b"))(fract_convert:V2SQ(match_operand:V2HQ 2 "register_operand" "a,b,b,a")))] UNSPEC_REAL_MULT)]"""%|%.\\tsmpy2\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy4")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulhqsq3_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(ss_mult:SQ(fract_convert:SQ(match_operand:HQ 1 "register_operand" "%a,b,?a,?b"))(fract_convert:SQ(match_operand:HQ 2 "register_operand" "a,b,b,a")))] UNSPEC_REAL_MULT)]"""%|%.\\tsmpy\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulhqsq3_lh_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(ss_mult:SQ(fract_convert:SQ(match_operand:HQ 1 "register_operand" "a,b,?a,?b"))(fract_convert:SQ(truncate:HQ (match_operand:SQ 2 "register_operand" "a,b,b,a"))))] UNSPEC_REAL_MULT)]"""%|%.\\tsmpylh\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulhqsq3_hl_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(ss_mult:SQ(fract_convert:SQ(truncate:HQ (match_operand:SQ 1 "register_operand" "a,b,b,a")))(fract_convert:SQ(match_operand:HQ 2 "register_operand" "a,b,b,a")))] UNSPEC_REAL_MULT)]"""%|%.\\tsmpyhl\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])(define_insn "mulhqsq3_hh_real"[(unspec [(match_operand:SI 0 "const_int_operand" "=JA,JB,JA,JB")(ss_mult:SQ(fract_convert:SQ(truncate:HQ (match_operand:SQ 1 "register_operand" "a,b,b,a")))(fract_convert:SQ(truncate:HQ (match_operand:SQ 2 "register_operand" "a,b,b,a"))))] UNSPEC_REAL_MULT)]"""%|%.\\tsmpyh\\t%$\\t%1, %2, %k0"[(set_attr "type" "mpy2")(set_attr "units" "m")(set_attr "cross" "n,n,y,y")])
