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),
15239462Sdim      (i64
16239462Sdim       (COMBINE_rr
17239462Sdim        (HEXAGON_M2_maci
18239462Sdim         (HEXAGON_M2_maci
19239462Sdim          (i32
20239462Sdim           (EXTRACT_SUBREG
21239462Sdim            (i64
22239462Sdim             (MPYU64 (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src1),
23239462Sdim                                          subreg_loreg)),
24239462Sdim                     (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src2),
25239462Sdim                                          subreg_loreg)))),
26239462Sdim            subreg_hireg)),
27239462Sdim          (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src1), subreg_loreg)),
28239462Sdim          (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src2), subreg_hireg))),
29239462Sdim         (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src2), subreg_loreg)),
30239462Sdim         (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src1), subreg_hireg))),
31239462Sdim        (i32
32239462Sdim         (EXTRACT_SUBREG
33239462Sdim          (i64
34239462Sdim           (MPYU64 (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src1), subreg_loreg)),
35239462Sdim                   (i32 (EXTRACT_SUBREG (i64 DoubleRegs:$src2),
36239462Sdim                                        subreg_loreg)))), subreg_loreg))))>;
37234285Sdim
38234285Sdim
39234285Sdim
40