1234285Sdim//===-- HexagonIntrinsicsDerived.td - Derived intrinsics ---*- tablegen -*-===//
2234285Sdim//
3234285Sdim//                     The LLVM Compiler Infrastructure
4234285Sdim//
5234285Sdim// This file is distributed under the University of Illinois Open Source
6234285Sdim// License. See LICENSE.TXT for details.
7234285Sdim//
8234285Sdim//===----------------------------------------------------------------------===//
9234285Sdim//
10234285Sdim// Multiply 64-bit and use lower result
11234285Sdim//
12234285Sdim// Optimized with intrinisics accumulates
13234285Sdim//
14234285Sdimdef : Pat <(mul DoubleRegs:$src1, DoubleRegs:$src2),
15245431Sdim      (i64
16245431Sdim       (COMBINE_rr
17245431Sdim        (HEXAGON_M2_maci
18245431Sdim         (HEXAGON_M2_maci
19245431Sdim          (i32
20245431Sdim           (EXTRACT_SUBREG
21245431Sdim            (i64
22245431Sdim             (MPYU64 (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src1),
23245431Sdim                                          subreg_loreg)),
24245431Sdim                     (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src2),
25245431Sdim                                          subreg_loreg)))),
26245431Sdim            subreg_hireg)),
27245431Sdim          (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src1), subreg_loreg)),
28245431Sdim          (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src2), subreg_hireg))),
29245431Sdim         (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src2), subreg_loreg)),
30245431Sdim         (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src1), subreg_hireg))),
31245431Sdim        (i32
32245431Sdim         (EXTRACT_SUBREG
33245431Sdim          (i64
34245431Sdim           (MPYU64 (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src1), subreg_loreg)),
35245431Sdim                   (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src2),
36245431Sdim                                        subreg_loreg)))), subreg_loreg))))>;
37234285Sdim
38234285Sdim
39234285Sdim
40