1#line 1 "ad_x86_expand.cpp"
2//
3// Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
4// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5//
6// This code is free software; you can redistribute it and/or modify it
7// under the terms of the GNU General Public License version 2 only, as
8// published by the Free Software Foundation.
9//
10// This code is distributed in the hope that it will be useful, but WITHOUT
11// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13// version 2 for more details (a copy is included in the LICENSE file that
14// accompanied this code).
15//
16// You should have received a copy of the GNU General Public License version
17// 2 along with this work; if not, write to the Free Software Foundation,
18// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19//
20// Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21// or visit www.oracle.com if you need additional information or have any
22// questions.
23//
24//
25
26// Machine Generated File. Do Not Edit!
27
28#include "precompiled.hpp"
29#include "adfiles/ad_x86.hpp"
30#include "oops/compressedOops.hpp"
31
32// Register masks, one for each register class.
33const RegMask _NO_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
34const RegMask _ALL_REG_mask( 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
35const RegMask _ALL_INT_REG_mask( 0x5555555, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
36const RegMask _PTR_RAX_REG_mask( 0x300000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
37const RegMask _PTR_RBX_REG_mask( 0x3000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
38const RegMask _PTR_RSI_REG_mask( 0xc0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
39const RegMask _PTR_RDI_REG_mask( 0xc000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
40const RegMask _PTR_RSP_REG_mask( 0xc0000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
41const RegMask _PTR_R15_REG_mask( 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
42const RegMask _LONG_RAX_REG_mask( 0x300000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
43const RegMask _LONG_RCX_REG_mask( 0xc00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
44const RegMask _LONG_RDX_REG_mask( 0x30000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
45const RegMask _INT_RAX_REG_mask( 0x100000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
46const RegMask _INT_RBX_REG_mask( 0x1000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
47const RegMask _INT_RCX_REG_mask( 0x400, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
48const RegMask _INT_RDX_REG_mask( 0x10000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
49const RegMask _INT_RDI_REG_mask( 0x4000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
50const RegMask _INT_FLAGS_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0 );
51const RegMask _FLOAT_REG_LEGACY_mask( 0x0, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
52const RegMask _STACK_OR_FLOAT_REG_LEGACY_mask( 0x0, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffff00, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff );
53const RegMask _FLOAT_REG_EVEX_mask( 0x0, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x0, 0x0, 0x0, 0x0, 0x0 );
54const RegMask _STACK_OR_FLOAT_REG_EVEX_mask( 0x0, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0xffffff00, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff );
55const RegMask _DOUBLE_REG_LEGACY_mask( 0x0, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
56const RegMask _STACK_OR_DOUBLE_REG_LEGACY_mask( 0x0, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffff00, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff );
57const RegMask _DOUBLE_REG_EVEX_mask( 0x0, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x0, 0x0, 0x0, 0x0, 0x0 );
58const RegMask _STACK_OR_DOUBLE_REG_EVEX_mask( 0x0, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0xffffff00, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff );
59const RegMask _VECTORS_REG_LEGACY_mask( 0x0, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
60const RegMask _VECTORS_REG_EVEX_mask( 0x0, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x0, 0x0, 0x0, 0x0, 0x0 );
61const RegMask _VECTORD_REG_LEGACY_mask( 0x0, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
62const RegMask _VECTORD_REG_EVEX_mask( 0x0, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x0, 0x0, 0x0, 0x0, 0x0 );
63const RegMask _VECTORX_REG_LEGACY_mask( 0x0, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
64const RegMask _VECTORX_REG_EVEX_mask( 0x0, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0xf000f, 0x0, 0x0, 0x0, 0x0, 0x0 );
65const RegMask _VECTORY_REG_LEGACY_mask( 0x0, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
66const RegMask _VECTORY_REG_EVEX_mask( 0x0, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0xff00ff, 0x0, 0x0, 0x0, 0x0, 0x0 );
67const RegMask _VECTORZ_REG_EVEX_mask( 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0 );
68const RegMask _VECTORZ_REG_LEGACY_mask( 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
69const RegMask _XMM0_REG_mask( 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
70const RegMask _YMM0_REG_mask( 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
71const RegMask _ZMM0_REG_mask( 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
72const RegMask _XMM1_REG_mask( 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
73const RegMask _YMM1_REG_mask( 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
74const RegMask _ZMM1_REG_mask( 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
75const RegMask _XMM2_REG_mask( 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
76const RegMask _YMM2_REG_mask( 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
77const RegMask _ZMM2_REG_mask( 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
78const RegMask _XMM3_REG_mask( 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
79const RegMask _YMM3_REG_mask( 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
80const RegMask _ZMM3_REG_mask( 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
81const RegMask _XMM4_REG_mask( 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
82const RegMask _YMM4_REG_mask( 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
83const RegMask _ZMM4_REG_mask( 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
84const RegMask _XMM5_REG_mask( 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
85const RegMask _YMM5_REG_mask( 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
86const RegMask _ZMM5_REG_mask( 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
87const RegMask _XMM6_REG_mask( 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
88const RegMask _YMM6_REG_mask( 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
89const RegMask _ZMM6_REG_mask( 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
90const RegMask _XMM7_REG_mask( 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
91const RegMask _YMM7_REG_mask( 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
92const RegMask _ZMM7_REG_mask( 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
93const RegMask _XMM8_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
94const RegMask _YMM8_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
95const RegMask _ZMM8_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
96const RegMask _XMM9_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
97const RegMask _YMM9_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
98const RegMask _ZMM9_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
99const RegMask _XMM10_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
100const RegMask _YMM10_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
101const RegMask _ZMM10_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
102const RegMask _XMM11_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
103const RegMask _YMM11_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
104const RegMask _ZMM11_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
105const RegMask _XMM12_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
106const RegMask _YMM12_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
107const RegMask _ZMM12_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
108const RegMask _XMM13_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
109const RegMask _YMM13_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
110const RegMask _ZMM13_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
111const RegMask _XMM14_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
112const RegMask _YMM14_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
113const RegMask _ZMM14_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
114const RegMask _XMM15_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
115const RegMask _YMM15_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
116const RegMask _ZMM15_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
117const RegMask _XMM16_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
118const RegMask _YMM16_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
119const RegMask _ZMM16_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
120const RegMask _XMM17_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
121const RegMask _YMM17_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
122const RegMask _ZMM17_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
123const RegMask _XMM18_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
124const RegMask _YMM18_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
125const RegMask _ZMM18_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
126const RegMask _XMM19_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
127const RegMask _YMM19_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
128const RegMask _ZMM19_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
129const RegMask _XMM20_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
130const RegMask _YMM20_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
131const RegMask _ZMM20_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
132const RegMask _XMM21_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
133const RegMask _YMM21_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
134const RegMask _ZMM21_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
135const RegMask _XMM22_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
136const RegMask _YMM22_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
137const RegMask _ZMM22_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
138const RegMask _XMM23_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
139const RegMask _YMM23_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
140const RegMask _ZMM23_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
141const RegMask _XMM24_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
142const RegMask _YMM24_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
143const RegMask _ZMM24_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
144const RegMask _XMM25_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
145const RegMask _YMM25_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
146const RegMask _ZMM25_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
147const RegMask _XMM26_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
148const RegMask _YMM26_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
149const RegMask _ZMM26_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
150const RegMask _XMM27_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
151const RegMask _YMM27_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
152const RegMask _ZMM27_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
153const RegMask _XMM28_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
154const RegMask _YMM28_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
155const RegMask _ZMM28_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
156const RegMask _XMM29_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
157const RegMask _YMM29_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
158const RegMask _ZMM29_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
159const RegMask _XMM30_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0 );
160const RegMask _YMM30_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0 );
161const RegMask _ZMM30_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0 );
162const RegMask _XMM31_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0000, 0x0, 0x0, 0x0, 0x0, 0x0 );
163const RegMask _YMM31_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff0000, 0x0, 0x0, 0x0, 0x0, 0x0 );
164const RegMask _ZMM31_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x0, 0x0, 0x0, 0x0, 0x0 );
165const RegMask _STACK_SLOTS_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
166const RegMask _STACK_OR_STACK_SLOTS_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffff00, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff );
167MachNode* loadUB2L_immINode::Expand(State* state, Node_List& proj_list, Node* mem) {
168 Compile* C = Compile::current();
169 // Add projection edges for additional defs or kills
170 // DEF/KILL cr
171 MachProjNode *kill;
172 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
173 proj_list.push(kill);
174
175 return this;
176}
177
178MachNode* loadS2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
179 Compile* C = Compile::current();
180 // Remove duplicated operands and inputs which use the same name.
181 if (num_opnds() == 4) {
182 unsigned num0 = 0;
183 unsigned num1 = opnd_array(1)->num_edges(); // mem
184 unsigned num2 = opnd_array(2)->num_edges(); // twentyfour
185 unsigned num3 = opnd_array(3)->num_edges(); // twentyfour
186 unsigned idx0 = oper_input_base();
187 unsigned idx1 = idx0 + num0;
188 unsigned idx2 = idx1 + num1;
189 unsigned idx3 = idx2 + num2;
190 unsigned idx4 = idx3 + num3;
191 for (int i = idx4 - 1; i >= (int)idx3; i--) {
192 del_req(i);
193 }
194 _num_opnds = 3;
195 } else {
196 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
197 }
198
199 return this;
200}
201
202MachNode* loadUS2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
203 Compile* C = Compile::current();
204 // Remove duplicated operands and inputs which use the same name.
205 if (num_opnds() == 4) {
206 unsigned num0 = 0;
207 unsigned num1 = opnd_array(1)->num_edges(); // mem
208 unsigned num2 = opnd_array(2)->num_edges(); // twentyfour
209 unsigned num3 = opnd_array(3)->num_edges(); // twentyfour
210 unsigned idx0 = oper_input_base();
211 unsigned idx1 = idx0 + num0;
212 unsigned idx2 = idx1 + num1;
213 unsigned idx3 = idx2 + num2;
214 unsigned idx4 = idx3 + num3;
215 for (int i = idx4 - 1; i >= (int)idx3; i--) {
216 del_req(i);
217 }
218 _num_opnds = 3;
219 } else {
220 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
221 }
222
223 return this;
224}
225
226MachNode* loadUS2L_immINode::Expand(State* state, Node_List& proj_list, Node* mem) {
227 Compile* C = Compile::current();
228 // Add projection edges for additional defs or kills
229 // DEF/KILL cr
230 MachProjNode *kill;
231 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
232 proj_list.push(kill);
233
234 return this;
235}
236
237MachNode* loadI2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
238 Compile* C = Compile::current();
239 // Remove duplicated operands and inputs which use the same name.
240 if (num_opnds() == 4) {
241 unsigned num0 = 0;
242 unsigned num1 = opnd_array(1)->num_edges(); // mem
243 unsigned num2 = opnd_array(2)->num_edges(); // twentyfour
244 unsigned num3 = opnd_array(3)->num_edges(); // twentyfour
245 unsigned idx0 = oper_input_base();
246 unsigned idx1 = idx0 + num0;
247 unsigned idx2 = idx1 + num1;
248 unsigned idx3 = idx2 + num2;
249 unsigned idx4 = idx3 + num3;
250 for (int i = idx4 - 1; i >= (int)idx3; i--) {
251 del_req(i);
252 }
253 _num_opnds = 3;
254 } else {
255 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
256 }
257
258 return this;
259}
260
261MachNode* loadI2SNode::Expand(State* state, Node_List& proj_list, Node* mem) {
262 Compile* C = Compile::current();
263 // Remove duplicated operands and inputs which use the same name.
264 if (num_opnds() == 4) {
265 unsigned num0 = 0;
266 unsigned num1 = opnd_array(1)->num_edges(); // mem
267 unsigned num2 = opnd_array(2)->num_edges(); // sixteen
268 unsigned num3 = opnd_array(3)->num_edges(); // sixteen
269 unsigned idx0 = oper_input_base();
270 unsigned idx1 = idx0 + num0;
271 unsigned idx2 = idx1 + num1;
272 unsigned idx3 = idx2 + num2;
273 unsigned idx4 = idx3 + num3;
274 for (int i = idx4 - 1; i >= (int)idx3; i--) {
275 del_req(i);
276 }
277 _num_opnds = 3;
278 } else {
279 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
280 }
281
282 return this;
283}
284
285MachNode* loadI2L_immU31Node::Expand(State* state, Node_List& proj_list, Node* mem) {
286 Compile* C = Compile::current();
287 // Add projection edges for additional defs or kills
288 // DEF/KILL cr
289 MachProjNode *kill;
290 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
291 proj_list.push(kill);
292
293 return this;
294}
295
296MachNode* maxF_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
297 Compile* C = Compile::current();
298 // Add projection edges for additional defs or kills
299 // TEMP tmp
300 MachTempNode *def;
301 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
302 add_req(def);
303 // TEMP atmp
304 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
305 add_req(def);
306 // TEMP btmp
307 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
308 add_req(def);
309
310 return this;
311}
312
313MachNode* maxF_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
314 Compile* C = Compile::current();
315 // Add projection edges for additional defs or kills
316 // TEMP xmmt
317 MachTempNode *def;
318 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
319 add_req(def);
320 // TEMP tmp
321 def = new MachTempNode(state->MachOperGenerator(RREGI));
322 add_req(def);
323 // DEF/KILL cr
324 MachProjNode *kill;
325 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
326 proj_list.push(kill);
327
328 return this;
329}
330
331MachNode* maxD_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
332 Compile* C = Compile::current();
333 // Add projection edges for additional defs or kills
334 // TEMP tmp
335 MachTempNode *def;
336 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
337 add_req(def);
338 // TEMP atmp
339 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
340 add_req(def);
341 // TEMP btmp
342 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
343 add_req(def);
344
345 return this;
346}
347
348MachNode* maxD_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
349 Compile* C = Compile::current();
350 // Add projection edges for additional defs or kills
351 // TEMP xmmt
352 MachTempNode *def;
353 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
354 add_req(def);
355 // TEMP tmp
356 def = new MachTempNode(state->MachOperGenerator(RREGL));
357 add_req(def);
358 // DEF/KILL cr
359 MachProjNode *kill;
360 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
361 proj_list.push(kill);
362
363 return this;
364}
365
366MachNode* minF_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
367 Compile* C = Compile::current();
368 // Add projection edges for additional defs or kills
369 // TEMP tmp
370 MachTempNode *def;
371 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
372 add_req(def);
373 // TEMP atmp
374 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
375 add_req(def);
376 // TEMP btmp
377 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
378 add_req(def);
379
380 return this;
381}
382
383MachNode* minF_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
384 Compile* C = Compile::current();
385 // Add projection edges for additional defs or kills
386 // TEMP xmmt
387 MachTempNode *def;
388 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
389 add_req(def);
390 // TEMP tmp
391 def = new MachTempNode(state->MachOperGenerator(RREGI));
392 add_req(def);
393 // DEF/KILL cr
394 MachProjNode *kill;
395 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
396 proj_list.push(kill);
397
398 return this;
399}
400
401MachNode* minD_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
402 Compile* C = Compile::current();
403 // Add projection edges for additional defs or kills
404 // TEMP tmp
405 MachTempNode *def;
406 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
407 add_req(def);
408 // TEMP atmp
409 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
410 add_req(def);
411 // TEMP btmp
412 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
413 add_req(def);
414
415 return this;
416}
417
418MachNode* minD_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
419 Compile* C = Compile::current();
420 // Add projection edges for additional defs or kills
421 // TEMP xmmt
422 MachTempNode *def;
423 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
424 add_req(def);
425 // TEMP tmp
426 def = new MachTempNode(state->MachOperGenerator(RREGL));
427 add_req(def);
428 // DEF/KILL cr
429 MachProjNode *kill;
430 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
431 proj_list.push(kill);
432
433 return this;
434}
435
436MachNode* loadConI0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
437 Compile* C = Compile::current();
438 // Add projection edges for additional defs or kills
439 // DEF/KILL cr
440 MachProjNode *kill;
441 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
442 proj_list.push(kill);
443
444 return this;
445}
446
447MachNode* loadConL0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
448 Compile* C = Compile::current();
449 // Add projection edges for additional defs or kills
450 // DEF/KILL cr
451 MachProjNode *kill;
452 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
453 proj_list.push(kill);
454
455 return this;
456}
457
458MachNode* loadConP0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
459 Compile* C = Compile::current();
460 // Add projection edges for additional defs or kills
461 // DEF/KILL cr
462 MachProjNode *kill;
463 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
464 proj_list.push(kill);
465
466 return this;
467}
468
469MachNode* loadConP31Node::Expand(State* state, Node_List& proj_list, Node* mem) {
470 Compile* C = Compile::current();
471 // Add projection edges for additional defs or kills
472 // DEF/KILL cr
473 MachProjNode *kill;
474 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
475 proj_list.push(kill);
476
477 return this;
478}
479
480MachNode* loadConFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
481 Compile* C = Compile::current();
482 add_req(C->mach_constant_base_node());
483
484 return this;
485}
486
487MachNode* loadConN0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
488 Compile* C = Compile::current();
489 // Add projection edges for additional defs or kills
490 // DEF/KILL cr
491 MachProjNode *kill;
492 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
493 proj_list.push(kill);
494
495 return this;
496}
497
498MachNode* loadConDNode::Expand(State* state, Node_List& proj_list, Node* mem) {
499 Compile* C = Compile::current();
500 add_req(C->mach_constant_base_node());
501
502 return this;
503}
504
505MachNode* bytes_reverse_unsigned_shortNode::Expand(State* state, Node_List& proj_list, Node* mem) {
506 Compile* C = Compile::current();
507 // Add projection edges for additional defs or kills
508 // DEF/KILL cr
509 MachProjNode *kill;
510 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
511 proj_list.push(kill);
512
513 return this;
514}
515
516MachNode* bytes_reverse_shortNode::Expand(State* state, Node_List& proj_list, Node* mem) {
517 Compile* C = Compile::current();
518 // Add projection edges for additional defs or kills
519 // DEF/KILL cr
520 MachProjNode *kill;
521 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
522 proj_list.push(kill);
523
524 return this;
525}
526
527MachNode* countLeadingZerosINode::Expand(State* state, Node_List& proj_list, Node* mem) {
528 Compile* C = Compile::current();
529 // Add projection edges for additional defs or kills
530 // DEF/KILL cr
531 MachProjNode *kill;
532 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
533 proj_list.push(kill);
534
535 return this;
536}
537
538MachNode* countLeadingZerosI_bsrNode::Expand(State* state, Node_List& proj_list, Node* mem) {
539 Compile* C = Compile::current();
540 // Add projection edges for additional defs or kills
541 // DEF/KILL cr
542 MachProjNode *kill;
543 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
544 proj_list.push(kill);
545
546 return this;
547}
548
549MachNode* countLeadingZerosLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
550 Compile* C = Compile::current();
551 // Add projection edges for additional defs or kills
552 // DEF/KILL cr
553 MachProjNode *kill;
554 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
555 proj_list.push(kill);
556
557 return this;
558}
559
560MachNode* countLeadingZerosL_bsrNode::Expand(State* state, Node_List& proj_list, Node* mem) {
561 Compile* C = Compile::current();
562 // Add projection edges for additional defs or kills
563 // DEF/KILL cr
564 MachProjNode *kill;
565 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
566 proj_list.push(kill);
567
568 return this;
569}
570
571MachNode* countTrailingZerosINode::Expand(State* state, Node_List& proj_list, Node* mem) {
572 Compile* C = Compile::current();
573 // Add projection edges for additional defs or kills
574 // DEF/KILL cr
575 MachProjNode *kill;
576 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
577 proj_list.push(kill);
578
579 return this;
580}
581
582MachNode* countTrailingZerosI_bsfNode::Expand(State* state, Node_List& proj_list, Node* mem) {
583 Compile* C = Compile::current();
584 // Add projection edges for additional defs or kills
585 // DEF/KILL cr
586 MachProjNode *kill;
587 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
588 proj_list.push(kill);
589
590 return this;
591}
592
593MachNode* countTrailingZerosLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
594 Compile* C = Compile::current();
595 // Add projection edges for additional defs or kills
596 // DEF/KILL cr
597 MachProjNode *kill;
598 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
599 proj_list.push(kill);
600
601 return this;
602}
603
604MachNode* countTrailingZerosL_bsfNode::Expand(State* state, Node_List& proj_list, Node* mem) {
605 Compile* C = Compile::current();
606 // Add projection edges for additional defs or kills
607 // DEF/KILL cr
608 MachProjNode *kill;
609 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
610 proj_list.push(kill);
611
612 return this;
613}
614
615MachNode* popCountINode::Expand(State* state, Node_List& proj_list, Node* mem) {
616 Compile* C = Compile::current();
617 // Add projection edges for additional defs or kills
618 // DEF/KILL cr
619 MachProjNode *kill;
620 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
621 proj_list.push(kill);
622
623 return this;
624}
625
626MachNode* popCountI_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
627 Compile* C = Compile::current();
628 // Add projection edges for additional defs or kills
629 // DEF/KILL cr
630 MachProjNode *kill;
631 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
632 proj_list.push(kill);
633
634 return this;
635}
636
637MachNode* popCountLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
638 Compile* C = Compile::current();
639 // Add projection edges for additional defs or kills
640 // DEF/KILL cr
641 MachProjNode *kill;
642 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
643 proj_list.push(kill);
644
645 return this;
646}
647
648MachNode* popCountL_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
649 Compile* C = Compile::current();
650 // Add projection edges for additional defs or kills
651 // DEF/KILL cr
652 MachProjNode *kill;
653 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
654 proj_list.push(kill);
655
656 return this;
657}
658
659MachNode* membar_volatileNode::Expand(State* state, Node_List& proj_list, Node* mem) {
660 Compile* C = Compile::current();
661 // Add projection edges for additional defs or kills
662 // DEF/KILL cr
663 MachProjNode *kill;
664 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
665 proj_list.push(kill);
666
667 return this;
668}
669
670MachNode* encodeHeapOopNode::Expand(State* state, Node_List& proj_list, Node* mem) {
671 Compile* C = Compile::current();
672 // Add projection edges for additional defs or kills
673 // DEF/KILL cr
674 MachProjNode *kill;
675 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
676 proj_list.push(kill);
677
678 return this;
679}
680
681MachNode* encodeHeapOop_not_nullNode::Expand(State* state, Node_List& proj_list, Node* mem) {
682 Compile* C = Compile::current();
683 // Add projection edges for additional defs or kills
684 // DEF/KILL cr
685 MachProjNode *kill;
686 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
687 proj_list.push(kill);
688
689 return this;
690}
691
692MachNode* decodeHeapOopNode::Expand(State* state, Node_List& proj_list, Node* mem) {
693 Compile* C = Compile::current();
694 // Add projection edges for additional defs or kills
695 // DEF/KILL cr
696 MachProjNode *kill;
697 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
698 proj_list.push(kill);
699
700 return this;
701}
702
703MachNode* decodeHeapOop_not_nullNode::Expand(State* state, Node_List& proj_list, Node* mem) {
704 Compile* C = Compile::current();
705 // Add projection edges for additional defs or kills
706 // DEF/KILL cr
707 MachProjNode *kill;
708 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
709 proj_list.push(kill);
710
711 return this;
712}
713
714MachNode* encodeKlass_not_nullNode::Expand(State* state, Node_List& proj_list, Node* mem) {
715 Compile* C = Compile::current();
716 // Add projection edges for additional defs or kills
717 // DEF/KILL cr
718 MachProjNode *kill;
719 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
720 proj_list.push(kill);
721
722 return this;
723}
724
725MachNode* decodeKlass_not_nullNode::Expand(State* state, Node_List& proj_list, Node* mem) {
726 Compile* C = Compile::current();
727 // Add projection edges for additional defs or kills
728 // DEF/KILL cr
729 MachProjNode *kill;
730 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
731 proj_list.push(kill);
732
733 return this;
734}
735
736MachNode* jumpXtnd_offsetNode::Expand(State* state, Node_List& proj_list, Node* mem) {
737 Compile* C = Compile::current();
738 // Add projection edges for additional defs or kills
739 // TEMP dest
740 MachTempNode *def;
741 def = new MachTempNode(state->MachOperGenerator(RREGI));
742 add_req(def);
743 add_req(C->mach_constant_base_node());
744
745 return this;
746}
747
748MachNode* jumpXtnd_addrNode::Expand(State* state, Node_List& proj_list, Node* mem) {
749 Compile* C = Compile::current();
750 // Add projection edges for additional defs or kills
751 // TEMP dest
752 MachTempNode *def;
753 def = new MachTempNode(state->MachOperGenerator(RREGI));
754 add_req(def);
755 add_req(C->mach_constant_base_node());
756
757 return this;
758}
759
760MachNode* jumpXtndNode::Expand(State* state, Node_List& proj_list, Node* mem) {
761 Compile* C = Compile::current();
762 // Add projection edges for additional defs or kills
763 // TEMP dest
764 MachTempNode *def;
765 def = new MachTempNode(state->MachOperGenerator(RREGI));
766 add_req(def);
767 add_req(C->mach_constant_base_node());
768
769 return this;
770}
771
772MachNode* cmovI_regUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
773 Compile* C = Compile::current();
774 MachNode *tmp0 = this;
775 MachNode *tmp1 = this;
776 MachNode *tmp2 = this;
777 MachNode *tmp3 = this;
778 MachNode *tmp4 = this;
779 unsigned num0 = 0;
780 unsigned num1 = opnd_array(1)->num_edges();
781 unsigned num2 = opnd_array(2)->num_edges();
782 unsigned num3 = opnd_array(3)->num_edges();
783 unsigned num4 = opnd_array(4)->num_edges();
784 unsigned idx0 = oper_input_base();
785 unsigned idx1 = idx0 + num0;
786 unsigned idx2 = idx1 + num1;
787 unsigned idx3 = idx2 + num2;
788 unsigned idx4 = idx3 + num3;
789 unsigned idx5 = idx4 + num4;
790 MachNode *result = NULL;
791
792 cmovI_regUNode *n0 = new cmovI_regUNode();
793 n0->add_req(_in[0]);
794 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
795 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
796 if(tmp1 == this) {
797 for(unsigned i = 0; i < num1; i++) {
798 n0->add_req(_in[i + idx1]);
799 }
800 }
801 else n0->add_req(tmp1);
802 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
803 if(tmp2 == this) {
804 for(unsigned i = 0; i < num2; i++) {
805 n0->add_req(_in[i + idx2]);
806 }
807 }
808 else n0->add_req(tmp2);
809 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
810 if(tmp3 == this) {
811 for(unsigned i = 0; i < num3; i++) {
812 n0->add_req(_in[i + idx3]);
813 }
814 }
815 else n0->add_req(tmp3);
816 tmp3 = n0;
817 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
818 if(tmp4 == this) {
819 for(unsigned i = 0; i < num4; i++) {
820 n0->add_req(_in[i + idx4]);
821 }
822 }
823 else n0->add_req(tmp4);
824 result = n0->Expand( state, proj_list, mem );
825
826
827 return result;
828}
829
830MachNode* cmovI_memUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
831 Compile* C = Compile::current();
832 MachNode *tmp0 = this;
833 MachNode *tmp1 = this;
834 MachNode *tmp2 = this;
835 MachNode *tmp3 = this;
836 MachNode *tmp4 = this;
837 unsigned num0 = 0;
838 unsigned num1 = opnd_array(1)->num_edges();
839 unsigned num2 = opnd_array(2)->num_edges();
840 unsigned num3 = opnd_array(3)->num_edges();
841 unsigned num4 = opnd_array(4)->num_edges();
842 unsigned idx0 = oper_input_base();
843 if (mem == (Node*)1) {
844 idx0--; // Adjust base because memory edge hasn't been inserted yet
845 }
846 unsigned idx1 = idx0 + num0;
847 unsigned idx2 = idx1 + num1;
848 unsigned idx3 = idx2 + num2;
849 unsigned idx4 = idx3 + num3;
850 unsigned idx5 = idx4 + num4;
851 MachNode *result = NULL;
852
853 cmovI_memUNode *n0 = new cmovI_memUNode();
854 n0->add_req(_in[0]);
855 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
856 if (mem != (Node*)1) {
857 n0->add_req(_in[1]); // Add memory edge
858 }
859 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
860 if(tmp1 == this) {
861 for(unsigned i = 0; i < num1; i++) {
862 n0->add_req(_in[i + idx1]);
863 }
864 }
865 else n0->add_req(tmp1);
866 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
867 if(tmp2 == this) {
868 for(unsigned i = 0; i < num2; i++) {
869 n0->add_req(_in[i + idx2]);
870 }
871 }
872 else n0->add_req(tmp2);
873 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
874 if(tmp3 == this) {
875 for(unsigned i = 0; i < num3; i++) {
876 n0->add_req(_in[i + idx3]);
877 }
878 }
879 else n0->add_req(tmp3);
880 tmp3 = n0;
881 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
882 if(tmp4 == this) {
883 for(unsigned i = 0; i < num4; i++) {
884 n0->add_req(_in[i + idx4]);
885 }
886 }
887 else n0->add_req(tmp4);
888 result = n0->Expand( state, proj_list, mem );
889
890
891 return result;
892}
893
894MachNode* cmovN_regUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
895 Compile* C = Compile::current();
896 MachNode *tmp0 = this;
897 MachNode *tmp1 = this;
898 MachNode *tmp2 = this;
899 MachNode *tmp3 = this;
900 MachNode *tmp4 = this;
901 unsigned num0 = 0;
902 unsigned num1 = opnd_array(1)->num_edges();
903 unsigned num2 = opnd_array(2)->num_edges();
904 unsigned num3 = opnd_array(3)->num_edges();
905 unsigned num4 = opnd_array(4)->num_edges();
906 unsigned idx0 = oper_input_base();
907 unsigned idx1 = idx0 + num0;
908 unsigned idx2 = idx1 + num1;
909 unsigned idx3 = idx2 + num2;
910 unsigned idx4 = idx3 + num3;
911 unsigned idx5 = idx4 + num4;
912 MachNode *result = NULL;
913
914 cmovN_regUNode *n0 = new cmovN_regUNode();
915 n0->add_req(_in[0]);
916 n0->set_opnd_array(0, state->MachOperGenerator(RREGN));
917 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
918 if(tmp1 == this) {
919 for(unsigned i = 0; i < num1; i++) {
920 n0->add_req(_in[i + idx1]);
921 }
922 }
923 else n0->add_req(tmp1);
924 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
925 if(tmp2 == this) {
926 for(unsigned i = 0; i < num2; i++) {
927 n0->add_req(_in[i + idx2]);
928 }
929 }
930 else n0->add_req(tmp2);
931 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
932 if(tmp3 == this) {
933 for(unsigned i = 0; i < num3; i++) {
934 n0->add_req(_in[i + idx3]);
935 }
936 }
937 else n0->add_req(tmp3);
938 tmp3 = n0;
939 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
940 if(tmp4 == this) {
941 for(unsigned i = 0; i < num4; i++) {
942 n0->add_req(_in[i + idx4]);
943 }
944 }
945 else n0->add_req(tmp4);
946 result = n0->Expand( state, proj_list, mem );
947
948
949 return result;
950}
951
952MachNode* cmovP_regUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
953 Compile* C = Compile::current();
954 MachNode *tmp0 = this;
955 MachNode *tmp1 = this;
956 MachNode *tmp2 = this;
957 MachNode *tmp3 = this;
958 MachNode *tmp4 = this;
959 unsigned num0 = 0;
960 unsigned num1 = opnd_array(1)->num_edges();
961 unsigned num2 = opnd_array(2)->num_edges();
962 unsigned num3 = opnd_array(3)->num_edges();
963 unsigned num4 = opnd_array(4)->num_edges();
964 unsigned idx0 = oper_input_base();
965 unsigned idx1 = idx0 + num0;
966 unsigned idx2 = idx1 + num1;
967 unsigned idx3 = idx2 + num2;
968 unsigned idx4 = idx3 + num3;
969 unsigned idx5 = idx4 + num4;
970 MachNode *result = NULL;
971
972 cmovP_regUNode *n0 = new cmovP_regUNode();
973 n0->add_req(_in[0]);
974 n0->set_opnd_array(0, state->MachOperGenerator(RREGP));
975 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
976 if(tmp1 == this) {
977 for(unsigned i = 0; i < num1; i++) {
978 n0->add_req(_in[i + idx1]);
979 }
980 }
981 else n0->add_req(tmp1);
982 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
983 if(tmp2 == this) {
984 for(unsigned i = 0; i < num2; i++) {
985 n0->add_req(_in[i + idx2]);
986 }
987 }
988 else n0->add_req(tmp2);
989 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
990 if(tmp3 == this) {
991 for(unsigned i = 0; i < num3; i++) {
992 n0->add_req(_in[i + idx3]);
993 }
994 }
995 else n0->add_req(tmp3);
996 tmp3 = n0;
997 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
998 if(tmp4 == this) {
999 for(unsigned i = 0; i < num4; i++) {
1000 n0->add_req(_in[i + idx4]);
1001 }
1002 }
1003 else n0->add_req(tmp4);
1004 result = n0->Expand( state, proj_list, mem );
1005
1006
1007 return result;
1008}
1009
1010MachNode* cmovL_regUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1011 Compile* C = Compile::current();
1012 MachNode *tmp0 = this;
1013 MachNode *tmp1 = this;
1014 MachNode *tmp2 = this;
1015 MachNode *tmp3 = this;
1016 MachNode *tmp4 = this;
1017 unsigned num0 = 0;
1018 unsigned num1 = opnd_array(1)->num_edges();
1019 unsigned num2 = opnd_array(2)->num_edges();
1020 unsigned num3 = opnd_array(3)->num_edges();
1021 unsigned num4 = opnd_array(4)->num_edges();
1022 unsigned idx0 = oper_input_base();
1023 unsigned idx1 = idx0 + num0;
1024 unsigned idx2 = idx1 + num1;
1025 unsigned idx3 = idx2 + num2;
1026 unsigned idx4 = idx3 + num3;
1027 unsigned idx5 = idx4 + num4;
1028 MachNode *result = NULL;
1029
1030 cmovL_regUNode *n0 = new cmovL_regUNode();
1031 n0->add_req(_in[0]);
1032 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
1033 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
1034 if(tmp1 == this) {
1035 for(unsigned i = 0; i < num1; i++) {
1036 n0->add_req(_in[i + idx1]);
1037 }
1038 }
1039 else n0->add_req(tmp1);
1040 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
1041 if(tmp2 == this) {
1042 for(unsigned i = 0; i < num2; i++) {
1043 n0->add_req(_in[i + idx2]);
1044 }
1045 }
1046 else n0->add_req(tmp2);
1047 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
1048 if(tmp3 == this) {
1049 for(unsigned i = 0; i < num3; i++) {
1050 n0->add_req(_in[i + idx3]);
1051 }
1052 }
1053 else n0->add_req(tmp3);
1054 tmp3 = n0;
1055 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
1056 if(tmp4 == this) {
1057 for(unsigned i = 0; i < num4; i++) {
1058 n0->add_req(_in[i + idx4]);
1059 }
1060 }
1061 else n0->add_req(tmp4);
1062 result = n0->Expand( state, proj_list, mem );
1063
1064
1065 return result;
1066}
1067
1068MachNode* cmovL_memUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1069 Compile* C = Compile::current();
1070 MachNode *tmp0 = this;
1071 MachNode *tmp1 = this;
1072 MachNode *tmp2 = this;
1073 MachNode *tmp3 = this;
1074 MachNode *tmp4 = this;
1075 unsigned num0 = 0;
1076 unsigned num1 = opnd_array(1)->num_edges();
1077 unsigned num2 = opnd_array(2)->num_edges();
1078 unsigned num3 = opnd_array(3)->num_edges();
1079 unsigned num4 = opnd_array(4)->num_edges();
1080 unsigned idx0 = oper_input_base();
1081 if (mem == (Node*)1) {
1082 idx0--; // Adjust base because memory edge hasn't been inserted yet
1083 }
1084 unsigned idx1 = idx0 + num0;
1085 unsigned idx2 = idx1 + num1;
1086 unsigned idx3 = idx2 + num2;
1087 unsigned idx4 = idx3 + num3;
1088 unsigned idx5 = idx4 + num4;
1089 MachNode *result = NULL;
1090
1091 cmovL_memUNode *n0 = new cmovL_memUNode();
1092 n0->add_req(_in[0]);
1093 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
1094 if (mem != (Node*)1) {
1095 n0->add_req(_in[1]); // Add memory edge
1096 }
1097 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
1098 if(tmp1 == this) {
1099 for(unsigned i = 0; i < num1; i++) {
1100 n0->add_req(_in[i + idx1]);
1101 }
1102 }
1103 else n0->add_req(tmp1);
1104 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
1105 if(tmp2 == this) {
1106 for(unsigned i = 0; i < num2; i++) {
1107 n0->add_req(_in[i + idx2]);
1108 }
1109 }
1110 else n0->add_req(tmp2);
1111 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
1112 if(tmp3 == this) {
1113 for(unsigned i = 0; i < num3; i++) {
1114 n0->add_req(_in[i + idx3]);
1115 }
1116 }
1117 else n0->add_req(tmp3);
1118 tmp3 = n0;
1119 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
1120 if(tmp4 == this) {
1121 for(unsigned i = 0; i < num4; i++) {
1122 n0->add_req(_in[i + idx4]);
1123 }
1124 }
1125 else n0->add_req(tmp4);
1126 result = n0->Expand( state, proj_list, mem );
1127
1128
1129 return result;
1130}
1131
1132MachNode* cmovF_regUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1133 Compile* C = Compile::current();
1134 MachNode *tmp0 = this;
1135 MachNode *tmp1 = this;
1136 MachNode *tmp2 = this;
1137 MachNode *tmp3 = this;
1138 MachNode *tmp4 = this;
1139 unsigned num0 = 0;
1140 unsigned num1 = opnd_array(1)->num_edges();
1141 unsigned num2 = opnd_array(2)->num_edges();
1142 unsigned num3 = opnd_array(3)->num_edges();
1143 unsigned num4 = opnd_array(4)->num_edges();
1144 unsigned idx0 = oper_input_base();
1145 unsigned idx1 = idx0 + num0;
1146 unsigned idx2 = idx1 + num1;
1147 unsigned idx3 = idx2 + num2;
1148 unsigned idx4 = idx3 + num3;
1149 unsigned idx5 = idx4 + num4;
1150 MachNode *result = NULL;
1151
1152 cmovF_regUNode *n0 = new cmovF_regUNode();
1153 n0->add_req(_in[0]);
1154 n0->set_opnd_array(0, state->MachOperGenerator(REGF));
1155 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
1156 if(tmp1 == this) {
1157 for(unsigned i = 0; i < num1; i++) {
1158 n0->add_req(_in[i + idx1]);
1159 }
1160 }
1161 else n0->add_req(tmp1);
1162 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
1163 if(tmp2 == this) {
1164 for(unsigned i = 0; i < num2; i++) {
1165 n0->add_req(_in[i + idx2]);
1166 }
1167 }
1168 else n0->add_req(tmp2);
1169 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
1170 if(tmp3 == this) {
1171 for(unsigned i = 0; i < num3; i++) {
1172 n0->add_req(_in[i + idx3]);
1173 }
1174 }
1175 else n0->add_req(tmp3);
1176 tmp3 = n0;
1177 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
1178 if(tmp4 == this) {
1179 for(unsigned i = 0; i < num4; i++) {
1180 n0->add_req(_in[i + idx4]);
1181 }
1182 }
1183 else n0->add_req(tmp4);
1184 result = n0->Expand( state, proj_list, mem );
1185
1186
1187 return result;
1188}
1189
1190MachNode* cmovD_regUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1191 Compile* C = Compile::current();
1192 MachNode *tmp0 = this;
1193 MachNode *tmp1 = this;
1194 MachNode *tmp2 = this;
1195 MachNode *tmp3 = this;
1196 MachNode *tmp4 = this;
1197 unsigned num0 = 0;
1198 unsigned num1 = opnd_array(1)->num_edges();
1199 unsigned num2 = opnd_array(2)->num_edges();
1200 unsigned num3 = opnd_array(3)->num_edges();
1201 unsigned num4 = opnd_array(4)->num_edges();
1202 unsigned idx0 = oper_input_base();
1203 unsigned idx1 = idx0 + num0;
1204 unsigned idx2 = idx1 + num1;
1205 unsigned idx3 = idx2 + num2;
1206 unsigned idx4 = idx3 + num3;
1207 unsigned idx5 = idx4 + num4;
1208 MachNode *result = NULL;
1209
1210 cmovD_regUNode *n0 = new cmovD_regUNode();
1211 n0->add_req(_in[0]);
1212 n0->set_opnd_array(0, state->MachOperGenerator(REGD));
1213 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
1214 if(tmp1 == this) {
1215 for(unsigned i = 0; i < num1; i++) {
1216 n0->add_req(_in[i + idx1]);
1217 }
1218 }
1219 else n0->add_req(tmp1);
1220 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
1221 if(tmp2 == this) {
1222 for(unsigned i = 0; i < num2; i++) {
1223 n0->add_req(_in[i + idx2]);
1224 }
1225 }
1226 else n0->add_req(tmp2);
1227 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
1228 if(tmp3 == this) {
1229 for(unsigned i = 0; i < num3; i++) {
1230 n0->add_req(_in[i + idx3]);
1231 }
1232 }
1233 else n0->add_req(tmp3);
1234 tmp3 = n0;
1235 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
1236 if(tmp4 == this) {
1237 for(unsigned i = 0; i < num4; i++) {
1238 n0->add_req(_in[i + idx4]);
1239 }
1240 }
1241 else n0->add_req(tmp4);
1242 result = n0->Expand( state, proj_list, mem );
1243
1244
1245 return result;
1246}
1247
1248MachNode* addI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1249 Compile* C = Compile::current();
1250 // Add projection edges for additional defs or kills
1251 // DEF/KILL cr
1252 MachProjNode *kill;
1253 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1254 proj_list.push(kill);
1255
1256 return this;
1257}
1258
1259MachNode* addI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1260 Compile* C = Compile::current();
1261 // Add projection edges for additional defs or kills
1262 // DEF/KILL cr
1263 MachProjNode *kill;
1264 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1265 proj_list.push(kill);
1266
1267 return this;
1268}
1269
1270MachNode* addI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1271 Compile* C = Compile::current();
1272 // Add projection edges for additional defs or kills
1273 // DEF/KILL cr
1274 MachProjNode *kill;
1275 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1276 proj_list.push(kill);
1277
1278 return this;
1279}
1280
1281MachNode* addI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1282 Compile* C = Compile::current();
1283 // Add projection edges for additional defs or kills
1284 // DEF/KILL cr
1285 MachProjNode *kill;
1286 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1287 proj_list.push(kill);
1288
1289 return this;
1290}
1291
1292MachNode* addI_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1293 Compile* C = Compile::current();
1294 // Add projection edges for additional defs or kills
1295 // DEF/KILL cr
1296 MachProjNode *kill;
1297 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1298 proj_list.push(kill);
1299 // Remove duplicated operands and inputs which use the same name.
1300 if (num_opnds() == 4) {
1301 unsigned num0 = 0;
1302 unsigned num1 = opnd_array(1)->num_edges(); // dst
1303 unsigned num2 = opnd_array(2)->num_edges(); // dst
1304 unsigned num3 = opnd_array(3)->num_edges(); // src
1305 unsigned idx0 = oper_input_base();
1306 unsigned idx1 = idx0 + num0;
1307 unsigned idx2 = idx1 + num1;
1308 unsigned idx3 = idx2 + num2;
1309 unsigned idx4 = idx3 + num3;
1310 set_opnd_array(2, opnd_array(3)->clone()); // src
1311 for (unsigned i = 0; i < num3; i++) {
1312 set_req(i + idx2, _in[i + idx3]);
1313 }
1314 num2 = num3;
1315 idx3 = idx2 + num2;
1316 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1317 del_req(i);
1318 }
1319 _num_opnds = 3;
1320 } else {
1321 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
1322 }
1323
1324 return this;
1325}
1326
1327MachNode* addI_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1328 Compile* C = Compile::current();
1329 // Add projection edges for additional defs or kills
1330 // DEF/KILL cr
1331 MachProjNode *kill;
1332 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1333 proj_list.push(kill);
1334 // Remove duplicated operands and inputs which use the same name.
1335 if (num_opnds() == 4) {
1336 unsigned num0 = 0;
1337 unsigned num1 = opnd_array(1)->num_edges(); // dst
1338 unsigned num2 = opnd_array(2)->num_edges(); // src
1339 unsigned num3 = opnd_array(3)->num_edges(); // dst
1340 unsigned idx0 = oper_input_base();
1341 unsigned idx1 = idx0 + num0;
1342 unsigned idx2 = idx1 + num1;
1343 unsigned idx3 = idx2 + num2;
1344 unsigned idx4 = idx3 + num3;
1345 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1346 del_req(i);
1347 }
1348 _num_opnds = 3;
1349 } else {
1350 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
1351 }
1352
1353 return this;
1354}
1355
1356MachNode* addI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1357 Compile* C = Compile::current();
1358 // Add projection edges for additional defs or kills
1359 // DEF/KILL cr
1360 MachProjNode *kill;
1361 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1362 proj_list.push(kill);
1363 // Remove duplicated operands and inputs which use the same name.
1364 if (num_opnds() == 4) {
1365 unsigned num0 = 0;
1366 unsigned num1 = opnd_array(1)->num_edges(); // dst
1367 unsigned num2 = opnd_array(2)->num_edges(); // dst
1368 unsigned num3 = opnd_array(3)->num_edges(); // src
1369 unsigned idx0 = oper_input_base();
1370 unsigned idx1 = idx0 + num0;
1371 unsigned idx2 = idx1 + num1;
1372 unsigned idx3 = idx2 + num2;
1373 unsigned idx4 = idx3 + num3;
1374 set_opnd_array(2, opnd_array(3)->clone()); // src
1375 for (unsigned i = 0; i < num3; i++) {
1376 set_req(i + idx2, _in[i + idx3]);
1377 }
1378 num2 = num3;
1379 idx3 = idx2 + num2;
1380 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1381 del_req(i);
1382 }
1383 _num_opnds = 3;
1384 } else {
1385 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
1386 }
1387
1388 return this;
1389}
1390
1391MachNode* incI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1392 Compile* C = Compile::current();
1393 // Add projection edges for additional defs or kills
1394 // DEF/KILL cr
1395 MachProjNode *kill;
1396 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1397 proj_list.push(kill);
1398
1399 return this;
1400}
1401
1402MachNode* incI_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1403 Compile* C = Compile::current();
1404 // Add projection edges for additional defs or kills
1405 // DEF/KILL cr
1406 MachProjNode *kill;
1407 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1408 proj_list.push(kill);
1409 // Remove duplicated operands and inputs which use the same name.
1410 if (num_opnds() == 4) {
1411 unsigned num0 = 0;
1412 unsigned num1 = opnd_array(1)->num_edges(); // dst
1413 unsigned num2 = opnd_array(2)->num_edges(); // dst
1414 unsigned num3 = opnd_array(3)->num_edges(); // src
1415 unsigned idx0 = oper_input_base();
1416 unsigned idx1 = idx0 + num0;
1417 unsigned idx2 = idx1 + num1;
1418 unsigned idx3 = idx2 + num2;
1419 unsigned idx4 = idx3 + num3;
1420 set_opnd_array(2, opnd_array(3)->clone()); // src
1421 for (unsigned i = 0; i < num3; i++) {
1422 set_req(i + idx2, _in[i + idx3]);
1423 }
1424 num2 = num3;
1425 idx3 = idx2 + num2;
1426 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1427 del_req(i);
1428 }
1429 _num_opnds = 3;
1430 } else {
1431 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
1432 }
1433
1434 return this;
1435}
1436
1437MachNode* decI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1438 Compile* C = Compile::current();
1439 // Add projection edges for additional defs or kills
1440 // DEF/KILL cr
1441 MachProjNode *kill;
1442 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1443 proj_list.push(kill);
1444
1445 return this;
1446}
1447
1448MachNode* decI_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1449 Compile* C = Compile::current();
1450 // Add projection edges for additional defs or kills
1451 // DEF/KILL cr
1452 MachProjNode *kill;
1453 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1454 proj_list.push(kill);
1455 // Remove duplicated operands and inputs which use the same name.
1456 if (num_opnds() == 4) {
1457 unsigned num0 = 0;
1458 unsigned num1 = opnd_array(1)->num_edges(); // dst
1459 unsigned num2 = opnd_array(2)->num_edges(); // dst
1460 unsigned num3 = opnd_array(3)->num_edges(); // src
1461 unsigned idx0 = oper_input_base();
1462 unsigned idx1 = idx0 + num0;
1463 unsigned idx2 = idx1 + num1;
1464 unsigned idx3 = idx2 + num2;
1465 unsigned idx4 = idx3 + num3;
1466 set_opnd_array(2, opnd_array(3)->clone()); // src
1467 for (unsigned i = 0; i < num3; i++) {
1468 set_req(i + idx2, _in[i + idx3]);
1469 }
1470 num2 = num3;
1471 idx3 = idx2 + num2;
1472 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1473 del_req(i);
1474 }
1475 _num_opnds = 3;
1476 } else {
1477 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
1478 }
1479
1480 return this;
1481}
1482
1483MachNode* addL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1484 Compile* C = Compile::current();
1485 // Add projection edges for additional defs or kills
1486 // DEF/KILL cr
1487 MachProjNode *kill;
1488 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1489 proj_list.push(kill);
1490
1491 return this;
1492}
1493
1494MachNode* addL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1495 Compile* C = Compile::current();
1496 // Add projection edges for additional defs or kills
1497 // DEF/KILL cr
1498 MachProjNode *kill;
1499 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1500 proj_list.push(kill);
1501
1502 return this;
1503}
1504
1505MachNode* addL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1506 Compile* C = Compile::current();
1507 // Add projection edges for additional defs or kills
1508 // DEF/KILL cr
1509 MachProjNode *kill;
1510 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1511 proj_list.push(kill);
1512
1513 return this;
1514}
1515
1516MachNode* addL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1517 Compile* C = Compile::current();
1518 // Add projection edges for additional defs or kills
1519 // DEF/KILL cr
1520 MachProjNode *kill;
1521 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1522 proj_list.push(kill);
1523
1524 return this;
1525}
1526
1527MachNode* addL_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1528 Compile* C = Compile::current();
1529 // Add projection edges for additional defs or kills
1530 // DEF/KILL cr
1531 MachProjNode *kill;
1532 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1533 proj_list.push(kill);
1534 // Remove duplicated operands and inputs which use the same name.
1535 if (num_opnds() == 4) {
1536 unsigned num0 = 0;
1537 unsigned num1 = opnd_array(1)->num_edges(); // dst
1538 unsigned num2 = opnd_array(2)->num_edges(); // dst
1539 unsigned num3 = opnd_array(3)->num_edges(); // src
1540 unsigned idx0 = oper_input_base();
1541 unsigned idx1 = idx0 + num0;
1542 unsigned idx2 = idx1 + num1;
1543 unsigned idx3 = idx2 + num2;
1544 unsigned idx4 = idx3 + num3;
1545 set_opnd_array(2, opnd_array(3)->clone()); // src
1546 for (unsigned i = 0; i < num3; i++) {
1547 set_req(i + idx2, _in[i + idx3]);
1548 }
1549 num2 = num3;
1550 idx3 = idx2 + num2;
1551 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1552 del_req(i);
1553 }
1554 _num_opnds = 3;
1555 } else {
1556 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
1557 }
1558
1559 return this;
1560}
1561
1562MachNode* addL_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1563 Compile* C = Compile::current();
1564 // Add projection edges for additional defs or kills
1565 // DEF/KILL cr
1566 MachProjNode *kill;
1567 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1568 proj_list.push(kill);
1569 // Remove duplicated operands and inputs which use the same name.
1570 if (num_opnds() == 4) {
1571 unsigned num0 = 0;
1572 unsigned num1 = opnd_array(1)->num_edges(); // dst
1573 unsigned num2 = opnd_array(2)->num_edges(); // src
1574 unsigned num3 = opnd_array(3)->num_edges(); // dst
1575 unsigned idx0 = oper_input_base();
1576 unsigned idx1 = idx0 + num0;
1577 unsigned idx2 = idx1 + num1;
1578 unsigned idx3 = idx2 + num2;
1579 unsigned idx4 = idx3 + num3;
1580 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1581 del_req(i);
1582 }
1583 _num_opnds = 3;
1584 } else {
1585 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
1586 }
1587
1588 return this;
1589}
1590
1591MachNode* addL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1592 Compile* C = Compile::current();
1593 // Add projection edges for additional defs or kills
1594 // DEF/KILL cr
1595 MachProjNode *kill;
1596 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1597 proj_list.push(kill);
1598 // Remove duplicated operands and inputs which use the same name.
1599 if (num_opnds() == 4) {
1600 unsigned num0 = 0;
1601 unsigned num1 = opnd_array(1)->num_edges(); // dst
1602 unsigned num2 = opnd_array(2)->num_edges(); // dst
1603 unsigned num3 = opnd_array(3)->num_edges(); // src
1604 unsigned idx0 = oper_input_base();
1605 unsigned idx1 = idx0 + num0;
1606 unsigned idx2 = idx1 + num1;
1607 unsigned idx3 = idx2 + num2;
1608 unsigned idx4 = idx3 + num3;
1609 set_opnd_array(2, opnd_array(3)->clone()); // src
1610 for (unsigned i = 0; i < num3; i++) {
1611 set_req(i + idx2, _in[i + idx3]);
1612 }
1613 num2 = num3;
1614 idx3 = idx2 + num2;
1615 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1616 del_req(i);
1617 }
1618 _num_opnds = 3;
1619 } else {
1620 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
1621 }
1622
1623 return this;
1624}
1625
1626MachNode* incL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1627 Compile* C = Compile::current();
1628 // Add projection edges for additional defs or kills
1629 // DEF/KILL cr
1630 MachProjNode *kill;
1631 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1632 proj_list.push(kill);
1633
1634 return this;
1635}
1636
1637MachNode* incL_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1638 Compile* C = Compile::current();
1639 // Add projection edges for additional defs or kills
1640 // DEF/KILL cr
1641 MachProjNode *kill;
1642 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1643 proj_list.push(kill);
1644 // Remove duplicated operands and inputs which use the same name.
1645 if (num_opnds() == 4) {
1646 unsigned num0 = 0;
1647 unsigned num1 = opnd_array(1)->num_edges(); // dst
1648 unsigned num2 = opnd_array(2)->num_edges(); // dst
1649 unsigned num3 = opnd_array(3)->num_edges(); // src
1650 unsigned idx0 = oper_input_base();
1651 unsigned idx1 = idx0 + num0;
1652 unsigned idx2 = idx1 + num1;
1653 unsigned idx3 = idx2 + num2;
1654 unsigned idx4 = idx3 + num3;
1655 set_opnd_array(2, opnd_array(3)->clone()); // src
1656 for (unsigned i = 0; i < num3; i++) {
1657 set_req(i + idx2, _in[i + idx3]);
1658 }
1659 num2 = num3;
1660 idx3 = idx2 + num2;
1661 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1662 del_req(i);
1663 }
1664 _num_opnds = 3;
1665 } else {
1666 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
1667 }
1668
1669 return this;
1670}
1671
1672MachNode* decL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1673 Compile* C = Compile::current();
1674 // Add projection edges for additional defs or kills
1675 // DEF/KILL cr
1676 MachProjNode *kill;
1677 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1678 proj_list.push(kill);
1679
1680 return this;
1681}
1682
1683MachNode* decL_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1684 Compile* C = Compile::current();
1685 // Add projection edges for additional defs or kills
1686 // DEF/KILL cr
1687 MachProjNode *kill;
1688 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1689 proj_list.push(kill);
1690 // Remove duplicated operands and inputs which use the same name.
1691 if (num_opnds() == 4) {
1692 unsigned num0 = 0;
1693 unsigned num1 = opnd_array(1)->num_edges(); // dst
1694 unsigned num2 = opnd_array(2)->num_edges(); // dst
1695 unsigned num3 = opnd_array(3)->num_edges(); // src
1696 unsigned idx0 = oper_input_base();
1697 unsigned idx1 = idx0 + num0;
1698 unsigned idx2 = idx1 + num1;
1699 unsigned idx3 = idx2 + num2;
1700 unsigned idx4 = idx3 + num3;
1701 set_opnd_array(2, opnd_array(3)->clone()); // src
1702 for (unsigned i = 0; i < num3; i++) {
1703 set_req(i + idx2, _in[i + idx3]);
1704 }
1705 num2 = num3;
1706 idx3 = idx2 + num2;
1707 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1708 del_req(i);
1709 }
1710 _num_opnds = 3;
1711 } else {
1712 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
1713 }
1714
1715 return this;
1716}
1717
1718MachNode* addP_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1719 Compile* C = Compile::current();
1720 // Add projection edges for additional defs or kills
1721 // DEF/KILL cr
1722 MachProjNode *kill;
1723 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1724 proj_list.push(kill);
1725
1726 return this;
1727}
1728
1729MachNode* addP_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1730 Compile* C = Compile::current();
1731 // Add projection edges for additional defs or kills
1732 // DEF/KILL cr
1733 MachProjNode *kill;
1734 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1735 proj_list.push(kill);
1736
1737 return this;
1738}
1739
1740MachNode* storeIConditionalNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1741 Compile* C = Compile::current();
1742 // Add projection edges for additional defs or kills
1743 // DEF/KILL oldval
1744 MachProjNode *kill;
1745 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1746 proj_list.push(kill);
1747
1748 return this;
1749}
1750
1751MachNode* storeLConditionalNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1752 Compile* C = Compile::current();
1753 // Add projection edges for additional defs or kills
1754 // DEF/KILL oldval
1755 MachProjNode *kill;
1756 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
1757 proj_list.push(kill);
1758
1759 return this;
1760}
1761
1762MachNode* compareAndSwapPNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1763 Compile* C = Compile::current();
1764 // Add projection edges for additional defs or kills
1765 // DEF/KILL oldval
1766 MachProjNode *kill;
1767 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
1768 proj_list.push(kill);
1769 // DEF/KILL cr
1770 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1771 proj_list.push(kill);
1772
1773 return this;
1774}
1775
1776MachNode* compareAndSwapP_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1777 Compile* C = Compile::current();
1778 // Add projection edges for additional defs or kills
1779 // DEF/KILL oldval
1780 MachProjNode *kill;
1781 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
1782 proj_list.push(kill);
1783 // DEF/KILL cr
1784 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1785 proj_list.push(kill);
1786
1787 return this;
1788}
1789
1790MachNode* compareAndSwapLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1791 Compile* C = Compile::current();
1792 // Add projection edges for additional defs or kills
1793 // DEF/KILL oldval
1794 MachProjNode *kill;
1795 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
1796 proj_list.push(kill);
1797 // DEF/KILL cr
1798 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1799 proj_list.push(kill);
1800
1801 return this;
1802}
1803
1804MachNode* compareAndSwapL_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1805 Compile* C = Compile::current();
1806 // Add projection edges for additional defs or kills
1807 // DEF/KILL oldval
1808 MachProjNode *kill;
1809 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
1810 proj_list.push(kill);
1811 // DEF/KILL cr
1812 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1813 proj_list.push(kill);
1814
1815 return this;
1816}
1817
1818MachNode* compareAndSwapINode::Expand(State* state, Node_List& proj_list, Node* mem) {
1819 Compile* C = Compile::current();
1820 // Add projection edges for additional defs or kills
1821 // DEF/KILL oldval
1822 MachProjNode *kill;
1823 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1824 proj_list.push(kill);
1825 // DEF/KILL cr
1826 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1827 proj_list.push(kill);
1828
1829 return this;
1830}
1831
1832MachNode* compareAndSwapI_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1833 Compile* C = Compile::current();
1834 // Add projection edges for additional defs or kills
1835 // DEF/KILL oldval
1836 MachProjNode *kill;
1837 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1838 proj_list.push(kill);
1839 // DEF/KILL cr
1840 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1841 proj_list.push(kill);
1842
1843 return this;
1844}
1845
1846MachNode* compareAndSwapBNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1847 Compile* C = Compile::current();
1848 // Add projection edges for additional defs or kills
1849 // DEF/KILL oldval
1850 MachProjNode *kill;
1851 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1852 proj_list.push(kill);
1853 // DEF/KILL cr
1854 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1855 proj_list.push(kill);
1856
1857 return this;
1858}
1859
1860MachNode* compareAndSwapB_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1861 Compile* C = Compile::current();
1862 // Add projection edges for additional defs or kills
1863 // DEF/KILL oldval
1864 MachProjNode *kill;
1865 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1866 proj_list.push(kill);
1867 // DEF/KILL cr
1868 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1869 proj_list.push(kill);
1870
1871 return this;
1872}
1873
1874MachNode* compareAndSwapSNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1875 Compile* C = Compile::current();
1876 // Add projection edges for additional defs or kills
1877 // DEF/KILL oldval
1878 MachProjNode *kill;
1879 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1880 proj_list.push(kill);
1881 // DEF/KILL cr
1882 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1883 proj_list.push(kill);
1884
1885 return this;
1886}
1887
1888MachNode* compareAndSwapS_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1889 Compile* C = Compile::current();
1890 // Add projection edges for additional defs or kills
1891 // DEF/KILL oldval
1892 MachProjNode *kill;
1893 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1894 proj_list.push(kill);
1895 // DEF/KILL cr
1896 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1897 proj_list.push(kill);
1898
1899 return this;
1900}
1901
1902MachNode* compareAndSwapNNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1903 Compile* C = Compile::current();
1904 // Add projection edges for additional defs or kills
1905 // DEF/KILL oldval
1906 MachProjNode *kill;
1907 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegN );
1908 proj_list.push(kill);
1909 // DEF/KILL cr
1910 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1911 proj_list.push(kill);
1912
1913 return this;
1914}
1915
1916MachNode* compareAndSwapN_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1917 Compile* C = Compile::current();
1918 // Add projection edges for additional defs or kills
1919 // DEF/KILL oldval
1920 MachProjNode *kill;
1921 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegN );
1922 proj_list.push(kill);
1923 // DEF/KILL cr
1924 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1925 proj_list.push(kill);
1926
1927 return this;
1928}
1929
1930MachNode* compareAndExchangeBNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1931 Compile* C = Compile::current();
1932 // Add projection edges for additional defs or kills
1933 // DEF/KILL cr
1934 MachProjNode *kill;
1935 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1936 proj_list.push(kill);
1937
1938 return this;
1939}
1940
1941MachNode* compareAndExchangeSNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1942 Compile* C = Compile::current();
1943 // Add projection edges for additional defs or kills
1944 // DEF/KILL cr
1945 MachProjNode *kill;
1946 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1947 proj_list.push(kill);
1948
1949 return this;
1950}
1951
1952MachNode* compareAndExchangeINode::Expand(State* state, Node_List& proj_list, Node* mem) {
1953 Compile* C = Compile::current();
1954 // Add projection edges for additional defs or kills
1955 // DEF/KILL cr
1956 MachProjNode *kill;
1957 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1958 proj_list.push(kill);
1959
1960 return this;
1961}
1962
1963MachNode* compareAndExchangeLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1964 Compile* C = Compile::current();
1965 // Add projection edges for additional defs or kills
1966 // DEF/KILL cr
1967 MachProjNode *kill;
1968 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1969 proj_list.push(kill);
1970
1971 return this;
1972}
1973
1974MachNode* compareAndExchangeNNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1975 Compile* C = Compile::current();
1976 // Add projection edges for additional defs or kills
1977 // DEF/KILL cr
1978 MachProjNode *kill;
1979 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1980 proj_list.push(kill);
1981
1982 return this;
1983}
1984
1985MachNode* compareAndExchangePNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1986 Compile* C = Compile::current();
1987 // Add projection edges for additional defs or kills
1988 // DEF/KILL cr
1989 MachProjNode *kill;
1990 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1991 proj_list.push(kill);
1992
1993 return this;
1994}
1995
1996MachNode* xaddB_no_resNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1997 Compile* C = Compile::current();
1998 // Add projection edges for additional defs or kills
1999 // DEF/KILL cr
2000 MachProjNode *kill;
2001 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2002 proj_list.push(kill);
2003
2004 return this;
2005}
2006
2007MachNode* xaddBNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2008 Compile* C = Compile::current();
2009 // Add projection edges for additional defs or kills
2010 // DEF/KILL cr
2011 MachProjNode *kill;
2012 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2013 proj_list.push(kill);
2014
2015 return this;
2016}
2017
2018MachNode* xaddS_no_resNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2019 Compile* C = Compile::current();
2020 // Add projection edges for additional defs or kills
2021 // DEF/KILL cr
2022 MachProjNode *kill;
2023 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2024 proj_list.push(kill);
2025
2026 return this;
2027}
2028
2029MachNode* xaddSNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2030 Compile* C = Compile::current();
2031 // Add projection edges for additional defs or kills
2032 // DEF/KILL cr
2033 MachProjNode *kill;
2034 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2035 proj_list.push(kill);
2036
2037 return this;
2038}
2039
2040MachNode* xaddI_no_resNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2041 Compile* C = Compile::current();
2042 // Add projection edges for additional defs or kills
2043 // DEF/KILL cr
2044 MachProjNode *kill;
2045 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2046 proj_list.push(kill);
2047
2048 return this;
2049}
2050
2051MachNode* xaddINode::Expand(State* state, Node_List& proj_list, Node* mem) {
2052 Compile* C = Compile::current();
2053 // Add projection edges for additional defs or kills
2054 // DEF/KILL cr
2055 MachProjNode *kill;
2056 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2057 proj_list.push(kill);
2058
2059 return this;
2060}
2061
2062MachNode* xaddL_no_resNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2063 Compile* C = Compile::current();
2064 // Add projection edges for additional defs or kills
2065 // DEF/KILL cr
2066 MachProjNode *kill;
2067 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2068 proj_list.push(kill);
2069
2070 return this;
2071}
2072
2073MachNode* xaddLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2074 Compile* C = Compile::current();
2075 // Add projection edges for additional defs or kills
2076 // DEF/KILL cr
2077 MachProjNode *kill;
2078 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2079 proj_list.push(kill);
2080
2081 return this;
2082}
2083
2084MachNode* absI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2085 Compile* C = Compile::current();
2086 // Add projection edges for additional defs or kills
2087 // TEMP dst
2088 MachTempNode *def;
2089 def = new MachTempNode(state->MachOperGenerator(RREGI));
2090 add_req(def);
2091 // TEMP tmp
2092 def = new MachTempNode(state->MachOperGenerator(RREGI));
2093 add_req(def);
2094 // DEF/KILL cr
2095 MachProjNode *kill;
2096 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2097 proj_list.push(kill);
2098
2099 return this;
2100}
2101
2102MachNode* absL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2103 Compile* C = Compile::current();
2104 // Add projection edges for additional defs or kills
2105 // TEMP dst
2106 MachTempNode *def;
2107 def = new MachTempNode(state->MachOperGenerator(RREGL));
2108 add_req(def);
2109 // TEMP tmp
2110 def = new MachTempNode(state->MachOperGenerator(RREGL));
2111 add_req(def);
2112 // DEF/KILL cr
2113 MachProjNode *kill;
2114 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2115 proj_list.push(kill);
2116
2117 return this;
2118}
2119
2120MachNode* subI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2121 Compile* C = Compile::current();
2122 // Add projection edges for additional defs or kills
2123 // DEF/KILL cr
2124 MachProjNode *kill;
2125 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2126 proj_list.push(kill);
2127
2128 return this;
2129}
2130
2131MachNode* subI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2132 Compile* C = Compile::current();
2133 // Add projection edges for additional defs or kills
2134 // DEF/KILL cr
2135 MachProjNode *kill;
2136 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2137 proj_list.push(kill);
2138
2139 return this;
2140}
2141
2142MachNode* subI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2143 Compile* C = Compile::current();
2144 // Add projection edges for additional defs or kills
2145 // DEF/KILL cr
2146 MachProjNode *kill;
2147 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2148 proj_list.push(kill);
2149
2150 return this;
2151}
2152
2153MachNode* subI_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2154 Compile* C = Compile::current();
2155 // Add projection edges for additional defs or kills
2156 // DEF/KILL cr
2157 MachProjNode *kill;
2158 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2159 proj_list.push(kill);
2160 // Remove duplicated operands and inputs which use the same name.
2161 if (num_opnds() == 4) {
2162 unsigned num0 = 0;
2163 unsigned num1 = opnd_array(1)->num_edges(); // dst
2164 unsigned num2 = opnd_array(2)->num_edges(); // dst
2165 unsigned num3 = opnd_array(3)->num_edges(); // src
2166 unsigned idx0 = oper_input_base();
2167 unsigned idx1 = idx0 + num0;
2168 unsigned idx2 = idx1 + num1;
2169 unsigned idx3 = idx2 + num2;
2170 unsigned idx4 = idx3 + num3;
2171 set_opnd_array(2, opnd_array(3)->clone()); // src
2172 for (unsigned i = 0; i < num3; i++) {
2173 set_req(i + idx2, _in[i + idx3]);
2174 }
2175 num2 = num3;
2176 idx3 = idx2 + num2;
2177 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2178 del_req(i);
2179 }
2180 _num_opnds = 3;
2181 } else {
2182 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
2183 }
2184
2185 return this;
2186}
2187
2188MachNode* subI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2189 Compile* C = Compile::current();
2190 // Add projection edges for additional defs or kills
2191 // DEF/KILL cr
2192 MachProjNode *kill;
2193 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2194 proj_list.push(kill);
2195 // Remove duplicated operands and inputs which use the same name.
2196 if (num_opnds() == 4) {
2197 unsigned num0 = 0;
2198 unsigned num1 = opnd_array(1)->num_edges(); // dst
2199 unsigned num2 = opnd_array(2)->num_edges(); // dst
2200 unsigned num3 = opnd_array(3)->num_edges(); // src
2201 unsigned idx0 = oper_input_base();
2202 unsigned idx1 = idx0 + num0;
2203 unsigned idx2 = idx1 + num1;
2204 unsigned idx3 = idx2 + num2;
2205 unsigned idx4 = idx3 + num3;
2206 set_opnd_array(2, opnd_array(3)->clone()); // src
2207 for (unsigned i = 0; i < num3; i++) {
2208 set_req(i + idx2, _in[i + idx3]);
2209 }
2210 num2 = num3;
2211 idx3 = idx2 + num2;
2212 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2213 del_req(i);
2214 }
2215 _num_opnds = 3;
2216 } else {
2217 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
2218 }
2219
2220 return this;
2221}
2222
2223MachNode* subL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2224 Compile* C = Compile::current();
2225 // Add projection edges for additional defs or kills
2226 // DEF/KILL cr
2227 MachProjNode *kill;
2228 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2229 proj_list.push(kill);
2230
2231 return this;
2232}
2233
2234MachNode* subL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2235 Compile* C = Compile::current();
2236 // Add projection edges for additional defs or kills
2237 // DEF/KILL cr
2238 MachProjNode *kill;
2239 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2240 proj_list.push(kill);
2241
2242 return this;
2243}
2244
2245MachNode* subL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2246 Compile* C = Compile::current();
2247 // Add projection edges for additional defs or kills
2248 // DEF/KILL cr
2249 MachProjNode *kill;
2250 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2251 proj_list.push(kill);
2252
2253 return this;
2254}
2255
2256MachNode* subL_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2257 Compile* C = Compile::current();
2258 // Add projection edges for additional defs or kills
2259 // DEF/KILL cr
2260 MachProjNode *kill;
2261 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2262 proj_list.push(kill);
2263 // Remove duplicated operands and inputs which use the same name.
2264 if (num_opnds() == 4) {
2265 unsigned num0 = 0;
2266 unsigned num1 = opnd_array(1)->num_edges(); // dst
2267 unsigned num2 = opnd_array(2)->num_edges(); // dst
2268 unsigned num3 = opnd_array(3)->num_edges(); // src
2269 unsigned idx0 = oper_input_base();
2270 unsigned idx1 = idx0 + num0;
2271 unsigned idx2 = idx1 + num1;
2272 unsigned idx3 = idx2 + num2;
2273 unsigned idx4 = idx3 + num3;
2274 set_opnd_array(2, opnd_array(3)->clone()); // src
2275 for (unsigned i = 0; i < num3; i++) {
2276 set_req(i + idx2, _in[i + idx3]);
2277 }
2278 num2 = num3;
2279 idx3 = idx2 + num2;
2280 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2281 del_req(i);
2282 }
2283 _num_opnds = 3;
2284 } else {
2285 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
2286 }
2287
2288 return this;
2289}
2290
2291MachNode* subL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2292 Compile* C = Compile::current();
2293 // Add projection edges for additional defs or kills
2294 // DEF/KILL cr
2295 MachProjNode *kill;
2296 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2297 proj_list.push(kill);
2298 // Remove duplicated operands and inputs which use the same name.
2299 if (num_opnds() == 4) {
2300 unsigned num0 = 0;
2301 unsigned num1 = opnd_array(1)->num_edges(); // dst
2302 unsigned num2 = opnd_array(2)->num_edges(); // dst
2303 unsigned num3 = opnd_array(3)->num_edges(); // src
2304 unsigned idx0 = oper_input_base();
2305 unsigned idx1 = idx0 + num0;
2306 unsigned idx2 = idx1 + num1;
2307 unsigned idx3 = idx2 + num2;
2308 unsigned idx4 = idx3 + num3;
2309 set_opnd_array(2, opnd_array(3)->clone()); // src
2310 for (unsigned i = 0; i < num3; i++) {
2311 set_req(i + idx2, _in[i + idx3]);
2312 }
2313 num2 = num3;
2314 idx3 = idx2 + num2;
2315 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2316 del_req(i);
2317 }
2318 _num_opnds = 3;
2319 } else {
2320 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
2321 }
2322
2323 return this;
2324}
2325
2326MachNode* subP_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2327 Compile* C = Compile::current();
2328 // Add projection edges for additional defs or kills
2329 // DEF/KILL cr
2330 MachProjNode *kill;
2331 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2332 proj_list.push(kill);
2333
2334 return this;
2335}
2336
2337MachNode* negI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2338 Compile* C = Compile::current();
2339 // Add projection edges for additional defs or kills
2340 // DEF/KILL cr
2341 MachProjNode *kill;
2342 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2343 proj_list.push(kill);
2344
2345 return this;
2346}
2347
2348MachNode* negI_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2349 Compile* C = Compile::current();
2350 // Add projection edges for additional defs or kills
2351 // DEF/KILL cr
2352 MachProjNode *kill;
2353 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2354 proj_list.push(kill);
2355 // Remove duplicated operands and inputs which use the same name.
2356 if (num_opnds() == 4) {
2357 unsigned num0 = 0;
2358 unsigned num1 = opnd_array(1)->num_edges(); // dst
2359 unsigned num2 = opnd_array(2)->num_edges(); // zero
2360 unsigned num3 = opnd_array(3)->num_edges(); // dst
2361 unsigned idx0 = oper_input_base();
2362 unsigned idx1 = idx0 + num0;
2363 unsigned idx2 = idx1 + num1;
2364 unsigned idx3 = idx2 + num2;
2365 unsigned idx4 = idx3 + num3;
2366 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2367 del_req(i);
2368 }
2369 _num_opnds = 3;
2370 } else {
2371 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
2372 }
2373
2374 return this;
2375}
2376
2377MachNode* negL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2378 Compile* C = Compile::current();
2379 // Add projection edges for additional defs or kills
2380 // DEF/KILL cr
2381 MachProjNode *kill;
2382 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2383 proj_list.push(kill);
2384
2385 return this;
2386}
2387
2388MachNode* negL_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2389 Compile* C = Compile::current();
2390 // Add projection edges for additional defs or kills
2391 // DEF/KILL cr
2392 MachProjNode *kill;
2393 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2394 proj_list.push(kill);
2395 // Remove duplicated operands and inputs which use the same name.
2396 if (num_opnds() == 4) {
2397 unsigned num0 = 0;
2398 unsigned num1 = opnd_array(1)->num_edges(); // dst
2399 unsigned num2 = opnd_array(2)->num_edges(); // zero
2400 unsigned num3 = opnd_array(3)->num_edges(); // dst
2401 unsigned idx0 = oper_input_base();
2402 unsigned idx1 = idx0 + num0;
2403 unsigned idx2 = idx1 + num1;
2404 unsigned idx3 = idx2 + num2;
2405 unsigned idx4 = idx3 + num3;
2406 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2407 del_req(i);
2408 }
2409 _num_opnds = 3;
2410 } else {
2411 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
2412 }
2413
2414 return this;
2415}
2416
2417MachNode* mulI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2418 Compile* C = Compile::current();
2419 // Add projection edges for additional defs or kills
2420 // DEF/KILL cr
2421 MachProjNode *kill;
2422 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2423 proj_list.push(kill);
2424
2425 return this;
2426}
2427
2428MachNode* mulI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2429 Compile* C = Compile::current();
2430 // Add projection edges for additional defs or kills
2431 // DEF/KILL cr
2432 MachProjNode *kill;
2433 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2434 proj_list.push(kill);
2435
2436 return this;
2437}
2438
2439MachNode* mulI_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2440 Compile* C = Compile::current();
2441 // Add projection edges for additional defs or kills
2442 // DEF/KILL cr
2443 MachProjNode *kill;
2444 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2445 proj_list.push(kill);
2446
2447 return this;
2448}
2449
2450MachNode* mulI_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2451 Compile* C = Compile::current();
2452 // Add projection edges for additional defs or kills
2453 // DEF/KILL cr
2454 MachProjNode *kill;
2455 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2456 proj_list.push(kill);
2457
2458 return this;
2459}
2460
2461MachNode* mulI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2462 Compile* C = Compile::current();
2463 // Add projection edges for additional defs or kills
2464 // DEF/KILL cr
2465 MachProjNode *kill;
2466 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2467 proj_list.push(kill);
2468
2469 return this;
2470}
2471
2472MachNode* mulAddS2I_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2473 Compile* C = Compile::current();
2474 MachNode *tmp0 = this;
2475 MachNode *tmp1 = this;
2476 MachNode *tmp2 = this;
2477 MachNode *tmp3 = this;
2478 MachNode *tmp4 = this;
2479 unsigned num0 = 0;
2480 unsigned num1 = opnd_array(1)->num_edges();
2481 unsigned num2 = opnd_array(2)->num_edges();
2482 unsigned num3 = opnd_array(3)->num_edges();
2483 unsigned num4 = opnd_array(4)->num_edges();
2484 unsigned idx0 = oper_input_base();
2485 unsigned idx1 = idx0 + num0;
2486 unsigned idx2 = idx1 + num1;
2487 unsigned idx3 = idx2 + num2;
2488 unsigned idx4 = idx3 + num3;
2489 unsigned idx5 = idx4 + num4;
2490 MachNode *result = NULL;
2491
2492 mulI_rRegNode *n0 = new mulI_rRegNode();
2493 n0->add_req(_in[0]);
2494 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
2495 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
2496 if(tmp1 == this) {
2497 for(unsigned i = 0; i < num1; i++) {
2498 n0->add_req(_in[i + idx1]);
2499 }
2500 }
2501 else n0->add_req(tmp1);
2502 tmp1 = n0;
2503 n0->set_opnd_array(2, opnd_array(2)->clone()); // src1
2504 if(tmp2 == this) {
2505 for(unsigned i = 0; i < num2; i++) {
2506 n0->add_req(_in[i + idx2]);
2507 }
2508 }
2509 else n0->add_req(tmp2);
2510 result = n0->Expand( state, proj_list, mem );
2511
2512 mulI_rRegNode *n1 = new mulI_rRegNode();
2513 n1->add_req(_in[0]);
2514 n1->set_opnd_array(0, state->MachOperGenerator(RREGI));
2515 n1->set_opnd_array(1, opnd_array(3)->clone()); // src2
2516 if(tmp3 == this) {
2517 for(unsigned i = 0; i < num3; i++) {
2518 n1->add_req(_in[i + idx3]);
2519 }
2520 }
2521 else n1->add_req(tmp3);
2522 tmp3 = n1;
2523 n1->set_opnd_array(2, opnd_array(4)->clone()); // src3
2524 if(tmp4 == this) {
2525 for(unsigned i = 0; i < num4; i++) {
2526 n1->add_req(_in[i + idx4]);
2527 }
2528 }
2529 else n1->add_req(tmp4);
2530 result = n1->Expand( state, proj_list, mem );
2531
2532 addI_rRegNode *n2 = new addI_rRegNode();
2533 n2->add_req(_in[0]);
2534 n2->set_opnd_array(0, state->MachOperGenerator(RREGI));
2535 n2->set_opnd_array(1, opnd_array(1)->clone()); // dst
2536 if(tmp1 == this) {
2537 for(unsigned i = 0; i < num1; i++) {
2538 n2->add_req(_in[i + idx1]);
2539 }
2540 }
2541 else n2->add_req(tmp1);
2542 tmp1 = n2;
2543 n2->set_opnd_array(2, opnd_array(3)->clone()); // src2
2544 if(tmp3 == this) {
2545 for(unsigned i = 0; i < num3; i++) {
2546 n2->add_req(_in[i + idx3]);
2547 }
2548 }
2549 else n2->add_req(tmp3);
2550 result = n2->Expand( state, proj_list, mem );
2551
2552
2553 return result;
2554}
2555
2556MachNode* mulL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2557 Compile* C = Compile::current();
2558 // Add projection edges for additional defs or kills
2559 // DEF/KILL cr
2560 MachProjNode *kill;
2561 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2562 proj_list.push(kill);
2563
2564 return this;
2565}
2566
2567MachNode* mulL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2568 Compile* C = Compile::current();
2569 // Add projection edges for additional defs or kills
2570 // DEF/KILL cr
2571 MachProjNode *kill;
2572 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2573 proj_list.push(kill);
2574
2575 return this;
2576}
2577
2578MachNode* mulL_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2579 Compile* C = Compile::current();
2580 // Add projection edges for additional defs or kills
2581 // DEF/KILL cr
2582 MachProjNode *kill;
2583 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2584 proj_list.push(kill);
2585
2586 return this;
2587}
2588
2589MachNode* mulL_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2590 Compile* C = Compile::current();
2591 // Add projection edges for additional defs or kills
2592 // DEF/KILL cr
2593 MachProjNode *kill;
2594 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2595 proj_list.push(kill);
2596
2597 return this;
2598}
2599
2600MachNode* mulL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2601 Compile* C = Compile::current();
2602 // Add projection edges for additional defs or kills
2603 // DEF/KILL cr
2604 MachProjNode *kill;
2605 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2606 proj_list.push(kill);
2607
2608 return this;
2609}
2610
2611MachNode* mulHiL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2612 Compile* C = Compile::current();
2613 // Add projection edges for additional defs or kills
2614 // DEF/KILL rax
2615 MachProjNode *kill;
2616 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
2617 proj_list.push(kill);
2618 // DEF/KILL cr
2619 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2620 proj_list.push(kill);
2621
2622 return this;
2623}
2624
2625MachNode* divI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2626 Compile* C = Compile::current();
2627 // Add projection edges for additional defs or kills
2628 // DEF/KILL rdx
2629 MachProjNode *kill;
2630 kill = new MachProjNode( this, 1, (INT_RDX_REG_mask()), Op_RegI );
2631 proj_list.push(kill);
2632 // DEF/KILL cr
2633 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2634 proj_list.push(kill);
2635
2636 return this;
2637}
2638
2639MachNode* divL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2640 Compile* C = Compile::current();
2641 // Add projection edges for additional defs or kills
2642 // DEF/KILL rdx
2643 MachProjNode *kill;
2644 kill = new MachProjNode( this, 1, (LONG_RDX_REG_mask()), Op_RegL );
2645 proj_list.push(kill);
2646 // DEF/KILL cr
2647 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2648 proj_list.push(kill);
2649
2650 return this;
2651}
2652
2653MachNode* divModI_rReg_divmodNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2654 Compile* C = Compile::current();
2655 // Add projection edges for additional defs or kills
2656 // DEF/KILL cr
2657 MachProjNode *kill;
2658 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2659 proj_list.push(kill);
2660
2661 return this;
2662}
2663
2664MachNode* divModL_rReg_divmodNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2665 Compile* C = Compile::current();
2666 // Add projection edges for additional defs or kills
2667 // DEF/KILL cr
2668 MachProjNode *kill;
2669 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2670 proj_list.push(kill);
2671
2672 return this;
2673}
2674
2675MachNode* mul_hiNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2676 Compile* C = Compile::current();
2677 // Add projection edges for additional defs or kills
2678 // DEF/KILL rax
2679 MachProjNode *kill;
2680 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
2681 proj_list.push(kill);
2682 // DEF/KILL cr
2683 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2684 proj_list.push(kill);
2685
2686 return this;
2687}
2688
2689MachNode* sarL_rReg_63Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2690 Compile* C = Compile::current();
2691 // Add projection edges for additional defs or kills
2692 // DEF/KILL cr
2693 MachProjNode *kill;
2694 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2695 proj_list.push(kill);
2696
2697 return this;
2698}
2699
2700MachNode* sarL_rReg_2Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2701 Compile* C = Compile::current();
2702 // Add projection edges for additional defs or kills
2703 // DEF/KILL cr
2704 MachProjNode *kill;
2705 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2706 proj_list.push(kill);
2707
2708 return this;
2709}
2710
2711MachNode* divL_10Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2712 Compile* C = Compile::current();
2713 MachOper *op0 = new rax_RegLOper();
2714 MachOper *op1 = new rFlagsRegOper();
2715 MachNode *tmp0 = this;
2716 MachNode *tmp1 = this;
2717 MachNode *tmp2 = this;
2718 MachNode *tmp3 = NULL;
2719 MachNode *tmp4 = NULL;
2720 unsigned num0 = 0;
2721 unsigned num1 = opnd_array(1)->num_edges();
2722 unsigned num2 = opnd_array(2)->num_edges();
2723 unsigned idx0 = oper_input_base();
2724 unsigned idx1 = idx0 + num0;
2725 unsigned idx2 = idx1 + num1;
2726 unsigned idx3 = idx2 + num2;
2727 MachNode *result = NULL;
2728
2729 loadConL_0x6666666666666667Node *n0 = new loadConL_0x6666666666666667Node();
2730 n0->add_req(_in[0]);
2731 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
2732 tmp3 = n0;
2733 result = n0->Expand( state, proj_list, mem );
2734
2735 mul_hiNode *n1 = new mul_hiNode();
2736 n1->add_req(_in[0]);
2737 n1->set_opnd_array(0, state->MachOperGenerator(RDX_REGL));
2738 tmp0 = n1;
2739 n1->set_opnd_array(1, opnd_array(1)->clone()); // src
2740 if(tmp1 == this) {
2741 for(unsigned i = 0; i < num1; i++) {
2742 n1->add_req(_in[i + idx1]);
2743 }
2744 }
2745 else n1->add_req(tmp1);
2746 n1->set_opnd_array(2, op0->clone()); // rax
2747 if(tmp3 != NULL)
2748 n1->add_req(tmp3);
2749 result = n1->Expand( state, proj_list, mem );
2750
2751 sarL_rReg_63Node *n2 = new sarL_rReg_63Node();
2752 n2->add_req(_in[0]);
2753 n2->set_opnd_array(0, state->MachOperGenerator(RREGL));
2754 n2->set_opnd_array(1, opnd_array(1)->clone()); // src
2755 if(tmp1 == this) {
2756 for(unsigned i = 0; i < num1; i++) {
2757 n2->add_req(_in[i + idx1]);
2758 }
2759 }
2760 else n2->add_req(tmp1);
2761 tmp1 = n2;
2762 result = n2->Expand( state, proj_list, mem );
2763
2764 sarL_rReg_2Node *n3 = new sarL_rReg_2Node();
2765 n3->add_req(_in[0]);
2766 n3->set_opnd_array(0, state->MachOperGenerator(RREGL));
2767 n3->set_opnd_array(1, opnd_array(0)->clone()); // dst
2768 if(tmp0 == this) {
2769 for(unsigned i = 0; i < num0; i++) {
2770 n3->add_req(_in[i + idx0]);
2771 }
2772 }
2773 else n3->add_req(tmp0);
2774 tmp0 = n3;
2775 result = n3->Expand( state, proj_list, mem );
2776
2777 subL_rRegNode *n4 = new subL_rRegNode();
2778 n4->add_req(_in[0]);
2779 n4->set_opnd_array(0, state->MachOperGenerator(RREGL));
2780 n4->set_opnd_array(1, opnd_array(0)->clone()); // dst
2781 if(tmp0 == this) {
2782 for(unsigned i = 0; i < num0; i++) {
2783 n4->add_req(_in[i + idx0]);
2784 }
2785 }
2786 else n4->add_req(tmp0);
2787 tmp0 = n4;
2788 n4->set_opnd_array(2, opnd_array(1)->clone()); // src
2789 if(tmp1 == this) {
2790 for(unsigned i = 0; i < num1; i++) {
2791 n4->add_req(_in[i + idx1]);
2792 }
2793 }
2794 else n4->add_req(tmp1);
2795 result = n4->Expand( state, proj_list, mem );
2796
2797
2798 return result;
2799}
2800
2801MachNode* modI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2802 Compile* C = Compile::current();
2803 // Add projection edges for additional defs or kills
2804 // DEF/KILL rax
2805 MachProjNode *kill;
2806 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
2807 proj_list.push(kill);
2808 // DEF/KILL cr
2809 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2810 proj_list.push(kill);
2811
2812 return this;
2813}
2814
2815MachNode* modL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2816 Compile* C = Compile::current();
2817 // Add projection edges for additional defs or kills
2818 // DEF/KILL rax
2819 MachProjNode *kill;
2820 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
2821 proj_list.push(kill);
2822 // DEF/KILL cr
2823 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2824 proj_list.push(kill);
2825
2826 return this;
2827}
2828
2829MachNode* salI_rReg_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2830 Compile* C = Compile::current();
2831 // Add projection edges for additional defs or kills
2832 // DEF/KILL cr
2833 MachProjNode *kill;
2834 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2835 proj_list.push(kill);
2836
2837 return this;
2838}
2839
2840MachNode* salI_mem_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2841 Compile* C = Compile::current();
2842 // Add projection edges for additional defs or kills
2843 // DEF/KILL cr
2844 MachProjNode *kill;
2845 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2846 proj_list.push(kill);
2847 // Remove duplicated operands and inputs which use the same name.
2848 if (num_opnds() == 4) {
2849 unsigned num0 = 0;
2850 unsigned num1 = opnd_array(1)->num_edges(); // dst
2851 unsigned num2 = opnd_array(2)->num_edges(); // dst
2852 unsigned num3 = opnd_array(3)->num_edges(); // shift
2853 unsigned idx0 = oper_input_base();
2854 unsigned idx1 = idx0 + num0;
2855 unsigned idx2 = idx1 + num1;
2856 unsigned idx3 = idx2 + num2;
2857 unsigned idx4 = idx3 + num3;
2858 set_opnd_array(2, opnd_array(3)->clone()); // shift
2859 for (unsigned i = 0; i < num3; i++) {
2860 set_req(i + idx2, _in[i + idx3]);
2861 }
2862 num2 = num3;
2863 idx3 = idx2 + num2;
2864 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2865 del_req(i);
2866 }
2867 _num_opnds = 3;
2868 } else {
2869 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
2870 }
2871
2872 return this;
2873}
2874
2875MachNode* salI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2876 Compile* C = Compile::current();
2877 // Add projection edges for additional defs or kills
2878 // DEF/KILL cr
2879 MachProjNode *kill;
2880 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2881 proj_list.push(kill);
2882
2883 return this;
2884}
2885
2886MachNode* salI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2887 Compile* C = Compile::current();
2888 // Add projection edges for additional defs or kills
2889 // DEF/KILL cr
2890 MachProjNode *kill;
2891 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2892 proj_list.push(kill);
2893 // Remove duplicated operands and inputs which use the same name.
2894 if (num_opnds() == 4) {
2895 unsigned num0 = 0;
2896 unsigned num1 = opnd_array(1)->num_edges(); // dst
2897 unsigned num2 = opnd_array(2)->num_edges(); // dst
2898 unsigned num3 = opnd_array(3)->num_edges(); // shift
2899 unsigned idx0 = oper_input_base();
2900 unsigned idx1 = idx0 + num0;
2901 unsigned idx2 = idx1 + num1;
2902 unsigned idx3 = idx2 + num2;
2903 unsigned idx4 = idx3 + num3;
2904 set_opnd_array(2, opnd_array(3)->clone()); // shift
2905 for (unsigned i = 0; i < num3; i++) {
2906 set_req(i + idx2, _in[i + idx3]);
2907 }
2908 num2 = num3;
2909 idx3 = idx2 + num2;
2910 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2911 del_req(i);
2912 }
2913 _num_opnds = 3;
2914 } else {
2915 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
2916 }
2917
2918 return this;
2919}
2920
2921MachNode* salI_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2922 Compile* C = Compile::current();
2923 // Add projection edges for additional defs or kills
2924 // DEF/KILL cr
2925 MachProjNode *kill;
2926 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2927 proj_list.push(kill);
2928
2929 return this;
2930}
2931
2932MachNode* salI_mem_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2933 Compile* C = Compile::current();
2934 // Add projection edges for additional defs or kills
2935 // DEF/KILL cr
2936 MachProjNode *kill;
2937 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2938 proj_list.push(kill);
2939 // Remove duplicated operands and inputs which use the same name.
2940 if (num_opnds() == 4) {
2941 unsigned num0 = 0;
2942 unsigned num1 = opnd_array(1)->num_edges(); // dst
2943 unsigned num2 = opnd_array(2)->num_edges(); // dst
2944 unsigned num3 = opnd_array(3)->num_edges(); // shift
2945 unsigned idx0 = oper_input_base();
2946 unsigned idx1 = idx0 + num0;
2947 unsigned idx2 = idx1 + num1;
2948 unsigned idx3 = idx2 + num2;
2949 unsigned idx4 = idx3 + num3;
2950 set_opnd_array(2, opnd_array(3)->clone()); // shift
2951 for (unsigned i = 0; i < num3; i++) {
2952 set_req(i + idx2, _in[i + idx3]);
2953 }
2954 num2 = num3;
2955 idx3 = idx2 + num2;
2956 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2957 del_req(i);
2958 }
2959 _num_opnds = 3;
2960 } else {
2961 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
2962 }
2963
2964 return this;
2965}
2966
2967MachNode* sarI_rReg_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2968 Compile* C = Compile::current();
2969 // Add projection edges for additional defs or kills
2970 // DEF/KILL cr
2971 MachProjNode *kill;
2972 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2973 proj_list.push(kill);
2974
2975 return this;
2976}
2977
2978MachNode* sarI_mem_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2979 Compile* C = Compile::current();
2980 // Add projection edges for additional defs or kills
2981 // DEF/KILL cr
2982 MachProjNode *kill;
2983 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2984 proj_list.push(kill);
2985 // Remove duplicated operands and inputs which use the same name.
2986 if (num_opnds() == 4) {
2987 unsigned num0 = 0;
2988 unsigned num1 = opnd_array(1)->num_edges(); // dst
2989 unsigned num2 = opnd_array(2)->num_edges(); // dst
2990 unsigned num3 = opnd_array(3)->num_edges(); // shift
2991 unsigned idx0 = oper_input_base();
2992 unsigned idx1 = idx0 + num0;
2993 unsigned idx2 = idx1 + num1;
2994 unsigned idx3 = idx2 + num2;
2995 unsigned idx4 = idx3 + num3;
2996 set_opnd_array(2, opnd_array(3)->clone()); // shift
2997 for (unsigned i = 0; i < num3; i++) {
2998 set_req(i + idx2, _in[i + idx3]);
2999 }
3000 num2 = num3;
3001 idx3 = idx2 + num2;
3002 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3003 del_req(i);
3004 }
3005 _num_opnds = 3;
3006 } else {
3007 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3008 }
3009
3010 return this;
3011}
3012
3013MachNode* sarI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3014 Compile* C = Compile::current();
3015 // Add projection edges for additional defs or kills
3016 // DEF/KILL cr
3017 MachProjNode *kill;
3018 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3019 proj_list.push(kill);
3020
3021 return this;
3022}
3023
3024MachNode* sarI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3025 Compile* C = Compile::current();
3026 // Add projection edges for additional defs or kills
3027 // DEF/KILL cr
3028 MachProjNode *kill;
3029 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3030 proj_list.push(kill);
3031 // Remove duplicated operands and inputs which use the same name.
3032 if (num_opnds() == 4) {
3033 unsigned num0 = 0;
3034 unsigned num1 = opnd_array(1)->num_edges(); // dst
3035 unsigned num2 = opnd_array(2)->num_edges(); // dst
3036 unsigned num3 = opnd_array(3)->num_edges(); // shift
3037 unsigned idx0 = oper_input_base();
3038 unsigned idx1 = idx0 + num0;
3039 unsigned idx2 = idx1 + num1;
3040 unsigned idx3 = idx2 + num2;
3041 unsigned idx4 = idx3 + num3;
3042 set_opnd_array(2, opnd_array(3)->clone()); // shift
3043 for (unsigned i = 0; i < num3; i++) {
3044 set_req(i + idx2, _in[i + idx3]);
3045 }
3046 num2 = num3;
3047 idx3 = idx2 + num2;
3048 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3049 del_req(i);
3050 }
3051 _num_opnds = 3;
3052 } else {
3053 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3054 }
3055
3056 return this;
3057}
3058
3059MachNode* sarI_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3060 Compile* C = Compile::current();
3061 // Add projection edges for additional defs or kills
3062 // DEF/KILL cr
3063 MachProjNode *kill;
3064 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3065 proj_list.push(kill);
3066
3067 return this;
3068}
3069
3070MachNode* sarI_mem_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3071 Compile* C = Compile::current();
3072 // Add projection edges for additional defs or kills
3073 // DEF/KILL cr
3074 MachProjNode *kill;
3075 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3076 proj_list.push(kill);
3077 // Remove duplicated operands and inputs which use the same name.
3078 if (num_opnds() == 4) {
3079 unsigned num0 = 0;
3080 unsigned num1 = opnd_array(1)->num_edges(); // dst
3081 unsigned num2 = opnd_array(2)->num_edges(); // dst
3082 unsigned num3 = opnd_array(3)->num_edges(); // shift
3083 unsigned idx0 = oper_input_base();
3084 unsigned idx1 = idx0 + num0;
3085 unsigned idx2 = idx1 + num1;
3086 unsigned idx3 = idx2 + num2;
3087 unsigned idx4 = idx3 + num3;
3088 set_opnd_array(2, opnd_array(3)->clone()); // shift
3089 for (unsigned i = 0; i < num3; i++) {
3090 set_req(i + idx2, _in[i + idx3]);
3091 }
3092 num2 = num3;
3093 idx3 = idx2 + num2;
3094 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3095 del_req(i);
3096 }
3097 _num_opnds = 3;
3098 } else {
3099 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3100 }
3101
3102 return this;
3103}
3104
3105MachNode* shrI_rReg_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3106 Compile* C = Compile::current();
3107 // Add projection edges for additional defs or kills
3108 // DEF/KILL cr
3109 MachProjNode *kill;
3110 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3111 proj_list.push(kill);
3112
3113 return this;
3114}
3115
3116MachNode* shrI_mem_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3117 Compile* C = Compile::current();
3118 // Add projection edges for additional defs or kills
3119 // DEF/KILL cr
3120 MachProjNode *kill;
3121 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3122 proj_list.push(kill);
3123 // Remove duplicated operands and inputs which use the same name.
3124 if (num_opnds() == 4) {
3125 unsigned num0 = 0;
3126 unsigned num1 = opnd_array(1)->num_edges(); // dst
3127 unsigned num2 = opnd_array(2)->num_edges(); // dst
3128 unsigned num3 = opnd_array(3)->num_edges(); // shift
3129 unsigned idx0 = oper_input_base();
3130 unsigned idx1 = idx0 + num0;
3131 unsigned idx2 = idx1 + num1;
3132 unsigned idx3 = idx2 + num2;
3133 unsigned idx4 = idx3 + num3;
3134 set_opnd_array(2, opnd_array(3)->clone()); // shift
3135 for (unsigned i = 0; i < num3; i++) {
3136 set_req(i + idx2, _in[i + idx3]);
3137 }
3138 num2 = num3;
3139 idx3 = idx2 + num2;
3140 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3141 del_req(i);
3142 }
3143 _num_opnds = 3;
3144 } else {
3145 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3146 }
3147
3148 return this;
3149}
3150
3151MachNode* shrI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3152 Compile* C = Compile::current();
3153 // Add projection edges for additional defs or kills
3154 // DEF/KILL cr
3155 MachProjNode *kill;
3156 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3157 proj_list.push(kill);
3158
3159 return this;
3160}
3161
3162MachNode* shrI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3163 Compile* C = Compile::current();
3164 // Add projection edges for additional defs or kills
3165 // DEF/KILL cr
3166 MachProjNode *kill;
3167 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3168 proj_list.push(kill);
3169 // Remove duplicated operands and inputs which use the same name.
3170 if (num_opnds() == 4) {
3171 unsigned num0 = 0;
3172 unsigned num1 = opnd_array(1)->num_edges(); // dst
3173 unsigned num2 = opnd_array(2)->num_edges(); // dst
3174 unsigned num3 = opnd_array(3)->num_edges(); // shift
3175 unsigned idx0 = oper_input_base();
3176 unsigned idx1 = idx0 + num0;
3177 unsigned idx2 = idx1 + num1;
3178 unsigned idx3 = idx2 + num2;
3179 unsigned idx4 = idx3 + num3;
3180 set_opnd_array(2, opnd_array(3)->clone()); // shift
3181 for (unsigned i = 0; i < num3; i++) {
3182 set_req(i + idx2, _in[i + idx3]);
3183 }
3184 num2 = num3;
3185 idx3 = idx2 + num2;
3186 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3187 del_req(i);
3188 }
3189 _num_opnds = 3;
3190 } else {
3191 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3192 }
3193
3194 return this;
3195}
3196
3197MachNode* shrI_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3198 Compile* C = Compile::current();
3199 // Add projection edges for additional defs or kills
3200 // DEF/KILL cr
3201 MachProjNode *kill;
3202 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3203 proj_list.push(kill);
3204
3205 return this;
3206}
3207
3208MachNode* shrI_mem_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3209 Compile* C = Compile::current();
3210 // Add projection edges for additional defs or kills
3211 // DEF/KILL cr
3212 MachProjNode *kill;
3213 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3214 proj_list.push(kill);
3215 // Remove duplicated operands and inputs which use the same name.
3216 if (num_opnds() == 4) {
3217 unsigned num0 = 0;
3218 unsigned num1 = opnd_array(1)->num_edges(); // dst
3219 unsigned num2 = opnd_array(2)->num_edges(); // dst
3220 unsigned num3 = opnd_array(3)->num_edges(); // shift
3221 unsigned idx0 = oper_input_base();
3222 unsigned idx1 = idx0 + num0;
3223 unsigned idx2 = idx1 + num1;
3224 unsigned idx3 = idx2 + num2;
3225 unsigned idx4 = idx3 + num3;
3226 set_opnd_array(2, opnd_array(3)->clone()); // shift
3227 for (unsigned i = 0; i < num3; i++) {
3228 set_req(i + idx2, _in[i + idx3]);
3229 }
3230 num2 = num3;
3231 idx3 = idx2 + num2;
3232 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3233 del_req(i);
3234 }
3235 _num_opnds = 3;
3236 } else {
3237 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3238 }
3239
3240 return this;
3241}
3242
3243MachNode* salL_rReg_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3244 Compile* C = Compile::current();
3245 // Add projection edges for additional defs or kills
3246 // DEF/KILL cr
3247 MachProjNode *kill;
3248 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3249 proj_list.push(kill);
3250
3251 return this;
3252}
3253
3254MachNode* salL_mem_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3255 Compile* C = Compile::current();
3256 // Add projection edges for additional defs or kills
3257 // DEF/KILL cr
3258 MachProjNode *kill;
3259 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3260 proj_list.push(kill);
3261 // Remove duplicated operands and inputs which use the same name.
3262 if (num_opnds() == 4) {
3263 unsigned num0 = 0;
3264 unsigned num1 = opnd_array(1)->num_edges(); // dst
3265 unsigned num2 = opnd_array(2)->num_edges(); // dst
3266 unsigned num3 = opnd_array(3)->num_edges(); // shift
3267 unsigned idx0 = oper_input_base();
3268 unsigned idx1 = idx0 + num0;
3269 unsigned idx2 = idx1 + num1;
3270 unsigned idx3 = idx2 + num2;
3271 unsigned idx4 = idx3 + num3;
3272 set_opnd_array(2, opnd_array(3)->clone()); // shift
3273 for (unsigned i = 0; i < num3; i++) {
3274 set_req(i + idx2, _in[i + idx3]);
3275 }
3276 num2 = num3;
3277 idx3 = idx2 + num2;
3278 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3279 del_req(i);
3280 }
3281 _num_opnds = 3;
3282 } else {
3283 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3284 }
3285
3286 return this;
3287}
3288
3289MachNode* salL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3290 Compile* C = Compile::current();
3291 // Add projection edges for additional defs or kills
3292 // DEF/KILL cr
3293 MachProjNode *kill;
3294 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3295 proj_list.push(kill);
3296
3297 return this;
3298}
3299
3300MachNode* salL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3301 Compile* C = Compile::current();
3302 // Add projection edges for additional defs or kills
3303 // DEF/KILL cr
3304 MachProjNode *kill;
3305 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3306 proj_list.push(kill);
3307 // Remove duplicated operands and inputs which use the same name.
3308 if (num_opnds() == 4) {
3309 unsigned num0 = 0;
3310 unsigned num1 = opnd_array(1)->num_edges(); // dst
3311 unsigned num2 = opnd_array(2)->num_edges(); // dst
3312 unsigned num3 = opnd_array(3)->num_edges(); // shift
3313 unsigned idx0 = oper_input_base();
3314 unsigned idx1 = idx0 + num0;
3315 unsigned idx2 = idx1 + num1;
3316 unsigned idx3 = idx2 + num2;
3317 unsigned idx4 = idx3 + num3;
3318 set_opnd_array(2, opnd_array(3)->clone()); // shift
3319 for (unsigned i = 0; i < num3; i++) {
3320 set_req(i + idx2, _in[i + idx3]);
3321 }
3322 num2 = num3;
3323 idx3 = idx2 + num2;
3324 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3325 del_req(i);
3326 }
3327 _num_opnds = 3;
3328 } else {
3329 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3330 }
3331
3332 return this;
3333}
3334
3335MachNode* salL_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3336 Compile* C = Compile::current();
3337 // Add projection edges for additional defs or kills
3338 // DEF/KILL cr
3339 MachProjNode *kill;
3340 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3341 proj_list.push(kill);
3342
3343 return this;
3344}
3345
3346MachNode* salL_mem_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3347 Compile* C = Compile::current();
3348 // Add projection edges for additional defs or kills
3349 // DEF/KILL cr
3350 MachProjNode *kill;
3351 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3352 proj_list.push(kill);
3353 // Remove duplicated operands and inputs which use the same name.
3354 if (num_opnds() == 4) {
3355 unsigned num0 = 0;
3356 unsigned num1 = opnd_array(1)->num_edges(); // dst
3357 unsigned num2 = opnd_array(2)->num_edges(); // dst
3358 unsigned num3 = opnd_array(3)->num_edges(); // shift
3359 unsigned idx0 = oper_input_base();
3360 unsigned idx1 = idx0 + num0;
3361 unsigned idx2 = idx1 + num1;
3362 unsigned idx3 = idx2 + num2;
3363 unsigned idx4 = idx3 + num3;
3364 set_opnd_array(2, opnd_array(3)->clone()); // shift
3365 for (unsigned i = 0; i < num3; i++) {
3366 set_req(i + idx2, _in[i + idx3]);
3367 }
3368 num2 = num3;
3369 idx3 = idx2 + num2;
3370 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3371 del_req(i);
3372 }
3373 _num_opnds = 3;
3374 } else {
3375 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3376 }
3377
3378 return this;
3379}
3380
3381MachNode* sarL_rReg_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3382 Compile* C = Compile::current();
3383 // Add projection edges for additional defs or kills
3384 // DEF/KILL cr
3385 MachProjNode *kill;
3386 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3387 proj_list.push(kill);
3388
3389 return this;
3390}
3391
3392MachNode* sarL_mem_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3393 Compile* C = Compile::current();
3394 // Add projection edges for additional defs or kills
3395 // DEF/KILL cr
3396 MachProjNode *kill;
3397 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3398 proj_list.push(kill);
3399 // Remove duplicated operands and inputs which use the same name.
3400 if (num_opnds() == 4) {
3401 unsigned num0 = 0;
3402 unsigned num1 = opnd_array(1)->num_edges(); // dst
3403 unsigned num2 = opnd_array(2)->num_edges(); // dst
3404 unsigned num3 = opnd_array(3)->num_edges(); // shift
3405 unsigned idx0 = oper_input_base();
3406 unsigned idx1 = idx0 + num0;
3407 unsigned idx2 = idx1 + num1;
3408 unsigned idx3 = idx2 + num2;
3409 unsigned idx4 = idx3 + num3;
3410 set_opnd_array(2, opnd_array(3)->clone()); // shift
3411 for (unsigned i = 0; i < num3; i++) {
3412 set_req(i + idx2, _in[i + idx3]);
3413 }
3414 num2 = num3;
3415 idx3 = idx2 + num2;
3416 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3417 del_req(i);
3418 }
3419 _num_opnds = 3;
3420 } else {
3421 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3422 }
3423
3424 return this;
3425}
3426
3427MachNode* sarL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3428 Compile* C = Compile::current();
3429 // Add projection edges for additional defs or kills
3430 // DEF/KILL cr
3431 MachProjNode *kill;
3432 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3433 proj_list.push(kill);
3434
3435 return this;
3436}
3437
3438MachNode* sarL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3439 Compile* C = Compile::current();
3440 // Add projection edges for additional defs or kills
3441 // DEF/KILL cr
3442 MachProjNode *kill;
3443 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3444 proj_list.push(kill);
3445 // Remove duplicated operands and inputs which use the same name.
3446 if (num_opnds() == 4) {
3447 unsigned num0 = 0;
3448 unsigned num1 = opnd_array(1)->num_edges(); // dst
3449 unsigned num2 = opnd_array(2)->num_edges(); // dst
3450 unsigned num3 = opnd_array(3)->num_edges(); // shift
3451 unsigned idx0 = oper_input_base();
3452 unsigned idx1 = idx0 + num0;
3453 unsigned idx2 = idx1 + num1;
3454 unsigned idx3 = idx2 + num2;
3455 unsigned idx4 = idx3 + num3;
3456 set_opnd_array(2, opnd_array(3)->clone()); // shift
3457 for (unsigned i = 0; i < num3; i++) {
3458 set_req(i + idx2, _in[i + idx3]);
3459 }
3460 num2 = num3;
3461 idx3 = idx2 + num2;
3462 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3463 del_req(i);
3464 }
3465 _num_opnds = 3;
3466 } else {
3467 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3468 }
3469
3470 return this;
3471}
3472
3473MachNode* sarL_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3474 Compile* C = Compile::current();
3475 // Add projection edges for additional defs or kills
3476 // DEF/KILL cr
3477 MachProjNode *kill;
3478 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3479 proj_list.push(kill);
3480
3481 return this;
3482}
3483
3484MachNode* sarL_mem_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3485 Compile* C = Compile::current();
3486 // Add projection edges for additional defs or kills
3487 // DEF/KILL cr
3488 MachProjNode *kill;
3489 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3490 proj_list.push(kill);
3491 // Remove duplicated operands and inputs which use the same name.
3492 if (num_opnds() == 4) {
3493 unsigned num0 = 0;
3494 unsigned num1 = opnd_array(1)->num_edges(); // dst
3495 unsigned num2 = opnd_array(2)->num_edges(); // dst
3496 unsigned num3 = opnd_array(3)->num_edges(); // shift
3497 unsigned idx0 = oper_input_base();
3498 unsigned idx1 = idx0 + num0;
3499 unsigned idx2 = idx1 + num1;
3500 unsigned idx3 = idx2 + num2;
3501 unsigned idx4 = idx3 + num3;
3502 set_opnd_array(2, opnd_array(3)->clone()); // shift
3503 for (unsigned i = 0; i < num3; i++) {
3504 set_req(i + idx2, _in[i + idx3]);
3505 }
3506 num2 = num3;
3507 idx3 = idx2 + num2;
3508 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3509 del_req(i);
3510 }
3511 _num_opnds = 3;
3512 } else {
3513 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3514 }
3515
3516 return this;
3517}
3518
3519MachNode* shrL_rReg_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3520 Compile* C = Compile::current();
3521 // Add projection edges for additional defs or kills
3522 // DEF/KILL cr
3523 MachProjNode *kill;
3524 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3525 proj_list.push(kill);
3526
3527 return this;
3528}
3529
3530MachNode* shrL_mem_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3531 Compile* C = Compile::current();
3532 // Add projection edges for additional defs or kills
3533 // DEF/KILL cr
3534 MachProjNode *kill;
3535 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3536 proj_list.push(kill);
3537 // Remove duplicated operands and inputs which use the same name.
3538 if (num_opnds() == 4) {
3539 unsigned num0 = 0;
3540 unsigned num1 = opnd_array(1)->num_edges(); // dst
3541 unsigned num2 = opnd_array(2)->num_edges(); // dst
3542 unsigned num3 = opnd_array(3)->num_edges(); // shift
3543 unsigned idx0 = oper_input_base();
3544 unsigned idx1 = idx0 + num0;
3545 unsigned idx2 = idx1 + num1;
3546 unsigned idx3 = idx2 + num2;
3547 unsigned idx4 = idx3 + num3;
3548 set_opnd_array(2, opnd_array(3)->clone()); // shift
3549 for (unsigned i = 0; i < num3; i++) {
3550 set_req(i + idx2, _in[i + idx3]);
3551 }
3552 num2 = num3;
3553 idx3 = idx2 + num2;
3554 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3555 del_req(i);
3556 }
3557 _num_opnds = 3;
3558 } else {
3559 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3560 }
3561
3562 return this;
3563}
3564
3565MachNode* shrL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3566 Compile* C = Compile::current();
3567 // Add projection edges for additional defs or kills
3568 // DEF/KILL cr
3569 MachProjNode *kill;
3570 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3571 proj_list.push(kill);
3572
3573 return this;
3574}
3575
3576MachNode* shrL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3577 Compile* C = Compile::current();
3578 // Add projection edges for additional defs or kills
3579 // DEF/KILL cr
3580 MachProjNode *kill;
3581 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3582 proj_list.push(kill);
3583 // Remove duplicated operands and inputs which use the same name.
3584 if (num_opnds() == 4) {
3585 unsigned num0 = 0;
3586 unsigned num1 = opnd_array(1)->num_edges(); // dst
3587 unsigned num2 = opnd_array(2)->num_edges(); // dst
3588 unsigned num3 = opnd_array(3)->num_edges(); // shift
3589 unsigned idx0 = oper_input_base();
3590 unsigned idx1 = idx0 + num0;
3591 unsigned idx2 = idx1 + num1;
3592 unsigned idx3 = idx2 + num2;
3593 unsigned idx4 = idx3 + num3;
3594 set_opnd_array(2, opnd_array(3)->clone()); // shift
3595 for (unsigned i = 0; i < num3; i++) {
3596 set_req(i + idx2, _in[i + idx3]);
3597 }
3598 num2 = num3;
3599 idx3 = idx2 + num2;
3600 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3601 del_req(i);
3602 }
3603 _num_opnds = 3;
3604 } else {
3605 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3606 }
3607
3608 return this;
3609}
3610
3611MachNode* shrL_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3612 Compile* C = Compile::current();
3613 // Add projection edges for additional defs or kills
3614 // DEF/KILL cr
3615 MachProjNode *kill;
3616 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3617 proj_list.push(kill);
3618
3619 return this;
3620}
3621
3622MachNode* shrL_mem_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3623 Compile* C = Compile::current();
3624 // Add projection edges for additional defs or kills
3625 // DEF/KILL cr
3626 MachProjNode *kill;
3627 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3628 proj_list.push(kill);
3629 // Remove duplicated operands and inputs which use the same name.
3630 if (num_opnds() == 4) {
3631 unsigned num0 = 0;
3632 unsigned num1 = opnd_array(1)->num_edges(); // dst
3633 unsigned num2 = opnd_array(2)->num_edges(); // dst
3634 unsigned num3 = opnd_array(3)->num_edges(); // shift
3635 unsigned idx0 = oper_input_base();
3636 unsigned idx1 = idx0 + num0;
3637 unsigned idx2 = idx1 + num1;
3638 unsigned idx3 = idx2 + num2;
3639 unsigned idx4 = idx3 + num3;
3640 set_opnd_array(2, opnd_array(3)->clone()); // shift
3641 for (unsigned i = 0; i < num3; i++) {
3642 set_req(i + idx2, _in[i + idx3]);
3643 }
3644 num2 = num3;
3645 idx3 = idx2 + num2;
3646 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3647 del_req(i);
3648 }
3649 _num_opnds = 3;
3650 } else {
3651 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3652 }
3653
3654 return this;
3655}
3656
3657MachNode* i2bNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3658 Compile* C = Compile::current();
3659 // Remove duplicated operands and inputs which use the same name.
3660 if (num_opnds() == 4) {
3661 unsigned num0 = 0;
3662 unsigned num1 = opnd_array(1)->num_edges(); // src
3663 unsigned num2 = opnd_array(2)->num_edges(); // twentyfour
3664 unsigned num3 = opnd_array(3)->num_edges(); // twentyfour
3665 unsigned idx0 = oper_input_base();
3666 unsigned idx1 = idx0 + num0;
3667 unsigned idx2 = idx1 + num1;
3668 unsigned idx3 = idx2 + num2;
3669 unsigned idx4 = idx3 + num3;
3670 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3671 del_req(i);
3672 }
3673 _num_opnds = 3;
3674 } else {
3675 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3676 }
3677
3678 return this;
3679}
3680
3681MachNode* i2sNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3682 Compile* C = Compile::current();
3683 // Remove duplicated operands and inputs which use the same name.
3684 if (num_opnds() == 4) {
3685 unsigned num0 = 0;
3686 unsigned num1 = opnd_array(1)->num_edges(); // src
3687 unsigned num2 = opnd_array(2)->num_edges(); // sixteen
3688 unsigned num3 = opnd_array(3)->num_edges(); // sixteen
3689 unsigned idx0 = oper_input_base();
3690 unsigned idx1 = idx0 + num0;
3691 unsigned idx2 = idx1 + num1;
3692 unsigned idx3 = idx2 + num2;
3693 unsigned idx4 = idx3 + num3;
3694 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3695 del_req(i);
3696 }
3697 _num_opnds = 3;
3698 } else {
3699 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
3700 }
3701
3702 return this;
3703}
3704
3705MachNode* rolI_rReg_imm1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3706 Compile* C = Compile::current();
3707 // Add projection edges for additional defs or kills
3708 // DEF/KILL cr
3709 MachProjNode *kill;
3710 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3711 proj_list.push(kill);
3712
3713 return this;
3714}
3715
3716MachNode* rolI_rReg_imm8Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3717 Compile* C = Compile::current();
3718 // Add projection edges for additional defs or kills
3719 // DEF/KILL cr
3720 MachProjNode *kill;
3721 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3722 proj_list.push(kill);
3723
3724 return this;
3725}
3726
3727MachNode* rolI_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3728 Compile* C = Compile::current();
3729 // Add projection edges for additional defs or kills
3730 // DEF/KILL cr
3731 MachProjNode *kill;
3732 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3733 proj_list.push(kill);
3734
3735 return this;
3736}
3737
3738MachNode* rolI_rReg_i1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3739 Compile* C = Compile::current();
3740 MachNode *tmp0 = this;
3741 MachNode *tmp1 = this;
3742 MachNode *tmp2 = this;
3743 MachNode *tmp3 = this;
3744 MachNode *tmp4 = this;
3745 unsigned num0 = 0;
3746 unsigned num1 = opnd_array(1)->num_edges();
3747 unsigned num2 = opnd_array(2)->num_edges();
3748 unsigned num3 = opnd_array(3)->num_edges();
3749 unsigned num4 = opnd_array(4)->num_edges();
3750 unsigned idx0 = oper_input_base();
3751 unsigned idx1 = idx0 + num0;
3752 unsigned idx2 = idx1 + num1;
3753 unsigned idx3 = idx2 + num2;
3754 unsigned idx4 = idx3 + num3;
3755 unsigned idx5 = idx4 + num4;
3756 MachNode *result = NULL;
3757
3758 rolI_rReg_imm1Node *n0 = new rolI_rReg_imm1Node();
3759 n0->add_req(_in[0]);
3760 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
3761 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
3762 if(tmp1 == this) {
3763 for(unsigned i = 0; i < num1; i++) {
3764 n0->add_req(_in[i + idx1]);
3765 }
3766 }
3767 else n0->add_req(tmp1);
3768 tmp1 = n0;
3769 result = n0->Expand( state, proj_list, mem );
3770
3771
3772 return result;
3773}
3774
3775MachNode* rolI_rReg_i1_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3776 Compile* C = Compile::current();
3777 MachNode *tmp0 = this;
3778 MachNode *tmp1 = this;
3779 MachNode *tmp2 = this;
3780 MachNode *tmp3 = this;
3781 MachNode *tmp4 = this;
3782 unsigned num0 = 0;
3783 unsigned num1 = opnd_array(1)->num_edges();
3784 unsigned num2 = opnd_array(2)->num_edges();
3785 unsigned num3 = opnd_array(3)->num_edges();
3786 unsigned num4 = opnd_array(4)->num_edges();
3787 unsigned idx0 = oper_input_base();
3788 unsigned idx1 = idx0 + num0;
3789 unsigned idx2 = idx1 + num1;
3790 unsigned idx3 = idx2 + num2;
3791 unsigned idx4 = idx3 + num3;
3792 unsigned idx5 = idx4 + num4;
3793 MachNode *result = NULL;
3794
3795 rolI_rReg_imm1Node *n0 = new rolI_rReg_imm1Node();
3796 n0->add_req(_in[0]);
3797 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
3798 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
3799 if(tmp1 == this) {
3800 for(unsigned i = 0; i < num1; i++) {
3801 n0->add_req(_in[i + idx1]);
3802 }
3803 }
3804 else n0->add_req(tmp1);
3805 tmp1 = n0;
3806 result = n0->Expand( state, proj_list, mem );
3807
3808
3809 return result;
3810}
3811
3812MachNode* rolI_rReg_i8Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3813 Compile* C = Compile::current();
3814 MachNode *tmp0 = this;
3815 MachNode *tmp1 = this;
3816 MachNode *tmp2 = this;
3817 MachNode *tmp3 = this;
3818 MachNode *tmp4 = this;
3819 unsigned num0 = 0;
3820 unsigned num1 = opnd_array(1)->num_edges();
3821 unsigned num2 = opnd_array(2)->num_edges();
3822 unsigned num3 = opnd_array(3)->num_edges();
3823 unsigned num4 = opnd_array(4)->num_edges();
3824 unsigned idx0 = oper_input_base();
3825 unsigned idx1 = idx0 + num0;
3826 unsigned idx2 = idx1 + num1;
3827 unsigned idx3 = idx2 + num2;
3828 unsigned idx4 = idx3 + num3;
3829 unsigned idx5 = idx4 + num4;
3830 MachNode *result = NULL;
3831
3832 rolI_rReg_imm8Node *n0 = new rolI_rReg_imm8Node();
3833 n0->add_req(_in[0]);
3834 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
3835 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
3836 if(tmp1 == this) {
3837 for(unsigned i = 0; i < num1; i++) {
3838 n0->add_req(_in[i + idx1]);
3839 }
3840 }
3841 else n0->add_req(tmp1);
3842 tmp1 = n0;
3843 n0->set_opnd_array(2, opnd_array(2)->clone()); // lshift
3844 if(tmp2 == this) {
3845 for(unsigned i = 0; i < num2; i++) {
3846 n0->add_req(_in[i + idx2]);
3847 }
3848 }
3849 else n0->add_req(tmp2);
3850 result = n0->Expand( state, proj_list, mem );
3851
3852
3853 return result;
3854}
3855
3856MachNode* rolI_rReg_i8_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3857 Compile* C = Compile::current();
3858 MachNode *tmp0 = this;
3859 MachNode *tmp1 = this;
3860 MachNode *tmp2 = this;
3861 MachNode *tmp3 = this;
3862 MachNode *tmp4 = this;
3863 unsigned num0 = 0;
3864 unsigned num1 = opnd_array(1)->num_edges();
3865 unsigned num2 = opnd_array(2)->num_edges();
3866 unsigned num3 = opnd_array(3)->num_edges();
3867 unsigned num4 = opnd_array(4)->num_edges();
3868 unsigned idx0 = oper_input_base();
3869 unsigned idx1 = idx0 + num0;
3870 unsigned idx2 = idx1 + num1;
3871 unsigned idx3 = idx2 + num2;
3872 unsigned idx4 = idx3 + num3;
3873 unsigned idx5 = idx4 + num4;
3874 MachNode *result = NULL;
3875
3876 rolI_rReg_imm8Node *n0 = new rolI_rReg_imm8Node();
3877 n0->add_req(_in[0]);
3878 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
3879 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
3880 if(tmp1 == this) {
3881 for(unsigned i = 0; i < num1; i++) {
3882 n0->add_req(_in[i + idx1]);
3883 }
3884 }
3885 else n0->add_req(tmp1);
3886 tmp1 = n0;
3887 n0->set_opnd_array(2, opnd_array(4)->clone()); // lshift
3888 if(tmp4 == this) {
3889 for(unsigned i = 0; i < num4; i++) {
3890 n0->add_req(_in[i + idx4]);
3891 }
3892 }
3893 else n0->add_req(tmp4);
3894 result = n0->Expand( state, proj_list, mem );
3895
3896
3897 return result;
3898}
3899
3900MachNode* rolI_rReg_Var_C0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3901 Compile* C = Compile::current();
3902 MachNode *tmp0 = this;
3903 MachNode *tmp1 = this;
3904 MachNode *tmp2 = this;
3905 MachNode *tmp3 = this;
3906 MachNode *tmp4 = this;
3907 MachNode *tmp5 = this;
3908 unsigned num0 = 0;
3909 unsigned num1 = opnd_array(1)->num_edges();
3910 unsigned num2 = opnd_array(2)->num_edges();
3911 unsigned num3 = opnd_array(3)->num_edges();
3912 unsigned num4 = opnd_array(4)->num_edges();
3913 unsigned num5 = opnd_array(5)->num_edges();
3914 unsigned idx0 = oper_input_base();
3915 unsigned idx1 = idx0 + num0;
3916 unsigned idx2 = idx1 + num1;
3917 unsigned idx3 = idx2 + num2;
3918 unsigned idx4 = idx3 + num3;
3919 unsigned idx5 = idx4 + num4;
3920 unsigned idx6 = idx5 + num5;
3921 MachNode *result = NULL;
3922
3923 rolI_rReg_CLNode *n0 = new rolI_rReg_CLNode();
3924 n0->add_req(_in[0]);
3925 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGI));
3926 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
3927 if(tmp1 == this) {
3928 for(unsigned i = 0; i < num1; i++) {
3929 n0->add_req(_in[i + idx1]);
3930 }
3931 }
3932 else n0->add_req(tmp1);
3933 tmp1 = n0;
3934 n0->set_opnd_array(2, opnd_array(2)->clone()); // shift
3935 if(tmp2 == this) {
3936 for(unsigned i = 0; i < num2; i++) {
3937 n0->add_req(_in[i + idx2]);
3938 }
3939 }
3940 else n0->add_req(tmp2);
3941 result = n0->Expand( state, proj_list, mem );
3942
3943
3944 return result;
3945}
3946
3947MachNode* rolI_rReg_Var_C0_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3948 Compile* C = Compile::current();
3949 MachNode *tmp0 = this;
3950 MachNode *tmp1 = this;
3951 MachNode *tmp2 = this;
3952 MachNode *tmp3 = this;
3953 MachNode *tmp4 = this;
3954 MachNode *tmp5 = this;
3955 unsigned num0 = 0;
3956 unsigned num1 = opnd_array(1)->num_edges();
3957 unsigned num2 = opnd_array(2)->num_edges();
3958 unsigned num3 = opnd_array(3)->num_edges();
3959 unsigned num4 = opnd_array(4)->num_edges();
3960 unsigned num5 = opnd_array(5)->num_edges();
3961 unsigned idx0 = oper_input_base();
3962 unsigned idx1 = idx0 + num0;
3963 unsigned idx2 = idx1 + num1;
3964 unsigned idx3 = idx2 + num2;
3965 unsigned idx4 = idx3 + num3;
3966 unsigned idx5 = idx4 + num4;
3967 unsigned idx6 = idx5 + num5;
3968 MachNode *result = NULL;
3969
3970 rolI_rReg_CLNode *n0 = new rolI_rReg_CLNode();
3971 n0->add_req(_in[0]);
3972 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGI));
3973 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
3974 if(tmp1 == this) {
3975 for(unsigned i = 0; i < num1; i++) {
3976 n0->add_req(_in[i + idx1]);
3977 }
3978 }
3979 else n0->add_req(tmp1);
3980 tmp1 = n0;
3981 n0->set_opnd_array(2, opnd_array(3)->clone()); // shift
3982 if(tmp3 == this) {
3983 for(unsigned i = 0; i < num3; i++) {
3984 n0->add_req(_in[i + idx3]);
3985 }
3986 }
3987 else n0->add_req(tmp3);
3988 result = n0->Expand( state, proj_list, mem );
3989
3990
3991 return result;
3992}
3993
3994MachNode* rolI_rReg_Var_C32Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3995 Compile* C = Compile::current();
3996 MachNode *tmp0 = this;
3997 MachNode *tmp1 = this;
3998 MachNode *tmp2 = this;
3999 MachNode *tmp3 = this;
4000 MachNode *tmp4 = this;
4001 MachNode *tmp5 = this;
4002 unsigned num0 = 0;
4003 unsigned num1 = opnd_array(1)->num_edges();
4004 unsigned num2 = opnd_array(2)->num_edges();
4005 unsigned num3 = opnd_array(3)->num_edges();
4006 unsigned num4 = opnd_array(4)->num_edges();
4007 unsigned num5 = opnd_array(5)->num_edges();
4008 unsigned idx0 = oper_input_base();
4009 unsigned idx1 = idx0 + num0;
4010 unsigned idx2 = idx1 + num1;
4011 unsigned idx3 = idx2 + num2;
4012 unsigned idx4 = idx3 + num3;
4013 unsigned idx5 = idx4 + num4;
4014 unsigned idx6 = idx5 + num5;
4015 MachNode *result = NULL;
4016
4017 rolI_rReg_CLNode *n0 = new rolI_rReg_CLNode();
4018 n0->add_req(_in[0]);
4019 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGI));
4020 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4021 if(tmp1 == this) {
4022 for(unsigned i = 0; i < num1; i++) {
4023 n0->add_req(_in[i + idx1]);
4024 }
4025 }
4026 else n0->add_req(tmp1);
4027 tmp1 = n0;
4028 n0->set_opnd_array(2, opnd_array(2)->clone()); // shift
4029 if(tmp2 == this) {
4030 for(unsigned i = 0; i < num2; i++) {
4031 n0->add_req(_in[i + idx2]);
4032 }
4033 }
4034 else n0->add_req(tmp2);
4035 result = n0->Expand( state, proj_list, mem );
4036
4037
4038 return result;
4039}
4040
4041MachNode* rolI_rReg_Var_C32_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4042 Compile* C = Compile::current();
4043 MachNode *tmp0 = this;
4044 MachNode *tmp1 = this;
4045 MachNode *tmp2 = this;
4046 MachNode *tmp3 = this;
4047 MachNode *tmp4 = this;
4048 MachNode *tmp5 = this;
4049 unsigned num0 = 0;
4050 unsigned num1 = opnd_array(1)->num_edges();
4051 unsigned num2 = opnd_array(2)->num_edges();
4052 unsigned num3 = opnd_array(3)->num_edges();
4053 unsigned num4 = opnd_array(4)->num_edges();
4054 unsigned num5 = opnd_array(5)->num_edges();
4055 unsigned idx0 = oper_input_base();
4056 unsigned idx1 = idx0 + num0;
4057 unsigned idx2 = idx1 + num1;
4058 unsigned idx3 = idx2 + num2;
4059 unsigned idx4 = idx3 + num3;
4060 unsigned idx5 = idx4 + num4;
4061 unsigned idx6 = idx5 + num5;
4062 MachNode *result = NULL;
4063
4064 rolI_rReg_CLNode *n0 = new rolI_rReg_CLNode();
4065 n0->add_req(_in[0]);
4066 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGI));
4067 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4068 if(tmp1 == this) {
4069 for(unsigned i = 0; i < num1; i++) {
4070 n0->add_req(_in[i + idx1]);
4071 }
4072 }
4073 else n0->add_req(tmp1);
4074 tmp1 = n0;
4075 n0->set_opnd_array(2, opnd_array(3)->clone()); // shift
4076 if(tmp3 == this) {
4077 for(unsigned i = 0; i < num3; i++) {
4078 n0->add_req(_in[i + idx3]);
4079 }
4080 }
4081 else n0->add_req(tmp3);
4082 result = n0->Expand( state, proj_list, mem );
4083
4084
4085 return result;
4086}
4087
4088MachNode* rorI_rReg_imm1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4089 Compile* C = Compile::current();
4090 // Add projection edges for additional defs or kills
4091 // DEF/KILL cr
4092 MachProjNode *kill;
4093 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4094 proj_list.push(kill);
4095
4096 return this;
4097}
4098
4099MachNode* rorI_rReg_imm8Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4100 Compile* C = Compile::current();
4101 // Add projection edges for additional defs or kills
4102 // DEF/KILL cr
4103 MachProjNode *kill;
4104 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4105 proj_list.push(kill);
4106
4107 return this;
4108}
4109
4110MachNode* rorI_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4111 Compile* C = Compile::current();
4112 // Add projection edges for additional defs or kills
4113 // DEF/KILL cr
4114 MachProjNode *kill;
4115 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4116 proj_list.push(kill);
4117
4118 return this;
4119}
4120
4121MachNode* rorI_rReg_i1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4122 Compile* C = Compile::current();
4123 MachNode *tmp0 = this;
4124 MachNode *tmp1 = this;
4125 MachNode *tmp2 = this;
4126 MachNode *tmp3 = this;
4127 MachNode *tmp4 = this;
4128 unsigned num0 = 0;
4129 unsigned num1 = opnd_array(1)->num_edges();
4130 unsigned num2 = opnd_array(2)->num_edges();
4131 unsigned num3 = opnd_array(3)->num_edges();
4132 unsigned num4 = opnd_array(4)->num_edges();
4133 unsigned idx0 = oper_input_base();
4134 unsigned idx1 = idx0 + num0;
4135 unsigned idx2 = idx1 + num1;
4136 unsigned idx3 = idx2 + num2;
4137 unsigned idx4 = idx3 + num3;
4138 unsigned idx5 = idx4 + num4;
4139 MachNode *result = NULL;
4140
4141 rorI_rReg_imm1Node *n0 = new rorI_rReg_imm1Node();
4142 n0->add_req(_in[0]);
4143 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
4144 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4145 if(tmp1 == this) {
4146 for(unsigned i = 0; i < num1; i++) {
4147 n0->add_req(_in[i + idx1]);
4148 }
4149 }
4150 else n0->add_req(tmp1);
4151 tmp1 = n0;
4152 result = n0->Expand( state, proj_list, mem );
4153
4154
4155 return result;
4156}
4157
4158MachNode* rorI_rReg_i1_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4159 Compile* C = Compile::current();
4160 MachNode *tmp0 = this;
4161 MachNode *tmp1 = this;
4162 MachNode *tmp2 = this;
4163 MachNode *tmp3 = this;
4164 MachNode *tmp4 = this;
4165 unsigned num0 = 0;
4166 unsigned num1 = opnd_array(1)->num_edges();
4167 unsigned num2 = opnd_array(2)->num_edges();
4168 unsigned num3 = opnd_array(3)->num_edges();
4169 unsigned num4 = opnd_array(4)->num_edges();
4170 unsigned idx0 = oper_input_base();
4171 unsigned idx1 = idx0 + num0;
4172 unsigned idx2 = idx1 + num1;
4173 unsigned idx3 = idx2 + num2;
4174 unsigned idx4 = idx3 + num3;
4175 unsigned idx5 = idx4 + num4;
4176 MachNode *result = NULL;
4177
4178 rorI_rReg_imm1Node *n0 = new rorI_rReg_imm1Node();
4179 n0->add_req(_in[0]);
4180 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
4181 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4182 if(tmp1 == this) {
4183 for(unsigned i = 0; i < num1; i++) {
4184 n0->add_req(_in[i + idx1]);
4185 }
4186 }
4187 else n0->add_req(tmp1);
4188 tmp1 = n0;
4189 result = n0->Expand( state, proj_list, mem );
4190
4191
4192 return result;
4193}
4194
4195MachNode* rorI_rReg_i8Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4196 Compile* C = Compile::current();
4197 MachNode *tmp0 = this;
4198 MachNode *tmp1 = this;
4199 MachNode *tmp2 = this;
4200 MachNode *tmp3 = this;
4201 MachNode *tmp4 = this;
4202 unsigned num0 = 0;
4203 unsigned num1 = opnd_array(1)->num_edges();
4204 unsigned num2 = opnd_array(2)->num_edges();
4205 unsigned num3 = opnd_array(3)->num_edges();
4206 unsigned num4 = opnd_array(4)->num_edges();
4207 unsigned idx0 = oper_input_base();
4208 unsigned idx1 = idx0 + num0;
4209 unsigned idx2 = idx1 + num1;
4210 unsigned idx3 = idx2 + num2;
4211 unsigned idx4 = idx3 + num3;
4212 unsigned idx5 = idx4 + num4;
4213 MachNode *result = NULL;
4214
4215 rorI_rReg_imm8Node *n0 = new rorI_rReg_imm8Node();
4216 n0->add_req(_in[0]);
4217 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
4218 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4219 if(tmp1 == this) {
4220 for(unsigned i = 0; i < num1; i++) {
4221 n0->add_req(_in[i + idx1]);
4222 }
4223 }
4224 else n0->add_req(tmp1);
4225 tmp1 = n0;
4226 n0->set_opnd_array(2, opnd_array(2)->clone()); // rshift
4227 if(tmp2 == this) {
4228 for(unsigned i = 0; i < num2; i++) {
4229 n0->add_req(_in[i + idx2]);
4230 }
4231 }
4232 else n0->add_req(tmp2);
4233 result = n0->Expand( state, proj_list, mem );
4234
4235
4236 return result;
4237}
4238
4239MachNode* rorI_rReg_i8_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4240 Compile* C = Compile::current();
4241 MachNode *tmp0 = this;
4242 MachNode *tmp1 = this;
4243 MachNode *tmp2 = this;
4244 MachNode *tmp3 = this;
4245 MachNode *tmp4 = this;
4246 unsigned num0 = 0;
4247 unsigned num1 = opnd_array(1)->num_edges();
4248 unsigned num2 = opnd_array(2)->num_edges();
4249 unsigned num3 = opnd_array(3)->num_edges();
4250 unsigned num4 = opnd_array(4)->num_edges();
4251 unsigned idx0 = oper_input_base();
4252 unsigned idx1 = idx0 + num0;
4253 unsigned idx2 = idx1 + num1;
4254 unsigned idx3 = idx2 + num2;
4255 unsigned idx4 = idx3 + num3;
4256 unsigned idx5 = idx4 + num4;
4257 MachNode *result = NULL;
4258
4259 rorI_rReg_imm8Node *n0 = new rorI_rReg_imm8Node();
4260 n0->add_req(_in[0]);
4261 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
4262 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4263 if(tmp1 == this) {
4264 for(unsigned i = 0; i < num1; i++) {
4265 n0->add_req(_in[i + idx1]);
4266 }
4267 }
4268 else n0->add_req(tmp1);
4269 tmp1 = n0;
4270 n0->set_opnd_array(2, opnd_array(4)->clone()); // rshift
4271 if(tmp4 == this) {
4272 for(unsigned i = 0; i < num4; i++) {
4273 n0->add_req(_in[i + idx4]);
4274 }
4275 }
4276 else n0->add_req(tmp4);
4277 result = n0->Expand( state, proj_list, mem );
4278
4279
4280 return result;
4281}
4282
4283MachNode* rorI_rReg_Var_C0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4284 Compile* C = Compile::current();
4285 MachNode *tmp0 = this;
4286 MachNode *tmp1 = this;
4287 MachNode *tmp2 = this;
4288 MachNode *tmp3 = this;
4289 MachNode *tmp4 = this;
4290 MachNode *tmp5 = this;
4291 unsigned num0 = 0;
4292 unsigned num1 = opnd_array(1)->num_edges();
4293 unsigned num2 = opnd_array(2)->num_edges();
4294 unsigned num3 = opnd_array(3)->num_edges();
4295 unsigned num4 = opnd_array(4)->num_edges();
4296 unsigned num5 = opnd_array(5)->num_edges();
4297 unsigned idx0 = oper_input_base();
4298 unsigned idx1 = idx0 + num0;
4299 unsigned idx2 = idx1 + num1;
4300 unsigned idx3 = idx2 + num2;
4301 unsigned idx4 = idx3 + num3;
4302 unsigned idx5 = idx4 + num4;
4303 unsigned idx6 = idx5 + num5;
4304 MachNode *result = NULL;
4305
4306 rorI_rReg_CLNode *n0 = new rorI_rReg_CLNode();
4307 n0->add_req(_in[0]);
4308 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGI));
4309 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4310 if(tmp1 == this) {
4311 for(unsigned i = 0; i < num1; i++) {
4312 n0->add_req(_in[i + idx1]);
4313 }
4314 }
4315 else n0->add_req(tmp1);
4316 tmp1 = n0;
4317 n0->set_opnd_array(2, opnd_array(2)->clone()); // shift
4318 if(tmp2 == this) {
4319 for(unsigned i = 0; i < num2; i++) {
4320 n0->add_req(_in[i + idx2]);
4321 }
4322 }
4323 else n0->add_req(tmp2);
4324 result = n0->Expand( state, proj_list, mem );
4325
4326
4327 return result;
4328}
4329
4330MachNode* rorI_rReg_Var_C0_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4331 Compile* C = Compile::current();
4332 MachNode *tmp0 = this;
4333 MachNode *tmp1 = this;
4334 MachNode *tmp2 = this;
4335 MachNode *tmp3 = this;
4336 MachNode *tmp4 = this;
4337 MachNode *tmp5 = this;
4338 unsigned num0 = 0;
4339 unsigned num1 = opnd_array(1)->num_edges();
4340 unsigned num2 = opnd_array(2)->num_edges();
4341 unsigned num3 = opnd_array(3)->num_edges();
4342 unsigned num4 = opnd_array(4)->num_edges();
4343 unsigned num5 = opnd_array(5)->num_edges();
4344 unsigned idx0 = oper_input_base();
4345 unsigned idx1 = idx0 + num0;
4346 unsigned idx2 = idx1 + num1;
4347 unsigned idx3 = idx2 + num2;
4348 unsigned idx4 = idx3 + num3;
4349 unsigned idx5 = idx4 + num4;
4350 unsigned idx6 = idx5 + num5;
4351 MachNode *result = NULL;
4352
4353 rorI_rReg_CLNode *n0 = new rorI_rReg_CLNode();
4354 n0->add_req(_in[0]);
4355 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGI));
4356 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4357 if(tmp1 == this) {
4358 for(unsigned i = 0; i < num1; i++) {
4359 n0->add_req(_in[i + idx1]);
4360 }
4361 }
4362 else n0->add_req(tmp1);
4363 tmp1 = n0;
4364 n0->set_opnd_array(2, opnd_array(3)->clone()); // shift
4365 if(tmp3 == this) {
4366 for(unsigned i = 0; i < num3; i++) {
4367 n0->add_req(_in[i + idx3]);
4368 }
4369 }
4370 else n0->add_req(tmp3);
4371 result = n0->Expand( state, proj_list, mem );
4372
4373
4374 return result;
4375}
4376
4377MachNode* rorI_rReg_Var_C32Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4378 Compile* C = Compile::current();
4379 MachNode *tmp0 = this;
4380 MachNode *tmp1 = this;
4381 MachNode *tmp2 = this;
4382 MachNode *tmp3 = this;
4383 MachNode *tmp4 = this;
4384 MachNode *tmp5 = this;
4385 unsigned num0 = 0;
4386 unsigned num1 = opnd_array(1)->num_edges();
4387 unsigned num2 = opnd_array(2)->num_edges();
4388 unsigned num3 = opnd_array(3)->num_edges();
4389 unsigned num4 = opnd_array(4)->num_edges();
4390 unsigned num5 = opnd_array(5)->num_edges();
4391 unsigned idx0 = oper_input_base();
4392 unsigned idx1 = idx0 + num0;
4393 unsigned idx2 = idx1 + num1;
4394 unsigned idx3 = idx2 + num2;
4395 unsigned idx4 = idx3 + num3;
4396 unsigned idx5 = idx4 + num4;
4397 unsigned idx6 = idx5 + num5;
4398 MachNode *result = NULL;
4399
4400 rorI_rReg_CLNode *n0 = new rorI_rReg_CLNode();
4401 n0->add_req(_in[0]);
4402 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGI));
4403 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4404 if(tmp1 == this) {
4405 for(unsigned i = 0; i < num1; i++) {
4406 n0->add_req(_in[i + idx1]);
4407 }
4408 }
4409 else n0->add_req(tmp1);
4410 tmp1 = n0;
4411 n0->set_opnd_array(2, opnd_array(2)->clone()); // shift
4412 if(tmp2 == this) {
4413 for(unsigned i = 0; i < num2; i++) {
4414 n0->add_req(_in[i + idx2]);
4415 }
4416 }
4417 else n0->add_req(tmp2);
4418 result = n0->Expand( state, proj_list, mem );
4419
4420
4421 return result;
4422}
4423
4424MachNode* rorI_rReg_Var_C32_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4425 Compile* C = Compile::current();
4426 MachNode *tmp0 = this;
4427 MachNode *tmp1 = this;
4428 MachNode *tmp2 = this;
4429 MachNode *tmp3 = this;
4430 MachNode *tmp4 = this;
4431 MachNode *tmp5 = this;
4432 unsigned num0 = 0;
4433 unsigned num1 = opnd_array(1)->num_edges();
4434 unsigned num2 = opnd_array(2)->num_edges();
4435 unsigned num3 = opnd_array(3)->num_edges();
4436 unsigned num4 = opnd_array(4)->num_edges();
4437 unsigned num5 = opnd_array(5)->num_edges();
4438 unsigned idx0 = oper_input_base();
4439 unsigned idx1 = idx0 + num0;
4440 unsigned idx2 = idx1 + num1;
4441 unsigned idx3 = idx2 + num2;
4442 unsigned idx4 = idx3 + num3;
4443 unsigned idx5 = idx4 + num4;
4444 unsigned idx6 = idx5 + num5;
4445 MachNode *result = NULL;
4446
4447 rorI_rReg_CLNode *n0 = new rorI_rReg_CLNode();
4448 n0->add_req(_in[0]);
4449 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGI));
4450 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4451 if(tmp1 == this) {
4452 for(unsigned i = 0; i < num1; i++) {
4453 n0->add_req(_in[i + idx1]);
4454 }
4455 }
4456 else n0->add_req(tmp1);
4457 tmp1 = n0;
4458 n0->set_opnd_array(2, opnd_array(3)->clone()); // shift
4459 if(tmp3 == this) {
4460 for(unsigned i = 0; i < num3; i++) {
4461 n0->add_req(_in[i + idx3]);
4462 }
4463 }
4464 else n0->add_req(tmp3);
4465 result = n0->Expand( state, proj_list, mem );
4466
4467
4468 return result;
4469}
4470
4471MachNode* rolL_rReg_imm1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4472 Compile* C = Compile::current();
4473 // Add projection edges for additional defs or kills
4474 // DEF/KILL cr
4475 MachProjNode *kill;
4476 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4477 proj_list.push(kill);
4478
4479 return this;
4480}
4481
4482MachNode* rolL_rReg_imm8Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4483 Compile* C = Compile::current();
4484 // Add projection edges for additional defs or kills
4485 // DEF/KILL cr
4486 MachProjNode *kill;
4487 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4488 proj_list.push(kill);
4489
4490 return this;
4491}
4492
4493MachNode* rolL_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4494 Compile* C = Compile::current();
4495 // Add projection edges for additional defs or kills
4496 // DEF/KILL cr
4497 MachProjNode *kill;
4498 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4499 proj_list.push(kill);
4500
4501 return this;
4502}
4503
4504MachNode* rolL_rReg_i1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4505 Compile* C = Compile::current();
4506 MachNode *tmp0 = this;
4507 MachNode *tmp1 = this;
4508 MachNode *tmp2 = this;
4509 MachNode *tmp3 = this;
4510 MachNode *tmp4 = this;
4511 unsigned num0 = 0;
4512 unsigned num1 = opnd_array(1)->num_edges();
4513 unsigned num2 = opnd_array(2)->num_edges();
4514 unsigned num3 = opnd_array(3)->num_edges();
4515 unsigned num4 = opnd_array(4)->num_edges();
4516 unsigned idx0 = oper_input_base();
4517 unsigned idx1 = idx0 + num0;
4518 unsigned idx2 = idx1 + num1;
4519 unsigned idx3 = idx2 + num2;
4520 unsigned idx4 = idx3 + num3;
4521 unsigned idx5 = idx4 + num4;
4522 MachNode *result = NULL;
4523
4524 rolL_rReg_imm1Node *n0 = new rolL_rReg_imm1Node();
4525 n0->add_req(_in[0]);
4526 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
4527 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4528 if(tmp1 == this) {
4529 for(unsigned i = 0; i < num1; i++) {
4530 n0->add_req(_in[i + idx1]);
4531 }
4532 }
4533 else n0->add_req(tmp1);
4534 tmp1 = n0;
4535 result = n0->Expand( state, proj_list, mem );
4536
4537
4538 return result;
4539}
4540
4541MachNode* rolL_rReg_i1_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4542 Compile* C = Compile::current();
4543 MachNode *tmp0 = this;
4544 MachNode *tmp1 = this;
4545 MachNode *tmp2 = this;
4546 MachNode *tmp3 = this;
4547 MachNode *tmp4 = this;
4548 unsigned num0 = 0;
4549 unsigned num1 = opnd_array(1)->num_edges();
4550 unsigned num2 = opnd_array(2)->num_edges();
4551 unsigned num3 = opnd_array(3)->num_edges();
4552 unsigned num4 = opnd_array(4)->num_edges();
4553 unsigned idx0 = oper_input_base();
4554 unsigned idx1 = idx0 + num0;
4555 unsigned idx2 = idx1 + num1;
4556 unsigned idx3 = idx2 + num2;
4557 unsigned idx4 = idx3 + num3;
4558 unsigned idx5 = idx4 + num4;
4559 MachNode *result = NULL;
4560
4561 rolL_rReg_imm1Node *n0 = new rolL_rReg_imm1Node();
4562 n0->add_req(_in[0]);
4563 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
4564 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4565 if(tmp1 == this) {
4566 for(unsigned i = 0; i < num1; i++) {
4567 n0->add_req(_in[i + idx1]);
4568 }
4569 }
4570 else n0->add_req(tmp1);
4571 tmp1 = n0;
4572 result = n0->Expand( state, proj_list, mem );
4573
4574
4575 return result;
4576}
4577
4578MachNode* rolL_rReg_i8Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4579 Compile* C = Compile::current();
4580 MachNode *tmp0 = this;
4581 MachNode *tmp1 = this;
4582 MachNode *tmp2 = this;
4583 MachNode *tmp3 = this;
4584 MachNode *tmp4 = this;
4585 unsigned num0 = 0;
4586 unsigned num1 = opnd_array(1)->num_edges();
4587 unsigned num2 = opnd_array(2)->num_edges();
4588 unsigned num3 = opnd_array(3)->num_edges();
4589 unsigned num4 = opnd_array(4)->num_edges();
4590 unsigned idx0 = oper_input_base();
4591 unsigned idx1 = idx0 + num0;
4592 unsigned idx2 = idx1 + num1;
4593 unsigned idx3 = idx2 + num2;
4594 unsigned idx4 = idx3 + num3;
4595 unsigned idx5 = idx4 + num4;
4596 MachNode *result = NULL;
4597
4598 rolL_rReg_imm8Node *n0 = new rolL_rReg_imm8Node();
4599 n0->add_req(_in[0]);
4600 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
4601 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4602 if(tmp1 == this) {
4603 for(unsigned i = 0; i < num1; i++) {
4604 n0->add_req(_in[i + idx1]);
4605 }
4606 }
4607 else n0->add_req(tmp1);
4608 tmp1 = n0;
4609 n0->set_opnd_array(2, opnd_array(2)->clone()); // lshift
4610 if(tmp2 == this) {
4611 for(unsigned i = 0; i < num2; i++) {
4612 n0->add_req(_in[i + idx2]);
4613 }
4614 }
4615 else n0->add_req(tmp2);
4616 result = n0->Expand( state, proj_list, mem );
4617
4618
4619 return result;
4620}
4621
4622MachNode* rolL_rReg_i8_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4623 Compile* C = Compile::current();
4624 MachNode *tmp0 = this;
4625 MachNode *tmp1 = this;
4626 MachNode *tmp2 = this;
4627 MachNode *tmp3 = this;
4628 MachNode *tmp4 = this;
4629 unsigned num0 = 0;
4630 unsigned num1 = opnd_array(1)->num_edges();
4631 unsigned num2 = opnd_array(2)->num_edges();
4632 unsigned num3 = opnd_array(3)->num_edges();
4633 unsigned num4 = opnd_array(4)->num_edges();
4634 unsigned idx0 = oper_input_base();
4635 unsigned idx1 = idx0 + num0;
4636 unsigned idx2 = idx1 + num1;
4637 unsigned idx3 = idx2 + num2;
4638 unsigned idx4 = idx3 + num3;
4639 unsigned idx5 = idx4 + num4;
4640 MachNode *result = NULL;
4641
4642 rolL_rReg_imm8Node *n0 = new rolL_rReg_imm8Node();
4643 n0->add_req(_in[0]);
4644 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
4645 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4646 if(tmp1 == this) {
4647 for(unsigned i = 0; i < num1; i++) {
4648 n0->add_req(_in[i + idx1]);
4649 }
4650 }
4651 else n0->add_req(tmp1);
4652 tmp1 = n0;
4653 n0->set_opnd_array(2, opnd_array(4)->clone()); // lshift
4654 if(tmp4 == this) {
4655 for(unsigned i = 0; i < num4; i++) {
4656 n0->add_req(_in[i + idx4]);
4657 }
4658 }
4659 else n0->add_req(tmp4);
4660 result = n0->Expand( state, proj_list, mem );
4661
4662
4663 return result;
4664}
4665
4666MachNode* rolL_rReg_Var_C0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4667 Compile* C = Compile::current();
4668 MachNode *tmp0 = this;
4669 MachNode *tmp1 = this;
4670 MachNode *tmp2 = this;
4671 MachNode *tmp3 = this;
4672 MachNode *tmp4 = this;
4673 MachNode *tmp5 = this;
4674 unsigned num0 = 0;
4675 unsigned num1 = opnd_array(1)->num_edges();
4676 unsigned num2 = opnd_array(2)->num_edges();
4677 unsigned num3 = opnd_array(3)->num_edges();
4678 unsigned num4 = opnd_array(4)->num_edges();
4679 unsigned num5 = opnd_array(5)->num_edges();
4680 unsigned idx0 = oper_input_base();
4681 unsigned idx1 = idx0 + num0;
4682 unsigned idx2 = idx1 + num1;
4683 unsigned idx3 = idx2 + num2;
4684 unsigned idx4 = idx3 + num3;
4685 unsigned idx5 = idx4 + num4;
4686 unsigned idx6 = idx5 + num5;
4687 MachNode *result = NULL;
4688
4689 rolL_rReg_CLNode *n0 = new rolL_rReg_CLNode();
4690 n0->add_req(_in[0]);
4691 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGL));
4692 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4693 if(tmp1 == this) {
4694 for(unsigned i = 0; i < num1; i++) {
4695 n0->add_req(_in[i + idx1]);
4696 }
4697 }
4698 else n0->add_req(tmp1);
4699 tmp1 = n0;
4700 n0->set_opnd_array(2, opnd_array(2)->clone()); // shift
4701 if(tmp2 == this) {
4702 for(unsigned i = 0; i < num2; i++) {
4703 n0->add_req(_in[i + idx2]);
4704 }
4705 }
4706 else n0->add_req(tmp2);
4707 result = n0->Expand( state, proj_list, mem );
4708
4709
4710 return result;
4711}
4712
4713MachNode* rolL_rReg_Var_C0_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4714 Compile* C = Compile::current();
4715 MachNode *tmp0 = this;
4716 MachNode *tmp1 = this;
4717 MachNode *tmp2 = this;
4718 MachNode *tmp3 = this;
4719 MachNode *tmp4 = this;
4720 MachNode *tmp5 = this;
4721 unsigned num0 = 0;
4722 unsigned num1 = opnd_array(1)->num_edges();
4723 unsigned num2 = opnd_array(2)->num_edges();
4724 unsigned num3 = opnd_array(3)->num_edges();
4725 unsigned num4 = opnd_array(4)->num_edges();
4726 unsigned num5 = opnd_array(5)->num_edges();
4727 unsigned idx0 = oper_input_base();
4728 unsigned idx1 = idx0 + num0;
4729 unsigned idx2 = idx1 + num1;
4730 unsigned idx3 = idx2 + num2;
4731 unsigned idx4 = idx3 + num3;
4732 unsigned idx5 = idx4 + num4;
4733 unsigned idx6 = idx5 + num5;
4734 MachNode *result = NULL;
4735
4736 rolL_rReg_CLNode *n0 = new rolL_rReg_CLNode();
4737 n0->add_req(_in[0]);
4738 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGL));
4739 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4740 if(tmp1 == this) {
4741 for(unsigned i = 0; i < num1; i++) {
4742 n0->add_req(_in[i + idx1]);
4743 }
4744 }
4745 else n0->add_req(tmp1);
4746 tmp1 = n0;
4747 n0->set_opnd_array(2, opnd_array(3)->clone()); // shift
4748 if(tmp3 == this) {
4749 for(unsigned i = 0; i < num3; i++) {
4750 n0->add_req(_in[i + idx3]);
4751 }
4752 }
4753 else n0->add_req(tmp3);
4754 result = n0->Expand( state, proj_list, mem );
4755
4756
4757 return result;
4758}
4759
4760MachNode* rolL_rReg_Var_C64Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4761 Compile* C = Compile::current();
4762 MachNode *tmp0 = this;
4763 MachNode *tmp1 = this;
4764 MachNode *tmp2 = this;
4765 MachNode *tmp3 = this;
4766 MachNode *tmp4 = this;
4767 MachNode *tmp5 = this;
4768 unsigned num0 = 0;
4769 unsigned num1 = opnd_array(1)->num_edges();
4770 unsigned num2 = opnd_array(2)->num_edges();
4771 unsigned num3 = opnd_array(3)->num_edges();
4772 unsigned num4 = opnd_array(4)->num_edges();
4773 unsigned num5 = opnd_array(5)->num_edges();
4774 unsigned idx0 = oper_input_base();
4775 unsigned idx1 = idx0 + num0;
4776 unsigned idx2 = idx1 + num1;
4777 unsigned idx3 = idx2 + num2;
4778 unsigned idx4 = idx3 + num3;
4779 unsigned idx5 = idx4 + num4;
4780 unsigned idx6 = idx5 + num5;
4781 MachNode *result = NULL;
4782
4783 rolL_rReg_CLNode *n0 = new rolL_rReg_CLNode();
4784 n0->add_req(_in[0]);
4785 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGL));
4786 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4787 if(tmp1 == this) {
4788 for(unsigned i = 0; i < num1; i++) {
4789 n0->add_req(_in[i + idx1]);
4790 }
4791 }
4792 else n0->add_req(tmp1);
4793 tmp1 = n0;
4794 n0->set_opnd_array(2, opnd_array(2)->clone()); // shift
4795 if(tmp2 == this) {
4796 for(unsigned i = 0; i < num2; i++) {
4797 n0->add_req(_in[i + idx2]);
4798 }
4799 }
4800 else n0->add_req(tmp2);
4801 result = n0->Expand( state, proj_list, mem );
4802
4803
4804 return result;
4805}
4806
4807MachNode* rolL_rReg_Var_C64_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4808 Compile* C = Compile::current();
4809 MachNode *tmp0 = this;
4810 MachNode *tmp1 = this;
4811 MachNode *tmp2 = this;
4812 MachNode *tmp3 = this;
4813 MachNode *tmp4 = this;
4814 MachNode *tmp5 = this;
4815 unsigned num0 = 0;
4816 unsigned num1 = opnd_array(1)->num_edges();
4817 unsigned num2 = opnd_array(2)->num_edges();
4818 unsigned num3 = opnd_array(3)->num_edges();
4819 unsigned num4 = opnd_array(4)->num_edges();
4820 unsigned num5 = opnd_array(5)->num_edges();
4821 unsigned idx0 = oper_input_base();
4822 unsigned idx1 = idx0 + num0;
4823 unsigned idx2 = idx1 + num1;
4824 unsigned idx3 = idx2 + num2;
4825 unsigned idx4 = idx3 + num3;
4826 unsigned idx5 = idx4 + num4;
4827 unsigned idx6 = idx5 + num5;
4828 MachNode *result = NULL;
4829
4830 rolL_rReg_CLNode *n0 = new rolL_rReg_CLNode();
4831 n0->add_req(_in[0]);
4832 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGL));
4833 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4834 if(tmp1 == this) {
4835 for(unsigned i = 0; i < num1; i++) {
4836 n0->add_req(_in[i + idx1]);
4837 }
4838 }
4839 else n0->add_req(tmp1);
4840 tmp1 = n0;
4841 n0->set_opnd_array(2, opnd_array(3)->clone()); // shift
4842 if(tmp3 == this) {
4843 for(unsigned i = 0; i < num3; i++) {
4844 n0->add_req(_in[i + idx3]);
4845 }
4846 }
4847 else n0->add_req(tmp3);
4848 result = n0->Expand( state, proj_list, mem );
4849
4850
4851 return result;
4852}
4853
4854MachNode* rorL_rReg_imm1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4855 Compile* C = Compile::current();
4856 // Add projection edges for additional defs or kills
4857 // DEF/KILL cr
4858 MachProjNode *kill;
4859 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4860 proj_list.push(kill);
4861
4862 return this;
4863}
4864
4865MachNode* rorL_rReg_imm8Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4866 Compile* C = Compile::current();
4867 // Add projection edges for additional defs or kills
4868 // DEF/KILL cr
4869 MachProjNode *kill;
4870 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4871 proj_list.push(kill);
4872
4873 return this;
4874}
4875
4876MachNode* rorL_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4877 Compile* C = Compile::current();
4878 // Add projection edges for additional defs or kills
4879 // DEF/KILL cr
4880 MachProjNode *kill;
4881 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4882 proj_list.push(kill);
4883
4884 return this;
4885}
4886
4887MachNode* rorL_rReg_i1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4888 Compile* C = Compile::current();
4889 MachNode *tmp0 = this;
4890 MachNode *tmp1 = this;
4891 MachNode *tmp2 = this;
4892 MachNode *tmp3 = this;
4893 MachNode *tmp4 = this;
4894 unsigned num0 = 0;
4895 unsigned num1 = opnd_array(1)->num_edges();
4896 unsigned num2 = opnd_array(2)->num_edges();
4897 unsigned num3 = opnd_array(3)->num_edges();
4898 unsigned num4 = opnd_array(4)->num_edges();
4899 unsigned idx0 = oper_input_base();
4900 unsigned idx1 = idx0 + num0;
4901 unsigned idx2 = idx1 + num1;
4902 unsigned idx3 = idx2 + num2;
4903 unsigned idx4 = idx3 + num3;
4904 unsigned idx5 = idx4 + num4;
4905 MachNode *result = NULL;
4906
4907 rorL_rReg_imm1Node *n0 = new rorL_rReg_imm1Node();
4908 n0->add_req(_in[0]);
4909 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
4910 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4911 if(tmp1 == this) {
4912 for(unsigned i = 0; i < num1; i++) {
4913 n0->add_req(_in[i + idx1]);
4914 }
4915 }
4916 else n0->add_req(tmp1);
4917 tmp1 = n0;
4918 result = n0->Expand( state, proj_list, mem );
4919
4920
4921 return result;
4922}
4923
4924MachNode* rorL_rReg_i1_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4925 Compile* C = Compile::current();
4926 MachNode *tmp0 = this;
4927 MachNode *tmp1 = this;
4928 MachNode *tmp2 = this;
4929 MachNode *tmp3 = this;
4930 MachNode *tmp4 = this;
4931 unsigned num0 = 0;
4932 unsigned num1 = opnd_array(1)->num_edges();
4933 unsigned num2 = opnd_array(2)->num_edges();
4934 unsigned num3 = opnd_array(3)->num_edges();
4935 unsigned num4 = opnd_array(4)->num_edges();
4936 unsigned idx0 = oper_input_base();
4937 unsigned idx1 = idx0 + num0;
4938 unsigned idx2 = idx1 + num1;
4939 unsigned idx3 = idx2 + num2;
4940 unsigned idx4 = idx3 + num3;
4941 unsigned idx5 = idx4 + num4;
4942 MachNode *result = NULL;
4943
4944 rorL_rReg_imm1Node *n0 = new rorL_rReg_imm1Node();
4945 n0->add_req(_in[0]);
4946 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
4947 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4948 if(tmp1 == this) {
4949 for(unsigned i = 0; i < num1; i++) {
4950 n0->add_req(_in[i + idx1]);
4951 }
4952 }
4953 else n0->add_req(tmp1);
4954 tmp1 = n0;
4955 result = n0->Expand( state, proj_list, mem );
4956
4957
4958 return result;
4959}
4960
4961MachNode* rorL_rReg_i8Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4962 Compile* C = Compile::current();
4963 MachNode *tmp0 = this;
4964 MachNode *tmp1 = this;
4965 MachNode *tmp2 = this;
4966 MachNode *tmp3 = this;
4967 MachNode *tmp4 = this;
4968 unsigned num0 = 0;
4969 unsigned num1 = opnd_array(1)->num_edges();
4970 unsigned num2 = opnd_array(2)->num_edges();
4971 unsigned num3 = opnd_array(3)->num_edges();
4972 unsigned num4 = opnd_array(4)->num_edges();
4973 unsigned idx0 = oper_input_base();
4974 unsigned idx1 = idx0 + num0;
4975 unsigned idx2 = idx1 + num1;
4976 unsigned idx3 = idx2 + num2;
4977 unsigned idx4 = idx3 + num3;
4978 unsigned idx5 = idx4 + num4;
4979 MachNode *result = NULL;
4980
4981 rorL_rReg_imm8Node *n0 = new rorL_rReg_imm8Node();
4982 n0->add_req(_in[0]);
4983 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
4984 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
4985 if(tmp1 == this) {
4986 for(unsigned i = 0; i < num1; i++) {
4987 n0->add_req(_in[i + idx1]);
4988 }
4989 }
4990 else n0->add_req(tmp1);
4991 tmp1 = n0;
4992 n0->set_opnd_array(2, opnd_array(2)->clone()); // rshift
4993 if(tmp2 == this) {
4994 for(unsigned i = 0; i < num2; i++) {
4995 n0->add_req(_in[i + idx2]);
4996 }
4997 }
4998 else n0->add_req(tmp2);
4999 result = n0->Expand( state, proj_list, mem );
5000
5001
5002 return result;
5003}
5004
5005MachNode* rorL_rReg_i8_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5006 Compile* C = Compile::current();
5007 MachNode *tmp0 = this;
5008 MachNode *tmp1 = this;
5009 MachNode *tmp2 = this;
5010 MachNode *tmp3 = this;
5011 MachNode *tmp4 = this;
5012 unsigned num0 = 0;
5013 unsigned num1 = opnd_array(1)->num_edges();
5014 unsigned num2 = opnd_array(2)->num_edges();
5015 unsigned num3 = opnd_array(3)->num_edges();
5016 unsigned num4 = opnd_array(4)->num_edges();
5017 unsigned idx0 = oper_input_base();
5018 unsigned idx1 = idx0 + num0;
5019 unsigned idx2 = idx1 + num1;
5020 unsigned idx3 = idx2 + num2;
5021 unsigned idx4 = idx3 + num3;
5022 unsigned idx5 = idx4 + num4;
5023 MachNode *result = NULL;
5024
5025 rorL_rReg_imm8Node *n0 = new rorL_rReg_imm8Node();
5026 n0->add_req(_in[0]);
5027 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
5028 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
5029 if(tmp1 == this) {
5030 for(unsigned i = 0; i < num1; i++) {
5031 n0->add_req(_in[i + idx1]);
5032 }
5033 }
5034 else n0->add_req(tmp1);
5035 tmp1 = n0;
5036 n0->set_opnd_array(2, opnd_array(4)->clone()); // rshift
5037 if(tmp4 == this) {
5038 for(unsigned i = 0; i < num4; i++) {
5039 n0->add_req(_in[i + idx4]);
5040 }
5041 }
5042 else n0->add_req(tmp4);
5043 result = n0->Expand( state, proj_list, mem );
5044
5045
5046 return result;
5047}
5048
5049MachNode* rorL_rReg_Var_C0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5050 Compile* C = Compile::current();
5051 MachNode *tmp0 = this;
5052 MachNode *tmp1 = this;
5053 MachNode *tmp2 = this;
5054 MachNode *tmp3 = this;
5055 MachNode *tmp4 = this;
5056 MachNode *tmp5 = this;
5057 unsigned num0 = 0;
5058 unsigned num1 = opnd_array(1)->num_edges();
5059 unsigned num2 = opnd_array(2)->num_edges();
5060 unsigned num3 = opnd_array(3)->num_edges();
5061 unsigned num4 = opnd_array(4)->num_edges();
5062 unsigned num5 = opnd_array(5)->num_edges();
5063 unsigned idx0 = oper_input_base();
5064 unsigned idx1 = idx0 + num0;
5065 unsigned idx2 = idx1 + num1;
5066 unsigned idx3 = idx2 + num2;
5067 unsigned idx4 = idx3 + num3;
5068 unsigned idx5 = idx4 + num4;
5069 unsigned idx6 = idx5 + num5;
5070 MachNode *result = NULL;
5071
5072 rorL_rReg_CLNode *n0 = new rorL_rReg_CLNode();
5073 n0->add_req(_in[0]);
5074 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGL));
5075 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
5076 if(tmp1 == this) {
5077 for(unsigned i = 0; i < num1; i++) {
5078 n0->add_req(_in[i + idx1]);
5079 }
5080 }
5081 else n0->add_req(tmp1);
5082 tmp1 = n0;
5083 n0->set_opnd_array(2, opnd_array(2)->clone()); // shift
5084 if(tmp2 == this) {
5085 for(unsigned i = 0; i < num2; i++) {
5086 n0->add_req(_in[i + idx2]);
5087 }
5088 }
5089 else n0->add_req(tmp2);
5090 result = n0->Expand( state, proj_list, mem );
5091
5092
5093 return result;
5094}
5095
5096MachNode* rorL_rReg_Var_C0_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5097 Compile* C = Compile::current();
5098 MachNode *tmp0 = this;
5099 MachNode *tmp1 = this;
5100 MachNode *tmp2 = this;
5101 MachNode *tmp3 = this;
5102 MachNode *tmp4 = this;
5103 MachNode *tmp5 = this;
5104 unsigned num0 = 0;
5105 unsigned num1 = opnd_array(1)->num_edges();
5106 unsigned num2 = opnd_array(2)->num_edges();
5107 unsigned num3 = opnd_array(3)->num_edges();
5108 unsigned num4 = opnd_array(4)->num_edges();
5109 unsigned num5 = opnd_array(5)->num_edges();
5110 unsigned idx0 = oper_input_base();
5111 unsigned idx1 = idx0 + num0;
5112 unsigned idx2 = idx1 + num1;
5113 unsigned idx3 = idx2 + num2;
5114 unsigned idx4 = idx3 + num3;
5115 unsigned idx5 = idx4 + num4;
5116 unsigned idx6 = idx5 + num5;
5117 MachNode *result = NULL;
5118
5119 rorL_rReg_CLNode *n0 = new rorL_rReg_CLNode();
5120 n0->add_req(_in[0]);
5121 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGL));
5122 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
5123 if(tmp1 == this) {
5124 for(unsigned i = 0; i < num1; i++) {
5125 n0->add_req(_in[i + idx1]);
5126 }
5127 }
5128 else n0->add_req(tmp1);
5129 tmp1 = n0;
5130 n0->set_opnd_array(2, opnd_array(3)->clone()); // shift
5131 if(tmp3 == this) {
5132 for(unsigned i = 0; i < num3; i++) {
5133 n0->add_req(_in[i + idx3]);
5134 }
5135 }
5136 else n0->add_req(tmp3);
5137 result = n0->Expand( state, proj_list, mem );
5138
5139
5140 return result;
5141}
5142
5143MachNode* rorL_rReg_Var_C64Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5144 Compile* C = Compile::current();
5145 MachNode *tmp0 = this;
5146 MachNode *tmp1 = this;
5147 MachNode *tmp2 = this;
5148 MachNode *tmp3 = this;
5149 MachNode *tmp4 = this;
5150 MachNode *tmp5 = this;
5151 unsigned num0 = 0;
5152 unsigned num1 = opnd_array(1)->num_edges();
5153 unsigned num2 = opnd_array(2)->num_edges();
5154 unsigned num3 = opnd_array(3)->num_edges();
5155 unsigned num4 = opnd_array(4)->num_edges();
5156 unsigned num5 = opnd_array(5)->num_edges();
5157 unsigned idx0 = oper_input_base();
5158 unsigned idx1 = idx0 + num0;
5159 unsigned idx2 = idx1 + num1;
5160 unsigned idx3 = idx2 + num2;
5161 unsigned idx4 = idx3 + num3;
5162 unsigned idx5 = idx4 + num4;
5163 unsigned idx6 = idx5 + num5;
5164 MachNode *result = NULL;
5165
5166 rorL_rReg_CLNode *n0 = new rorL_rReg_CLNode();
5167 n0->add_req(_in[0]);
5168 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGL));
5169 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
5170 if(tmp1 == this) {
5171 for(unsigned i = 0; i < num1; i++) {
5172 n0->add_req(_in[i + idx1]);
5173 }
5174 }
5175 else n0->add_req(tmp1);
5176 tmp1 = n0;
5177 n0->set_opnd_array(2, opnd_array(2)->clone()); // shift
5178 if(tmp2 == this) {
5179 for(unsigned i = 0; i < num2; i++) {
5180 n0->add_req(_in[i + idx2]);
5181 }
5182 }
5183 else n0->add_req(tmp2);
5184 result = n0->Expand( state, proj_list, mem );
5185
5186
5187 return result;
5188}
5189
5190MachNode* rorL_rReg_Var_C64_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5191 Compile* C = Compile::current();
5192 MachNode *tmp0 = this;
5193 MachNode *tmp1 = this;
5194 MachNode *tmp2 = this;
5195 MachNode *tmp3 = this;
5196 MachNode *tmp4 = this;
5197 MachNode *tmp5 = this;
5198 unsigned num0 = 0;
5199 unsigned num1 = opnd_array(1)->num_edges();
5200 unsigned num2 = opnd_array(2)->num_edges();
5201 unsigned num3 = opnd_array(3)->num_edges();
5202 unsigned num4 = opnd_array(4)->num_edges();
5203 unsigned num5 = opnd_array(5)->num_edges();
5204 unsigned idx0 = oper_input_base();
5205 unsigned idx1 = idx0 + num0;
5206 unsigned idx2 = idx1 + num1;
5207 unsigned idx3 = idx2 + num2;
5208 unsigned idx4 = idx3 + num3;
5209 unsigned idx5 = idx4 + num4;
5210 unsigned idx6 = idx5 + num5;
5211 MachNode *result = NULL;
5212
5213 rorL_rReg_CLNode *n0 = new rorL_rReg_CLNode();
5214 n0->add_req(_in[0]);
5215 n0->set_opnd_array(0, state->MachOperGenerator(NO_RCX_REGL));
5216 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
5217 if(tmp1 == this) {
5218 for(unsigned i = 0; i < num1; i++) {
5219 n0->add_req(_in[i + idx1]);
5220 }
5221 }
5222 else n0->add_req(tmp1);
5223 tmp1 = n0;
5224 n0->set_opnd_array(2, opnd_array(3)->clone()); // shift
5225 if(tmp3 == this) {
5226 for(unsigned i = 0; i < num3; i++) {
5227 n0->add_req(_in[i + idx3]);
5228 }
5229 }
5230 else n0->add_req(tmp3);
5231 result = n0->Expand( state, proj_list, mem );
5232
5233
5234 return result;
5235}
5236
5237MachNode* andI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5238 Compile* C = Compile::current();
5239 // Add projection edges for additional defs or kills
5240 // DEF/KILL cr
5241 MachProjNode *kill;
5242 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5243 proj_list.push(kill);
5244
5245 return this;
5246}
5247
5248MachNode* andI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5249 Compile* C = Compile::current();
5250 // Add projection edges for additional defs or kills
5251 // DEF/KILL cr
5252 MachProjNode *kill;
5253 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5254 proj_list.push(kill);
5255
5256 return this;
5257}
5258
5259MachNode* andI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5260 Compile* C = Compile::current();
5261 // Add projection edges for additional defs or kills
5262 // DEF/KILL cr
5263 MachProjNode *kill;
5264 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5265 proj_list.push(kill);
5266
5267 return this;
5268}
5269
5270MachNode* andI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5271 Compile* C = Compile::current();
5272 // Add projection edges for additional defs or kills
5273 // DEF/KILL cr
5274 MachProjNode *kill;
5275 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5276 proj_list.push(kill);
5277
5278 return this;
5279}
5280
5281MachNode* andB_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5282 Compile* C = Compile::current();
5283 // Add projection edges for additional defs or kills
5284 // DEF/KILL cr
5285 MachProjNode *kill;
5286 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5287 proj_list.push(kill);
5288 // Remove duplicated operands and inputs which use the same name.
5289 if (num_opnds() == 4) {
5290 unsigned num0 = 0;
5291 unsigned num1 = opnd_array(1)->num_edges(); // dst
5292 unsigned num2 = opnd_array(2)->num_edges(); // dst
5293 unsigned num3 = opnd_array(3)->num_edges(); // src
5294 unsigned idx0 = oper_input_base();
5295 unsigned idx1 = idx0 + num0;
5296 unsigned idx2 = idx1 + num1;
5297 unsigned idx3 = idx2 + num2;
5298 unsigned idx4 = idx3 + num3;
5299 set_opnd_array(2, opnd_array(3)->clone()); // src
5300 for (unsigned i = 0; i < num3; i++) {
5301 set_req(i + idx2, _in[i + idx3]);
5302 }
5303 num2 = num3;
5304 idx3 = idx2 + num2;
5305 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5306 del_req(i);
5307 }
5308 _num_opnds = 3;
5309 } else {
5310 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5311 }
5312
5313 return this;
5314}
5315
5316MachNode* andB_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5317 Compile* C = Compile::current();
5318 // Add projection edges for additional defs or kills
5319 // DEF/KILL cr
5320 MachProjNode *kill;
5321 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5322 proj_list.push(kill);
5323 // Remove duplicated operands and inputs which use the same name.
5324 if (num_opnds() == 4) {
5325 unsigned num0 = 0;
5326 unsigned num1 = opnd_array(1)->num_edges(); // dst
5327 unsigned num2 = opnd_array(2)->num_edges(); // src
5328 unsigned num3 = opnd_array(3)->num_edges(); // dst
5329 unsigned idx0 = oper_input_base();
5330 unsigned idx1 = idx0 + num0;
5331 unsigned idx2 = idx1 + num1;
5332 unsigned idx3 = idx2 + num2;
5333 unsigned idx4 = idx3 + num3;
5334 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5335 del_req(i);
5336 }
5337 _num_opnds = 3;
5338 } else {
5339 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5340 }
5341
5342 return this;
5343}
5344
5345MachNode* andI_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5346 Compile* C = Compile::current();
5347 // Add projection edges for additional defs or kills
5348 // DEF/KILL cr
5349 MachProjNode *kill;
5350 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5351 proj_list.push(kill);
5352 // Remove duplicated operands and inputs which use the same name.
5353 if (num_opnds() == 4) {
5354 unsigned num0 = 0;
5355 unsigned num1 = opnd_array(1)->num_edges(); // dst
5356 unsigned num2 = opnd_array(2)->num_edges(); // dst
5357 unsigned num3 = opnd_array(3)->num_edges(); // src
5358 unsigned idx0 = oper_input_base();
5359 unsigned idx1 = idx0 + num0;
5360 unsigned idx2 = idx1 + num1;
5361 unsigned idx3 = idx2 + num2;
5362 unsigned idx4 = idx3 + num3;
5363 set_opnd_array(2, opnd_array(3)->clone()); // src
5364 for (unsigned i = 0; i < num3; i++) {
5365 set_req(i + idx2, _in[i + idx3]);
5366 }
5367 num2 = num3;
5368 idx3 = idx2 + num2;
5369 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5370 del_req(i);
5371 }
5372 _num_opnds = 3;
5373 } else {
5374 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5375 }
5376
5377 return this;
5378}
5379
5380MachNode* andI_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5381 Compile* C = Compile::current();
5382 // Add projection edges for additional defs or kills
5383 // DEF/KILL cr
5384 MachProjNode *kill;
5385 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5386 proj_list.push(kill);
5387 // Remove duplicated operands and inputs which use the same name.
5388 if (num_opnds() == 4) {
5389 unsigned num0 = 0;
5390 unsigned num1 = opnd_array(1)->num_edges(); // dst
5391 unsigned num2 = opnd_array(2)->num_edges(); // src
5392 unsigned num3 = opnd_array(3)->num_edges(); // dst
5393 unsigned idx0 = oper_input_base();
5394 unsigned idx1 = idx0 + num0;
5395 unsigned idx2 = idx1 + num1;
5396 unsigned idx3 = idx2 + num2;
5397 unsigned idx4 = idx3 + num3;
5398 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5399 del_req(i);
5400 }
5401 _num_opnds = 3;
5402 } else {
5403 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5404 }
5405
5406 return this;
5407}
5408
5409MachNode* andI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5410 Compile* C = Compile::current();
5411 // Add projection edges for additional defs or kills
5412 // DEF/KILL cr
5413 MachProjNode *kill;
5414 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5415 proj_list.push(kill);
5416 // Remove duplicated operands and inputs which use the same name.
5417 if (num_opnds() == 4) {
5418 unsigned num0 = 0;
5419 unsigned num1 = opnd_array(1)->num_edges(); // dst
5420 unsigned num2 = opnd_array(2)->num_edges(); // dst
5421 unsigned num3 = opnd_array(3)->num_edges(); // src
5422 unsigned idx0 = oper_input_base();
5423 unsigned idx1 = idx0 + num0;
5424 unsigned idx2 = idx1 + num1;
5425 unsigned idx3 = idx2 + num2;
5426 unsigned idx4 = idx3 + num3;
5427 set_opnd_array(2, opnd_array(3)->clone()); // src
5428 for (unsigned i = 0; i < num3; i++) {
5429 set_req(i + idx2, _in[i + idx3]);
5430 }
5431 num2 = num3;
5432 idx3 = idx2 + num2;
5433 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5434 del_req(i);
5435 }
5436 _num_opnds = 3;
5437 } else {
5438 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5439 }
5440
5441 return this;
5442}
5443
5444MachNode* andnI_rReg_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5445 Compile* C = Compile::current();
5446 // Add projection edges for additional defs or kills
5447 // DEF/KILL cr
5448 MachProjNode *kill;
5449 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5450 proj_list.push(kill);
5451
5452 return this;
5453}
5454
5455MachNode* andnI_rReg_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5456 Compile* C = Compile::current();
5457 // Add projection edges for additional defs or kills
5458 // DEF/KILL cr
5459 MachProjNode *kill;
5460 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5461 proj_list.push(kill);
5462
5463 return this;
5464}
5465
5466MachNode* andnI_rReg_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5467 Compile* C = Compile::current();
5468 // Add projection edges for additional defs or kills
5469 // DEF/KILL cr
5470 MachProjNode *kill;
5471 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5472 proj_list.push(kill);
5473
5474 return this;
5475}
5476
5477MachNode* andnI_rReg_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5478 Compile* C = Compile::current();
5479 // Add projection edges for additional defs or kills
5480 // DEF/KILL cr
5481 MachProjNode *kill;
5482 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5483 proj_list.push(kill);
5484
5485 return this;
5486}
5487
5488MachNode* blsiI_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5489 Compile* C = Compile::current();
5490 // Add projection edges for additional defs or kills
5491 // DEF/KILL cr
5492 MachProjNode *kill;
5493 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5494 proj_list.push(kill);
5495 // Remove duplicated operands and inputs which use the same name.
5496 if (num_opnds() == 4) {
5497 unsigned num0 = 0;
5498 unsigned num1 = opnd_array(1)->num_edges(); // imm_zero
5499 unsigned num2 = opnd_array(2)->num_edges(); // src
5500 unsigned num3 = opnd_array(3)->num_edges(); // src
5501 unsigned idx0 = oper_input_base();
5502 unsigned idx1 = idx0 + num0;
5503 unsigned idx2 = idx1 + num1;
5504 unsigned idx3 = idx2 + num2;
5505 unsigned idx4 = idx3 + num3;
5506 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5507 del_req(i);
5508 }
5509 _num_opnds = 3;
5510 } else {
5511 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5512 }
5513
5514 return this;
5515}
5516
5517MachNode* blsiI_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5518 Compile* C = Compile::current();
5519 // Add projection edges for additional defs or kills
5520 // DEF/KILL cr
5521 MachProjNode *kill;
5522 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5523 proj_list.push(kill);
5524 // Remove duplicated operands and inputs which use the same name.
5525 if (num_opnds() == 4) {
5526 unsigned num0 = 0;
5527 unsigned num1 = opnd_array(1)->num_edges(); // src
5528 unsigned num2 = opnd_array(2)->num_edges(); // imm_zero
5529 unsigned num3 = opnd_array(3)->num_edges(); // src
5530 unsigned idx0 = oper_input_base();
5531 unsigned idx1 = idx0 + num0;
5532 unsigned idx2 = idx1 + num1;
5533 unsigned idx3 = idx2 + num2;
5534 unsigned idx4 = idx3 + num3;
5535 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5536 del_req(i);
5537 }
5538 _num_opnds = 3;
5539 } else {
5540 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5541 }
5542
5543 return this;
5544}
5545
5546MachNode* blsiI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5547 Compile* C = Compile::current();
5548 // Add projection edges for additional defs or kills
5549 // DEF/KILL cr
5550 MachProjNode *kill;
5551 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5552 proj_list.push(kill);
5553 // Remove duplicated operands and inputs which use the same name.
5554 if (num_opnds() == 4) {
5555 unsigned num0 = 0;
5556 unsigned num1 = opnd_array(1)->num_edges(); // imm_zero
5557 unsigned num2 = opnd_array(2)->num_edges(); // src
5558 unsigned num3 = opnd_array(3)->num_edges(); // src
5559 unsigned idx0 = oper_input_base();
5560 unsigned idx1 = idx0 + num0;
5561 unsigned idx2 = idx1 + num1;
5562 unsigned idx3 = idx2 + num2;
5563 unsigned idx4 = idx3 + num3;
5564 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5565 del_req(i);
5566 }
5567 _num_opnds = 3;
5568 } else {
5569 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5570 }
5571
5572 return this;
5573}
5574
5575MachNode* blsiI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5576 Compile* C = Compile::current();
5577 // Add projection edges for additional defs or kills
5578 // DEF/KILL cr
5579 MachProjNode *kill;
5580 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5581 proj_list.push(kill);
5582 // Remove duplicated operands and inputs which use the same name.
5583 if (num_opnds() == 4) {
5584 unsigned num0 = 0;
5585 unsigned num1 = opnd_array(1)->num_edges(); // src
5586 unsigned num2 = opnd_array(2)->num_edges(); // imm_zero
5587 unsigned num3 = opnd_array(3)->num_edges(); // src
5588 unsigned idx0 = oper_input_base();
5589 unsigned idx1 = idx0 + num0;
5590 unsigned idx2 = idx1 + num1;
5591 unsigned idx3 = idx2 + num2;
5592 unsigned idx4 = idx3 + num3;
5593 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5594 del_req(i);
5595 }
5596 _num_opnds = 3;
5597 } else {
5598 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5599 }
5600
5601 return this;
5602}
5603
5604MachNode* blsmskI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5605 Compile* C = Compile::current();
5606 // Add projection edges for additional defs or kills
5607 // DEF/KILL cr
5608 MachProjNode *kill;
5609 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5610 proj_list.push(kill);
5611 // Remove duplicated operands and inputs which use the same name.
5612 if (num_opnds() == 4) {
5613 unsigned num0 = 0;
5614 unsigned num1 = opnd_array(1)->num_edges(); // src
5615 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
5616 unsigned num3 = opnd_array(3)->num_edges(); // src
5617 unsigned idx0 = oper_input_base();
5618 unsigned idx1 = idx0 + num0;
5619 unsigned idx2 = idx1 + num1;
5620 unsigned idx3 = idx2 + num2;
5621 unsigned idx4 = idx3 + num3;
5622 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5623 del_req(i);
5624 }
5625 _num_opnds = 3;
5626 } else {
5627 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5628 }
5629
5630 return this;
5631}
5632
5633MachNode* blsmskI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5634 Compile* C = Compile::current();
5635 // Add projection edges for additional defs or kills
5636 // DEF/KILL cr
5637 MachProjNode *kill;
5638 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5639 proj_list.push(kill);
5640 // Remove duplicated operands and inputs which use the same name.
5641 if (num_opnds() == 4) {
5642 unsigned num0 = 0;
5643 unsigned num1 = opnd_array(1)->num_edges(); // src
5644 unsigned num2 = opnd_array(2)->num_edges(); // src
5645 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
5646 unsigned idx0 = oper_input_base();
5647 unsigned idx1 = idx0 + num0;
5648 unsigned idx2 = idx1 + num1;
5649 unsigned idx3 = idx2 + num2;
5650 unsigned idx4 = idx3 + num3;
5651 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
5652 for (unsigned i = 0; i < num3; i++) {
5653 set_req(i + idx2, _in[i + idx3]);
5654 }
5655 num2 = num3;
5656 idx3 = idx2 + num2;
5657 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5658 del_req(i);
5659 }
5660 _num_opnds = 3;
5661 } else {
5662 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5663 }
5664
5665 return this;
5666}
5667
5668MachNode* blsmskI_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5669 Compile* C = Compile::current();
5670 // Add projection edges for additional defs or kills
5671 // DEF/KILL cr
5672 MachProjNode *kill;
5673 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5674 proj_list.push(kill);
5675 // Remove duplicated operands and inputs which use the same name.
5676 if (num_opnds() == 4) {
5677 unsigned num0 = 0;
5678 unsigned num1 = opnd_array(1)->num_edges(); // src
5679 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
5680 unsigned num3 = opnd_array(3)->num_edges(); // src
5681 unsigned idx0 = oper_input_base();
5682 unsigned idx1 = idx0 + num0;
5683 unsigned idx2 = idx1 + num1;
5684 unsigned idx3 = idx2 + num2;
5685 unsigned idx4 = idx3 + num3;
5686 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5687 del_req(i);
5688 }
5689 _num_opnds = 3;
5690 } else {
5691 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5692 }
5693
5694 return this;
5695}
5696
5697MachNode* blsmskI_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5698 Compile* C = Compile::current();
5699 // Add projection edges for additional defs or kills
5700 // DEF/KILL cr
5701 MachProjNode *kill;
5702 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5703 proj_list.push(kill);
5704 // Remove duplicated operands and inputs which use the same name.
5705 if (num_opnds() == 4) {
5706 unsigned num0 = 0;
5707 unsigned num1 = opnd_array(1)->num_edges(); // src
5708 unsigned num2 = opnd_array(2)->num_edges(); // src
5709 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
5710 unsigned idx0 = oper_input_base();
5711 unsigned idx1 = idx0 + num0;
5712 unsigned idx2 = idx1 + num1;
5713 unsigned idx3 = idx2 + num2;
5714 unsigned idx4 = idx3 + num3;
5715 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
5716 for (unsigned i = 0; i < num3; i++) {
5717 set_req(i + idx2, _in[i + idx3]);
5718 }
5719 num2 = num3;
5720 idx3 = idx2 + num2;
5721 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5722 del_req(i);
5723 }
5724 _num_opnds = 3;
5725 } else {
5726 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5727 }
5728
5729 return this;
5730}
5731
5732MachNode* blsrI_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5733 Compile* C = Compile::current();
5734 // Add projection edges for additional defs or kills
5735 // DEF/KILL cr
5736 MachProjNode *kill;
5737 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5738 proj_list.push(kill);
5739 // Remove duplicated operands and inputs which use the same name.
5740 if (num_opnds() == 4) {
5741 unsigned num0 = 0;
5742 unsigned num1 = opnd_array(1)->num_edges(); // src
5743 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
5744 unsigned num3 = opnd_array(3)->num_edges(); // src
5745 unsigned idx0 = oper_input_base();
5746 unsigned idx1 = idx0 + num0;
5747 unsigned idx2 = idx1 + num1;
5748 unsigned idx3 = idx2 + num2;
5749 unsigned idx4 = idx3 + num3;
5750 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5751 del_req(i);
5752 }
5753 _num_opnds = 3;
5754 } else {
5755 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5756 }
5757
5758 return this;
5759}
5760
5761MachNode* blsrI_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5762 Compile* C = Compile::current();
5763 // Add projection edges for additional defs or kills
5764 // DEF/KILL cr
5765 MachProjNode *kill;
5766 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5767 proj_list.push(kill);
5768 // Remove duplicated operands and inputs which use the same name.
5769 if (num_opnds() == 4) {
5770 unsigned num0 = 0;
5771 unsigned num1 = opnd_array(1)->num_edges(); // src
5772 unsigned num2 = opnd_array(2)->num_edges(); // src
5773 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
5774 unsigned idx0 = oper_input_base();
5775 unsigned idx1 = idx0 + num0;
5776 unsigned idx2 = idx1 + num1;
5777 unsigned idx3 = idx2 + num2;
5778 unsigned idx4 = idx3 + num3;
5779 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
5780 for (unsigned i = 0; i < num3; i++) {
5781 set_req(i + idx2, _in[i + idx3]);
5782 }
5783 num2 = num3;
5784 idx3 = idx2 + num2;
5785 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5786 del_req(i);
5787 }
5788 _num_opnds = 3;
5789 } else {
5790 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5791 }
5792
5793 return this;
5794}
5795
5796MachNode* blsrI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5797 Compile* C = Compile::current();
5798 // Add projection edges for additional defs or kills
5799 // DEF/KILL cr
5800 MachProjNode *kill;
5801 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5802 proj_list.push(kill);
5803 // Remove duplicated operands and inputs which use the same name.
5804 if (num_opnds() == 4) {
5805 unsigned num0 = 0;
5806 unsigned num1 = opnd_array(1)->num_edges(); // src
5807 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
5808 unsigned num3 = opnd_array(3)->num_edges(); // src
5809 unsigned idx0 = oper_input_base();
5810 unsigned idx1 = idx0 + num0;
5811 unsigned idx2 = idx1 + num1;
5812 unsigned idx3 = idx2 + num2;
5813 unsigned idx4 = idx3 + num3;
5814 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5815 del_req(i);
5816 }
5817 _num_opnds = 3;
5818 } else {
5819 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5820 }
5821
5822 return this;
5823}
5824
5825MachNode* blsrI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5826 Compile* C = Compile::current();
5827 // Add projection edges for additional defs or kills
5828 // DEF/KILL cr
5829 MachProjNode *kill;
5830 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5831 proj_list.push(kill);
5832 // Remove duplicated operands and inputs which use the same name.
5833 if (num_opnds() == 4) {
5834 unsigned num0 = 0;
5835 unsigned num1 = opnd_array(1)->num_edges(); // src
5836 unsigned num2 = opnd_array(2)->num_edges(); // src
5837 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
5838 unsigned idx0 = oper_input_base();
5839 unsigned idx1 = idx0 + num0;
5840 unsigned idx2 = idx1 + num1;
5841 unsigned idx3 = idx2 + num2;
5842 unsigned idx4 = idx3 + num3;
5843 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
5844 for (unsigned i = 0; i < num3; i++) {
5845 set_req(i + idx2, _in[i + idx3]);
5846 }
5847 num2 = num3;
5848 idx3 = idx2 + num2;
5849 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5850 del_req(i);
5851 }
5852 _num_opnds = 3;
5853 } else {
5854 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5855 }
5856
5857 return this;
5858}
5859
5860MachNode* orI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5861 Compile* C = Compile::current();
5862 // Add projection edges for additional defs or kills
5863 // DEF/KILL cr
5864 MachProjNode *kill;
5865 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5866 proj_list.push(kill);
5867
5868 return this;
5869}
5870
5871MachNode* orI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5872 Compile* C = Compile::current();
5873 // Add projection edges for additional defs or kills
5874 // DEF/KILL cr
5875 MachProjNode *kill;
5876 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5877 proj_list.push(kill);
5878
5879 return this;
5880}
5881
5882MachNode* orI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5883 Compile* C = Compile::current();
5884 // Add projection edges for additional defs or kills
5885 // DEF/KILL cr
5886 MachProjNode *kill;
5887 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5888 proj_list.push(kill);
5889
5890 return this;
5891}
5892
5893MachNode* orI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5894 Compile* C = Compile::current();
5895 // Add projection edges for additional defs or kills
5896 // DEF/KILL cr
5897 MachProjNode *kill;
5898 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5899 proj_list.push(kill);
5900
5901 return this;
5902}
5903
5904MachNode* orB_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5905 Compile* C = Compile::current();
5906 // Add projection edges for additional defs or kills
5907 // DEF/KILL cr
5908 MachProjNode *kill;
5909 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5910 proj_list.push(kill);
5911 // Remove duplicated operands and inputs which use the same name.
5912 if (num_opnds() == 4) {
5913 unsigned num0 = 0;
5914 unsigned num1 = opnd_array(1)->num_edges(); // dst
5915 unsigned num2 = opnd_array(2)->num_edges(); // dst
5916 unsigned num3 = opnd_array(3)->num_edges(); // src
5917 unsigned idx0 = oper_input_base();
5918 unsigned idx1 = idx0 + num0;
5919 unsigned idx2 = idx1 + num1;
5920 unsigned idx3 = idx2 + num2;
5921 unsigned idx4 = idx3 + num3;
5922 set_opnd_array(2, opnd_array(3)->clone()); // src
5923 for (unsigned i = 0; i < num3; i++) {
5924 set_req(i + idx2, _in[i + idx3]);
5925 }
5926 num2 = num3;
5927 idx3 = idx2 + num2;
5928 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5929 del_req(i);
5930 }
5931 _num_opnds = 3;
5932 } else {
5933 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5934 }
5935
5936 return this;
5937}
5938
5939MachNode* orB_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5940 Compile* C = Compile::current();
5941 // Add projection edges for additional defs or kills
5942 // DEF/KILL cr
5943 MachProjNode *kill;
5944 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5945 proj_list.push(kill);
5946 // Remove duplicated operands and inputs which use the same name.
5947 if (num_opnds() == 4) {
5948 unsigned num0 = 0;
5949 unsigned num1 = opnd_array(1)->num_edges(); // dst
5950 unsigned num2 = opnd_array(2)->num_edges(); // src
5951 unsigned num3 = opnd_array(3)->num_edges(); // dst
5952 unsigned idx0 = oper_input_base();
5953 unsigned idx1 = idx0 + num0;
5954 unsigned idx2 = idx1 + num1;
5955 unsigned idx3 = idx2 + num2;
5956 unsigned idx4 = idx3 + num3;
5957 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5958 del_req(i);
5959 }
5960 _num_opnds = 3;
5961 } else {
5962 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5963 }
5964
5965 return this;
5966}
5967
5968MachNode* orI_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5969 Compile* C = Compile::current();
5970 // Add projection edges for additional defs or kills
5971 // DEF/KILL cr
5972 MachProjNode *kill;
5973 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5974 proj_list.push(kill);
5975 // Remove duplicated operands and inputs which use the same name.
5976 if (num_opnds() == 4) {
5977 unsigned num0 = 0;
5978 unsigned num1 = opnd_array(1)->num_edges(); // dst
5979 unsigned num2 = opnd_array(2)->num_edges(); // dst
5980 unsigned num3 = opnd_array(3)->num_edges(); // src
5981 unsigned idx0 = oper_input_base();
5982 unsigned idx1 = idx0 + num0;
5983 unsigned idx2 = idx1 + num1;
5984 unsigned idx3 = idx2 + num2;
5985 unsigned idx4 = idx3 + num3;
5986 set_opnd_array(2, opnd_array(3)->clone()); // src
5987 for (unsigned i = 0; i < num3; i++) {
5988 set_req(i + idx2, _in[i + idx3]);
5989 }
5990 num2 = num3;
5991 idx3 = idx2 + num2;
5992 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5993 del_req(i);
5994 }
5995 _num_opnds = 3;
5996 } else {
5997 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
5998 }
5999
6000 return this;
6001}
6002
6003MachNode* orI_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6004 Compile* C = Compile::current();
6005 // Add projection edges for additional defs or kills
6006 // DEF/KILL cr
6007 MachProjNode *kill;
6008 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6009 proj_list.push(kill);
6010 // Remove duplicated operands and inputs which use the same name.
6011 if (num_opnds() == 4) {
6012 unsigned num0 = 0;
6013 unsigned num1 = opnd_array(1)->num_edges(); // dst
6014 unsigned num2 = opnd_array(2)->num_edges(); // src
6015 unsigned num3 = opnd_array(3)->num_edges(); // dst
6016 unsigned idx0 = oper_input_base();
6017 unsigned idx1 = idx0 + num0;
6018 unsigned idx2 = idx1 + num1;
6019 unsigned idx3 = idx2 + num2;
6020 unsigned idx4 = idx3 + num3;
6021 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6022 del_req(i);
6023 }
6024 _num_opnds = 3;
6025 } else {
6026 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6027 }
6028
6029 return this;
6030}
6031
6032MachNode* orI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6033 Compile* C = Compile::current();
6034 // Add projection edges for additional defs or kills
6035 // DEF/KILL cr
6036 MachProjNode *kill;
6037 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6038 proj_list.push(kill);
6039 // Remove duplicated operands and inputs which use the same name.
6040 if (num_opnds() == 4) {
6041 unsigned num0 = 0;
6042 unsigned num1 = opnd_array(1)->num_edges(); // dst
6043 unsigned num2 = opnd_array(2)->num_edges(); // dst
6044 unsigned num3 = opnd_array(3)->num_edges(); // src
6045 unsigned idx0 = oper_input_base();
6046 unsigned idx1 = idx0 + num0;
6047 unsigned idx2 = idx1 + num1;
6048 unsigned idx3 = idx2 + num2;
6049 unsigned idx4 = idx3 + num3;
6050 set_opnd_array(2, opnd_array(3)->clone()); // src
6051 for (unsigned i = 0; i < num3; i++) {
6052 set_req(i + idx2, _in[i + idx3]);
6053 }
6054 num2 = num3;
6055 idx3 = idx2 + num2;
6056 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6057 del_req(i);
6058 }
6059 _num_opnds = 3;
6060 } else {
6061 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6062 }
6063
6064 return this;
6065}
6066
6067MachNode* xorI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6068 Compile* C = Compile::current();
6069 // Add projection edges for additional defs or kills
6070 // DEF/KILL cr
6071 MachProjNode *kill;
6072 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6073 proj_list.push(kill);
6074
6075 return this;
6076}
6077
6078MachNode* xorI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6079 Compile* C = Compile::current();
6080 // Add projection edges for additional defs or kills
6081 // DEF/KILL cr
6082 MachProjNode *kill;
6083 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6084 proj_list.push(kill);
6085
6086 return this;
6087}
6088
6089MachNode* xorI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6090 Compile* C = Compile::current();
6091 // Add projection edges for additional defs or kills
6092 // DEF/KILL cr
6093 MachProjNode *kill;
6094 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6095 proj_list.push(kill);
6096
6097 return this;
6098}
6099
6100MachNode* xorI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6101 Compile* C = Compile::current();
6102 // Add projection edges for additional defs or kills
6103 // DEF/KILL cr
6104 MachProjNode *kill;
6105 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6106 proj_list.push(kill);
6107
6108 return this;
6109}
6110
6111MachNode* xorB_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6112 Compile* C = Compile::current();
6113 // Add projection edges for additional defs or kills
6114 // DEF/KILL cr
6115 MachProjNode *kill;
6116 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6117 proj_list.push(kill);
6118 // Remove duplicated operands and inputs which use the same name.
6119 if (num_opnds() == 4) {
6120 unsigned num0 = 0;
6121 unsigned num1 = opnd_array(1)->num_edges(); // dst
6122 unsigned num2 = opnd_array(2)->num_edges(); // dst
6123 unsigned num3 = opnd_array(3)->num_edges(); // src
6124 unsigned idx0 = oper_input_base();
6125 unsigned idx1 = idx0 + num0;
6126 unsigned idx2 = idx1 + num1;
6127 unsigned idx3 = idx2 + num2;
6128 unsigned idx4 = idx3 + num3;
6129 set_opnd_array(2, opnd_array(3)->clone()); // src
6130 for (unsigned i = 0; i < num3; i++) {
6131 set_req(i + idx2, _in[i + idx3]);
6132 }
6133 num2 = num3;
6134 idx3 = idx2 + num2;
6135 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6136 del_req(i);
6137 }
6138 _num_opnds = 3;
6139 } else {
6140 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6141 }
6142
6143 return this;
6144}
6145
6146MachNode* xorB_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6147 Compile* C = Compile::current();
6148 // Add projection edges for additional defs or kills
6149 // DEF/KILL cr
6150 MachProjNode *kill;
6151 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6152 proj_list.push(kill);
6153 // Remove duplicated operands and inputs which use the same name.
6154 if (num_opnds() == 4) {
6155 unsigned num0 = 0;
6156 unsigned num1 = opnd_array(1)->num_edges(); // dst
6157 unsigned num2 = opnd_array(2)->num_edges(); // src
6158 unsigned num3 = opnd_array(3)->num_edges(); // dst
6159 unsigned idx0 = oper_input_base();
6160 unsigned idx1 = idx0 + num0;
6161 unsigned idx2 = idx1 + num1;
6162 unsigned idx3 = idx2 + num2;
6163 unsigned idx4 = idx3 + num3;
6164 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6165 del_req(i);
6166 }
6167 _num_opnds = 3;
6168 } else {
6169 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6170 }
6171
6172 return this;
6173}
6174
6175MachNode* xorI_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6176 Compile* C = Compile::current();
6177 // Add projection edges for additional defs or kills
6178 // DEF/KILL cr
6179 MachProjNode *kill;
6180 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6181 proj_list.push(kill);
6182 // Remove duplicated operands and inputs which use the same name.
6183 if (num_opnds() == 4) {
6184 unsigned num0 = 0;
6185 unsigned num1 = opnd_array(1)->num_edges(); // dst
6186 unsigned num2 = opnd_array(2)->num_edges(); // dst
6187 unsigned num3 = opnd_array(3)->num_edges(); // src
6188 unsigned idx0 = oper_input_base();
6189 unsigned idx1 = idx0 + num0;
6190 unsigned idx2 = idx1 + num1;
6191 unsigned idx3 = idx2 + num2;
6192 unsigned idx4 = idx3 + num3;
6193 set_opnd_array(2, opnd_array(3)->clone()); // src
6194 for (unsigned i = 0; i < num3; i++) {
6195 set_req(i + idx2, _in[i + idx3]);
6196 }
6197 num2 = num3;
6198 idx3 = idx2 + num2;
6199 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6200 del_req(i);
6201 }
6202 _num_opnds = 3;
6203 } else {
6204 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6205 }
6206
6207 return this;
6208}
6209
6210MachNode* xorI_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6211 Compile* C = Compile::current();
6212 // Add projection edges for additional defs or kills
6213 // DEF/KILL cr
6214 MachProjNode *kill;
6215 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6216 proj_list.push(kill);
6217 // Remove duplicated operands and inputs which use the same name.
6218 if (num_opnds() == 4) {
6219 unsigned num0 = 0;
6220 unsigned num1 = opnd_array(1)->num_edges(); // dst
6221 unsigned num2 = opnd_array(2)->num_edges(); // src
6222 unsigned num3 = opnd_array(3)->num_edges(); // dst
6223 unsigned idx0 = oper_input_base();
6224 unsigned idx1 = idx0 + num0;
6225 unsigned idx2 = idx1 + num1;
6226 unsigned idx3 = idx2 + num2;
6227 unsigned idx4 = idx3 + num3;
6228 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6229 del_req(i);
6230 }
6231 _num_opnds = 3;
6232 } else {
6233 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6234 }
6235
6236 return this;
6237}
6238
6239MachNode* xorI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6240 Compile* C = Compile::current();
6241 // Add projection edges for additional defs or kills
6242 // DEF/KILL cr
6243 MachProjNode *kill;
6244 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6245 proj_list.push(kill);
6246 // Remove duplicated operands and inputs which use the same name.
6247 if (num_opnds() == 4) {
6248 unsigned num0 = 0;
6249 unsigned num1 = opnd_array(1)->num_edges(); // dst
6250 unsigned num2 = opnd_array(2)->num_edges(); // dst
6251 unsigned num3 = opnd_array(3)->num_edges(); // src
6252 unsigned idx0 = oper_input_base();
6253 unsigned idx1 = idx0 + num0;
6254 unsigned idx2 = idx1 + num1;
6255 unsigned idx3 = idx2 + num2;
6256 unsigned idx4 = idx3 + num3;
6257 set_opnd_array(2, opnd_array(3)->clone()); // src
6258 for (unsigned i = 0; i < num3; i++) {
6259 set_req(i + idx2, _in[i + idx3]);
6260 }
6261 num2 = num3;
6262 idx3 = idx2 + num2;
6263 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6264 del_req(i);
6265 }
6266 _num_opnds = 3;
6267 } else {
6268 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6269 }
6270
6271 return this;
6272}
6273
6274MachNode* andL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6275 Compile* C = Compile::current();
6276 // Add projection edges for additional defs or kills
6277 // DEF/KILL cr
6278 MachProjNode *kill;
6279 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6280 proj_list.push(kill);
6281
6282 return this;
6283}
6284
6285MachNode* andL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6286 Compile* C = Compile::current();
6287 // Add projection edges for additional defs or kills
6288 // DEF/KILL cr
6289 MachProjNode *kill;
6290 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6291 proj_list.push(kill);
6292
6293 return this;
6294}
6295
6296MachNode* andL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6297 Compile* C = Compile::current();
6298 // Add projection edges for additional defs or kills
6299 // DEF/KILL cr
6300 MachProjNode *kill;
6301 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6302 proj_list.push(kill);
6303
6304 return this;
6305}
6306
6307MachNode* andL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6308 Compile* C = Compile::current();
6309 // Add projection edges for additional defs or kills
6310 // DEF/KILL cr
6311 MachProjNode *kill;
6312 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6313 proj_list.push(kill);
6314
6315 return this;
6316}
6317
6318MachNode* andL_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6319 Compile* C = Compile::current();
6320 // Add projection edges for additional defs or kills
6321 // DEF/KILL cr
6322 MachProjNode *kill;
6323 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6324 proj_list.push(kill);
6325 // Remove duplicated operands and inputs which use the same name.
6326 if (num_opnds() == 4) {
6327 unsigned num0 = 0;
6328 unsigned num1 = opnd_array(1)->num_edges(); // dst
6329 unsigned num2 = opnd_array(2)->num_edges(); // dst
6330 unsigned num3 = opnd_array(3)->num_edges(); // src
6331 unsigned idx0 = oper_input_base();
6332 unsigned idx1 = idx0 + num0;
6333 unsigned idx2 = idx1 + num1;
6334 unsigned idx3 = idx2 + num2;
6335 unsigned idx4 = idx3 + num3;
6336 set_opnd_array(2, opnd_array(3)->clone()); // src
6337 for (unsigned i = 0; i < num3; i++) {
6338 set_req(i + idx2, _in[i + idx3]);
6339 }
6340 num2 = num3;
6341 idx3 = idx2 + num2;
6342 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6343 del_req(i);
6344 }
6345 _num_opnds = 3;
6346 } else {
6347 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6348 }
6349
6350 return this;
6351}
6352
6353MachNode* andL_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6354 Compile* C = Compile::current();
6355 // Add projection edges for additional defs or kills
6356 // DEF/KILL cr
6357 MachProjNode *kill;
6358 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6359 proj_list.push(kill);
6360 // Remove duplicated operands and inputs which use the same name.
6361 if (num_opnds() == 4) {
6362 unsigned num0 = 0;
6363 unsigned num1 = opnd_array(1)->num_edges(); // dst
6364 unsigned num2 = opnd_array(2)->num_edges(); // src
6365 unsigned num3 = opnd_array(3)->num_edges(); // dst
6366 unsigned idx0 = oper_input_base();
6367 unsigned idx1 = idx0 + num0;
6368 unsigned idx2 = idx1 + num1;
6369 unsigned idx3 = idx2 + num2;
6370 unsigned idx4 = idx3 + num3;
6371 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6372 del_req(i);
6373 }
6374 _num_opnds = 3;
6375 } else {
6376 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6377 }
6378
6379 return this;
6380}
6381
6382MachNode* andL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6383 Compile* C = Compile::current();
6384 // Add projection edges for additional defs or kills
6385 // DEF/KILL cr
6386 MachProjNode *kill;
6387 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6388 proj_list.push(kill);
6389 // Remove duplicated operands and inputs which use the same name.
6390 if (num_opnds() == 4) {
6391 unsigned num0 = 0;
6392 unsigned num1 = opnd_array(1)->num_edges(); // dst
6393 unsigned num2 = opnd_array(2)->num_edges(); // dst
6394 unsigned num3 = opnd_array(3)->num_edges(); // src
6395 unsigned idx0 = oper_input_base();
6396 unsigned idx1 = idx0 + num0;
6397 unsigned idx2 = idx1 + num1;
6398 unsigned idx3 = idx2 + num2;
6399 unsigned idx4 = idx3 + num3;
6400 set_opnd_array(2, opnd_array(3)->clone()); // src
6401 for (unsigned i = 0; i < num3; i++) {
6402 set_req(i + idx2, _in[i + idx3]);
6403 }
6404 num2 = num3;
6405 idx3 = idx2 + num2;
6406 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6407 del_req(i);
6408 }
6409 _num_opnds = 3;
6410 } else {
6411 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6412 }
6413
6414 return this;
6415}
6416
6417MachNode* andnL_rReg_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6418 Compile* C = Compile::current();
6419 // Add projection edges for additional defs or kills
6420 // DEF/KILL cr
6421 MachProjNode *kill;
6422 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6423 proj_list.push(kill);
6424
6425 return this;
6426}
6427
6428MachNode* andnL_rReg_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6429 Compile* C = Compile::current();
6430 // Add projection edges for additional defs or kills
6431 // DEF/KILL cr
6432 MachProjNode *kill;
6433 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6434 proj_list.push(kill);
6435
6436 return this;
6437}
6438
6439MachNode* andnL_rReg_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6440 Compile* C = Compile::current();
6441 // Add projection edges for additional defs or kills
6442 // DEF/KILL cr
6443 MachProjNode *kill;
6444 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6445 proj_list.push(kill);
6446
6447 return this;
6448}
6449
6450MachNode* andnL_rReg_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6451 Compile* C = Compile::current();
6452 // Add projection edges for additional defs or kills
6453 // DEF/KILL cr
6454 MachProjNode *kill;
6455 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6456 proj_list.push(kill);
6457
6458 return this;
6459}
6460
6461MachNode* blsiL_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6462 Compile* C = Compile::current();
6463 // Add projection edges for additional defs or kills
6464 // DEF/KILL cr
6465 MachProjNode *kill;
6466 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6467 proj_list.push(kill);
6468 // Remove duplicated operands and inputs which use the same name.
6469 if (num_opnds() == 4) {
6470 unsigned num0 = 0;
6471 unsigned num1 = opnd_array(1)->num_edges(); // imm_zero
6472 unsigned num2 = opnd_array(2)->num_edges(); // src
6473 unsigned num3 = opnd_array(3)->num_edges(); // src
6474 unsigned idx0 = oper_input_base();
6475 unsigned idx1 = idx0 + num0;
6476 unsigned idx2 = idx1 + num1;
6477 unsigned idx3 = idx2 + num2;
6478 unsigned idx4 = idx3 + num3;
6479 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6480 del_req(i);
6481 }
6482 _num_opnds = 3;
6483 } else {
6484 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6485 }
6486
6487 return this;
6488}
6489
6490MachNode* blsiL_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6491 Compile* C = Compile::current();
6492 // Add projection edges for additional defs or kills
6493 // DEF/KILL cr
6494 MachProjNode *kill;
6495 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6496 proj_list.push(kill);
6497 // Remove duplicated operands and inputs which use the same name.
6498 if (num_opnds() == 4) {
6499 unsigned num0 = 0;
6500 unsigned num1 = opnd_array(1)->num_edges(); // src
6501 unsigned num2 = opnd_array(2)->num_edges(); // imm_zero
6502 unsigned num3 = opnd_array(3)->num_edges(); // src
6503 unsigned idx0 = oper_input_base();
6504 unsigned idx1 = idx0 + num0;
6505 unsigned idx2 = idx1 + num1;
6506 unsigned idx3 = idx2 + num2;
6507 unsigned idx4 = idx3 + num3;
6508 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6509 del_req(i);
6510 }
6511 _num_opnds = 3;
6512 } else {
6513 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6514 }
6515
6516 return this;
6517}
6518
6519MachNode* blsiL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6520 Compile* C = Compile::current();
6521 // Add projection edges for additional defs or kills
6522 // DEF/KILL cr
6523 MachProjNode *kill;
6524 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6525 proj_list.push(kill);
6526 // Remove duplicated operands and inputs which use the same name.
6527 if (num_opnds() == 4) {
6528 unsigned num0 = 0;
6529 unsigned num1 = opnd_array(1)->num_edges(); // imm_zero
6530 unsigned num2 = opnd_array(2)->num_edges(); // src
6531 unsigned num3 = opnd_array(3)->num_edges(); // src
6532 unsigned idx0 = oper_input_base();
6533 unsigned idx1 = idx0 + num0;
6534 unsigned idx2 = idx1 + num1;
6535 unsigned idx3 = idx2 + num2;
6536 unsigned idx4 = idx3 + num3;
6537 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6538 del_req(i);
6539 }
6540 _num_opnds = 3;
6541 } else {
6542 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6543 }
6544
6545 return this;
6546}
6547
6548MachNode* blsiL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6549 Compile* C = Compile::current();
6550 // Add projection edges for additional defs or kills
6551 // DEF/KILL cr
6552 MachProjNode *kill;
6553 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6554 proj_list.push(kill);
6555 // Remove duplicated operands and inputs which use the same name.
6556 if (num_opnds() == 4) {
6557 unsigned num0 = 0;
6558 unsigned num1 = opnd_array(1)->num_edges(); // src
6559 unsigned num2 = opnd_array(2)->num_edges(); // imm_zero
6560 unsigned num3 = opnd_array(3)->num_edges(); // src
6561 unsigned idx0 = oper_input_base();
6562 unsigned idx1 = idx0 + num0;
6563 unsigned idx2 = idx1 + num1;
6564 unsigned idx3 = idx2 + num2;
6565 unsigned idx4 = idx3 + num3;
6566 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6567 del_req(i);
6568 }
6569 _num_opnds = 3;
6570 } else {
6571 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6572 }
6573
6574 return this;
6575}
6576
6577MachNode* blsmskL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6578 Compile* C = Compile::current();
6579 // Add projection edges for additional defs or kills
6580 // DEF/KILL cr
6581 MachProjNode *kill;
6582 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6583 proj_list.push(kill);
6584 // Remove duplicated operands and inputs which use the same name.
6585 if (num_opnds() == 4) {
6586 unsigned num0 = 0;
6587 unsigned num1 = opnd_array(1)->num_edges(); // src
6588 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
6589 unsigned num3 = opnd_array(3)->num_edges(); // src
6590 unsigned idx0 = oper_input_base();
6591 unsigned idx1 = idx0 + num0;
6592 unsigned idx2 = idx1 + num1;
6593 unsigned idx3 = idx2 + num2;
6594 unsigned idx4 = idx3 + num3;
6595 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6596 del_req(i);
6597 }
6598 _num_opnds = 3;
6599 } else {
6600 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6601 }
6602
6603 return this;
6604}
6605
6606MachNode* blsmskL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6607 Compile* C = Compile::current();
6608 // Add projection edges for additional defs or kills
6609 // DEF/KILL cr
6610 MachProjNode *kill;
6611 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6612 proj_list.push(kill);
6613 // Remove duplicated operands and inputs which use the same name.
6614 if (num_opnds() == 4) {
6615 unsigned num0 = 0;
6616 unsigned num1 = opnd_array(1)->num_edges(); // src
6617 unsigned num2 = opnd_array(2)->num_edges(); // src
6618 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
6619 unsigned idx0 = oper_input_base();
6620 unsigned idx1 = idx0 + num0;
6621 unsigned idx2 = idx1 + num1;
6622 unsigned idx3 = idx2 + num2;
6623 unsigned idx4 = idx3 + num3;
6624 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
6625 for (unsigned i = 0; i < num3; i++) {
6626 set_req(i + idx2, _in[i + idx3]);
6627 }
6628 num2 = num3;
6629 idx3 = idx2 + num2;
6630 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6631 del_req(i);
6632 }
6633 _num_opnds = 3;
6634 } else {
6635 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6636 }
6637
6638 return this;
6639}
6640
6641MachNode* blsmskL_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6642 Compile* C = Compile::current();
6643 // Add projection edges for additional defs or kills
6644 // DEF/KILL cr
6645 MachProjNode *kill;
6646 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6647 proj_list.push(kill);
6648 // Remove duplicated operands and inputs which use the same name.
6649 if (num_opnds() == 4) {
6650 unsigned num0 = 0;
6651 unsigned num1 = opnd_array(1)->num_edges(); // src
6652 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
6653 unsigned num3 = opnd_array(3)->num_edges(); // src
6654 unsigned idx0 = oper_input_base();
6655 unsigned idx1 = idx0 + num0;
6656 unsigned idx2 = idx1 + num1;
6657 unsigned idx3 = idx2 + num2;
6658 unsigned idx4 = idx3 + num3;
6659 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6660 del_req(i);
6661 }
6662 _num_opnds = 3;
6663 } else {
6664 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6665 }
6666
6667 return this;
6668}
6669
6670MachNode* blsmskL_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6671 Compile* C = Compile::current();
6672 // Add projection edges for additional defs or kills
6673 // DEF/KILL cr
6674 MachProjNode *kill;
6675 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6676 proj_list.push(kill);
6677 // Remove duplicated operands and inputs which use the same name.
6678 if (num_opnds() == 4) {
6679 unsigned num0 = 0;
6680 unsigned num1 = opnd_array(1)->num_edges(); // src
6681 unsigned num2 = opnd_array(2)->num_edges(); // src
6682 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
6683 unsigned idx0 = oper_input_base();
6684 unsigned idx1 = idx0 + num0;
6685 unsigned idx2 = idx1 + num1;
6686 unsigned idx3 = idx2 + num2;
6687 unsigned idx4 = idx3 + num3;
6688 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
6689 for (unsigned i = 0; i < num3; i++) {
6690 set_req(i + idx2, _in[i + idx3]);
6691 }
6692 num2 = num3;
6693 idx3 = idx2 + num2;
6694 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6695 del_req(i);
6696 }
6697 _num_opnds = 3;
6698 } else {
6699 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6700 }
6701
6702 return this;
6703}
6704
6705MachNode* blsrL_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6706 Compile* C = Compile::current();
6707 // Add projection edges for additional defs or kills
6708 // DEF/KILL cr
6709 MachProjNode *kill;
6710 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6711 proj_list.push(kill);
6712 // Remove duplicated operands and inputs which use the same name.
6713 if (num_opnds() == 4) {
6714 unsigned num0 = 0;
6715 unsigned num1 = opnd_array(1)->num_edges(); // src
6716 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
6717 unsigned num3 = opnd_array(3)->num_edges(); // src
6718 unsigned idx0 = oper_input_base();
6719 unsigned idx1 = idx0 + num0;
6720 unsigned idx2 = idx1 + num1;
6721 unsigned idx3 = idx2 + num2;
6722 unsigned idx4 = idx3 + num3;
6723 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6724 del_req(i);
6725 }
6726 _num_opnds = 3;
6727 } else {
6728 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6729 }
6730
6731 return this;
6732}
6733
6734MachNode* blsrL_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6735 Compile* C = Compile::current();
6736 // Add projection edges for additional defs or kills
6737 // DEF/KILL cr
6738 MachProjNode *kill;
6739 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6740 proj_list.push(kill);
6741 // Remove duplicated operands and inputs which use the same name.
6742 if (num_opnds() == 4) {
6743 unsigned num0 = 0;
6744 unsigned num1 = opnd_array(1)->num_edges(); // src
6745 unsigned num2 = opnd_array(2)->num_edges(); // src
6746 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
6747 unsigned idx0 = oper_input_base();
6748 unsigned idx1 = idx0 + num0;
6749 unsigned idx2 = idx1 + num1;
6750 unsigned idx3 = idx2 + num2;
6751 unsigned idx4 = idx3 + num3;
6752 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
6753 for (unsigned i = 0; i < num3; i++) {
6754 set_req(i + idx2, _in[i + idx3]);
6755 }
6756 num2 = num3;
6757 idx3 = idx2 + num2;
6758 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6759 del_req(i);
6760 }
6761 _num_opnds = 3;
6762 } else {
6763 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6764 }
6765
6766 return this;
6767}
6768
6769MachNode* blsrL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6770 Compile* C = Compile::current();
6771 // Add projection edges for additional defs or kills
6772 // DEF/KILL cr
6773 MachProjNode *kill;
6774 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6775 proj_list.push(kill);
6776 // Remove duplicated operands and inputs which use the same name.
6777 if (num_opnds() == 4) {
6778 unsigned num0 = 0;
6779 unsigned num1 = opnd_array(1)->num_edges(); // src
6780 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
6781 unsigned num3 = opnd_array(3)->num_edges(); // src
6782 unsigned idx0 = oper_input_base();
6783 unsigned idx1 = idx0 + num0;
6784 unsigned idx2 = idx1 + num1;
6785 unsigned idx3 = idx2 + num2;
6786 unsigned idx4 = idx3 + num3;
6787 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6788 del_req(i);
6789 }
6790 _num_opnds = 3;
6791 } else {
6792 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6793 }
6794
6795 return this;
6796}
6797
6798MachNode* blsrL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6799 Compile* C = Compile::current();
6800 // Add projection edges for additional defs or kills
6801 // DEF/KILL cr
6802 MachProjNode *kill;
6803 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6804 proj_list.push(kill);
6805 // Remove duplicated operands and inputs which use the same name.
6806 if (num_opnds() == 4) {
6807 unsigned num0 = 0;
6808 unsigned num1 = opnd_array(1)->num_edges(); // src
6809 unsigned num2 = opnd_array(2)->num_edges(); // src
6810 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
6811 unsigned idx0 = oper_input_base();
6812 unsigned idx1 = idx0 + num0;
6813 unsigned idx2 = idx1 + num1;
6814 unsigned idx3 = idx2 + num2;
6815 unsigned idx4 = idx3 + num3;
6816 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
6817 for (unsigned i = 0; i < num3; i++) {
6818 set_req(i + idx2, _in[i + idx3]);
6819 }
6820 num2 = num3;
6821 idx3 = idx2 + num2;
6822 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6823 del_req(i);
6824 }
6825 _num_opnds = 3;
6826 } else {
6827 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6828 }
6829
6830 return this;
6831}
6832
6833MachNode* orL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6834 Compile* C = Compile::current();
6835 // Add projection edges for additional defs or kills
6836 // DEF/KILL cr
6837 MachProjNode *kill;
6838 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6839 proj_list.push(kill);
6840
6841 return this;
6842}
6843
6844MachNode* orL_rReg_castP2XNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6845 Compile* C = Compile::current();
6846 // Add projection edges for additional defs or kills
6847 // DEF/KILL cr
6848 MachProjNode *kill;
6849 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6850 proj_list.push(kill);
6851
6852 return this;
6853}
6854
6855MachNode* orL_rReg_castP2X_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6856 Compile* C = Compile::current();
6857 // Add projection edges for additional defs or kills
6858 // DEF/KILL cr
6859 MachProjNode *kill;
6860 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6861 proj_list.push(kill);
6862
6863 return this;
6864}
6865
6866MachNode* orL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6867 Compile* C = Compile::current();
6868 // Add projection edges for additional defs or kills
6869 // DEF/KILL cr
6870 MachProjNode *kill;
6871 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6872 proj_list.push(kill);
6873
6874 return this;
6875}
6876
6877MachNode* orL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6878 Compile* C = Compile::current();
6879 // Add projection edges for additional defs or kills
6880 // DEF/KILL cr
6881 MachProjNode *kill;
6882 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6883 proj_list.push(kill);
6884
6885 return this;
6886}
6887
6888MachNode* orL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6889 Compile* C = Compile::current();
6890 // Add projection edges for additional defs or kills
6891 // DEF/KILL cr
6892 MachProjNode *kill;
6893 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6894 proj_list.push(kill);
6895
6896 return this;
6897}
6898
6899MachNode* orL_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6900 Compile* C = Compile::current();
6901 // Add projection edges for additional defs or kills
6902 // DEF/KILL cr
6903 MachProjNode *kill;
6904 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6905 proj_list.push(kill);
6906 // Remove duplicated operands and inputs which use the same name.
6907 if (num_opnds() == 4) {
6908 unsigned num0 = 0;
6909 unsigned num1 = opnd_array(1)->num_edges(); // dst
6910 unsigned num2 = opnd_array(2)->num_edges(); // dst
6911 unsigned num3 = opnd_array(3)->num_edges(); // src
6912 unsigned idx0 = oper_input_base();
6913 unsigned idx1 = idx0 + num0;
6914 unsigned idx2 = idx1 + num1;
6915 unsigned idx3 = idx2 + num2;
6916 unsigned idx4 = idx3 + num3;
6917 set_opnd_array(2, opnd_array(3)->clone()); // src
6918 for (unsigned i = 0; i < num3; i++) {
6919 set_req(i + idx2, _in[i + idx3]);
6920 }
6921 num2 = num3;
6922 idx3 = idx2 + num2;
6923 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6924 del_req(i);
6925 }
6926 _num_opnds = 3;
6927 } else {
6928 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6929 }
6930
6931 return this;
6932}
6933
6934MachNode* orL_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
6935 Compile* C = Compile::current();
6936 // Add projection edges for additional defs or kills
6937 // DEF/KILL cr
6938 MachProjNode *kill;
6939 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6940 proj_list.push(kill);
6941 // Remove duplicated operands and inputs which use the same name.
6942 if (num_opnds() == 4) {
6943 unsigned num0 = 0;
6944 unsigned num1 = opnd_array(1)->num_edges(); // dst
6945 unsigned num2 = opnd_array(2)->num_edges(); // src
6946 unsigned num3 = opnd_array(3)->num_edges(); // dst
6947 unsigned idx0 = oper_input_base();
6948 unsigned idx1 = idx0 + num0;
6949 unsigned idx2 = idx1 + num1;
6950 unsigned idx3 = idx2 + num2;
6951 unsigned idx4 = idx3 + num3;
6952 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6953 del_req(i);
6954 }
6955 _num_opnds = 3;
6956 } else {
6957 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6958 }
6959
6960 return this;
6961}
6962
6963MachNode* orL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6964 Compile* C = Compile::current();
6965 // Add projection edges for additional defs or kills
6966 // DEF/KILL cr
6967 MachProjNode *kill;
6968 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6969 proj_list.push(kill);
6970 // Remove duplicated operands and inputs which use the same name.
6971 if (num_opnds() == 4) {
6972 unsigned num0 = 0;
6973 unsigned num1 = opnd_array(1)->num_edges(); // dst
6974 unsigned num2 = opnd_array(2)->num_edges(); // dst
6975 unsigned num3 = opnd_array(3)->num_edges(); // src
6976 unsigned idx0 = oper_input_base();
6977 unsigned idx1 = idx0 + num0;
6978 unsigned idx2 = idx1 + num1;
6979 unsigned idx3 = idx2 + num2;
6980 unsigned idx4 = idx3 + num3;
6981 set_opnd_array(2, opnd_array(3)->clone()); // src
6982 for (unsigned i = 0; i < num3; i++) {
6983 set_req(i + idx2, _in[i + idx3]);
6984 }
6985 num2 = num3;
6986 idx3 = idx2 + num2;
6987 for (int i = idx4 - 1; i >= (int)idx3; i--) {
6988 del_req(i);
6989 }
6990 _num_opnds = 3;
6991 } else {
6992 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
6993 }
6994
6995 return this;
6996}
6997
6998MachNode* xorL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6999 Compile* C = Compile::current();
7000 // Add projection edges for additional defs or kills
7001 // DEF/KILL cr
7002 MachProjNode *kill;
7003 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7004 proj_list.push(kill);
7005
7006 return this;
7007}
7008
7009MachNode* xorL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7010 Compile* C = Compile::current();
7011 // Add projection edges for additional defs or kills
7012 // DEF/KILL cr
7013 MachProjNode *kill;
7014 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7015 proj_list.push(kill);
7016
7017 return this;
7018}
7019
7020MachNode* xorL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7021 Compile* C = Compile::current();
7022 // Add projection edges for additional defs or kills
7023 // DEF/KILL cr
7024 MachProjNode *kill;
7025 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7026 proj_list.push(kill);
7027
7028 return this;
7029}
7030
7031MachNode* xorL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7032 Compile* C = Compile::current();
7033 // Add projection edges for additional defs or kills
7034 // DEF/KILL cr
7035 MachProjNode *kill;
7036 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7037 proj_list.push(kill);
7038
7039 return this;
7040}
7041
7042MachNode* xorL_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7043 Compile* C = Compile::current();
7044 // Add projection edges for additional defs or kills
7045 // DEF/KILL cr
7046 MachProjNode *kill;
7047 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7048 proj_list.push(kill);
7049 // Remove duplicated operands and inputs which use the same name.
7050 if (num_opnds() == 4) {
7051 unsigned num0 = 0;
7052 unsigned num1 = opnd_array(1)->num_edges(); // dst
7053 unsigned num2 = opnd_array(2)->num_edges(); // dst
7054 unsigned num3 = opnd_array(3)->num_edges(); // src
7055 unsigned idx0 = oper_input_base();
7056 unsigned idx1 = idx0 + num0;
7057 unsigned idx2 = idx1 + num1;
7058 unsigned idx3 = idx2 + num2;
7059 unsigned idx4 = idx3 + num3;
7060 set_opnd_array(2, opnd_array(3)->clone()); // src
7061 for (unsigned i = 0; i < num3; i++) {
7062 set_req(i + idx2, _in[i + idx3]);
7063 }
7064 num2 = num3;
7065 idx3 = idx2 + num2;
7066 for (int i = idx4 - 1; i >= (int)idx3; i--) {
7067 del_req(i);
7068 }
7069 _num_opnds = 3;
7070 } else {
7071 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
7072 }
7073
7074 return this;
7075}
7076
7077MachNode* xorL_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7078 Compile* C = Compile::current();
7079 // Add projection edges for additional defs or kills
7080 // DEF/KILL cr
7081 MachProjNode *kill;
7082 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7083 proj_list.push(kill);
7084 // Remove duplicated operands and inputs which use the same name.
7085 if (num_opnds() == 4) {
7086 unsigned num0 = 0;
7087 unsigned num1 = opnd_array(1)->num_edges(); // dst
7088 unsigned num2 = opnd_array(2)->num_edges(); // src
7089 unsigned num3 = opnd_array(3)->num_edges(); // dst
7090 unsigned idx0 = oper_input_base();
7091 unsigned idx1 = idx0 + num0;
7092 unsigned idx2 = idx1 + num1;
7093 unsigned idx3 = idx2 + num2;
7094 unsigned idx4 = idx3 + num3;
7095 for (int i = idx4 - 1; i >= (int)idx3; i--) {
7096 del_req(i);
7097 }
7098 _num_opnds = 3;
7099 } else {
7100 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
7101 }
7102
7103 return this;
7104}
7105
7106MachNode* xorL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7107 Compile* C = Compile::current();
7108 // Add projection edges for additional defs or kills
7109 // DEF/KILL cr
7110 MachProjNode *kill;
7111 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7112 proj_list.push(kill);
7113 // Remove duplicated operands and inputs which use the same name.
7114 if (num_opnds() == 4) {
7115 unsigned num0 = 0;
7116 unsigned num1 = opnd_array(1)->num_edges(); // dst
7117 unsigned num2 = opnd_array(2)->num_edges(); // dst
7118 unsigned num3 = opnd_array(3)->num_edges(); // src
7119 unsigned idx0 = oper_input_base();
7120 unsigned idx1 = idx0 + num0;
7121 unsigned idx2 = idx1 + num1;
7122 unsigned idx3 = idx2 + num2;
7123 unsigned idx4 = idx3 + num3;
7124 set_opnd_array(2, opnd_array(3)->clone()); // src
7125 for (unsigned i = 0; i < num3; i++) {
7126 set_req(i + idx2, _in[i + idx3]);
7127 }
7128 num2 = num3;
7129 idx3 = idx2 + num2;
7130 for (int i = idx4 - 1; i >= (int)idx3; i--) {
7131 del_req(i);
7132 }
7133 _num_opnds = 3;
7134 } else {
7135 assert(_num_opnds == 3, "There should be either 3 or 4 operands.");
7136 }
7137
7138 return this;
7139}
7140
7141MachNode* convI2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7142 Compile* C = Compile::current();
7143 // Add projection edges for additional defs or kills
7144 // DEF/KILL cr
7145 MachProjNode *kill;
7146 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7147 proj_list.push(kill);
7148
7149 return this;
7150}
7151
7152MachNode* convP2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7153 Compile* C = Compile::current();
7154 // Add projection edges for additional defs or kills
7155 // DEF/KILL cr
7156 MachProjNode *kill;
7157 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7158 proj_list.push(kill);
7159
7160 return this;
7161}
7162
7163MachNode* cmpLTMaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7164 Compile* C = Compile::current();
7165 // Add projection edges for additional defs or kills
7166 // DEF/KILL cr
7167 MachProjNode *kill;
7168 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7169 proj_list.push(kill);
7170
7171 return this;
7172}
7173
7174MachNode* cmpLTMask0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7175 Compile* C = Compile::current();
7176 // Add projection edges for additional defs or kills
7177 // DEF/KILL cr
7178 MachProjNode *kill;
7179 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7180 proj_list.push(kill);
7181
7182 return this;
7183}
7184
7185MachNode* cadd_cmpLTMaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7186 Compile* C = Compile::current();
7187 // Add projection edges for additional defs or kills
7188 // DEF/KILL cr
7189 MachProjNode *kill;
7190 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7191 proj_list.push(kill);
7192 // Remove duplicated operands and inputs which use the same name.
7193 if (num_opnds() == 6) {
7194 unsigned num0 = 0;
7195 unsigned num1 = opnd_array(1)->num_edges(); // p
7196 unsigned num2 = opnd_array(2)->num_edges(); // q
7197 unsigned num3 = opnd_array(3)->num_edges(); // y
7198 unsigned num4 = opnd_array(4)->num_edges(); // p
7199 unsigned num5 = opnd_array(5)->num_edges(); // q
7200 unsigned idx0 = oper_input_base();
7201 unsigned idx1 = idx0 + num0;
7202 unsigned idx2 = idx1 + num1;
7203 unsigned idx3 = idx2 + num2;
7204 unsigned idx4 = idx3 + num3;
7205 unsigned idx5 = idx4 + num4;
7206 unsigned idx6 = idx5 + num5;
7207 for (int i = idx6 - 1; i >= (int)idx4; i--) {
7208 del_req(i);
7209 }
7210 _num_opnds = 4;
7211 } else {
7212 assert(_num_opnds == 4, "There should be either 4 or 6 operands.");
7213 }
7214
7215 return this;
7216}
7217
7218MachNode* cadd_cmpLTMask_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7219 Compile* C = Compile::current();
7220 // Add projection edges for additional defs or kills
7221 // DEF/KILL cr
7222 MachProjNode *kill;
7223 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7224 proj_list.push(kill);
7225 // Remove duplicated operands and inputs which use the same name.
7226 if (num_opnds() == 6) {
7227 unsigned num0 = 0;
7228 unsigned num1 = opnd_array(1)->num_edges(); // p
7229 unsigned num2 = opnd_array(2)->num_edges(); // q
7230 unsigned num3 = opnd_array(3)->num_edges(); // p
7231 unsigned num4 = opnd_array(4)->num_edges(); // q
7232 unsigned num5 = opnd_array(5)->num_edges(); // y
7233 unsigned idx0 = oper_input_base();
7234 unsigned idx1 = idx0 + num0;
7235 unsigned idx2 = idx1 + num1;
7236 unsigned idx3 = idx2 + num2;
7237 unsigned idx4 = idx3 + num3;
7238 unsigned idx5 = idx4 + num4;
7239 unsigned idx6 = idx5 + num5;
7240 set_opnd_array(3, opnd_array(5)->clone()); // y
7241 for (unsigned i = 0; i < num5; i++) {
7242 set_req(i + idx3, _in[i + idx5]);
7243 }
7244 num3 = num5;
7245 idx4 = idx3 + num3;
7246 for (int i = idx6 - 1; i >= (int)idx4; i--) {
7247 del_req(i);
7248 }
7249 _num_opnds = 4;
7250 } else {
7251 assert(_num_opnds == 4, "There should be either 4 or 6 operands.");
7252 }
7253
7254 return this;
7255}
7256
7257MachNode* cadd_cmpLTMask_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7258 Compile* C = Compile::current();
7259 // Add projection edges for additional defs or kills
7260 // DEF/KILL cr
7261 MachProjNode *kill;
7262 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7263 proj_list.push(kill);
7264 // Remove duplicated operands and inputs which use the same name.
7265 if (num_opnds() == 6) {
7266 unsigned num0 = 0;
7267 unsigned num1 = opnd_array(1)->num_edges(); // y
7268 unsigned num2 = opnd_array(2)->num_edges(); // p
7269 unsigned num3 = opnd_array(3)->num_edges(); // q
7270 unsigned num4 = opnd_array(4)->num_edges(); // p
7271 unsigned num5 = opnd_array(5)->num_edges(); // q
7272 unsigned idx0 = oper_input_base();
7273 unsigned idx1 = idx0 + num0;
7274 unsigned idx2 = idx1 + num1;
7275 unsigned idx3 = idx2 + num2;
7276 unsigned idx4 = idx3 + num3;
7277 unsigned idx5 = idx4 + num4;
7278 unsigned idx6 = idx5 + num5;
7279 for (int i = idx6 - 1; i >= (int)idx4; i--) {
7280 del_req(i);
7281 }
7282 _num_opnds = 4;
7283 } else {
7284 assert(_num_opnds == 4, "There should be either 4 or 6 operands.");
7285 }
7286
7287 return this;
7288}
7289
7290MachNode* cadd_cmpLTMask_2Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7291 Compile* C = Compile::current();
7292 // Add projection edges for additional defs or kills
7293 // DEF/KILL cr
7294 MachProjNode *kill;
7295 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7296 proj_list.push(kill);
7297 // Remove duplicated operands and inputs which use the same name.
7298 if (num_opnds() == 6) {
7299 unsigned num0 = 0;
7300 unsigned num1 = opnd_array(1)->num_edges(); // p
7301 unsigned num2 = opnd_array(2)->num_edges(); // q
7302 unsigned num3 = opnd_array(3)->num_edges(); // y
7303 unsigned num4 = opnd_array(4)->num_edges(); // p
7304 unsigned num5 = opnd_array(5)->num_edges(); // q
7305 unsigned idx0 = oper_input_base();
7306 unsigned idx1 = idx0 + num0;
7307 unsigned idx2 = idx1 + num1;
7308 unsigned idx3 = idx2 + num2;
7309 unsigned idx4 = idx3 + num3;
7310 unsigned idx5 = idx4 + num4;
7311 unsigned idx6 = idx5 + num5;
7312 for (int i = idx6 - 1; i >= (int)idx4; i--) {
7313 del_req(i);
7314 }
7315 _num_opnds = 4;
7316 } else {
7317 assert(_num_opnds == 4, "There should be either 4 or 6 operands.");
7318 }
7319
7320 return this;
7321}
7322
7323MachNode* and_cmpLTMaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7324 Compile* C = Compile::current();
7325 // Add projection edges for additional defs or kills
7326 // DEF/KILL cr
7327 MachProjNode *kill;
7328 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7329 proj_list.push(kill);
7330
7331 return this;
7332}
7333
7334MachNode* and_cmpLTMask_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7335 Compile* C = Compile::current();
7336 // Add projection edges for additional defs or kills
7337 // DEF/KILL cr
7338 MachProjNode *kill;
7339 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7340 proj_list.push(kill);
7341
7342 return this;
7343}
7344
7345MachNode* cmpF_cc_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7346 Compile* C = Compile::current();
7347 add_req(C->mach_constant_base_node());
7348
7349 return this;
7350}
7351
7352MachNode* cmpF_cc_immCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7353 Compile* C = Compile::current();
7354 add_req(C->mach_constant_base_node());
7355
7356 return this;
7357}
7358
7359MachNode* cmpD_cc_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7360 Compile* C = Compile::current();
7361 add_req(C->mach_constant_base_node());
7362
7363 return this;
7364}
7365
7366MachNode* cmpD_cc_immCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7367 Compile* C = Compile::current();
7368 add_req(C->mach_constant_base_node());
7369
7370 return this;
7371}
7372
7373MachNode* cmpF_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7374 Compile* C = Compile::current();
7375 // Add projection edges for additional defs or kills
7376 // DEF/KILL cr
7377 MachProjNode *kill;
7378 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7379 proj_list.push(kill);
7380
7381 return this;
7382}
7383
7384MachNode* cmpF_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7385 Compile* C = Compile::current();
7386 // Add projection edges for additional defs or kills
7387 // DEF/KILL cr
7388 MachProjNode *kill;
7389 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7390 proj_list.push(kill);
7391
7392 return this;
7393}
7394
7395MachNode* cmpF_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7396 Compile* C = Compile::current();
7397 // Add projection edges for additional defs or kills
7398 // DEF/KILL cr
7399 MachProjNode *kill;
7400 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7401 proj_list.push(kill);
7402 add_req(C->mach_constant_base_node());
7403
7404 return this;
7405}
7406
7407MachNode* cmpD_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7408 Compile* C = Compile::current();
7409 // Add projection edges for additional defs or kills
7410 // DEF/KILL cr
7411 MachProjNode *kill;
7412 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7413 proj_list.push(kill);
7414
7415 return this;
7416}
7417
7418MachNode* cmpD_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7419 Compile* C = Compile::current();
7420 // Add projection edges for additional defs or kills
7421 // DEF/KILL cr
7422 MachProjNode *kill;
7423 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7424 proj_list.push(kill);
7425
7426 return this;
7427}
7428
7429MachNode* cmpD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7430 Compile* C = Compile::current();
7431 // Add projection edges for additional defs or kills
7432 // DEF/KILL cr
7433 MachProjNode *kill;
7434 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7435 proj_list.push(kill);
7436 add_req(C->mach_constant_base_node());
7437
7438 return this;
7439}
7440
7441MachNode* convF2I_reg_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7442 Compile* C = Compile::current();
7443 // Add projection edges for additional defs or kills
7444 // DEF/KILL cr
7445 MachProjNode *kill;
7446 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7447 proj_list.push(kill);
7448
7449 return this;
7450}
7451
7452MachNode* convF2L_reg_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7453 Compile* C = Compile::current();
7454 // Add projection edges for additional defs or kills
7455 // DEF/KILL cr
7456 MachProjNode *kill;
7457 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7458 proj_list.push(kill);
7459
7460 return this;
7461}
7462
7463MachNode* convD2I_reg_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7464 Compile* C = Compile::current();
7465 // Add projection edges for additional defs or kills
7466 // DEF/KILL cr
7467 MachProjNode *kill;
7468 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7469 proj_list.push(kill);
7470
7471 return this;
7472}
7473
7474MachNode* convD2L_reg_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7475 Compile* C = Compile::current();
7476 // Add projection edges for additional defs or kills
7477 // DEF/KILL cr
7478 MachProjNode *kill;
7479 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7480 proj_list.push(kill);
7481
7482 return this;
7483}
7484
7485MachNode* rep_stosNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7486 Compile* C = Compile::current();
7487 // Add projection edges for additional defs or kills
7488 // DEF/KILL cnt
7489 MachProjNode *kill;
7490 kill = new MachProjNode( this, 1, (LONG_RCX_REG_mask()), Op_RegL );
7491 proj_list.push(kill);
7492 // DEF/KILL base
7493 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
7494 proj_list.push(kill);
7495 // TEMP tmp
7496 MachTempNode *def;
7497 def = new MachTempNode(state->MachOperGenerator(REGD));
7498 add_req(def);
7499 // DEF/KILL zero
7500 kill = new MachProjNode( this, 3, (INT_RAX_REG_mask()), Op_RegI );
7501 proj_list.push(kill);
7502 // DEF/KILL cr
7503 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
7504 proj_list.push(kill);
7505
7506 return this;
7507}
7508
7509MachNode* rep_stos_largeNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7510 Compile* C = Compile::current();
7511 // Add projection edges for additional defs or kills
7512 // DEF/KILL cnt
7513 MachProjNode *kill;
7514 kill = new MachProjNode( this, 1, (LONG_RCX_REG_mask()), Op_RegL );
7515 proj_list.push(kill);
7516 // DEF/KILL base
7517 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
7518 proj_list.push(kill);
7519 // TEMP tmp
7520 MachTempNode *def;
7521 def = new MachTempNode(state->MachOperGenerator(REGD));
7522 add_req(def);
7523 // DEF/KILL zero
7524 kill = new MachProjNode( this, 3, (INT_RAX_REG_mask()), Op_RegI );
7525 proj_list.push(kill);
7526 // DEF/KILL cr
7527 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
7528 proj_list.push(kill);
7529
7530 return this;
7531}
7532
7533MachNode* string_compareLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7534 Compile* C = Compile::current();
7535 // Add projection edges for additional defs or kills
7536 // DEF/KILL str1
7537 MachProjNode *kill;
7538 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7539 proj_list.push(kill);
7540 // DEF/KILL cnt1
7541 kill = new MachProjNode( this, 2, (INT_RCX_REG_mask()), Op_RegI );
7542 proj_list.push(kill);
7543 // DEF/KILL str2
7544 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
7545 proj_list.push(kill);
7546 // DEF/KILL cnt2
7547 kill = new MachProjNode( this, 4, (INT_RDX_REG_mask()), Op_RegI );
7548 proj_list.push(kill);
7549 // TEMP tmp1
7550 MachTempNode *def;
7551 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7552 add_req(def);
7553 // DEF/KILL cr
7554 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
7555 proj_list.push(kill);
7556
7557 return this;
7558}
7559
7560MachNode* string_compareUNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7561 Compile* C = Compile::current();
7562 // Add projection edges for additional defs or kills
7563 // DEF/KILL str1
7564 MachProjNode *kill;
7565 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7566 proj_list.push(kill);
7567 // DEF/KILL cnt1
7568 kill = new MachProjNode( this, 2, (INT_RCX_REG_mask()), Op_RegI );
7569 proj_list.push(kill);
7570 // DEF/KILL str2
7571 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
7572 proj_list.push(kill);
7573 // DEF/KILL cnt2
7574 kill = new MachProjNode( this, 4, (INT_RDX_REG_mask()), Op_RegI );
7575 proj_list.push(kill);
7576 // TEMP tmp1
7577 MachTempNode *def;
7578 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7579 add_req(def);
7580 // DEF/KILL cr
7581 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
7582 proj_list.push(kill);
7583
7584 return this;
7585}
7586
7587MachNode* string_compareLUNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7588 Compile* C = Compile::current();
7589 // Add projection edges for additional defs or kills
7590 // DEF/KILL str1
7591 MachProjNode *kill;
7592 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7593 proj_list.push(kill);
7594 // DEF/KILL cnt1
7595 kill = new MachProjNode( this, 2, (INT_RCX_REG_mask()), Op_RegI );
7596 proj_list.push(kill);
7597 // DEF/KILL str2
7598 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
7599 proj_list.push(kill);
7600 // DEF/KILL cnt2
7601 kill = new MachProjNode( this, 4, (INT_RDX_REG_mask()), Op_RegI );
7602 proj_list.push(kill);
7603 // TEMP tmp1
7604 MachTempNode *def;
7605 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7606 add_req(def);
7607 // DEF/KILL cr
7608 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
7609 proj_list.push(kill);
7610
7611 return this;
7612}
7613
7614MachNode* string_compareULNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7615 Compile* C = Compile::current();
7616 // Add projection edges for additional defs or kills
7617 // DEF/KILL str1
7618 MachProjNode *kill;
7619 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
7620 proj_list.push(kill);
7621 // DEF/KILL cnt1
7622 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
7623 proj_list.push(kill);
7624 // DEF/KILL str2
7625 kill = new MachProjNode( this, 3, (PTR_RDI_REG_mask()), Op_RegP );
7626 proj_list.push(kill);
7627 // DEF/KILL cnt2
7628 kill = new MachProjNode( this, 4, (INT_RCX_REG_mask()), Op_RegI );
7629 proj_list.push(kill);
7630 // TEMP tmp1
7631 MachTempNode *def;
7632 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7633 add_req(def);
7634 // DEF/KILL cr
7635 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
7636 proj_list.push(kill);
7637
7638 return this;
7639}
7640
7641MachNode* string_indexof_conLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7642 Compile* C = Compile::current();
7643 // Add projection edges for additional defs or kills
7644 // DEF/KILL str1
7645 MachProjNode *kill;
7646 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7647 proj_list.push(kill);
7648 // DEF/KILL cnt1
7649 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
7650 proj_list.push(kill);
7651 // DEF/KILL str2
7652 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
7653 proj_list.push(kill);
7654 // TEMP vec
7655 MachTempNode *def;
7656 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7657 add_req(def);
7658 // DEF/KILL cnt2
7659 kill = new MachProjNode( this, 4, (INT_RAX_REG_mask()), Op_RegI );
7660 proj_list.push(kill);
7661 // DEF/KILL tmp
7662 kill = new MachProjNode( this, 5, (INT_RCX_REG_mask()), Op_RegI );
7663 proj_list.push(kill);
7664 // DEF/KILL cr
7665 kill = new MachProjNode( this, 6, (INT_FLAGS_mask()), Op_RegFlags );
7666 proj_list.push(kill);
7667
7668 return this;
7669}
7670
7671MachNode* string_indexof_conUNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7672 Compile* C = Compile::current();
7673 // Add projection edges for additional defs or kills
7674 // DEF/KILL str1
7675 MachProjNode *kill;
7676 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7677 proj_list.push(kill);
7678 // DEF/KILL cnt1
7679 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
7680 proj_list.push(kill);
7681 // DEF/KILL str2
7682 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
7683 proj_list.push(kill);
7684 // TEMP vec
7685 MachTempNode *def;
7686 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7687 add_req(def);
7688 // DEF/KILL cnt2
7689 kill = new MachProjNode( this, 4, (INT_RAX_REG_mask()), Op_RegI );
7690 proj_list.push(kill);
7691 // DEF/KILL tmp
7692 kill = new MachProjNode( this, 5, (INT_RCX_REG_mask()), Op_RegI );
7693 proj_list.push(kill);
7694 // DEF/KILL cr
7695 kill = new MachProjNode( this, 6, (INT_FLAGS_mask()), Op_RegFlags );
7696 proj_list.push(kill);
7697
7698 return this;
7699}
7700
7701MachNode* string_indexof_conULNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7702 Compile* C = Compile::current();
7703 // Add projection edges for additional defs or kills
7704 // DEF/KILL str1
7705 MachProjNode *kill;
7706 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7707 proj_list.push(kill);
7708 // DEF/KILL cnt1
7709 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
7710 proj_list.push(kill);
7711 // DEF/KILL str2
7712 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
7713 proj_list.push(kill);
7714 // TEMP vec
7715 MachTempNode *def;
7716 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7717 add_req(def);
7718 // DEF/KILL cnt2
7719 kill = new MachProjNode( this, 4, (INT_RAX_REG_mask()), Op_RegI );
7720 proj_list.push(kill);
7721 // DEF/KILL tmp
7722 kill = new MachProjNode( this, 5, (INT_RCX_REG_mask()), Op_RegI );
7723 proj_list.push(kill);
7724 // DEF/KILL cr
7725 kill = new MachProjNode( this, 6, (INT_FLAGS_mask()), Op_RegFlags );
7726 proj_list.push(kill);
7727
7728 return this;
7729}
7730
7731MachNode* string_indexofLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7732 Compile* C = Compile::current();
7733 // Add projection edges for additional defs or kills
7734 // DEF/KILL str1
7735 MachProjNode *kill;
7736 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7737 proj_list.push(kill);
7738 // DEF/KILL cnt1
7739 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
7740 proj_list.push(kill);
7741 // DEF/KILL str2
7742 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
7743 proj_list.push(kill);
7744 // DEF/KILL cnt2
7745 kill = new MachProjNode( this, 4, (INT_RAX_REG_mask()), Op_RegI );
7746 proj_list.push(kill);
7747 // TEMP vec
7748 MachTempNode *def;
7749 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7750 add_req(def);
7751 // DEF/KILL tmp
7752 kill = new MachProjNode( this, 5, (INT_RCX_REG_mask()), Op_RegI );
7753 proj_list.push(kill);
7754 // DEF/KILL cr
7755 kill = new MachProjNode( this, 6, (INT_FLAGS_mask()), Op_RegFlags );
7756 proj_list.push(kill);
7757
7758 return this;
7759}
7760
7761MachNode* string_indexofUNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7762 Compile* C = Compile::current();
7763 // Add projection edges for additional defs or kills
7764 // DEF/KILL str1
7765 MachProjNode *kill;
7766 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7767 proj_list.push(kill);
7768 // DEF/KILL cnt1
7769 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
7770 proj_list.push(kill);
7771 // DEF/KILL str2
7772 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
7773 proj_list.push(kill);
7774 // DEF/KILL cnt2
7775 kill = new MachProjNode( this, 4, (INT_RAX_REG_mask()), Op_RegI );
7776 proj_list.push(kill);
7777 // TEMP vec
7778 MachTempNode *def;
7779 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7780 add_req(def);
7781 // DEF/KILL tmp
7782 kill = new MachProjNode( this, 5, (INT_RCX_REG_mask()), Op_RegI );
7783 proj_list.push(kill);
7784 // DEF/KILL cr
7785 kill = new MachProjNode( this, 6, (INT_FLAGS_mask()), Op_RegFlags );
7786 proj_list.push(kill);
7787
7788 return this;
7789}
7790
7791MachNode* string_indexofULNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7792 Compile* C = Compile::current();
7793 // Add projection edges for additional defs or kills
7794 // DEF/KILL str1
7795 MachProjNode *kill;
7796 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7797 proj_list.push(kill);
7798 // DEF/KILL cnt1
7799 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
7800 proj_list.push(kill);
7801 // DEF/KILL str2
7802 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
7803 proj_list.push(kill);
7804 // DEF/KILL cnt2
7805 kill = new MachProjNode( this, 4, (INT_RAX_REG_mask()), Op_RegI );
7806 proj_list.push(kill);
7807 // TEMP vec
7808 MachTempNode *def;
7809 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7810 add_req(def);
7811 // DEF/KILL tmp
7812 kill = new MachProjNode( this, 5, (INT_RCX_REG_mask()), Op_RegI );
7813 proj_list.push(kill);
7814 // DEF/KILL cr
7815 kill = new MachProjNode( this, 6, (INT_FLAGS_mask()), Op_RegFlags );
7816 proj_list.push(kill);
7817
7818 return this;
7819}
7820
7821MachNode* string_indexofU_charNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7822 Compile* C = Compile::current();
7823 // Add projection edges for additional defs or kills
7824 // DEF/KILL str1
7825 MachProjNode *kill;
7826 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7827 proj_list.push(kill);
7828 // DEF/KILL cnt1
7829 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
7830 proj_list.push(kill);
7831 // DEF/KILL ch
7832 kill = new MachProjNode( this, 3, (INT_RAX_REG_mask()), Op_RegI );
7833 proj_list.push(kill);
7834 // TEMP vec1
7835 MachTempNode *def;
7836 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7837 add_req(def);
7838 // TEMP vec2
7839 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7840 add_req(def);
7841 // TEMP vec3
7842 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7843 add_req(def);
7844 // TEMP tmp
7845 def = new MachTempNode(state->MachOperGenerator(RCX_REGI));
7846 add_req(def);
7847 // DEF/KILL cr
7848 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
7849 proj_list.push(kill);
7850
7851 return this;
7852}
7853
7854MachNode* string_equalsNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7855 Compile* C = Compile::current();
7856 // Add projection edges for additional defs or kills
7857 // DEF/KILL str1
7858 MachProjNode *kill;
7859 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7860 proj_list.push(kill);
7861 // DEF/KILL str2
7862 kill = new MachProjNode( this, 2, (PTR_RSI_REG_mask()), Op_RegP );
7863 proj_list.push(kill);
7864 // DEF/KILL cnt
7865 kill = new MachProjNode( this, 3, (INT_RCX_REG_mask()), Op_RegI );
7866 proj_list.push(kill);
7867 // TEMP tmp1
7868 MachTempNode *def;
7869 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7870 add_req(def);
7871 // TEMP tmp2
7872 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7873 add_req(def);
7874 // DEF/KILL tmp3
7875 kill = new MachProjNode( this, 4, (INT_RBX_REG_mask()), Op_RegI );
7876 proj_list.push(kill);
7877 // DEF/KILL cr
7878 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
7879 proj_list.push(kill);
7880
7881 return this;
7882}
7883
7884MachNode* array_equalsBNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7885 Compile* C = Compile::current();
7886 // Add projection edges for additional defs or kills
7887 // DEF/KILL ary1
7888 MachProjNode *kill;
7889 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7890 proj_list.push(kill);
7891 // DEF/KILL ary2
7892 kill = new MachProjNode( this, 2, (PTR_RSI_REG_mask()), Op_RegP );
7893 proj_list.push(kill);
7894 // TEMP tmp1
7895 MachTempNode *def;
7896 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7897 add_req(def);
7898 // TEMP tmp2
7899 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7900 add_req(def);
7901 // DEF/KILL tmp3
7902 kill = new MachProjNode( this, 3, (INT_RCX_REG_mask()), Op_RegI );
7903 proj_list.push(kill);
7904 // DEF/KILL tmp4
7905 kill = new MachProjNode( this, 4, (INT_RBX_REG_mask()), Op_RegI );
7906 proj_list.push(kill);
7907 // DEF/KILL cr
7908 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
7909 proj_list.push(kill);
7910
7911 return this;
7912}
7913
7914MachNode* array_equalsCNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7915 Compile* C = Compile::current();
7916 // Add projection edges for additional defs or kills
7917 // DEF/KILL ary1
7918 MachProjNode *kill;
7919 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
7920 proj_list.push(kill);
7921 // DEF/KILL ary2
7922 kill = new MachProjNode( this, 2, (PTR_RSI_REG_mask()), Op_RegP );
7923 proj_list.push(kill);
7924 // TEMP tmp1
7925 MachTempNode *def;
7926 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7927 add_req(def);
7928 // TEMP tmp2
7929 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7930 add_req(def);
7931 // DEF/KILL tmp3
7932 kill = new MachProjNode( this, 3, (INT_RCX_REG_mask()), Op_RegI );
7933 proj_list.push(kill);
7934 // DEF/KILL tmp4
7935 kill = new MachProjNode( this, 4, (INT_RBX_REG_mask()), Op_RegI );
7936 proj_list.push(kill);
7937 // DEF/KILL cr
7938 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
7939 proj_list.push(kill);
7940
7941 return this;
7942}
7943
7944MachNode* has_negativesNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7945 Compile* C = Compile::current();
7946 // Add projection edges for additional defs or kills
7947 // DEF/KILL ary1
7948 MachProjNode *kill;
7949 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
7950 proj_list.push(kill);
7951 // DEF/KILL len
7952 kill = new MachProjNode( this, 2, (INT_RCX_REG_mask()), Op_RegI );
7953 proj_list.push(kill);
7954 // TEMP tmp1
7955 MachTempNode *def;
7956 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7957 add_req(def);
7958 // TEMP tmp2
7959 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7960 add_req(def);
7961 // DEF/KILL tmp3
7962 kill = new MachProjNode( this, 3, (INT_RBX_REG_mask()), Op_RegI );
7963 proj_list.push(kill);
7964 // DEF/KILL cr
7965 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
7966 proj_list.push(kill);
7967
7968 return this;
7969}
7970
7971MachNode* string_compressNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7972 Compile* C = Compile::current();
7973 // Add projection edges for additional defs or kills
7974 // DEF/KILL src
7975 MachProjNode *kill;
7976 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
7977 proj_list.push(kill);
7978 // DEF/KILL dst
7979 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
7980 proj_list.push(kill);
7981 // DEF/KILL len
7982 kill = new MachProjNode( this, 3, (INT_RDX_REG_mask()), Op_RegI );
7983 proj_list.push(kill);
7984 // TEMP tmp1
7985 MachTempNode *def;
7986 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7987 add_req(def);
7988 // TEMP tmp2
7989 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7990 add_req(def);
7991 // TEMP tmp3
7992 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7993 add_req(def);
7994 // TEMP tmp4
7995 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
7996 add_req(def);
7997 // DEF/KILL tmp5
7998 kill = new MachProjNode( this, 4, (INT_RCX_REG_mask()), Op_RegI );
7999 proj_list.push(kill);
8000 // DEF/KILL cr
8001 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
8002 proj_list.push(kill);
8003
8004 return this;
8005}
8006
8007MachNode* string_inflateNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8008 Compile* C = Compile::current();
8009 // Add projection edges for additional defs or kills
8010 // DEF/KILL src
8011 MachProjNode *kill;
8012 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
8013 proj_list.push(kill);
8014 // DEF/KILL dst
8015 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
8016 proj_list.push(kill);
8017 // DEF/KILL len
8018 kill = new MachProjNode( this, 3, (INT_RDX_REG_mask()), Op_RegI );
8019 proj_list.push(kill);
8020 // TEMP tmp1
8021 MachTempNode *def;
8022 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
8023 add_req(def);
8024 // TEMP tmp2
8025 def = new MachTempNode(state->MachOperGenerator(RCX_REGI));
8026 add_req(def);
8027 // DEF/KILL cr
8028 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
8029 proj_list.push(kill);
8030
8031 return this;
8032}
8033
8034MachNode* encode_iso_arrayNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8035 Compile* C = Compile::current();
8036 // Add projection edges for additional defs or kills
8037 // DEF/KILL src
8038 MachProjNode *kill;
8039 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
8040 proj_list.push(kill);
8041 // DEF/KILL dst
8042 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
8043 proj_list.push(kill);
8044 // DEF/KILL len
8045 kill = new MachProjNode( this, 3, (INT_RDX_REG_mask()), Op_RegI );
8046 proj_list.push(kill);
8047 // TEMP tmp1
8048 MachTempNode *def;
8049 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
8050 add_req(def);
8051 // TEMP tmp2
8052 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
8053 add_req(def);
8054 // TEMP tmp3
8055 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
8056 add_req(def);
8057 // TEMP tmp4
8058 def = new MachTempNode(state->MachOperGenerator(LEGVECS));
8059 add_req(def);
8060 // DEF/KILL tmp5
8061 kill = new MachProjNode( this, 4, (INT_RCX_REG_mask()), Op_RegI );
8062 proj_list.push(kill);
8063 // DEF/KILL cr
8064 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
8065 proj_list.push(kill);
8066
8067 return this;
8068}
8069
8070MachNode* overflowAddI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8071 Compile* C = Compile::current();
8072 // Add projection edges for additional defs or kills
8073 // DEF/KILL op1
8074 MachProjNode *kill;
8075 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
8076 proj_list.push(kill);
8077
8078 return this;
8079}
8080
8081MachNode* overflowAddI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8082 Compile* C = Compile::current();
8083 // Add projection edges for additional defs or kills
8084 // DEF/KILL op1
8085 MachProjNode *kill;
8086 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
8087 proj_list.push(kill);
8088
8089 return this;
8090}
8091
8092MachNode* overflowAddL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8093 Compile* C = Compile::current();
8094 // Add projection edges for additional defs or kills
8095 // DEF/KILL op1
8096 MachProjNode *kill;
8097 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
8098 proj_list.push(kill);
8099
8100 return this;
8101}
8102
8103MachNode* overflowAddL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8104 Compile* C = Compile::current();
8105 // Add projection edges for additional defs or kills
8106 // DEF/KILL op1
8107 MachProjNode *kill;
8108 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
8109 proj_list.push(kill);
8110
8111 return this;
8112}
8113
8114MachNode* overflowNegI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8115 Compile* C = Compile::current();
8116 // Add projection edges for additional defs or kills
8117 // DEF/KILL op2
8118 MachProjNode *kill;
8119 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
8120 proj_list.push(kill);
8121
8122 return this;
8123}
8124
8125MachNode* overflowNegL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8126 Compile* C = Compile::current();
8127 // Add projection edges for additional defs or kills
8128 // DEF/KILL op2
8129 MachProjNode *kill;
8130 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
8131 proj_list.push(kill);
8132
8133 return this;
8134}
8135
8136MachNode* overflowMulI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8137 Compile* C = Compile::current();
8138 // Add projection edges for additional defs or kills
8139 // DEF/KILL op1
8140 MachProjNode *kill;
8141 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
8142 proj_list.push(kill);
8143
8144 return this;
8145}
8146
8147MachNode* overflowMulI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8148 Compile* C = Compile::current();
8149 // Add projection edges for additional defs or kills
8150 // TEMP tmp
8151 MachTempNode *def;
8152 def = new MachTempNode(state->MachOperGenerator(RREGI));
8153 add_req(def);
8154
8155 return this;
8156}
8157
8158MachNode* overflowMulL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8159 Compile* C = Compile::current();
8160 // Add projection edges for additional defs or kills
8161 // DEF/KILL op1
8162 MachProjNode *kill;
8163 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
8164 proj_list.push(kill);
8165
8166 return this;
8167}
8168
8169MachNode* overflowMulL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8170 Compile* C = Compile::current();
8171 // Add projection edges for additional defs or kills
8172 // TEMP tmp
8173 MachTempNode *def;
8174 def = new MachTempNode(state->MachOperGenerator(RREGL));
8175 add_req(def);
8176
8177 return this;
8178}
8179
8180MachNode* cmpL3_reg_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8181 Compile* C = Compile::current();
8182 // Add projection edges for additional defs or kills
8183 // DEF/KILL flags
8184 MachProjNode *kill;
8185 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
8186 proj_list.push(kill);
8187
8188 return this;
8189}
8190
8191MachNode* minI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8192 Compile* C = Compile::current();
8193 MachOper *op0 = new rFlagsRegOper();
8194 MachNode *tmp0 = this;
8195 MachNode *tmp1 = this;
8196 MachNode *tmp2 = this;
8197 MachNode *tmp3 = NULL;
8198 unsigned num0 = 0;
8199 unsigned num1 = opnd_array(1)->num_edges();
8200 unsigned num2 = opnd_array(2)->num_edges();
8201 unsigned idx0 = oper_input_base();
8202 unsigned idx1 = idx0 + num0;
8203 unsigned idx2 = idx1 + num1;
8204 unsigned idx3 = idx2 + num2;
8205 MachNode *result = NULL;
8206
8207 compI_rRegNode *n0 = new compI_rRegNode();
8208 n0->add_req(_in[0]);
8209 n0->set_opnd_array(0, state->MachOperGenerator(RFLAGSREG));
8210 tmp3 = n0;
8211 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
8212 if(tmp1 == this) {
8213 for(unsigned i = 0; i < num1; i++) {
8214 n0->add_req(_in[i + idx1]);
8215 }
8216 }
8217 else n0->add_req(tmp1);
8218 n0->set_opnd_array(2, opnd_array(2)->clone()); // src
8219 if(tmp2 == this) {
8220 for(unsigned i = 0; i < num2; i++) {
8221 n0->add_req(_in[i + idx2]);
8222 }
8223 }
8224 else n0->add_req(tmp2);
8225 result = n0->Expand( state, proj_list, mem );
8226
8227 cmovI_reg_gNode *n1 = new cmovI_reg_gNode();
8228 n1->add_req(_in[0]);
8229 n1->set_opnd_array(0, state->MachOperGenerator(RREGI));
8230 n1->set_opnd_array(1, opnd_array(1)->clone()); // dst
8231 if(tmp1 == this) {
8232 for(unsigned i = 0; i < num1; i++) {
8233 n1->add_req(_in[i + idx1]);
8234 }
8235 }
8236 else n1->add_req(tmp1);
8237 tmp1 = n1;
8238 n1->set_opnd_array(2, opnd_array(2)->clone()); // src
8239 if(tmp2 == this) {
8240 for(unsigned i = 0; i < num2; i++) {
8241 n1->add_req(_in[i + idx2]);
8242 }
8243 }
8244 else n1->add_req(tmp2);
8245 n1->set_opnd_array(3, op0->clone()); // cr
8246 if(tmp3 != NULL)
8247 n1->add_req(tmp3);
8248 result = n1->Expand( state, proj_list, mem );
8249
8250
8251 return result;
8252}
8253
8254MachNode* maxI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8255 Compile* C = Compile::current();
8256 MachOper *op0 = new rFlagsRegOper();
8257 MachNode *tmp0 = this;
8258 MachNode *tmp1 = this;
8259 MachNode *tmp2 = this;
8260 MachNode *tmp3 = NULL;
8261 unsigned num0 = 0;
8262 unsigned num1 = opnd_array(1)->num_edges();
8263 unsigned num2 = opnd_array(2)->num_edges();
8264 unsigned idx0 = oper_input_base();
8265 unsigned idx1 = idx0 + num0;
8266 unsigned idx2 = idx1 + num1;
8267 unsigned idx3 = idx2 + num2;
8268 MachNode *result = NULL;
8269
8270 compI_rRegNode *n0 = new compI_rRegNode();
8271 n0->add_req(_in[0]);
8272 n0->set_opnd_array(0, state->MachOperGenerator(RFLAGSREG));
8273 tmp3 = n0;
8274 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
8275 if(tmp1 == this) {
8276 for(unsigned i = 0; i < num1; i++) {
8277 n0->add_req(_in[i + idx1]);
8278 }
8279 }
8280 else n0->add_req(tmp1);
8281 n0->set_opnd_array(2, opnd_array(2)->clone()); // src
8282 if(tmp2 == this) {
8283 for(unsigned i = 0; i < num2; i++) {
8284 n0->add_req(_in[i + idx2]);
8285 }
8286 }
8287 else n0->add_req(tmp2);
8288 result = n0->Expand( state, proj_list, mem );
8289
8290 cmovI_reg_lNode *n1 = new cmovI_reg_lNode();
8291 n1->add_req(_in[0]);
8292 n1->set_opnd_array(0, state->MachOperGenerator(RREGI));
8293 n1->set_opnd_array(1, opnd_array(1)->clone()); // dst
8294 if(tmp1 == this) {
8295 for(unsigned i = 0; i < num1; i++) {
8296 n1->add_req(_in[i + idx1]);
8297 }
8298 }
8299 else n1->add_req(tmp1);
8300 tmp1 = n1;
8301 n1->set_opnd_array(2, opnd_array(2)->clone()); // src
8302 if(tmp2 == this) {
8303 for(unsigned i = 0; i < num2; i++) {
8304 n1->add_req(_in[i + idx2]);
8305 }
8306 }
8307 else n1->add_req(tmp2);
8308 n1->set_opnd_array(3, op0->clone()); // cr
8309 if(tmp3 != NULL)
8310 n1->add_req(tmp3);
8311 result = n1->Expand( state, proj_list, mem );
8312
8313
8314 return result;
8315}
8316
8317MachNode* partialSubtypeCheckNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8318 Compile* C = Compile::current();
8319 // Add projection edges for additional defs or kills
8320 // DEF/KILL rcx
8321 MachProjNode *kill;
8322 kill = new MachProjNode( this, 1, (INT_RCX_REG_mask()), Op_RegI );
8323 proj_list.push(kill);
8324 // DEF/KILL cr
8325 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
8326 proj_list.push(kill);
8327
8328 return this;
8329}
8330
8331MachNode* partialSubtypeCheck_vs_ZeroNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8332 Compile* C = Compile::current();
8333 // Add projection edges for additional defs or kills
8334 // DEF/KILL rcx
8335 MachProjNode *kill;
8336 kill = new MachProjNode( this, 1, (INT_RCX_REG_mask()), Op_RegI );
8337 proj_list.push(kill);
8338 // DEF/KILL result
8339 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
8340 proj_list.push(kill);
8341
8342 return this;
8343}
8344
8345MachNode* cmpFastLockRTMNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8346 Compile* C = Compile::current();
8347 // Add projection edges for additional defs or kills
8348 // DEF/KILL box
8349 MachProjNode *kill;
8350 kill = new MachProjNode( this, 1, (PTR_RBX_REG_mask()), Op_RegP );
8351 proj_list.push(kill);
8352 // TEMP tmp
8353 MachTempNode *def;
8354 def = new MachTempNode(state->MachOperGenerator(RAX_REGI));
8355 add_req(def);
8356 // TEMP scr
8357 def = new MachTempNode(state->MachOperGenerator(RDX_REGI));
8358 add_req(def);
8359 // TEMP cx1
8360 def = new MachTempNode(state->MachOperGenerator(RREGI));
8361 add_req(def);
8362 // TEMP cx2
8363 def = new MachTempNode(state->MachOperGenerator(RREGI));
8364 add_req(def);
8365
8366 return this;
8367}
8368
8369MachNode* cmpFastLockNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8370 Compile* C = Compile::current();
8371 // Add projection edges for additional defs or kills
8372 // DEF/KILL box
8373 MachProjNode *kill;
8374 kill = new MachProjNode( this, 1, (PTR_RBX_REG_mask()), Op_RegP );
8375 proj_list.push(kill);
8376 // TEMP tmp
8377 MachTempNode *def;
8378 def = new MachTempNode(state->MachOperGenerator(RAX_REGI));
8379 add_req(def);
8380 // TEMP scr
8381 def = new MachTempNode(state->MachOperGenerator(RREGP));
8382 add_req(def);
8383
8384 return this;
8385}
8386
8387MachNode* cmpFastUnlockNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8388 Compile* C = Compile::current();
8389 // Add projection edges for additional defs or kills
8390 // DEF/KILL box
8391 MachProjNode *kill;
8392 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
8393 proj_list.push(kill);
8394 // TEMP tmp
8395 MachTempNode *def;
8396 def = new MachTempNode(state->MachOperGenerator(RREGP));
8397 add_req(def);
8398
8399 return this;
8400}
8401
8402MachNode* safePoint_pollNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8403 Compile* C = Compile::current();
8404 // Add projection edges for additional defs or kills
8405 // DEF/KILL cr
8406 MachProjNode *kill;
8407 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
8408 proj_list.push(kill);
8409
8410 return this;
8411}
8412
8413MachNode* safePoint_poll_farNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8414 Compile* C = Compile::current();
8415 // Add projection edges for additional defs or kills
8416 // DEF/KILL cr
8417 MachProjNode *kill;
8418 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
8419 proj_list.push(kill);
8420
8421 return this;
8422}
8423
8424MachNode* safePoint_poll_tlsNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8425 Compile* C = Compile::current();
8426 // Add projection edges for additional defs or kills
8427 // DEF/KILL cr
8428 MachProjNode *kill;
8429 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
8430 proj_list.push(kill);
8431
8432 return this;
8433}
8434
8435MachNode* setMaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8436 Compile* C = Compile::current();
8437 // Add projection edges for additional defs or kills
8438 // TEMP dst
8439 MachTempNode *def;
8440 def = new MachTempNode(state->MachOperGenerator(RREGI));
8441 add_req(def);
8442
8443 return this;
8444}
8445
8446MachNode* addF_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8447 Compile* C = Compile::current();
8448 add_req(C->mach_constant_base_node());
8449
8450 return this;
8451}
8452
8453MachNode* addF_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8454 Compile* C = Compile::current();
8455 add_req(C->mach_constant_base_node());
8456
8457 return this;
8458}
8459
8460MachNode* addD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8461 Compile* C = Compile::current();
8462 add_req(C->mach_constant_base_node());
8463
8464 return this;
8465}
8466
8467MachNode* addD_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8468 Compile* C = Compile::current();
8469 add_req(C->mach_constant_base_node());
8470
8471 return this;
8472}
8473
8474MachNode* subF_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8475 Compile* C = Compile::current();
8476 add_req(C->mach_constant_base_node());
8477
8478 return this;
8479}
8480
8481MachNode* subF_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8482 Compile* C = Compile::current();
8483 add_req(C->mach_constant_base_node());
8484
8485 return this;
8486}
8487
8488MachNode* subD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8489 Compile* C = Compile::current();
8490 add_req(C->mach_constant_base_node());
8491
8492 return this;
8493}
8494
8495MachNode* subD_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8496 Compile* C = Compile::current();
8497 add_req(C->mach_constant_base_node());
8498
8499 return this;
8500}
8501
8502MachNode* mulF_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8503 Compile* C = Compile::current();
8504 add_req(C->mach_constant_base_node());
8505
8506 return this;
8507}
8508
8509MachNode* mulF_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8510 Compile* C = Compile::current();
8511 add_req(C->mach_constant_base_node());
8512
8513 return this;
8514}
8515
8516MachNode* mulD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8517 Compile* C = Compile::current();
8518 add_req(C->mach_constant_base_node());
8519
8520 return this;
8521}
8522
8523MachNode* mulD_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8524 Compile* C = Compile::current();
8525 add_req(C->mach_constant_base_node());
8526
8527 return this;
8528}
8529
8530MachNode* divF_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8531 Compile* C = Compile::current();
8532 add_req(C->mach_constant_base_node());
8533
8534 return this;
8535}
8536
8537MachNode* divF_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8538 Compile* C = Compile::current();
8539 add_req(C->mach_constant_base_node());
8540
8541 return this;
8542}
8543
8544MachNode* divD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8545 Compile* C = Compile::current();
8546 add_req(C->mach_constant_base_node());
8547
8548 return this;
8549}
8550
8551MachNode* divD_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8552 Compile* C = Compile::current();
8553 add_req(C->mach_constant_base_node());
8554
8555 return this;
8556}
8557
8558MachNode* sqrtF_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8559 Compile* C = Compile::current();
8560 add_req(C->mach_constant_base_node());
8561
8562 return this;
8563}
8564
8565MachNode* sqrtD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8566 Compile* C = Compile::current();
8567 add_req(C->mach_constant_base_node());
8568
8569 return this;
8570}
8571
8572MachNode* Repl16B_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8573 Compile* C = Compile::current();
8574 add_req(C->mach_constant_base_node());
8575
8576 return this;
8577}
8578
8579MachNode* Repl32B_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8580 Compile* C = Compile::current();
8581 add_req(C->mach_constant_base_node());
8582
8583 return this;
8584}
8585
8586MachNode* Repl64B_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8587 Compile* C = Compile::current();
8588 add_req(C->mach_constant_base_node());
8589
8590 return this;
8591}
8592
8593MachNode* Repl8S_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8594 Compile* C = Compile::current();
8595 add_req(C->mach_constant_base_node());
8596
8597 return this;
8598}
8599
8600MachNode* Repl16S_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8601 Compile* C = Compile::current();
8602 add_req(C->mach_constant_base_node());
8603
8604 return this;
8605}
8606
8607MachNode* Repl32S_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8608 Compile* C = Compile::current();
8609 add_req(C->mach_constant_base_node());
8610
8611 return this;
8612}
8613
8614MachNode* Repl4I_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8615 Compile* C = Compile::current();
8616 add_req(C->mach_constant_base_node());
8617
8618 return this;
8619}
8620
8621MachNode* Repl8I_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8622 Compile* C = Compile::current();
8623 add_req(C->mach_constant_base_node());
8624
8625 return this;
8626}
8627
8628MachNode* Repl16I_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8629 Compile* C = Compile::current();
8630 add_req(C->mach_constant_base_node());
8631
8632 return this;
8633}
8634
8635MachNode* Repl4L_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8636 Compile* C = Compile::current();
8637 add_req(C->mach_constant_base_node());
8638
8639 return this;
8640}
8641
8642MachNode* Repl8L_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8643 Compile* C = Compile::current();
8644 add_req(C->mach_constant_base_node());
8645
8646 return this;
8647}
8648
8649MachNode* Repl4B_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8650 Compile* C = Compile::current();
8651 add_req(C->mach_constant_base_node());
8652
8653 return this;
8654}
8655
8656MachNode* Repl8B_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8657 Compile* C = Compile::current();
8658 add_req(C->mach_constant_base_node());
8659
8660 return this;
8661}
8662
8663MachNode* Repl2S_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8664 Compile* C = Compile::current();
8665 add_req(C->mach_constant_base_node());
8666
8667 return this;
8668}
8669
8670MachNode* Repl4S_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8671 Compile* C = Compile::current();
8672 add_req(C->mach_constant_base_node());
8673
8674 return this;
8675}
8676
8677MachNode* Repl2I_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8678 Compile* C = Compile::current();
8679 add_req(C->mach_constant_base_node());
8680
8681 return this;
8682}
8683
8684MachNode* Repl2L_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8685 Compile* C = Compile::current();
8686 add_req(C->mach_constant_base_node());
8687
8688 return this;
8689}
8690
8691MachNode* Repl16B_imm_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8692 Compile* C = Compile::current();
8693 add_req(C->mach_constant_base_node());
8694
8695 return this;
8696}
8697
8698MachNode* Repl32B_imm_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8699 Compile* C = Compile::current();
8700 add_req(C->mach_constant_base_node());
8701
8702 return this;
8703}
8704
8705MachNode* Repl64B_imm_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8706 Compile* C = Compile::current();
8707 add_req(C->mach_constant_base_node());
8708
8709 return this;
8710}
8711
8712MachNode* Repl8S_imm_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8713 Compile* C = Compile::current();
8714 add_req(C->mach_constant_base_node());
8715
8716 return this;
8717}
8718
8719MachNode* Repl16S_imm_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8720 Compile* C = Compile::current();
8721 add_req(C->mach_constant_base_node());
8722
8723 return this;
8724}
8725
8726MachNode* Repl32S_imm_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8727 Compile* C = Compile::current();
8728 add_req(C->mach_constant_base_node());
8729
8730 return this;
8731}
8732
8733MachNode* Repl4I_imm_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8734 Compile* C = Compile::current();
8735 add_req(C->mach_constant_base_node());
8736
8737 return this;
8738}
8739
8740MachNode* Repl8I_imm_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8741 Compile* C = Compile::current();
8742 add_req(C->mach_constant_base_node());
8743
8744 return this;
8745}
8746
8747MachNode* Repl16I_imm_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8748 Compile* C = Compile::current();
8749 add_req(C->mach_constant_base_node());
8750
8751 return this;
8752}
8753
8754MachNode* Repl4L_imm_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8755 Compile* C = Compile::current();
8756 add_req(C->mach_constant_base_node());
8757
8758 return this;
8759}
8760
8761MachNode* Repl8L_imm_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8762 Compile* C = Compile::current();
8763 add_req(C->mach_constant_base_node());
8764
8765 return this;
8766}
8767
8768MachNode* rsadd2I_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8769 Compile* C = Compile::current();
8770 // Add projection edges for additional defs or kills
8771 // TEMP tmp
8772 MachTempNode *def;
8773 def = new MachTempNode(state->MachOperGenerator(VECD));
8774 add_req(def);
8775 // TEMP tmp2
8776 def = new MachTempNode(state->MachOperGenerator(VECD));
8777 add_req(def);
8778
8779 return this;
8780}
8781
8782MachNode* rvadd2I_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8783 Compile* C = Compile::current();
8784 // Add projection edges for additional defs or kills
8785 // TEMP tmp
8786 MachTempNode *def;
8787 def = new MachTempNode(state->MachOperGenerator(VECD));
8788 add_req(def);
8789 // TEMP tmp2
8790 def = new MachTempNode(state->MachOperGenerator(VECD));
8791 add_req(def);
8792
8793 return this;
8794}
8795
8796MachNode* rvadd2I_reduction_reg_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8797 Compile* C = Compile::current();
8798 // Add projection edges for additional defs or kills
8799 // TEMP tmp
8800 MachTempNode *def;
8801 def = new MachTempNode(state->MachOperGenerator(VECD));
8802 add_req(def);
8803 // TEMP tmp2
8804 def = new MachTempNode(state->MachOperGenerator(VECD));
8805 add_req(def);
8806
8807 return this;
8808}
8809
8810MachNode* rsadd4I_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8811 Compile* C = Compile::current();
8812 // Add projection edges for additional defs or kills
8813 // TEMP tmp
8814 MachTempNode *def;
8815 def = new MachTempNode(state->MachOperGenerator(VECX));
8816 add_req(def);
8817 // TEMP tmp2
8818 def = new MachTempNode(state->MachOperGenerator(VECX));
8819 add_req(def);
8820
8821 return this;
8822}
8823
8824MachNode* rvadd4I_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8825 Compile* C = Compile::current();
8826 // Add projection edges for additional defs or kills
8827 // TEMP tmp
8828 MachTempNode *def;
8829 def = new MachTempNode(state->MachOperGenerator(VECX));
8830 add_req(def);
8831 // TEMP tmp2
8832 def = new MachTempNode(state->MachOperGenerator(VECX));
8833 add_req(def);
8834
8835 return this;
8836}
8837
8838MachNode* rvadd4I_reduction_reg_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8839 Compile* C = Compile::current();
8840 // Add projection edges for additional defs or kills
8841 // TEMP tmp
8842 MachTempNode *def;
8843 def = new MachTempNode(state->MachOperGenerator(VECX));
8844 add_req(def);
8845 // TEMP tmp2
8846 def = new MachTempNode(state->MachOperGenerator(VECX));
8847 add_req(def);
8848
8849 return this;
8850}
8851
8852MachNode* rvadd8I_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8853 Compile* C = Compile::current();
8854 // Add projection edges for additional defs or kills
8855 // TEMP tmp
8856 MachTempNode *def;
8857 def = new MachTempNode(state->MachOperGenerator(VECY));
8858 add_req(def);
8859 // TEMP tmp2
8860 def = new MachTempNode(state->MachOperGenerator(VECY));
8861 add_req(def);
8862
8863 return this;
8864}
8865
8866MachNode* rvadd8I_reduction_reg_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8867 Compile* C = Compile::current();
8868 // Add projection edges for additional defs or kills
8869 // TEMP tmp
8870 MachTempNode *def;
8871 def = new MachTempNode(state->MachOperGenerator(VECY));
8872 add_req(def);
8873 // TEMP tmp2
8874 def = new MachTempNode(state->MachOperGenerator(VECY));
8875 add_req(def);
8876
8877 return this;
8878}
8879
8880MachNode* rvadd16I_reduction_reg_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8881 Compile* C = Compile::current();
8882 // Add projection edges for additional defs or kills
8883 // TEMP tmp
8884 MachTempNode *def;
8885 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
8886 add_req(def);
8887 // TEMP tmp2
8888 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
8889 add_req(def);
8890 // TEMP tmp3
8891 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
8892 add_req(def);
8893
8894 return this;
8895}
8896
8897MachNode* rvadd2L_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8898 Compile* C = Compile::current();
8899 // Add projection edges for additional defs or kills
8900 // TEMP tmp
8901 MachTempNode *def;
8902 def = new MachTempNode(state->MachOperGenerator(VECX));
8903 add_req(def);
8904 // TEMP tmp2
8905 def = new MachTempNode(state->MachOperGenerator(VECX));
8906 add_req(def);
8907
8908 return this;
8909}
8910
8911MachNode* rvadd4L_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8912 Compile* C = Compile::current();
8913 // Add projection edges for additional defs or kills
8914 // TEMP tmp
8915 MachTempNode *def;
8916 def = new MachTempNode(state->MachOperGenerator(VECY));
8917 add_req(def);
8918 // TEMP tmp2
8919 def = new MachTempNode(state->MachOperGenerator(VECY));
8920 add_req(def);
8921
8922 return this;
8923}
8924
8925MachNode* rvadd8L_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8926 Compile* C = Compile::current();
8927 // Add projection edges for additional defs or kills
8928 // TEMP tmp
8929 MachTempNode *def;
8930 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
8931 add_req(def);
8932 // TEMP tmp2
8933 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
8934 add_req(def);
8935
8936 return this;
8937}
8938
8939MachNode* rsadd2F_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8940 Compile* C = Compile::current();
8941 // Add projection edges for additional defs or kills
8942 // TEMP dst
8943 MachTempNode *def;
8944 def = new MachTempNode(state->MachOperGenerator(REGF));
8945 add_req(def);
8946 // TEMP tmp
8947 def = new MachTempNode(state->MachOperGenerator(VECD));
8948 add_req(def);
8949 // Remove duplicated operands and inputs which use the same name.
8950 if (num_opnds() == 5) {
8951 unsigned num0 = 0;
8952 unsigned num1 = opnd_array(1)->num_edges(); // dst
8953 unsigned num2 = opnd_array(2)->num_edges(); // src2
8954 unsigned num3 = opnd_array(3)->num_edges(); // dst
8955 unsigned num4 = opnd_array(4)->num_edges(); // tmp
8956 unsigned idx0 = oper_input_base();
8957 unsigned idx1 = idx0 + num0;
8958 unsigned idx2 = idx1 + num1;
8959 unsigned idx3 = idx2 + num2;
8960 unsigned idx4 = idx3 + num3;
8961 unsigned idx5 = idx4 + num4;
8962 set_opnd_array(3, opnd_array(4)->clone()); // tmp
8963 for (unsigned i = 0; i < num4; i++) {
8964 set_req(i + idx3, _in[i + idx4]);
8965 }
8966 num3 = num4;
8967 idx4 = idx3 + num3;
8968 for (int i = idx5 - 1; i >= (int)idx4; i--) {
8969 del_req(i);
8970 }
8971 _num_opnds = 4;
8972 } else {
8973 assert(_num_opnds == 4, "There should be either 4 or 5 operands.");
8974 }
8975
8976 return this;
8977}
8978
8979MachNode* rvadd2F_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8980 Compile* C = Compile::current();
8981 // Add projection edges for additional defs or kills
8982 // TEMP dst
8983 MachTempNode *def;
8984 def = new MachTempNode(state->MachOperGenerator(REGF));
8985 add_req(def);
8986 // TEMP tmp
8987 def = new MachTempNode(state->MachOperGenerator(VECD));
8988 add_req(def);
8989 // Remove duplicated operands and inputs which use the same name.
8990 if (num_opnds() == 5) {
8991 unsigned num0 = 0;
8992 unsigned num1 = opnd_array(1)->num_edges(); // dst
8993 unsigned num2 = opnd_array(2)->num_edges(); // src2
8994 unsigned num3 = opnd_array(3)->num_edges(); // dst
8995 unsigned num4 = opnd_array(4)->num_edges(); // tmp
8996 unsigned idx0 = oper_input_base();
8997 unsigned idx1 = idx0 + num0;
8998 unsigned idx2 = idx1 + num1;
8999 unsigned idx3 = idx2 + num2;
9000 unsigned idx4 = idx3 + num3;
9001 unsigned idx5 = idx4 + num4;
9002 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9003 for (unsigned i = 0; i < num4; i++) {
9004 set_req(i + idx3, _in[i + idx4]);
9005 }
9006 num3 = num4;
9007 idx4 = idx3 + num3;
9008 for (int i = idx5 - 1; i >= (int)idx4; i--) {
9009 del_req(i);
9010 }
9011 _num_opnds = 4;
9012 } else {
9013 assert(_num_opnds == 4, "There should be either 4 or 5 operands.");
9014 }
9015
9016 return this;
9017}
9018
9019MachNode* rsadd4F_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9020 Compile* C = Compile::current();
9021 // Add projection edges for additional defs or kills
9022 // TEMP dst
9023 MachTempNode *def;
9024 def = new MachTempNode(state->MachOperGenerator(REGF));
9025 add_req(def);
9026 // TEMP tmp
9027 def = new MachTempNode(state->MachOperGenerator(VECX));
9028 add_req(def);
9029 // Remove duplicated operands and inputs which use the same name.
9030 if (num_opnds() == 5) {
9031 unsigned num0 = 0;
9032 unsigned num1 = opnd_array(1)->num_edges(); // dst
9033 unsigned num2 = opnd_array(2)->num_edges(); // src2
9034 unsigned num3 = opnd_array(3)->num_edges(); // dst
9035 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9036 unsigned idx0 = oper_input_base();
9037 unsigned idx1 = idx0 + num0;
9038 unsigned idx2 = idx1 + num1;
9039 unsigned idx3 = idx2 + num2;
9040 unsigned idx4 = idx3 + num3;
9041 unsigned idx5 = idx4 + num4;
9042 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9043 for (unsigned i = 0; i < num4; i++) {
9044 set_req(i + idx3, _in[i + idx4]);
9045 }
9046 num3 = num4;
9047 idx4 = idx3 + num3;
9048 for (int i = idx5 - 1; i >= (int)idx4; i--) {
9049 del_req(i);
9050 }
9051 _num_opnds = 4;
9052 } else {
9053 assert(_num_opnds == 4, "There should be either 4 or 5 operands.");
9054 }
9055
9056 return this;
9057}
9058
9059MachNode* rvadd4F_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9060 Compile* C = Compile::current();
9061 // Add projection edges for additional defs or kills
9062 // TEMP dst
9063 MachTempNode *def;
9064 def = new MachTempNode(state->MachOperGenerator(REGF));
9065 add_req(def);
9066 // TEMP tmp
9067 def = new MachTempNode(state->MachOperGenerator(VECX));
9068 add_req(def);
9069 // Remove duplicated operands and inputs which use the same name.
9070 if (num_opnds() == 5) {
9071 unsigned num0 = 0;
9072 unsigned num1 = opnd_array(1)->num_edges(); // dst
9073 unsigned num2 = opnd_array(2)->num_edges(); // src2
9074 unsigned num3 = opnd_array(3)->num_edges(); // dst
9075 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9076 unsigned idx0 = oper_input_base();
9077 unsigned idx1 = idx0 + num0;
9078 unsigned idx2 = idx1 + num1;
9079 unsigned idx3 = idx2 + num2;
9080 unsigned idx4 = idx3 + num3;
9081 unsigned idx5 = idx4 + num4;
9082 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9083 for (unsigned i = 0; i < num4; i++) {
9084 set_req(i + idx3, _in[i + idx4]);
9085 }
9086 num3 = num4;
9087 idx4 = idx3 + num3;
9088 for (int i = idx5 - 1; i >= (int)idx4; i--) {
9089 del_req(i);
9090 }
9091 _num_opnds = 4;
9092 } else {
9093 assert(_num_opnds == 4, "There should be either 4 or 5 operands.");
9094 }
9095
9096 return this;
9097}
9098
9099MachNode* radd8F_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9100 Compile* C = Compile::current();
9101 // Add projection edges for additional defs or kills
9102 // TEMP dst
9103 MachTempNode *def;
9104 def = new MachTempNode(state->MachOperGenerator(REGF));
9105 add_req(def);
9106 // TEMP tmp
9107 def = new MachTempNode(state->MachOperGenerator(VECY));
9108 add_req(def);
9109 // TEMP tmp2
9110 def = new MachTempNode(state->MachOperGenerator(VECY));
9111 add_req(def);
9112 // Remove duplicated operands and inputs which use the same name.
9113 if (num_opnds() == 6) {
9114 unsigned num0 = 0;
9115 unsigned num1 = opnd_array(1)->num_edges(); // dst
9116 unsigned num2 = opnd_array(2)->num_edges(); // src2
9117 unsigned num3 = opnd_array(3)->num_edges(); // dst
9118 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9119 unsigned num5 = opnd_array(5)->num_edges(); // tmp2
9120 unsigned idx0 = oper_input_base();
9121 unsigned idx1 = idx0 + num0;
9122 unsigned idx2 = idx1 + num1;
9123 unsigned idx3 = idx2 + num2;
9124 unsigned idx4 = idx3 + num3;
9125 unsigned idx5 = idx4 + num4;
9126 unsigned idx6 = idx5 + num5;
9127 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9128 for (unsigned i = 0; i < num4; i++) {
9129 set_req(i + idx3, _in[i + idx4]);
9130 }
9131 num3 = num4;
9132 idx4 = idx3 + num3;
9133 set_opnd_array(4, opnd_array(5)->clone()); // tmp2
9134 for (unsigned i = 0; i < num5; i++) {
9135 set_req(i + idx4, _in[i + idx5]);
9136 }
9137 num4 = num5;
9138 idx5 = idx4 + num4;
9139 for (int i = idx6 - 1; i >= (int)idx5; i--) {
9140 del_req(i);
9141 }
9142 _num_opnds = 5;
9143 } else {
9144 assert(_num_opnds == 5, "There should be either 5 or 6 operands.");
9145 }
9146
9147 return this;
9148}
9149
9150MachNode* radd16F_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9151 Compile* C = Compile::current();
9152 // Add projection edges for additional defs or kills
9153 // TEMP dst
9154 MachTempNode *def;
9155 def = new MachTempNode(state->MachOperGenerator(REGF));
9156 add_req(def);
9157 // TEMP tmp
9158 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9159 add_req(def);
9160 // TEMP tmp2
9161 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9162 add_req(def);
9163 // Remove duplicated operands and inputs which use the same name.
9164 if (num_opnds() == 6) {
9165 unsigned num0 = 0;
9166 unsigned num1 = opnd_array(1)->num_edges(); // dst
9167 unsigned num2 = opnd_array(2)->num_edges(); // src2
9168 unsigned num3 = opnd_array(3)->num_edges(); // dst
9169 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9170 unsigned num5 = opnd_array(5)->num_edges(); // tmp2
9171 unsigned idx0 = oper_input_base();
9172 unsigned idx1 = idx0 + num0;
9173 unsigned idx2 = idx1 + num1;
9174 unsigned idx3 = idx2 + num2;
9175 unsigned idx4 = idx3 + num3;
9176 unsigned idx5 = idx4 + num4;
9177 unsigned idx6 = idx5 + num5;
9178 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9179 for (unsigned i = 0; i < num4; i++) {
9180 set_req(i + idx3, _in[i + idx4]);
9181 }
9182 num3 = num4;
9183 idx4 = idx3 + num3;
9184 set_opnd_array(4, opnd_array(5)->clone()); // tmp2
9185 for (unsigned i = 0; i < num5; i++) {
9186 set_req(i + idx4, _in[i + idx5]);
9187 }
9188 num4 = num5;
9189 idx5 = idx4 + num4;
9190 for (int i = idx6 - 1; i >= (int)idx5; i--) {
9191 del_req(i);
9192 }
9193 _num_opnds = 5;
9194 } else {
9195 assert(_num_opnds == 5, "There should be either 5 or 6 operands.");
9196 }
9197
9198 return this;
9199}
9200
9201MachNode* rsadd2D_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9202 Compile* C = Compile::current();
9203 // Add projection edges for additional defs or kills
9204 // TEMP dst
9205 MachTempNode *def;
9206 def = new MachTempNode(state->MachOperGenerator(REGD));
9207 add_req(def);
9208 // TEMP tmp
9209 def = new MachTempNode(state->MachOperGenerator(VECX));
9210 add_req(def);
9211 // Remove duplicated operands and inputs which use the same name.
9212 if (num_opnds() == 5) {
9213 unsigned num0 = 0;
9214 unsigned num1 = opnd_array(1)->num_edges(); // dst
9215 unsigned num2 = opnd_array(2)->num_edges(); // src2
9216 unsigned num3 = opnd_array(3)->num_edges(); // dst
9217 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9218 unsigned idx0 = oper_input_base();
9219 unsigned idx1 = idx0 + num0;
9220 unsigned idx2 = idx1 + num1;
9221 unsigned idx3 = idx2 + num2;
9222 unsigned idx4 = idx3 + num3;
9223 unsigned idx5 = idx4 + num4;
9224 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9225 for (unsigned i = 0; i < num4; i++) {
9226 set_req(i + idx3, _in[i + idx4]);
9227 }
9228 num3 = num4;
9229 idx4 = idx3 + num3;
9230 for (int i = idx5 - 1; i >= (int)idx4; i--) {
9231 del_req(i);
9232 }
9233 _num_opnds = 4;
9234 } else {
9235 assert(_num_opnds == 4, "There should be either 4 or 5 operands.");
9236 }
9237
9238 return this;
9239}
9240
9241MachNode* rvadd2D_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9242 Compile* C = Compile::current();
9243 // Add projection edges for additional defs or kills
9244 // TEMP dst
9245 MachTempNode *def;
9246 def = new MachTempNode(state->MachOperGenerator(REGD));
9247 add_req(def);
9248 // TEMP tmp
9249 def = new MachTempNode(state->MachOperGenerator(VECX));
9250 add_req(def);
9251 // Remove duplicated operands and inputs which use the same name.
9252 if (num_opnds() == 5) {
9253 unsigned num0 = 0;
9254 unsigned num1 = opnd_array(1)->num_edges(); // dst
9255 unsigned num2 = opnd_array(2)->num_edges(); // src2
9256 unsigned num3 = opnd_array(3)->num_edges(); // dst
9257 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9258 unsigned idx0 = oper_input_base();
9259 unsigned idx1 = idx0 + num0;
9260 unsigned idx2 = idx1 + num1;
9261 unsigned idx3 = idx2 + num2;
9262 unsigned idx4 = idx3 + num3;
9263 unsigned idx5 = idx4 + num4;
9264 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9265 for (unsigned i = 0; i < num4; i++) {
9266 set_req(i + idx3, _in[i + idx4]);
9267 }
9268 num3 = num4;
9269 idx4 = idx3 + num3;
9270 for (int i = idx5 - 1; i >= (int)idx4; i--) {
9271 del_req(i);
9272 }
9273 _num_opnds = 4;
9274 } else {
9275 assert(_num_opnds == 4, "There should be either 4 or 5 operands.");
9276 }
9277
9278 return this;
9279}
9280
9281MachNode* rvadd4D_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9282 Compile* C = Compile::current();
9283 // Add projection edges for additional defs or kills
9284 // TEMP dst
9285 MachTempNode *def;
9286 def = new MachTempNode(state->MachOperGenerator(REGD));
9287 add_req(def);
9288 // TEMP tmp
9289 def = new MachTempNode(state->MachOperGenerator(VECX));
9290 add_req(def);
9291 // TEMP tmp2
9292 def = new MachTempNode(state->MachOperGenerator(VECX));
9293 add_req(def);
9294 // Remove duplicated operands and inputs which use the same name.
9295 if (num_opnds() == 6) {
9296 unsigned num0 = 0;
9297 unsigned num1 = opnd_array(1)->num_edges(); // dst
9298 unsigned num2 = opnd_array(2)->num_edges(); // src2
9299 unsigned num3 = opnd_array(3)->num_edges(); // dst
9300 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9301 unsigned num5 = opnd_array(5)->num_edges(); // tmp2
9302 unsigned idx0 = oper_input_base();
9303 unsigned idx1 = idx0 + num0;
9304 unsigned idx2 = idx1 + num1;
9305 unsigned idx3 = idx2 + num2;
9306 unsigned idx4 = idx3 + num3;
9307 unsigned idx5 = idx4 + num4;
9308 unsigned idx6 = idx5 + num5;
9309 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9310 for (unsigned i = 0; i < num4; i++) {
9311 set_req(i + idx3, _in[i + idx4]);
9312 }
9313 num3 = num4;
9314 idx4 = idx3 + num3;
9315 set_opnd_array(4, opnd_array(5)->clone()); // tmp2
9316 for (unsigned i = 0; i < num5; i++) {
9317 set_req(i + idx4, _in[i + idx5]);
9318 }
9319 num4 = num5;
9320 idx5 = idx4 + num4;
9321 for (int i = idx6 - 1; i >= (int)idx5; i--) {
9322 del_req(i);
9323 }
9324 _num_opnds = 5;
9325 } else {
9326 assert(_num_opnds == 5, "There should be either 5 or 6 operands.");
9327 }
9328
9329 return this;
9330}
9331
9332MachNode* rvadd8D_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9333 Compile* C = Compile::current();
9334 // Add projection edges for additional defs or kills
9335 // TEMP dst
9336 MachTempNode *def;
9337 def = new MachTempNode(state->MachOperGenerator(REGD));
9338 add_req(def);
9339 // TEMP tmp
9340 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9341 add_req(def);
9342 // TEMP tmp2
9343 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9344 add_req(def);
9345 // Remove duplicated operands and inputs which use the same name.
9346 if (num_opnds() == 6) {
9347 unsigned num0 = 0;
9348 unsigned num1 = opnd_array(1)->num_edges(); // dst
9349 unsigned num2 = opnd_array(2)->num_edges(); // src2
9350 unsigned num3 = opnd_array(3)->num_edges(); // dst
9351 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9352 unsigned num5 = opnd_array(5)->num_edges(); // tmp2
9353 unsigned idx0 = oper_input_base();
9354 unsigned idx1 = idx0 + num0;
9355 unsigned idx2 = idx1 + num1;
9356 unsigned idx3 = idx2 + num2;
9357 unsigned idx4 = idx3 + num3;
9358 unsigned idx5 = idx4 + num4;
9359 unsigned idx6 = idx5 + num5;
9360 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9361 for (unsigned i = 0; i < num4; i++) {
9362 set_req(i + idx3, _in[i + idx4]);
9363 }
9364 num3 = num4;
9365 idx4 = idx3 + num3;
9366 set_opnd_array(4, opnd_array(5)->clone()); // tmp2
9367 for (unsigned i = 0; i < num5; i++) {
9368 set_req(i + idx4, _in[i + idx5]);
9369 }
9370 num4 = num5;
9371 idx5 = idx4 + num4;
9372 for (int i = idx6 - 1; i >= (int)idx5; i--) {
9373 del_req(i);
9374 }
9375 _num_opnds = 5;
9376 } else {
9377 assert(_num_opnds == 5, "There should be either 5 or 6 operands.");
9378 }
9379
9380 return this;
9381}
9382
9383MachNode* rsmul2I_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9384 Compile* C = Compile::current();
9385 // Add projection edges for additional defs or kills
9386 // TEMP tmp
9387 MachTempNode *def;
9388 def = new MachTempNode(state->MachOperGenerator(VECD));
9389 add_req(def);
9390 // TEMP tmp2
9391 def = new MachTempNode(state->MachOperGenerator(VECD));
9392 add_req(def);
9393
9394 return this;
9395}
9396
9397MachNode* rvmul2I_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9398 Compile* C = Compile::current();
9399 // Add projection edges for additional defs or kills
9400 // TEMP tmp
9401 MachTempNode *def;
9402 def = new MachTempNode(state->MachOperGenerator(VECD));
9403 add_req(def);
9404 // TEMP tmp2
9405 def = new MachTempNode(state->MachOperGenerator(VECD));
9406 add_req(def);
9407
9408 return this;
9409}
9410
9411MachNode* rsmul4I_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9412 Compile* C = Compile::current();
9413 // Add projection edges for additional defs or kills
9414 // TEMP tmp
9415 MachTempNode *def;
9416 def = new MachTempNode(state->MachOperGenerator(VECX));
9417 add_req(def);
9418 // TEMP tmp2
9419 def = new MachTempNode(state->MachOperGenerator(VECX));
9420 add_req(def);
9421
9422 return this;
9423}
9424
9425MachNode* rvmul4I_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9426 Compile* C = Compile::current();
9427 // Add projection edges for additional defs or kills
9428 // TEMP tmp
9429 MachTempNode *def;
9430 def = new MachTempNode(state->MachOperGenerator(VECX));
9431 add_req(def);
9432 // TEMP tmp2
9433 def = new MachTempNode(state->MachOperGenerator(VECX));
9434 add_req(def);
9435
9436 return this;
9437}
9438
9439MachNode* rvmul8I_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9440 Compile* C = Compile::current();
9441 // Add projection edges for additional defs or kills
9442 // TEMP tmp
9443 MachTempNode *def;
9444 def = new MachTempNode(state->MachOperGenerator(VECY));
9445 add_req(def);
9446 // TEMP tmp2
9447 def = new MachTempNode(state->MachOperGenerator(VECY));
9448 add_req(def);
9449
9450 return this;
9451}
9452
9453MachNode* rvmul16I_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9454 Compile* C = Compile::current();
9455 // Add projection edges for additional defs or kills
9456 // TEMP tmp
9457 MachTempNode *def;
9458 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9459 add_req(def);
9460 // TEMP tmp2
9461 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9462 add_req(def);
9463 // TEMP tmp3
9464 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9465 add_req(def);
9466
9467 return this;
9468}
9469
9470MachNode* rvmul2L_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9471 Compile* C = Compile::current();
9472 // Add projection edges for additional defs or kills
9473 // TEMP tmp
9474 MachTempNode *def;
9475 def = new MachTempNode(state->MachOperGenerator(VECX));
9476 add_req(def);
9477 // TEMP tmp2
9478 def = new MachTempNode(state->MachOperGenerator(VECX));
9479 add_req(def);
9480
9481 return this;
9482}
9483
9484MachNode* rvmul4L_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9485 Compile* C = Compile::current();
9486 // Add projection edges for additional defs or kills
9487 // TEMP tmp
9488 MachTempNode *def;
9489 def = new MachTempNode(state->MachOperGenerator(VECY));
9490 add_req(def);
9491 // TEMP tmp2
9492 def = new MachTempNode(state->MachOperGenerator(VECY));
9493 add_req(def);
9494
9495 return this;
9496}
9497
9498MachNode* rvmul8L_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9499 Compile* C = Compile::current();
9500 // Add projection edges for additional defs or kills
9501 // TEMP tmp
9502 MachTempNode *def;
9503 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9504 add_req(def);
9505 // TEMP tmp2
9506 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9507 add_req(def);
9508
9509 return this;
9510}
9511
9512MachNode* rsmul2F_reductionNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9513 Compile* C = Compile::current();
9514 // Add projection edges for additional defs or kills
9515 // TEMP dst
9516 MachTempNode *def;
9517 def = new MachTempNode(state->MachOperGenerator(REGF));
9518 add_req(def);
9519 // TEMP tmp
9520 def = new MachTempNode(state->MachOperGenerator(VECD));
9521 add_req(def);
9522 // Remove duplicated operands and inputs which use the same name.
9523 if (num_opnds() == 5) {
9524 unsigned num0 = 0;
9525 unsigned num1 = opnd_array(1)->num_edges(); // dst
9526 unsigned num2 = opnd_array(2)->num_edges(); // src2
9527 unsigned num3 = opnd_array(3)->num_edges(); // dst
9528 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9529 unsigned idx0 = oper_input_base();
9530 unsigned idx1 = idx0 + num0;
9531 unsigned idx2 = idx1 + num1;
9532 unsigned idx3 = idx2 + num2;
9533 unsigned idx4 = idx3 + num3;
9534 unsigned idx5 = idx4 + num4;
9535 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9536 for (unsigned i = 0; i < num4; i++) {
9537 set_req(i + idx3, _in[i + idx4]);
9538 }
9539 num3 = num4;
9540 idx4 = idx3 + num3;
9541 for (int i = idx5 - 1; i >= (int)idx4; i--) {
9542 del_req(i);
9543 }
9544 _num_opnds = 4;
9545 } else {
9546 assert(_num_opnds == 4, "There should be either 4 or 5 operands.");
9547 }
9548
9549 return this;
9550}
9551
9552MachNode* rvmul2F_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9553 Compile* C = Compile::current();
9554 // Add projection edges for additional defs or kills
9555 // TEMP dst
9556 MachTempNode *def;
9557 def = new MachTempNode(state->MachOperGenerator(REGF));
9558 add_req(def);
9559 // TEMP tmp
9560 def = new MachTempNode(state->MachOperGenerator(VECD));
9561 add_req(def);
9562 // Remove duplicated operands and inputs which use the same name.
9563 if (num_opnds() == 5) {
9564 unsigned num0 = 0;
9565 unsigned num1 = opnd_array(1)->num_edges(); // dst
9566 unsigned num2 = opnd_array(2)->num_edges(); // src2
9567 unsigned num3 = opnd_array(3)->num_edges(); // dst
9568 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9569 unsigned idx0 = oper_input_base();
9570 unsigned idx1 = idx0 + num0;
9571 unsigned idx2 = idx1 + num1;
9572 unsigned idx3 = idx2 + num2;
9573 unsigned idx4 = idx3 + num3;
9574 unsigned idx5 = idx4 + num4;
9575 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9576 for (unsigned i = 0; i < num4; i++) {
9577 set_req(i + idx3, _in[i + idx4]);
9578 }
9579 num3 = num4;
9580 idx4 = idx3 + num3;
9581 for (int i = idx5 - 1; i >= (int)idx4; i--) {
9582 del_req(i);
9583 }
9584 _num_opnds = 4;
9585 } else {
9586 assert(_num_opnds == 4, "There should be either 4 or 5 operands.");
9587 }
9588
9589 return this;
9590}
9591
9592MachNode* rsmul4F_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9593 Compile* C = Compile::current();
9594 // Add projection edges for additional defs or kills
9595 // TEMP dst
9596 MachTempNode *def;
9597 def = new MachTempNode(state->MachOperGenerator(REGF));
9598 add_req(def);
9599 // TEMP tmp
9600 def = new MachTempNode(state->MachOperGenerator(VECX));
9601 add_req(def);
9602 // Remove duplicated operands and inputs which use the same name.
9603 if (num_opnds() == 5) {
9604 unsigned num0 = 0;
9605 unsigned num1 = opnd_array(1)->num_edges(); // dst
9606 unsigned num2 = opnd_array(2)->num_edges(); // src2
9607 unsigned num3 = opnd_array(3)->num_edges(); // dst
9608 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9609 unsigned idx0 = oper_input_base();
9610 unsigned idx1 = idx0 + num0;
9611 unsigned idx2 = idx1 + num1;
9612 unsigned idx3 = idx2 + num2;
9613 unsigned idx4 = idx3 + num3;
9614 unsigned idx5 = idx4 + num4;
9615 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9616 for (unsigned i = 0; i < num4; i++) {
9617 set_req(i + idx3, _in[i + idx4]);
9618 }
9619 num3 = num4;
9620 idx4 = idx3 + num3;
9621 for (int i = idx5 - 1; i >= (int)idx4; i--) {
9622 del_req(i);
9623 }
9624 _num_opnds = 4;
9625 } else {
9626 assert(_num_opnds == 4, "There should be either 4 or 5 operands.");
9627 }
9628
9629 return this;
9630}
9631
9632MachNode* rvmul4F_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9633 Compile* C = Compile::current();
9634 // Add projection edges for additional defs or kills
9635 // TEMP dst
9636 MachTempNode *def;
9637 def = new MachTempNode(state->MachOperGenerator(REGF));
9638 add_req(def);
9639 // TEMP tmp
9640 def = new MachTempNode(state->MachOperGenerator(VECX));
9641 add_req(def);
9642 // Remove duplicated operands and inputs which use the same name.
9643 if (num_opnds() == 5) {
9644 unsigned num0 = 0;
9645 unsigned num1 = opnd_array(1)->num_edges(); // dst
9646 unsigned num2 = opnd_array(2)->num_edges(); // src2
9647 unsigned num3 = opnd_array(3)->num_edges(); // dst
9648 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9649 unsigned idx0 = oper_input_base();
9650 unsigned idx1 = idx0 + num0;
9651 unsigned idx2 = idx1 + num1;
9652 unsigned idx3 = idx2 + num2;
9653 unsigned idx4 = idx3 + num3;
9654 unsigned idx5 = idx4 + num4;
9655 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9656 for (unsigned i = 0; i < num4; i++) {
9657 set_req(i + idx3, _in[i + idx4]);
9658 }
9659 num3 = num4;
9660 idx4 = idx3 + num3;
9661 for (int i = idx5 - 1; i >= (int)idx4; i--) {
9662 del_req(i);
9663 }
9664 _num_opnds = 4;
9665 } else {
9666 assert(_num_opnds == 4, "There should be either 4 or 5 operands.");
9667 }
9668
9669 return this;
9670}
9671
9672MachNode* rvmul8F_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9673 Compile* C = Compile::current();
9674 // Add projection edges for additional defs or kills
9675 // TEMP dst
9676 MachTempNode *def;
9677 def = new MachTempNode(state->MachOperGenerator(REGF));
9678 add_req(def);
9679 // TEMP tmp
9680 def = new MachTempNode(state->MachOperGenerator(VECY));
9681 add_req(def);
9682 // TEMP tmp2
9683 def = new MachTempNode(state->MachOperGenerator(VECY));
9684 add_req(def);
9685 // Remove duplicated operands and inputs which use the same name.
9686 if (num_opnds() == 6) {
9687 unsigned num0 = 0;
9688 unsigned num1 = opnd_array(1)->num_edges(); // dst
9689 unsigned num2 = opnd_array(2)->num_edges(); // src2
9690 unsigned num3 = opnd_array(3)->num_edges(); // dst
9691 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9692 unsigned num5 = opnd_array(5)->num_edges(); // tmp2
9693 unsigned idx0 = oper_input_base();
9694 unsigned idx1 = idx0 + num0;
9695 unsigned idx2 = idx1 + num1;
9696 unsigned idx3 = idx2 + num2;
9697 unsigned idx4 = idx3 + num3;
9698 unsigned idx5 = idx4 + num4;
9699 unsigned idx6 = idx5 + num5;
9700 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9701 for (unsigned i = 0; i < num4; i++) {
9702 set_req(i + idx3, _in[i + idx4]);
9703 }
9704 num3 = num4;
9705 idx4 = idx3 + num3;
9706 set_opnd_array(4, opnd_array(5)->clone()); // tmp2
9707 for (unsigned i = 0; i < num5; i++) {
9708 set_req(i + idx4, _in[i + idx5]);
9709 }
9710 num4 = num5;
9711 idx5 = idx4 + num4;
9712 for (int i = idx6 - 1; i >= (int)idx5; i--) {
9713 del_req(i);
9714 }
9715 _num_opnds = 5;
9716 } else {
9717 assert(_num_opnds == 5, "There should be either 5 or 6 operands.");
9718 }
9719
9720 return this;
9721}
9722
9723MachNode* rvmul16F_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9724 Compile* C = Compile::current();
9725 // Add projection edges for additional defs or kills
9726 // TEMP dst
9727 MachTempNode *def;
9728 def = new MachTempNode(state->MachOperGenerator(REGF));
9729 add_req(def);
9730 // TEMP tmp
9731 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9732 add_req(def);
9733 // TEMP tmp2
9734 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9735 add_req(def);
9736 // Remove duplicated operands and inputs which use the same name.
9737 if (num_opnds() == 6) {
9738 unsigned num0 = 0;
9739 unsigned num1 = opnd_array(1)->num_edges(); // dst
9740 unsigned num2 = opnd_array(2)->num_edges(); // src2
9741 unsigned num3 = opnd_array(3)->num_edges(); // dst
9742 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9743 unsigned num5 = opnd_array(5)->num_edges(); // tmp2
9744 unsigned idx0 = oper_input_base();
9745 unsigned idx1 = idx0 + num0;
9746 unsigned idx2 = idx1 + num1;
9747 unsigned idx3 = idx2 + num2;
9748 unsigned idx4 = idx3 + num3;
9749 unsigned idx5 = idx4 + num4;
9750 unsigned idx6 = idx5 + num5;
9751 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9752 for (unsigned i = 0; i < num4; i++) {
9753 set_req(i + idx3, _in[i + idx4]);
9754 }
9755 num3 = num4;
9756 idx4 = idx3 + num3;
9757 set_opnd_array(4, opnd_array(5)->clone()); // tmp2
9758 for (unsigned i = 0; i < num5; i++) {
9759 set_req(i + idx4, _in[i + idx5]);
9760 }
9761 num4 = num5;
9762 idx5 = idx4 + num4;
9763 for (int i = idx6 - 1; i >= (int)idx5; i--) {
9764 del_req(i);
9765 }
9766 _num_opnds = 5;
9767 } else {
9768 assert(_num_opnds == 5, "There should be either 5 or 6 operands.");
9769 }
9770
9771 return this;
9772}
9773
9774MachNode* rsmul2D_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9775 Compile* C = Compile::current();
9776 // Add projection edges for additional defs or kills
9777 // TEMP dst
9778 MachTempNode *def;
9779 def = new MachTempNode(state->MachOperGenerator(REGD));
9780 add_req(def);
9781 // TEMP tmp
9782 def = new MachTempNode(state->MachOperGenerator(VECX));
9783 add_req(def);
9784 // Remove duplicated operands and inputs which use the same name.
9785 if (num_opnds() == 5) {
9786 unsigned num0 = 0;
9787 unsigned num1 = opnd_array(1)->num_edges(); // dst
9788 unsigned num2 = opnd_array(2)->num_edges(); // src2
9789 unsigned num3 = opnd_array(3)->num_edges(); // dst
9790 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9791 unsigned idx0 = oper_input_base();
9792 unsigned idx1 = idx0 + num0;
9793 unsigned idx2 = idx1 + num1;
9794 unsigned idx3 = idx2 + num2;
9795 unsigned idx4 = idx3 + num3;
9796 unsigned idx5 = idx4 + num4;
9797 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9798 for (unsigned i = 0; i < num4; i++) {
9799 set_req(i + idx3, _in[i + idx4]);
9800 }
9801 num3 = num4;
9802 idx4 = idx3 + num3;
9803 for (int i = idx5 - 1; i >= (int)idx4; i--) {
9804 del_req(i);
9805 }
9806 _num_opnds = 4;
9807 } else {
9808 assert(_num_opnds == 4, "There should be either 4 or 5 operands.");
9809 }
9810
9811 return this;
9812}
9813
9814MachNode* rvmul2D_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9815 Compile* C = Compile::current();
9816 // Add projection edges for additional defs or kills
9817 // TEMP dst
9818 MachTempNode *def;
9819 def = new MachTempNode(state->MachOperGenerator(REGD));
9820 add_req(def);
9821 // TEMP tmp
9822 def = new MachTempNode(state->MachOperGenerator(VECX));
9823 add_req(def);
9824 // Remove duplicated operands and inputs which use the same name.
9825 if (num_opnds() == 5) {
9826 unsigned num0 = 0;
9827 unsigned num1 = opnd_array(1)->num_edges(); // dst
9828 unsigned num2 = opnd_array(2)->num_edges(); // src2
9829 unsigned num3 = opnd_array(3)->num_edges(); // dst
9830 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9831 unsigned idx0 = oper_input_base();
9832 unsigned idx1 = idx0 + num0;
9833 unsigned idx2 = idx1 + num1;
9834 unsigned idx3 = idx2 + num2;
9835 unsigned idx4 = idx3 + num3;
9836 unsigned idx5 = idx4 + num4;
9837 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9838 for (unsigned i = 0; i < num4; i++) {
9839 set_req(i + idx3, _in[i + idx4]);
9840 }
9841 num3 = num4;
9842 idx4 = idx3 + num3;
9843 for (int i = idx5 - 1; i >= (int)idx4; i--) {
9844 del_req(i);
9845 }
9846 _num_opnds = 4;
9847 } else {
9848 assert(_num_opnds == 4, "There should be either 4 or 5 operands.");
9849 }
9850
9851 return this;
9852}
9853
9854MachNode* rvmul4D_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9855 Compile* C = Compile::current();
9856 // Add projection edges for additional defs or kills
9857 // TEMP dst
9858 MachTempNode *def;
9859 def = new MachTempNode(state->MachOperGenerator(REGD));
9860 add_req(def);
9861 // TEMP tmp
9862 def = new MachTempNode(state->MachOperGenerator(VECY));
9863 add_req(def);
9864 // TEMP tmp2
9865 def = new MachTempNode(state->MachOperGenerator(VECY));
9866 add_req(def);
9867 // Remove duplicated operands and inputs which use the same name.
9868 if (num_opnds() == 6) {
9869 unsigned num0 = 0;
9870 unsigned num1 = opnd_array(1)->num_edges(); // dst
9871 unsigned num2 = opnd_array(2)->num_edges(); // src2
9872 unsigned num3 = opnd_array(3)->num_edges(); // dst
9873 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9874 unsigned num5 = opnd_array(5)->num_edges(); // tmp2
9875 unsigned idx0 = oper_input_base();
9876 unsigned idx1 = idx0 + num0;
9877 unsigned idx2 = idx1 + num1;
9878 unsigned idx3 = idx2 + num2;
9879 unsigned idx4 = idx3 + num3;
9880 unsigned idx5 = idx4 + num4;
9881 unsigned idx6 = idx5 + num5;
9882 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9883 for (unsigned i = 0; i < num4; i++) {
9884 set_req(i + idx3, _in[i + idx4]);
9885 }
9886 num3 = num4;
9887 idx4 = idx3 + num3;
9888 set_opnd_array(4, opnd_array(5)->clone()); // tmp2
9889 for (unsigned i = 0; i < num5; i++) {
9890 set_req(i + idx4, _in[i + idx5]);
9891 }
9892 num4 = num5;
9893 idx5 = idx4 + num4;
9894 for (int i = idx6 - 1; i >= (int)idx5; i--) {
9895 del_req(i);
9896 }
9897 _num_opnds = 5;
9898 } else {
9899 assert(_num_opnds == 5, "There should be either 5 or 6 operands.");
9900 }
9901
9902 return this;
9903}
9904
9905MachNode* rvmul8D_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9906 Compile* C = Compile::current();
9907 // Add projection edges for additional defs or kills
9908 // TEMP dst
9909 MachTempNode *def;
9910 def = new MachTempNode(state->MachOperGenerator(REGD));
9911 add_req(def);
9912 // TEMP tmp
9913 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9914 add_req(def);
9915 // TEMP tmp2
9916 def = new MachTempNode(state->MachOperGenerator(LEGVECZ));
9917 add_req(def);
9918 // Remove duplicated operands and inputs which use the same name.
9919 if (num_opnds() == 6) {
9920 unsigned num0 = 0;
9921 unsigned num1 = opnd_array(1)->num_edges(); // dst
9922 unsigned num2 = opnd_array(2)->num_edges(); // src2
9923 unsigned num3 = opnd_array(3)->num_edges(); // dst
9924 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9925 unsigned num5 = opnd_array(5)->num_edges(); // tmp2
9926 unsigned idx0 = oper_input_base();
9927 unsigned idx1 = idx0 + num0;
9928 unsigned idx2 = idx1 + num1;
9929 unsigned idx3 = idx2 + num2;
9930 unsigned idx4 = idx3 + num3;
9931 unsigned idx5 = idx4 + num4;
9932 unsigned idx6 = idx5 + num5;
9933 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9934 for (unsigned i = 0; i < num4; i++) {
9935 set_req(i + idx3, _in[i + idx4]);
9936 }
9937 num3 = num4;
9938 idx4 = idx3 + num3;
9939 set_opnd_array(4, opnd_array(5)->clone()); // tmp2
9940 for (unsigned i = 0; i < num5; i++) {
9941 set_req(i + idx4, _in[i + idx5]);
9942 }
9943 num4 = num5;
9944 idx5 = idx4 + num4;
9945 for (int i = idx6 - 1; i >= (int)idx5; i--) {
9946 del_req(i);
9947 }
9948 _num_opnds = 5;
9949 } else {
9950 assert(_num_opnds == 5, "There should be either 5 or 6 operands.");
9951 }
9952
9953 return this;
9954}
9955
9956MachNode* mul4B_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9957 Compile* C = Compile::current();
9958 // Add projection edges for additional defs or kills
9959 // TEMP dst
9960 MachTempNode *def;
9961 def = new MachTempNode(state->MachOperGenerator(VECS));
9962 add_req(def);
9963 // TEMP tmp
9964 def = new MachTempNode(state->MachOperGenerator(VECS));
9965 add_req(def);
9966 // TEMP scratch
9967 def = new MachTempNode(state->MachOperGenerator(RREGI));
9968 add_req(def);
9969
9970 return this;
9971}
9972
9973MachNode* mul8B_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9974 Compile* C = Compile::current();
9975 // Add projection edges for additional defs or kills
9976 // TEMP dst
9977 MachTempNode *def;
9978 def = new MachTempNode(state->MachOperGenerator(VECD));
9979 add_req(def);
9980 // TEMP tmp
9981 def = new MachTempNode(state->MachOperGenerator(VECD));
9982 add_req(def);
9983 // TEMP scratch
9984 def = new MachTempNode(state->MachOperGenerator(RREGI));
9985 add_req(def);
9986
9987 return this;
9988}
9989
9990MachNode* mul16B_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9991 Compile* C = Compile::current();
9992 // Add projection edges for additional defs or kills
9993 // TEMP dst
9994 MachTempNode *def;
9995 def = new MachTempNode(state->MachOperGenerator(VECX));
9996 add_req(def);
9997 // TEMP tmp1
9998 def = new MachTempNode(state->MachOperGenerator(VECX));
9999 add_req(def);
10000 // TEMP tmp2
10001 def = new MachTempNode(state->MachOperGenerator(VECX));
10002 add_req(def);
10003 // TEMP scratch
10004 def = new MachTempNode(state->MachOperGenerator(RREGI));
10005 add_req(def);
10006
10007 return this;
10008}
10009
10010MachNode* vmul16B_reg_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10011 Compile* C = Compile::current();
10012 // Add projection edges for additional defs or kills
10013 // TEMP dst
10014 MachTempNode *def;
10015 def = new MachTempNode(state->MachOperGenerator(VECX));
10016 add_req(def);
10017 // TEMP tmp
10018 def = new MachTempNode(state->MachOperGenerator(VECX));
10019 add_req(def);
10020 // TEMP scratch
10021 def = new MachTempNode(state->MachOperGenerator(RREGI));
10022 add_req(def);
10023
10024 return this;
10025}
10026
10027MachNode* vmul32B_reg_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10028 Compile* C = Compile::current();
10029 // Add projection edges for additional defs or kills
10030 // TEMP dst
10031 MachTempNode *def;
10032 def = new MachTempNode(state->MachOperGenerator(VECY));
10033 add_req(def);
10034 // TEMP tmp1
10035 def = new MachTempNode(state->MachOperGenerator(VECY));
10036 add_req(def);
10037 // TEMP tmp2
10038 def = new MachTempNode(state->MachOperGenerator(VECY));
10039 add_req(def);
10040 // TEMP scratch
10041 def = new MachTempNode(state->MachOperGenerator(RREGI));
10042 add_req(def);
10043
10044 return this;
10045}
10046
10047MachNode* vmul64B_reg_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10048 Compile* C = Compile::current();
10049 // Add projection edges for additional defs or kills
10050 // TEMP dst
10051 MachTempNode *def;
10052 def = new MachTempNode(state->MachOperGenerator(VECZ));
10053 add_req(def);
10054 // TEMP tmp1
10055 def = new MachTempNode(state->MachOperGenerator(VECZ));
10056 add_req(def);
10057 // TEMP tmp2
10058 def = new MachTempNode(state->MachOperGenerator(VECZ));
10059 add_req(def);
10060 // TEMP scratch
10061 def = new MachTempNode(state->MachOperGenerator(RREGI));
10062 add_req(def);
10063
10064 return this;
10065}
10066
10067MachNode* vcmov8F_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10068 Compile* C = Compile::current();
10069 // Add projection edges for additional defs or kills
10070 // TEMP dst
10071 MachTempNode *def;
10072 def = new MachTempNode(state->MachOperGenerator(LEGVECY));
10073 add_req(def);
10074
10075 return this;
10076}
10077
10078MachNode* vcmov4D_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10079 Compile* C = Compile::current();
10080 // Add projection edges for additional defs or kills
10081 // TEMP dst
10082 MachTempNode *def;
10083 def = new MachTempNode(state->MachOperGenerator(LEGVECY));
10084 add_req(def);
10085
10086 return this;
10087}
10088
10089MachNode* vshiftcntimmNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10090 Compile* C = Compile::current();
10091 // Add projection edges for additional defs or kills
10092 // TEMP tmp
10093 MachTempNode *def;
10094 def = new MachTempNode(state->MachOperGenerator(RREGI));
10095 add_req(def);
10096
10097 return this;
10098}
10099
10100MachNode* vshift4BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10101 Compile* C = Compile::current();
10102 // Add projection edges for additional defs or kills
10103 // TEMP dst
10104 MachTempNode *def;
10105 def = new MachTempNode(state->MachOperGenerator(VECS));
10106 add_req(def);
10107 // TEMP tmp
10108 def = new MachTempNode(state->MachOperGenerator(VECS));
10109 add_req(def);
10110 // TEMP scratch
10111 def = new MachTempNode(state->MachOperGenerator(RREGI));
10112 add_req(def);
10113
10114 return this;
10115}
10116
10117MachNode* vshift4B_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10118 Compile* C = Compile::current();
10119 // Add projection edges for additional defs or kills
10120 // TEMP dst
10121 MachTempNode *def;
10122 def = new MachTempNode(state->MachOperGenerator(VECS));
10123 add_req(def);
10124 // TEMP tmp
10125 def = new MachTempNode(state->MachOperGenerator(VECS));
10126 add_req(def);
10127 // TEMP scratch
10128 def = new MachTempNode(state->MachOperGenerator(RREGI));
10129 add_req(def);
10130
10131 return this;
10132}
10133
10134MachNode* vshift4B_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10135 Compile* C = Compile::current();
10136 // Add projection edges for additional defs or kills
10137 // TEMP dst
10138 MachTempNode *def;
10139 def = new MachTempNode(state->MachOperGenerator(VECS));
10140 add_req(def);
10141 // TEMP tmp
10142 def = new MachTempNode(state->MachOperGenerator(VECS));
10143 add_req(def);
10144 // TEMP scratch
10145 def = new MachTempNode(state->MachOperGenerator(RREGI));
10146 add_req(def);
10147
10148 return this;
10149}
10150
10151MachNode* vshift8BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10152 Compile* C = Compile::current();
10153 // Add projection edges for additional defs or kills
10154 // TEMP dst
10155 MachTempNode *def;
10156 def = new MachTempNode(state->MachOperGenerator(VECD));
10157 add_req(def);
10158 // TEMP tmp
10159 def = new MachTempNode(state->MachOperGenerator(VECD));
10160 add_req(def);
10161 // TEMP scratch
10162 def = new MachTempNode(state->MachOperGenerator(RREGI));
10163 add_req(def);
10164
10165 return this;
10166}
10167
10168MachNode* vshift8B_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10169 Compile* C = Compile::current();
10170 // Add projection edges for additional defs or kills
10171 // TEMP dst
10172 MachTempNode *def;
10173 def = new MachTempNode(state->MachOperGenerator(VECD));
10174 add_req(def);
10175 // TEMP tmp
10176 def = new MachTempNode(state->MachOperGenerator(VECD));
10177 add_req(def);
10178 // TEMP scratch
10179 def = new MachTempNode(state->MachOperGenerator(RREGI));
10180 add_req(def);
10181
10182 return this;
10183}
10184
10185MachNode* vshift8B_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10186 Compile* C = Compile::current();
10187 // Add projection edges for additional defs or kills
10188 // TEMP dst
10189 MachTempNode *def;
10190 def = new MachTempNode(state->MachOperGenerator(VECD));
10191 add_req(def);
10192 // TEMP tmp
10193 def = new MachTempNode(state->MachOperGenerator(VECD));
10194 add_req(def);
10195 // TEMP scratch
10196 def = new MachTempNode(state->MachOperGenerator(RREGI));
10197 add_req(def);
10198
10199 return this;
10200}
10201
10202MachNode* vshift16BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10203 Compile* C = Compile::current();
10204 // Add projection edges for additional defs or kills
10205 // TEMP dst
10206 MachTempNode *def;
10207 def = new MachTempNode(state->MachOperGenerator(VECX));
10208 add_req(def);
10209 // TEMP tmp1
10210 def = new MachTempNode(state->MachOperGenerator(VECX));
10211 add_req(def);
10212 // TEMP tmp2
10213 def = new MachTempNode(state->MachOperGenerator(VECX));
10214 add_req(def);
10215 // TEMP scratch
10216 def = new MachTempNode(state->MachOperGenerator(RREGI));
10217 add_req(def);
10218
10219 return this;
10220}
10221
10222MachNode* vshift16B_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10223 Compile* C = Compile::current();
10224 // Add projection edges for additional defs or kills
10225 // TEMP dst
10226 MachTempNode *def;
10227 def = new MachTempNode(state->MachOperGenerator(VECX));
10228 add_req(def);
10229 // TEMP tmp1
10230 def = new MachTempNode(state->MachOperGenerator(VECX));
10231 add_req(def);
10232 // TEMP tmp2
10233 def = new MachTempNode(state->MachOperGenerator(VECX));
10234 add_req(def);
10235 // TEMP scratch
10236 def = new MachTempNode(state->MachOperGenerator(RREGI));
10237 add_req(def);
10238
10239 return this;
10240}
10241
10242MachNode* vshift16B_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10243 Compile* C = Compile::current();
10244 // Add projection edges for additional defs or kills
10245 // TEMP dst
10246 MachTempNode *def;
10247 def = new MachTempNode(state->MachOperGenerator(VECX));
10248 add_req(def);
10249 // TEMP tmp1
10250 def = new MachTempNode(state->MachOperGenerator(VECX));
10251 add_req(def);
10252 // TEMP tmp2
10253 def = new MachTempNode(state->MachOperGenerator(VECX));
10254 add_req(def);
10255 // TEMP scratch
10256 def = new MachTempNode(state->MachOperGenerator(RREGI));
10257 add_req(def);
10258
10259 return this;
10260}
10261
10262MachNode* vshift16B_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10263 Compile* C = Compile::current();
10264 // Add projection edges for additional defs or kills
10265 // TEMP dst
10266 MachTempNode *def;
10267 def = new MachTempNode(state->MachOperGenerator(VECX));
10268 add_req(def);
10269 // TEMP tmp
10270 def = new MachTempNode(state->MachOperGenerator(VECX));
10271 add_req(def);
10272 // TEMP scratch
10273 def = new MachTempNode(state->MachOperGenerator(RREGI));
10274 add_req(def);
10275
10276 return this;
10277}
10278
10279MachNode* vshift16B_avx_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10280 Compile* C = Compile::current();
10281 // Add projection edges for additional defs or kills
10282 // TEMP dst
10283 MachTempNode *def;
10284 def = new MachTempNode(state->MachOperGenerator(VECX));
10285 add_req(def);
10286 // TEMP tmp
10287 def = new MachTempNode(state->MachOperGenerator(VECX));
10288 add_req(def);
10289 // TEMP scratch
10290 def = new MachTempNode(state->MachOperGenerator(RREGI));
10291 add_req(def);
10292
10293 return this;
10294}
10295
10296MachNode* vshift16B_avx_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10297 Compile* C = Compile::current();
10298 // Add projection edges for additional defs or kills
10299 // TEMP dst
10300 MachTempNode *def;
10301 def = new MachTempNode(state->MachOperGenerator(VECX));
10302 add_req(def);
10303 // TEMP tmp
10304 def = new MachTempNode(state->MachOperGenerator(VECX));
10305 add_req(def);
10306 // TEMP scratch
10307 def = new MachTempNode(state->MachOperGenerator(RREGI));
10308 add_req(def);
10309
10310 return this;
10311}
10312
10313MachNode* vshift32B_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10314 Compile* C = Compile::current();
10315 // Add projection edges for additional defs or kills
10316 // TEMP dst
10317 MachTempNode *def;
10318 def = new MachTempNode(state->MachOperGenerator(VECY));
10319 add_req(def);
10320 // TEMP tmp
10321 def = new MachTempNode(state->MachOperGenerator(VECY));
10322 add_req(def);
10323 // TEMP scratch
10324 def = new MachTempNode(state->MachOperGenerator(RREGI));
10325 add_req(def);
10326
10327 return this;
10328}
10329
10330MachNode* vshift32B_avx_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10331 Compile* C = Compile::current();
10332 // Add projection edges for additional defs or kills
10333 // TEMP dst
10334 MachTempNode *def;
10335 def = new MachTempNode(state->MachOperGenerator(VECY));
10336 add_req(def);
10337 // TEMP tmp
10338 def = new MachTempNode(state->MachOperGenerator(VECY));
10339 add_req(def);
10340 // TEMP scratch
10341 def = new MachTempNode(state->MachOperGenerator(RREGI));
10342 add_req(def);
10343
10344 return this;
10345}
10346
10347MachNode* vshift32B_avx_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10348 Compile* C = Compile::current();
10349 // Add projection edges for additional defs or kills
10350 // TEMP dst
10351 MachTempNode *def;
10352 def = new MachTempNode(state->MachOperGenerator(VECY));
10353 add_req(def);
10354 // TEMP tmp
10355 def = new MachTempNode(state->MachOperGenerator(VECY));
10356 add_req(def);
10357 // TEMP scratch
10358 def = new MachTempNode(state->MachOperGenerator(RREGI));
10359 add_req(def);
10360
10361 return this;
10362}
10363
10364MachNode* vshift64B_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10365 Compile* C = Compile::current();
10366 // Add projection edges for additional defs or kills
10367 // TEMP dst
10368 MachTempNode *def;
10369 def = new MachTempNode(state->MachOperGenerator(VECZ));
10370 add_req(def);
10371 // TEMP tmp1
10372 def = new MachTempNode(state->MachOperGenerator(VECZ));
10373 add_req(def);
10374 // TEMP tmp2
10375 def = new MachTempNode(state->MachOperGenerator(VECZ));
10376 add_req(def);
10377 // TEMP scratch
10378 def = new MachTempNode(state->MachOperGenerator(RREGI));
10379 add_req(def);
10380
10381 return this;
10382}
10383
10384MachNode* vshift64B_avx_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10385 Compile* C = Compile::current();
10386 // Add projection edges for additional defs or kills
10387 // TEMP dst
10388 MachTempNode *def;
10389 def = new MachTempNode(state->MachOperGenerator(VECZ));
10390 add_req(def);
10391 // TEMP tmp1
10392 def = new MachTempNode(state->MachOperGenerator(VECZ));
10393 add_req(def);
10394 // TEMP tmp2
10395 def = new MachTempNode(state->MachOperGenerator(VECZ));
10396 add_req(def);
10397 // TEMP scratch
10398 def = new MachTempNode(state->MachOperGenerator(RREGI));
10399 add_req(def);
10400
10401 return this;
10402}
10403
10404MachNode* vshift64B_avx_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10405 Compile* C = Compile::current();
10406 // Add projection edges for additional defs or kills
10407 // TEMP dst
10408 MachTempNode *def;
10409 def = new MachTempNode(state->MachOperGenerator(VECZ));
10410 add_req(def);
10411 // TEMP tmp1
10412 def = new MachTempNode(state->MachOperGenerator(VECZ));
10413 add_req(def);
10414 // TEMP tmp2
10415 def = new MachTempNode(state->MachOperGenerator(VECZ));
10416 add_req(def);
10417 // TEMP scratch
10418 def = new MachTempNode(state->MachOperGenerator(RREGI));
10419 add_req(def);
10420
10421 return this;
10422}
10423
10424MachNode* vshist2SNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10425 Compile* C = Compile::current();
10426 // Add projection edges for additional defs or kills
10427 // TEMP dst
10428 MachTempNode *def;
10429 def = new MachTempNode(state->MachOperGenerator(VECS));
10430 add_req(def);
10431
10432 return this;
10433}
10434
10435MachNode* vshist2S_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10436 Compile* C = Compile::current();
10437 // Add projection edges for additional defs or kills
10438 // TEMP dst
10439 MachTempNode *def;
10440 def = new MachTempNode(state->MachOperGenerator(VECS));
10441 add_req(def);
10442
10443 return this;
10444}
10445
10446MachNode* vshist2S_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10447 Compile* C = Compile::current();
10448 // Add projection edges for additional defs or kills
10449 // TEMP dst
10450 MachTempNode *def;
10451 def = new MachTempNode(state->MachOperGenerator(VECS));
10452 add_req(def);
10453
10454 return this;
10455}
10456
10457MachNode* vshift4SNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10458 Compile* C = Compile::current();
10459 // Add projection edges for additional defs or kills
10460 // TEMP dst
10461 MachTempNode *def;
10462 def = new MachTempNode(state->MachOperGenerator(VECD));
10463 add_req(def);
10464
10465 return this;
10466}
10467
10468MachNode* vshift4S_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10469 Compile* C = Compile::current();
10470 // Add projection edges for additional defs or kills
10471 // TEMP dst
10472 MachTempNode *def;
10473 def = new MachTempNode(state->MachOperGenerator(VECD));
10474 add_req(def);
10475
10476 return this;
10477}
10478
10479MachNode* vshift4S_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10480 Compile* C = Compile::current();
10481 // Add projection edges for additional defs or kills
10482 // TEMP dst
10483 MachTempNode *def;
10484 def = new MachTempNode(state->MachOperGenerator(VECD));
10485 add_req(def);
10486
10487 return this;
10488}
10489
10490MachNode* vshift8SNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10491 Compile* C = Compile::current();
10492 // Add projection edges for additional defs or kills
10493 // TEMP dst
10494 MachTempNode *def;
10495 def = new MachTempNode(state->MachOperGenerator(VECX));
10496 add_req(def);
10497
10498 return this;
10499}
10500
10501MachNode* vshift8S_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10502 Compile* C = Compile::current();
10503 // Add projection edges for additional defs or kills
10504 // TEMP dst
10505 MachTempNode *def;
10506 def = new MachTempNode(state->MachOperGenerator(VECX));
10507 add_req(def);
10508
10509 return this;
10510}
10511
10512MachNode* vshift8S_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10513 Compile* C = Compile::current();
10514 // Add projection edges for additional defs or kills
10515 // TEMP dst
10516 MachTempNode *def;
10517 def = new MachTempNode(state->MachOperGenerator(VECX));
10518 add_req(def);
10519
10520 return this;
10521}
10522
10523MachNode* vshift2INode::Expand(State* state, Node_List& proj_list, Node* mem) {
10524 Compile* C = Compile::current();
10525 // Add projection edges for additional defs or kills
10526 // TEMP dst
10527 MachTempNode *def;
10528 def = new MachTempNode(state->MachOperGenerator(VECD));
10529 add_req(def);
10530
10531 return this;
10532}
10533
10534MachNode* vshift2I_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10535 Compile* C = Compile::current();
10536 // Add projection edges for additional defs or kills
10537 // TEMP dst
10538 MachTempNode *def;
10539 def = new MachTempNode(state->MachOperGenerator(VECD));
10540 add_req(def);
10541
10542 return this;
10543}
10544
10545MachNode* vshift2I_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10546 Compile* C = Compile::current();
10547 // Add projection edges for additional defs or kills
10548 // TEMP dst
10549 MachTempNode *def;
10550 def = new MachTempNode(state->MachOperGenerator(VECD));
10551 add_req(def);
10552
10553 return this;
10554}
10555
10556MachNode* vshift4INode::Expand(State* state, Node_List& proj_list, Node* mem) {
10557 Compile* C = Compile::current();
10558 // Add projection edges for additional defs or kills
10559 // TEMP dst
10560 MachTempNode *def;
10561 def = new MachTempNode(state->MachOperGenerator(VECX));
10562 add_req(def);
10563
10564 return this;
10565}
10566
10567MachNode* vshift4I_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10568 Compile* C = Compile::current();
10569 // Add projection edges for additional defs or kills
10570 // TEMP dst
10571 MachTempNode *def;
10572 def = new MachTempNode(state->MachOperGenerator(VECX));
10573 add_req(def);
10574
10575 return this;
10576}
10577
10578MachNode* vshift4I_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10579 Compile* C = Compile::current();
10580 // Add projection edges for additional defs or kills
10581 // TEMP dst
10582 MachTempNode *def;
10583 def = new MachTempNode(state->MachOperGenerator(VECX));
10584 add_req(def);
10585
10586 return this;
10587}
10588
10589MachNode* vshift2LNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10590 Compile* C = Compile::current();
10591 // Add projection edges for additional defs or kills
10592 // TEMP dst
10593 MachTempNode *def;
10594 def = new MachTempNode(state->MachOperGenerator(VECX));
10595 add_req(def);
10596
10597 return this;
10598}
10599
10600MachNode* vshift2L_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10601 Compile* C = Compile::current();
10602 // Add projection edges for additional defs or kills
10603 // TEMP dst
10604 MachTempNode *def;
10605 def = new MachTempNode(state->MachOperGenerator(VECX));
10606 add_req(def);
10607
10608 return this;
10609}
10610
10611MachNode* vsra2L_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10612 Compile* C = Compile::current();
10613 // Add projection edges for additional defs or kills
10614 // TEMP dst
10615 MachTempNode *def;
10616 def = new MachTempNode(state->MachOperGenerator(VECX));
10617 add_req(def);
10618 // TEMP tmp
10619 def = new MachTempNode(state->MachOperGenerator(VECX));
10620 add_req(def);
10621 // TEMP scratch
10622 def = new MachTempNode(state->MachOperGenerator(RREGI));
10623 add_req(def);
10624
10625 return this;
10626}
10627
10628MachNode* vsra4L_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10629 Compile* C = Compile::current();
10630 // Add projection edges for additional defs or kills
10631 // TEMP dst
10632 MachTempNode *def;
10633 def = new MachTempNode(state->MachOperGenerator(VECY));
10634 add_req(def);
10635 // TEMP tmp
10636 def = new MachTempNode(state->MachOperGenerator(VECY));
10637 add_req(def);
10638 // TEMP scratch
10639 def = new MachTempNode(state->MachOperGenerator(RREGI));
10640 add_req(def);
10641
10642 return this;
10643}
10644
10645MachNode* vabsneg2DNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10646 Compile* C = Compile::current();
10647 // Add projection edges for additional defs or kills
10648 // TEMP scratch
10649 MachTempNode *def;
10650 def = new MachTempNode(state->MachOperGenerator(RREGI));
10651 add_req(def);
10652
10653 return this;
10654}
10655
10656MachNode* vabsneg2D_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10657 Compile* C = Compile::current();
10658 // Add projection edges for additional defs or kills
10659 // TEMP scratch
10660 MachTempNode *def;
10661 def = new MachTempNode(state->MachOperGenerator(RREGI));
10662 add_req(def);
10663
10664 return this;
10665}
10666
10667MachNode* vabsneg4DNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10668 Compile* C = Compile::current();
10669 // Add projection edges for additional defs or kills
10670 // TEMP scratch
10671 MachTempNode *def;
10672 def = new MachTempNode(state->MachOperGenerator(RREGI));
10673 add_req(def);
10674
10675 return this;
10676}
10677
10678MachNode* vabsneg4D_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10679 Compile* C = Compile::current();
10680 // Add projection edges for additional defs or kills
10681 // TEMP scratch
10682 MachTempNode *def;
10683 def = new MachTempNode(state->MachOperGenerator(RREGI));
10684 add_req(def);
10685
10686 return this;
10687}
10688
10689MachNode* vabsneg8DNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10690 Compile* C = Compile::current();
10691 // Add projection edges for additional defs or kills
10692 // TEMP scratch
10693 MachTempNode *def;
10694 def = new MachTempNode(state->MachOperGenerator(RREGI));
10695 add_req(def);
10696
10697 return this;
10698}
10699
10700MachNode* vabsneg8D_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10701 Compile* C = Compile::current();
10702 // Add projection edges for additional defs or kills
10703 // TEMP scratch
10704 MachTempNode *def;
10705 def = new MachTempNode(state->MachOperGenerator(RREGI));
10706 add_req(def);
10707
10708 return this;
10709}
10710
10711MachNode* vabsneg2FNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10712 Compile* C = Compile::current();
10713 // Add projection edges for additional defs or kills
10714 // TEMP scratch
10715 MachTempNode *def;
10716 def = new MachTempNode(state->MachOperGenerator(RREGI));
10717 add_req(def);
10718
10719 return this;
10720}
10721
10722MachNode* vabsneg2F_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10723 Compile* C = Compile::current();
10724 // Add projection edges for additional defs or kills
10725 // TEMP scratch
10726 MachTempNode *def;
10727 def = new MachTempNode(state->MachOperGenerator(RREGI));
10728 add_req(def);
10729
10730 return this;
10731}
10732
10733MachNode* vabsneg4FNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10734 Compile* C = Compile::current();
10735 // Add projection edges for additional defs or kills
10736 // TEMP scratch
10737 MachTempNode *def;
10738 def = new MachTempNode(state->MachOperGenerator(RREGI));
10739 add_req(def);
10740
10741 return this;
10742}
10743
10744MachNode* vabsneg4F_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10745 Compile* C = Compile::current();
10746 // Add projection edges for additional defs or kills
10747 // TEMP scratch
10748 MachTempNode *def;
10749 def = new MachTempNode(state->MachOperGenerator(RREGI));
10750 add_req(def);
10751
10752 return this;
10753}
10754
10755MachNode* vabsneg8FNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10756 Compile* C = Compile::current();
10757 // Add projection edges for additional defs or kills
10758 // TEMP scratch
10759 MachTempNode *def;
10760 def = new MachTempNode(state->MachOperGenerator(RREGI));
10761 add_req(def);
10762
10763 return this;
10764}
10765
10766MachNode* vabsneg8F_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10767 Compile* C = Compile::current();
10768 // Add projection edges for additional defs or kills
10769 // TEMP scratch
10770 MachTempNode *def;
10771 def = new MachTempNode(state->MachOperGenerator(RREGI));
10772 add_req(def);
10773
10774 return this;
10775}
10776
10777MachNode* vabsneg16FNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10778 Compile* C = Compile::current();
10779 // Add projection edges for additional defs or kills
10780 // TEMP scratch
10781 MachTempNode *def;
10782 def = new MachTempNode(state->MachOperGenerator(RREGI));
10783 add_req(def);
10784
10785 return this;
10786}
10787
10788MachNode* vabsneg16F_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10789 Compile* C = Compile::current();
10790 // Add projection edges for additional defs or kills
10791 // TEMP scratch
10792 MachTempNode *def;
10793 def = new MachTempNode(state->MachOperGenerator(RREGI));
10794 add_req(def);
10795
10796 return this;
10797}
10798
10799MachNode* compareAndSwapP_shenandoahNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10800 Compile* C = Compile::current();
10801 // Add projection edges for additional defs or kills
10802 // DEF/KILL oldval
10803 MachProjNode *kill;
10804 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
10805 proj_list.push(kill);
10806 // TEMP tmp1
10807 MachTempNode *def;
10808 def = new MachTempNode(state->MachOperGenerator(RREGP));
10809 add_req(def);
10810 // TEMP tmp2
10811 def = new MachTempNode(state->MachOperGenerator(RREGP));
10812 add_req(def);
10813 // DEF/KILL cr
10814 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
10815 proj_list.push(kill);
10816
10817 return this;
10818}
10819
10820MachNode* compareAndSwapP_shenandoah_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10821 Compile* C = Compile::current();
10822 // Add projection edges for additional defs or kills
10823 // DEF/KILL oldval
10824 MachProjNode *kill;
10825 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
10826 proj_list.push(kill);
10827 // TEMP tmp1
10828 MachTempNode *def;
10829 def = new MachTempNode(state->MachOperGenerator(RREGP));
10830 add_req(def);
10831 // TEMP tmp2
10832 def = new MachTempNode(state->MachOperGenerator(RREGP));
10833 add_req(def);
10834 // DEF/KILL cr
10835 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
10836 proj_list.push(kill);
10837
10838 return this;
10839}
10840
10841MachNode* compareAndSwapN_shenandoahNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10842 Compile* C = Compile::current();
10843 // Add projection edges for additional defs or kills
10844 // DEF/KILL oldval
10845 MachProjNode *kill;
10846 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegN );
10847 proj_list.push(kill);
10848 // TEMP tmp1
10849 MachTempNode *def;
10850 def = new MachTempNode(state->MachOperGenerator(RREGP));
10851 add_req(def);
10852 // TEMP tmp2
10853 def = new MachTempNode(state->MachOperGenerator(RREGP));
10854 add_req(def);
10855 // DEF/KILL cr
10856 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
10857 proj_list.push(kill);
10858
10859 return this;
10860}
10861
10862MachNode* compareAndSwapN_shenandoah_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10863 Compile* C = Compile::current();
10864 // Add projection edges for additional defs or kills
10865 // DEF/KILL oldval
10866 MachProjNode *kill;
10867 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegN );
10868 proj_list.push(kill);
10869 // TEMP tmp1
10870 MachTempNode *def;
10871 def = new MachTempNode(state->MachOperGenerator(RREGP));
10872 add_req(def);
10873 // TEMP tmp2
10874 def = new MachTempNode(state->MachOperGenerator(RREGP));
10875 add_req(def);
10876 // DEF/KILL cr
10877 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
10878 proj_list.push(kill);
10879
10880 return this;
10881}
10882
10883MachNode* compareAndExchangeN_shenandoahNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10884 Compile* C = Compile::current();
10885 // Add projection edges for additional defs or kills
10886 // TEMP tmp1
10887 MachTempNode *def;
10888 def = new MachTempNode(state->MachOperGenerator(RREGP));
10889 add_req(def);
10890 // TEMP tmp2
10891 def = new MachTempNode(state->MachOperGenerator(RREGP));
10892 add_req(def);
10893 // DEF/KILL cr
10894 MachProjNode *kill;
10895 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
10896 proj_list.push(kill);
10897
10898 return this;
10899}
10900
10901MachNode* compareAndExchangeP_shenandoahNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10902 Compile* C = Compile::current();
10903 // Add projection edges for additional defs or kills
10904 // TEMP tmp1
10905 MachTempNode *def;
10906 def = new MachTempNode(state->MachOperGenerator(RREGP));
10907 add_req(def);
10908 // TEMP tmp2
10909 def = new MachTempNode(state->MachOperGenerator(RREGP));
10910 add_req(def);
10911 // DEF/KILL cr
10912 MachProjNode *kill;
10913 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
10914 proj_list.push(kill);
10915
10916 return this;
10917}
10918
10919MachNode* zLoadBarrierSlowRegXmmAndYmmNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10920 Compile* C = Compile::current();
10921 // Add projection edges for additional defs or kills
10922 // DEF/KILL cr
10923 MachProjNode *kill;
10924 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
10925 proj_list.push(kill);
10926 // DEF/KILL x0
10927 kill = new MachProjNode( this, 2, (XMM0_REG_mask()), Op_VecX );
10928 proj_list.push(kill);
10929 // DEF/KILL x1
10930 kill = new MachProjNode( this, 3, (XMM1_REG_mask()), Op_VecX );
10931 proj_list.push(kill);
10932 // DEF/KILL x2
10933 kill = new MachProjNode( this, 4, (XMM2_REG_mask()), Op_VecX );
10934 proj_list.push(kill);
10935 // DEF/KILL x3
10936 kill = new MachProjNode( this, 5, (XMM3_REG_mask()), Op_VecX );
10937 proj_list.push(kill);
10938 // DEF/KILL x4
10939 kill = new MachProjNode( this, 6, (XMM4_REG_mask()), Op_VecX );
10940 proj_list.push(kill);
10941 // DEF/KILL x5
10942 kill = new MachProjNode( this, 7, (XMM5_REG_mask()), Op_VecX );
10943 proj_list.push(kill);
10944 // DEF/KILL x6
10945 kill = new MachProjNode( this, 8, (XMM6_REG_mask()), Op_VecX );
10946 proj_list.push(kill);
10947 // DEF/KILL x7
10948 kill = new MachProjNode( this, 9, (XMM7_REG_mask()), Op_VecX );
10949 proj_list.push(kill);
10950 // DEF/KILL x8
10951 kill = new MachProjNode( this, 10, (XMM8_REG_mask()), Op_VecX );
10952 proj_list.push(kill);
10953 // DEF/KILL x9
10954 kill = new MachProjNode( this, 11, (XMM9_REG_mask()), Op_VecX );
10955 proj_list.push(kill);
10956 // DEF/KILL x10
10957 kill = new MachProjNode( this, 12, (XMM10_REG_mask()), Op_VecX );
10958 proj_list.push(kill);
10959 // DEF/KILL x11
10960 kill = new MachProjNode( this, 13, (XMM11_REG_mask()), Op_VecX );
10961 proj_list.push(kill);
10962 // DEF/KILL x12
10963 kill = new MachProjNode( this, 14, (XMM12_REG_mask()), Op_VecX );
10964 proj_list.push(kill);
10965 // DEF/KILL x13
10966 kill = new MachProjNode( this, 15, (XMM13_REG_mask()), Op_VecX );
10967 proj_list.push(kill);
10968 // DEF/KILL x14
10969 kill = new MachProjNode( this, 16, (XMM14_REG_mask()), Op_VecX );
10970 proj_list.push(kill);
10971 // DEF/KILL x15
10972 kill = new MachProjNode( this, 17, (XMM15_REG_mask()), Op_VecX );
10973 proj_list.push(kill);
10974
10975 return this;
10976}
10977
10978MachNode* zLoadBarrierSlowRegZmmNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10979 Compile* C = Compile::current();
10980 // Add projection edges for additional defs or kills
10981 // DEF/KILL cr
10982 MachProjNode *kill;
10983 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
10984 proj_list.push(kill);
10985 // DEF/KILL x0
10986 kill = new MachProjNode( this, 2, (XMM0_REG_mask()), Op_VecX );
10987 proj_list.push(kill);
10988 // DEF/KILL x1
10989 kill = new MachProjNode( this, 3, (XMM1_REG_mask()), Op_VecX );
10990 proj_list.push(kill);
10991 // DEF/KILL x2
10992 kill = new MachProjNode( this, 4, (XMM2_REG_mask()), Op_VecX );
10993 proj_list.push(kill);
10994 // DEF/KILL x3
10995 kill = new MachProjNode( this, 5, (XMM3_REG_mask()), Op_VecX );
10996 proj_list.push(kill);
10997 // DEF/KILL x4
10998 kill = new MachProjNode( this, 6, (XMM4_REG_mask()), Op_VecX );
10999 proj_list.push(kill);
11000 // DEF/KILL x5
11001 kill = new MachProjNode( this, 7, (XMM5_REG_mask()), Op_VecX );
11002 proj_list.push(kill);
11003 // DEF/KILL x6
11004 kill = new MachProjNode( this, 8, (XMM6_REG_mask()), Op_VecX );
11005 proj_list.push(kill);
11006 // DEF/KILL x7
11007 kill = new MachProjNode( this, 9, (XMM7_REG_mask()), Op_VecX );
11008 proj_list.push(kill);
11009 // DEF/KILL x8
11010 kill = new MachProjNode( this, 10, (XMM8_REG_mask()), Op_VecX );
11011 proj_list.push(kill);
11012 // DEF/KILL x9
11013 kill = new MachProjNode( this, 11, (XMM9_REG_mask()), Op_VecX );
11014 proj_list.push(kill);
11015 // DEF/KILL x10
11016 kill = new MachProjNode( this, 12, (XMM10_REG_mask()), Op_VecX );
11017 proj_list.push(kill);
11018 // DEF/KILL x11
11019 kill = new MachProjNode( this, 13, (XMM11_REG_mask()), Op_VecX );
11020 proj_list.push(kill);
11021 // DEF/KILL x12
11022 kill = new MachProjNode( this, 14, (XMM12_REG_mask()), Op_VecX );
11023 proj_list.push(kill);
11024 // DEF/KILL x13
11025 kill = new MachProjNode( this, 15, (XMM13_REG_mask()), Op_VecX );
11026 proj_list.push(kill);
11027 // DEF/KILL x14
11028 kill = new MachProjNode( this, 16, (XMM14_REG_mask()), Op_VecX );
11029 proj_list.push(kill);
11030 // DEF/KILL x15
11031 kill = new MachProjNode( this, 17, (XMM15_REG_mask()), Op_VecX );
11032 proj_list.push(kill);
11033 // DEF/KILL x16
11034 kill = new MachProjNode( this, 18, (XMM16_REG_mask()), Op_VecX );
11035 proj_list.push(kill);
11036 // DEF/KILL x17
11037 kill = new MachProjNode( this, 19, (XMM17_REG_mask()), Op_VecX );
11038 proj_list.push(kill);
11039 // DEF/KILL x18
11040 kill = new MachProjNode( this, 20, (XMM18_REG_mask()), Op_VecX );
11041 proj_list.push(kill);
11042 // DEF/KILL x19
11043 kill = new MachProjNode( this, 21, (XMM19_REG_mask()), Op_VecX );
11044 proj_list.push(kill);
11045 // DEF/KILL x20
11046 kill = new MachProjNode( this, 22, (XMM20_REG_mask()), Op_VecX );
11047 proj_list.push(kill);
11048 // DEF/KILL x21
11049 kill = new MachProjNode( this, 23, (XMM21_REG_mask()), Op_VecX );
11050 proj_list.push(kill);
11051 // DEF/KILL x22
11052 kill = new MachProjNode( this, 24, (XMM22_REG_mask()), Op_VecX );
11053 proj_list.push(kill);
11054 // DEF/KILL x23
11055 kill = new MachProjNode( this, 25, (XMM23_REG_mask()), Op_VecX );
11056 proj_list.push(kill);
11057 // DEF/KILL x24
11058 kill = new MachProjNode( this, 26, (XMM24_REG_mask()), Op_VecX );
11059 proj_list.push(kill);
11060 // DEF/KILL x25
11061 kill = new MachProjNode( this, 27, (XMM25_REG_mask()), Op_VecX );
11062 proj_list.push(kill);
11063 // DEF/KILL x26
11064 kill = new MachProjNode( this, 28, (XMM26_REG_mask()), Op_VecX );
11065 proj_list.push(kill);
11066 // DEF/KILL x27
11067 kill = new MachProjNode( this, 29, (XMM27_REG_mask()), Op_VecX );
11068 proj_list.push(kill);
11069 // DEF/KILL x28
11070 kill = new MachProjNode( this, 30, (XMM28_REG_mask()), Op_VecX );
11071 proj_list.push(kill);
11072 // DEF/KILL x29
11073 kill = new MachProjNode( this, 31, (XMM29_REG_mask()), Op_VecX );
11074 proj_list.push(kill);
11075 // DEF/KILL x30
11076 kill = new MachProjNode( this, 32, (XMM30_REG_mask()), Op_VecX );
11077 proj_list.push(kill);
11078 // DEF/KILL x31
11079 kill = new MachProjNode( this, 33, (XMM31_REG_mask()), Op_VecX );
11080 proj_list.push(kill);
11081
11082 return this;
11083}
11084
11085MachNode* zLoadBarrierWeakSlowRegXmmAndYmmNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11086 Compile* C = Compile::current();
11087 // Add projection edges for additional defs or kills
11088 // DEF/KILL cr
11089 MachProjNode *kill;
11090 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11091 proj_list.push(kill);
11092 // DEF/KILL x0
11093 kill = new MachProjNode( this, 2, (XMM0_REG_mask()), Op_VecX );
11094 proj_list.push(kill);
11095 // DEF/KILL x1
11096 kill = new MachProjNode( this, 3, (XMM1_REG_mask()), Op_VecX );
11097 proj_list.push(kill);
11098 // DEF/KILL x2
11099 kill = new MachProjNode( this, 4, (XMM2_REG_mask()), Op_VecX );
11100 proj_list.push(kill);
11101 // DEF/KILL x3
11102 kill = new MachProjNode( this, 5, (XMM3_REG_mask()), Op_VecX );
11103 proj_list.push(kill);
11104 // DEF/KILL x4
11105 kill = new MachProjNode( this, 6, (XMM4_REG_mask()), Op_VecX );
11106 proj_list.push(kill);
11107 // DEF/KILL x5
11108 kill = new MachProjNode( this, 7, (XMM5_REG_mask()), Op_VecX );
11109 proj_list.push(kill);
11110 // DEF/KILL x6
11111 kill = new MachProjNode( this, 8, (XMM6_REG_mask()), Op_VecX );
11112 proj_list.push(kill);
11113 // DEF/KILL x7
11114 kill = new MachProjNode( this, 9, (XMM7_REG_mask()), Op_VecX );
11115 proj_list.push(kill);
11116 // DEF/KILL x8
11117 kill = new MachProjNode( this, 10, (XMM8_REG_mask()), Op_VecX );
11118 proj_list.push(kill);
11119 // DEF/KILL x9
11120 kill = new MachProjNode( this, 11, (XMM9_REG_mask()), Op_VecX );
11121 proj_list.push(kill);
11122 // DEF/KILL x10
11123 kill = new MachProjNode( this, 12, (XMM10_REG_mask()), Op_VecX );
11124 proj_list.push(kill);
11125 // DEF/KILL x11
11126 kill = new MachProjNode( this, 13, (XMM11_REG_mask()), Op_VecX );
11127 proj_list.push(kill);
11128 // DEF/KILL x12
11129 kill = new MachProjNode( this, 14, (XMM12_REG_mask()), Op_VecX );
11130 proj_list.push(kill);
11131 // DEF/KILL x13
11132 kill = new MachProjNode( this, 15, (XMM13_REG_mask()), Op_VecX );
11133 proj_list.push(kill);
11134 // DEF/KILL x14
11135 kill = new MachProjNode( this, 16, (XMM14_REG_mask()), Op_VecX );
11136 proj_list.push(kill);
11137 // DEF/KILL x15
11138 kill = new MachProjNode( this, 17, (XMM15_REG_mask()), Op_VecX );
11139 proj_list.push(kill);
11140
11141 return this;
11142}
11143
11144MachNode* zLoadBarrierWeakSlowRegZmmNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11145 Compile* C = Compile::current();
11146 // Add projection edges for additional defs or kills
11147 // DEF/KILL cr
11148 MachProjNode *kill;
11149 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11150 proj_list.push(kill);
11151 // DEF/KILL x0
11152 kill = new MachProjNode( this, 2, (XMM0_REG_mask()), Op_VecX );
11153 proj_list.push(kill);
11154 // DEF/KILL x1
11155 kill = new MachProjNode( this, 3, (XMM1_REG_mask()), Op_VecX );
11156 proj_list.push(kill);
11157 // DEF/KILL x2
11158 kill = new MachProjNode( this, 4, (XMM2_REG_mask()), Op_VecX );
11159 proj_list.push(kill);
11160 // DEF/KILL x3
11161 kill = new MachProjNode( this, 5, (XMM3_REG_mask()), Op_VecX );
11162 proj_list.push(kill);
11163 // DEF/KILL x4
11164 kill = new MachProjNode( this, 6, (XMM4_REG_mask()), Op_VecX );
11165 proj_list.push(kill);
11166 // DEF/KILL x5
11167 kill = new MachProjNode( this, 7, (XMM5_REG_mask()), Op_VecX );
11168 proj_list.push(kill);
11169 // DEF/KILL x6
11170 kill = new MachProjNode( this, 8, (XMM6_REG_mask()), Op_VecX );
11171 proj_list.push(kill);
11172 // DEF/KILL x7
11173 kill = new MachProjNode( this, 9, (XMM7_REG_mask()), Op_VecX );
11174 proj_list.push(kill);
11175 // DEF/KILL x8
11176 kill = new MachProjNode( this, 10, (XMM8_REG_mask()), Op_VecX );
11177 proj_list.push(kill);
11178 // DEF/KILL x9
11179 kill = new MachProjNode( this, 11, (XMM9_REG_mask()), Op_VecX );
11180 proj_list.push(kill);
11181 // DEF/KILL x10
11182 kill = new MachProjNode( this, 12, (XMM10_REG_mask()), Op_VecX );
11183 proj_list.push(kill);
11184 // DEF/KILL x11
11185 kill = new MachProjNode( this, 13, (XMM11_REG_mask()), Op_VecX );
11186 proj_list.push(kill);
11187 // DEF/KILL x12
11188 kill = new MachProjNode( this, 14, (XMM12_REG_mask()), Op_VecX );
11189 proj_list.push(kill);
11190 // DEF/KILL x13
11191 kill = new MachProjNode( this, 15, (XMM13_REG_mask()), Op_VecX );
11192 proj_list.push(kill);
11193 // DEF/KILL x14
11194 kill = new MachProjNode( this, 16, (XMM14_REG_mask()), Op_VecX );
11195 proj_list.push(kill);
11196 // DEF/KILL x15
11197 kill = new MachProjNode( this, 17, (XMM15_REG_mask()), Op_VecX );
11198 proj_list.push(kill);
11199 // DEF/KILL x16
11200 kill = new MachProjNode( this, 18, (XMM16_REG_mask()), Op_VecX );
11201 proj_list.push(kill);
11202 // DEF/KILL x17
11203 kill = new MachProjNode( this, 19, (XMM17_REG_mask()), Op_VecX );
11204 proj_list.push(kill);
11205 // DEF/KILL x18
11206 kill = new MachProjNode( this, 20, (XMM18_REG_mask()), Op_VecX );
11207 proj_list.push(kill);
11208 // DEF/KILL x19
11209 kill = new MachProjNode( this, 21, (XMM19_REG_mask()), Op_VecX );
11210 proj_list.push(kill);
11211 // DEF/KILL x20
11212 kill = new MachProjNode( this, 22, (XMM20_REG_mask()), Op_VecX );
11213 proj_list.push(kill);
11214 // DEF/KILL x21
11215 kill = new MachProjNode( this, 23, (XMM21_REG_mask()), Op_VecX );
11216 proj_list.push(kill);
11217 // DEF/KILL x22
11218 kill = new MachProjNode( this, 24, (XMM22_REG_mask()), Op_VecX );
11219 proj_list.push(kill);
11220 // DEF/KILL x23
11221 kill = new MachProjNode( this, 25, (XMM23_REG_mask()), Op_VecX );
11222 proj_list.push(kill);
11223 // DEF/KILL x24
11224 kill = new MachProjNode( this, 26, (XMM24_REG_mask()), Op_VecX );
11225 proj_list.push(kill);
11226 // DEF/KILL x25
11227 kill = new MachProjNode( this, 27, (XMM25_REG_mask()), Op_VecX );
11228 proj_list.push(kill);
11229 // DEF/KILL x26
11230 kill = new MachProjNode( this, 28, (XMM26_REG_mask()), Op_VecX );
11231 proj_list.push(kill);
11232 // DEF/KILL x27
11233 kill = new MachProjNode( this, 29, (XMM27_REG_mask()), Op_VecX );
11234 proj_list.push(kill);
11235 // DEF/KILL x28
11236 kill = new MachProjNode( this, 30, (XMM28_REG_mask()), Op_VecX );
11237 proj_list.push(kill);
11238 // DEF/KILL x29
11239 kill = new MachProjNode( this, 31, (XMM29_REG_mask()), Op_VecX );
11240 proj_list.push(kill);
11241 // DEF/KILL x30
11242 kill = new MachProjNode( this, 32, (XMM30_REG_mask()), Op_VecX );
11243 proj_list.push(kill);
11244 // DEF/KILL x31
11245 kill = new MachProjNode( this, 33, (XMM31_REG_mask()), Op_VecX );
11246 proj_list.push(kill);
11247
11248 return this;
11249}
11250
11251MachNode* z_compareAndExchangePNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11252 Compile* C = Compile::current();
11253 // Add projection edges for additional defs or kills
11254 // DEF/KILL cr
11255 MachProjNode *kill;
11256 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11257 proj_list.push(kill);
11258
11259 return this;
11260}
11261
11262MachNode* z_compareAndSwapPNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11263 Compile* C = Compile::current();
11264 // Add projection edges for additional defs or kills
11265 // DEF/KILL oldval
11266 MachProjNode *kill;
11267 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
11268 proj_list.push(kill);
11269 // DEF/KILL cr
11270 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
11271 proj_list.push(kill);
11272
11273 return this;
11274}
11275
11276MachNode* z_compareAndSwapP_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11277 Compile* C = Compile::current();
11278 // Add projection edges for additional defs or kills
11279 // DEF/KILL oldval
11280 MachProjNode *kill;
11281 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
11282 proj_list.push(kill);
11283 // DEF/KILL cr
11284 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
11285 proj_list.push(kill);
11286
11287 return this;
11288}
11289
11290// Check consistency of C++ compilation with ADLC options:
11291// Check adlc -DLINUX=1
11292#ifndef LINUX
11293# error "LINUX must be defined"
11294#endif // LINUX
11295// Check adlc -D_GNU_SOURCE=1
11296#ifndef _GNU_SOURCE
11297# error "_GNU_SOURCE must be defined"
11298#endif // _GNU_SOURCE
11299// Check adlc -DAMD64=1
11300#ifndef AMD64
11301# error "AMD64 must be defined"
11302#endif // AMD64
11303// Check adlc -D_LP64=1
11304#ifndef _LP64
11305# error "_LP64 must be defined"
11306#endif // _LP64
11307