Bug Summary

File:jdk/build/linux-x86_64-server-fastdebug/hotspot/variant-server/gensrc/adfiles/ad_x86_expand.cpp
Warning:line 3249, column 12
Value stored to 'C' during its initialization is never read

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -triple x86_64-pc-linux-gnu -analyze -disable-free -disable-llvm-verifier -discard-value-names -main-file-name ad_x86_expand.cpp -analyzer-store=region -analyzer-opt-analyze-nested-blocks -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=cplusplus -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -mthread-model posix -fno-delete-null-pointer-checks -mframe-pointer=all -relaxed-aliasing -fmath-errno -fno-rounding-math -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -dwarf-column-info -fno-split-dwarf-inlining -debugger-tuning=gdb -resource-dir /usr/lib/llvm-10/lib/clang/10.0.0 -I /home/daniel/Projects/java/jdk/build/linux-x86_64-server-fastdebug/hotspot/variant-server/libjvm/objs/precompiled -D __STDC_FORMAT_MACROS -D __STDC_LIMIT_MACROS -D __STDC_CONSTANT_MACROS -D _GNU_SOURCE -D _REENTRANT -D LIBC=gnu -D LINUX -D VM_LITTLE_ENDIAN -D _LP64=1 -D ASSERT -D CHECK_UNHANDLED_OOPS -D TARGET_ARCH_x86 -D INCLUDE_SUFFIX_OS=_linux -D INCLUDE_SUFFIX_CPU=_x86 -D INCLUDE_SUFFIX_COMPILER=_gcc -D TARGET_COMPILER_gcc -D AMD64 -D HOTSPOT_LIB_ARCH="amd64" -D COMPILER1 -D COMPILER2 -I /home/daniel/Projects/java/jdk/build/linux-x86_64-server-fastdebug/hotspot/variant-server/gensrc/adfiles -I /home/daniel/Projects/java/jdk/src/hotspot/share -I /home/daniel/Projects/java/jdk/src/hotspot/os/linux -I /home/daniel/Projects/java/jdk/src/hotspot/os/posix -I /home/daniel/Projects/java/jdk/src/hotspot/cpu/x86 -I /home/daniel/Projects/java/jdk/src/hotspot/os_cpu/linux_x86 -I /home/daniel/Projects/java/jdk/build/linux-x86_64-server-fastdebug/hotspot/variant-server/gensrc -I /home/daniel/Projects/java/jdk/src/hotspot/share/precompiled -I /home/daniel/Projects/java/jdk/src/hotspot/share/include -I /home/daniel/Projects/java/jdk/src/hotspot/os/posix/include -I /home/daniel/Projects/java/jdk/build/linux-x86_64-server-fastdebug/support/modules_include/java.base -I /home/daniel/Projects/java/jdk/build/linux-x86_64-server-fastdebug/support/modules_include/java.base/linux -I /home/daniel/Projects/java/jdk/src/java.base/share/native/libjimage -I /home/daniel/Projects/java/jdk/build/linux-x86_64-server-fastdebug/hotspot/variant-server/gensrc/adfiles -I /home/daniel/Projects/java/jdk/src/hotspot/share -I /home/daniel/Projects/java/jdk/src/hotspot/os/linux -I /home/daniel/Projects/java/jdk/src/hotspot/os/posix -I /home/daniel/Projects/java/jdk/src/hotspot/cpu/x86 -I /home/daniel/Projects/java/jdk/src/hotspot/os_cpu/linux_x86 -I /home/daniel/Projects/java/jdk/build/linux-x86_64-server-fastdebug/hotspot/variant-server/gensrc -D _FORTIFY_SOURCE=2 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/x86_64-linux-gnu/c++/7.5.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/x86_64-linux-gnu/c++/7.5.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/7.5.0/../../../../include/c++/7.5.0/backward -internal-isystem /usr/local/include -internal-isystem /usr/lib/llvm-10/lib/clang/10.0.0/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -O3 -Wno-format-zero-length -Wno-unused-parameter -Wno-unused -Wno-parentheses -Wno-comment -Wno-unknown-pragmas -Wno-address -Wno-delete-non-virtual-dtor -Wno-char-subscripts -Wno-array-bounds -Wno-int-in-bool-context -Wno-ignored-qualifiers -Wno-missing-field-initializers -Wno-implicit-fallthrough -Wno-empty-body -Wno-strict-overflow -Wno-sequence-point -Wno-maybe-uninitialized -Wno-misleading-indentation -Wno-cast-function-type -Wno-shift-negative-value -std=c++14 -fdeprecated-macro -fdebug-compilation-dir /home/daniel/Projects/java/jdk/make/hotspot -ferror-limit 19 -fmessage-length 0 -fvisibility hidden -stack-protector 1 -fno-rtti -fgnuc-version=4.2.1 -fobjc-runtime=gcc -fdiagnostics-show-option -vectorize-loops -vectorize-slp -analyzer-output=html -faddrsig -o /home/daniel/Projects/java/scan/2021-12-21-193737-8510-1 -x c++ /home/daniel/Projects/java/jdk/build/linux-x86_64-server-fastdebug/hotspot/variant-server/gensrc/adfiles/ad_x86_expand.cpp
1#line 1 "ad_x86_expand.cpp"
2//
3// Copyright (c) 2003, 2021, 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_RBP_REG_mask( 0xc00000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
40const 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 );
41const 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 );
42const 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 );
43const 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 );
44const 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 );
45const 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 );
46const 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 );
47const 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 );
48const 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 );
49const 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 );
50const 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 );
51const RegMask _VECTMASK_REG_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3fff, 0x0, 0x0, 0x0, 0x0 );
52const RegMask _VECTMASK_REG_K1_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3000, 0x0, 0x0, 0x0, 0x0 );
53const RegMask _VECTMASK_REG_K2_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc00, 0x0, 0x0, 0x0, 0x0 );
54const RegMask _VECTMASK_REG_K3_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x300, 0x0, 0x0, 0x0, 0x0 );
55const RegMask _VECTMASK_REG_K4_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc0, 0x0, 0x0, 0x0, 0x0 );
56const RegMask _VECTMASK_REG_K5_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0 );
57const RegMask _VECTMASK_REG_K6_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x0, 0x0, 0x0, 0x0 );
58const RegMask _VECTMASK_REG_K7_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0 );
59const RegMask _INT_FLAGS_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4000, 0x0, 0x0, 0x0, 0x0 );
60const 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 );
61const RegMask _STACK_OR_FLOAT_REG_LEGACY_mask( 0x0, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff );
62const 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 );
63const RegMask _STACK_OR_FLOAT_REG_EVEX_mask( 0x0, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0x10001, 0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff );
64const 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 );
65const RegMask _STACK_OR_DOUBLE_REG_LEGACY_mask( 0x0, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff );
66const 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 );
67const RegMask _STACK_OR_DOUBLE_REG_EVEX_mask( 0x0, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0x30003, 0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff );
68const 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 );
69const 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 );
70const 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 );
71const 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 );
72const 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 );
73const 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 );
74const 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 );
75const 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 );
76const 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 );
77const 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 );
78const 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 );
79const 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 );
80const RegMask _STACK_OR_STACK_SLOTS_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff );
81const RegMask _DYNAMIC_mask( 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 );
82MachNode* loadUB2L_immINode::Expand(State* state, Node_List& proj_list, Node* mem) {
83 Compile* C = Compile::current();
84 // Add projection edges for additional defs or kills
85 // DEF/KILL cr
86 MachProjNode *kill;
87 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
88 proj_list.push(kill);
89
90 return this;
91}
92
93MachNode* loadS2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
94 Compile* C = Compile::current();
95 // Remove duplicated operands and inputs which use the same name.
96 if (num_opnds() == 4) {
97 unsigned num0 = 0;
98 unsigned num1 = opnd_array(1)->num_edges(); // mem
99 unsigned num2 = opnd_array(2)->num_edges(); // twentyfour
100 unsigned num3 = opnd_array(3)->num_edges(); // twentyfour
101 unsigned idx0 = oper_input_base();
102 unsigned idx1 = idx0 + num0;
103 unsigned idx2 = idx1 + num1;
104 unsigned idx3 = idx2 + num2;
105 unsigned idx4 = idx3 + num3;
106 for (int i = idx4 - 1; i >= (int)idx3; i--) {
107 del_req(i);
108 }
109 _num_opnds = 3;
110 } else {
111 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 110, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
112 }
113
114 return this;
115}
116
117MachNode* loadUS2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
118 Compile* C = Compile::current();
119 // Remove duplicated operands and inputs which use the same name.
120 if (num_opnds() == 4) {
121 unsigned num0 = 0;
122 unsigned num1 = opnd_array(1)->num_edges(); // mem
123 unsigned num2 = opnd_array(2)->num_edges(); // twentyfour
124 unsigned num3 = opnd_array(3)->num_edges(); // twentyfour
125 unsigned idx0 = oper_input_base();
126 unsigned idx1 = idx0 + num0;
127 unsigned idx2 = idx1 + num1;
128 unsigned idx3 = idx2 + num2;
129 unsigned idx4 = idx3 + num3;
130 for (int i = idx4 - 1; i >= (int)idx3; i--) {
131 del_req(i);
132 }
133 _num_opnds = 3;
134 } else {
135 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 134, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
136 }
137
138 return this;
139}
140
141MachNode* loadUS2L_immINode::Expand(State* state, Node_List& proj_list, Node* mem) {
142 Compile* C = Compile::current();
143 // Add projection edges for additional defs or kills
144 // DEF/KILL cr
145 MachProjNode *kill;
146 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
147 proj_list.push(kill);
148
149 return this;
150}
151
152MachNode* loadI2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
153 Compile* C = Compile::current();
154 // Remove duplicated operands and inputs which use the same name.
155 if (num_opnds() == 4) {
156 unsigned num0 = 0;
157 unsigned num1 = opnd_array(1)->num_edges(); // mem
158 unsigned num2 = opnd_array(2)->num_edges(); // twentyfour
159 unsigned num3 = opnd_array(3)->num_edges(); // twentyfour
160 unsigned idx0 = oper_input_base();
161 unsigned idx1 = idx0 + num0;
162 unsigned idx2 = idx1 + num1;
163 unsigned idx3 = idx2 + num2;
164 unsigned idx4 = idx3 + num3;
165 for (int i = idx4 - 1; i >= (int)idx3; i--) {
166 del_req(i);
167 }
168 _num_opnds = 3;
169 } else {
170 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 169, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
171 }
172
173 return this;
174}
175
176MachNode* loadI2SNode::Expand(State* state, Node_List& proj_list, Node* mem) {
177 Compile* C = Compile::current();
178 // Remove duplicated operands and inputs which use the same name.
179 if (num_opnds() == 4) {
180 unsigned num0 = 0;
181 unsigned num1 = opnd_array(1)->num_edges(); // mem
182 unsigned num2 = opnd_array(2)->num_edges(); // sixteen
183 unsigned num3 = opnd_array(3)->num_edges(); // sixteen
184 unsigned idx0 = oper_input_base();
185 unsigned idx1 = idx0 + num0;
186 unsigned idx2 = idx1 + num1;
187 unsigned idx3 = idx2 + num2;
188 unsigned idx4 = idx3 + num3;
189 for (int i = idx4 - 1; i >= (int)idx3; i--) {
190 del_req(i);
191 }
192 _num_opnds = 3;
193 } else {
194 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 193, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
195 }
196
197 return this;
198}
199
200MachNode* loadI2L_immU31Node::Expand(State* state, Node_List& proj_list, Node* mem) {
201 Compile* C = Compile::current();
202 // Add projection edges for additional defs or kills
203 // DEF/KILL cr
204 MachProjNode *kill;
205 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
206 proj_list.push(kill);
207
208 return this;
209}
210
211MachNode* maxF_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
212 Compile* C = Compile::current();
213 // Add projection edges for additional defs or kills
214 // TEMP tmp
215 MachTempNode *def;
216 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
217 add_req(def);
218 // TEMP atmp
219 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
220 add_req(def);
221 // TEMP btmp
222 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
223 add_req(def);
224
225 return this;
226}
227
228MachNode* maxF_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
229 Compile* C = Compile::current();
230 // Add projection edges for additional defs or kills
231 // TEMP xmmt
232 MachTempNode *def;
233 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
234 add_req(def);
235 // TEMP tmp
236 def = new MachTempNode(state->MachOperGenerator(RREGI));
237 add_req(def);
238 // DEF/KILL cr
239 MachProjNode *kill;
240 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
241 proj_list.push(kill);
242
243 return this;
244}
245
246MachNode* maxD_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
247 Compile* C = Compile::current();
248 // Add projection edges for additional defs or kills
249 // TEMP tmp
250 MachTempNode *def;
251 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
252 add_req(def);
253 // TEMP atmp
254 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
255 add_req(def);
256 // TEMP btmp
257 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
258 add_req(def);
259
260 return this;
261}
262
263MachNode* maxD_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
264 Compile* C = Compile::current();
265 // Add projection edges for additional defs or kills
266 // TEMP xmmt
267 MachTempNode *def;
268 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
269 add_req(def);
270 // TEMP tmp
271 def = new MachTempNode(state->MachOperGenerator(RREGL));
272 add_req(def);
273 // DEF/KILL cr
274 MachProjNode *kill;
275 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
276 proj_list.push(kill);
277
278 return this;
279}
280
281MachNode* minF_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
282 Compile* C = Compile::current();
283 // Add projection edges for additional defs or kills
284 // TEMP tmp
285 MachTempNode *def;
286 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
287 add_req(def);
288 // TEMP atmp
289 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
290 add_req(def);
291 // TEMP btmp
292 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
293 add_req(def);
294
295 return this;
296}
297
298MachNode* minF_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
299 Compile* C = Compile::current();
300 // Add projection edges for additional defs or kills
301 // TEMP xmmt
302 MachTempNode *def;
303 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
304 add_req(def);
305 // TEMP tmp
306 def = new MachTempNode(state->MachOperGenerator(RREGI));
307 add_req(def);
308 // DEF/KILL cr
309 MachProjNode *kill;
310 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
311 proj_list.push(kill);
312
313 return this;
314}
315
316MachNode* minD_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
317 Compile* C = Compile::current();
318 // Add projection edges for additional defs or kills
319 // TEMP tmp
320 MachTempNode *def;
321 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
322 add_req(def);
323 // TEMP atmp
324 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
325 add_req(def);
326 // TEMP btmp
327 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
328 add_req(def);
329
330 return this;
331}
332
333MachNode* minD_reduction_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
334 Compile* C = Compile::current();
335 // Add projection edges for additional defs or kills
336 // TEMP xmmt
337 MachTempNode *def;
338 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
339 add_req(def);
340 // TEMP tmp
341 def = new MachTempNode(state->MachOperGenerator(RREGL));
342 add_req(def);
343 // DEF/KILL cr
344 MachProjNode *kill;
345 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
346 proj_list.push(kill);
347
348 return this;
349}
350
351MachNode* loadConI0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
352 Compile* C = Compile::current();
353 // Add projection edges for additional defs or kills
354 // DEF/KILL cr
355 MachProjNode *kill;
356 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
357 proj_list.push(kill);
358
359 return this;
360}
361
362MachNode* loadConL0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
363 Compile* C = Compile::current();
364 // Add projection edges for additional defs or kills
365 // DEF/KILL cr
366 MachProjNode *kill;
367 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
368 proj_list.push(kill);
369
370 return this;
371}
372
373MachNode* loadConP0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
374 Compile* C = Compile::current();
375 // Add projection edges for additional defs or kills
376 // DEF/KILL cr
377 MachProjNode *kill;
378 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
379 proj_list.push(kill);
380
381 return this;
382}
383
384MachNode* loadConP31Node::Expand(State* state, Node_List& proj_list, Node* mem) {
385 Compile* C = Compile::current();
386 // Add projection edges for additional defs or kills
387 // DEF/KILL cr
388 MachProjNode *kill;
389 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
390 proj_list.push(kill);
391
392 return this;
393}
394
395MachNode* loadConFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
396 Compile* C = Compile::current();
397 add_req(C->mach_constant_base_node());
398
399 return this;
400}
401
402MachNode* loadConN0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
403 Compile* C = Compile::current();
404 // Add projection edges for additional defs or kills
405 // DEF/KILL cr
406 MachProjNode *kill;
407 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
408 proj_list.push(kill);
409
410 return this;
411}
412
413MachNode* loadConDNode::Expand(State* state, Node_List& proj_list, Node* mem) {
414 Compile* C = Compile::current();
415 add_req(C->mach_constant_base_node());
416
417 return this;
418}
419
420MachNode* bytes_reverse_unsigned_shortNode::Expand(State* state, Node_List& proj_list, Node* mem) {
421 Compile* C = Compile::current();
422 // Add projection edges for additional defs or kills
423 // DEF/KILL cr
424 MachProjNode *kill;
425 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
426 proj_list.push(kill);
427
428 return this;
429}
430
431MachNode* bytes_reverse_shortNode::Expand(State* state, Node_List& proj_list, Node* mem) {
432 Compile* C = Compile::current();
433 // Add projection edges for additional defs or kills
434 // DEF/KILL cr
435 MachProjNode *kill;
436 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
437 proj_list.push(kill);
438
439 return this;
440}
441
442MachNode* countLeadingZerosINode::Expand(State* state, Node_List& proj_list, Node* mem) {
443 Compile* C = Compile::current();
444 // Add projection edges for additional defs or kills
445 // DEF/KILL cr
446 MachProjNode *kill;
447 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
448 proj_list.push(kill);
449
450 return this;
451}
452
453MachNode* countLeadingZerosI_bsrNode::Expand(State* state, Node_List& proj_list, Node* mem) {
454 Compile* C = Compile::current();
455 // Add projection edges for additional defs or kills
456 // DEF/KILL cr
457 MachProjNode *kill;
458 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
459 proj_list.push(kill);
460
461 return this;
462}
463
464MachNode* countLeadingZerosLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
465 Compile* C = Compile::current();
466 // Add projection edges for additional defs or kills
467 // DEF/KILL cr
468 MachProjNode *kill;
469 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
470 proj_list.push(kill);
471
472 return this;
473}
474
475MachNode* countLeadingZerosL_bsrNode::Expand(State* state, Node_List& proj_list, Node* mem) {
476 Compile* C = Compile::current();
477 // Add projection edges for additional defs or kills
478 // DEF/KILL cr
479 MachProjNode *kill;
480 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
481 proj_list.push(kill);
482
483 return this;
484}
485
486MachNode* countTrailingZerosINode::Expand(State* state, Node_List& proj_list, Node* mem) {
487 Compile* C = Compile::current();
488 // Add projection edges for additional defs or kills
489 // DEF/KILL cr
490 MachProjNode *kill;
491 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
492 proj_list.push(kill);
493
494 return this;
495}
496
497MachNode* countTrailingZerosI_bsfNode::Expand(State* state, Node_List& proj_list, Node* mem) {
498 Compile* C = Compile::current();
499 // Add projection edges for additional defs or kills
500 // DEF/KILL cr
501 MachProjNode *kill;
502 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
503 proj_list.push(kill);
504
505 return this;
506}
507
508MachNode* countTrailingZerosLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
509 Compile* C = Compile::current();
510 // Add projection edges for additional defs or kills
511 // DEF/KILL cr
512 MachProjNode *kill;
513 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
514 proj_list.push(kill);
515
516 return this;
517}
518
519MachNode* countTrailingZerosL_bsfNode::Expand(State* state, Node_List& proj_list, Node* mem) {
520 Compile* C = Compile::current();
521 // Add projection edges for additional defs or kills
522 // DEF/KILL cr
523 MachProjNode *kill;
524 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
525 proj_list.push(kill);
526
527 return this;
528}
529
530MachNode* popCountINode::Expand(State* state, Node_List& proj_list, Node* mem) {
531 Compile* C = Compile::current();
532 // Add projection edges for additional defs or kills
533 // DEF/KILL cr
534 MachProjNode *kill;
535 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
536 proj_list.push(kill);
537
538 return this;
539}
540
541MachNode* popCountI_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
542 Compile* C = Compile::current();
543 // Add projection edges for additional defs or kills
544 // DEF/KILL cr
545 MachProjNode *kill;
546 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
547 proj_list.push(kill);
548
549 return this;
550}
551
552MachNode* popCountLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
553 Compile* C = Compile::current();
554 // Add projection edges for additional defs or kills
555 // DEF/KILL cr
556 MachProjNode *kill;
557 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
558 proj_list.push(kill);
559
560 return this;
561}
562
563MachNode* popCountL_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
564 Compile* C = Compile::current();
565 // Add projection edges for additional defs or kills
566 // DEF/KILL cr
567 MachProjNode *kill;
568 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
569 proj_list.push(kill);
570
571 return this;
572}
573
574MachNode* membar_volatileNode::Expand(State* state, Node_List& proj_list, Node* mem) {
575 Compile* C = Compile::current();
576 // Add projection edges for additional defs or kills
577 // DEF/KILL cr
578 MachProjNode *kill;
579 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
580 proj_list.push(kill);
581
582 return this;
583}
584
585MachNode* encodeHeapOopNode::Expand(State* state, Node_List& proj_list, Node* mem) {
586 Compile* C = Compile::current();
587 // Add projection edges for additional defs or kills
588 // DEF/KILL cr
589 MachProjNode *kill;
590 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
591 proj_list.push(kill);
592
593 return this;
594}
595
596MachNode* encodeHeapOop_not_nullNode::Expand(State* state, Node_List& proj_list, Node* mem) {
597 Compile* C = Compile::current();
598 // Add projection edges for additional defs or kills
599 // DEF/KILL cr
600 MachProjNode *kill;
601 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
602 proj_list.push(kill);
603
604 return this;
605}
606
607MachNode* decodeHeapOopNode::Expand(State* state, Node_List& proj_list, Node* mem) {
608 Compile* C = Compile::current();
609 // Add projection edges for additional defs or kills
610 // DEF/KILL cr
611 MachProjNode *kill;
612 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
613 proj_list.push(kill);
614
615 return this;
616}
617
618MachNode* decodeHeapOop_not_nullNode::Expand(State* state, Node_List& proj_list, Node* mem) {
619 Compile* C = Compile::current();
620 // Add projection edges for additional defs or kills
621 // DEF/KILL cr
622 MachProjNode *kill;
623 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
624 proj_list.push(kill);
625
626 return this;
627}
628
629MachNode* encodeKlass_not_nullNode::Expand(State* state, Node_List& proj_list, Node* mem) {
630 Compile* C = Compile::current();
631 // Add projection edges for additional defs or kills
632 // TEMP dst
633 MachTempNode *def;
634 def = new MachTempNode(state->MachOperGenerator(RREGN));
635 add_req(def);
636 // DEF/KILL cr
637 MachProjNode *kill;
638 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
639 proj_list.push(kill);
640
641 return this;
642}
643
644MachNode* decodeKlass_not_nullNode::Expand(State* state, Node_List& proj_list, Node* mem) {
645 Compile* C = Compile::current();
646 // Add projection edges for additional defs or kills
647 // TEMP dst
648 MachTempNode *def;
649 def = new MachTempNode(state->MachOperGenerator(RREGP));
650 add_req(def);
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* jumpXtnd_offsetNode::Expand(State* state, Node_List& proj_list, Node* mem) {
660 Compile* C = Compile::current();
661 // Add projection edges for additional defs or kills
662 // TEMP dest
663 MachTempNode *def;
664 def = new MachTempNode(state->MachOperGenerator(RREGI));
665 add_req(def);
666 add_req(C->mach_constant_base_node());
667
668 return this;
669}
670
671MachNode* jumpXtnd_addrNode::Expand(State* state, Node_List& proj_list, Node* mem) {
672 Compile* C = Compile::current();
673 // Add projection edges for additional defs or kills
674 // TEMP dest
675 MachTempNode *def;
676 def = new MachTempNode(state->MachOperGenerator(RREGI));
677 add_req(def);
678 add_req(C->mach_constant_base_node());
679
680 return this;
681}
682
683MachNode* jumpXtndNode::Expand(State* state, Node_List& proj_list, Node* mem) {
684 Compile* C = Compile::current();
685 // Add projection edges for additional defs or kills
686 // TEMP dest
687 MachTempNode *def;
688 def = new MachTempNode(state->MachOperGenerator(RREGI));
689 add_req(def);
690 add_req(C->mach_constant_base_node());
691
692 return this;
693}
694
695MachNode* cmovI_regUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
696 Compile* C = Compile::current();
697 MachNode *tmp0 = this;
698 MachNode *tmp1 = this;
699 MachNode *tmp2 = this;
700 MachNode *tmp3 = this;
701 MachNode *tmp4 = this;
702 unsigned num0 = 0;
703 unsigned num1 = opnd_array(1)->num_edges();
704 unsigned num2 = opnd_array(2)->num_edges();
705 unsigned num3 = opnd_array(3)->num_edges();
706 unsigned num4 = opnd_array(4)->num_edges();
707 unsigned idx0 = oper_input_base();
708 unsigned idx1 = idx0 + num0;
709 unsigned idx2 = idx1 + num1;
710 unsigned idx3 = idx2 + num2;
711 unsigned idx4 = idx3 + num3;
712 unsigned idx5 = idx4 + num4;
713 MachNode *result = NULL__null;
714
715 cmovI_regUNode *n0 = new cmovI_regUNode();
716 n0->add_req(_in[0]);
717 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
718 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
719 if(tmp1 == this) {
720 for(unsigned i = 0; i < num1; i++) {
721 n0->add_req(_in[i + idx1]);
722 }
723 }
724 else n0->add_req(tmp1);
725 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
726 if(tmp2 == this) {
727 for(unsigned i = 0; i < num2; i++) {
728 n0->add_req(_in[i + idx2]);
729 }
730 }
731 else n0->add_req(tmp2);
732 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
733 if(tmp3 == this) {
734 for(unsigned i = 0; i < num3; i++) {
735 n0->add_req(_in[i + idx3]);
736 }
737 }
738 else n0->add_req(tmp3);
739 tmp3 = n0;
740 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
741 if(tmp4 == this) {
742 for(unsigned i = 0; i < num4; i++) {
743 n0->add_req(_in[i + idx4]);
744 }
745 }
746 else n0->add_req(tmp4);
747 result = n0->Expand( state, proj_list, mem );
748
749
750 return result;
751}
752
753MachNode* cmovI_memUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
754 Compile* C = Compile::current();
755 MachNode *tmp0 = this;
756 MachNode *tmp1 = this;
757 MachNode *tmp2 = this;
758 MachNode *tmp3 = this;
759 MachNode *tmp4 = this;
760 unsigned num0 = 0;
761 unsigned num1 = opnd_array(1)->num_edges();
762 unsigned num2 = opnd_array(2)->num_edges();
763 unsigned num3 = opnd_array(3)->num_edges();
764 unsigned num4 = opnd_array(4)->num_edges();
765 unsigned idx0 = oper_input_base();
766 if (mem == (Node*)1) {
767 idx0--; // Adjust base because memory edge hasn't been inserted yet
768 }
769 unsigned idx1 = idx0 + num0;
770 unsigned idx2 = idx1 + num1;
771 unsigned idx3 = idx2 + num2;
772 unsigned idx4 = idx3 + num3;
773 unsigned idx5 = idx4 + num4;
774 MachNode *result = NULL__null;
775
776 cmovI_memUNode *n0 = new cmovI_memUNode();
777 n0->add_req(_in[0]);
778 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
779 if (mem != (Node*)1) {
780 n0->add_req(_in[1]); // Add memory edge
781 }
782 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
783 if(tmp1 == this) {
784 for(unsigned i = 0; i < num1; i++) {
785 n0->add_req(_in[i + idx1]);
786 }
787 }
788 else n0->add_req(tmp1);
789 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
790 if(tmp2 == this) {
791 for(unsigned i = 0; i < num2; i++) {
792 n0->add_req(_in[i + idx2]);
793 }
794 }
795 else n0->add_req(tmp2);
796 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
797 if(tmp3 == this) {
798 for(unsigned i = 0; i < num3; i++) {
799 n0->add_req(_in[i + idx3]);
800 }
801 }
802 else n0->add_req(tmp3);
803 tmp3 = n0;
804 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
805 if(tmp4 == this) {
806 for(unsigned i = 0; i < num4; i++) {
807 n0->add_req(_in[i + idx4]);
808 }
809 }
810 else n0->add_req(tmp4);
811 result = n0->Expand( state, proj_list, mem );
812
813
814 return result;
815}
816
817MachNode* cmovN_regUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
818 Compile* C = Compile::current();
819 MachNode *tmp0 = this;
820 MachNode *tmp1 = this;
821 MachNode *tmp2 = this;
822 MachNode *tmp3 = this;
823 MachNode *tmp4 = this;
824 unsigned num0 = 0;
825 unsigned num1 = opnd_array(1)->num_edges();
826 unsigned num2 = opnd_array(2)->num_edges();
827 unsigned num3 = opnd_array(3)->num_edges();
828 unsigned num4 = opnd_array(4)->num_edges();
829 unsigned idx0 = oper_input_base();
830 unsigned idx1 = idx0 + num0;
831 unsigned idx2 = idx1 + num1;
832 unsigned idx3 = idx2 + num2;
833 unsigned idx4 = idx3 + num3;
834 unsigned idx5 = idx4 + num4;
835 MachNode *result = NULL__null;
836
837 cmovN_regUNode *n0 = new cmovN_regUNode();
838 n0->add_req(_in[0]);
839 n0->set_opnd_array(0, state->MachOperGenerator(RREGN));
840 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
841 if(tmp1 == this) {
842 for(unsigned i = 0; i < num1; i++) {
843 n0->add_req(_in[i + idx1]);
844 }
845 }
846 else n0->add_req(tmp1);
847 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
848 if(tmp2 == this) {
849 for(unsigned i = 0; i < num2; i++) {
850 n0->add_req(_in[i + idx2]);
851 }
852 }
853 else n0->add_req(tmp2);
854 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
855 if(tmp3 == this) {
856 for(unsigned i = 0; i < num3; i++) {
857 n0->add_req(_in[i + idx3]);
858 }
859 }
860 else n0->add_req(tmp3);
861 tmp3 = n0;
862 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
863 if(tmp4 == this) {
864 for(unsigned i = 0; i < num4; i++) {
865 n0->add_req(_in[i + idx4]);
866 }
867 }
868 else n0->add_req(tmp4);
869 result = n0->Expand( state, proj_list, mem );
870
871
872 return result;
873}
874
875MachNode* cmovP_regUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
876 Compile* C = Compile::current();
877 MachNode *tmp0 = this;
878 MachNode *tmp1 = this;
879 MachNode *tmp2 = this;
880 MachNode *tmp3 = this;
881 MachNode *tmp4 = this;
882 unsigned num0 = 0;
883 unsigned num1 = opnd_array(1)->num_edges();
884 unsigned num2 = opnd_array(2)->num_edges();
885 unsigned num3 = opnd_array(3)->num_edges();
886 unsigned num4 = opnd_array(4)->num_edges();
887 unsigned idx0 = oper_input_base();
888 unsigned idx1 = idx0 + num0;
889 unsigned idx2 = idx1 + num1;
890 unsigned idx3 = idx2 + num2;
891 unsigned idx4 = idx3 + num3;
892 unsigned idx5 = idx4 + num4;
893 MachNode *result = NULL__null;
894
895 cmovP_regUNode *n0 = new cmovP_regUNode();
896 n0->add_req(_in[0]);
897 n0->set_opnd_array(0, state->MachOperGenerator(RREGP));
898 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
899 if(tmp1 == this) {
900 for(unsigned i = 0; i < num1; i++) {
901 n0->add_req(_in[i + idx1]);
902 }
903 }
904 else n0->add_req(tmp1);
905 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
906 if(tmp2 == this) {
907 for(unsigned i = 0; i < num2; i++) {
908 n0->add_req(_in[i + idx2]);
909 }
910 }
911 else n0->add_req(tmp2);
912 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
913 if(tmp3 == this) {
914 for(unsigned i = 0; i < num3; i++) {
915 n0->add_req(_in[i + idx3]);
916 }
917 }
918 else n0->add_req(tmp3);
919 tmp3 = n0;
920 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
921 if(tmp4 == this) {
922 for(unsigned i = 0; i < num4; i++) {
923 n0->add_req(_in[i + idx4]);
924 }
925 }
926 else n0->add_req(tmp4);
927 result = n0->Expand( state, proj_list, mem );
928
929
930 return result;
931}
932
933MachNode* cmovL_regUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
934 Compile* C = Compile::current();
935 MachNode *tmp0 = this;
936 MachNode *tmp1 = this;
937 MachNode *tmp2 = this;
938 MachNode *tmp3 = this;
939 MachNode *tmp4 = this;
940 unsigned num0 = 0;
941 unsigned num1 = opnd_array(1)->num_edges();
942 unsigned num2 = opnd_array(2)->num_edges();
943 unsigned num3 = opnd_array(3)->num_edges();
944 unsigned num4 = opnd_array(4)->num_edges();
945 unsigned idx0 = oper_input_base();
946 unsigned idx1 = idx0 + num0;
947 unsigned idx2 = idx1 + num1;
948 unsigned idx3 = idx2 + num2;
949 unsigned idx4 = idx3 + num3;
950 unsigned idx5 = idx4 + num4;
951 MachNode *result = NULL__null;
952
953 cmovL_regUNode *n0 = new cmovL_regUNode();
954 n0->add_req(_in[0]);
955 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
956 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
957 if(tmp1 == this) {
958 for(unsigned i = 0; i < num1; i++) {
959 n0->add_req(_in[i + idx1]);
960 }
961 }
962 else n0->add_req(tmp1);
963 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
964 if(tmp2 == this) {
965 for(unsigned i = 0; i < num2; i++) {
966 n0->add_req(_in[i + idx2]);
967 }
968 }
969 else n0->add_req(tmp2);
970 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
971 if(tmp3 == this) {
972 for(unsigned i = 0; i < num3; i++) {
973 n0->add_req(_in[i + idx3]);
974 }
975 }
976 else n0->add_req(tmp3);
977 tmp3 = n0;
978 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
979 if(tmp4 == this) {
980 for(unsigned i = 0; i < num4; i++) {
981 n0->add_req(_in[i + idx4]);
982 }
983 }
984 else n0->add_req(tmp4);
985 result = n0->Expand( state, proj_list, mem );
986
987
988 return result;
989}
990
991MachNode* cmovL_memUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
992 Compile* C = Compile::current();
993 MachNode *tmp0 = this;
994 MachNode *tmp1 = this;
995 MachNode *tmp2 = this;
996 MachNode *tmp3 = this;
997 MachNode *tmp4 = this;
998 unsigned num0 = 0;
999 unsigned num1 = opnd_array(1)->num_edges();
1000 unsigned num2 = opnd_array(2)->num_edges();
1001 unsigned num3 = opnd_array(3)->num_edges();
1002 unsigned num4 = opnd_array(4)->num_edges();
1003 unsigned idx0 = oper_input_base();
1004 if (mem == (Node*)1) {
1005 idx0--; // Adjust base because memory edge hasn't been inserted yet
1006 }
1007 unsigned idx1 = idx0 + num0;
1008 unsigned idx2 = idx1 + num1;
1009 unsigned idx3 = idx2 + num2;
1010 unsigned idx4 = idx3 + num3;
1011 unsigned idx5 = idx4 + num4;
1012 MachNode *result = NULL__null;
1013
1014 cmovL_memUNode *n0 = new cmovL_memUNode();
1015 n0->add_req(_in[0]);
1016 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
1017 if (mem != (Node*)1) {
1018 n0->add_req(_in[1]); // Add memory edge
1019 }
1020 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
1021 if(tmp1 == this) {
1022 for(unsigned i = 0; i < num1; i++) {
1023 n0->add_req(_in[i + idx1]);
1024 }
1025 }
1026 else n0->add_req(tmp1);
1027 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
1028 if(tmp2 == this) {
1029 for(unsigned i = 0; i < num2; i++) {
1030 n0->add_req(_in[i + idx2]);
1031 }
1032 }
1033 else n0->add_req(tmp2);
1034 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
1035 if(tmp3 == this) {
1036 for(unsigned i = 0; i < num3; i++) {
1037 n0->add_req(_in[i + idx3]);
1038 }
1039 }
1040 else n0->add_req(tmp3);
1041 tmp3 = n0;
1042 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
1043 if(tmp4 == this) {
1044 for(unsigned i = 0; i < num4; i++) {
1045 n0->add_req(_in[i + idx4]);
1046 }
1047 }
1048 else n0->add_req(tmp4);
1049 result = n0->Expand( state, proj_list, mem );
1050
1051
1052 return result;
1053}
1054
1055MachNode* cmovF_regUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1056 Compile* C = Compile::current();
1057 MachNode *tmp0 = this;
1058 MachNode *tmp1 = this;
1059 MachNode *tmp2 = this;
1060 MachNode *tmp3 = this;
1061 MachNode *tmp4 = this;
1062 unsigned num0 = 0;
1063 unsigned num1 = opnd_array(1)->num_edges();
1064 unsigned num2 = opnd_array(2)->num_edges();
1065 unsigned num3 = opnd_array(3)->num_edges();
1066 unsigned num4 = opnd_array(4)->num_edges();
1067 unsigned idx0 = oper_input_base();
1068 unsigned idx1 = idx0 + num0;
1069 unsigned idx2 = idx1 + num1;
1070 unsigned idx3 = idx2 + num2;
1071 unsigned idx4 = idx3 + num3;
1072 unsigned idx5 = idx4 + num4;
1073 MachNode *result = NULL__null;
1074
1075 cmovF_regUNode *n0 = new cmovF_regUNode();
1076 n0->add_req(_in[0]);
1077 n0->set_opnd_array(0, state->MachOperGenerator(REGF));
1078 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
1079 if(tmp1 == this) {
1080 for(unsigned i = 0; i < num1; i++) {
1081 n0->add_req(_in[i + idx1]);
1082 }
1083 }
1084 else n0->add_req(tmp1);
1085 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
1086 if(tmp2 == this) {
1087 for(unsigned i = 0; i < num2; i++) {
1088 n0->add_req(_in[i + idx2]);
1089 }
1090 }
1091 else n0->add_req(tmp2);
1092 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
1093 if(tmp3 == this) {
1094 for(unsigned i = 0; i < num3; i++) {
1095 n0->add_req(_in[i + idx3]);
1096 }
1097 }
1098 else n0->add_req(tmp3);
1099 tmp3 = n0;
1100 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
1101 if(tmp4 == this) {
1102 for(unsigned i = 0; i < num4; i++) {
1103 n0->add_req(_in[i + idx4]);
1104 }
1105 }
1106 else n0->add_req(tmp4);
1107 result = n0->Expand( state, proj_list, mem );
1108
1109
1110 return result;
1111}
1112
1113MachNode* cmovD_regUCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1114 Compile* C = Compile::current();
1115 MachNode *tmp0 = this;
1116 MachNode *tmp1 = this;
1117 MachNode *tmp2 = this;
1118 MachNode *tmp3 = this;
1119 MachNode *tmp4 = this;
1120 unsigned num0 = 0;
1121 unsigned num1 = opnd_array(1)->num_edges();
1122 unsigned num2 = opnd_array(2)->num_edges();
1123 unsigned num3 = opnd_array(3)->num_edges();
1124 unsigned num4 = opnd_array(4)->num_edges();
1125 unsigned idx0 = oper_input_base();
1126 unsigned idx1 = idx0 + num0;
1127 unsigned idx2 = idx1 + num1;
1128 unsigned idx3 = idx2 + num2;
1129 unsigned idx4 = idx3 + num3;
1130 unsigned idx5 = idx4 + num4;
1131 MachNode *result = NULL__null;
1132
1133 cmovD_regUNode *n0 = new cmovD_regUNode();
1134 n0->add_req(_in[0]);
1135 n0->set_opnd_array(0, state->MachOperGenerator(REGD));
1136 n0->set_opnd_array(1, opnd_array(1)->clone()); // cop
1137 if(tmp1 == this) {
1138 for(unsigned i = 0; i < num1; i++) {
1139 n0->add_req(_in[i + idx1]);
1140 }
1141 }
1142 else n0->add_req(tmp1);
1143 n0->set_opnd_array(2, opnd_array(2)->clone()); // cr
1144 if(tmp2 == this) {
1145 for(unsigned i = 0; i < num2; i++) {
1146 n0->add_req(_in[i + idx2]);
1147 }
1148 }
1149 else n0->add_req(tmp2);
1150 n0->set_opnd_array(3, opnd_array(3)->clone()); // dst
1151 if(tmp3 == this) {
1152 for(unsigned i = 0; i < num3; i++) {
1153 n0->add_req(_in[i + idx3]);
1154 }
1155 }
1156 else n0->add_req(tmp3);
1157 tmp3 = n0;
1158 n0->set_opnd_array(4, opnd_array(4)->clone()); // src
1159 if(tmp4 == this) {
1160 for(unsigned i = 0; i < num4; i++) {
1161 n0->add_req(_in[i + idx4]);
1162 }
1163 }
1164 else n0->add_req(tmp4);
1165 result = n0->Expand( state, proj_list, mem );
1166
1167
1168 return result;
1169}
1170
1171MachNode* addI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1172 Compile* C = Compile::current();
1173 // Add projection edges for additional defs or kills
1174 // DEF/KILL cr
1175 MachProjNode *kill;
1176 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1177 proj_list.push(kill);
1178
1179 return this;
1180}
1181
1182MachNode* addI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1183 Compile* C = Compile::current();
1184 // Add projection edges for additional defs or kills
1185 // DEF/KILL cr
1186 MachProjNode *kill;
1187 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1188 proj_list.push(kill);
1189
1190 return this;
1191}
1192
1193MachNode* addI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1194 Compile* C = Compile::current();
1195 // Add projection edges for additional defs or kills
1196 // DEF/KILL cr
1197 MachProjNode *kill;
1198 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1199 proj_list.push(kill);
1200
1201 return this;
1202}
1203
1204MachNode* addI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1205 Compile* C = Compile::current();
1206 // Add projection edges for additional defs or kills
1207 // DEF/KILL cr
1208 MachProjNode *kill;
1209 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1210 proj_list.push(kill);
1211
1212 return this;
1213}
1214
1215MachNode* addI_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1216 Compile* C = Compile::current();
1217 // Add projection edges for additional defs or kills
1218 // DEF/KILL cr
1219 MachProjNode *kill;
1220 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1221 proj_list.push(kill);
1222 // Remove duplicated operands and inputs which use the same name.
1223 if (num_opnds() == 4) {
1224 unsigned num0 = 0;
1225 unsigned num1 = opnd_array(1)->num_edges(); // dst
1226 unsigned num2 = opnd_array(2)->num_edges(); // dst
1227 unsigned num3 = opnd_array(3)->num_edges(); // src
1228 unsigned idx0 = oper_input_base();
1229 unsigned idx1 = idx0 + num0;
1230 unsigned idx2 = idx1 + num1;
1231 unsigned idx3 = idx2 + num2;
1232 unsigned idx4 = idx3 + num3;
1233 set_opnd_array(2, opnd_array(3)->clone()); // src
1234 for (unsigned i = 0; i < num3; i++) {
1235 set_req(i + idx2, _in[i + idx3]);
1236 }
1237 num2 = num3;
1238 idx3 = idx2 + num2;
1239 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1240 del_req(i);
1241 }
1242 _num_opnds = 3;
1243 } else {
1244 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 1243, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
1245 }
1246
1247 return this;
1248}
1249
1250MachNode* addI_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1251 Compile* C = Compile::current();
1252 // Add projection edges for additional defs or kills
1253 // DEF/KILL cr
1254 MachProjNode *kill;
1255 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1256 proj_list.push(kill);
1257 // Remove duplicated operands and inputs which use the same name.
1258 if (num_opnds() == 4) {
1259 unsigned num0 = 0;
1260 unsigned num1 = opnd_array(1)->num_edges(); // dst
1261 unsigned num2 = opnd_array(2)->num_edges(); // src
1262 unsigned num3 = opnd_array(3)->num_edges(); // dst
1263 unsigned idx0 = oper_input_base();
1264 unsigned idx1 = idx0 + num0;
1265 unsigned idx2 = idx1 + num1;
1266 unsigned idx3 = idx2 + num2;
1267 unsigned idx4 = idx3 + num3;
1268 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1269 del_req(i);
1270 }
1271 _num_opnds = 3;
1272 } else {
1273 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 1272, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
1274 }
1275
1276 return this;
1277}
1278
1279MachNode* addI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1280 Compile* C = Compile::current();
1281 // Add projection edges for additional defs or kills
1282 // DEF/KILL cr
1283 MachProjNode *kill;
1284 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1285 proj_list.push(kill);
1286 // Remove duplicated operands and inputs which use the same name.
1287 if (num_opnds() == 4) {
1288 unsigned num0 = 0;
1289 unsigned num1 = opnd_array(1)->num_edges(); // dst
1290 unsigned num2 = opnd_array(2)->num_edges(); // dst
1291 unsigned num3 = opnd_array(3)->num_edges(); // src
1292 unsigned idx0 = oper_input_base();
1293 unsigned idx1 = idx0 + num0;
1294 unsigned idx2 = idx1 + num1;
1295 unsigned idx3 = idx2 + num2;
1296 unsigned idx4 = idx3 + num3;
1297 set_opnd_array(2, opnd_array(3)->clone()); // src
1298 for (unsigned i = 0; i < num3; i++) {
1299 set_req(i + idx2, _in[i + idx3]);
1300 }
1301 num2 = num3;
1302 idx3 = idx2 + num2;
1303 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1304 del_req(i);
1305 }
1306 _num_opnds = 3;
1307 } else {
1308 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 1307, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
1309 }
1310
1311 return this;
1312}
1313
1314MachNode* incI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1315 Compile* C = Compile::current();
1316 // Add projection edges for additional defs or kills
1317 // DEF/KILL cr
1318 MachProjNode *kill;
1319 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1320 proj_list.push(kill);
1321
1322 return this;
1323}
1324
1325MachNode* incI_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1326 Compile* C = Compile::current();
1327 // Add projection edges for additional defs or kills
1328 // DEF/KILL cr
1329 MachProjNode *kill;
1330 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1331 proj_list.push(kill);
1332 // Remove duplicated operands and inputs which use the same name.
1333 if (num_opnds() == 4) {
1334 unsigned num0 = 0;
1335 unsigned num1 = opnd_array(1)->num_edges(); // dst
1336 unsigned num2 = opnd_array(2)->num_edges(); // dst
1337 unsigned num3 = opnd_array(3)->num_edges(); // src
1338 unsigned idx0 = oper_input_base();
1339 unsigned idx1 = idx0 + num0;
1340 unsigned idx2 = idx1 + num1;
1341 unsigned idx3 = idx2 + num2;
1342 unsigned idx4 = idx3 + num3;
1343 set_opnd_array(2, opnd_array(3)->clone()); // src
1344 for (unsigned i = 0; i < num3; i++) {
1345 set_req(i + idx2, _in[i + idx3]);
1346 }
1347 num2 = num3;
1348 idx3 = idx2 + num2;
1349 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1350 del_req(i);
1351 }
1352 _num_opnds = 3;
1353 } else {
1354 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 1353, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
1355 }
1356
1357 return this;
1358}
1359
1360MachNode* decI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1361 Compile* C = Compile::current();
1362 // Add projection edges for additional defs or kills
1363 // DEF/KILL cr
1364 MachProjNode *kill;
1365 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1366 proj_list.push(kill);
1367
1368 return this;
1369}
1370
1371MachNode* decI_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1372 Compile* C = Compile::current();
1373 // Add projection edges for additional defs or kills
1374 // DEF/KILL cr
1375 MachProjNode *kill;
1376 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1377 proj_list.push(kill);
1378 // Remove duplicated operands and inputs which use the same name.
1379 if (num_opnds() == 4) {
1380 unsigned num0 = 0;
1381 unsigned num1 = opnd_array(1)->num_edges(); // dst
1382 unsigned num2 = opnd_array(2)->num_edges(); // dst
1383 unsigned num3 = opnd_array(3)->num_edges(); // src
1384 unsigned idx0 = oper_input_base();
1385 unsigned idx1 = idx0 + num0;
1386 unsigned idx2 = idx1 + num1;
1387 unsigned idx3 = idx2 + num2;
1388 unsigned idx4 = idx3 + num3;
1389 set_opnd_array(2, opnd_array(3)->clone()); // src
1390 for (unsigned i = 0; i < num3; i++) {
1391 set_req(i + idx2, _in[i + idx3]);
1392 }
1393 num2 = num3;
1394 idx3 = idx2 + num2;
1395 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1396 del_req(i);
1397 }
1398 _num_opnds = 3;
1399 } else {
1400 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 1399, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
1401 }
1402
1403 return this;
1404}
1405
1406MachNode* addL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1407 Compile* C = Compile::current();
1408 // Add projection edges for additional defs or kills
1409 // DEF/KILL cr
1410 MachProjNode *kill;
1411 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1412 proj_list.push(kill);
1413
1414 return this;
1415}
1416
1417MachNode* addL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1418 Compile* C = Compile::current();
1419 // Add projection edges for additional defs or kills
1420 // DEF/KILL cr
1421 MachProjNode *kill;
1422 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1423 proj_list.push(kill);
1424
1425 return this;
1426}
1427
1428MachNode* addL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1429 Compile* C = Compile::current();
1430 // Add projection edges for additional defs or kills
1431 // DEF/KILL cr
1432 MachProjNode *kill;
1433 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1434 proj_list.push(kill);
1435
1436 return this;
1437}
1438
1439MachNode* addL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1440 Compile* C = Compile::current();
1441 // Add projection edges for additional defs or kills
1442 // DEF/KILL cr
1443 MachProjNode *kill;
1444 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1445 proj_list.push(kill);
1446
1447 return this;
1448}
1449
1450MachNode* addL_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1451 Compile* C = Compile::current();
1452 // Add projection edges for additional defs or kills
1453 // DEF/KILL cr
1454 MachProjNode *kill;
1455 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1456 proj_list.push(kill);
1457 // Remove duplicated operands and inputs which use the same name.
1458 if (num_opnds() == 4) {
1459 unsigned num0 = 0;
1460 unsigned num1 = opnd_array(1)->num_edges(); // dst
1461 unsigned num2 = opnd_array(2)->num_edges(); // dst
1462 unsigned num3 = opnd_array(3)->num_edges(); // src
1463 unsigned idx0 = oper_input_base();
1464 unsigned idx1 = idx0 + num0;
1465 unsigned idx2 = idx1 + num1;
1466 unsigned idx3 = idx2 + num2;
1467 unsigned idx4 = idx3 + num3;
1468 set_opnd_array(2, opnd_array(3)->clone()); // src
1469 for (unsigned i = 0; i < num3; i++) {
1470 set_req(i + idx2, _in[i + idx3]);
1471 }
1472 num2 = num3;
1473 idx3 = idx2 + num2;
1474 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1475 del_req(i);
1476 }
1477 _num_opnds = 3;
1478 } else {
1479 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 1478, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
1480 }
1481
1482 return this;
1483}
1484
1485MachNode* addL_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1486 Compile* C = Compile::current();
1487 // Add projection edges for additional defs or kills
1488 // DEF/KILL cr
1489 MachProjNode *kill;
1490 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1491 proj_list.push(kill);
1492 // Remove duplicated operands and inputs which use the same name.
1493 if (num_opnds() == 4) {
1494 unsigned num0 = 0;
1495 unsigned num1 = opnd_array(1)->num_edges(); // dst
1496 unsigned num2 = opnd_array(2)->num_edges(); // src
1497 unsigned num3 = opnd_array(3)->num_edges(); // dst
1498 unsigned idx0 = oper_input_base();
1499 unsigned idx1 = idx0 + num0;
1500 unsigned idx2 = idx1 + num1;
1501 unsigned idx3 = idx2 + num2;
1502 unsigned idx4 = idx3 + num3;
1503 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1504 del_req(i);
1505 }
1506 _num_opnds = 3;
1507 } else {
1508 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 1507, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
1509 }
1510
1511 return this;
1512}
1513
1514MachNode* addL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1515 Compile* C = Compile::current();
1516 // Add projection edges for additional defs or kills
1517 // DEF/KILL cr
1518 MachProjNode *kill;
1519 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1520 proj_list.push(kill);
1521 // Remove duplicated operands and inputs which use the same name.
1522 if (num_opnds() == 4) {
1523 unsigned num0 = 0;
1524 unsigned num1 = opnd_array(1)->num_edges(); // dst
1525 unsigned num2 = opnd_array(2)->num_edges(); // dst
1526 unsigned num3 = opnd_array(3)->num_edges(); // src
1527 unsigned idx0 = oper_input_base();
1528 unsigned idx1 = idx0 + num0;
1529 unsigned idx2 = idx1 + num1;
1530 unsigned idx3 = idx2 + num2;
1531 unsigned idx4 = idx3 + num3;
1532 set_opnd_array(2, opnd_array(3)->clone()); // src
1533 for (unsigned i = 0; i < num3; i++) {
1534 set_req(i + idx2, _in[i + idx3]);
1535 }
1536 num2 = num3;
1537 idx3 = idx2 + num2;
1538 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1539 del_req(i);
1540 }
1541 _num_opnds = 3;
1542 } else {
1543 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 1542, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
1544 }
1545
1546 return this;
1547}
1548
1549MachNode* incL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1550 Compile* C = Compile::current();
1551 // Add projection edges for additional defs or kills
1552 // DEF/KILL cr
1553 MachProjNode *kill;
1554 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1555 proj_list.push(kill);
1556
1557 return this;
1558}
1559
1560MachNode* incL_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1561 Compile* C = Compile::current();
1562 // Add projection edges for additional defs or kills
1563 // DEF/KILL cr
1564 MachProjNode *kill;
1565 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1566 proj_list.push(kill);
1567 // Remove duplicated operands and inputs which use the same name.
1568 if (num_opnds() == 4) {
1569 unsigned num0 = 0;
1570 unsigned num1 = opnd_array(1)->num_edges(); // dst
1571 unsigned num2 = opnd_array(2)->num_edges(); // dst
1572 unsigned num3 = opnd_array(3)->num_edges(); // src
1573 unsigned idx0 = oper_input_base();
1574 unsigned idx1 = idx0 + num0;
1575 unsigned idx2 = idx1 + num1;
1576 unsigned idx3 = idx2 + num2;
1577 unsigned idx4 = idx3 + num3;
1578 set_opnd_array(2, opnd_array(3)->clone()); // src
1579 for (unsigned i = 0; i < num3; i++) {
1580 set_req(i + idx2, _in[i + idx3]);
1581 }
1582 num2 = num3;
1583 idx3 = idx2 + num2;
1584 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1585 del_req(i);
1586 }
1587 _num_opnds = 3;
1588 } else {
1589 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 1588, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
1590 }
1591
1592 return this;
1593}
1594
1595MachNode* decL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1596 Compile* C = Compile::current();
1597 // Add projection edges for additional defs or kills
1598 // DEF/KILL cr
1599 MachProjNode *kill;
1600 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1601 proj_list.push(kill);
1602
1603 return this;
1604}
1605
1606MachNode* decL_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1607 Compile* C = Compile::current();
1608 // Add projection edges for additional defs or kills
1609 // DEF/KILL cr
1610 MachProjNode *kill;
1611 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1612 proj_list.push(kill);
1613 // Remove duplicated operands and inputs which use the same name.
1614 if (num_opnds() == 4) {
1615 unsigned num0 = 0;
1616 unsigned num1 = opnd_array(1)->num_edges(); // dst
1617 unsigned num2 = opnd_array(2)->num_edges(); // dst
1618 unsigned num3 = opnd_array(3)->num_edges(); // src
1619 unsigned idx0 = oper_input_base();
1620 unsigned idx1 = idx0 + num0;
1621 unsigned idx2 = idx1 + num1;
1622 unsigned idx3 = idx2 + num2;
1623 unsigned idx4 = idx3 + num3;
1624 set_opnd_array(2, opnd_array(3)->clone()); // src
1625 for (unsigned i = 0; i < num3; i++) {
1626 set_req(i + idx2, _in[i + idx3]);
1627 }
1628 num2 = num3;
1629 idx3 = idx2 + num2;
1630 for (int i = idx4 - 1; i >= (int)idx3; i--) {
1631 del_req(i);
1632 }
1633 _num_opnds = 3;
1634 } else {
1635 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 1634, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
1636 }
1637
1638 return this;
1639}
1640
1641MachNode* addP_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1642 Compile* C = Compile::current();
1643 // Add projection edges for additional defs or kills
1644 // DEF/KILL cr
1645 MachProjNode *kill;
1646 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1647 proj_list.push(kill);
1648
1649 return this;
1650}
1651
1652MachNode* addP_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1653 Compile* C = Compile::current();
1654 // Add projection edges for additional defs or kills
1655 // DEF/KILL cr
1656 MachProjNode *kill;
1657 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1658 proj_list.push(kill);
1659
1660 return this;
1661}
1662
1663MachNode* storeIConditionalNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1664 Compile* C = Compile::current();
1665 // Add projection edges for additional defs or kills
1666 // DEF/KILL oldval
1667 MachProjNode *kill;
1668 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1669 proj_list.push(kill);
1670
1671 return this;
1672}
1673
1674MachNode* storeLConditionalNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1675 Compile* C = Compile::current();
1676 // Add projection edges for additional defs or kills
1677 // DEF/KILL oldval
1678 MachProjNode *kill;
1679 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
1680 proj_list.push(kill);
1681
1682 return this;
1683}
1684
1685MachNode* compareAndSwapPNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1686 Compile* C = Compile::current();
1687 // Add projection edges for additional defs or kills
1688 // DEF/KILL oldval
1689 MachProjNode *kill;
1690 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
1691 proj_list.push(kill);
1692 // DEF/KILL cr
1693 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1694 proj_list.push(kill);
1695
1696 return this;
1697}
1698
1699MachNode* compareAndSwapP_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1700 Compile* C = Compile::current();
1701 // Add projection edges for additional defs or kills
1702 // DEF/KILL oldval
1703 MachProjNode *kill;
1704 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
1705 proj_list.push(kill);
1706 // DEF/KILL cr
1707 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1708 proj_list.push(kill);
1709
1710 return this;
1711}
1712
1713MachNode* compareAndSwapLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1714 Compile* C = Compile::current();
1715 // Add projection edges for additional defs or kills
1716 // DEF/KILL oldval
1717 MachProjNode *kill;
1718 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
1719 proj_list.push(kill);
1720 // DEF/KILL cr
1721 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1722 proj_list.push(kill);
1723
1724 return this;
1725}
1726
1727MachNode* compareAndSwapL_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1728 Compile* C = Compile::current();
1729 // Add projection edges for additional defs or kills
1730 // DEF/KILL oldval
1731 MachProjNode *kill;
1732 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
1733 proj_list.push(kill);
1734 // DEF/KILL cr
1735 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1736 proj_list.push(kill);
1737
1738 return this;
1739}
1740
1741MachNode* compareAndSwapINode::Expand(State* state, Node_List& proj_list, Node* mem) {
1742 Compile* C = Compile::current();
1743 // Add projection edges for additional defs or kills
1744 // DEF/KILL oldval
1745 MachProjNode *kill;
1746 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1747 proj_list.push(kill);
1748 // DEF/KILL cr
1749 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1750 proj_list.push(kill);
1751
1752 return this;
1753}
1754
1755MachNode* compareAndSwapI_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1756 Compile* C = Compile::current();
1757 // Add projection edges for additional defs or kills
1758 // DEF/KILL oldval
1759 MachProjNode *kill;
1760 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1761 proj_list.push(kill);
1762 // DEF/KILL cr
1763 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1764 proj_list.push(kill);
1765
1766 return this;
1767}
1768
1769MachNode* compareAndSwapBNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1770 Compile* C = Compile::current();
1771 // Add projection edges for additional defs or kills
1772 // DEF/KILL oldval
1773 MachProjNode *kill;
1774 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1775 proj_list.push(kill);
1776 // DEF/KILL cr
1777 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1778 proj_list.push(kill);
1779
1780 return this;
1781}
1782
1783MachNode* compareAndSwapB_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1784 Compile* C = Compile::current();
1785 // Add projection edges for additional defs or kills
1786 // DEF/KILL oldval
1787 MachProjNode *kill;
1788 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1789 proj_list.push(kill);
1790 // DEF/KILL cr
1791 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1792 proj_list.push(kill);
1793
1794 return this;
1795}
1796
1797MachNode* compareAndSwapSNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1798 Compile* C = Compile::current();
1799 // Add projection edges for additional defs or kills
1800 // DEF/KILL oldval
1801 MachProjNode *kill;
1802 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1803 proj_list.push(kill);
1804 // DEF/KILL cr
1805 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1806 proj_list.push(kill);
1807
1808 return this;
1809}
1810
1811MachNode* compareAndSwapS_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1812 Compile* C = Compile::current();
1813 // Add projection edges for additional defs or kills
1814 // DEF/KILL oldval
1815 MachProjNode *kill;
1816 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
1817 proj_list.push(kill);
1818 // DEF/KILL cr
1819 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1820 proj_list.push(kill);
1821
1822 return this;
1823}
1824
1825MachNode* compareAndSwapNNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1826 Compile* C = Compile::current();
1827 // Add projection edges for additional defs or kills
1828 // DEF/KILL oldval
1829 MachProjNode *kill;
1830 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegN );
1831 proj_list.push(kill);
1832 // DEF/KILL cr
1833 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1834 proj_list.push(kill);
1835
1836 return this;
1837}
1838
1839MachNode* compareAndSwapN_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
1840 Compile* C = Compile::current();
1841 // Add projection edges for additional defs or kills
1842 // DEF/KILL oldval
1843 MachProjNode *kill;
1844 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegN );
1845 proj_list.push(kill);
1846 // DEF/KILL cr
1847 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
1848 proj_list.push(kill);
1849
1850 return this;
1851}
1852
1853MachNode* compareAndExchangeBNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1854 Compile* C = Compile::current();
1855 // Add projection edges for additional defs or kills
1856 // DEF/KILL cr
1857 MachProjNode *kill;
1858 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1859 proj_list.push(kill);
1860
1861 return this;
1862}
1863
1864MachNode* compareAndExchangeSNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1865 Compile* C = Compile::current();
1866 // Add projection edges for additional defs or kills
1867 // DEF/KILL cr
1868 MachProjNode *kill;
1869 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1870 proj_list.push(kill);
1871
1872 return this;
1873}
1874
1875MachNode* compareAndExchangeINode::Expand(State* state, Node_List& proj_list, Node* mem) {
1876 Compile* C = Compile::current();
1877 // Add projection edges for additional defs or kills
1878 // DEF/KILL cr
1879 MachProjNode *kill;
1880 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1881 proj_list.push(kill);
1882
1883 return this;
1884}
1885
1886MachNode* compareAndExchangeLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1887 Compile* C = Compile::current();
1888 // Add projection edges for additional defs or kills
1889 // DEF/KILL cr
1890 MachProjNode *kill;
1891 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1892 proj_list.push(kill);
1893
1894 return this;
1895}
1896
1897MachNode* compareAndExchangeNNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1898 Compile* C = Compile::current();
1899 // Add projection edges for additional defs or kills
1900 // DEF/KILL cr
1901 MachProjNode *kill;
1902 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1903 proj_list.push(kill);
1904
1905 return this;
1906}
1907
1908MachNode* compareAndExchangePNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1909 Compile* C = Compile::current();
1910 // Add projection edges for additional defs or kills
1911 // DEF/KILL cr
1912 MachProjNode *kill;
1913 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1914 proj_list.push(kill);
1915
1916 return this;
1917}
1918
1919MachNode* xaddB_no_resNode::Expand(State* state, Node_List& proj_list, Node* mem) {
1920 Compile* C = Compile::current();
1921 // Add projection edges for additional defs or kills
1922 // DEF/KILL cr
1923 MachProjNode *kill;
1924 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
1925 proj_list.push(kill);
1926
1927 return this;
1928}
1929
1930MachNode* xaddBNode::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* xaddS_no_resNode::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* xaddSNode::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* xaddI_no_resNode::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* xaddINode::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* xaddL_no_resNode::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* xaddLNode::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* absI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2008 Compile* C = Compile::current();
2009 // Add projection edges for additional defs or kills
2010 // TEMP dst
2011 MachTempNode *def;
2012 def = new MachTempNode(state->MachOperGenerator(RREGI));
2013 add_req(def);
2014 // TEMP tmp
2015 def = new MachTempNode(state->MachOperGenerator(RREGI));
2016 add_req(def);
2017 // DEF/KILL cr
2018 MachProjNode *kill;
2019 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2020 proj_list.push(kill);
2021
2022 return this;
2023}
2024
2025MachNode* absL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2026 Compile* C = Compile::current();
2027 // Add projection edges for additional defs or kills
2028 // TEMP dst
2029 MachTempNode *def;
2030 def = new MachTempNode(state->MachOperGenerator(RREGL));
2031 add_req(def);
2032 // TEMP tmp
2033 def = new MachTempNode(state->MachOperGenerator(RREGL));
2034 add_req(def);
2035 // DEF/KILL cr
2036 MachProjNode *kill;
2037 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2038 proj_list.push(kill);
2039
2040 return this;
2041}
2042
2043MachNode* subI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2044 Compile* C = Compile::current();
2045 // Add projection edges for additional defs or kills
2046 // DEF/KILL cr
2047 MachProjNode *kill;
2048 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2049 proj_list.push(kill);
2050
2051 return this;
2052}
2053
2054MachNode* subI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2055 Compile* C = Compile::current();
2056 // Add projection edges for additional defs or kills
2057 // DEF/KILL cr
2058 MachProjNode *kill;
2059 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2060 proj_list.push(kill);
2061
2062 return this;
2063}
2064
2065MachNode* subI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2066 Compile* C = Compile::current();
2067 // Add projection edges for additional defs or kills
2068 // DEF/KILL cr
2069 MachProjNode *kill;
2070 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2071 proj_list.push(kill);
2072
2073 return this;
2074}
2075
2076MachNode* subI_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2077 Compile* C = Compile::current();
2078 // Add projection edges for additional defs or kills
2079 // DEF/KILL cr
2080 MachProjNode *kill;
2081 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2082 proj_list.push(kill);
2083 // Remove duplicated operands and inputs which use the same name.
2084 if (num_opnds() == 4) {
2085 unsigned num0 = 0;
2086 unsigned num1 = opnd_array(1)->num_edges(); // dst
2087 unsigned num2 = opnd_array(2)->num_edges(); // dst
2088 unsigned num3 = opnd_array(3)->num_edges(); // src
2089 unsigned idx0 = oper_input_base();
2090 unsigned idx1 = idx0 + num0;
2091 unsigned idx2 = idx1 + num1;
2092 unsigned idx3 = idx2 + num2;
2093 unsigned idx4 = idx3 + num3;
2094 set_opnd_array(2, opnd_array(3)->clone()); // src
2095 for (unsigned i = 0; i < num3; i++) {
2096 set_req(i + idx2, _in[i + idx3]);
2097 }
2098 num2 = num3;
2099 idx3 = idx2 + num2;
2100 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2101 del_req(i);
2102 }
2103 _num_opnds = 3;
2104 } else {
2105 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 2104, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
2106 }
2107
2108 return this;
2109}
2110
2111MachNode* subI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2112 Compile* C = Compile::current();
2113 // Add projection edges for additional defs or kills
2114 // DEF/KILL cr
2115 MachProjNode *kill;
2116 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2117 proj_list.push(kill);
2118 // Remove duplicated operands and inputs which use the same name.
2119 if (num_opnds() == 4) {
2120 unsigned num0 = 0;
2121 unsigned num1 = opnd_array(1)->num_edges(); // dst
2122 unsigned num2 = opnd_array(2)->num_edges(); // dst
2123 unsigned num3 = opnd_array(3)->num_edges(); // src
2124 unsigned idx0 = oper_input_base();
2125 unsigned idx1 = idx0 + num0;
2126 unsigned idx2 = idx1 + num1;
2127 unsigned idx3 = idx2 + num2;
2128 unsigned idx4 = idx3 + num3;
2129 set_opnd_array(2, opnd_array(3)->clone()); // src
2130 for (unsigned i = 0; i < num3; i++) {
2131 set_req(i + idx2, _in[i + idx3]);
2132 }
2133 num2 = num3;
2134 idx3 = idx2 + num2;
2135 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2136 del_req(i);
2137 }
2138 _num_opnds = 3;
2139 } else {
2140 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 2139, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
2141 }
2142
2143 return this;
2144}
2145
2146MachNode* subL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2147 Compile* C = Compile::current();
2148 // Add projection edges for additional defs or kills
2149 // DEF/KILL cr
2150 MachProjNode *kill;
2151 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2152 proj_list.push(kill);
2153
2154 return this;
2155}
2156
2157MachNode* subL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2158 Compile* C = Compile::current();
2159 // Add projection edges for additional defs or kills
2160 // DEF/KILL cr
2161 MachProjNode *kill;
2162 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2163 proj_list.push(kill);
2164
2165 return this;
2166}
2167
2168MachNode* subL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2169 Compile* C = Compile::current();
2170 // Add projection edges for additional defs or kills
2171 // DEF/KILL cr
2172 MachProjNode *kill;
2173 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2174 proj_list.push(kill);
2175
2176 return this;
2177}
2178
2179MachNode* subL_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2180 Compile* C = Compile::current();
2181 // Add projection edges for additional defs or kills
2182 // DEF/KILL cr
2183 MachProjNode *kill;
2184 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2185 proj_list.push(kill);
2186 // Remove duplicated operands and inputs which use the same name.
2187 if (num_opnds() == 4) {
2188 unsigned num0 = 0;
2189 unsigned num1 = opnd_array(1)->num_edges(); // dst
2190 unsigned num2 = opnd_array(2)->num_edges(); // dst
2191 unsigned num3 = opnd_array(3)->num_edges(); // src
2192 unsigned idx0 = oper_input_base();
2193 unsigned idx1 = idx0 + num0;
2194 unsigned idx2 = idx1 + num1;
2195 unsigned idx3 = idx2 + num2;
2196 unsigned idx4 = idx3 + num3;
2197 set_opnd_array(2, opnd_array(3)->clone()); // src
2198 for (unsigned i = 0; i < num3; i++) {
2199 set_req(i + idx2, _in[i + idx3]);
2200 }
2201 num2 = num3;
2202 idx3 = idx2 + num2;
2203 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2204 del_req(i);
2205 }
2206 _num_opnds = 3;
2207 } else {
2208 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 2207, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
2209 }
2210
2211 return this;
2212}
2213
2214MachNode* subL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2215 Compile* C = Compile::current();
2216 // Add projection edges for additional defs or kills
2217 // DEF/KILL cr
2218 MachProjNode *kill;
2219 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2220 proj_list.push(kill);
2221 // Remove duplicated operands and inputs which use the same name.
2222 if (num_opnds() == 4) {
2223 unsigned num0 = 0;
2224 unsigned num1 = opnd_array(1)->num_edges(); // dst
2225 unsigned num2 = opnd_array(2)->num_edges(); // dst
2226 unsigned num3 = opnd_array(3)->num_edges(); // src
2227 unsigned idx0 = oper_input_base();
2228 unsigned idx1 = idx0 + num0;
2229 unsigned idx2 = idx1 + num1;
2230 unsigned idx3 = idx2 + num2;
2231 unsigned idx4 = idx3 + num3;
2232 set_opnd_array(2, opnd_array(3)->clone()); // src
2233 for (unsigned i = 0; i < num3; i++) {
2234 set_req(i + idx2, _in[i + idx3]);
2235 }
2236 num2 = num3;
2237 idx3 = idx2 + num2;
2238 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2239 del_req(i);
2240 }
2241 _num_opnds = 3;
2242 } else {
2243 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 2242, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
2244 }
2245
2246 return this;
2247}
2248
2249MachNode* subP_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2250 Compile* C = Compile::current();
2251 // Add projection edges for additional defs or kills
2252 // DEF/KILL cr
2253 MachProjNode *kill;
2254 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2255 proj_list.push(kill);
2256
2257 return this;
2258}
2259
2260MachNode* negI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2261 Compile* C = Compile::current();
2262 // Add projection edges for additional defs or kills
2263 // DEF/KILL cr
2264 MachProjNode *kill;
2265 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2266 proj_list.push(kill);
2267
2268 return this;
2269}
2270
2271MachNode* negI_rReg_2Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2272 Compile* C = Compile::current();
2273 // Add projection edges for additional defs or kills
2274 // DEF/KILL cr
2275 MachProjNode *kill;
2276 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2277 proj_list.push(kill);
2278
2279 return this;
2280}
2281
2282MachNode* negI_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2283 Compile* C = Compile::current();
2284 // Add projection edges for additional defs or kills
2285 // DEF/KILL cr
2286 MachProjNode *kill;
2287 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2288 proj_list.push(kill);
2289 // Remove duplicated operands and inputs which use the same name.
2290 if (num_opnds() == 4) {
2291 unsigned num0 = 0;
2292 unsigned num1 = opnd_array(1)->num_edges(); // dst
2293 unsigned num2 = opnd_array(2)->num_edges(); // zero
2294 unsigned num3 = opnd_array(3)->num_edges(); // dst
2295 unsigned idx0 = oper_input_base();
2296 unsigned idx1 = idx0 + num0;
2297 unsigned idx2 = idx1 + num1;
2298 unsigned idx3 = idx2 + num2;
2299 unsigned idx4 = idx3 + num3;
2300 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2301 del_req(i);
2302 }
2303 _num_opnds = 3;
2304 } else {
2305 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 2304, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
2306 }
2307
2308 return this;
2309}
2310
2311MachNode* negL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2312 Compile* C = Compile::current();
2313 // Add projection edges for additional defs or kills
2314 // DEF/KILL cr
2315 MachProjNode *kill;
2316 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2317 proj_list.push(kill);
2318
2319 return this;
2320}
2321
2322MachNode* negL_rReg_2Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2323 Compile* C = Compile::current();
2324 // Add projection edges for additional defs or kills
2325 // DEF/KILL cr
2326 MachProjNode *kill;
2327 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2328 proj_list.push(kill);
2329
2330 return this;
2331}
2332
2333MachNode* negL_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2334 Compile* C = Compile::current();
2335 // Add projection edges for additional defs or kills
2336 // DEF/KILL cr
2337 MachProjNode *kill;
2338 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2339 proj_list.push(kill);
2340 // Remove duplicated operands and inputs which use the same name.
2341 if (num_opnds() == 4) {
2342 unsigned num0 = 0;
2343 unsigned num1 = opnd_array(1)->num_edges(); // dst
2344 unsigned num2 = opnd_array(2)->num_edges(); // zero
2345 unsigned num3 = opnd_array(3)->num_edges(); // dst
2346 unsigned idx0 = oper_input_base();
2347 unsigned idx1 = idx0 + num0;
2348 unsigned idx2 = idx1 + num1;
2349 unsigned idx3 = idx2 + num2;
2350 unsigned idx4 = idx3 + num3;
2351 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2352 del_req(i);
2353 }
2354 _num_opnds = 3;
2355 } else {
2356 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 2355, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
2357 }
2358
2359 return this;
2360}
2361
2362MachNode* mulI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2363 Compile* C = Compile::current();
2364 // Add projection edges for additional defs or kills
2365 // DEF/KILL cr
2366 MachProjNode *kill;
2367 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2368 proj_list.push(kill);
2369
2370 return this;
2371}
2372
2373MachNode* mulI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2374 Compile* C = Compile::current();
2375 // Add projection edges for additional defs or kills
2376 // DEF/KILL cr
2377 MachProjNode *kill;
2378 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2379 proj_list.push(kill);
2380
2381 return this;
2382}
2383
2384MachNode* mulI_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2385 Compile* C = Compile::current();
2386 // Add projection edges for additional defs or kills
2387 // DEF/KILL cr
2388 MachProjNode *kill;
2389 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2390 proj_list.push(kill);
2391
2392 return this;
2393}
2394
2395MachNode* mulI_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2396 Compile* C = Compile::current();
2397 // Add projection edges for additional defs or kills
2398 // DEF/KILL cr
2399 MachProjNode *kill;
2400 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2401 proj_list.push(kill);
2402
2403 return this;
2404}
2405
2406MachNode* mulI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2407 Compile* C = Compile::current();
2408 // Add projection edges for additional defs or kills
2409 // DEF/KILL cr
2410 MachProjNode *kill;
2411 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2412 proj_list.push(kill);
2413
2414 return this;
2415}
2416
2417MachNode* mulAddS2I_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2418 Compile* C = Compile::current();
2419 MachNode *tmp0 = this;
2420 MachNode *tmp1 = this;
2421 MachNode *tmp2 = this;
2422 MachNode *tmp3 = this;
2423 MachNode *tmp4 = this;
2424 unsigned num0 = 0;
2425 unsigned num1 = opnd_array(1)->num_edges();
2426 unsigned num2 = opnd_array(2)->num_edges();
2427 unsigned num3 = opnd_array(3)->num_edges();
2428 unsigned num4 = opnd_array(4)->num_edges();
2429 unsigned idx0 = oper_input_base();
2430 unsigned idx1 = idx0 + num0;
2431 unsigned idx2 = idx1 + num1;
2432 unsigned idx3 = idx2 + num2;
2433 unsigned idx4 = idx3 + num3;
2434 unsigned idx5 = idx4 + num4;
2435 MachNode *result = NULL__null;
2436
2437 mulI_rRegNode *n0 = new mulI_rRegNode();
2438 n0->add_req(_in[0]);
2439 n0->set_opnd_array(0, state->MachOperGenerator(RREGI));
2440 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
2441 if(tmp1 == this) {
2442 for(unsigned i = 0; i < num1; i++) {
2443 n0->add_req(_in[i + idx1]);
2444 }
2445 }
2446 else n0->add_req(tmp1);
2447 tmp1 = n0;
2448 n0->set_opnd_array(2, opnd_array(2)->clone()); // src1
2449 if(tmp2 == this) {
2450 for(unsigned i = 0; i < num2; i++) {
2451 n0->add_req(_in[i + idx2]);
2452 }
2453 }
2454 else n0->add_req(tmp2);
2455 result = n0->Expand( state, proj_list, mem );
2456
2457 mulI_rRegNode *n1 = new mulI_rRegNode();
2458 n1->add_req(_in[0]);
2459 n1->set_opnd_array(0, state->MachOperGenerator(RREGI));
2460 n1->set_opnd_array(1, opnd_array(3)->clone()); // src2
2461 if(tmp3 == this) {
2462 for(unsigned i = 0; i < num3; i++) {
2463 n1->add_req(_in[i + idx3]);
2464 }
2465 }
2466 else n1->add_req(tmp3);
2467 tmp3 = n1;
2468 n1->set_opnd_array(2, opnd_array(4)->clone()); // src3
2469 if(tmp4 == this) {
2470 for(unsigned i = 0; i < num4; i++) {
2471 n1->add_req(_in[i + idx4]);
2472 }
2473 }
2474 else n1->add_req(tmp4);
2475 result = n1->Expand( state, proj_list, mem );
2476
2477 addI_rRegNode *n2 = new addI_rRegNode();
2478 n2->add_req(_in[0]);
2479 n2->set_opnd_array(0, state->MachOperGenerator(RREGI));
2480 n2->set_opnd_array(1, opnd_array(1)->clone()); // dst
2481 if(tmp1 == this) {
2482 for(unsigned i = 0; i < num1; i++) {
2483 n2->add_req(_in[i + idx1]);
2484 }
2485 }
2486 else n2->add_req(tmp1);
2487 tmp1 = n2;
2488 n2->set_opnd_array(2, opnd_array(3)->clone()); // src2
2489 if(tmp3 == this) {
2490 for(unsigned i = 0; i < num3; i++) {
2491 n2->add_req(_in[i + idx3]);
2492 }
2493 }
2494 else n2->add_req(tmp3);
2495 result = n2->Expand( state, proj_list, mem );
2496
2497
2498 return result;
2499}
2500
2501MachNode* mulL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2502 Compile* C = Compile::current();
2503 // Add projection edges for additional defs or kills
2504 // DEF/KILL cr
2505 MachProjNode *kill;
2506 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2507 proj_list.push(kill);
2508
2509 return this;
2510}
2511
2512MachNode* mulL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2513 Compile* C = Compile::current();
2514 // Add projection edges for additional defs or kills
2515 // DEF/KILL cr
2516 MachProjNode *kill;
2517 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2518 proj_list.push(kill);
2519
2520 return this;
2521}
2522
2523MachNode* mulL_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2524 Compile* C = Compile::current();
2525 // Add projection edges for additional defs or kills
2526 // DEF/KILL cr
2527 MachProjNode *kill;
2528 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2529 proj_list.push(kill);
2530
2531 return this;
2532}
2533
2534MachNode* mulL_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2535 Compile* C = Compile::current();
2536 // Add projection edges for additional defs or kills
2537 // DEF/KILL cr
2538 MachProjNode *kill;
2539 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2540 proj_list.push(kill);
2541
2542 return this;
2543}
2544
2545MachNode* mulL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2546 Compile* C = Compile::current();
2547 // Add projection edges for additional defs or kills
2548 // DEF/KILL cr
2549 MachProjNode *kill;
2550 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2551 proj_list.push(kill);
2552
2553 return this;
2554}
2555
2556MachNode* mulHiL_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 rax
2560 MachProjNode *kill;
2561 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
2562 proj_list.push(kill);
2563 // DEF/KILL cr
2564 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2565 proj_list.push(kill);
2566
2567 return this;
2568}
2569
2570MachNode* umulHiL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2571 Compile* C = Compile::current();
2572 // Add projection edges for additional defs or kills
2573 // DEF/KILL rax
2574 MachProjNode *kill;
2575 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
2576 proj_list.push(kill);
2577 // DEF/KILL cr
2578 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2579 proj_list.push(kill);
2580
2581 return this;
2582}
2583
2584MachNode* divI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2585 Compile* C = Compile::current();
2586 // Add projection edges for additional defs or kills
2587 // DEF/KILL rdx
2588 MachProjNode *kill;
2589 kill = new MachProjNode( this, 1, (INT_RDX_REG_mask()), Op_RegI );
2590 proj_list.push(kill);
2591 // DEF/KILL cr
2592 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2593 proj_list.push(kill);
2594
2595 return this;
2596}
2597
2598MachNode* divL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2599 Compile* C = Compile::current();
2600 // Add projection edges for additional defs or kills
2601 // DEF/KILL rdx
2602 MachProjNode *kill;
2603 kill = new MachProjNode( this, 1, (LONG_RDX_REG_mask()), Op_RegL );
2604 proj_list.push(kill);
2605 // DEF/KILL cr
2606 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2607 proj_list.push(kill);
2608
2609 return this;
2610}
2611
2612MachNode* divModI_rReg_divmodNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2613 Compile* C = Compile::current();
2614 // Add projection edges for additional defs or kills
2615 // DEF/KILL cr
2616 MachProjNode *kill;
2617 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2618 proj_list.push(kill);
2619
2620 return this;
2621}
2622
2623MachNode* divModL_rReg_divmodNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2624 Compile* C = Compile::current();
2625 // Add projection edges for additional defs or kills
2626 // DEF/KILL cr
2627 MachProjNode *kill;
2628 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2629 proj_list.push(kill);
2630
2631 return this;
2632}
2633
2634MachNode* mul_hiNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2635 Compile* C = Compile::current();
2636 // Add projection edges for additional defs or kills
2637 // DEF/KILL rax
2638 MachProjNode *kill;
2639 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
2640 proj_list.push(kill);
2641 // DEF/KILL cr
2642 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2643 proj_list.push(kill);
2644
2645 return this;
2646}
2647
2648MachNode* sarL_rReg_63Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2649 Compile* C = Compile::current();
2650 // Add projection edges for additional defs or kills
2651 // DEF/KILL cr
2652 MachProjNode *kill;
2653 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2654 proj_list.push(kill);
2655
2656 return this;
2657}
2658
2659MachNode* sarL_rReg_2Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2660 Compile* C = Compile::current();
2661 // Add projection edges for additional defs or kills
2662 // DEF/KILL cr
2663 MachProjNode *kill;
2664 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2665 proj_list.push(kill);
2666
2667 return this;
2668}
2669
2670MachNode* divL_10Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2671 Compile* C = Compile::current();
2672 MachOper *op0 = new rax_RegLOper();
2673 MachOper *op1 = new rFlagsRegOper();
2674 MachNode *tmp0 = this;
2675 MachNode *tmp1 = this;
2676 MachNode *tmp2 = this;
2677 MachNode *tmp3 = NULL__null;
2678 MachNode *tmp4 = NULL__null;
2679 unsigned num0 = 0;
2680 unsigned num1 = opnd_array(1)->num_edges();
2681 unsigned num2 = opnd_array(2)->num_edges();
2682 unsigned idx0 = oper_input_base();
2683 unsigned idx1 = idx0 + num0;
2684 unsigned idx2 = idx1 + num1;
2685 unsigned idx3 = idx2 + num2;
2686 MachNode *result = NULL__null;
2687
2688 loadConL_0x6666666666666667Node *n0 = new loadConL_0x6666666666666667Node();
2689 n0->add_req(_in[0]);
2690 n0->set_opnd_array(0, state->MachOperGenerator(RREGL));
2691 tmp3 = n0;
2692 result = n0->Expand( state, proj_list, mem );
2693
2694 mul_hiNode *n1 = new mul_hiNode();
2695 n1->add_req(_in[0]);
2696 n1->set_opnd_array(0, state->MachOperGenerator(RDX_REGL));
2697 tmp0 = n1;
2698 n1->set_opnd_array(1, opnd_array(1)->clone()); // src
2699 if(tmp1 == this) {
2700 for(unsigned i = 0; i < num1; i++) {
2701 n1->add_req(_in[i + idx1]);
2702 }
2703 }
2704 else n1->add_req(tmp1);
2705 n1->set_opnd_array(2, op0->clone()); // rax
2706 if(tmp3 != NULL__null)
2707 n1->add_req(tmp3);
2708 result = n1->Expand( state, proj_list, mem );
2709
2710 sarL_rReg_63Node *n2 = new sarL_rReg_63Node();
2711 n2->add_req(_in[0]);
2712 n2->set_opnd_array(0, state->MachOperGenerator(RREGL));
2713 n2->set_opnd_array(1, opnd_array(1)->clone()); // src
2714 if(tmp1 == this) {
2715 for(unsigned i = 0; i < num1; i++) {
2716 n2->add_req(_in[i + idx1]);
2717 }
2718 }
2719 else n2->add_req(tmp1);
2720 tmp1 = n2;
2721 result = n2->Expand( state, proj_list, mem );
2722
2723 sarL_rReg_2Node *n3 = new sarL_rReg_2Node();
2724 n3->add_req(_in[0]);
2725 n3->set_opnd_array(0, state->MachOperGenerator(RREGL));
2726 n3->set_opnd_array(1, opnd_array(0)->clone()); // dst
2727 if(tmp0 == this) {
2728 for(unsigned i = 0; i < num0; i++) {
2729 n3->add_req(_in[i + idx0]);
2730 }
2731 }
2732 else n3->add_req(tmp0);
2733 tmp0 = n3;
2734 result = n3->Expand( state, proj_list, mem );
2735
2736 subL_rRegNode *n4 = new subL_rRegNode();
2737 n4->add_req(_in[0]);
2738 n4->set_opnd_array(0, state->MachOperGenerator(RREGL));
2739 n4->set_opnd_array(1, opnd_array(0)->clone()); // dst
2740 if(tmp0 == this) {
2741 for(unsigned i = 0; i < num0; i++) {
2742 n4->add_req(_in[i + idx0]);
2743 }
2744 }
2745 else n4->add_req(tmp0);
2746 tmp0 = n4;
2747 n4->set_opnd_array(2, opnd_array(1)->clone()); // src
2748 if(tmp1 == this) {
2749 for(unsigned i = 0; i < num1; i++) {
2750 n4->add_req(_in[i + idx1]);
2751 }
2752 }
2753 else n4->add_req(tmp1);
2754 result = n4->Expand( state, proj_list, mem );
2755
2756
2757 return result;
2758}
2759
2760MachNode* modI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2761 Compile* C = Compile::current();
2762 // Add projection edges for additional defs or kills
2763 // DEF/KILL rax
2764 MachProjNode *kill;
2765 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
2766 proj_list.push(kill);
2767 // DEF/KILL cr
2768 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2769 proj_list.push(kill);
2770
2771 return this;
2772}
2773
2774MachNode* modL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2775 Compile* C = Compile::current();
2776 // Add projection edges for additional defs or kills
2777 // DEF/KILL rax
2778 MachProjNode *kill;
2779 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
2780 proj_list.push(kill);
2781 // DEF/KILL cr
2782 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
2783 proj_list.push(kill);
2784
2785 return this;
2786}
2787
2788MachNode* salI_rReg_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2789 Compile* C = Compile::current();
2790 // Add projection edges for additional defs or kills
2791 // DEF/KILL cr
2792 MachProjNode *kill;
2793 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2794 proj_list.push(kill);
2795
2796 return this;
2797}
2798
2799MachNode* salI_mem_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2800 Compile* C = Compile::current();
2801 // Add projection edges for additional defs or kills
2802 // DEF/KILL cr
2803 MachProjNode *kill;
2804 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2805 proj_list.push(kill);
2806 // Remove duplicated operands and inputs which use the same name.
2807 if (num_opnds() == 4) {
2808 unsigned num0 = 0;
2809 unsigned num1 = opnd_array(1)->num_edges(); // dst
2810 unsigned num2 = opnd_array(2)->num_edges(); // dst
2811 unsigned num3 = opnd_array(3)->num_edges(); // shift
2812 unsigned idx0 = oper_input_base();
2813 unsigned idx1 = idx0 + num0;
2814 unsigned idx2 = idx1 + num1;
2815 unsigned idx3 = idx2 + num2;
2816 unsigned idx4 = idx3 + num3;
2817 set_opnd_array(2, opnd_array(3)->clone()); // shift
2818 for (unsigned i = 0; i < num3; i++) {
2819 set_req(i + idx2, _in[i + idx3]);
2820 }
2821 num2 = num3;
2822 idx3 = idx2 + num2;
2823 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2824 del_req(i);
2825 }
2826 _num_opnds = 3;
2827 } else {
2828 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 2827, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
2829 }
2830
2831 return this;
2832}
2833
2834MachNode* salI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2835 Compile* C = Compile::current();
2836 // Add projection edges for additional defs or kills
2837 // DEF/KILL cr
2838 MachProjNode *kill;
2839 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2840 proj_list.push(kill);
2841
2842 return this;
2843}
2844
2845MachNode* salI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2846 Compile* C = Compile::current();
2847 // Add projection edges for additional defs or kills
2848 // DEF/KILL cr
2849 MachProjNode *kill;
2850 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2851 proj_list.push(kill);
2852 // Remove duplicated operands and inputs which use the same name.
2853 if (num_opnds() == 4) {
2854 unsigned num0 = 0;
2855 unsigned num1 = opnd_array(1)->num_edges(); // dst
2856 unsigned num2 = opnd_array(2)->num_edges(); // dst
2857 unsigned num3 = opnd_array(3)->num_edges(); // shift
2858 unsigned idx0 = oper_input_base();
2859 unsigned idx1 = idx0 + num0;
2860 unsigned idx2 = idx1 + num1;
2861 unsigned idx3 = idx2 + num2;
2862 unsigned idx4 = idx3 + num3;
2863 set_opnd_array(2, opnd_array(3)->clone()); // shift
2864 for (unsigned i = 0; i < num3; i++) {
2865 set_req(i + idx2, _in[i + idx3]);
2866 }
2867 num2 = num3;
2868 idx3 = idx2 + num2;
2869 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2870 del_req(i);
2871 }
2872 _num_opnds = 3;
2873 } else {
2874 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 2873, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
2875 }
2876
2877 return this;
2878}
2879
2880MachNode* salI_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2881 Compile* C = Compile::current();
2882 // Add projection edges for additional defs or kills
2883 // DEF/KILL cr
2884 MachProjNode *kill;
2885 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2886 proj_list.push(kill);
2887
2888 return this;
2889}
2890
2891MachNode* salI_mem_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2892 Compile* C = Compile::current();
2893 // Add projection edges for additional defs or kills
2894 // DEF/KILL cr
2895 MachProjNode *kill;
2896 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2897 proj_list.push(kill);
2898 // Remove duplicated operands and inputs which use the same name.
2899 if (num_opnds() == 4) {
2900 unsigned num0 = 0;
2901 unsigned num1 = opnd_array(1)->num_edges(); // dst
2902 unsigned num2 = opnd_array(2)->num_edges(); // dst
2903 unsigned num3 = opnd_array(3)->num_edges(); // shift
2904 unsigned idx0 = oper_input_base();
2905 unsigned idx1 = idx0 + num0;
2906 unsigned idx2 = idx1 + num1;
2907 unsigned idx3 = idx2 + num2;
2908 unsigned idx4 = idx3 + num3;
2909 set_opnd_array(2, opnd_array(3)->clone()); // shift
2910 for (unsigned i = 0; i < num3; i++) {
2911 set_req(i + idx2, _in[i + idx3]);
2912 }
2913 num2 = num3;
2914 idx3 = idx2 + num2;
2915 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2916 del_req(i);
2917 }
2918 _num_opnds = 3;
2919 } else {
2920 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 2919, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
2921 }
2922
2923 return this;
2924}
2925
2926MachNode* sarI_rReg_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2927 Compile* C = Compile::current();
2928 // Add projection edges for additional defs or kills
2929 // DEF/KILL cr
2930 MachProjNode *kill;
2931 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2932 proj_list.push(kill);
2933
2934 return this;
2935}
2936
2937MachNode* sarI_mem_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
2938 Compile* C = Compile::current();
2939 // Add projection edges for additional defs or kills
2940 // DEF/KILL cr
2941 MachProjNode *kill;
2942 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2943 proj_list.push(kill);
2944 // Remove duplicated operands and inputs which use the same name.
2945 if (num_opnds() == 4) {
2946 unsigned num0 = 0;
2947 unsigned num1 = opnd_array(1)->num_edges(); // dst
2948 unsigned num2 = opnd_array(2)->num_edges(); // dst
2949 unsigned num3 = opnd_array(3)->num_edges(); // shift
2950 unsigned idx0 = oper_input_base();
2951 unsigned idx1 = idx0 + num0;
2952 unsigned idx2 = idx1 + num1;
2953 unsigned idx3 = idx2 + num2;
2954 unsigned idx4 = idx3 + num3;
2955 set_opnd_array(2, opnd_array(3)->clone()); // shift
2956 for (unsigned i = 0; i < num3; i++) {
2957 set_req(i + idx2, _in[i + idx3]);
2958 }
2959 num2 = num3;
2960 idx3 = idx2 + num2;
2961 for (int i = idx4 - 1; i >= (int)idx3; i--) {
2962 del_req(i);
2963 }
2964 _num_opnds = 3;
2965 } else {
2966 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 2965, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
2967 }
2968
2969 return this;
2970}
2971
2972MachNode* sarI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2973 Compile* C = Compile::current();
2974 // Add projection edges for additional defs or kills
2975 // DEF/KILL cr
2976 MachProjNode *kill;
2977 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2978 proj_list.push(kill);
2979
2980 return this;
2981}
2982
2983MachNode* sarI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
2984 Compile* C = Compile::current();
2985 // Add projection edges for additional defs or kills
2986 // DEF/KILL cr
2987 MachProjNode *kill;
2988 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
2989 proj_list.push(kill);
2990 // Remove duplicated operands and inputs which use the same name.
2991 if (num_opnds() == 4) {
2992 unsigned num0 = 0;
2993 unsigned num1 = opnd_array(1)->num_edges(); // dst
2994 unsigned num2 = opnd_array(2)->num_edges(); // dst
2995 unsigned num3 = opnd_array(3)->num_edges(); // shift
2996 unsigned idx0 = oper_input_base();
2997 unsigned idx1 = idx0 + num0;
2998 unsigned idx2 = idx1 + num1;
2999 unsigned idx3 = idx2 + num2;
3000 unsigned idx4 = idx3 + num3;
3001 set_opnd_array(2, opnd_array(3)->clone()); // shift
3002 for (unsigned i = 0; i < num3; i++) {
3003 set_req(i + idx2, _in[i + idx3]);
3004 }
3005 num2 = num3;
3006 idx3 = idx2 + num2;
3007 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3008 del_req(i);
3009 }
3010 _num_opnds = 3;
3011 } else {
3012 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3011, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3013 }
3014
3015 return this;
3016}
3017
3018MachNode* sarI_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3019 Compile* C = Compile::current();
3020 // Add projection edges for additional defs or kills
3021 // DEF/KILL cr
3022 MachProjNode *kill;
3023 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3024 proj_list.push(kill);
3025
3026 return this;
3027}
3028
3029MachNode* sarI_mem_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3030 Compile* C = Compile::current();
3031 // Add projection edges for additional defs or kills
3032 // DEF/KILL cr
3033 MachProjNode *kill;
3034 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3035 proj_list.push(kill);
3036 // Remove duplicated operands and inputs which use the same name.
3037 if (num_opnds() == 4) {
3038 unsigned num0 = 0;
3039 unsigned num1 = opnd_array(1)->num_edges(); // dst
3040 unsigned num2 = opnd_array(2)->num_edges(); // dst
3041 unsigned num3 = opnd_array(3)->num_edges(); // shift
3042 unsigned idx0 = oper_input_base();
3043 unsigned idx1 = idx0 + num0;
3044 unsigned idx2 = idx1 + num1;
3045 unsigned idx3 = idx2 + num2;
3046 unsigned idx4 = idx3 + num3;
3047 set_opnd_array(2, opnd_array(3)->clone()); // shift
3048 for (unsigned i = 0; i < num3; i++) {
3049 set_req(i + idx2, _in[i + idx3]);
3050 }
3051 num2 = num3;
3052 idx3 = idx2 + num2;
3053 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3054 del_req(i);
3055 }
3056 _num_opnds = 3;
3057 } else {
3058 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3057, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3059 }
3060
3061 return this;
3062}
3063
3064MachNode* shrI_rReg_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3065 Compile* C = Compile::current();
3066 // Add projection edges for additional defs or kills
3067 // DEF/KILL cr
3068 MachProjNode *kill;
3069 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3070 proj_list.push(kill);
3071
3072 return this;
3073}
3074
3075MachNode* shrI_mem_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3076 Compile* C = Compile::current();
3077 // Add projection edges for additional defs or kills
3078 // DEF/KILL cr
3079 MachProjNode *kill;
3080 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3081 proj_list.push(kill);
3082 // Remove duplicated operands and inputs which use the same name.
3083 if (num_opnds() == 4) {
3084 unsigned num0 = 0;
3085 unsigned num1 = opnd_array(1)->num_edges(); // dst
3086 unsigned num2 = opnd_array(2)->num_edges(); // dst
3087 unsigned num3 = opnd_array(3)->num_edges(); // shift
3088 unsigned idx0 = oper_input_base();
3089 unsigned idx1 = idx0 + num0;
3090 unsigned idx2 = idx1 + num1;
3091 unsigned idx3 = idx2 + num2;
3092 unsigned idx4 = idx3 + num3;
3093 set_opnd_array(2, opnd_array(3)->clone()); // shift
3094 for (unsigned i = 0; i < num3; i++) {
3095 set_req(i + idx2, _in[i + idx3]);
3096 }
3097 num2 = num3;
3098 idx3 = idx2 + num2;
3099 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3100 del_req(i);
3101 }
3102 _num_opnds = 3;
3103 } else {
3104 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3103, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3105 }
3106
3107 return this;
3108}
3109
3110MachNode* shrI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3111 Compile* C = Compile::current();
3112 // Add projection edges for additional defs or kills
3113 // DEF/KILL cr
3114 MachProjNode *kill;
3115 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3116 proj_list.push(kill);
3117
3118 return this;
3119}
3120
3121MachNode* shrI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3122 Compile* C = Compile::current();
3123 // Add projection edges for additional defs or kills
3124 // DEF/KILL cr
3125 MachProjNode *kill;
3126 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3127 proj_list.push(kill);
3128 // Remove duplicated operands and inputs which use the same name.
3129 if (num_opnds() == 4) {
3130 unsigned num0 = 0;
3131 unsigned num1 = opnd_array(1)->num_edges(); // dst
3132 unsigned num2 = opnd_array(2)->num_edges(); // dst
3133 unsigned num3 = opnd_array(3)->num_edges(); // shift
3134 unsigned idx0 = oper_input_base();
3135 unsigned idx1 = idx0 + num0;
3136 unsigned idx2 = idx1 + num1;
3137 unsigned idx3 = idx2 + num2;
3138 unsigned idx4 = idx3 + num3;
3139 set_opnd_array(2, opnd_array(3)->clone()); // shift
3140 for (unsigned i = 0; i < num3; i++) {
3141 set_req(i + idx2, _in[i + idx3]);
3142 }
3143 num2 = num3;
3144 idx3 = idx2 + num2;
3145 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3146 del_req(i);
3147 }
3148 _num_opnds = 3;
3149 } else {
3150 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3149, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3151 }
3152
3153 return this;
3154}
3155
3156MachNode* shrI_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3157 Compile* C = Compile::current();
3158 // Add projection edges for additional defs or kills
3159 // DEF/KILL cr
3160 MachProjNode *kill;
3161 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3162 proj_list.push(kill);
3163
3164 return this;
3165}
3166
3167MachNode* shrI_mem_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3168 Compile* C = Compile::current();
3169 // Add projection edges for additional defs or kills
3170 // DEF/KILL cr
3171 MachProjNode *kill;
3172 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3173 proj_list.push(kill);
3174 // Remove duplicated operands and inputs which use the same name.
3175 if (num_opnds() == 4) {
3176 unsigned num0 = 0;
3177 unsigned num1 = opnd_array(1)->num_edges(); // dst
3178 unsigned num2 = opnd_array(2)->num_edges(); // dst
3179 unsigned num3 = opnd_array(3)->num_edges(); // shift
3180 unsigned idx0 = oper_input_base();
3181 unsigned idx1 = idx0 + num0;
3182 unsigned idx2 = idx1 + num1;
3183 unsigned idx3 = idx2 + num2;
3184 unsigned idx4 = idx3 + num3;
3185 set_opnd_array(2, opnd_array(3)->clone()); // shift
3186 for (unsigned i = 0; i < num3; i++) {
3187 set_req(i + idx2, _in[i + idx3]);
3188 }
3189 num2 = num3;
3190 idx3 = idx2 + num2;
3191 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3192 del_req(i);
3193 }
3194 _num_opnds = 3;
3195 } else {
3196 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3195, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3197 }
3198
3199 return this;
3200}
3201
3202MachNode* salL_rReg_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3203 Compile* C = Compile::current();
3204 // Add projection edges for additional defs or kills
3205 // DEF/KILL cr
3206 MachProjNode *kill;
3207 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3208 proj_list.push(kill);
3209
3210 return this;
3211}
3212
3213MachNode* salL_mem_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3214 Compile* C = Compile::current();
3215 // Add projection edges for additional defs or kills
3216 // DEF/KILL cr
3217 MachProjNode *kill;
3218 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3219 proj_list.push(kill);
3220 // Remove duplicated operands and inputs which use the same name.
3221 if (num_opnds() == 4) {
3222 unsigned num0 = 0;
3223 unsigned num1 = opnd_array(1)->num_edges(); // dst
3224 unsigned num2 = opnd_array(2)->num_edges(); // dst
3225 unsigned num3 = opnd_array(3)->num_edges(); // shift
3226 unsigned idx0 = oper_input_base();
3227 unsigned idx1 = idx0 + num0;
3228 unsigned idx2 = idx1 + num1;
3229 unsigned idx3 = idx2 + num2;
3230 unsigned idx4 = idx3 + num3;
3231 set_opnd_array(2, opnd_array(3)->clone()); // shift
3232 for (unsigned i = 0; i < num3; i++) {
3233 set_req(i + idx2, _in[i + idx3]);
3234 }
3235 num2 = num3;
3236 idx3 = idx2 + num2;
3237 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3238 del_req(i);
3239 }
3240 _num_opnds = 3;
3241 } else {
3242 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3241, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3243 }
3244
3245 return this;
3246}
3247
3248MachNode* salL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3249 Compile* C = Compile::current();
Value stored to 'C' during its initialization is never read
3250 // Add projection edges for additional defs or kills
3251 // DEF/KILL cr
3252 MachProjNode *kill;
3253 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3254 proj_list.push(kill);
3255
3256 return this;
3257}
3258
3259MachNode* salL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3260 Compile* C = Compile::current();
3261 // Add projection edges for additional defs or kills
3262 // DEF/KILL cr
3263 MachProjNode *kill;
3264 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3265 proj_list.push(kill);
3266 // Remove duplicated operands and inputs which use the same name.
3267 if (num_opnds() == 4) {
3268 unsigned num0 = 0;
3269 unsigned num1 = opnd_array(1)->num_edges(); // dst
3270 unsigned num2 = opnd_array(2)->num_edges(); // dst
3271 unsigned num3 = opnd_array(3)->num_edges(); // shift
3272 unsigned idx0 = oper_input_base();
3273 unsigned idx1 = idx0 + num0;
3274 unsigned idx2 = idx1 + num1;
3275 unsigned idx3 = idx2 + num2;
3276 unsigned idx4 = idx3 + num3;
3277 set_opnd_array(2, opnd_array(3)->clone()); // shift
3278 for (unsigned i = 0; i < num3; i++) {
3279 set_req(i + idx2, _in[i + idx3]);
3280 }
3281 num2 = num3;
3282 idx3 = idx2 + num2;
3283 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3284 del_req(i);
3285 }
3286 _num_opnds = 3;
3287 } else {
3288 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3287, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3289 }
3290
3291 return this;
3292}
3293
3294MachNode* salL_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3295 Compile* C = Compile::current();
3296 // Add projection edges for additional defs or kills
3297 // DEF/KILL cr
3298 MachProjNode *kill;
3299 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3300 proj_list.push(kill);
3301
3302 return this;
3303}
3304
3305MachNode* salL_mem_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3306 Compile* C = Compile::current();
3307 // Add projection edges for additional defs or kills
3308 // DEF/KILL cr
3309 MachProjNode *kill;
3310 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3311 proj_list.push(kill);
3312 // Remove duplicated operands and inputs which use the same name.
3313 if (num_opnds() == 4) {
3314 unsigned num0 = 0;
3315 unsigned num1 = opnd_array(1)->num_edges(); // dst
3316 unsigned num2 = opnd_array(2)->num_edges(); // dst
3317 unsigned num3 = opnd_array(3)->num_edges(); // shift
3318 unsigned idx0 = oper_input_base();
3319 unsigned idx1 = idx0 + num0;
3320 unsigned idx2 = idx1 + num1;
3321 unsigned idx3 = idx2 + num2;
3322 unsigned idx4 = idx3 + num3;
3323 set_opnd_array(2, opnd_array(3)->clone()); // shift
3324 for (unsigned i = 0; i < num3; i++) {
3325 set_req(i + idx2, _in[i + idx3]);
3326 }
3327 num2 = num3;
3328 idx3 = idx2 + num2;
3329 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3330 del_req(i);
3331 }
3332 _num_opnds = 3;
3333 } else {
3334 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3333, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3335 }
3336
3337 return this;
3338}
3339
3340MachNode* sarL_rReg_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3341 Compile* C = Compile::current();
3342 // Add projection edges for additional defs or kills
3343 // DEF/KILL cr
3344 MachProjNode *kill;
3345 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3346 proj_list.push(kill);
3347
3348 return this;
3349}
3350
3351MachNode* sarL_mem_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3352 Compile* C = Compile::current();
3353 // Add projection edges for additional defs or kills
3354 // DEF/KILL cr
3355 MachProjNode *kill;
3356 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3357 proj_list.push(kill);
3358 // Remove duplicated operands and inputs which use the same name.
3359 if (num_opnds() == 4) {
3360 unsigned num0 = 0;
3361 unsigned num1 = opnd_array(1)->num_edges(); // dst
3362 unsigned num2 = opnd_array(2)->num_edges(); // dst
3363 unsigned num3 = opnd_array(3)->num_edges(); // shift
3364 unsigned idx0 = oper_input_base();
3365 unsigned idx1 = idx0 + num0;
3366 unsigned idx2 = idx1 + num1;
3367 unsigned idx3 = idx2 + num2;
3368 unsigned idx4 = idx3 + num3;
3369 set_opnd_array(2, opnd_array(3)->clone()); // shift
3370 for (unsigned i = 0; i < num3; i++) {
3371 set_req(i + idx2, _in[i + idx3]);
3372 }
3373 num2 = num3;
3374 idx3 = idx2 + num2;
3375 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3376 del_req(i);
3377 }
3378 _num_opnds = 3;
3379 } else {
3380 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3379, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3381 }
3382
3383 return this;
3384}
3385
3386MachNode* sarL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3387 Compile* C = Compile::current();
3388 // Add projection edges for additional defs or kills
3389 // DEF/KILL cr
3390 MachProjNode *kill;
3391 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3392 proj_list.push(kill);
3393
3394 return this;
3395}
3396
3397MachNode* sarL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3398 Compile* C = Compile::current();
3399 // Add projection edges for additional defs or kills
3400 // DEF/KILL cr
3401 MachProjNode *kill;
3402 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3403 proj_list.push(kill);
3404 // Remove duplicated operands and inputs which use the same name.
3405 if (num_opnds() == 4) {
3406 unsigned num0 = 0;
3407 unsigned num1 = opnd_array(1)->num_edges(); // dst
3408 unsigned num2 = opnd_array(2)->num_edges(); // dst
3409 unsigned num3 = opnd_array(3)->num_edges(); // shift
3410 unsigned idx0 = oper_input_base();
3411 unsigned idx1 = idx0 + num0;
3412 unsigned idx2 = idx1 + num1;
3413 unsigned idx3 = idx2 + num2;
3414 unsigned idx4 = idx3 + num3;
3415 set_opnd_array(2, opnd_array(3)->clone()); // shift
3416 for (unsigned i = 0; i < num3; i++) {
3417 set_req(i + idx2, _in[i + idx3]);
3418 }
3419 num2 = num3;
3420 idx3 = idx2 + num2;
3421 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3422 del_req(i);
3423 }
3424 _num_opnds = 3;
3425 } else {
3426 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3425, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3427 }
3428
3429 return this;
3430}
3431
3432MachNode* sarL_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3433 Compile* C = Compile::current();
3434 // Add projection edges for additional defs or kills
3435 // DEF/KILL cr
3436 MachProjNode *kill;
3437 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3438 proj_list.push(kill);
3439
3440 return this;
3441}
3442
3443MachNode* sarL_mem_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3444 Compile* C = Compile::current();
3445 // Add projection edges for additional defs or kills
3446 // DEF/KILL cr
3447 MachProjNode *kill;
3448 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3449 proj_list.push(kill);
3450 // Remove duplicated operands and inputs which use the same name.
3451 if (num_opnds() == 4) {
3452 unsigned num0 = 0;
3453 unsigned num1 = opnd_array(1)->num_edges(); // dst
3454 unsigned num2 = opnd_array(2)->num_edges(); // dst
3455 unsigned num3 = opnd_array(3)->num_edges(); // shift
3456 unsigned idx0 = oper_input_base();
3457 unsigned idx1 = idx0 + num0;
3458 unsigned idx2 = idx1 + num1;
3459 unsigned idx3 = idx2 + num2;
3460 unsigned idx4 = idx3 + num3;
3461 set_opnd_array(2, opnd_array(3)->clone()); // shift
3462 for (unsigned i = 0; i < num3; i++) {
3463 set_req(i + idx2, _in[i + idx3]);
3464 }
3465 num2 = num3;
3466 idx3 = idx2 + num2;
3467 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3468 del_req(i);
3469 }
3470 _num_opnds = 3;
3471 } else {
3472 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3471, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3473 }
3474
3475 return this;
3476}
3477
3478MachNode* shrL_rReg_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3479 Compile* C = Compile::current();
3480 // Add projection edges for additional defs or kills
3481 // DEF/KILL cr
3482 MachProjNode *kill;
3483 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3484 proj_list.push(kill);
3485
3486 return this;
3487}
3488
3489MachNode* shrL_mem_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3490 Compile* C = Compile::current();
3491 // Add projection edges for additional defs or kills
3492 // DEF/KILL cr
3493 MachProjNode *kill;
3494 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3495 proj_list.push(kill);
3496 // Remove duplicated operands and inputs which use the same name.
3497 if (num_opnds() == 4) {
3498 unsigned num0 = 0;
3499 unsigned num1 = opnd_array(1)->num_edges(); // dst
3500 unsigned num2 = opnd_array(2)->num_edges(); // dst
3501 unsigned num3 = opnd_array(3)->num_edges(); // shift
3502 unsigned idx0 = oper_input_base();
3503 unsigned idx1 = idx0 + num0;
3504 unsigned idx2 = idx1 + num1;
3505 unsigned idx3 = idx2 + num2;
3506 unsigned idx4 = idx3 + num3;
3507 set_opnd_array(2, opnd_array(3)->clone()); // shift
3508 for (unsigned i = 0; i < num3; i++) {
3509 set_req(i + idx2, _in[i + idx3]);
3510 }
3511 num2 = num3;
3512 idx3 = idx2 + num2;
3513 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3514 del_req(i);
3515 }
3516 _num_opnds = 3;
3517 } else {
3518 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3517, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3519 }
3520
3521 return this;
3522}
3523
3524MachNode* shrL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3525 Compile* C = Compile::current();
3526 // Add projection edges for additional defs or kills
3527 // DEF/KILL cr
3528 MachProjNode *kill;
3529 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3530 proj_list.push(kill);
3531
3532 return this;
3533}
3534
3535MachNode* shrL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3536 Compile* C = Compile::current();
3537 // Add projection edges for additional defs or kills
3538 // DEF/KILL cr
3539 MachProjNode *kill;
3540 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3541 proj_list.push(kill);
3542 // Remove duplicated operands and inputs which use the same name.
3543 if (num_opnds() == 4) {
3544 unsigned num0 = 0;
3545 unsigned num1 = opnd_array(1)->num_edges(); // dst
3546 unsigned num2 = opnd_array(2)->num_edges(); // dst
3547 unsigned num3 = opnd_array(3)->num_edges(); // shift
3548 unsigned idx0 = oper_input_base();
3549 unsigned idx1 = idx0 + num0;
3550 unsigned idx2 = idx1 + num1;
3551 unsigned idx3 = idx2 + num2;
3552 unsigned idx4 = idx3 + num3;
3553 set_opnd_array(2, opnd_array(3)->clone()); // shift
3554 for (unsigned i = 0; i < num3; i++) {
3555 set_req(i + idx2, _in[i + idx3]);
3556 }
3557 num2 = num3;
3558 idx3 = idx2 + num2;
3559 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3560 del_req(i);
3561 }
3562 _num_opnds = 3;
3563 } else {
3564 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3563, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3565 }
3566
3567 return this;
3568}
3569
3570MachNode* shrL_rReg_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3571 Compile* C = Compile::current();
3572 // Add projection edges for additional defs or kills
3573 // DEF/KILL cr
3574 MachProjNode *kill;
3575 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3576 proj_list.push(kill);
3577
3578 return this;
3579}
3580
3581MachNode* shrL_mem_CLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3582 Compile* C = Compile::current();
3583 // Add projection edges for additional defs or kills
3584 // DEF/KILL cr
3585 MachProjNode *kill;
3586 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3587 proj_list.push(kill);
3588 // Remove duplicated operands and inputs which use the same name.
3589 if (num_opnds() == 4) {
3590 unsigned num0 = 0;
3591 unsigned num1 = opnd_array(1)->num_edges(); // dst
3592 unsigned num2 = opnd_array(2)->num_edges(); // dst
3593 unsigned num3 = opnd_array(3)->num_edges(); // shift
3594 unsigned idx0 = oper_input_base();
3595 unsigned idx1 = idx0 + num0;
3596 unsigned idx2 = idx1 + num1;
3597 unsigned idx3 = idx2 + num2;
3598 unsigned idx4 = idx3 + num3;
3599 set_opnd_array(2, opnd_array(3)->clone()); // shift
3600 for (unsigned i = 0; i < num3; i++) {
3601 set_req(i + idx2, _in[i + idx3]);
3602 }
3603 num2 = num3;
3604 idx3 = idx2 + num2;
3605 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3606 del_req(i);
3607 }
3608 _num_opnds = 3;
3609 } else {
3610 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3609, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3611 }
3612
3613 return this;
3614}
3615
3616MachNode* i2bNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3617 Compile* C = Compile::current();
3618 // Remove duplicated operands and inputs which use the same name.
3619 if (num_opnds() == 4) {
3620 unsigned num0 = 0;
3621 unsigned num1 = opnd_array(1)->num_edges(); // src
3622 unsigned num2 = opnd_array(2)->num_edges(); // twentyfour
3623 unsigned num3 = opnd_array(3)->num_edges(); // twentyfour
3624 unsigned idx0 = oper_input_base();
3625 unsigned idx1 = idx0 + num0;
3626 unsigned idx2 = idx1 + num1;
3627 unsigned idx3 = idx2 + num2;
3628 unsigned idx4 = idx3 + num3;
3629 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3630 del_req(i);
3631 }
3632 _num_opnds = 3;
3633 } else {
3634 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3633, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3635 }
3636
3637 return this;
3638}
3639
3640MachNode* i2sNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3641 Compile* C = Compile::current();
3642 // Remove duplicated operands and inputs which use the same name.
3643 if (num_opnds() == 4) {
3644 unsigned num0 = 0;
3645 unsigned num1 = opnd_array(1)->num_edges(); // src
3646 unsigned num2 = opnd_array(2)->num_edges(); // sixteen
3647 unsigned num3 = opnd_array(3)->num_edges(); // sixteen
3648 unsigned idx0 = oper_input_base();
3649 unsigned idx1 = idx0 + num0;
3650 unsigned idx2 = idx1 + num1;
3651 unsigned idx3 = idx2 + num2;
3652 unsigned idx4 = idx3 + num3;
3653 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3654 del_req(i);
3655 }
3656 _num_opnds = 3;
3657 } else {
3658 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3657, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3659 }
3660
3661 return this;
3662}
3663
3664MachNode* rolI_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3665 Compile* C = Compile::current();
3666 // Add projection edges for additional defs or kills
3667 // DEF/KILL cr
3668 MachProjNode *kill;
3669 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3670 proj_list.push(kill);
3671
3672 return this;
3673}
3674
3675MachNode* rolI_rReg_VarNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3676 Compile* C = Compile::current();
3677 // Add projection edges for additional defs or kills
3678 // DEF/KILL cr
3679 MachProjNode *kill;
3680 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3681 proj_list.push(kill);
3682
3683 return this;
3684}
3685
3686MachNode* rorI_immI8_legacyNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3687 Compile* C = Compile::current();
3688 // Add projection edges for additional defs or kills
3689 // DEF/KILL cr
3690 MachProjNode *kill;
3691 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3692 proj_list.push(kill);
3693
3694 return this;
3695}
3696
3697MachNode* rorI_rReg_VarNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3698 Compile* C = Compile::current();
3699 // Add projection edges for additional defs or kills
3700 // DEF/KILL cr
3701 MachProjNode *kill;
3702 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3703 proj_list.push(kill);
3704
3705 return this;
3706}
3707
3708MachNode* rolL_immI8Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3709 Compile* C = Compile::current();
3710 // Add projection edges for additional defs or kills
3711 // DEF/KILL cr
3712 MachProjNode *kill;
3713 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3714 proj_list.push(kill);
3715
3716 return this;
3717}
3718
3719MachNode* rolL_rReg_VarNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3720 Compile* C = Compile::current();
3721 // Add projection edges for additional defs or kills
3722 // DEF/KILL cr
3723 MachProjNode *kill;
3724 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3725 proj_list.push(kill);
3726
3727 return this;
3728}
3729
3730MachNode* rorL_immI8_legacyNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3731 Compile* C = Compile::current();
3732 // Add projection edges for additional defs or kills
3733 // DEF/KILL cr
3734 MachProjNode *kill;
3735 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3736 proj_list.push(kill);
3737
3738 return this;
3739}
3740
3741MachNode* rorL_rReg_VarNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3742 Compile* C = Compile::current();
3743 // Add projection edges for additional defs or kills
3744 // DEF/KILL cr
3745 MachProjNode *kill;
3746 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3747 proj_list.push(kill);
3748
3749 return this;
3750}
3751
3752MachNode* andI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3753 Compile* C = Compile::current();
3754 // Add projection edges for additional defs or kills
3755 // DEF/KILL cr
3756 MachProjNode *kill;
3757 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3758 proj_list.push(kill);
3759
3760 return this;
3761}
3762
3763MachNode* convI2LAndI_reg_immIbitmaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3764 Compile* C = Compile::current();
3765 // Add projection edges for additional defs or kills
3766 // TEMP tmp
3767 MachTempNode *def;
3768 def = new MachTempNode(state->MachOperGenerator(RREGI));
3769 add_req(def);
3770 // DEF/KILL cr
3771 MachProjNode *kill;
3772 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3773 proj_list.push(kill);
3774
3775 return this;
3776}
3777
3778MachNode* andI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3779 Compile* C = Compile::current();
3780 // Add projection edges for additional defs or kills
3781 // DEF/KILL cr
3782 MachProjNode *kill;
3783 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3784 proj_list.push(kill);
3785
3786 return this;
3787}
3788
3789MachNode* andI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3790 Compile* C = Compile::current();
3791 // Add projection edges for additional defs or kills
3792 // DEF/KILL cr
3793 MachProjNode *kill;
3794 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3795 proj_list.push(kill);
3796
3797 return this;
3798}
3799
3800MachNode* andI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3801 Compile* C = Compile::current();
3802 // Add projection edges for additional defs or kills
3803 // DEF/KILL cr
3804 MachProjNode *kill;
3805 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3806 proj_list.push(kill);
3807
3808 return this;
3809}
3810
3811MachNode* andB_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3812 Compile* C = Compile::current();
3813 // Add projection edges for additional defs or kills
3814 // DEF/KILL cr
3815 MachProjNode *kill;
3816 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3817 proj_list.push(kill);
3818 // Remove duplicated operands and inputs which use the same name.
3819 if (num_opnds() == 4) {
3820 unsigned num0 = 0;
3821 unsigned num1 = opnd_array(1)->num_edges(); // dst
3822 unsigned num2 = opnd_array(2)->num_edges(); // dst
3823 unsigned num3 = opnd_array(3)->num_edges(); // src
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 set_opnd_array(2, opnd_array(3)->clone()); // src
3830 for (unsigned i = 0; i < num3; i++) {
3831 set_req(i + idx2, _in[i + idx3]);
3832 }
3833 num2 = num3;
3834 idx3 = idx2 + num2;
3835 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3836 del_req(i);
3837 }
3838 _num_opnds = 3;
3839 } else {
3840 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3839, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3841 }
3842
3843 return this;
3844}
3845
3846MachNode* andB_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3847 Compile* C = Compile::current();
3848 // Add projection edges for additional defs or kills
3849 // DEF/KILL cr
3850 MachProjNode *kill;
3851 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3852 proj_list.push(kill);
3853 // Remove duplicated operands and inputs which use the same name.
3854 if (num_opnds() == 4) {
3855 unsigned num0 = 0;
3856 unsigned num1 = opnd_array(1)->num_edges(); // dst
3857 unsigned num2 = opnd_array(2)->num_edges(); // src
3858 unsigned num3 = opnd_array(3)->num_edges(); // dst
3859 unsigned idx0 = oper_input_base();
3860 unsigned idx1 = idx0 + num0;
3861 unsigned idx2 = idx1 + num1;
3862 unsigned idx3 = idx2 + num2;
3863 unsigned idx4 = idx3 + num3;
3864 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3865 del_req(i);
3866 }
3867 _num_opnds = 3;
3868 } else {
3869 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3868, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3870 }
3871
3872 return this;
3873}
3874
3875MachNode* andI_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3876 Compile* C = Compile::current();
3877 // Add projection edges for additional defs or kills
3878 // DEF/KILL cr
3879 MachProjNode *kill;
3880 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3881 proj_list.push(kill);
3882 // Remove duplicated operands and inputs which use the same name.
3883 if (num_opnds() == 4) {
3884 unsigned num0 = 0;
3885 unsigned num1 = opnd_array(1)->num_edges(); // dst
3886 unsigned num2 = opnd_array(2)->num_edges(); // dst
3887 unsigned num3 = opnd_array(3)->num_edges(); // src
3888 unsigned idx0 = oper_input_base();
3889 unsigned idx1 = idx0 + num0;
3890 unsigned idx2 = idx1 + num1;
3891 unsigned idx3 = idx2 + num2;
3892 unsigned idx4 = idx3 + num3;
3893 set_opnd_array(2, opnd_array(3)->clone()); // src
3894 for (unsigned i = 0; i < num3; i++) {
3895 set_req(i + idx2, _in[i + idx3]);
3896 }
3897 num2 = num3;
3898 idx3 = idx2 + num2;
3899 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3900 del_req(i);
3901 }
3902 _num_opnds = 3;
3903 } else {
3904 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3903, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3905 }
3906
3907 return this;
3908}
3909
3910MachNode* andI_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3911 Compile* C = Compile::current();
3912 // Add projection edges for additional defs or kills
3913 // DEF/KILL cr
3914 MachProjNode *kill;
3915 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3916 proj_list.push(kill);
3917 // Remove duplicated operands and inputs which use the same name.
3918 if (num_opnds() == 4) {
3919 unsigned num0 = 0;
3920 unsigned num1 = opnd_array(1)->num_edges(); // dst
3921 unsigned num2 = opnd_array(2)->num_edges(); // src
3922 unsigned num3 = opnd_array(3)->num_edges(); // dst
3923 unsigned idx0 = oper_input_base();
3924 unsigned idx1 = idx0 + num0;
3925 unsigned idx2 = idx1 + num1;
3926 unsigned idx3 = idx2 + num2;
3927 unsigned idx4 = idx3 + num3;
3928 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3929 del_req(i);
3930 }
3931 _num_opnds = 3;
3932 } else {
3933 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3932, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3934 }
3935
3936 return this;
3937}
3938
3939MachNode* andI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3940 Compile* C = Compile::current();
3941 // Add projection edges for additional defs or kills
3942 // DEF/KILL cr
3943 MachProjNode *kill;
3944 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3945 proj_list.push(kill);
3946 // Remove duplicated operands and inputs which use the same name.
3947 if (num_opnds() == 4) {
3948 unsigned num0 = 0;
3949 unsigned num1 = opnd_array(1)->num_edges(); // dst
3950 unsigned num2 = opnd_array(2)->num_edges(); // dst
3951 unsigned num3 = opnd_array(3)->num_edges(); // src
3952 unsigned idx0 = oper_input_base();
3953 unsigned idx1 = idx0 + num0;
3954 unsigned idx2 = idx1 + num1;
3955 unsigned idx3 = idx2 + num2;
3956 unsigned idx4 = idx3 + num3;
3957 set_opnd_array(2, opnd_array(3)->clone()); // src
3958 for (unsigned i = 0; i < num3; i++) {
3959 set_req(i + idx2, _in[i + idx3]);
3960 }
3961 num2 = num3;
3962 idx3 = idx2 + num2;
3963 for (int i = idx4 - 1; i >= (int)idx3; i--) {
3964 del_req(i);
3965 }
3966 _num_opnds = 3;
3967 } else {
3968 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 3967, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
3969 }
3970
3971 return this;
3972}
3973
3974MachNode* andnI_rReg_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3975 Compile* C = Compile::current();
3976 // Add projection edges for additional defs or kills
3977 // DEF/KILL cr
3978 MachProjNode *kill;
3979 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3980 proj_list.push(kill);
3981
3982 return this;
3983}
3984
3985MachNode* andnI_rReg_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
3986 Compile* C = Compile::current();
3987 // Add projection edges for additional defs or kills
3988 // DEF/KILL cr
3989 MachProjNode *kill;
3990 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
3991 proj_list.push(kill);
3992
3993 return this;
3994}
3995
3996MachNode* andnI_rReg_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
3997 Compile* C = Compile::current();
3998 // Add projection edges for additional defs or kills
3999 // DEF/KILL cr
4000 MachProjNode *kill;
4001 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4002 proj_list.push(kill);
4003
4004 return this;
4005}
4006
4007MachNode* andnI_rReg_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4008 Compile* C = Compile::current();
4009 // Add projection edges for additional defs or kills
4010 // DEF/KILL cr
4011 MachProjNode *kill;
4012 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4013 proj_list.push(kill);
4014
4015 return this;
4016}
4017
4018MachNode* blsiI_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4019 Compile* C = Compile::current();
4020 // Add projection edges for additional defs or kills
4021 // DEF/KILL cr
4022 MachProjNode *kill;
4023 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4024 proj_list.push(kill);
4025 // Remove duplicated operands and inputs which use the same name.
4026 if (num_opnds() == 4) {
4027 unsigned num0 = 0;
4028 unsigned num1 = opnd_array(1)->num_edges(); // imm_zero
4029 unsigned num2 = opnd_array(2)->num_edges(); // src
4030 unsigned num3 = opnd_array(3)->num_edges(); // src
4031 unsigned idx0 = oper_input_base();
4032 unsigned idx1 = idx0 + num0;
4033 unsigned idx2 = idx1 + num1;
4034 unsigned idx3 = idx2 + num2;
4035 unsigned idx4 = idx3 + num3;
4036 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4037 del_req(i);
4038 }
4039 _num_opnds = 3;
4040 } else {
4041 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4040, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4042 }
4043
4044 return this;
4045}
4046
4047MachNode* blsiI_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4048 Compile* C = Compile::current();
4049 // Add projection edges for additional defs or kills
4050 // DEF/KILL cr
4051 MachProjNode *kill;
4052 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4053 proj_list.push(kill);
4054 // Remove duplicated operands and inputs which use the same name.
4055 if (num_opnds() == 4) {
4056 unsigned num0 = 0;
4057 unsigned num1 = opnd_array(1)->num_edges(); // src
4058 unsigned num2 = opnd_array(2)->num_edges(); // imm_zero
4059 unsigned num3 = opnd_array(3)->num_edges(); // src
4060 unsigned idx0 = oper_input_base();
4061 unsigned idx1 = idx0 + num0;
4062 unsigned idx2 = idx1 + num1;
4063 unsigned idx3 = idx2 + num2;
4064 unsigned idx4 = idx3 + num3;
4065 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4066 del_req(i);
4067 }
4068 _num_opnds = 3;
4069 } else {
4070 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4069, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4071 }
4072
4073 return this;
4074}
4075
4076MachNode* blsiI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4077 Compile* C = Compile::current();
4078 // Add projection edges for additional defs or kills
4079 // DEF/KILL cr
4080 MachProjNode *kill;
4081 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4082 proj_list.push(kill);
4083 // Remove duplicated operands and inputs which use the same name.
4084 if (num_opnds() == 4) {
4085 unsigned num0 = 0;
4086 unsigned num1 = opnd_array(1)->num_edges(); // imm_zero
4087 unsigned num2 = opnd_array(2)->num_edges(); // src
4088 unsigned num3 = opnd_array(3)->num_edges(); // src
4089 unsigned idx0 = oper_input_base();
4090 unsigned idx1 = idx0 + num0;
4091 unsigned idx2 = idx1 + num1;
4092 unsigned idx3 = idx2 + num2;
4093 unsigned idx4 = idx3 + num3;
4094 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4095 del_req(i);
4096 }
4097 _num_opnds = 3;
4098 } else {
4099 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4098, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4100 }
4101
4102 return this;
4103}
4104
4105MachNode* blsiI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4106 Compile* C = Compile::current();
4107 // Add projection edges for additional defs or kills
4108 // DEF/KILL cr
4109 MachProjNode *kill;
4110 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4111 proj_list.push(kill);
4112 // Remove duplicated operands and inputs which use the same name.
4113 if (num_opnds() == 4) {
4114 unsigned num0 = 0;
4115 unsigned num1 = opnd_array(1)->num_edges(); // src
4116 unsigned num2 = opnd_array(2)->num_edges(); // imm_zero
4117 unsigned num3 = opnd_array(3)->num_edges(); // src
4118 unsigned idx0 = oper_input_base();
4119 unsigned idx1 = idx0 + num0;
4120 unsigned idx2 = idx1 + num1;
4121 unsigned idx3 = idx2 + num2;
4122 unsigned idx4 = idx3 + num3;
4123 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4124 del_req(i);
4125 }
4126 _num_opnds = 3;
4127 } else {
4128 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4127, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4129 }
4130
4131 return this;
4132}
4133
4134MachNode* blsmskI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4135 Compile* C = Compile::current();
4136 // Add projection edges for additional defs or kills
4137 // DEF/KILL cr
4138 MachProjNode *kill;
4139 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4140 proj_list.push(kill);
4141 // Remove duplicated operands and inputs which use the same name.
4142 if (num_opnds() == 4) {
4143 unsigned num0 = 0;
4144 unsigned num1 = opnd_array(1)->num_edges(); // src
4145 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
4146 unsigned num3 = opnd_array(3)->num_edges(); // src
4147 unsigned idx0 = oper_input_base();
4148 unsigned idx1 = idx0 + num0;
4149 unsigned idx2 = idx1 + num1;
4150 unsigned idx3 = idx2 + num2;
4151 unsigned idx4 = idx3 + num3;
4152 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4153 del_req(i);
4154 }
4155 _num_opnds = 3;
4156 } else {
4157 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4156, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4158 }
4159
4160 return this;
4161}
4162
4163MachNode* blsmskI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4164 Compile* C = Compile::current();
4165 // Add projection edges for additional defs or kills
4166 // DEF/KILL cr
4167 MachProjNode *kill;
4168 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4169 proj_list.push(kill);
4170 // Remove duplicated operands and inputs which use the same name.
4171 if (num_opnds() == 4) {
4172 unsigned num0 = 0;
4173 unsigned num1 = opnd_array(1)->num_edges(); // src
4174 unsigned num2 = opnd_array(2)->num_edges(); // src
4175 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
4176 unsigned idx0 = oper_input_base();
4177 unsigned idx1 = idx0 + num0;
4178 unsigned idx2 = idx1 + num1;
4179 unsigned idx3 = idx2 + num2;
4180 unsigned idx4 = idx3 + num3;
4181 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
4182 for (unsigned i = 0; i < num3; i++) {
4183 set_req(i + idx2, _in[i + idx3]);
4184 }
4185 num2 = num3;
4186 idx3 = idx2 + num2;
4187 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4188 del_req(i);
4189 }
4190 _num_opnds = 3;
4191 } else {
4192 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4191, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4193 }
4194
4195 return this;
4196}
4197
4198MachNode* blsmskI_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4199 Compile* C = Compile::current();
4200 // Add projection edges for additional defs or kills
4201 // DEF/KILL cr
4202 MachProjNode *kill;
4203 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4204 proj_list.push(kill);
4205 // Remove duplicated operands and inputs which use the same name.
4206 if (num_opnds() == 4) {
4207 unsigned num0 = 0;
4208 unsigned num1 = opnd_array(1)->num_edges(); // src
4209 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
4210 unsigned num3 = opnd_array(3)->num_edges(); // src
4211 unsigned idx0 = oper_input_base();
4212 unsigned idx1 = idx0 + num0;
4213 unsigned idx2 = idx1 + num1;
4214 unsigned idx3 = idx2 + num2;
4215 unsigned idx4 = idx3 + num3;
4216 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4217 del_req(i);
4218 }
4219 _num_opnds = 3;
4220 } else {
4221 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4220, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4222 }
4223
4224 return this;
4225}
4226
4227MachNode* blsmskI_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4228 Compile* C = Compile::current();
4229 // Add projection edges for additional defs or kills
4230 // DEF/KILL cr
4231 MachProjNode *kill;
4232 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4233 proj_list.push(kill);
4234 // Remove duplicated operands and inputs which use the same name.
4235 if (num_opnds() == 4) {
4236 unsigned num0 = 0;
4237 unsigned num1 = opnd_array(1)->num_edges(); // src
4238 unsigned num2 = opnd_array(2)->num_edges(); // src
4239 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
4240 unsigned idx0 = oper_input_base();
4241 unsigned idx1 = idx0 + num0;
4242 unsigned idx2 = idx1 + num1;
4243 unsigned idx3 = idx2 + num2;
4244 unsigned idx4 = idx3 + num3;
4245 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
4246 for (unsigned i = 0; i < num3; i++) {
4247 set_req(i + idx2, _in[i + idx3]);
4248 }
4249 num2 = num3;
4250 idx3 = idx2 + num2;
4251 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4252 del_req(i);
4253 }
4254 _num_opnds = 3;
4255 } else {
4256 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4255, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4257 }
4258
4259 return this;
4260}
4261
4262MachNode* blsrI_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4263 Compile* C = Compile::current();
4264 // Add projection edges for additional defs or kills
4265 // DEF/KILL cr
4266 MachProjNode *kill;
4267 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4268 proj_list.push(kill);
4269 // Remove duplicated operands and inputs which use the same name.
4270 if (num_opnds() == 4) {
4271 unsigned num0 = 0;
4272 unsigned num1 = opnd_array(1)->num_edges(); // src
4273 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
4274 unsigned num3 = opnd_array(3)->num_edges(); // src
4275 unsigned idx0 = oper_input_base();
4276 unsigned idx1 = idx0 + num0;
4277 unsigned idx2 = idx1 + num1;
4278 unsigned idx3 = idx2 + num2;
4279 unsigned idx4 = idx3 + num3;
4280 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4281 del_req(i);
4282 }
4283 _num_opnds = 3;
4284 } else {
4285 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4284, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4286 }
4287
4288 return this;
4289}
4290
4291MachNode* blsrI_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4292 Compile* C = Compile::current();
4293 // Add projection edges for additional defs or kills
4294 // DEF/KILL cr
4295 MachProjNode *kill;
4296 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4297 proj_list.push(kill);
4298 // Remove duplicated operands and inputs which use the same name.
4299 if (num_opnds() == 4) {
4300 unsigned num0 = 0;
4301 unsigned num1 = opnd_array(1)->num_edges(); // src
4302 unsigned num2 = opnd_array(2)->num_edges(); // src
4303 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
4304 unsigned idx0 = oper_input_base();
4305 unsigned idx1 = idx0 + num0;
4306 unsigned idx2 = idx1 + num1;
4307 unsigned idx3 = idx2 + num2;
4308 unsigned idx4 = idx3 + num3;
4309 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
4310 for (unsigned i = 0; i < num3; i++) {
4311 set_req(i + idx2, _in[i + idx3]);
4312 }
4313 num2 = num3;
4314 idx3 = idx2 + num2;
4315 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4316 del_req(i);
4317 }
4318 _num_opnds = 3;
4319 } else {
4320 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4319, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4321 }
4322
4323 return this;
4324}
4325
4326MachNode* blsrI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4327 Compile* C = Compile::current();
4328 // Add projection edges for additional defs or kills
4329 // DEF/KILL cr
4330 MachProjNode *kill;
4331 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4332 proj_list.push(kill);
4333 // Remove duplicated operands and inputs which use the same name.
4334 if (num_opnds() == 4) {
4335 unsigned num0 = 0;
4336 unsigned num1 = opnd_array(1)->num_edges(); // src
4337 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
4338 unsigned num3 = opnd_array(3)->num_edges(); // src
4339 unsigned idx0 = oper_input_base();
4340 unsigned idx1 = idx0 + num0;
4341 unsigned idx2 = idx1 + num1;
4342 unsigned idx3 = idx2 + num2;
4343 unsigned idx4 = idx3 + num3;
4344 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4345 del_req(i);
4346 }
4347 _num_opnds = 3;
4348 } else {
4349 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4348, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4350 }
4351
4352 return this;
4353}
4354
4355MachNode* blsrI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4356 Compile* C = Compile::current();
4357 // Add projection edges for additional defs or kills
4358 // DEF/KILL cr
4359 MachProjNode *kill;
4360 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4361 proj_list.push(kill);
4362 // Remove duplicated operands and inputs which use the same name.
4363 if (num_opnds() == 4) {
4364 unsigned num0 = 0;
4365 unsigned num1 = opnd_array(1)->num_edges(); // src
4366 unsigned num2 = opnd_array(2)->num_edges(); // src
4367 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
4368 unsigned idx0 = oper_input_base();
4369 unsigned idx1 = idx0 + num0;
4370 unsigned idx2 = idx1 + num1;
4371 unsigned idx3 = idx2 + num2;
4372 unsigned idx4 = idx3 + num3;
4373 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
4374 for (unsigned i = 0; i < num3; i++) {
4375 set_req(i + idx2, _in[i + idx3]);
4376 }
4377 num2 = num3;
4378 idx3 = idx2 + num2;
4379 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4380 del_req(i);
4381 }
4382 _num_opnds = 3;
4383 } else {
4384 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4383, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4385 }
4386
4387 return this;
4388}
4389
4390MachNode* orI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4391 Compile* C = Compile::current();
4392 // Add projection edges for additional defs or kills
4393 // DEF/KILL cr
4394 MachProjNode *kill;
4395 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4396 proj_list.push(kill);
4397
4398 return this;
4399}
4400
4401MachNode* orI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4402 Compile* C = Compile::current();
4403 // Add projection edges for additional defs or kills
4404 // DEF/KILL cr
4405 MachProjNode *kill;
4406 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4407 proj_list.push(kill);
4408
4409 return this;
4410}
4411
4412MachNode* orI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4413 Compile* C = Compile::current();
4414 // Add projection edges for additional defs or kills
4415 // DEF/KILL cr
4416 MachProjNode *kill;
4417 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4418 proj_list.push(kill);
4419
4420 return this;
4421}
4422
4423MachNode* orI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4424 Compile* C = Compile::current();
4425 // Add projection edges for additional defs or kills
4426 // DEF/KILL cr
4427 MachProjNode *kill;
4428 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4429 proj_list.push(kill);
4430
4431 return this;
4432}
4433
4434MachNode* orB_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4435 Compile* C = Compile::current();
4436 // Add projection edges for additional defs or kills
4437 // DEF/KILL cr
4438 MachProjNode *kill;
4439 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4440 proj_list.push(kill);
4441 // Remove duplicated operands and inputs which use the same name.
4442 if (num_opnds() == 4) {
4443 unsigned num0 = 0;
4444 unsigned num1 = opnd_array(1)->num_edges(); // dst
4445 unsigned num2 = opnd_array(2)->num_edges(); // dst
4446 unsigned num3 = opnd_array(3)->num_edges(); // src
4447 unsigned idx0 = oper_input_base();
4448 unsigned idx1 = idx0 + num0;
4449 unsigned idx2 = idx1 + num1;
4450 unsigned idx3 = idx2 + num2;
4451 unsigned idx4 = idx3 + num3;
4452 set_opnd_array(2, opnd_array(3)->clone()); // src
4453 for (unsigned i = 0; i < num3; i++) {
4454 set_req(i + idx2, _in[i + idx3]);
4455 }
4456 num2 = num3;
4457 idx3 = idx2 + num2;
4458 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4459 del_req(i);
4460 }
4461 _num_opnds = 3;
4462 } else {
4463 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4462, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4464 }
4465
4466 return this;
4467}
4468
4469MachNode* orB_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4470 Compile* C = Compile::current();
4471 // Add projection edges for additional defs or kills
4472 // DEF/KILL cr
4473 MachProjNode *kill;
4474 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4475 proj_list.push(kill);
4476 // Remove duplicated operands and inputs which use the same name.
4477 if (num_opnds() == 4) {
4478 unsigned num0 = 0;
4479 unsigned num1 = opnd_array(1)->num_edges(); // dst
4480 unsigned num2 = opnd_array(2)->num_edges(); // src
4481 unsigned num3 = opnd_array(3)->num_edges(); // dst
4482 unsigned idx0 = oper_input_base();
4483 unsigned idx1 = idx0 + num0;
4484 unsigned idx2 = idx1 + num1;
4485 unsigned idx3 = idx2 + num2;
4486 unsigned idx4 = idx3 + num3;
4487 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4488 del_req(i);
4489 }
4490 _num_opnds = 3;
4491 } else {
4492 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4491, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4493 }
4494
4495 return this;
4496}
4497
4498MachNode* orI_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4499 Compile* C = Compile::current();
4500 // Add projection edges for additional defs or kills
4501 // DEF/KILL cr
4502 MachProjNode *kill;
4503 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4504 proj_list.push(kill);
4505 // Remove duplicated operands and inputs which use the same name.
4506 if (num_opnds() == 4) {
4507 unsigned num0 = 0;
4508 unsigned num1 = opnd_array(1)->num_edges(); // dst
4509 unsigned num2 = opnd_array(2)->num_edges(); // dst
4510 unsigned num3 = opnd_array(3)->num_edges(); // src
4511 unsigned idx0 = oper_input_base();
4512 unsigned idx1 = idx0 + num0;
4513 unsigned idx2 = idx1 + num1;
4514 unsigned idx3 = idx2 + num2;
4515 unsigned idx4 = idx3 + num3;
4516 set_opnd_array(2, opnd_array(3)->clone()); // src
4517 for (unsigned i = 0; i < num3; i++) {
4518 set_req(i + idx2, _in[i + idx3]);
4519 }
4520 num2 = num3;
4521 idx3 = idx2 + num2;
4522 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4523 del_req(i);
4524 }
4525 _num_opnds = 3;
4526 } else {
4527 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4526, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4528 }
4529
4530 return this;
4531}
4532
4533MachNode* orI_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4534 Compile* C = Compile::current();
4535 // Add projection edges for additional defs or kills
4536 // DEF/KILL cr
4537 MachProjNode *kill;
4538 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4539 proj_list.push(kill);
4540 // Remove duplicated operands and inputs which use the same name.
4541 if (num_opnds() == 4) {
4542 unsigned num0 = 0;
4543 unsigned num1 = opnd_array(1)->num_edges(); // dst
4544 unsigned num2 = opnd_array(2)->num_edges(); // src
4545 unsigned num3 = opnd_array(3)->num_edges(); // dst
4546 unsigned idx0 = oper_input_base();
4547 unsigned idx1 = idx0 + num0;
4548 unsigned idx2 = idx1 + num1;
4549 unsigned idx3 = idx2 + num2;
4550 unsigned idx4 = idx3 + num3;
4551 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4552 del_req(i);
4553 }
4554 _num_opnds = 3;
4555 } else {
4556 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4555, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4557 }
4558
4559 return this;
4560}
4561
4562MachNode* orI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4563 Compile* C = Compile::current();
4564 // Add projection edges for additional defs or kills
4565 // DEF/KILL cr
4566 MachProjNode *kill;
4567 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4568 proj_list.push(kill);
4569 // Remove duplicated operands and inputs which use the same name.
4570 if (num_opnds() == 4) {
4571 unsigned num0 = 0;
4572 unsigned num1 = opnd_array(1)->num_edges(); // dst
4573 unsigned num2 = opnd_array(2)->num_edges(); // dst
4574 unsigned num3 = opnd_array(3)->num_edges(); // src
4575 unsigned idx0 = oper_input_base();
4576 unsigned idx1 = idx0 + num0;
4577 unsigned idx2 = idx1 + num1;
4578 unsigned idx3 = idx2 + num2;
4579 unsigned idx4 = idx3 + num3;
4580 set_opnd_array(2, opnd_array(3)->clone()); // src
4581 for (unsigned i = 0; i < num3; i++) {
4582 set_req(i + idx2, _in[i + idx3]);
4583 }
4584 num2 = num3;
4585 idx3 = idx2 + num2;
4586 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4587 del_req(i);
4588 }
4589 _num_opnds = 3;
4590 } else {
4591 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4590, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4592 }
4593
4594 return this;
4595}
4596
4597MachNode* xorI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4598 Compile* C = Compile::current();
4599 // Add projection edges for additional defs or kills
4600 // DEF/KILL cr
4601 MachProjNode *kill;
4602 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4603 proj_list.push(kill);
4604
4605 return this;
4606}
4607
4608MachNode* xorI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4609 Compile* C = Compile::current();
4610 // Add projection edges for additional defs or kills
4611 // DEF/KILL cr
4612 MachProjNode *kill;
4613 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4614 proj_list.push(kill);
4615
4616 return this;
4617}
4618
4619MachNode* xorI_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4620 Compile* C = Compile::current();
4621 // Add projection edges for additional defs or kills
4622 // DEF/KILL cr
4623 MachProjNode *kill;
4624 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4625 proj_list.push(kill);
4626
4627 return this;
4628}
4629
4630MachNode* xorI_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4631 Compile* C = Compile::current();
4632 // Add projection edges for additional defs or kills
4633 // DEF/KILL cr
4634 MachProjNode *kill;
4635 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4636 proj_list.push(kill);
4637
4638 return this;
4639}
4640
4641MachNode* xorB_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4642 Compile* C = Compile::current();
4643 // Add projection edges for additional defs or kills
4644 // DEF/KILL cr
4645 MachProjNode *kill;
4646 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4647 proj_list.push(kill);
4648 // Remove duplicated operands and inputs which use the same name.
4649 if (num_opnds() == 4) {
4650 unsigned num0 = 0;
4651 unsigned num1 = opnd_array(1)->num_edges(); // dst
4652 unsigned num2 = opnd_array(2)->num_edges(); // dst
4653 unsigned num3 = opnd_array(3)->num_edges(); // src
4654 unsigned idx0 = oper_input_base();
4655 unsigned idx1 = idx0 + num0;
4656 unsigned idx2 = idx1 + num1;
4657 unsigned idx3 = idx2 + num2;
4658 unsigned idx4 = idx3 + num3;
4659 set_opnd_array(2, opnd_array(3)->clone()); // src
4660 for (unsigned i = 0; i < num3; i++) {
4661 set_req(i + idx2, _in[i + idx3]);
4662 }
4663 num2 = num3;
4664 idx3 = idx2 + num2;
4665 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4666 del_req(i);
4667 }
4668 _num_opnds = 3;
4669 } else {
4670 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4669, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4671 }
4672
4673 return this;
4674}
4675
4676MachNode* xorB_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4677 Compile* C = Compile::current();
4678 // Add projection edges for additional defs or kills
4679 // DEF/KILL cr
4680 MachProjNode *kill;
4681 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4682 proj_list.push(kill);
4683 // Remove duplicated operands and inputs which use the same name.
4684 if (num_opnds() == 4) {
4685 unsigned num0 = 0;
4686 unsigned num1 = opnd_array(1)->num_edges(); // dst
4687 unsigned num2 = opnd_array(2)->num_edges(); // src
4688 unsigned num3 = opnd_array(3)->num_edges(); // dst
4689 unsigned idx0 = oper_input_base();
4690 unsigned idx1 = idx0 + num0;
4691 unsigned idx2 = idx1 + num1;
4692 unsigned idx3 = idx2 + num2;
4693 unsigned idx4 = idx3 + num3;
4694 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4695 del_req(i);
4696 }
4697 _num_opnds = 3;
4698 } else {
4699 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4698, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4700 }
4701
4702 return this;
4703}
4704
4705MachNode* xorI_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4706 Compile* C = Compile::current();
4707 // Add projection edges for additional defs or kills
4708 // DEF/KILL cr
4709 MachProjNode *kill;
4710 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4711 proj_list.push(kill);
4712 // Remove duplicated operands and inputs which use the same name.
4713 if (num_opnds() == 4) {
4714 unsigned num0 = 0;
4715 unsigned num1 = opnd_array(1)->num_edges(); // dst
4716 unsigned num2 = opnd_array(2)->num_edges(); // dst
4717 unsigned num3 = opnd_array(3)->num_edges(); // src
4718 unsigned idx0 = oper_input_base();
4719 unsigned idx1 = idx0 + num0;
4720 unsigned idx2 = idx1 + num1;
4721 unsigned idx3 = idx2 + num2;
4722 unsigned idx4 = idx3 + num3;
4723 set_opnd_array(2, opnd_array(3)->clone()); // src
4724 for (unsigned i = 0; i < num3; i++) {
4725 set_req(i + idx2, _in[i + idx3]);
4726 }
4727 num2 = num3;
4728 idx3 = idx2 + num2;
4729 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4730 del_req(i);
4731 }
4732 _num_opnds = 3;
4733 } else {
4734 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4733, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4735 }
4736
4737 return this;
4738}
4739
4740MachNode* xorI_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4741 Compile* C = Compile::current();
4742 // Add projection edges for additional defs or kills
4743 // DEF/KILL cr
4744 MachProjNode *kill;
4745 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4746 proj_list.push(kill);
4747 // Remove duplicated operands and inputs which use the same name.
4748 if (num_opnds() == 4) {
4749 unsigned num0 = 0;
4750 unsigned num1 = opnd_array(1)->num_edges(); // dst
4751 unsigned num2 = opnd_array(2)->num_edges(); // src
4752 unsigned num3 = opnd_array(3)->num_edges(); // dst
4753 unsigned idx0 = oper_input_base();
4754 unsigned idx1 = idx0 + num0;
4755 unsigned idx2 = idx1 + num1;
4756 unsigned idx3 = idx2 + num2;
4757 unsigned idx4 = idx3 + num3;
4758 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4759 del_req(i);
4760 }
4761 _num_opnds = 3;
4762 } else {
4763 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4762, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4764 }
4765
4766 return this;
4767}
4768
4769MachNode* xorI_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4770 Compile* C = Compile::current();
4771 // Add projection edges for additional defs or kills
4772 // DEF/KILL cr
4773 MachProjNode *kill;
4774 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4775 proj_list.push(kill);
4776 // Remove duplicated operands and inputs which use the same name.
4777 if (num_opnds() == 4) {
4778 unsigned num0 = 0;
4779 unsigned num1 = opnd_array(1)->num_edges(); // dst
4780 unsigned num2 = opnd_array(2)->num_edges(); // dst
4781 unsigned num3 = opnd_array(3)->num_edges(); // src
4782 unsigned idx0 = oper_input_base();
4783 unsigned idx1 = idx0 + num0;
4784 unsigned idx2 = idx1 + num1;
4785 unsigned idx3 = idx2 + num2;
4786 unsigned idx4 = idx3 + num3;
4787 set_opnd_array(2, opnd_array(3)->clone()); // src
4788 for (unsigned i = 0; i < num3; i++) {
4789 set_req(i + idx2, _in[i + idx3]);
4790 }
4791 num2 = num3;
4792 idx3 = idx2 + num2;
4793 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4794 del_req(i);
4795 }
4796 _num_opnds = 3;
4797 } else {
4798 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4797, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4799 }
4800
4801 return this;
4802}
4803
4804MachNode* andL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4805 Compile* C = Compile::current();
4806 // Add projection edges for additional defs or kills
4807 // DEF/KILL cr
4808 MachProjNode *kill;
4809 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4810 proj_list.push(kill);
4811
4812 return this;
4813}
4814
4815MachNode* andL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4816 Compile* C = Compile::current();
4817 // Add projection edges for additional defs or kills
4818 // DEF/KILL cr
4819 MachProjNode *kill;
4820 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4821 proj_list.push(kill);
4822
4823 return this;
4824}
4825
4826MachNode* andL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4827 Compile* C = Compile::current();
4828 // Add projection edges for additional defs or kills
4829 // DEF/KILL cr
4830 MachProjNode *kill;
4831 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4832 proj_list.push(kill);
4833
4834 return this;
4835}
4836
4837MachNode* andL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4838 Compile* C = Compile::current();
4839 // Add projection edges for additional defs or kills
4840 // DEF/KILL cr
4841 MachProjNode *kill;
4842 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4843 proj_list.push(kill);
4844
4845 return this;
4846}
4847
4848MachNode* andL_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4849 Compile* C = Compile::current();
4850 // Add projection edges for additional defs or kills
4851 // DEF/KILL cr
4852 MachProjNode *kill;
4853 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4854 proj_list.push(kill);
4855 // Remove duplicated operands and inputs which use the same name.
4856 if (num_opnds() == 4) {
4857 unsigned num0 = 0;
4858 unsigned num1 = opnd_array(1)->num_edges(); // dst
4859 unsigned num2 = opnd_array(2)->num_edges(); // dst
4860 unsigned num3 = opnd_array(3)->num_edges(); // src
4861 unsigned idx0 = oper_input_base();
4862 unsigned idx1 = idx0 + num0;
4863 unsigned idx2 = idx1 + num1;
4864 unsigned idx3 = idx2 + num2;
4865 unsigned idx4 = idx3 + num3;
4866 set_opnd_array(2, opnd_array(3)->clone()); // src
4867 for (unsigned i = 0; i < num3; i++) {
4868 set_req(i + idx2, _in[i + idx3]);
4869 }
4870 num2 = num3;
4871 idx3 = idx2 + num2;
4872 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4873 del_req(i);
4874 }
4875 _num_opnds = 3;
4876 } else {
4877 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4876, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4878 }
4879
4880 return this;
4881}
4882
4883MachNode* andL_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4884 Compile* C = Compile::current();
4885 // Add projection edges for additional defs or kills
4886 // DEF/KILL cr
4887 MachProjNode *kill;
4888 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4889 proj_list.push(kill);
4890 // Remove duplicated operands and inputs which use the same name.
4891 if (num_opnds() == 4) {
4892 unsigned num0 = 0;
4893 unsigned num1 = opnd_array(1)->num_edges(); // dst
4894 unsigned num2 = opnd_array(2)->num_edges(); // src
4895 unsigned num3 = opnd_array(3)->num_edges(); // dst
4896 unsigned idx0 = oper_input_base();
4897 unsigned idx1 = idx0 + num0;
4898 unsigned idx2 = idx1 + num1;
4899 unsigned idx3 = idx2 + num2;
4900 unsigned idx4 = idx3 + num3;
4901 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4902 del_req(i);
4903 }
4904 _num_opnds = 3;
4905 } else {
4906 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4905, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4907 }
4908
4909 return this;
4910}
4911
4912MachNode* andL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4913 Compile* C = Compile::current();
4914 // Add projection edges for additional defs or kills
4915 // DEF/KILL cr
4916 MachProjNode *kill;
4917 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4918 proj_list.push(kill);
4919 // Remove duplicated operands and inputs which use the same name.
4920 if (num_opnds() == 4) {
4921 unsigned num0 = 0;
4922 unsigned num1 = opnd_array(1)->num_edges(); // dst
4923 unsigned num2 = opnd_array(2)->num_edges(); // dst
4924 unsigned num3 = opnd_array(3)->num_edges(); // src
4925 unsigned idx0 = oper_input_base();
4926 unsigned idx1 = idx0 + num0;
4927 unsigned idx2 = idx1 + num1;
4928 unsigned idx3 = idx2 + num2;
4929 unsigned idx4 = idx3 + num3;
4930 set_opnd_array(2, opnd_array(3)->clone()); // src
4931 for (unsigned i = 0; i < num3; i++) {
4932 set_req(i + idx2, _in[i + idx3]);
4933 }
4934 num2 = num3;
4935 idx3 = idx2 + num2;
4936 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4937 del_req(i);
4938 }
4939 _num_opnds = 3;
4940 } else {
4941 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4940, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4942 }
4943
4944 return this;
4945}
4946
4947MachNode* btrL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4948 Compile* C = Compile::current();
4949 // Add projection edges for additional defs or kills
4950 // DEF/KILL cr
4951 MachProjNode *kill;
4952 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4953 proj_list.push(kill);
4954 // Remove duplicated operands and inputs which use the same name.
4955 if (num_opnds() == 4) {
4956 unsigned num0 = 0;
4957 unsigned num1 = opnd_array(1)->num_edges(); // dst
4958 unsigned num2 = opnd_array(2)->num_edges(); // dst
4959 unsigned num3 = opnd_array(3)->num_edges(); // con
4960 unsigned idx0 = oper_input_base();
4961 unsigned idx1 = idx0 + num0;
4962 unsigned idx2 = idx1 + num1;
4963 unsigned idx3 = idx2 + num2;
4964 unsigned idx4 = idx3 + num3;
4965 set_opnd_array(2, opnd_array(3)->clone()); // con
4966 for (unsigned i = 0; i < num3; i++) {
4967 set_req(i + idx2, _in[i + idx3]);
4968 }
4969 num2 = num3;
4970 idx3 = idx2 + num2;
4971 for (int i = idx4 - 1; i >= (int)idx3; i--) {
4972 del_req(i);
4973 }
4974 _num_opnds = 3;
4975 } else {
4976 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 4975, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
4977 }
4978
4979 return this;
4980}
4981
4982MachNode* andnL_rReg_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
4983 Compile* C = Compile::current();
4984 // Add projection edges for additional defs or kills
4985 // DEF/KILL cr
4986 MachProjNode *kill;
4987 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4988 proj_list.push(kill);
4989
4990 return this;
4991}
4992
4993MachNode* andnL_rReg_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
4994 Compile* C = Compile::current();
4995 // Add projection edges for additional defs or kills
4996 // DEF/KILL cr
4997 MachProjNode *kill;
4998 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
4999 proj_list.push(kill);
5000
5001 return this;
5002}
5003
5004MachNode* andnL_rReg_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5005 Compile* C = Compile::current();
5006 // Add projection edges for additional defs or kills
5007 // DEF/KILL cr
5008 MachProjNode *kill;
5009 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5010 proj_list.push(kill);
5011
5012 return this;
5013}
5014
5015MachNode* andnL_rReg_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5016 Compile* C = Compile::current();
5017 // Add projection edges for additional defs or kills
5018 // DEF/KILL cr
5019 MachProjNode *kill;
5020 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5021 proj_list.push(kill);
5022
5023 return this;
5024}
5025
5026MachNode* blsiL_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5027 Compile* C = Compile::current();
5028 // Add projection edges for additional defs or kills
5029 // DEF/KILL cr
5030 MachProjNode *kill;
5031 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5032 proj_list.push(kill);
5033 // Remove duplicated operands and inputs which use the same name.
5034 if (num_opnds() == 4) {
5035 unsigned num0 = 0;
5036 unsigned num1 = opnd_array(1)->num_edges(); // imm_zero
5037 unsigned num2 = opnd_array(2)->num_edges(); // src
5038 unsigned num3 = opnd_array(3)->num_edges(); // src
5039 unsigned idx0 = oper_input_base();
5040 unsigned idx1 = idx0 + num0;
5041 unsigned idx2 = idx1 + num1;
5042 unsigned idx3 = idx2 + num2;
5043 unsigned idx4 = idx3 + num3;
5044 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5045 del_req(i);
5046 }
5047 _num_opnds = 3;
5048 } else {
5049 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5048, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5050 }
5051
5052 return this;
5053}
5054
5055MachNode* blsiL_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5056 Compile* C = Compile::current();
5057 // Add projection edges for additional defs or kills
5058 // DEF/KILL cr
5059 MachProjNode *kill;
5060 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5061 proj_list.push(kill);
5062 // Remove duplicated operands and inputs which use the same name.
5063 if (num_opnds() == 4) {
5064 unsigned num0 = 0;
5065 unsigned num1 = opnd_array(1)->num_edges(); // src
5066 unsigned num2 = opnd_array(2)->num_edges(); // imm_zero
5067 unsigned num3 = opnd_array(3)->num_edges(); // src
5068 unsigned idx0 = oper_input_base();
5069 unsigned idx1 = idx0 + num0;
5070 unsigned idx2 = idx1 + num1;
5071 unsigned idx3 = idx2 + num2;
5072 unsigned idx4 = idx3 + num3;
5073 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5074 del_req(i);
5075 }
5076 _num_opnds = 3;
5077 } else {
5078 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5077, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5079 }
5080
5081 return this;
5082}
5083
5084MachNode* blsiL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5085 Compile* C = Compile::current();
5086 // Add projection edges for additional defs or kills
5087 // DEF/KILL cr
5088 MachProjNode *kill;
5089 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5090 proj_list.push(kill);
5091 // Remove duplicated operands and inputs which use the same name.
5092 if (num_opnds() == 4) {
5093 unsigned num0 = 0;
5094 unsigned num1 = opnd_array(1)->num_edges(); // imm_zero
5095 unsigned num2 = opnd_array(2)->num_edges(); // src
5096 unsigned num3 = opnd_array(3)->num_edges(); // src
5097 unsigned idx0 = oper_input_base();
5098 unsigned idx1 = idx0 + num0;
5099 unsigned idx2 = idx1 + num1;
5100 unsigned idx3 = idx2 + num2;
5101 unsigned idx4 = idx3 + num3;
5102 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5103 del_req(i);
5104 }
5105 _num_opnds = 3;
5106 } else {
5107 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5106, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5108 }
5109
5110 return this;
5111}
5112
5113MachNode* blsiL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5114 Compile* C = Compile::current();
5115 // Add projection edges for additional defs or kills
5116 // DEF/KILL cr
5117 MachProjNode *kill;
5118 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5119 proj_list.push(kill);
5120 // Remove duplicated operands and inputs which use the same name.
5121 if (num_opnds() == 4) {
5122 unsigned num0 = 0;
5123 unsigned num1 = opnd_array(1)->num_edges(); // src
5124 unsigned num2 = opnd_array(2)->num_edges(); // imm_zero
5125 unsigned num3 = opnd_array(3)->num_edges(); // src
5126 unsigned idx0 = oper_input_base();
5127 unsigned idx1 = idx0 + num0;
5128 unsigned idx2 = idx1 + num1;
5129 unsigned idx3 = idx2 + num2;
5130 unsigned idx4 = idx3 + num3;
5131 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5132 del_req(i);
5133 }
5134 _num_opnds = 3;
5135 } else {
5136 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5135, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5137 }
5138
5139 return this;
5140}
5141
5142MachNode* blsmskL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5143 Compile* C = Compile::current();
5144 // Add projection edges for additional defs or kills
5145 // DEF/KILL cr
5146 MachProjNode *kill;
5147 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5148 proj_list.push(kill);
5149 // Remove duplicated operands and inputs which use the same name.
5150 if (num_opnds() == 4) {
5151 unsigned num0 = 0;
5152 unsigned num1 = opnd_array(1)->num_edges(); // src
5153 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
5154 unsigned num3 = opnd_array(3)->num_edges(); // src
5155 unsigned idx0 = oper_input_base();
5156 unsigned idx1 = idx0 + num0;
5157 unsigned idx2 = idx1 + num1;
5158 unsigned idx3 = idx2 + num2;
5159 unsigned idx4 = idx3 + num3;
5160 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5161 del_req(i);
5162 }
5163 _num_opnds = 3;
5164 } else {
5165 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5164, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5166 }
5167
5168 return this;
5169}
5170
5171MachNode* blsmskL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5172 Compile* C = Compile::current();
5173 // Add projection edges for additional defs or kills
5174 // DEF/KILL cr
5175 MachProjNode *kill;
5176 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5177 proj_list.push(kill);
5178 // Remove duplicated operands and inputs which use the same name.
5179 if (num_opnds() == 4) {
5180 unsigned num0 = 0;
5181 unsigned num1 = opnd_array(1)->num_edges(); // src
5182 unsigned num2 = opnd_array(2)->num_edges(); // src
5183 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
5184 unsigned idx0 = oper_input_base();
5185 unsigned idx1 = idx0 + num0;
5186 unsigned idx2 = idx1 + num1;
5187 unsigned idx3 = idx2 + num2;
5188 unsigned idx4 = idx3 + num3;
5189 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
5190 for (unsigned i = 0; i < num3; i++) {
5191 set_req(i + idx2, _in[i + idx3]);
5192 }
5193 num2 = num3;
5194 idx3 = idx2 + num2;
5195 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5196 del_req(i);
5197 }
5198 _num_opnds = 3;
5199 } else {
5200 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5199, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5201 }
5202
5203 return this;
5204}
5205
5206MachNode* blsmskL_rReg_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5207 Compile* C = Compile::current();
5208 // Add projection edges for additional defs or kills
5209 // DEF/KILL cr
5210 MachProjNode *kill;
5211 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5212 proj_list.push(kill);
5213 // Remove duplicated operands and inputs which use the same name.
5214 if (num_opnds() == 4) {
5215 unsigned num0 = 0;
5216 unsigned num1 = opnd_array(1)->num_edges(); // src
5217 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
5218 unsigned num3 = opnd_array(3)->num_edges(); // src
5219 unsigned idx0 = oper_input_base();
5220 unsigned idx1 = idx0 + num0;
5221 unsigned idx2 = idx1 + num1;
5222 unsigned idx3 = idx2 + num2;
5223 unsigned idx4 = idx3 + num3;
5224 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5225 del_req(i);
5226 }
5227 _num_opnds = 3;
5228 } else {
5229 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5228, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5230 }
5231
5232 return this;
5233}
5234
5235MachNode* blsmskL_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5236 Compile* C = Compile::current();
5237 // Add projection edges for additional defs or kills
5238 // DEF/KILL cr
5239 MachProjNode *kill;
5240 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5241 proj_list.push(kill);
5242 // Remove duplicated operands and inputs which use the same name.
5243 if (num_opnds() == 4) {
5244 unsigned num0 = 0;
5245 unsigned num1 = opnd_array(1)->num_edges(); // src
5246 unsigned num2 = opnd_array(2)->num_edges(); // src
5247 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
5248 unsigned idx0 = oper_input_base();
5249 unsigned idx1 = idx0 + num0;
5250 unsigned idx2 = idx1 + num1;
5251 unsigned idx3 = idx2 + num2;
5252 unsigned idx4 = idx3 + num3;
5253 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
5254 for (unsigned i = 0; i < num3; i++) {
5255 set_req(i + idx2, _in[i + idx3]);
5256 }
5257 num2 = num3;
5258 idx3 = idx2 + num2;
5259 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5260 del_req(i);
5261 }
5262 _num_opnds = 3;
5263 } else {
5264 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5263, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5265 }
5266
5267 return this;
5268}
5269
5270MachNode* blsrL_rReg_rRegNode::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 // Remove duplicated operands and inputs which use the same name.
5278 if (num_opnds() == 4) {
5279 unsigned num0 = 0;
5280 unsigned num1 = opnd_array(1)->num_edges(); // src
5281 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
5282 unsigned num3 = opnd_array(3)->num_edges(); // src
5283 unsigned idx0 = oper_input_base();
5284 unsigned idx1 = idx0 + num0;
5285 unsigned idx2 = idx1 + num1;
5286 unsigned idx3 = idx2 + num2;
5287 unsigned idx4 = idx3 + num3;
5288 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5289 del_req(i);
5290 }
5291 _num_opnds = 3;
5292 } else {
5293 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5292, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5294 }
5295
5296 return this;
5297}
5298
5299MachNode* blsrL_rReg_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5300 Compile* C = Compile::current();
5301 // Add projection edges for additional defs or kills
5302 // DEF/KILL cr
5303 MachProjNode *kill;
5304 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5305 proj_list.push(kill);
5306 // Remove duplicated operands and inputs which use the same name.
5307 if (num_opnds() == 4) {
5308 unsigned num0 = 0;
5309 unsigned num1 = opnd_array(1)->num_edges(); // src
5310 unsigned num2 = opnd_array(2)->num_edges(); // src
5311 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
5312 unsigned idx0 = oper_input_base();
5313 unsigned idx1 = idx0 + num0;
5314 unsigned idx2 = idx1 + num1;
5315 unsigned idx3 = idx2 + num2;
5316 unsigned idx4 = idx3 + num3;
5317 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
5318 for (unsigned i = 0; i < num3; i++) {
5319 set_req(i + idx2, _in[i + idx3]);
5320 }
5321 num2 = num3;
5322 idx3 = idx2 + num2;
5323 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5324 del_req(i);
5325 }
5326 _num_opnds = 3;
5327 } else {
5328 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5327, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5329 }
5330
5331 return this;
5332}
5333
5334MachNode* blsrL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5335 Compile* C = Compile::current();
5336 // Add projection edges for additional defs or kills
5337 // DEF/KILL cr
5338 MachProjNode *kill;
5339 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5340 proj_list.push(kill);
5341 // Remove duplicated operands and inputs which use the same name.
5342 if (num_opnds() == 4) {
5343 unsigned num0 = 0;
5344 unsigned num1 = opnd_array(1)->num_edges(); // src
5345 unsigned num2 = opnd_array(2)->num_edges(); // minus_1
5346 unsigned num3 = opnd_array(3)->num_edges(); // src
5347 unsigned idx0 = oper_input_base();
5348 unsigned idx1 = idx0 + num0;
5349 unsigned idx2 = idx1 + num1;
5350 unsigned idx3 = idx2 + num2;
5351 unsigned idx4 = idx3 + num3;
5352 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5353 del_req(i);
5354 }
5355 _num_opnds = 3;
5356 } else {
5357 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5356, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5358 }
5359
5360 return this;
5361}
5362
5363MachNode* blsrL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5364 Compile* C = Compile::current();
5365 // Add projection edges for additional defs or kills
5366 // DEF/KILL cr
5367 MachProjNode *kill;
5368 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5369 proj_list.push(kill);
5370 // Remove duplicated operands and inputs which use the same name.
5371 if (num_opnds() == 4) {
5372 unsigned num0 = 0;
5373 unsigned num1 = opnd_array(1)->num_edges(); // src
5374 unsigned num2 = opnd_array(2)->num_edges(); // src
5375 unsigned num3 = opnd_array(3)->num_edges(); // minus_1
5376 unsigned idx0 = oper_input_base();
5377 unsigned idx1 = idx0 + num0;
5378 unsigned idx2 = idx1 + num1;
5379 unsigned idx3 = idx2 + num2;
5380 unsigned idx4 = idx3 + num3;
5381 set_opnd_array(2, opnd_array(3)->clone()); // minus_1
5382 for (unsigned i = 0; i < num3; i++) {
5383 set_req(i + idx2, _in[i + idx3]);
5384 }
5385 num2 = num3;
5386 idx3 = idx2 + num2;
5387 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5388 del_req(i);
5389 }
5390 _num_opnds = 3;
5391 } else {
5392 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5391, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5393 }
5394
5395 return this;
5396}
5397
5398MachNode* orL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5399 Compile* C = Compile::current();
5400 // Add projection edges for additional defs or kills
5401 // DEF/KILL cr
5402 MachProjNode *kill;
5403 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5404 proj_list.push(kill);
5405
5406 return this;
5407}
5408
5409MachNode* orL_rReg_castP2XNode::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
5417 return this;
5418}
5419
5420MachNode* orL_rReg_castP2X_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5421 Compile* C = Compile::current();
5422 // Add projection edges for additional defs or kills
5423 // DEF/KILL cr
5424 MachProjNode *kill;
5425 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5426 proj_list.push(kill);
5427
5428 return this;
5429}
5430
5431MachNode* orL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5432 Compile* C = Compile::current();
5433 // Add projection edges for additional defs or kills
5434 // DEF/KILL cr
5435 MachProjNode *kill;
5436 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5437 proj_list.push(kill);
5438
5439 return this;
5440}
5441
5442MachNode* orL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5443 Compile* C = Compile::current();
5444 // Add projection edges for additional defs or kills
5445 // DEF/KILL cr
5446 MachProjNode *kill;
5447 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5448 proj_list.push(kill);
5449
5450 return this;
5451}
5452
5453MachNode* orL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5454 Compile* C = Compile::current();
5455 // Add projection edges for additional defs or kills
5456 // DEF/KILL cr
5457 MachProjNode *kill;
5458 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5459 proj_list.push(kill);
5460
5461 return this;
5462}
5463
5464MachNode* orL_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5465 Compile* C = Compile::current();
5466 // Add projection edges for additional defs or kills
5467 // DEF/KILL cr
5468 MachProjNode *kill;
5469 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5470 proj_list.push(kill);
5471 // Remove duplicated operands and inputs which use the same name.
5472 if (num_opnds() == 4) {
5473 unsigned num0 = 0;
5474 unsigned num1 = opnd_array(1)->num_edges(); // dst
5475 unsigned num2 = opnd_array(2)->num_edges(); // dst
5476 unsigned num3 = opnd_array(3)->num_edges(); // src
5477 unsigned idx0 = oper_input_base();
5478 unsigned idx1 = idx0 + num0;
5479 unsigned idx2 = idx1 + num1;
5480 unsigned idx3 = idx2 + num2;
5481 unsigned idx4 = idx3 + num3;
5482 set_opnd_array(2, opnd_array(3)->clone()); // src
5483 for (unsigned i = 0; i < num3; i++) {
5484 set_req(i + idx2, _in[i + idx3]);
5485 }
5486 num2 = num3;
5487 idx3 = idx2 + num2;
5488 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5489 del_req(i);
5490 }
5491 _num_opnds = 3;
5492 } else {
5493 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5492, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5494 }
5495
5496 return this;
5497}
5498
5499MachNode* orL_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5500 Compile* C = Compile::current();
5501 // Add projection edges for additional defs or kills
5502 // DEF/KILL cr
5503 MachProjNode *kill;
5504 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5505 proj_list.push(kill);
5506 // Remove duplicated operands and inputs which use the same name.
5507 if (num_opnds() == 4) {
5508 unsigned num0 = 0;
5509 unsigned num1 = opnd_array(1)->num_edges(); // dst
5510 unsigned num2 = opnd_array(2)->num_edges(); // src
5511 unsigned num3 = opnd_array(3)->num_edges(); // dst
5512 unsigned idx0 = oper_input_base();
5513 unsigned idx1 = idx0 + num0;
5514 unsigned idx2 = idx1 + num1;
5515 unsigned idx3 = idx2 + num2;
5516 unsigned idx4 = idx3 + num3;
5517 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5518 del_req(i);
5519 }
5520 _num_opnds = 3;
5521 } else {
5522 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5521, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5523 }
5524
5525 return this;
5526}
5527
5528MachNode* orL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5529 Compile* C = Compile::current();
5530 // Add projection edges for additional defs or kills
5531 // DEF/KILL cr
5532 MachProjNode *kill;
5533 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5534 proj_list.push(kill);
5535 // Remove duplicated operands and inputs which use the same name.
5536 if (num_opnds() == 4) {
5537 unsigned num0 = 0;
5538 unsigned num1 = opnd_array(1)->num_edges(); // dst
5539 unsigned num2 = opnd_array(2)->num_edges(); // dst
5540 unsigned num3 = opnd_array(3)->num_edges(); // src
5541 unsigned idx0 = oper_input_base();
5542 unsigned idx1 = idx0 + num0;
5543 unsigned idx2 = idx1 + num1;
5544 unsigned idx3 = idx2 + num2;
5545 unsigned idx4 = idx3 + num3;
5546 set_opnd_array(2, opnd_array(3)->clone()); // src
5547 for (unsigned i = 0; i < num3; i++) {
5548 set_req(i + idx2, _in[i + idx3]);
5549 }
5550 num2 = num3;
5551 idx3 = idx2 + num2;
5552 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5553 del_req(i);
5554 }
5555 _num_opnds = 3;
5556 } else {
5557 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5556, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5558 }
5559
5560 return this;
5561}
5562
5563MachNode* btsL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5564 Compile* C = Compile::current();
5565 // Add projection edges for additional defs or kills
5566 // DEF/KILL cr
5567 MachProjNode *kill;
5568 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5569 proj_list.push(kill);
5570 // Remove duplicated operands and inputs which use the same name.
5571 if (num_opnds() == 4) {
5572 unsigned num0 = 0;
5573 unsigned num1 = opnd_array(1)->num_edges(); // dst
5574 unsigned num2 = opnd_array(2)->num_edges(); // dst
5575 unsigned num3 = opnd_array(3)->num_edges(); // con
5576 unsigned idx0 = oper_input_base();
5577 unsigned idx1 = idx0 + num0;
5578 unsigned idx2 = idx1 + num1;
5579 unsigned idx3 = idx2 + num2;
5580 unsigned idx4 = idx3 + num3;
5581 set_opnd_array(2, opnd_array(3)->clone()); // con
5582 for (unsigned i = 0; i < num3; i++) {
5583 set_req(i + idx2, _in[i + idx3]);
5584 }
5585 num2 = num3;
5586 idx3 = idx2 + num2;
5587 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5588 del_req(i);
5589 }
5590 _num_opnds = 3;
5591 } else {
5592 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5591, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5593 }
5594
5595 return this;
5596}
5597
5598MachNode* xorL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5599 Compile* C = Compile::current();
5600 // Add projection edges for additional defs or kills
5601 // DEF/KILL cr
5602 MachProjNode *kill;
5603 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5604 proj_list.push(kill);
5605
5606 return this;
5607}
5608
5609MachNode* xorL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5610 Compile* C = Compile::current();
5611 // Add projection edges for additional defs or kills
5612 // DEF/KILL cr
5613 MachProjNode *kill;
5614 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5615 proj_list.push(kill);
5616
5617 return this;
5618}
5619
5620MachNode* xorL_rReg_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5621 Compile* C = Compile::current();
5622 // Add projection edges for additional defs or kills
5623 // DEF/KILL cr
5624 MachProjNode *kill;
5625 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5626 proj_list.push(kill);
5627
5628 return this;
5629}
5630
5631MachNode* xorL_rReg_mem_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5632 Compile* C = Compile::current();
5633 // Add projection edges for additional defs or kills
5634 // DEF/KILL cr
5635 MachProjNode *kill;
5636 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5637 proj_list.push(kill);
5638
5639 return this;
5640}
5641
5642MachNode* xorL_mem_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5643 Compile* C = Compile::current();
5644 // Add projection edges for additional defs or kills
5645 // DEF/KILL cr
5646 MachProjNode *kill;
5647 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5648 proj_list.push(kill);
5649 // Remove duplicated operands and inputs which use the same name.
5650 if (num_opnds() == 4) {
5651 unsigned num0 = 0;
5652 unsigned num1 = opnd_array(1)->num_edges(); // dst
5653 unsigned num2 = opnd_array(2)->num_edges(); // dst
5654 unsigned num3 = opnd_array(3)->num_edges(); // src
5655 unsigned idx0 = oper_input_base();
5656 unsigned idx1 = idx0 + num0;
5657 unsigned idx2 = idx1 + num1;
5658 unsigned idx3 = idx2 + num2;
5659 unsigned idx4 = idx3 + num3;
5660 set_opnd_array(2, opnd_array(3)->clone()); // src
5661 for (unsigned i = 0; i < num3; i++) {
5662 set_req(i + idx2, _in[i + idx3]);
5663 }
5664 num2 = num3;
5665 idx3 = idx2 + num2;
5666 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5667 del_req(i);
5668 }
5669 _num_opnds = 3;
5670 } else {
5671 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5670, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5672 }
5673
5674 return this;
5675}
5676
5677MachNode* xorL_mem_rReg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5678 Compile* C = Compile::current();
5679 // Add projection edges for additional defs or kills
5680 // DEF/KILL cr
5681 MachProjNode *kill;
5682 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5683 proj_list.push(kill);
5684 // Remove duplicated operands and inputs which use the same name.
5685 if (num_opnds() == 4) {
5686 unsigned num0 = 0;
5687 unsigned num1 = opnd_array(1)->num_edges(); // dst
5688 unsigned num2 = opnd_array(2)->num_edges(); // src
5689 unsigned num3 = opnd_array(3)->num_edges(); // dst
5690 unsigned idx0 = oper_input_base();
5691 unsigned idx1 = idx0 + num0;
5692 unsigned idx2 = idx1 + num1;
5693 unsigned idx3 = idx2 + num2;
5694 unsigned idx4 = idx3 + num3;
5695 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5696 del_req(i);
5697 }
5698 _num_opnds = 3;
5699 } else {
5700 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5699, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5701 }
5702
5703 return this;
5704}
5705
5706MachNode* xorL_mem_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5707 Compile* C = Compile::current();
5708 // Add projection edges for additional defs or kills
5709 // DEF/KILL cr
5710 MachProjNode *kill;
5711 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5712 proj_list.push(kill);
5713 // Remove duplicated operands and inputs which use the same name.
5714 if (num_opnds() == 4) {
5715 unsigned num0 = 0;
5716 unsigned num1 = opnd_array(1)->num_edges(); // dst
5717 unsigned num2 = opnd_array(2)->num_edges(); // dst
5718 unsigned num3 = opnd_array(3)->num_edges(); // src
5719 unsigned idx0 = oper_input_base();
5720 unsigned idx1 = idx0 + num0;
5721 unsigned idx2 = idx1 + num1;
5722 unsigned idx3 = idx2 + num2;
5723 unsigned idx4 = idx3 + num3;
5724 set_opnd_array(2, opnd_array(3)->clone()); // src
5725 for (unsigned i = 0; i < num3; i++) {
5726 set_req(i + idx2, _in[i + idx3]);
5727 }
5728 num2 = num3;
5729 idx3 = idx2 + num2;
5730 for (int i = idx4 - 1; i >= (int)idx3; i--) {
5731 del_req(i);
5732 }
5733 _num_opnds = 3;
5734 } else {
5735 assert(_num_opnds == 3, "There should be either 3 or 4 operands.")do { if (!(_num_opnds == 3)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5734, "assert(" "_num_opnds == 3" ") failed"
, "There should be either 3 or 4 operands."); ::breakpoint();
} } while (0)
;
5736 }
5737
5738 return this;
5739}
5740
5741MachNode* convI2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5742 Compile* C = Compile::current();
5743 // Add projection edges for additional defs or kills
5744 // DEF/KILL cr
5745 MachProjNode *kill;
5746 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5747 proj_list.push(kill);
5748
5749 return this;
5750}
5751
5752MachNode* convP2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5753 Compile* C = Compile::current();
5754 // Add projection edges for additional defs or kills
5755 // DEF/KILL cr
5756 MachProjNode *kill;
5757 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5758 proj_list.push(kill);
5759
5760 return this;
5761}
5762
5763MachNode* cmpLTMaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5764 Compile* C = Compile::current();
5765 // Add projection edges for additional defs or kills
5766 // DEF/KILL cr
5767 MachProjNode *kill;
5768 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5769 proj_list.push(kill);
5770
5771 return this;
5772}
5773
5774MachNode* cmpLTMask0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5775 Compile* C = Compile::current();
5776 // Add projection edges for additional defs or kills
5777 // DEF/KILL cr
5778 MachProjNode *kill;
5779 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5780 proj_list.push(kill);
5781
5782 return this;
5783}
5784
5785MachNode* cadd_cmpLTMaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5786 Compile* C = Compile::current();
5787 // Add projection edges for additional defs or kills
5788 // DEF/KILL cr
5789 MachProjNode *kill;
5790 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5791 proj_list.push(kill);
5792 // Remove duplicated operands and inputs which use the same name.
5793 if (num_opnds() == 6) {
5794 unsigned num0 = 0;
5795 unsigned num1 = opnd_array(1)->num_edges(); // p
5796 unsigned num2 = opnd_array(2)->num_edges(); // q
5797 unsigned num3 = opnd_array(3)->num_edges(); // y
5798 unsigned num4 = opnd_array(4)->num_edges(); // p
5799 unsigned num5 = opnd_array(5)->num_edges(); // q
5800 unsigned idx0 = oper_input_base();
5801 unsigned idx1 = idx0 + num0;
5802 unsigned idx2 = idx1 + num1;
5803 unsigned idx3 = idx2 + num2;
5804 unsigned idx4 = idx3 + num3;
5805 unsigned idx5 = idx4 + num4;
5806 unsigned idx6 = idx5 + num5;
5807 for (int i = idx6 - 1; i >= (int)idx4; i--) {
5808 del_req(i);
5809 }
5810 _num_opnds = 4;
5811 } else {
5812 assert(_num_opnds == 4, "There should be either 4 or 6 operands.")do { if (!(_num_opnds == 4)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5811, "assert(" "_num_opnds == 4" ") failed"
, "There should be either 4 or 6 operands."); ::breakpoint();
} } while (0)
;
5813 }
5814
5815 return this;
5816}
5817
5818MachNode* cadd_cmpLTMask_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5819 Compile* C = Compile::current();
5820 // Add projection edges for additional defs or kills
5821 // DEF/KILL cr
5822 MachProjNode *kill;
5823 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5824 proj_list.push(kill);
5825 // Remove duplicated operands and inputs which use the same name.
5826 if (num_opnds() == 6) {
5827 unsigned num0 = 0;
5828 unsigned num1 = opnd_array(1)->num_edges(); // p
5829 unsigned num2 = opnd_array(2)->num_edges(); // q
5830 unsigned num3 = opnd_array(3)->num_edges(); // p
5831 unsigned num4 = opnd_array(4)->num_edges(); // q
5832 unsigned num5 = opnd_array(5)->num_edges(); // y
5833 unsigned idx0 = oper_input_base();
5834 unsigned idx1 = idx0 + num0;
5835 unsigned idx2 = idx1 + num1;
5836 unsigned idx3 = idx2 + num2;
5837 unsigned idx4 = idx3 + num3;
5838 unsigned idx5 = idx4 + num4;
5839 unsigned idx6 = idx5 + num5;
5840 set_opnd_array(3, opnd_array(5)->clone()); // y
5841 for (unsigned i = 0; i < num5; i++) {
5842 set_req(i + idx3, _in[i + idx5]);
5843 }
5844 num3 = num5;
5845 idx4 = idx3 + num3;
5846 for (int i = idx6 - 1; i >= (int)idx4; i--) {
5847 del_req(i);
5848 }
5849 _num_opnds = 4;
5850 } else {
5851 assert(_num_opnds == 4, "There should be either 4 or 6 operands.")do { if (!(_num_opnds == 4)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5850, "assert(" "_num_opnds == 4" ") failed"
, "There should be either 4 or 6 operands."); ::breakpoint();
} } while (0)
;
5852 }
5853
5854 return this;
5855}
5856
5857MachNode* cadd_cmpLTMask_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5858 Compile* C = Compile::current();
5859 // Add projection edges for additional defs or kills
5860 // DEF/KILL cr
5861 MachProjNode *kill;
5862 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5863 proj_list.push(kill);
5864 // Remove duplicated operands and inputs which use the same name.
5865 if (num_opnds() == 6) {
5866 unsigned num0 = 0;
5867 unsigned num1 = opnd_array(1)->num_edges(); // y
5868 unsigned num2 = opnd_array(2)->num_edges(); // p
5869 unsigned num3 = opnd_array(3)->num_edges(); // q
5870 unsigned num4 = opnd_array(4)->num_edges(); // p
5871 unsigned num5 = opnd_array(5)->num_edges(); // q
5872 unsigned idx0 = oper_input_base();
5873 unsigned idx1 = idx0 + num0;
5874 unsigned idx2 = idx1 + num1;
5875 unsigned idx3 = idx2 + num2;
5876 unsigned idx4 = idx3 + num3;
5877 unsigned idx5 = idx4 + num4;
5878 unsigned idx6 = idx5 + num5;
5879 for (int i = idx6 - 1; i >= (int)idx4; i--) {
5880 del_req(i);
5881 }
5882 _num_opnds = 4;
5883 } else {
5884 assert(_num_opnds == 4, "There should be either 4 or 6 operands.")do { if (!(_num_opnds == 4)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5883, "assert(" "_num_opnds == 4" ") failed"
, "There should be either 4 or 6 operands."); ::breakpoint();
} } while (0)
;
5885 }
5886
5887 return this;
5888}
5889
5890MachNode* cadd_cmpLTMask_2Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5891 Compile* C = Compile::current();
5892 // Add projection edges for additional defs or kills
5893 // DEF/KILL cr
5894 MachProjNode *kill;
5895 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5896 proj_list.push(kill);
5897 // Remove duplicated operands and inputs which use the same name.
5898 if (num_opnds() == 6) {
5899 unsigned num0 = 0;
5900 unsigned num1 = opnd_array(1)->num_edges(); // p
5901 unsigned num2 = opnd_array(2)->num_edges(); // q
5902 unsigned num3 = opnd_array(3)->num_edges(); // y
5903 unsigned num4 = opnd_array(4)->num_edges(); // p
5904 unsigned num5 = opnd_array(5)->num_edges(); // q
5905 unsigned idx0 = oper_input_base();
5906 unsigned idx1 = idx0 + num0;
5907 unsigned idx2 = idx1 + num1;
5908 unsigned idx3 = idx2 + num2;
5909 unsigned idx4 = idx3 + num3;
5910 unsigned idx5 = idx4 + num4;
5911 unsigned idx6 = idx5 + num5;
5912 for (int i = idx6 - 1; i >= (int)idx4; i--) {
5913 del_req(i);
5914 }
5915 _num_opnds = 4;
5916 } else {
5917 assert(_num_opnds == 4, "There should be either 4 or 6 operands.")do { if (!(_num_opnds == 4)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 5916, "assert(" "_num_opnds == 4" ") failed"
, "There should be either 4 or 6 operands."); ::breakpoint();
} } while (0)
;
5918 }
5919
5920 return this;
5921}
5922
5923MachNode* and_cmpLTMaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5924 Compile* C = Compile::current();
5925 // Add projection edges for additional defs or kills
5926 // DEF/KILL cr
5927 MachProjNode *kill;
5928 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5929 proj_list.push(kill);
5930
5931 return this;
5932}
5933
5934MachNode* and_cmpLTMask_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
5935 Compile* C = Compile::current();
5936 // Add projection edges for additional defs or kills
5937 // DEF/KILL cr
5938 MachProjNode *kill;
5939 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5940 proj_list.push(kill);
5941
5942 return this;
5943}
5944
5945MachNode* cmpF_cc_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5946 Compile* C = Compile::current();
5947 add_req(C->mach_constant_base_node());
5948
5949 return this;
5950}
5951
5952MachNode* cmpF_cc_immCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5953 Compile* C = Compile::current();
5954 add_req(C->mach_constant_base_node());
5955
5956 return this;
5957}
5958
5959MachNode* cmpD_cc_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5960 Compile* C = Compile::current();
5961 add_req(C->mach_constant_base_node());
5962
5963 return this;
5964}
5965
5966MachNode* cmpD_cc_immCFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5967 Compile* C = Compile::current();
5968 add_req(C->mach_constant_base_node());
5969
5970 return this;
5971}
5972
5973MachNode* cmpF_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5974 Compile* C = Compile::current();
5975 // Add projection edges for additional defs or kills
5976 // DEF/KILL cr
5977 MachProjNode *kill;
5978 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5979 proj_list.push(kill);
5980
5981 return this;
5982}
5983
5984MachNode* cmpF_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5985 Compile* C = Compile::current();
5986 // Add projection edges for additional defs or kills
5987 // DEF/KILL cr
5988 MachProjNode *kill;
5989 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
5990 proj_list.push(kill);
5991
5992 return this;
5993}
5994
5995MachNode* cmpF_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
5996 Compile* C = Compile::current();
5997 // Add projection edges for additional defs or kills
5998 // DEF/KILL cr
5999 MachProjNode *kill;
6000 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6001 proj_list.push(kill);
6002 add_req(C->mach_constant_base_node());
6003
6004 return this;
6005}
6006
6007MachNode* cmpD_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6008 Compile* C = Compile::current();
6009 // Add projection edges for additional defs or kills
6010 // DEF/KILL cr
6011 MachProjNode *kill;
6012 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6013 proj_list.push(kill);
6014
6015 return this;
6016}
6017
6018MachNode* cmpD_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6019 Compile* C = Compile::current();
6020 // Add projection edges for additional defs or kills
6021 // DEF/KILL cr
6022 MachProjNode *kill;
6023 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6024 proj_list.push(kill);
6025
6026 return this;
6027}
6028
6029MachNode* cmpD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6030 Compile* C = Compile::current();
6031 // Add projection edges for additional defs or kills
6032 // DEF/KILL cr
6033 MachProjNode *kill;
6034 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6035 proj_list.push(kill);
6036 add_req(C->mach_constant_base_node());
6037
6038 return this;
6039}
6040
6041MachNode* convF2I_reg_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6042 Compile* C = Compile::current();
6043 // Add projection edges for additional defs or kills
6044 // DEF/KILL cr
6045 MachProjNode *kill;
6046 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6047 proj_list.push(kill);
6048
6049 return this;
6050}
6051
6052MachNode* convF2L_reg_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6053 Compile* C = Compile::current();
6054 // Add projection edges for additional defs or kills
6055 // DEF/KILL cr
6056 MachProjNode *kill;
6057 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6058 proj_list.push(kill);
6059
6060 return this;
6061}
6062
6063MachNode* convD2I_reg_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6064 Compile* C = Compile::current();
6065 // Add projection edges for additional defs or kills
6066 // DEF/KILL cr
6067 MachProjNode *kill;
6068 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6069 proj_list.push(kill);
6070
6071 return this;
6072}
6073
6074MachNode* convD2L_reg_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6075 Compile* C = Compile::current();
6076 // Add projection edges for additional defs or kills
6077 // DEF/KILL cr
6078 MachProjNode *kill;
6079 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6080 proj_list.push(kill);
6081
6082 return this;
6083}
6084
6085MachNode* rep_stosNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6086 Compile* C = Compile::current();
6087 // Add projection edges for additional defs or kills
6088 // DEF/KILL cnt
6089 MachProjNode *kill;
6090 kill = new MachProjNode( this, 1, (LONG_RCX_REG_mask()), Op_RegL );
6091 proj_list.push(kill);
6092 // DEF/KILL base
6093 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
6094 proj_list.push(kill);
6095 // TEMP tmp
6096 MachTempNode *def;
6097 def = new MachTempNode(state->MachOperGenerator(REGD));
6098 add_req(def);
6099 // DEF/KILL zero
6100 kill = new MachProjNode( this, 3, (INT_RAX_REG_mask()), Op_RegI );
6101 proj_list.push(kill);
6102 // DEF/KILL cr
6103 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
6104 proj_list.push(kill);
6105
6106 return this;
6107}
6108
6109MachNode* rep_stos_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6110 Compile* C = Compile::current();
6111 // Add projection edges for additional defs or kills
6112 // DEF/KILL cnt
6113 MachProjNode *kill;
6114 kill = new MachProjNode( this, 1, (LONG_RCX_REG_mask()), Op_RegL );
6115 proj_list.push(kill);
6116 // DEF/KILL base
6117 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
6118 proj_list.push(kill);
6119 // TEMP tmp
6120 MachTempNode *def;
6121 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6122 add_req(def);
6123 // TEMP ktmp
6124 def = new MachTempNode(state->MachOperGenerator(KREG));
6125 add_req(def);
6126 // DEF/KILL zero
6127 kill = new MachProjNode( this, 3, (INT_RAX_REG_mask()), Op_RegI );
6128 proj_list.push(kill);
6129 // DEF/KILL cr
6130 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
6131 proj_list.push(kill);
6132
6133 return this;
6134}
6135
6136MachNode* rep_stos_largeNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6137 Compile* C = Compile::current();
6138 // Add projection edges for additional defs or kills
6139 // DEF/KILL cnt
6140 MachProjNode *kill;
6141 kill = new MachProjNode( this, 1, (LONG_RCX_REG_mask()), Op_RegL );
6142 proj_list.push(kill);
6143 // DEF/KILL base
6144 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
6145 proj_list.push(kill);
6146 // TEMP tmp
6147 MachTempNode *def;
6148 def = new MachTempNode(state->MachOperGenerator(REGD));
6149 add_req(def);
6150 // DEF/KILL zero
6151 kill = new MachProjNode( this, 3, (INT_RAX_REG_mask()), Op_RegI );
6152 proj_list.push(kill);
6153 // DEF/KILL cr
6154 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
6155 proj_list.push(kill);
6156
6157 return this;
6158}
6159
6160MachNode* rep_stos_large_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6161 Compile* C = Compile::current();
6162 // Add projection edges for additional defs or kills
6163 // DEF/KILL cnt
6164 MachProjNode *kill;
6165 kill = new MachProjNode( this, 1, (LONG_RCX_REG_mask()), Op_RegL );
6166 proj_list.push(kill);
6167 // DEF/KILL base
6168 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
6169 proj_list.push(kill);
6170 // TEMP tmp
6171 MachTempNode *def;
6172 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6173 add_req(def);
6174 // TEMP ktmp
6175 def = new MachTempNode(state->MachOperGenerator(KREG));
6176 add_req(def);
6177 // DEF/KILL zero
6178 kill = new MachProjNode( this, 3, (INT_RAX_REG_mask()), Op_RegI );
6179 proj_list.push(kill);
6180 // DEF/KILL cr
6181 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
6182 proj_list.push(kill);
6183
6184 return this;
6185}
6186
6187MachNode* rep_stos_imNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6188 Compile* C = Compile::current();
6189 // Add projection edges for additional defs or kills
6190 // TEMP tmp
6191 MachTempNode *def;
6192 def = new MachTempNode(state->MachOperGenerator(REGD));
6193 add_req(def);
6194 // TEMP zero
6195 def = new MachTempNode(state->MachOperGenerator(RREGI));
6196 add_req(def);
6197 // TEMP ktmp
6198 def = new MachTempNode(state->MachOperGenerator(KREG));
6199 add_req(def);
6200 // DEF/KILL cr
6201 MachProjNode *kill;
6202 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
6203 proj_list.push(kill);
6204
6205 return this;
6206}
6207
6208MachNode* string_compareLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6209 Compile* C = Compile::current();
6210 // Add projection edges for additional defs or kills
6211 // DEF/KILL str1
6212 MachProjNode *kill;
6213 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6214 proj_list.push(kill);
6215 // DEF/KILL cnt1
6216 kill = new MachProjNode( this, 2, (INT_RCX_REG_mask()), Op_RegI );
6217 proj_list.push(kill);
6218 // DEF/KILL str2
6219 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
6220 proj_list.push(kill);
6221 // DEF/KILL cnt2
6222 kill = new MachProjNode( this, 4, (INT_RDX_REG_mask()), Op_RegI );
6223 proj_list.push(kill);
6224 // TEMP tmp1
6225 MachTempNode *def;
6226 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6227 add_req(def);
6228 // DEF/KILL cr
6229 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6230 proj_list.push(kill);
6231
6232 return this;
6233}
6234
6235MachNode* string_compareL_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6236 Compile* C = Compile::current();
6237 // Add projection edges for additional defs or kills
6238 // DEF/KILL str1
6239 MachProjNode *kill;
6240 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6241 proj_list.push(kill);
6242 // DEF/KILL cnt1
6243 kill = new MachProjNode( this, 2, (INT_RCX_REG_mask()), Op_RegI );
6244 proj_list.push(kill);
6245 // DEF/KILL str2
6246 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
6247 proj_list.push(kill);
6248 // DEF/KILL cnt2
6249 kill = new MachProjNode( this, 4, (INT_RDX_REG_mask()), Op_RegI );
6250 proj_list.push(kill);
6251 // TEMP tmp1
6252 MachTempNode *def;
6253 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6254 add_req(def);
6255 // TEMP ktmp
6256 def = new MachTempNode(state->MachOperGenerator(KREG));
6257 add_req(def);
6258 // DEF/KILL cr
6259 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6260 proj_list.push(kill);
6261
6262 return this;
6263}
6264
6265MachNode* string_compareUNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6266 Compile* C = Compile::current();
6267 // Add projection edges for additional defs or kills
6268 // DEF/KILL str1
6269 MachProjNode *kill;
6270 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6271 proj_list.push(kill);
6272 // DEF/KILL cnt1
6273 kill = new MachProjNode( this, 2, (INT_RCX_REG_mask()), Op_RegI );
6274 proj_list.push(kill);
6275 // DEF/KILL str2
6276 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
6277 proj_list.push(kill);
6278 // DEF/KILL cnt2
6279 kill = new MachProjNode( this, 4, (INT_RDX_REG_mask()), Op_RegI );
6280 proj_list.push(kill);
6281 // TEMP tmp1
6282 MachTempNode *def;
6283 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6284 add_req(def);
6285 // DEF/KILL cr
6286 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6287 proj_list.push(kill);
6288
6289 return this;
6290}
6291
6292MachNode* string_compareU_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6293 Compile* C = Compile::current();
6294 // Add projection edges for additional defs or kills
6295 // DEF/KILL str1
6296 MachProjNode *kill;
6297 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6298 proj_list.push(kill);
6299 // DEF/KILL cnt1
6300 kill = new MachProjNode( this, 2, (INT_RCX_REG_mask()), Op_RegI );
6301 proj_list.push(kill);
6302 // DEF/KILL str2
6303 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
6304 proj_list.push(kill);
6305 // DEF/KILL cnt2
6306 kill = new MachProjNode( this, 4, (INT_RDX_REG_mask()), Op_RegI );
6307 proj_list.push(kill);
6308 // TEMP tmp1
6309 MachTempNode *def;
6310 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6311 add_req(def);
6312 // TEMP ktmp
6313 def = new MachTempNode(state->MachOperGenerator(KREG));
6314 add_req(def);
6315 // DEF/KILL cr
6316 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6317 proj_list.push(kill);
6318
6319 return this;
6320}
6321
6322MachNode* string_compareLUNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6323 Compile* C = Compile::current();
6324 // Add projection edges for additional defs or kills
6325 // DEF/KILL str1
6326 MachProjNode *kill;
6327 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6328 proj_list.push(kill);
6329 // DEF/KILL cnt1
6330 kill = new MachProjNode( this, 2, (INT_RCX_REG_mask()), Op_RegI );
6331 proj_list.push(kill);
6332 // DEF/KILL str2
6333 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
6334 proj_list.push(kill);
6335 // DEF/KILL cnt2
6336 kill = new MachProjNode( this, 4, (INT_RDX_REG_mask()), Op_RegI );
6337 proj_list.push(kill);
6338 // TEMP tmp1
6339 MachTempNode *def;
6340 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6341 add_req(def);
6342 // DEF/KILL cr
6343 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6344 proj_list.push(kill);
6345
6346 return this;
6347}
6348
6349MachNode* string_compareLU_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6350 Compile* C = Compile::current();
6351 // Add projection edges for additional defs or kills
6352 // DEF/KILL str1
6353 MachProjNode *kill;
6354 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6355 proj_list.push(kill);
6356 // DEF/KILL cnt1
6357 kill = new MachProjNode( this, 2, (INT_RCX_REG_mask()), Op_RegI );
6358 proj_list.push(kill);
6359 // DEF/KILL str2
6360 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
6361 proj_list.push(kill);
6362 // DEF/KILL cnt2
6363 kill = new MachProjNode( this, 4, (INT_RDX_REG_mask()), Op_RegI );
6364 proj_list.push(kill);
6365 // TEMP tmp1
6366 MachTempNode *def;
6367 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6368 add_req(def);
6369 // TEMP ktmp
6370 def = new MachTempNode(state->MachOperGenerator(KREG));
6371 add_req(def);
6372 // DEF/KILL cr
6373 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6374 proj_list.push(kill);
6375
6376 return this;
6377}
6378
6379MachNode* string_compareULNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6380 Compile* C = Compile::current();
6381 // Add projection edges for additional defs or kills
6382 // DEF/KILL str1
6383 MachProjNode *kill;
6384 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
6385 proj_list.push(kill);
6386 // DEF/KILL cnt1
6387 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
6388 proj_list.push(kill);
6389 // DEF/KILL str2
6390 kill = new MachProjNode( this, 3, (PTR_RDI_REG_mask()), Op_RegP );
6391 proj_list.push(kill);
6392 // DEF/KILL cnt2
6393 kill = new MachProjNode( this, 4, (INT_RCX_REG_mask()), Op_RegI );
6394 proj_list.push(kill);
6395 // TEMP tmp1
6396 MachTempNode *def;
6397 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6398 add_req(def);
6399 // DEF/KILL cr
6400 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6401 proj_list.push(kill);
6402
6403 return this;
6404}
6405
6406MachNode* string_compareUL_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6407 Compile* C = Compile::current();
6408 // Add projection edges for additional defs or kills
6409 // DEF/KILL str1
6410 MachProjNode *kill;
6411 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
6412 proj_list.push(kill);
6413 // DEF/KILL cnt1
6414 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
6415 proj_list.push(kill);
6416 // DEF/KILL str2
6417 kill = new MachProjNode( this, 3, (PTR_RDI_REG_mask()), Op_RegP );
6418 proj_list.push(kill);
6419 // DEF/KILL cnt2
6420 kill = new MachProjNode( this, 4, (INT_RCX_REG_mask()), Op_RegI );
6421 proj_list.push(kill);
6422 // TEMP tmp1
6423 MachTempNode *def;
6424 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6425 add_req(def);
6426 // TEMP ktmp
6427 def = new MachTempNode(state->MachOperGenerator(KREG));
6428 add_req(def);
6429 // DEF/KILL cr
6430 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6431 proj_list.push(kill);
6432
6433 return this;
6434}
6435
6436MachNode* string_indexof_conLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6437 Compile* C = Compile::current();
6438 // Add projection edges for additional defs or kills
6439 // DEF/KILL str1
6440 MachProjNode *kill;
6441 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6442 proj_list.push(kill);
6443 // DEF/KILL cnt1
6444 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
6445 proj_list.push(kill);
6446 // DEF/KILL str2
6447 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
6448 proj_list.push(kill);
6449 // TEMP tmp_vec
6450 MachTempNode *def;
6451 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6452 add_req(def);
6453 // DEF/KILL cnt2
6454 kill = new MachProjNode( this, 4, (INT_RAX_REG_mask()), Op_RegI );
6455 proj_list.push(kill);
6456 // DEF/KILL tmp
6457 kill = new MachProjNode( this, 5, (INT_RCX_REG_mask()), Op_RegI );
6458 proj_list.push(kill);
6459 // DEF/KILL cr
6460 kill = new MachProjNode( this, 6, (INT_FLAGS_mask()), Op_RegFlags );
6461 proj_list.push(kill);
6462
6463 return this;
6464}
6465
6466MachNode* string_indexof_conUNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6467 Compile* C = Compile::current();
6468 // Add projection edges for additional defs or kills
6469 // DEF/KILL str1
6470 MachProjNode *kill;
6471 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6472 proj_list.push(kill);
6473 // DEF/KILL cnt1
6474 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
6475 proj_list.push(kill);
6476 // DEF/KILL str2
6477 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
6478 proj_list.push(kill);
6479 // TEMP tmp_vec
6480 MachTempNode *def;
6481 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6482 add_req(def);
6483 // DEF/KILL cnt2
6484 kill = new MachProjNode( this, 4, (INT_RAX_REG_mask()), Op_RegI );
6485 proj_list.push(kill);
6486 // DEF/KILL tmp
6487 kill = new MachProjNode( this, 5, (INT_RCX_REG_mask()), Op_RegI );
6488 proj_list.push(kill);
6489 // DEF/KILL cr
6490 kill = new MachProjNode( this, 6, (INT_FLAGS_mask()), Op_RegFlags );
6491 proj_list.push(kill);
6492
6493 return this;
6494}
6495
6496MachNode* string_indexof_conULNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6497 Compile* C = Compile::current();
6498 // Add projection edges for additional defs or kills
6499 // DEF/KILL str1
6500 MachProjNode *kill;
6501 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6502 proj_list.push(kill);
6503 // DEF/KILL cnt1
6504 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
6505 proj_list.push(kill);
6506 // DEF/KILL str2
6507 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
6508 proj_list.push(kill);
6509 // TEMP tmp_vec
6510 MachTempNode *def;
6511 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6512 add_req(def);
6513 // DEF/KILL cnt2
6514 kill = new MachProjNode( this, 4, (INT_RAX_REG_mask()), Op_RegI );
6515 proj_list.push(kill);
6516 // DEF/KILL tmp
6517 kill = new MachProjNode( this, 5, (INT_RCX_REG_mask()), Op_RegI );
6518 proj_list.push(kill);
6519 // DEF/KILL cr
6520 kill = new MachProjNode( this, 6, (INT_FLAGS_mask()), Op_RegFlags );
6521 proj_list.push(kill);
6522
6523 return this;
6524}
6525
6526MachNode* string_indexofLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6527 Compile* C = Compile::current();
6528 // Add projection edges for additional defs or kills
6529 // DEF/KILL str1
6530 MachProjNode *kill;
6531 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6532 proj_list.push(kill);
6533 // DEF/KILL cnt1
6534 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
6535 proj_list.push(kill);
6536 // DEF/KILL str2
6537 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
6538 proj_list.push(kill);
6539 // DEF/KILL cnt2
6540 kill = new MachProjNode( this, 4, (INT_RAX_REG_mask()), Op_RegI );
6541 proj_list.push(kill);
6542 // TEMP tmp_vec
6543 MachTempNode *def;
6544 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6545 add_req(def);
6546 // DEF/KILL tmp
6547 kill = new MachProjNode( this, 5, (INT_RCX_REG_mask()), Op_RegI );
6548 proj_list.push(kill);
6549 // DEF/KILL cr
6550 kill = new MachProjNode( this, 6, (INT_FLAGS_mask()), Op_RegFlags );
6551 proj_list.push(kill);
6552
6553 return this;
6554}
6555
6556MachNode* string_indexofUNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6557 Compile* C = Compile::current();
6558 // Add projection edges for additional defs or kills
6559 // DEF/KILL str1
6560 MachProjNode *kill;
6561 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6562 proj_list.push(kill);
6563 // DEF/KILL cnt1
6564 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
6565 proj_list.push(kill);
6566 // DEF/KILL str2
6567 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
6568 proj_list.push(kill);
6569 // DEF/KILL cnt2
6570 kill = new MachProjNode( this, 4, (INT_RAX_REG_mask()), Op_RegI );
6571 proj_list.push(kill);
6572 // TEMP tmp_vec
6573 MachTempNode *def;
6574 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6575 add_req(def);
6576 // DEF/KILL tmp
6577 kill = new MachProjNode( this, 5, (INT_RCX_REG_mask()), Op_RegI );
6578 proj_list.push(kill);
6579 // DEF/KILL cr
6580 kill = new MachProjNode( this, 6, (INT_FLAGS_mask()), Op_RegFlags );
6581 proj_list.push(kill);
6582
6583 return this;
6584}
6585
6586MachNode* string_indexofULNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6587 Compile* C = Compile::current();
6588 // Add projection edges for additional defs or kills
6589 // DEF/KILL str1
6590 MachProjNode *kill;
6591 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6592 proj_list.push(kill);
6593 // DEF/KILL cnt1
6594 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
6595 proj_list.push(kill);
6596 // DEF/KILL str2
6597 kill = new MachProjNode( this, 3, (PTR_RSI_REG_mask()), Op_RegP );
6598 proj_list.push(kill);
6599 // DEF/KILL cnt2
6600 kill = new MachProjNode( this, 4, (INT_RAX_REG_mask()), Op_RegI );
6601 proj_list.push(kill);
6602 // TEMP tmp_vec
6603 MachTempNode *def;
6604 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6605 add_req(def);
6606 // DEF/KILL tmp
6607 kill = new MachProjNode( this, 5, (INT_RCX_REG_mask()), Op_RegI );
6608 proj_list.push(kill);
6609 // DEF/KILL cr
6610 kill = new MachProjNode( this, 6, (INT_FLAGS_mask()), Op_RegFlags );
6611 proj_list.push(kill);
6612
6613 return this;
6614}
6615
6616MachNode* string_indexof_charNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6617 Compile* C = Compile::current();
6618 // Add projection edges for additional defs or kills
6619 // DEF/KILL str1
6620 MachProjNode *kill;
6621 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6622 proj_list.push(kill);
6623 // DEF/KILL cnt1
6624 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
6625 proj_list.push(kill);
6626 // DEF/KILL ch
6627 kill = new MachProjNode( this, 3, (INT_RAX_REG_mask()), Op_RegI );
6628 proj_list.push(kill);
6629 // TEMP tmp_vec1
6630 MachTempNode *def;
6631 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6632 add_req(def);
6633 // TEMP tmp_vec2
6634 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6635 add_req(def);
6636 // TEMP tmp_vec3
6637 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6638 add_req(def);
6639 // TEMP tmp
6640 def = new MachTempNode(state->MachOperGenerator(RCX_REGI));
6641 add_req(def);
6642 // DEF/KILL cr
6643 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
6644 proj_list.push(kill);
6645
6646 return this;
6647}
6648
6649MachNode* stringL_indexof_charNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6650 Compile* C = Compile::current();
6651 // Add projection edges for additional defs or kills
6652 // DEF/KILL str1
6653 MachProjNode *kill;
6654 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6655 proj_list.push(kill);
6656 // DEF/KILL cnt1
6657 kill = new MachProjNode( this, 2, (INT_RDX_REG_mask()), Op_RegI );
6658 proj_list.push(kill);
6659 // DEF/KILL ch
6660 kill = new MachProjNode( this, 3, (INT_RAX_REG_mask()), Op_RegI );
6661 proj_list.push(kill);
6662 // TEMP tmp_vec1
6663 MachTempNode *def;
6664 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6665 add_req(def);
6666 // TEMP tmp_vec2
6667 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6668 add_req(def);
6669 // TEMP tmp_vec3
6670 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6671 add_req(def);
6672 // TEMP tmp
6673 def = new MachTempNode(state->MachOperGenerator(RCX_REGI));
6674 add_req(def);
6675 // DEF/KILL cr
6676 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
6677 proj_list.push(kill);
6678
6679 return this;
6680}
6681
6682MachNode* string_equalsNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6683 Compile* C = Compile::current();
6684 // Add projection edges for additional defs or kills
6685 // DEF/KILL str1
6686 MachProjNode *kill;
6687 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6688 proj_list.push(kill);
6689 // DEF/KILL str2
6690 kill = new MachProjNode( this, 2, (PTR_RSI_REG_mask()), Op_RegP );
6691 proj_list.push(kill);
6692 // DEF/KILL cnt
6693 kill = new MachProjNode( this, 3, (INT_RCX_REG_mask()), Op_RegI );
6694 proj_list.push(kill);
6695 // TEMP tmp1
6696 MachTempNode *def;
6697 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6698 add_req(def);
6699 // TEMP tmp2
6700 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6701 add_req(def);
6702 // DEF/KILL tmp3
6703 kill = new MachProjNode( this, 4, (INT_RBX_REG_mask()), Op_RegI );
6704 proj_list.push(kill);
6705 // DEF/KILL cr
6706 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6707 proj_list.push(kill);
6708
6709 return this;
6710}
6711
6712MachNode* string_equals_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6713 Compile* C = Compile::current();
6714 // Add projection edges for additional defs or kills
6715 // DEF/KILL str1
6716 MachProjNode *kill;
6717 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6718 proj_list.push(kill);
6719 // DEF/KILL str2
6720 kill = new MachProjNode( this, 2, (PTR_RSI_REG_mask()), Op_RegP );
6721 proj_list.push(kill);
6722 // DEF/KILL cnt
6723 kill = new MachProjNode( this, 3, (INT_RCX_REG_mask()), Op_RegI );
6724 proj_list.push(kill);
6725 // TEMP tmp1
6726 MachTempNode *def;
6727 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6728 add_req(def);
6729 // TEMP tmp2
6730 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6731 add_req(def);
6732 // TEMP ktmp
6733 def = new MachTempNode(state->MachOperGenerator(KREG));
6734 add_req(def);
6735 // DEF/KILL tmp3
6736 kill = new MachProjNode( this, 4, (INT_RBX_REG_mask()), Op_RegI );
6737 proj_list.push(kill);
6738 // DEF/KILL cr
6739 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6740 proj_list.push(kill);
6741
6742 return this;
6743}
6744
6745MachNode* array_equalsBNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6746 Compile* C = Compile::current();
6747 // Add projection edges for additional defs or kills
6748 // DEF/KILL ary1
6749 MachProjNode *kill;
6750 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6751 proj_list.push(kill);
6752 // DEF/KILL ary2
6753 kill = new MachProjNode( this, 2, (PTR_RSI_REG_mask()), Op_RegP );
6754 proj_list.push(kill);
6755 // TEMP tmp1
6756 MachTempNode *def;
6757 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6758 add_req(def);
6759 // TEMP tmp2
6760 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6761 add_req(def);
6762 // DEF/KILL tmp3
6763 kill = new MachProjNode( this, 3, (INT_RCX_REG_mask()), Op_RegI );
6764 proj_list.push(kill);
6765 // DEF/KILL tmp4
6766 kill = new MachProjNode( this, 4, (INT_RBX_REG_mask()), Op_RegI );
6767 proj_list.push(kill);
6768 // DEF/KILL cr
6769 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6770 proj_list.push(kill);
6771
6772 return this;
6773}
6774
6775MachNode* array_equalsB_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6776 Compile* C = Compile::current();
6777 // Add projection edges for additional defs or kills
6778 // DEF/KILL ary1
6779 MachProjNode *kill;
6780 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6781 proj_list.push(kill);
6782 // DEF/KILL ary2
6783 kill = new MachProjNode( this, 2, (PTR_RSI_REG_mask()), Op_RegP );
6784 proj_list.push(kill);
6785 // TEMP tmp1
6786 MachTempNode *def;
6787 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6788 add_req(def);
6789 // TEMP tmp2
6790 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6791 add_req(def);
6792 // TEMP ktmp
6793 def = new MachTempNode(state->MachOperGenerator(KREG));
6794 add_req(def);
6795 // DEF/KILL tmp3
6796 kill = new MachProjNode( this, 3, (INT_RCX_REG_mask()), Op_RegI );
6797 proj_list.push(kill);
6798 // DEF/KILL tmp4
6799 kill = new MachProjNode( this, 4, (INT_RBX_REG_mask()), Op_RegI );
6800 proj_list.push(kill);
6801 // DEF/KILL cr
6802 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6803 proj_list.push(kill);
6804
6805 return this;
6806}
6807
6808MachNode* array_equalsCNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6809 Compile* C = Compile::current();
6810 // Add projection edges for additional defs or kills
6811 // DEF/KILL ary1
6812 MachProjNode *kill;
6813 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6814 proj_list.push(kill);
6815 // DEF/KILL ary2
6816 kill = new MachProjNode( this, 2, (PTR_RSI_REG_mask()), Op_RegP );
6817 proj_list.push(kill);
6818 // TEMP tmp1
6819 MachTempNode *def;
6820 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6821 add_req(def);
6822 // TEMP tmp2
6823 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6824 add_req(def);
6825 // DEF/KILL tmp3
6826 kill = new MachProjNode( this, 3, (INT_RCX_REG_mask()), Op_RegI );
6827 proj_list.push(kill);
6828 // DEF/KILL tmp4
6829 kill = new MachProjNode( this, 4, (INT_RBX_REG_mask()), Op_RegI );
6830 proj_list.push(kill);
6831 // DEF/KILL cr
6832 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6833 proj_list.push(kill);
6834
6835 return this;
6836}
6837
6838MachNode* array_equalsC_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6839 Compile* C = Compile::current();
6840 // Add projection edges for additional defs or kills
6841 // DEF/KILL ary1
6842 MachProjNode *kill;
6843 kill = new MachProjNode( this, 1, (PTR_RDI_REG_mask()), Op_RegP );
6844 proj_list.push(kill);
6845 // DEF/KILL ary2
6846 kill = new MachProjNode( this, 2, (PTR_RSI_REG_mask()), Op_RegP );
6847 proj_list.push(kill);
6848 // TEMP tmp1
6849 MachTempNode *def;
6850 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6851 add_req(def);
6852 // TEMP tmp2
6853 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6854 add_req(def);
6855 // TEMP ktmp
6856 def = new MachTempNode(state->MachOperGenerator(KREG));
6857 add_req(def);
6858 // DEF/KILL tmp3
6859 kill = new MachProjNode( this, 3, (INT_RCX_REG_mask()), Op_RegI );
6860 proj_list.push(kill);
6861 // DEF/KILL tmp4
6862 kill = new MachProjNode( this, 4, (INT_RBX_REG_mask()), Op_RegI );
6863 proj_list.push(kill);
6864 // DEF/KILL cr
6865 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6866 proj_list.push(kill);
6867
6868 return this;
6869}
6870
6871MachNode* has_negativesNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6872 Compile* C = Compile::current();
6873 // Add projection edges for additional defs or kills
6874 // DEF/KILL ary1
6875 MachProjNode *kill;
6876 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
6877 proj_list.push(kill);
6878 // DEF/KILL len
6879 kill = new MachProjNode( this, 2, (INT_RCX_REG_mask()), Op_RegI );
6880 proj_list.push(kill);
6881 // TEMP tmp1
6882 MachTempNode *def;
6883 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6884 add_req(def);
6885 // TEMP tmp2
6886 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6887 add_req(def);
6888 // DEF/KILL tmp3
6889 kill = new MachProjNode( this, 3, (INT_RBX_REG_mask()), Op_RegI );
6890 proj_list.push(kill);
6891 // DEF/KILL cr
6892 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
6893 proj_list.push(kill);
6894
6895 return this;
6896}
6897
6898MachNode* has_negatives_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6899 Compile* C = Compile::current();
6900 // Add projection edges for additional defs or kills
6901 // DEF/KILL ary1
6902 MachProjNode *kill;
6903 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
6904 proj_list.push(kill);
6905 // DEF/KILL len
6906 kill = new MachProjNode( this, 2, (INT_RCX_REG_mask()), Op_RegI );
6907 proj_list.push(kill);
6908 // TEMP tmp1
6909 MachTempNode *def;
6910 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6911 add_req(def);
6912 // TEMP tmp2
6913 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6914 add_req(def);
6915 // TEMP ktmp1
6916 def = new MachTempNode(state->MachOperGenerator(KREG));
6917 add_req(def);
6918 // TEMP ktmp2
6919 def = new MachTempNode(state->MachOperGenerator(KREG));
6920 add_req(def);
6921 // DEF/KILL tmp3
6922 kill = new MachProjNode( this, 3, (INT_RBX_REG_mask()), Op_RegI );
6923 proj_list.push(kill);
6924 // DEF/KILL cr
6925 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
6926 proj_list.push(kill);
6927
6928 return this;
6929}
6930
6931MachNode* string_compressNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6932 Compile* C = Compile::current();
6933 // Add projection edges for additional defs or kills
6934 // DEF/KILL src
6935 MachProjNode *kill;
6936 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
6937 proj_list.push(kill);
6938 // DEF/KILL dst
6939 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
6940 proj_list.push(kill);
6941 // DEF/KILL len
6942 kill = new MachProjNode( this, 3, (INT_RDX_REG_mask()), Op_RegI );
6943 proj_list.push(kill);
6944 // TEMP tmp1
6945 MachTempNode *def;
6946 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6947 add_req(def);
6948 // TEMP tmp2
6949 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6950 add_req(def);
6951 // TEMP tmp3
6952 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6953 add_req(def);
6954 // TEMP tmp4
6955 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6956 add_req(def);
6957 // DEF/KILL tmp5
6958 kill = new MachProjNode( this, 4, (INT_RCX_REG_mask()), Op_RegI );
6959 proj_list.push(kill);
6960 // DEF/KILL cr
6961 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
6962 proj_list.push(kill);
6963
6964 return this;
6965}
6966
6967MachNode* string_compress_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
6968 Compile* C = Compile::current();
6969 // Add projection edges for additional defs or kills
6970 // DEF/KILL src
6971 MachProjNode *kill;
6972 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
6973 proj_list.push(kill);
6974 // DEF/KILL dst
6975 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
6976 proj_list.push(kill);
6977 // DEF/KILL len
6978 kill = new MachProjNode( this, 3, (INT_RDX_REG_mask()), Op_RegI );
6979 proj_list.push(kill);
6980 // TEMP tmp1
6981 MachTempNode *def;
6982 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6983 add_req(def);
6984 // TEMP tmp2
6985 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6986 add_req(def);
6987 // TEMP tmp3
6988 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6989 add_req(def);
6990 // TEMP tmp4
6991 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
6992 add_req(def);
6993 // TEMP ktmp1
6994 def = new MachTempNode(state->MachOperGenerator(KREG));
6995 add_req(def);
6996 // TEMP ktmp2
6997 def = new MachTempNode(state->MachOperGenerator(KREG));
6998 add_req(def);
6999 // DEF/KILL tmp5
7000 kill = new MachProjNode( this, 4, (INT_RCX_REG_mask()), Op_RegI );
7001 proj_list.push(kill);
7002 // DEF/KILL cr
7003 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
7004 proj_list.push(kill);
7005
7006 return this;
7007}
7008
7009MachNode* string_inflateNode::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 src
7013 MachProjNode *kill;
7014 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
7015 proj_list.push(kill);
7016 // DEF/KILL dst
7017 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
7018 proj_list.push(kill);
7019 // DEF/KILL len
7020 kill = new MachProjNode( this, 3, (INT_RDX_REG_mask()), Op_RegI );
7021 proj_list.push(kill);
7022 // TEMP tmp1
7023 MachTempNode *def;
7024 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
7025 add_req(def);
7026 // TEMP tmp2
7027 def = new MachTempNode(state->MachOperGenerator(RCX_REGI));
7028 add_req(def);
7029 // DEF/KILL cr
7030 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
7031 proj_list.push(kill);
7032
7033 return this;
7034}
7035
7036MachNode* string_inflate_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7037 Compile* C = Compile::current();
7038 // Add projection edges for additional defs or kills
7039 // DEF/KILL src
7040 MachProjNode *kill;
7041 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
7042 proj_list.push(kill);
7043 // DEF/KILL dst
7044 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
7045 proj_list.push(kill);
7046 // DEF/KILL len
7047 kill = new MachProjNode( this, 3, (INT_RDX_REG_mask()), Op_RegI );
7048 proj_list.push(kill);
7049 // TEMP tmp1
7050 MachTempNode *def;
7051 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
7052 add_req(def);
7053 // TEMP ktmp
7054 def = new MachTempNode(state->MachOperGenerator(KREG));
7055 add_req(def);
7056 // TEMP tmp2
7057 def = new MachTempNode(state->MachOperGenerator(RCX_REGI));
7058 add_req(def);
7059 // DEF/KILL cr
7060 kill = new MachProjNode( this, 4, (INT_FLAGS_mask()), Op_RegFlags );
7061 proj_list.push(kill);
7062
7063 return this;
7064}
7065
7066MachNode* encode_iso_arrayNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7067 Compile* C = Compile::current();
7068 // Add projection edges for additional defs or kills
7069 // DEF/KILL src
7070 MachProjNode *kill;
7071 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
7072 proj_list.push(kill);
7073 // DEF/KILL dst
7074 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
7075 proj_list.push(kill);
7076 // DEF/KILL len
7077 kill = new MachProjNode( this, 3, (INT_RDX_REG_mask()), Op_RegI );
7078 proj_list.push(kill);
7079 // TEMP tmp1
7080 MachTempNode *def;
7081 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
7082 add_req(def);
7083 // TEMP tmp2
7084 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
7085 add_req(def);
7086 // TEMP tmp3
7087 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
7088 add_req(def);
7089 // TEMP tmp4
7090 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
7091 add_req(def);
7092 // DEF/KILL tmp5
7093 kill = new MachProjNode( this, 4, (INT_RCX_REG_mask()), Op_RegI );
7094 proj_list.push(kill);
7095 // DEF/KILL cr
7096 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
7097 proj_list.push(kill);
7098
7099 return this;
7100}
7101
7102MachNode* encode_ascii_arrayNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7103 Compile* C = Compile::current();
7104 // Add projection edges for additional defs or kills
7105 // DEF/KILL src
7106 MachProjNode *kill;
7107 kill = new MachProjNode( this, 1, (PTR_RSI_REG_mask()), Op_RegP );
7108 proj_list.push(kill);
7109 // DEF/KILL dst
7110 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
7111 proj_list.push(kill);
7112 // DEF/KILL len
7113 kill = new MachProjNode( this, 3, (INT_RDX_REG_mask()), Op_RegI );
7114 proj_list.push(kill);
7115 // TEMP tmp1
7116 MachTempNode *def;
7117 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
7118 add_req(def);
7119 // TEMP tmp2
7120 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
7121 add_req(def);
7122 // TEMP tmp3
7123 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
7124 add_req(def);
7125 // TEMP tmp4
7126 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
7127 add_req(def);
7128 // DEF/KILL tmp5
7129 kill = new MachProjNode( this, 4, (INT_RCX_REG_mask()), Op_RegI );
7130 proj_list.push(kill);
7131 // DEF/KILL cr
7132 kill = new MachProjNode( this, 5, (INT_FLAGS_mask()), Op_RegFlags );
7133 proj_list.push(kill);
7134
7135 return this;
7136}
7137
7138MachNode* overflowAddI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7139 Compile* C = Compile::current();
7140 // Add projection edges for additional defs or kills
7141 // DEF/KILL op1
7142 MachProjNode *kill;
7143 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
7144 proj_list.push(kill);
7145
7146 return this;
7147}
7148
7149MachNode* overflowAddI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7150 Compile* C = Compile::current();
7151 // Add projection edges for additional defs or kills
7152 // DEF/KILL op1
7153 MachProjNode *kill;
7154 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
7155 proj_list.push(kill);
7156
7157 return this;
7158}
7159
7160MachNode* overflowAddL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7161 Compile* C = Compile::current();
7162 // Add projection edges for additional defs or kills
7163 // DEF/KILL op1
7164 MachProjNode *kill;
7165 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
7166 proj_list.push(kill);
7167
7168 return this;
7169}
7170
7171MachNode* overflowAddL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7172 Compile* C = Compile::current();
7173 // Add projection edges for additional defs or kills
7174 // DEF/KILL op1
7175 MachProjNode *kill;
7176 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
7177 proj_list.push(kill);
7178
7179 return this;
7180}
7181
7182MachNode* overflowNegI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7183 Compile* C = Compile::current();
7184 // Add projection edges for additional defs or kills
7185 // DEF/KILL op2
7186 MachProjNode *kill;
7187 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
7188 proj_list.push(kill);
7189
7190 return this;
7191}
7192
7193MachNode* overflowNegL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7194 Compile* C = Compile::current();
7195 // Add projection edges for additional defs or kills
7196 // DEF/KILL op2
7197 MachProjNode *kill;
7198 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
7199 proj_list.push(kill);
7200
7201 return this;
7202}
7203
7204MachNode* overflowMulI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7205 Compile* C = Compile::current();
7206 // Add projection edges for additional defs or kills
7207 // DEF/KILL op1
7208 MachProjNode *kill;
7209 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegI );
7210 proj_list.push(kill);
7211
7212 return this;
7213}
7214
7215MachNode* overflowMulI_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7216 Compile* C = Compile::current();
7217 // Add projection edges for additional defs or kills
7218 // TEMP tmp
7219 MachTempNode *def;
7220 def = new MachTempNode(state->MachOperGenerator(RREGI));
7221 add_req(def);
7222
7223 return this;
7224}
7225
7226MachNode* overflowMulL_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7227 Compile* C = Compile::current();
7228 // Add projection edges for additional defs or kills
7229 // DEF/KILL op1
7230 MachProjNode *kill;
7231 kill = new MachProjNode( this, 1, (LONG_RAX_REG_mask()), Op_RegL );
7232 proj_list.push(kill);
7233
7234 return this;
7235}
7236
7237MachNode* overflowMulL_rReg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7238 Compile* C = Compile::current();
7239 // Add projection edges for additional defs or kills
7240 // TEMP tmp
7241 MachTempNode *def;
7242 def = new MachTempNode(state->MachOperGenerator(RREGL));
7243 add_req(def);
7244
7245 return this;
7246}
7247
7248MachNode* cmpL3_reg_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7249 Compile* C = Compile::current();
7250 // Add projection edges for additional defs or kills
7251 // DEF/KILL flags
7252 MachProjNode *kill;
7253 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7254 proj_list.push(kill);
7255
7256 return this;
7257}
7258
7259MachNode* minI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7260 Compile* C = Compile::current();
7261 MachOper *op0 = new rFlagsRegOper();
7262 MachNode *tmp0 = this;
7263 MachNode *tmp1 = this;
7264 MachNode *tmp2 = this;
7265 MachNode *tmp3 = NULL__null;
7266 unsigned num0 = 0;
7267 unsigned num1 = opnd_array(1)->num_edges();
7268 unsigned num2 = opnd_array(2)->num_edges();
7269 unsigned idx0 = oper_input_base();
7270 unsigned idx1 = idx0 + num0;
7271 unsigned idx2 = idx1 + num1;
7272 unsigned idx3 = idx2 + num2;
7273 MachNode *result = NULL__null;
7274
7275 compI_rRegNode *n0 = new compI_rRegNode();
7276 n0->add_req(_in[0]);
7277 n0->set_opnd_array(0, state->MachOperGenerator(RFLAGSREG));
7278 tmp3 = n0;
7279 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
7280 if(tmp1 == this) {
7281 for(unsigned i = 0; i < num1; i++) {
7282 n0->add_req(_in[i + idx1]);
7283 }
7284 }
7285 else n0->add_req(tmp1);
7286 n0->set_opnd_array(2, opnd_array(2)->clone()); // src
7287 if(tmp2 == this) {
7288 for(unsigned i = 0; i < num2; i++) {
7289 n0->add_req(_in[i + idx2]);
7290 }
7291 }
7292 else n0->add_req(tmp2);
7293 result = n0->Expand( state, proj_list, mem );
7294
7295 cmovI_reg_gNode *n1 = new cmovI_reg_gNode();
7296 n1->add_req(_in[0]);
7297 n1->set_opnd_array(0, state->MachOperGenerator(RREGI));
7298 n1->set_opnd_array(1, opnd_array(1)->clone()); // dst
7299 if(tmp1 == this) {
7300 for(unsigned i = 0; i < num1; i++) {
7301 n1->add_req(_in[i + idx1]);
7302 }
7303 }
7304 else n1->add_req(tmp1);
7305 tmp1 = n1;
7306 n1->set_opnd_array(2, opnd_array(2)->clone()); // src
7307 if(tmp2 == this) {
7308 for(unsigned i = 0; i < num2; i++) {
7309 n1->add_req(_in[i + idx2]);
7310 }
7311 }
7312 else n1->add_req(tmp2);
7313 n1->set_opnd_array(3, op0->clone()); // cr
7314 if(tmp3 != NULL__null)
7315 n1->add_req(tmp3);
7316 result = n1->Expand( state, proj_list, mem );
7317
7318
7319 return result;
7320}
7321
7322MachNode* maxI_rRegNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7323 Compile* C = Compile::current();
7324 MachOper *op0 = new rFlagsRegOper();
7325 MachNode *tmp0 = this;
7326 MachNode *tmp1 = this;
7327 MachNode *tmp2 = this;
7328 MachNode *tmp3 = NULL__null;
7329 unsigned num0 = 0;
7330 unsigned num1 = opnd_array(1)->num_edges();
7331 unsigned num2 = opnd_array(2)->num_edges();
7332 unsigned idx0 = oper_input_base();
7333 unsigned idx1 = idx0 + num0;
7334 unsigned idx2 = idx1 + num1;
7335 unsigned idx3 = idx2 + num2;
7336 MachNode *result = NULL__null;
7337
7338 compI_rRegNode *n0 = new compI_rRegNode();
7339 n0->add_req(_in[0]);
7340 n0->set_opnd_array(0, state->MachOperGenerator(RFLAGSREG));
7341 tmp3 = n0;
7342 n0->set_opnd_array(1, opnd_array(1)->clone()); // dst
7343 if(tmp1 == this) {
7344 for(unsigned i = 0; i < num1; i++) {
7345 n0->add_req(_in[i + idx1]);
7346 }
7347 }
7348 else n0->add_req(tmp1);
7349 n0->set_opnd_array(2, opnd_array(2)->clone()); // src
7350 if(tmp2 == this) {
7351 for(unsigned i = 0; i < num2; i++) {
7352 n0->add_req(_in[i + idx2]);
7353 }
7354 }
7355 else n0->add_req(tmp2);
7356 result = n0->Expand( state, proj_list, mem );
7357
7358 cmovI_reg_lNode *n1 = new cmovI_reg_lNode();
7359 n1->add_req(_in[0]);
7360 n1->set_opnd_array(0, state->MachOperGenerator(RREGI));
7361 n1->set_opnd_array(1, opnd_array(1)->clone()); // dst
7362 if(tmp1 == this) {
7363 for(unsigned i = 0; i < num1; i++) {
7364 n1->add_req(_in[i + idx1]);
7365 }
7366 }
7367 else n1->add_req(tmp1);
7368 tmp1 = n1;
7369 n1->set_opnd_array(2, opnd_array(2)->clone()); // src
7370 if(tmp2 == this) {
7371 for(unsigned i = 0; i < num2; i++) {
7372 n1->add_req(_in[i + idx2]);
7373 }
7374 }
7375 else n1->add_req(tmp2);
7376 n1->set_opnd_array(3, op0->clone()); // cr
7377 if(tmp3 != NULL__null)
7378 n1->add_req(tmp3);
7379 result = n1->Expand( state, proj_list, mem );
7380
7381
7382 return result;
7383}
7384
7385MachNode* jmpLoopEnd_and_restoreMaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7386 Compile* C = Compile::current();
7387 // Add projection edges for additional defs or kills
7388 // TEMP ktmp
7389 MachTempNode *def;
7390 def = new MachTempNode(state->MachOperGenerator(KREG_K1));
7391 add_req(def);
7392
7393 return this;
7394}
7395
7396MachNode* jmpLoopEndU_and_restoreMaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7397 Compile* C = Compile::current();
7398 // Add projection edges for additional defs or kills
7399 // TEMP ktmp
7400 MachTempNode *def;
7401 def = new MachTempNode(state->MachOperGenerator(KREG_K1));
7402 add_req(def);
7403
7404 return this;
7405}
7406
7407MachNode* jmpLoopEndUCF_and_restoreMaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7408 Compile* C = Compile::current();
7409 // Add projection edges for additional defs or kills
7410 // TEMP ktmp
7411 MachTempNode *def;
7412 def = new MachTempNode(state->MachOperGenerator(KREG_K1));
7413 add_req(def);
7414
7415 return this;
7416}
7417
7418MachNode* partialSubtypeCheckNode::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 rcx
7422 MachProjNode *kill;
7423 kill = new MachProjNode( this, 1, (INT_RCX_REG_mask()), Op_RegI );
7424 proj_list.push(kill);
7425 // DEF/KILL cr
7426 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
7427 proj_list.push(kill);
7428
7429 return this;
7430}
7431
7432MachNode* partialSubtypeCheck_vs_ZeroNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7433 Compile* C = Compile::current();
7434 // Add projection edges for additional defs or kills
7435 // DEF/KILL rcx
7436 MachProjNode *kill;
7437 kill = new MachProjNode( this, 1, (INT_RCX_REG_mask()), Op_RegI );
7438 proj_list.push(kill);
7439 // DEF/KILL result
7440 kill = new MachProjNode( this, 2, (PTR_RDI_REG_mask()), Op_RegP );
7441 proj_list.push(kill);
7442
7443 return this;
7444}
7445
7446MachNode* cmpFastLockRTMNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7447 Compile* C = Compile::current();
7448 // Add projection edges for additional defs or kills
7449 // DEF/KILL box
7450 MachProjNode *kill;
7451 kill = new MachProjNode( this, 1, (PTR_RBX_REG_mask()), Op_RegP );
7452 proj_list.push(kill);
7453 // TEMP tmp
7454 MachTempNode *def;
7455 def = new MachTempNode(state->MachOperGenerator(RAX_REGI));
7456 add_req(def);
7457 // TEMP scr
7458 def = new MachTempNode(state->MachOperGenerator(RDX_REGI));
7459 add_req(def);
7460 // TEMP cx1
7461 def = new MachTempNode(state->MachOperGenerator(RREGI));
7462 add_req(def);
7463 // TEMP cx2
7464 def = new MachTempNode(state->MachOperGenerator(RREGI));
7465 add_req(def);
7466
7467 return this;
7468}
7469
7470MachNode* cmpFastLockNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7471 Compile* C = Compile::current();
7472 // Add projection edges for additional defs or kills
7473 // DEF/KILL box
7474 MachProjNode *kill;
7475 kill = new MachProjNode( this, 1, (PTR_RBX_REG_mask()), Op_RegP );
7476 proj_list.push(kill);
7477 // TEMP tmp
7478 MachTempNode *def;
7479 def = new MachTempNode(state->MachOperGenerator(RAX_REGI));
7480 add_req(def);
7481 // TEMP scr
7482 def = new MachTempNode(state->MachOperGenerator(RREGP));
7483 add_req(def);
7484 // TEMP cx1
7485 def = new MachTempNode(state->MachOperGenerator(RREGP));
7486 add_req(def);
7487
7488 return this;
7489}
7490
7491MachNode* cmpFastUnlockNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7492 Compile* C = Compile::current();
7493 // Add projection edges for additional defs or kills
7494 // DEF/KILL box
7495 MachProjNode *kill;
7496 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
7497 proj_list.push(kill);
7498 // TEMP tmp
7499 MachTempNode *def;
7500 def = new MachTempNode(state->MachOperGenerator(RREGP));
7501 add_req(def);
7502
7503 return this;
7504}
7505
7506MachNode* safePoint_poll_tlsNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7507 Compile* C = Compile::current();
7508 // Add projection edges for additional defs or kills
7509 // DEF/KILL cr
7510 MachProjNode *kill;
7511 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
7512 proj_list.push(kill);
7513
7514 return this;
7515}
7516
7517MachNode* setMaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7518 Compile* C = Compile::current();
7519 // Add projection edges for additional defs or kills
7520 // TEMP dst
7521 MachTempNode *def;
7522 def = new MachTempNode(state->MachOperGenerator(RREGI));
7523 add_req(def);
7524
7525 return this;
7526}
7527
7528MachNode* addF_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7529 Compile* C = Compile::current();
7530 add_req(C->mach_constant_base_node());
7531
7532 return this;
7533}
7534
7535MachNode* addF_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7536 Compile* C = Compile::current();
7537 add_req(C->mach_constant_base_node());
7538
7539 return this;
7540}
7541
7542MachNode* addD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7543 Compile* C = Compile::current();
7544 add_req(C->mach_constant_base_node());
7545
7546 return this;
7547}
7548
7549MachNode* addD_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7550 Compile* C = Compile::current();
7551 add_req(C->mach_constant_base_node());
7552
7553 return this;
7554}
7555
7556MachNode* subF_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7557 Compile* C = Compile::current();
7558 add_req(C->mach_constant_base_node());
7559
7560 return this;
7561}
7562
7563MachNode* subF_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7564 Compile* C = Compile::current();
7565 add_req(C->mach_constant_base_node());
7566
7567 return this;
7568}
7569
7570MachNode* subD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7571 Compile* C = Compile::current();
7572 add_req(C->mach_constant_base_node());
7573
7574 return this;
7575}
7576
7577MachNode* subD_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7578 Compile* C = Compile::current();
7579 add_req(C->mach_constant_base_node());
7580
7581 return this;
7582}
7583
7584MachNode* mulF_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7585 Compile* C = Compile::current();
7586 add_req(C->mach_constant_base_node());
7587
7588 return this;
7589}
7590
7591MachNode* mulF_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7592 Compile* C = Compile::current();
7593 add_req(C->mach_constant_base_node());
7594
7595 return this;
7596}
7597
7598MachNode* mulD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7599 Compile* C = Compile::current();
7600 add_req(C->mach_constant_base_node());
7601
7602 return this;
7603}
7604
7605MachNode* mulD_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7606 Compile* C = Compile::current();
7607 add_req(C->mach_constant_base_node());
7608
7609 return this;
7610}
7611
7612MachNode* divF_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7613 Compile* C = Compile::current();
7614 add_req(C->mach_constant_base_node());
7615
7616 return this;
7617}
7618
7619MachNode* divF_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7620 Compile* C = Compile::current();
7621 add_req(C->mach_constant_base_node());
7622
7623 return this;
7624}
7625
7626MachNode* divD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7627 Compile* C = Compile::current();
7628 add_req(C->mach_constant_base_node());
7629
7630 return this;
7631}
7632
7633MachNode* divD_reg_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7634 Compile* C = Compile::current();
7635 add_req(C->mach_constant_base_node());
7636
7637 return this;
7638}
7639
7640MachNode* reinterpret_mask_W2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7641 Compile* C = Compile::current();
7642 // Add projection edges for additional defs or kills
7643 // TEMP xtmp
7644 MachTempNode *def;
7645 def = new MachTempNode(state->MachOperGenerator(VEC));
7646 add_req(def);
7647
7648 return this;
7649}
7650
7651MachNode* reinterpret_mask_D2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7652 Compile* C = Compile::current();
7653 // Add projection edges for additional defs or kills
7654 // TEMP xtmp
7655 MachTempNode *def;
7656 def = new MachTempNode(state->MachOperGenerator(VEC));
7657 add_req(def);
7658
7659 return this;
7660}
7661
7662MachNode* reinterpret_mask_Q2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7663 Compile* C = Compile::current();
7664 // Add projection edges for additional defs or kills
7665 // TEMP xtmp
7666 MachTempNode *def;
7667 def = new MachTempNode(state->MachOperGenerator(VEC));
7668 add_req(def);
7669
7670 return this;
7671}
7672
7673MachNode* reinterpret_expandNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7674 Compile* C = Compile::current();
7675 // Add projection edges for additional defs or kills
7676 // TEMP dst
7677 MachTempNode *def;
7678 def = new MachTempNode(state->MachOperGenerator(VEC));
7679 add_req(def);
7680 // TEMP scratch
7681 def = new MachTempNode(state->MachOperGenerator(RREGP));
7682 add_req(def);
7683
7684 return this;
7685}
7686
7687MachNode* vreinterpret_expand4Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7688 Compile* C = Compile::current();
7689 // Add projection edges for additional defs or kills
7690 // TEMP scratch
7691 MachTempNode *def;
7692 def = new MachTempNode(state->MachOperGenerator(RREGP));
7693 add_req(def);
7694
7695 return this;
7696}
7697
7698MachNode* roundD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7699 Compile* C = Compile::current();
7700 // Add projection edges for additional defs or kills
7701 // TEMP scratch_reg
7702 MachTempNode *def;
7703 def = new MachTempNode(state->MachOperGenerator(RREGI));
7704 add_req(def);
7705 add_req(C->mach_constant_base_node());
7706
7707 return this;
7708}
7709
7710MachNode* gatherNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7711 Compile* C = Compile::current();
7712 // Add projection edges for additional defs or kills
7713 // TEMP dst
7714 MachTempNode *def;
7715 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
7716 add_req(def);
7717 // TEMP tmp
7718 def = new MachTempNode(state->MachOperGenerator(RREGP));
7719 add_req(def);
7720 // TEMP mask
7721 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
7722 add_req(def);
7723
7724 return this;
7725}
7726
7727MachNode* evgatherNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7728 Compile* C = Compile::current();
7729 // Add projection edges for additional defs or kills
7730 // TEMP dst
7731 MachTempNode *def;
7732 def = new MachTempNode(state->MachOperGenerator(VEC));
7733 add_req(def);
7734 // TEMP tmp
7735 def = new MachTempNode(state->MachOperGenerator(RREGP));
7736 add_req(def);
7737 // TEMP ktmp
7738 def = new MachTempNode(state->MachOperGenerator(KREG));
7739 add_req(def);
7740
7741 return this;
7742}
7743
7744MachNode* evgather_maskedNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7745 Compile* C = Compile::current();
7746 // Add projection edges for additional defs or kills
7747 // TEMP dst
7748 MachTempNode *def;
7749 def = new MachTempNode(state->MachOperGenerator(VEC));
7750 add_req(def);
7751 // TEMP ktmp
7752 def = new MachTempNode(state->MachOperGenerator(KREG));
7753 add_req(def);
7754 // TEMP tmp
7755 def = new MachTempNode(state->MachOperGenerator(RREGP));
7756 add_req(def);
7757
7758 return this;
7759}
7760
7761MachNode* scatterNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7762 Compile* C = Compile::current();
7763 // Add projection edges for additional defs or kills
7764 // TEMP tmp
7765 MachTempNode *def;
7766 def = new MachTempNode(state->MachOperGenerator(RREGP));
7767 add_req(def);
7768 // TEMP ktmp
7769 def = new MachTempNode(state->MachOperGenerator(KREG));
7770 add_req(def);
7771
7772 return this;
7773}
7774
7775MachNode* scatter_maskedNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7776 Compile* C = Compile::current();
7777 // Add projection edges for additional defs or kills
7778 // TEMP ktmp
7779 MachTempNode *def;
7780 def = new MachTempNode(state->MachOperGenerator(KREG));
7781 add_req(def);
7782 // TEMP tmp
7783 def = new MachTempNode(state->MachOperGenerator(RREGP));
7784 add_req(def);
7785
7786 return this;
7787}
7788
7789MachNode* ReplB_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7790 Compile* C = Compile::current();
7791 add_req(C->mach_constant_base_node());
7792
7793 return this;
7794}
7795
7796MachNode* ReplS_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7797 Compile* C = Compile::current();
7798 add_req(C->mach_constant_base_node());
7799
7800 return this;
7801}
7802
7803MachNode* ReplI_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7804 Compile* C = Compile::current();
7805 add_req(C->mach_constant_base_node());
7806
7807 return this;
7808}
7809
7810MachNode* ReplI_M1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7811 Compile* C = Compile::current();
7812 // Add projection edges for additional defs or kills
7813 // TEMP dst
7814 MachTempNode *def;
7815 def = new MachTempNode(state->MachOperGenerator(VEC));
7816 add_req(def);
7817
7818 return this;
7819}
7820
7821MachNode* ReplI_M1_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7822 Compile* C = Compile::current();
7823 // Add projection edges for additional defs or kills
7824 // TEMP dst
7825 MachTempNode *def;
7826 def = new MachTempNode(state->MachOperGenerator(VEC));
7827 add_req(def);
7828
7829 return this;
7830}
7831
7832MachNode* ReplI_M1_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7833 Compile* C = Compile::current();
7834 // Add projection edges for additional defs or kills
7835 // TEMP dst
7836 MachTempNode *def;
7837 def = new MachTempNode(state->MachOperGenerator(VEC));
7838 add_req(def);
7839
7840 return this;
7841}
7842
7843MachNode* ReplL_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7844 Compile* C = Compile::current();
7845 add_req(C->mach_constant_base_node());
7846
7847 return this;
7848}
7849
7850MachNode* ReplL_M1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7851 Compile* C = Compile::current();
7852 // Add projection edges for additional defs or kills
7853 // TEMP dst
7854 MachTempNode *def;
7855 def = new MachTempNode(state->MachOperGenerator(VEC));
7856 add_req(def);
7857
7858 return this;
7859}
7860
7861MachNode* insert32Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7862 Compile* C = Compile::current();
7863 // Add projection edges for additional defs or kills
7864 // TEMP vtmp
7865 MachTempNode *def;
7866 def = new MachTempNode(state->MachOperGenerator(VEC));
7867 add_req(def);
7868
7869 return this;
7870}
7871
7872MachNode* insert64Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7873 Compile* C = Compile::current();
7874 // Add projection edges for additional defs or kills
7875 // TEMP vtmp
7876 MachTempNode *def;
7877 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
7878 add_req(def);
7879
7880 return this;
7881}
7882
7883MachNode* insert4LNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7884 Compile* C = Compile::current();
7885 // Add projection edges for additional defs or kills
7886 // TEMP vtmp
7887 MachTempNode *def;
7888 def = new MachTempNode(state->MachOperGenerator(VEC));
7889 add_req(def);
7890
7891 return this;
7892}
7893
7894MachNode* insert8LNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7895 Compile* C = Compile::current();
7896 // Add projection edges for additional defs or kills
7897 // TEMP vtmp
7898 MachTempNode *def;
7899 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
7900 add_req(def);
7901
7902 return this;
7903}
7904
7905MachNode* vinsertFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7906 Compile* C = Compile::current();
7907 // Add projection edges for additional defs or kills
7908 // TEMP vtmp
7909 MachTempNode *def;
7910 def = new MachTempNode(state->MachOperGenerator(VEC));
7911 add_req(def);
7912
7913 return this;
7914}
7915
7916MachNode* insert2DNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7917 Compile* C = Compile::current();
7918 // Add projection edges for additional defs or kills
7919 // TEMP tmp
7920 MachTempNode *def;
7921 def = new MachTempNode(state->MachOperGenerator(RREGL));
7922 add_req(def);
7923
7924 return this;
7925}
7926
7927MachNode* insert4DNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7928 Compile* C = Compile::current();
7929 // Add projection edges for additional defs or kills
7930 // TEMP tmp
7931 MachTempNode *def;
7932 def = new MachTempNode(state->MachOperGenerator(RREGL));
7933 add_req(def);
7934 // TEMP vtmp
7935 def = new MachTempNode(state->MachOperGenerator(VEC));
7936 add_req(def);
7937
7938 return this;
7939}
7940
7941MachNode* insert8DNode::Expand(State* state, Node_List& proj_list, Node* mem) {
7942 Compile* C = Compile::current();
7943 // Add projection edges for additional defs or kills
7944 // TEMP tmp
7945 MachTempNode *def;
7946 def = new MachTempNode(state->MachOperGenerator(RREGL));
7947 add_req(def);
7948 // TEMP vtmp
7949 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
7950 add_req(def);
7951
7952 return this;
7953}
7954
7955MachNode* reductionINode::Expand(State* state, Node_List& proj_list, Node* mem) {
7956 Compile* C = Compile::current();
7957 // Add projection edges for additional defs or kills
7958 // TEMP vtmp1
7959 MachTempNode *def;
7960 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
7961 add_req(def);
7962 // TEMP vtmp2
7963 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
7964 add_req(def);
7965
7966 return this;
7967}
7968
7969MachNode* reductionI_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7970 Compile* C = Compile::current();
7971 // Add projection edges for additional defs or kills
7972 // TEMP vtmp1
7973 MachTempNode *def;
7974 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
7975 add_req(def);
7976 // TEMP vtmp2
7977 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
7978 add_req(def);
7979
7980 return this;
7981}
7982
7983MachNode* reductionI_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7984 Compile* C = Compile::current();
7985 // Add projection edges for additional defs or kills
7986 // TEMP vtmp1
7987 MachTempNode *def;
7988 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
7989 add_req(def);
7990 // TEMP vtmp2
7991 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
7992 add_req(def);
7993
7994 return this;
7995}
7996
7997MachNode* reductionI_2Node::Expand(State* state, Node_List& proj_list, Node* mem) {
7998 Compile* C = Compile::current();
7999 // Add projection edges for additional defs or kills
8000 // TEMP vtmp1
8001 MachTempNode *def;
8002 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8003 add_req(def);
8004 // TEMP vtmp2
8005 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8006 add_req(def);
8007
8008 return this;
8009}
8010
8011MachNode* reductionI_3Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8012 Compile* C = Compile::current();
8013 // Add projection edges for additional defs or kills
8014 // TEMP vtmp1
8015 MachTempNode *def;
8016 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8017 add_req(def);
8018 // TEMP vtmp2
8019 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8020 add_req(def);
8021
8022 return this;
8023}
8024
8025MachNode* reductionI_4Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8026 Compile* C = Compile::current();
8027 // Add projection edges for additional defs or kills
8028 // TEMP vtmp1
8029 MachTempNode *def;
8030 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8031 add_req(def);
8032 // TEMP vtmp2
8033 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8034 add_req(def);
8035
8036 return this;
8037}
8038
8039MachNode* reductionI_5Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8040 Compile* C = Compile::current();
8041 // Add projection edges for additional defs or kills
8042 // TEMP vtmp1
8043 MachTempNode *def;
8044 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8045 add_req(def);
8046 // TEMP vtmp2
8047 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8048 add_req(def);
8049
8050 return this;
8051}
8052
8053MachNode* reductionLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8054 Compile* C = Compile::current();
8055 // Add projection edges for additional defs or kills
8056 // TEMP vtmp1
8057 MachTempNode *def;
8058 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8059 add_req(def);
8060 // TEMP vtmp2
8061 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8062 add_req(def);
8063
8064 return this;
8065}
8066
8067MachNode* reductionL_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8068 Compile* C = Compile::current();
8069 // Add projection edges for additional defs or kills
8070 // TEMP vtmp1
8071 MachTempNode *def;
8072 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8073 add_req(def);
8074 // TEMP vtmp2
8075 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8076 add_req(def);
8077
8078 return this;
8079}
8080
8081MachNode* reductionL_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8082 Compile* C = Compile::current();
8083 // Add projection edges for additional defs or kills
8084 // TEMP vtmp1
8085 MachTempNode *def;
8086 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8087 add_req(def);
8088 // TEMP vtmp2
8089 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8090 add_req(def);
8091
8092 return this;
8093}
8094
8095MachNode* reductionL_2Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8096 Compile* C = Compile::current();
8097 // Add projection edges for additional defs or kills
8098 // TEMP vtmp1
8099 MachTempNode *def;
8100 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8101 add_req(def);
8102 // TEMP vtmp2
8103 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8104 add_req(def);
8105
8106 return this;
8107}
8108
8109MachNode* reductionL_3Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8110 Compile* C = Compile::current();
8111 // Add projection edges for additional defs or kills
8112 // TEMP vtmp1
8113 MachTempNode *def;
8114 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8115 add_req(def);
8116 // TEMP vtmp2
8117 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8118 add_req(def);
8119
8120 return this;
8121}
8122
8123MachNode* reductionL_4Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8124 Compile* C = Compile::current();
8125 // Add projection edges for additional defs or kills
8126 // TEMP vtmp1
8127 MachTempNode *def;
8128 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8129 add_req(def);
8130 // TEMP vtmp2
8131 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8132 add_req(def);
8133
8134 return this;
8135}
8136
8137MachNode* reductionL_5Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8138 Compile* C = Compile::current();
8139 // Add projection edges for additional defs or kills
8140 // TEMP vtmp1
8141 MachTempNode *def;
8142 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8143 add_req(def);
8144 // TEMP vtmp2
8145 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8146 add_req(def);
8147
8148 return this;
8149}
8150
8151MachNode* reductionL_avx512dqNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8152 Compile* C = Compile::current();
8153 // Add projection edges for additional defs or kills
8154 // TEMP vtmp1
8155 MachTempNode *def;
8156 def = new MachTempNode(state->MachOperGenerator(VEC));
8157 add_req(def);
8158 // TEMP vtmp2
8159 def = new MachTempNode(state->MachOperGenerator(VEC));
8160 add_req(def);
8161
8162 return this;
8163}
8164
8165MachNode* reductionL_avx512dq_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8166 Compile* C = Compile::current();
8167 // Add projection edges for additional defs or kills
8168 // TEMP vtmp1
8169 MachTempNode *def;
8170 def = new MachTempNode(state->MachOperGenerator(VEC));
8171 add_req(def);
8172 // TEMP vtmp2
8173 def = new MachTempNode(state->MachOperGenerator(VEC));
8174 add_req(def);
8175
8176 return this;
8177}
8178
8179MachNode* reductionL_avx512dq_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8180 Compile* C = Compile::current();
8181 // Add projection edges for additional defs or kills
8182 // TEMP vtmp1
8183 MachTempNode *def;
8184 def = new MachTempNode(state->MachOperGenerator(VEC));
8185 add_req(def);
8186 // TEMP vtmp2
8187 def = new MachTempNode(state->MachOperGenerator(VEC));
8188 add_req(def);
8189
8190 return this;
8191}
8192
8193MachNode* reductionL_avx512dq_2Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8194 Compile* C = Compile::current();
8195 // Add projection edges for additional defs or kills
8196 // TEMP vtmp1
8197 MachTempNode *def;
8198 def = new MachTempNode(state->MachOperGenerator(VEC));
8199 add_req(def);
8200 // TEMP vtmp2
8201 def = new MachTempNode(state->MachOperGenerator(VEC));
8202 add_req(def);
8203
8204 return this;
8205}
8206
8207MachNode* reductionL_avx512dq_3Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8208 Compile* C = Compile::current();
8209 // Add projection edges for additional defs or kills
8210 // TEMP vtmp1
8211 MachTempNode *def;
8212 def = new MachTempNode(state->MachOperGenerator(VEC));
8213 add_req(def);
8214 // TEMP vtmp2
8215 def = new MachTempNode(state->MachOperGenerator(VEC));
8216 add_req(def);
8217
8218 return this;
8219}
8220
8221MachNode* reductionL_avx512dq_4Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8222 Compile* C = Compile::current();
8223 // Add projection edges for additional defs or kills
8224 // TEMP vtmp1
8225 MachTempNode *def;
8226 def = new MachTempNode(state->MachOperGenerator(VEC));
8227 add_req(def);
8228 // TEMP vtmp2
8229 def = new MachTempNode(state->MachOperGenerator(VEC));
8230 add_req(def);
8231
8232 return this;
8233}
8234
8235MachNode* reductionL_avx512dq_5Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8236 Compile* C = Compile::current();
8237 // Add projection edges for additional defs or kills
8238 // TEMP vtmp1
8239 MachTempNode *def;
8240 def = new MachTempNode(state->MachOperGenerator(VEC));
8241 add_req(def);
8242 // TEMP vtmp2
8243 def = new MachTempNode(state->MachOperGenerator(VEC));
8244 add_req(def);
8245
8246 return this;
8247}
8248
8249MachNode* reductionF128Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8250 Compile* C = Compile::current();
8251 // Add projection edges for additional defs or kills
8252 // TEMP dst
8253 MachTempNode *def;
8254 def = new MachTempNode(state->MachOperGenerator(REGF));
8255 add_req(def);
8256 // TEMP vtmp
8257 def = new MachTempNode(state->MachOperGenerator(VEC));
8258 add_req(def);
8259 // Remove duplicated operands and inputs which use the same name.
8260 if (num_opnds() == 5) {
8261 unsigned num0 = 0;
8262 unsigned num1 = opnd_array(1)->num_edges(); // dst
8263 unsigned num2 = opnd_array(2)->num_edges(); // src
8264 unsigned num3 = opnd_array(3)->num_edges(); // dst
8265 unsigned num4 = opnd_array(4)->num_edges(); // vtmp
8266 unsigned idx0 = oper_input_base();
8267 unsigned idx1 = idx0 + num0;
8268 unsigned idx2 = idx1 + num1;
8269 unsigned idx3 = idx2 + num2;
8270 unsigned idx4 = idx3 + num3;
8271 unsigned idx5 = idx4 + num4;
8272 set_opnd_array(3, opnd_array(4)->clone()); // vtmp
8273 for (unsigned i = 0; i < num4; i++) {
8274 set_req(i + idx3, _in[i + idx4]);
8275 }
8276 num3 = num4;
8277 idx4 = idx3 + num3;
8278 for (int i = idx5 - 1; i >= (int)idx4; i--) {
8279 del_req(i);
8280 }
8281 _num_opnds = 4;
8282 } else {
8283 assert(_num_opnds == 4, "There should be either 4 or 5 operands.")do { if (!(_num_opnds == 4)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 8282, "assert(" "_num_opnds == 4" ") failed"
, "There should be either 4 or 5 operands."); ::breakpoint();
} } while (0)
;
8284 }
8285
8286 return this;
8287}
8288
8289MachNode* reductionF128_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8290 Compile* C = Compile::current();
8291 // Add projection edges for additional defs or kills
8292 // TEMP dst
8293 MachTempNode *def;
8294 def = new MachTempNode(state->MachOperGenerator(REGF));
8295 add_req(def);
8296 // TEMP vtmp
8297 def = new MachTempNode(state->MachOperGenerator(VEC));
8298 add_req(def);
8299 // Remove duplicated operands and inputs which use the same name.
8300 if (num_opnds() == 5) {
8301 unsigned num0 = 0;
8302 unsigned num1 = opnd_array(1)->num_edges(); // dst
8303 unsigned num2 = opnd_array(2)->num_edges(); // src
8304 unsigned num3 = opnd_array(3)->num_edges(); // dst
8305 unsigned num4 = opnd_array(4)->num_edges(); // vtmp
8306 unsigned idx0 = oper_input_base();
8307 unsigned idx1 = idx0 + num0;
8308 unsigned idx2 = idx1 + num1;
8309 unsigned idx3 = idx2 + num2;
8310 unsigned idx4 = idx3 + num3;
8311 unsigned idx5 = idx4 + num4;
8312 set_opnd_array(3, opnd_array(4)->clone()); // vtmp
8313 for (unsigned i = 0; i < num4; i++) {
8314 set_req(i + idx3, _in[i + idx4]);
8315 }
8316 num3 = num4;
8317 idx4 = idx3 + num3;
8318 for (int i = idx5 - 1; i >= (int)idx4; i--) {
8319 del_req(i);
8320 }
8321 _num_opnds = 4;
8322 } else {
8323 assert(_num_opnds == 4, "There should be either 4 or 5 operands.")do { if (!(_num_opnds == 4)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 8322, "assert(" "_num_opnds == 4" ") failed"
, "There should be either 4 or 5 operands."); ::breakpoint();
} } while (0)
;
8324 }
8325
8326 return this;
8327}
8328
8329MachNode* reduction8FNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8330 Compile* C = Compile::current();
8331 // Add projection edges for additional defs or kills
8332 // TEMP dst
8333 MachTempNode *def;
8334 def = new MachTempNode(state->MachOperGenerator(REGF));
8335 add_req(def);
8336 // TEMP vtmp1
8337 def = new MachTempNode(state->MachOperGenerator(VEC));
8338 add_req(def);
8339 // TEMP vtmp2
8340 def = new MachTempNode(state->MachOperGenerator(VEC));
8341 add_req(def);
8342 // Remove duplicated operands and inputs which use the same name.
8343 if (num_opnds() == 6) {
8344 unsigned num0 = 0;
8345 unsigned num1 = opnd_array(1)->num_edges(); // dst
8346 unsigned num2 = opnd_array(2)->num_edges(); // src
8347 unsigned num3 = opnd_array(3)->num_edges(); // dst
8348 unsigned num4 = opnd_array(4)->num_edges(); // vtmp1
8349 unsigned num5 = opnd_array(5)->num_edges(); // vtmp2
8350 unsigned idx0 = oper_input_base();
8351 unsigned idx1 = idx0 + num0;
8352 unsigned idx2 = idx1 + num1;
8353 unsigned idx3 = idx2 + num2;
8354 unsigned idx4 = idx3 + num3;
8355 unsigned idx5 = idx4 + num4;
8356 unsigned idx6 = idx5 + num5;
8357 set_opnd_array(3, opnd_array(4)->clone()); // vtmp1
8358 for (unsigned i = 0; i < num4; i++) {
8359 set_req(i + idx3, _in[i + idx4]);
8360 }
8361 num3 = num4;
8362 idx4 = idx3 + num3;
8363 set_opnd_array(4, opnd_array(5)->clone()); // vtmp2
8364 for (unsigned i = 0; i < num5; i++) {
8365 set_req(i + idx4, _in[i + idx5]);
8366 }
8367 num4 = num5;
8368 idx5 = idx4 + num4;
8369 for (int i = idx6 - 1; i >= (int)idx5; i--) {
8370 del_req(i);
8371 }
8372 _num_opnds = 5;
8373 } else {
8374 assert(_num_opnds == 5, "There should be either 5 or 6 operands.")do { if (!(_num_opnds == 5)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 8373, "assert(" "_num_opnds == 5" ") failed"
, "There should be either 5 or 6 operands."); ::breakpoint();
} } while (0)
;
8375 }
8376
8377 return this;
8378}
8379
8380MachNode* reduction8F_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8381 Compile* C = Compile::current();
8382 // Add projection edges for additional defs or kills
8383 // TEMP dst
8384 MachTempNode *def;
8385 def = new MachTempNode(state->MachOperGenerator(REGF));
8386 add_req(def);
8387 // TEMP vtmp1
8388 def = new MachTempNode(state->MachOperGenerator(VEC));
8389 add_req(def);
8390 // TEMP vtmp2
8391 def = new MachTempNode(state->MachOperGenerator(VEC));
8392 add_req(def);
8393 // Remove duplicated operands and inputs which use the same name.
8394 if (num_opnds() == 6) {
8395 unsigned num0 = 0;
8396 unsigned num1 = opnd_array(1)->num_edges(); // dst
8397 unsigned num2 = opnd_array(2)->num_edges(); // src
8398 unsigned num3 = opnd_array(3)->num_edges(); // dst
8399 unsigned num4 = opnd_array(4)->num_edges(); // vtmp1
8400 unsigned num5 = opnd_array(5)->num_edges(); // vtmp2
8401 unsigned idx0 = oper_input_base();
8402 unsigned idx1 = idx0 + num0;
8403 unsigned idx2 = idx1 + num1;
8404 unsigned idx3 = idx2 + num2;
8405 unsigned idx4 = idx3 + num3;
8406 unsigned idx5 = idx4 + num4;
8407 unsigned idx6 = idx5 + num5;
8408 set_opnd_array(3, opnd_array(4)->clone()); // vtmp1
8409 for (unsigned i = 0; i < num4; i++) {
8410 set_req(i + idx3, _in[i + idx4]);
8411 }
8412 num3 = num4;
8413 idx4 = idx3 + num3;
8414 set_opnd_array(4, opnd_array(5)->clone()); // vtmp2
8415 for (unsigned i = 0; i < num5; i++) {
8416 set_req(i + idx4, _in[i + idx5]);
8417 }
8418 num4 = num5;
8419 idx5 = idx4 + num4;
8420 for (int i = idx6 - 1; i >= (int)idx5; i--) {
8421 del_req(i);
8422 }
8423 _num_opnds = 5;
8424 } else {
8425 assert(_num_opnds == 5, "There should be either 5 or 6 operands.")do { if (!(_num_opnds == 5)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 8424, "assert(" "_num_opnds == 5" ") failed"
, "There should be either 5 or 6 operands."); ::breakpoint();
} } while (0)
;
8426 }
8427
8428 return this;
8429}
8430
8431MachNode* reduction16FNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8432 Compile* C = Compile::current();
8433 // Add projection edges for additional defs or kills
8434 // TEMP dst
8435 MachTempNode *def;
8436 def = new MachTempNode(state->MachOperGenerator(REGF));
8437 add_req(def);
8438 // TEMP vtmp1
8439 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8440 add_req(def);
8441 // TEMP vtmp2
8442 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8443 add_req(def);
8444 // Remove duplicated operands and inputs which use the same name.
8445 if (num_opnds() == 6) {
8446 unsigned num0 = 0;
8447 unsigned num1 = opnd_array(1)->num_edges(); // dst
8448 unsigned num2 = opnd_array(2)->num_edges(); // src
8449 unsigned num3 = opnd_array(3)->num_edges(); // dst
8450 unsigned num4 = opnd_array(4)->num_edges(); // vtmp1
8451 unsigned num5 = opnd_array(5)->num_edges(); // vtmp2
8452 unsigned idx0 = oper_input_base();
8453 unsigned idx1 = idx0 + num0;
8454 unsigned idx2 = idx1 + num1;
8455 unsigned idx3 = idx2 + num2;
8456 unsigned idx4 = idx3 + num3;
8457 unsigned idx5 = idx4 + num4;
8458 unsigned idx6 = idx5 + num5;
8459 set_opnd_array(3, opnd_array(4)->clone()); // vtmp1
8460 for (unsigned i = 0; i < num4; i++) {
8461 set_req(i + idx3, _in[i + idx4]);
8462 }
8463 num3 = num4;
8464 idx4 = idx3 + num3;
8465 set_opnd_array(4, opnd_array(5)->clone()); // vtmp2
8466 for (unsigned i = 0; i < num5; i++) {
8467 set_req(i + idx4, _in[i + idx5]);
8468 }
8469 num4 = num5;
8470 idx5 = idx4 + num4;
8471 for (int i = idx6 - 1; i >= (int)idx5; i--) {
8472 del_req(i);
8473 }
8474 _num_opnds = 5;
8475 } else {
8476 assert(_num_opnds == 5, "There should be either 5 or 6 operands.")do { if (!(_num_opnds == 5)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 8475, "assert(" "_num_opnds == 5" ") failed"
, "There should be either 5 or 6 operands."); ::breakpoint();
} } while (0)
;
8477 }
8478
8479 return this;
8480}
8481
8482MachNode* reduction16F_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8483 Compile* C = Compile::current();
8484 // Add projection edges for additional defs or kills
8485 // TEMP dst
8486 MachTempNode *def;
8487 def = new MachTempNode(state->MachOperGenerator(REGF));
8488 add_req(def);
8489 // TEMP vtmp1
8490 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8491 add_req(def);
8492 // TEMP vtmp2
8493 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8494 add_req(def);
8495 // Remove duplicated operands and inputs which use the same name.
8496 if (num_opnds() == 6) {
8497 unsigned num0 = 0;
8498 unsigned num1 = opnd_array(1)->num_edges(); // dst
8499 unsigned num2 = opnd_array(2)->num_edges(); // src
8500 unsigned num3 = opnd_array(3)->num_edges(); // dst
8501 unsigned num4 = opnd_array(4)->num_edges(); // vtmp1
8502 unsigned num5 = opnd_array(5)->num_edges(); // vtmp2
8503 unsigned idx0 = oper_input_base();
8504 unsigned idx1 = idx0 + num0;
8505 unsigned idx2 = idx1 + num1;
8506 unsigned idx3 = idx2 + num2;
8507 unsigned idx4 = idx3 + num3;
8508 unsigned idx5 = idx4 + num4;
8509 unsigned idx6 = idx5 + num5;
8510 set_opnd_array(3, opnd_array(4)->clone()); // vtmp1
8511 for (unsigned i = 0; i < num4; i++) {
8512 set_req(i + idx3, _in[i + idx4]);
8513 }
8514 num3 = num4;
8515 idx4 = idx3 + num3;
8516 set_opnd_array(4, opnd_array(5)->clone()); // vtmp2
8517 for (unsigned i = 0; i < num5; i++) {
8518 set_req(i + idx4, _in[i + idx5]);
8519 }
8520 num4 = num5;
8521 idx5 = idx4 + num4;
8522 for (int i = idx6 - 1; i >= (int)idx5; i--) {
8523 del_req(i);
8524 }
8525 _num_opnds = 5;
8526 } else {
8527 assert(_num_opnds == 5, "There should be either 5 or 6 operands.")do { if (!(_num_opnds == 5)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 8526, "assert(" "_num_opnds == 5" ") failed"
, "There should be either 5 or 6 operands."); ::breakpoint();
} } while (0)
;
8528 }
8529
8530 return this;
8531}
8532
8533MachNode* reduction2DNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8534 Compile* C = Compile::current();
8535 // Add projection edges for additional defs or kills
8536 // TEMP dst
8537 MachTempNode *def;
8538 def = new MachTempNode(state->MachOperGenerator(REGD));
8539 add_req(def);
8540 // TEMP vtmp
8541 def = new MachTempNode(state->MachOperGenerator(VEC));
8542 add_req(def);
8543 // Remove duplicated operands and inputs which use the same name.
8544 if (num_opnds() == 5) {
8545 unsigned num0 = 0;
8546 unsigned num1 = opnd_array(1)->num_edges(); // dst
8547 unsigned num2 = opnd_array(2)->num_edges(); // src
8548 unsigned num3 = opnd_array(3)->num_edges(); // dst
8549 unsigned num4 = opnd_array(4)->num_edges(); // vtmp
8550 unsigned idx0 = oper_input_base();
8551 unsigned idx1 = idx0 + num0;
8552 unsigned idx2 = idx1 + num1;
8553 unsigned idx3 = idx2 + num2;
8554 unsigned idx4 = idx3 + num3;
8555 unsigned idx5 = idx4 + num4;
8556 set_opnd_array(3, opnd_array(4)->clone()); // vtmp
8557 for (unsigned i = 0; i < num4; i++) {
8558 set_req(i + idx3, _in[i + idx4]);
8559 }
8560 num3 = num4;
8561 idx4 = idx3 + num3;
8562 for (int i = idx5 - 1; i >= (int)idx4; i--) {
8563 del_req(i);
8564 }
8565 _num_opnds = 4;
8566 } else {
8567 assert(_num_opnds == 4, "There should be either 4 or 5 operands.")do { if (!(_num_opnds == 4)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 8566, "assert(" "_num_opnds == 4" ") failed"
, "There should be either 4 or 5 operands."); ::breakpoint();
} } while (0)
;
8568 }
8569
8570 return this;
8571}
8572
8573MachNode* reduction2D_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8574 Compile* C = Compile::current();
8575 // Add projection edges for additional defs or kills
8576 // TEMP dst
8577 MachTempNode *def;
8578 def = new MachTempNode(state->MachOperGenerator(REGD));
8579 add_req(def);
8580 // TEMP vtmp
8581 def = new MachTempNode(state->MachOperGenerator(VEC));
8582 add_req(def);
8583 // Remove duplicated operands and inputs which use the same name.
8584 if (num_opnds() == 5) {
8585 unsigned num0 = 0;
8586 unsigned num1 = opnd_array(1)->num_edges(); // dst
8587 unsigned num2 = opnd_array(2)->num_edges(); // src
8588 unsigned num3 = opnd_array(3)->num_edges(); // dst
8589 unsigned num4 = opnd_array(4)->num_edges(); // vtmp
8590 unsigned idx0 = oper_input_base();
8591 unsigned idx1 = idx0 + num0;
8592 unsigned idx2 = idx1 + num1;
8593 unsigned idx3 = idx2 + num2;
8594 unsigned idx4 = idx3 + num3;
8595 unsigned idx5 = idx4 + num4;
8596 set_opnd_array(3, opnd_array(4)->clone()); // vtmp
8597 for (unsigned i = 0; i < num4; i++) {
8598 set_req(i + idx3, _in[i + idx4]);
8599 }
8600 num3 = num4;
8601 idx4 = idx3 + num3;
8602 for (int i = idx5 - 1; i >= (int)idx4; i--) {
8603 del_req(i);
8604 }
8605 _num_opnds = 4;
8606 } else {
8607 assert(_num_opnds == 4, "There should be either 4 or 5 operands.")do { if (!(_num_opnds == 4)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 8606, "assert(" "_num_opnds == 4" ") failed"
, "There should be either 4 or 5 operands."); ::breakpoint();
} } while (0)
;
8608 }
8609
8610 return this;
8611}
8612
8613MachNode* reduction4DNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8614 Compile* C = Compile::current();
8615 // Add projection edges for additional defs or kills
8616 // TEMP dst
8617 MachTempNode *def;
8618 def = new MachTempNode(state->MachOperGenerator(REGD));
8619 add_req(def);
8620 // TEMP vtmp1
8621 def = new MachTempNode(state->MachOperGenerator(VEC));
8622 add_req(def);
8623 // TEMP vtmp2
8624 def = new MachTempNode(state->MachOperGenerator(VEC));
8625 add_req(def);
8626 // Remove duplicated operands and inputs which use the same name.
8627 if (num_opnds() == 6) {
8628 unsigned num0 = 0;
8629 unsigned num1 = opnd_array(1)->num_edges(); // dst
8630 unsigned num2 = opnd_array(2)->num_edges(); // src
8631 unsigned num3 = opnd_array(3)->num_edges(); // dst
8632 unsigned num4 = opnd_array(4)->num_edges(); // vtmp1
8633 unsigned num5 = opnd_array(5)->num_edges(); // vtmp2
8634 unsigned idx0 = oper_input_base();
8635 unsigned idx1 = idx0 + num0;
8636 unsigned idx2 = idx1 + num1;
8637 unsigned idx3 = idx2 + num2;
8638 unsigned idx4 = idx3 + num3;
8639 unsigned idx5 = idx4 + num4;
8640 unsigned idx6 = idx5 + num5;
8641 set_opnd_array(3, opnd_array(4)->clone()); // vtmp1
8642 for (unsigned i = 0; i < num4; i++) {
8643 set_req(i + idx3, _in[i + idx4]);
8644 }
8645 num3 = num4;
8646 idx4 = idx3 + num3;
8647 set_opnd_array(4, opnd_array(5)->clone()); // vtmp2
8648 for (unsigned i = 0; i < num5; i++) {
8649 set_req(i + idx4, _in[i + idx5]);
8650 }
8651 num4 = num5;
8652 idx5 = idx4 + num4;
8653 for (int i = idx6 - 1; i >= (int)idx5; i--) {
8654 del_req(i);
8655 }
8656 _num_opnds = 5;
8657 } else {
8658 assert(_num_opnds == 5, "There should be either 5 or 6 operands.")do { if (!(_num_opnds == 5)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 8657, "assert(" "_num_opnds == 5" ") failed"
, "There should be either 5 or 6 operands."); ::breakpoint();
} } while (0)
;
8659 }
8660
8661 return this;
8662}
8663
8664MachNode* reduction4D_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8665 Compile* C = Compile::current();
8666 // Add projection edges for additional defs or kills
8667 // TEMP dst
8668 MachTempNode *def;
8669 def = new MachTempNode(state->MachOperGenerator(REGD));
8670 add_req(def);
8671 // TEMP vtmp1
8672 def = new MachTempNode(state->MachOperGenerator(VEC));
8673 add_req(def);
8674 // TEMP vtmp2
8675 def = new MachTempNode(state->MachOperGenerator(VEC));
8676 add_req(def);
8677 // Remove duplicated operands and inputs which use the same name.
8678 if (num_opnds() == 6) {
8679 unsigned num0 = 0;
8680 unsigned num1 = opnd_array(1)->num_edges(); // dst
8681 unsigned num2 = opnd_array(2)->num_edges(); // src
8682 unsigned num3 = opnd_array(3)->num_edges(); // dst
8683 unsigned num4 = opnd_array(4)->num_edges(); // vtmp1
8684 unsigned num5 = opnd_array(5)->num_edges(); // vtmp2
8685 unsigned idx0 = oper_input_base();
8686 unsigned idx1 = idx0 + num0;
8687 unsigned idx2 = idx1 + num1;
8688 unsigned idx3 = idx2 + num2;
8689 unsigned idx4 = idx3 + num3;
8690 unsigned idx5 = idx4 + num4;
8691 unsigned idx6 = idx5 + num5;
8692 set_opnd_array(3, opnd_array(4)->clone()); // vtmp1
8693 for (unsigned i = 0; i < num4; i++) {
8694 set_req(i + idx3, _in[i + idx4]);
8695 }
8696 num3 = num4;
8697 idx4 = idx3 + num3;
8698 set_opnd_array(4, opnd_array(5)->clone()); // vtmp2
8699 for (unsigned i = 0; i < num5; i++) {
8700 set_req(i + idx4, _in[i + idx5]);
8701 }
8702 num4 = num5;
8703 idx5 = idx4 + num4;
8704 for (int i = idx6 - 1; i >= (int)idx5; i--) {
8705 del_req(i);
8706 }
8707 _num_opnds = 5;
8708 } else {
8709 assert(_num_opnds == 5, "There should be either 5 or 6 operands.")do { if (!(_num_opnds == 5)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 8708, "assert(" "_num_opnds == 5" ") failed"
, "There should be either 5 or 6 operands."); ::breakpoint();
} } while (0)
;
8710 }
8711
8712 return this;
8713}
8714
8715MachNode* reduction8DNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8716 Compile* C = Compile::current();
8717 // Add projection edges for additional defs or kills
8718 // TEMP dst
8719 MachTempNode *def;
8720 def = new MachTempNode(state->MachOperGenerator(REGD));
8721 add_req(def);
8722 // TEMP vtmp1
8723 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8724 add_req(def);
8725 // TEMP vtmp2
8726 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8727 add_req(def);
8728 // Remove duplicated operands and inputs which use the same name.
8729 if (num_opnds() == 6) {
8730 unsigned num0 = 0;
8731 unsigned num1 = opnd_array(1)->num_edges(); // dst
8732 unsigned num2 = opnd_array(2)->num_edges(); // src
8733 unsigned num3 = opnd_array(3)->num_edges(); // dst
8734 unsigned num4 = opnd_array(4)->num_edges(); // vtmp1
8735 unsigned num5 = opnd_array(5)->num_edges(); // vtmp2
8736 unsigned idx0 = oper_input_base();
8737 unsigned idx1 = idx0 + num0;
8738 unsigned idx2 = idx1 + num1;
8739 unsigned idx3 = idx2 + num2;
8740 unsigned idx4 = idx3 + num3;
8741 unsigned idx5 = idx4 + num4;
8742 unsigned idx6 = idx5 + num5;
8743 set_opnd_array(3, opnd_array(4)->clone()); // vtmp1
8744 for (unsigned i = 0; i < num4; i++) {
8745 set_req(i + idx3, _in[i + idx4]);
8746 }
8747 num3 = num4;
8748 idx4 = idx3 + num3;
8749 set_opnd_array(4, opnd_array(5)->clone()); // vtmp2
8750 for (unsigned i = 0; i < num5; i++) {
8751 set_req(i + idx4, _in[i + idx5]);
8752 }
8753 num4 = num5;
8754 idx5 = idx4 + num4;
8755 for (int i = idx6 - 1; i >= (int)idx5; i--) {
8756 del_req(i);
8757 }
8758 _num_opnds = 5;
8759 } else {
8760 assert(_num_opnds == 5, "There should be either 5 or 6 operands.")do { if (!(_num_opnds == 5)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 8759, "assert(" "_num_opnds == 5" ") failed"
, "There should be either 5 or 6 operands."); ::breakpoint();
} } while (0)
;
8761 }
8762
8763 return this;
8764}
8765
8766MachNode* reduction8D_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8767 Compile* C = Compile::current();
8768 // Add projection edges for additional defs or kills
8769 // TEMP dst
8770 MachTempNode *def;
8771 def = new MachTempNode(state->MachOperGenerator(REGD));
8772 add_req(def);
8773 // TEMP vtmp1
8774 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8775 add_req(def);
8776 // TEMP vtmp2
8777 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8778 add_req(def);
8779 // Remove duplicated operands and inputs which use the same name.
8780 if (num_opnds() == 6) {
8781 unsigned num0 = 0;
8782 unsigned num1 = opnd_array(1)->num_edges(); // dst
8783 unsigned num2 = opnd_array(2)->num_edges(); // src
8784 unsigned num3 = opnd_array(3)->num_edges(); // dst
8785 unsigned num4 = opnd_array(4)->num_edges(); // vtmp1
8786 unsigned num5 = opnd_array(5)->num_edges(); // vtmp2
8787 unsigned idx0 = oper_input_base();
8788 unsigned idx1 = idx0 + num0;
8789 unsigned idx2 = idx1 + num1;
8790 unsigned idx3 = idx2 + num2;
8791 unsigned idx4 = idx3 + num3;
8792 unsigned idx5 = idx4 + num4;
8793 unsigned idx6 = idx5 + num5;
8794 set_opnd_array(3, opnd_array(4)->clone()); // vtmp1
8795 for (unsigned i = 0; i < num4; i++) {
8796 set_req(i + idx3, _in[i + idx4]);
8797 }
8798 num3 = num4;
8799 idx4 = idx3 + num3;
8800 set_opnd_array(4, opnd_array(5)->clone()); // vtmp2
8801 for (unsigned i = 0; i < num5; i++) {
8802 set_req(i + idx4, _in[i + idx5]);
8803 }
8804 num4 = num5;
8805 idx5 = idx4 + num4;
8806 for (int i = idx6 - 1; i >= (int)idx5; i--) {
8807 del_req(i);
8808 }
8809 _num_opnds = 5;
8810 } else {
8811 assert(_num_opnds == 5, "There should be either 5 or 6 operands.")do { if (!(_num_opnds == 5)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 8810, "assert(" "_num_opnds == 5" ") failed"
, "There should be either 5 or 6 operands."); ::breakpoint();
} } while (0)
;
8812 }
8813
8814 return this;
8815}
8816
8817MachNode* reductionBNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8818 Compile* C = Compile::current();
8819 // Add projection edges for additional defs or kills
8820 // TEMP vtmp1
8821 MachTempNode *def;
8822 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8823 add_req(def);
8824 // TEMP vtmp2
8825 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8826 add_req(def);
8827
8828 return this;
8829}
8830
8831MachNode* reductionB_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8832 Compile* C = Compile::current();
8833 // Add projection edges for additional defs or kills
8834 // TEMP vtmp1
8835 MachTempNode *def;
8836 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8837 add_req(def);
8838 // TEMP vtmp2
8839 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8840 add_req(def);
8841
8842 return this;
8843}
8844
8845MachNode* reductionB_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8846 Compile* C = Compile::current();
8847 // Add projection edges for additional defs or kills
8848 // TEMP vtmp1
8849 MachTempNode *def;
8850 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8851 add_req(def);
8852 // TEMP vtmp2
8853 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8854 add_req(def);
8855
8856 return this;
8857}
8858
8859MachNode* reductionB_2Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8860 Compile* C = Compile::current();
8861 // Add projection edges for additional defs or kills
8862 // TEMP vtmp1
8863 MachTempNode *def;
8864 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8865 add_req(def);
8866 // TEMP vtmp2
8867 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8868 add_req(def);
8869
8870 return this;
8871}
8872
8873MachNode* reductionB_3Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8874 Compile* C = Compile::current();
8875 // Add projection edges for additional defs or kills
8876 // TEMP vtmp1
8877 MachTempNode *def;
8878 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8879 add_req(def);
8880 // TEMP vtmp2
8881 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8882 add_req(def);
8883
8884 return this;
8885}
8886
8887MachNode* reductionB_4Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8888 Compile* C = Compile::current();
8889 // Add projection edges for additional defs or kills
8890 // TEMP vtmp1
8891 MachTempNode *def;
8892 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8893 add_req(def);
8894 // TEMP vtmp2
8895 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8896 add_req(def);
8897
8898 return this;
8899}
8900
8901MachNode* reductionB_avx512bwNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8902 Compile* C = Compile::current();
8903 // Add projection edges for additional defs or kills
8904 // TEMP vtmp1
8905 MachTempNode *def;
8906 def = new MachTempNode(state->MachOperGenerator(VEC));
8907 add_req(def);
8908 // TEMP vtmp2
8909 def = new MachTempNode(state->MachOperGenerator(VEC));
8910 add_req(def);
8911
8912 return this;
8913}
8914
8915MachNode* reductionB_avx512bw_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8916 Compile* C = Compile::current();
8917 // Add projection edges for additional defs or kills
8918 // TEMP vtmp1
8919 MachTempNode *def;
8920 def = new MachTempNode(state->MachOperGenerator(VEC));
8921 add_req(def);
8922 // TEMP vtmp2
8923 def = new MachTempNode(state->MachOperGenerator(VEC));
8924 add_req(def);
8925
8926 return this;
8927}
8928
8929MachNode* reductionB_avx512bw_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8930 Compile* C = Compile::current();
8931 // Add projection edges for additional defs or kills
8932 // TEMP vtmp1
8933 MachTempNode *def;
8934 def = new MachTempNode(state->MachOperGenerator(VEC));
8935 add_req(def);
8936 // TEMP vtmp2
8937 def = new MachTempNode(state->MachOperGenerator(VEC));
8938 add_req(def);
8939
8940 return this;
8941}
8942
8943MachNode* reductionB_avx512bw_2Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8944 Compile* C = Compile::current();
8945 // Add projection edges for additional defs or kills
8946 // TEMP vtmp1
8947 MachTempNode *def;
8948 def = new MachTempNode(state->MachOperGenerator(VEC));
8949 add_req(def);
8950 // TEMP vtmp2
8951 def = new MachTempNode(state->MachOperGenerator(VEC));
8952 add_req(def);
8953
8954 return this;
8955}
8956
8957MachNode* reductionB_avx512bw_3Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8958 Compile* C = Compile::current();
8959 // Add projection edges for additional defs or kills
8960 // TEMP vtmp1
8961 MachTempNode *def;
8962 def = new MachTempNode(state->MachOperGenerator(VEC));
8963 add_req(def);
8964 // TEMP vtmp2
8965 def = new MachTempNode(state->MachOperGenerator(VEC));
8966 add_req(def);
8967
8968 return this;
8969}
8970
8971MachNode* reductionB_avx512bw_4Node::Expand(State* state, Node_List& proj_list, Node* mem) {
8972 Compile* C = Compile::current();
8973 // Add projection edges for additional defs or kills
8974 // TEMP vtmp1
8975 MachTempNode *def;
8976 def = new MachTempNode(state->MachOperGenerator(VEC));
8977 add_req(def);
8978 // TEMP vtmp2
8979 def = new MachTempNode(state->MachOperGenerator(VEC));
8980 add_req(def);
8981
8982 return this;
8983}
8984
8985MachNode* reductionSNode::Expand(State* state, Node_List& proj_list, Node* mem) {
8986 Compile* C = Compile::current();
8987 // Add projection edges for additional defs or kills
8988 // TEMP vtmp1
8989 MachTempNode *def;
8990 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8991 add_req(def);
8992 // TEMP vtmp2
8993 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
8994 add_req(def);
8995
8996 return this;
8997}
8998
8999MachNode* reductionS_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9000 Compile* C = Compile::current();
9001 // Add projection edges for additional defs or kills
9002 // TEMP vtmp1
9003 MachTempNode *def;
9004 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9005 add_req(def);
9006 // TEMP vtmp2
9007 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9008 add_req(def);
9009
9010 return this;
9011}
9012
9013MachNode* reductionS_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9014 Compile* C = Compile::current();
9015 // Add projection edges for additional defs or kills
9016 // TEMP vtmp1
9017 MachTempNode *def;
9018 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9019 add_req(def);
9020 // TEMP vtmp2
9021 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9022 add_req(def);
9023
9024 return this;
9025}
9026
9027MachNode* reductionS_2Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9028 Compile* C = Compile::current();
9029 // Add projection edges for additional defs or kills
9030 // TEMP vtmp1
9031 MachTempNode *def;
9032 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9033 add_req(def);
9034 // TEMP vtmp2
9035 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9036 add_req(def);
9037
9038 return this;
9039}
9040
9041MachNode* reductionS_3Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9042 Compile* C = Compile::current();
9043 // Add projection edges for additional defs or kills
9044 // TEMP vtmp1
9045 MachTempNode *def;
9046 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9047 add_req(def);
9048 // TEMP vtmp2
9049 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9050 add_req(def);
9051
9052 return this;
9053}
9054
9055MachNode* reductionS_4Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9056 Compile* C = Compile::current();
9057 // Add projection edges for additional defs or kills
9058 // TEMP vtmp1
9059 MachTempNode *def;
9060 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9061 add_req(def);
9062 // TEMP vtmp2
9063 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9064 add_req(def);
9065
9066 return this;
9067}
9068
9069MachNode* reductionS_5Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9070 Compile* C = Compile::current();
9071 // Add projection edges for additional defs or kills
9072 // TEMP vtmp1
9073 MachTempNode *def;
9074 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9075 add_req(def);
9076 // TEMP vtmp2
9077 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9078 add_req(def);
9079
9080 return this;
9081}
9082
9083MachNode* mul_reductionBNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9084 Compile* C = Compile::current();
9085 // Add projection edges for additional defs or kills
9086 // TEMP dst
9087 MachTempNode *def;
9088 def = new MachTempNode(state->MachOperGenerator(RREGI));
9089 add_req(def);
9090 // TEMP vtmp1
9091 def = new MachTempNode(state->MachOperGenerator(VEC));
9092 add_req(def);
9093 // TEMP vtmp2
9094 def = new MachTempNode(state->MachOperGenerator(VEC));
9095 add_req(def);
9096
9097 return this;
9098}
9099
9100MachNode* mul_reduction64BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9101 Compile* C = Compile::current();
9102 // Add projection edges for additional defs or kills
9103 // TEMP dst
9104 MachTempNode *def;
9105 def = new MachTempNode(state->MachOperGenerator(RREGI));
9106 add_req(def);
9107 // TEMP vtmp1
9108 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9109 add_req(def);
9110 // TEMP vtmp2
9111 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9112 add_req(def);
9113
9114 return this;
9115}
9116
9117MachNode* minmax_reduction2FNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9118 Compile* C = Compile::current();
9119 // Add projection edges for additional defs or kills
9120 // TEMP dst
9121 MachTempNode *def;
9122 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
9123 add_req(def);
9124 // TEMP tmp
9125 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9126 add_req(def);
9127 // TEMP atmp
9128 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9129 add_req(def);
9130 // TEMP btmp
9131 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9132 add_req(def);
9133 // TEMP xmm_1
9134 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9135 add_req(def);
9136 // DEF/KILL cr
9137 MachProjNode *kill;
9138 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9139 proj_list.push(kill);
9140
9141 return this;
9142}
9143
9144MachNode* minmax_reduction2F_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9145 Compile* C = Compile::current();
9146 // Add projection edges for additional defs or kills
9147 // TEMP dst
9148 MachTempNode *def;
9149 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
9150 add_req(def);
9151 // TEMP tmp
9152 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9153 add_req(def);
9154 // TEMP atmp
9155 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9156 add_req(def);
9157 // TEMP btmp
9158 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9159 add_req(def);
9160 // TEMP xmm_1
9161 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9162 add_req(def);
9163 // DEF/KILL cr
9164 MachProjNode *kill;
9165 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9166 proj_list.push(kill);
9167
9168 return this;
9169}
9170
9171MachNode* minmax_reductionFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9172 Compile* C = Compile::current();
9173 // Add projection edges for additional defs or kills
9174 // TEMP dst
9175 MachTempNode *def;
9176 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
9177 add_req(def);
9178 // TEMP tmp
9179 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9180 add_req(def);
9181 // TEMP atmp
9182 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9183 add_req(def);
9184 // TEMP btmp
9185 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9186 add_req(def);
9187 // TEMP xmm_0
9188 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9189 add_req(def);
9190 // TEMP xmm_1
9191 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9192 add_req(def);
9193 // DEF/KILL cr
9194 MachProjNode *kill;
9195 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9196 proj_list.push(kill);
9197
9198 return this;
9199}
9200
9201MachNode* minmax_reductionF_0Node::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(LEGREGF));
9207 add_req(def);
9208 // TEMP tmp
9209 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9210 add_req(def);
9211 // TEMP atmp
9212 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9213 add_req(def);
9214 // TEMP btmp
9215 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9216 add_req(def);
9217 // TEMP xmm_0
9218 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9219 add_req(def);
9220 // TEMP xmm_1
9221 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9222 add_req(def);
9223 // DEF/KILL cr
9224 MachProjNode *kill;
9225 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9226 proj_list.push(kill);
9227
9228 return this;
9229}
9230
9231MachNode* minmax_reduction2F_avNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9232 Compile* C = Compile::current();
9233 // Add projection edges for additional defs or kills
9234 // TEMP dst
9235 MachTempNode *def;
9236 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
9237 add_req(def);
9238 // TEMP tmp
9239 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9240 add_req(def);
9241 // TEMP atmp
9242 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9243 add_req(def);
9244 // TEMP btmp
9245 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9246 add_req(def);
9247 // TEMP xmm_1
9248 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9249 add_req(def);
9250 // DEF/KILL cr
9251 MachProjNode *kill;
9252 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9253 proj_list.push(kill);
9254 // Remove duplicated operands and inputs which use the same name.
9255 if (num_opnds() == 8) {
9256 unsigned num0 = 0;
9257 unsigned num1 = opnd_array(1)->num_edges(); // dst
9258 unsigned num2 = opnd_array(2)->num_edges(); // src
9259 unsigned num3 = opnd_array(3)->num_edges(); // dst
9260 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9261 unsigned num5 = opnd_array(5)->num_edges(); // atmp
9262 unsigned num6 = opnd_array(6)->num_edges(); // btmp
9263 unsigned num7 = opnd_array(7)->num_edges(); // xmm_1
9264 unsigned idx0 = oper_input_base();
9265 unsigned idx1 = idx0 + num0;
9266 unsigned idx2 = idx1 + num1;
9267 unsigned idx3 = idx2 + num2;
9268 unsigned idx4 = idx3 + num3;
9269 unsigned idx5 = idx4 + num4;
9270 unsigned idx6 = idx5 + num5;
9271 unsigned idx7 = idx6 + num6;
9272 unsigned idx8 = idx7 + num7;
9273 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9274 for (unsigned i = 0; i < num4; i++) {
9275 set_req(i + idx3, _in[i + idx4]);
9276 }
9277 num3 = num4;
9278 idx4 = idx3 + num3;
9279 set_opnd_array(4, opnd_array(5)->clone()); // atmp
9280 for (unsigned i = 0; i < num5; i++) {
9281 set_req(i + idx4, _in[i + idx5]);
9282 }
9283 num4 = num5;
9284 idx5 = idx4 + num4;
9285 set_opnd_array(5, opnd_array(6)->clone()); // btmp
9286 for (unsigned i = 0; i < num6; i++) {
9287 set_req(i + idx5, _in[i + idx6]);
9288 }
9289 num5 = num6;
9290 idx6 = idx5 + num5;
9291 set_opnd_array(6, opnd_array(7)->clone()); // xmm_1
9292 for (unsigned i = 0; i < num7; i++) {
9293 set_req(i + idx6, _in[i + idx7]);
9294 }
9295 num6 = num7;
9296 idx7 = idx6 + num6;
9297 for (int i = idx8 - 1; i >= (int)idx7; i--) {
9298 del_req(i);
9299 }
9300 _num_opnds = 7;
9301 } else {
9302 assert(_num_opnds == 7, "There should be either 7 or 8 operands.")do { if (!(_num_opnds == 7)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 9301, "assert(" "_num_opnds == 7" ") failed"
, "There should be either 7 or 8 operands."); ::breakpoint();
} } while (0)
;
9303 }
9304
9305 return this;
9306}
9307
9308MachNode* minmax_reduction2F_av_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9309 Compile* C = Compile::current();
9310 // Add projection edges for additional defs or kills
9311 // TEMP dst
9312 MachTempNode *def;
9313 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
9314 add_req(def);
9315 // TEMP tmp
9316 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9317 add_req(def);
9318 // TEMP atmp
9319 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9320 add_req(def);
9321 // TEMP btmp
9322 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9323 add_req(def);
9324 // TEMP xmm_1
9325 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9326 add_req(def);
9327 // DEF/KILL cr
9328 MachProjNode *kill;
9329 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9330 proj_list.push(kill);
9331 // Remove duplicated operands and inputs which use the same name.
9332 if (num_opnds() == 8) {
9333 unsigned num0 = 0;
9334 unsigned num1 = opnd_array(1)->num_edges(); // dst
9335 unsigned num2 = opnd_array(2)->num_edges(); // src
9336 unsigned num3 = opnd_array(3)->num_edges(); // dst
9337 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9338 unsigned num5 = opnd_array(5)->num_edges(); // atmp
9339 unsigned num6 = opnd_array(6)->num_edges(); // btmp
9340 unsigned num7 = opnd_array(7)->num_edges(); // xmm_1
9341 unsigned idx0 = oper_input_base();
9342 unsigned idx1 = idx0 + num0;
9343 unsigned idx2 = idx1 + num1;
9344 unsigned idx3 = idx2 + num2;
9345 unsigned idx4 = idx3 + num3;
9346 unsigned idx5 = idx4 + num4;
9347 unsigned idx6 = idx5 + num5;
9348 unsigned idx7 = idx6 + num6;
9349 unsigned idx8 = idx7 + num7;
9350 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9351 for (unsigned i = 0; i < num4; i++) {
9352 set_req(i + idx3, _in[i + idx4]);
9353 }
9354 num3 = num4;
9355 idx4 = idx3 + num3;
9356 set_opnd_array(4, opnd_array(5)->clone()); // atmp
9357 for (unsigned i = 0; i < num5; i++) {
9358 set_req(i + idx4, _in[i + idx5]);
9359 }
9360 num4 = num5;
9361 idx5 = idx4 + num4;
9362 set_opnd_array(5, opnd_array(6)->clone()); // btmp
9363 for (unsigned i = 0; i < num6; i++) {
9364 set_req(i + idx5, _in[i + idx6]);
9365 }
9366 num5 = num6;
9367 idx6 = idx5 + num5;
9368 set_opnd_array(6, opnd_array(7)->clone()); // xmm_1
9369 for (unsigned i = 0; i < num7; i++) {
9370 set_req(i + idx6, _in[i + idx7]);
9371 }
9372 num6 = num7;
9373 idx7 = idx6 + num6;
9374 for (int i = idx8 - 1; i >= (int)idx7; i--) {
9375 del_req(i);
9376 }
9377 _num_opnds = 7;
9378 } else {
9379 assert(_num_opnds == 7, "There should be either 7 or 8 operands.")do { if (!(_num_opnds == 7)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 9378, "assert(" "_num_opnds == 7" ") failed"
, "There should be either 7 or 8 operands."); ::breakpoint();
} } while (0)
;
9380 }
9381
9382 return this;
9383}
9384
9385MachNode* minmax_reductionF_avNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9386 Compile* C = Compile::current();
9387 // Add projection edges for additional defs or kills
9388 // TEMP dst
9389 MachTempNode *def;
9390 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
9391 add_req(def);
9392 // TEMP tmp
9393 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9394 add_req(def);
9395 // TEMP atmp
9396 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9397 add_req(def);
9398 // TEMP btmp
9399 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9400 add_req(def);
9401 // TEMP xmm_0
9402 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9403 add_req(def);
9404 // TEMP xmm_1
9405 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9406 add_req(def);
9407 // DEF/KILL cr
9408 MachProjNode *kill;
9409 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9410 proj_list.push(kill);
9411 // Remove duplicated operands and inputs which use the same name.
9412 if (num_opnds() == 9) {
9413 unsigned num0 = 0;
9414 unsigned num1 = opnd_array(1)->num_edges(); // dst
9415 unsigned num2 = opnd_array(2)->num_edges(); // src
9416 unsigned num3 = opnd_array(3)->num_edges(); // dst
9417 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9418 unsigned num5 = opnd_array(5)->num_edges(); // atmp
9419 unsigned num6 = opnd_array(6)->num_edges(); // btmp
9420 unsigned num7 = opnd_array(7)->num_edges(); // xmm_0
9421 unsigned num8 = opnd_array(8)->num_edges(); // xmm_1
9422 unsigned idx0 = oper_input_base();
9423 unsigned idx1 = idx0 + num0;
9424 unsigned idx2 = idx1 + num1;
9425 unsigned idx3 = idx2 + num2;
9426 unsigned idx4 = idx3 + num3;
9427 unsigned idx5 = idx4 + num4;
9428 unsigned idx6 = idx5 + num5;
9429 unsigned idx7 = idx6 + num6;
9430 unsigned idx8 = idx7 + num7;
9431 unsigned idx9 = idx8 + num8;
9432 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9433 for (unsigned i = 0; i < num4; i++) {
9434 set_req(i + idx3, _in[i + idx4]);
9435 }
9436 num3 = num4;
9437 idx4 = idx3 + num3;
9438 set_opnd_array(4, opnd_array(5)->clone()); // atmp
9439 for (unsigned i = 0; i < num5; i++) {
9440 set_req(i + idx4, _in[i + idx5]);
9441 }
9442 num4 = num5;
9443 idx5 = idx4 + num4;
9444 set_opnd_array(5, opnd_array(6)->clone()); // btmp
9445 for (unsigned i = 0; i < num6; i++) {
9446 set_req(i + idx5, _in[i + idx6]);
9447 }
9448 num5 = num6;
9449 idx6 = idx5 + num5;
9450 set_opnd_array(6, opnd_array(7)->clone()); // xmm_0
9451 for (unsigned i = 0; i < num7; i++) {
9452 set_req(i + idx6, _in[i + idx7]);
9453 }
9454 num6 = num7;
9455 idx7 = idx6 + num6;
9456 set_opnd_array(7, opnd_array(8)->clone()); // xmm_1
9457 for (unsigned i = 0; i < num8; i++) {
9458 set_req(i + idx7, _in[i + idx8]);
9459 }
9460 num7 = num8;
9461 idx8 = idx7 + num7;
9462 for (int i = idx9 - 1; i >= (int)idx8; i--) {
9463 del_req(i);
9464 }
9465 _num_opnds = 8;
9466 } else {
9467 assert(_num_opnds == 8, "There should be either 8 or 9 operands.")do { if (!(_num_opnds == 8)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 9466, "assert(" "_num_opnds == 8" ") failed"
, "There should be either 8 or 9 operands."); ::breakpoint();
} } while (0)
;
9468 }
9469
9470 return this;
9471}
9472
9473MachNode* minmax_reductionF_av_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9474 Compile* C = Compile::current();
9475 // Add projection edges for additional defs or kills
9476 // TEMP dst
9477 MachTempNode *def;
9478 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
9479 add_req(def);
9480 // TEMP tmp
9481 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9482 add_req(def);
9483 // TEMP atmp
9484 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9485 add_req(def);
9486 // TEMP btmp
9487 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9488 add_req(def);
9489 // TEMP xmm_0
9490 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9491 add_req(def);
9492 // TEMP xmm_1
9493 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9494 add_req(def);
9495 // DEF/KILL cr
9496 MachProjNode *kill;
9497 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9498 proj_list.push(kill);
9499 // Remove duplicated operands and inputs which use the same name.
9500 if (num_opnds() == 9) {
9501 unsigned num0 = 0;
9502 unsigned num1 = opnd_array(1)->num_edges(); // dst
9503 unsigned num2 = opnd_array(2)->num_edges(); // src
9504 unsigned num3 = opnd_array(3)->num_edges(); // dst
9505 unsigned num4 = opnd_array(4)->num_edges(); // tmp
9506 unsigned num5 = opnd_array(5)->num_edges(); // atmp
9507 unsigned num6 = opnd_array(6)->num_edges(); // btmp
9508 unsigned num7 = opnd_array(7)->num_edges(); // xmm_0
9509 unsigned num8 = opnd_array(8)->num_edges(); // xmm_1
9510 unsigned idx0 = oper_input_base();
9511 unsigned idx1 = idx0 + num0;
9512 unsigned idx2 = idx1 + num1;
9513 unsigned idx3 = idx2 + num2;
9514 unsigned idx4 = idx3 + num3;
9515 unsigned idx5 = idx4 + num4;
9516 unsigned idx6 = idx5 + num5;
9517 unsigned idx7 = idx6 + num6;
9518 unsigned idx8 = idx7 + num7;
9519 unsigned idx9 = idx8 + num8;
9520 set_opnd_array(3, opnd_array(4)->clone()); // tmp
9521 for (unsigned i = 0; i < num4; i++) {
9522 set_req(i + idx3, _in[i + idx4]);
9523 }
9524 num3 = num4;
9525 idx4 = idx3 + num3;
9526 set_opnd_array(4, opnd_array(5)->clone()); // atmp
9527 for (unsigned i = 0; i < num5; i++) {
9528 set_req(i + idx4, _in[i + idx5]);
9529 }
9530 num4 = num5;
9531 idx5 = idx4 + num4;
9532 set_opnd_array(5, opnd_array(6)->clone()); // btmp
9533 for (unsigned i = 0; i < num6; i++) {
9534 set_req(i + idx5, _in[i + idx6]);
9535 }
9536 num5 = num6;
9537 idx6 = idx5 + num5;
9538 set_opnd_array(6, opnd_array(7)->clone()); // xmm_0
9539 for (unsigned i = 0; i < num7; i++) {
9540 set_req(i + idx6, _in[i + idx7]);
9541 }
9542 num6 = num7;
9543 idx7 = idx6 + num6;
9544 set_opnd_array(7, opnd_array(8)->clone()); // xmm_1
9545 for (unsigned i = 0; i < num8; i++) {
9546 set_req(i + idx7, _in[i + idx8]);
9547 }
9548 num7 = num8;
9549 idx8 = idx7 + num7;
9550 for (int i = idx9 - 1; i >= (int)idx8; i--) {
9551 del_req(i);
9552 }
9553 _num_opnds = 8;
9554 } else {
9555 assert(_num_opnds == 8, "There should be either 8 or 9 operands.")do { if (!(_num_opnds == 8)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 9554, "assert(" "_num_opnds == 8" ") failed"
, "There should be either 8 or 9 operands."); ::breakpoint();
} } while (0)
;
9556 }
9557
9558 return this;
9559}
9560
9561MachNode* minmax_reduction2DNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9562 Compile* C = Compile::current();
9563 // Add projection edges for additional defs or kills
9564 // TEMP dst
9565 MachTempNode *def;
9566 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
9567 add_req(def);
9568 // TEMP tmp1
9569 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9570 add_req(def);
9571 // TEMP tmp2
9572 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9573 add_req(def);
9574 // TEMP tmp3
9575 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9576 add_req(def);
9577 // TEMP tmp4
9578 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9579 add_req(def);
9580 // DEF/KILL cr
9581 MachProjNode *kill;
9582 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9583 proj_list.push(kill);
9584
9585 return this;
9586}
9587
9588MachNode* minmax_reduction2D_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9589 Compile* C = Compile::current();
9590 // Add projection edges for additional defs or kills
9591 // TEMP dst
9592 MachTempNode *def;
9593 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
9594 add_req(def);
9595 // TEMP tmp1
9596 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9597 add_req(def);
9598 // TEMP tmp2
9599 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9600 add_req(def);
9601 // TEMP tmp3
9602 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9603 add_req(def);
9604 // TEMP tmp4
9605 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9606 add_req(def);
9607 // DEF/KILL cr
9608 MachProjNode *kill;
9609 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9610 proj_list.push(kill);
9611
9612 return this;
9613}
9614
9615MachNode* minmax_reductionDNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9616 Compile* C = Compile::current();
9617 // Add projection edges for additional defs or kills
9618 // TEMP dst
9619 MachTempNode *def;
9620 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
9621 add_req(def);
9622 // TEMP tmp1
9623 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9624 add_req(def);
9625 // TEMP tmp2
9626 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9627 add_req(def);
9628 // TEMP tmp3
9629 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9630 add_req(def);
9631 // TEMP tmp4
9632 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9633 add_req(def);
9634 // TEMP tmp5
9635 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9636 add_req(def);
9637 // DEF/KILL cr
9638 MachProjNode *kill;
9639 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9640 proj_list.push(kill);
9641
9642 return this;
9643}
9644
9645MachNode* minmax_reductionD_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9646 Compile* C = Compile::current();
9647 // Add projection edges for additional defs or kills
9648 // TEMP dst
9649 MachTempNode *def;
9650 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
9651 add_req(def);
9652 // TEMP tmp1
9653 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9654 add_req(def);
9655 // TEMP tmp2
9656 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9657 add_req(def);
9658 // TEMP tmp3
9659 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9660 add_req(def);
9661 // TEMP tmp4
9662 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9663 add_req(def);
9664 // TEMP tmp5
9665 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9666 add_req(def);
9667 // DEF/KILL cr
9668 MachProjNode *kill;
9669 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9670 proj_list.push(kill);
9671
9672 return this;
9673}
9674
9675MachNode* minmax_reduction2D_avNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9676 Compile* C = Compile::current();
9677 // Add projection edges for additional defs or kills
9678 // TEMP dst
9679 MachTempNode *def;
9680 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
9681 add_req(def);
9682 // TEMP tmp1
9683 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9684 add_req(def);
9685 // TEMP tmp2
9686 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9687 add_req(def);
9688 // TEMP tmp3
9689 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9690 add_req(def);
9691 // TEMP tmp4
9692 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9693 add_req(def);
9694 // DEF/KILL cr
9695 MachProjNode *kill;
9696 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9697 proj_list.push(kill);
9698 // Remove duplicated operands and inputs which use the same name.
9699 if (num_opnds() == 8) {
9700 unsigned num0 = 0;
9701 unsigned num1 = opnd_array(1)->num_edges(); // dst
9702 unsigned num2 = opnd_array(2)->num_edges(); // src
9703 unsigned num3 = opnd_array(3)->num_edges(); // dst
9704 unsigned num4 = opnd_array(4)->num_edges(); // tmp1
9705 unsigned num5 = opnd_array(5)->num_edges(); // tmp2
9706 unsigned num6 = opnd_array(6)->num_edges(); // tmp3
9707 unsigned num7 = opnd_array(7)->num_edges(); // tmp4
9708 unsigned idx0 = oper_input_base();
9709 unsigned idx1 = idx0 + num0;
9710 unsigned idx2 = idx1 + num1;
9711 unsigned idx3 = idx2 + num2;
9712 unsigned idx4 = idx3 + num3;
9713 unsigned idx5 = idx4 + num4;
9714 unsigned idx6 = idx5 + num5;
9715 unsigned idx7 = idx6 + num6;
9716 unsigned idx8 = idx7 + num7;
9717 set_opnd_array(3, opnd_array(4)->clone()); // tmp1
9718 for (unsigned i = 0; i < num4; i++) {
9719 set_req(i + idx3, _in[i + idx4]);
9720 }
9721 num3 = num4;
9722 idx4 = idx3 + num3;
9723 set_opnd_array(4, opnd_array(5)->clone()); // tmp2
9724 for (unsigned i = 0; i < num5; i++) {
9725 set_req(i + idx4, _in[i + idx5]);
9726 }
9727 num4 = num5;
9728 idx5 = idx4 + num4;
9729 set_opnd_array(5, opnd_array(6)->clone()); // tmp3
9730 for (unsigned i = 0; i < num6; i++) {
9731 set_req(i + idx5, _in[i + idx6]);
9732 }
9733 num5 = num6;
9734 idx6 = idx5 + num5;
9735 set_opnd_array(6, opnd_array(7)->clone()); // tmp4
9736 for (unsigned i = 0; i < num7; i++) {
9737 set_req(i + idx6, _in[i + idx7]);
9738 }
9739 num6 = num7;
9740 idx7 = idx6 + num6;
9741 for (int i = idx8 - 1; i >= (int)idx7; i--) {
9742 del_req(i);
9743 }
9744 _num_opnds = 7;
9745 } else {
9746 assert(_num_opnds == 7, "There should be either 7 or 8 operands.")do { if (!(_num_opnds == 7)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 9745, "assert(" "_num_opnds == 7" ") failed"
, "There should be either 7 or 8 operands."); ::breakpoint();
} } while (0)
;
9747 }
9748
9749 return this;
9750}
9751
9752MachNode* minmax_reduction2D_av_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9753 Compile* C = Compile::current();
9754 // Add projection edges for additional defs or kills
9755 // TEMP dst
9756 MachTempNode *def;
9757 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
9758 add_req(def);
9759 // TEMP tmp1
9760 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9761 add_req(def);
9762 // TEMP tmp2
9763 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9764 add_req(def);
9765 // TEMP tmp3
9766 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9767 add_req(def);
9768 // TEMP tmp4
9769 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9770 add_req(def);
9771 // DEF/KILL cr
9772 MachProjNode *kill;
9773 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9774 proj_list.push(kill);
9775 // Remove duplicated operands and inputs which use the same name.
9776 if (num_opnds() == 8) {
9777 unsigned num0 = 0;
9778 unsigned num1 = opnd_array(1)->num_edges(); // dst
9779 unsigned num2 = opnd_array(2)->num_edges(); // src
9780 unsigned num3 = opnd_array(3)->num_edges(); // dst
9781 unsigned num4 = opnd_array(4)->num_edges(); // tmp1
9782 unsigned num5 = opnd_array(5)->num_edges(); // tmp2
9783 unsigned num6 = opnd_array(6)->num_edges(); // tmp3
9784 unsigned num7 = opnd_array(7)->num_edges(); // tmp4
9785 unsigned idx0 = oper_input_base();
9786 unsigned idx1 = idx0 + num0;
9787 unsigned idx2 = idx1 + num1;
9788 unsigned idx3 = idx2 + num2;
9789 unsigned idx4 = idx3 + num3;
9790 unsigned idx5 = idx4 + num4;
9791 unsigned idx6 = idx5 + num5;
9792 unsigned idx7 = idx6 + num6;
9793 unsigned idx8 = idx7 + num7;
9794 set_opnd_array(3, opnd_array(4)->clone()); // tmp1
9795 for (unsigned i = 0; i < num4; i++) {
9796 set_req(i + idx3, _in[i + idx4]);
9797 }
9798 num3 = num4;
9799 idx4 = idx3 + num3;
9800 set_opnd_array(4, opnd_array(5)->clone()); // tmp2
9801 for (unsigned i = 0; i < num5; i++) {
9802 set_req(i + idx4, _in[i + idx5]);
9803 }
9804 num4 = num5;
9805 idx5 = idx4 + num4;
9806 set_opnd_array(5, opnd_array(6)->clone()); // tmp3
9807 for (unsigned i = 0; i < num6; i++) {
9808 set_req(i + idx5, _in[i + idx6]);
9809 }
9810 num5 = num6;
9811 idx6 = idx5 + num5;
9812 set_opnd_array(6, opnd_array(7)->clone()); // tmp4
9813 for (unsigned i = 0; i < num7; i++) {
9814 set_req(i + idx6, _in[i + idx7]);
9815 }
9816 num6 = num7;
9817 idx7 = idx6 + num6;
9818 for (int i = idx8 - 1; i >= (int)idx7; i--) {
9819 del_req(i);
9820 }
9821 _num_opnds = 7;
9822 } else {
9823 assert(_num_opnds == 7, "There should be either 7 or 8 operands.")do { if (!(_num_opnds == 7)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 9822, "assert(" "_num_opnds == 7" ") failed"
, "There should be either 7 or 8 operands."); ::breakpoint();
} } while (0)
;
9824 }
9825
9826 return this;
9827}
9828
9829MachNode* minmax_reductionD_avNode::Expand(State* state, Node_List& proj_list, Node* mem) {
9830 Compile* C = Compile::current();
9831 // Add projection edges for additional defs or kills
9832 // TEMP dst
9833 MachTempNode *def;
9834 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
9835 add_req(def);
9836 // TEMP tmp1
9837 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9838 add_req(def);
9839 // TEMP tmp2
9840 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9841 add_req(def);
9842 // TEMP tmp3
9843 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9844 add_req(def);
9845 // TEMP tmp4
9846 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9847 add_req(def);
9848 // TEMP tmp5
9849 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9850 add_req(def);
9851 // DEF/KILL cr
9852 MachProjNode *kill;
9853 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9854 proj_list.push(kill);
9855 // Remove duplicated operands and inputs which use the same name.
9856 if (num_opnds() == 9) {
9857 unsigned num0 = 0;
9858 unsigned num1 = opnd_array(1)->num_edges(); // dst
9859 unsigned num2 = opnd_array(2)->num_edges(); // src
9860 unsigned num3 = opnd_array(3)->num_edges(); // dst
9861 unsigned num4 = opnd_array(4)->num_edges(); // tmp1
9862 unsigned num5 = opnd_array(5)->num_edges(); // tmp2
9863 unsigned num6 = opnd_array(6)->num_edges(); // tmp3
9864 unsigned num7 = opnd_array(7)->num_edges(); // tmp4
9865 unsigned num8 = opnd_array(8)->num_edges(); // tmp5
9866 unsigned idx0 = oper_input_base();
9867 unsigned idx1 = idx0 + num0;
9868 unsigned idx2 = idx1 + num1;
9869 unsigned idx3 = idx2 + num2;
9870 unsigned idx4 = idx3 + num3;
9871 unsigned idx5 = idx4 + num4;
9872 unsigned idx6 = idx5 + num5;
9873 unsigned idx7 = idx6 + num6;
9874 unsigned idx8 = idx7 + num7;
9875 unsigned idx9 = idx8 + num8;
9876 set_opnd_array(3, opnd_array(4)->clone()); // tmp1
9877 for (unsigned i = 0; i < num4; i++) {
9878 set_req(i + idx3, _in[i + idx4]);
9879 }
9880 num3 = num4;
9881 idx4 = idx3 + num3;
9882 set_opnd_array(4, opnd_array(5)->clone()); // tmp2
9883 for (unsigned i = 0; i < num5; i++) {
9884 set_req(i + idx4, _in[i + idx5]);
9885 }
9886 num4 = num5;
9887 idx5 = idx4 + num4;
9888 set_opnd_array(5, opnd_array(6)->clone()); // tmp3
9889 for (unsigned i = 0; i < num6; i++) {
9890 set_req(i + idx5, _in[i + idx6]);
9891 }
9892 num5 = num6;
9893 idx6 = idx5 + num5;
9894 set_opnd_array(6, opnd_array(7)->clone()); // tmp4
9895 for (unsigned i = 0; i < num7; i++) {
9896 set_req(i + idx6, _in[i + idx7]);
9897 }
9898 num6 = num7;
9899 idx7 = idx6 + num6;
9900 set_opnd_array(7, opnd_array(8)->clone()); // tmp5
9901 for (unsigned i = 0; i < num8; i++) {
9902 set_req(i + idx7, _in[i + idx8]);
9903 }
9904 num7 = num8;
9905 idx8 = idx7 + num7;
9906 for (int i = idx9 - 1; i >= (int)idx8; i--) {
9907 del_req(i);
9908 }
9909 _num_opnds = 8;
9910 } else {
9911 assert(_num_opnds == 8, "There should be either 8 or 9 operands.")do { if (!(_num_opnds == 8)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 9910, "assert(" "_num_opnds == 8" ") failed"
, "There should be either 8 or 9 operands."); ::breakpoint();
} } while (0)
;
9912 }
9913
9914 return this;
9915}
9916
9917MachNode* minmax_reductionD_av_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
9918 Compile* C = Compile::current();
9919 // Add projection edges for additional defs or kills
9920 // TEMP dst
9921 MachTempNode *def;
9922 def = new MachTempNode(state->MachOperGenerator(LEGREGD));
9923 add_req(def);
9924 // TEMP tmp1
9925 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9926 add_req(def);
9927 // TEMP tmp2
9928 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9929 add_req(def);
9930 // TEMP tmp3
9931 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9932 add_req(def);
9933 // TEMP tmp4
9934 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9935 add_req(def);
9936 // TEMP tmp5
9937 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
9938 add_req(def);
9939 // DEF/KILL cr
9940 MachProjNode *kill;
9941 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
9942 proj_list.push(kill);
9943 // Remove duplicated operands and inputs which use the same name.
9944 if (num_opnds() == 9) {
9945 unsigned num0 = 0;
9946 unsigned num1 = opnd_array(1)->num_edges(); // dst
9947 unsigned num2 = opnd_array(2)->num_edges(); // src
9948 unsigned num3 = opnd_array(3)->num_edges(); // dst
9949 unsigned num4 = opnd_array(4)->num_edges(); // tmp1
9950 unsigned num5 = opnd_array(5)->num_edges(); // tmp2
9951 unsigned num6 = opnd_array(6)->num_edges(); // tmp3
9952 unsigned num7 = opnd_array(7)->num_edges(); // tmp4
9953 unsigned num8 = opnd_array(8)->num_edges(); // tmp5
9954 unsigned idx0 = oper_input_base();
9955 unsigned idx1 = idx0 + num0;
9956 unsigned idx2 = idx1 + num1;
9957 unsigned idx3 = idx2 + num2;
9958 unsigned idx4 = idx3 + num3;
9959 unsigned idx5 = idx4 + num4;
9960 unsigned idx6 = idx5 + num5;
9961 unsigned idx7 = idx6 + num6;
9962 unsigned idx8 = idx7 + num7;
9963 unsigned idx9 = idx8 + num8;
9964 set_opnd_array(3, opnd_array(4)->clone()); // tmp1
9965 for (unsigned i = 0; i < num4; i++) {
9966 set_req(i + idx3, _in[i + idx4]);
9967 }
9968 num3 = num4;
9969 idx4 = idx3 + num3;
9970 set_opnd_array(4, opnd_array(5)->clone()); // tmp2
9971 for (unsigned i = 0; i < num5; i++) {
9972 set_req(i + idx4, _in[i + idx5]);
9973 }
9974 num4 = num5;
9975 idx5 = idx4 + num4;
9976 set_opnd_array(5, opnd_array(6)->clone()); // tmp3
9977 for (unsigned i = 0; i < num6; i++) {
9978 set_req(i + idx5, _in[i + idx6]);
9979 }
9980 num5 = num6;
9981 idx6 = idx5 + num5;
9982 set_opnd_array(6, opnd_array(7)->clone()); // tmp4
9983 for (unsigned i = 0; i < num7; i++) {
9984 set_req(i + idx6, _in[i + idx7]);
9985 }
9986 num6 = num7;
9987 idx7 = idx6 + num6;
9988 set_opnd_array(7, opnd_array(8)->clone()); // tmp5
9989 for (unsigned i = 0; i < num8; i++) {
9990 set_req(i + idx7, _in[i + idx8]);
9991 }
9992 num7 = num8;
9993 idx8 = idx7 + num7;
9994 for (int i = idx9 - 1; i >= (int)idx8; i--) {
9995 del_req(i);
9996 }
9997 _num_opnds = 8;
9998 } else {
9999 assert(_num_opnds == 8, "There should be either 8 or 9 operands.")do { if (!(_num_opnds == 8)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 9998, "assert(" "_num_opnds == 8" ") failed"
, "There should be either 8 or 9 operands."); ::breakpoint();
} } while (0)
;
10000 }
10001
10002 return this;
10003}
10004
10005MachNode* mulB_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10006 Compile* C = Compile::current();
10007 // Add projection edges for additional defs or kills
10008 // TEMP dst
10009 MachTempNode *def;
10010 def = new MachTempNode(state->MachOperGenerator(VEC));
10011 add_req(def);
10012 // TEMP tmp
10013 def = new MachTempNode(state->MachOperGenerator(VEC));
10014 add_req(def);
10015 // TEMP scratch
10016 def = new MachTempNode(state->MachOperGenerator(RREGI));
10017 add_req(def);
10018
10019 return this;
10020}
10021
10022MachNode* mul16B_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10023 Compile* C = Compile::current();
10024 // Add projection edges for additional defs or kills
10025 // TEMP dst
10026 MachTempNode *def;
10027 def = new MachTempNode(state->MachOperGenerator(VEC));
10028 add_req(def);
10029 // TEMP tmp1
10030 def = new MachTempNode(state->MachOperGenerator(VEC));
10031 add_req(def);
10032 // TEMP tmp2
10033 def = new MachTempNode(state->MachOperGenerator(VEC));
10034 add_req(def);
10035 // TEMP scratch
10036 def = new MachTempNode(state->MachOperGenerator(RREGI));
10037 add_req(def);
10038
10039 return this;
10040}
10041
10042MachNode* vmul16B_reg_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10043 Compile* C = Compile::current();
10044 // Add projection edges for additional defs or kills
10045 // TEMP dst
10046 MachTempNode *def;
10047 def = new MachTempNode(state->MachOperGenerator(VEC));
10048 add_req(def);
10049 // TEMP tmp
10050 def = new MachTempNode(state->MachOperGenerator(VEC));
10051 add_req(def);
10052 // TEMP scratch
10053 def = new MachTempNode(state->MachOperGenerator(RREGI));
10054 add_req(def);
10055
10056 return this;
10057}
10058
10059MachNode* vmul32B_reg_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10060 Compile* C = Compile::current();
10061 // Add projection edges for additional defs or kills
10062 // TEMP dst
10063 MachTempNode *def;
10064 def = new MachTempNode(state->MachOperGenerator(VEC));
10065 add_req(def);
10066 // TEMP tmp1
10067 def = new MachTempNode(state->MachOperGenerator(VEC));
10068 add_req(def);
10069 // TEMP tmp2
10070 def = new MachTempNode(state->MachOperGenerator(VEC));
10071 add_req(def);
10072 // TEMP scratch
10073 def = new MachTempNode(state->MachOperGenerator(RREGI));
10074 add_req(def);
10075
10076 return this;
10077}
10078
10079MachNode* vmul64B_reg_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10080 Compile* C = Compile::current();
10081 // Add projection edges for additional defs or kills
10082 // TEMP dst
10083 MachTempNode *def;
10084 def = new MachTempNode(state->MachOperGenerator(VEC));
10085 add_req(def);
10086 // TEMP tmp1
10087 def = new MachTempNode(state->MachOperGenerator(VEC));
10088 add_req(def);
10089 // TEMP tmp2
10090 def = new MachTempNode(state->MachOperGenerator(VEC));
10091 add_req(def);
10092 // TEMP scratch
10093 def = new MachTempNode(state->MachOperGenerator(RREGI));
10094 add_req(def);
10095
10096 return this;
10097}
10098
10099MachNode* mul2L_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10100 Compile* C = Compile::current();
10101 // Add projection edges for additional defs or kills
10102 // TEMP dst
10103 MachTempNode *def;
10104 def = new MachTempNode(state->MachOperGenerator(VEC));
10105 add_req(def);
10106 // TEMP tmp
10107 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10108 add_req(def);
10109 // Remove duplicated operands and inputs which use the same name.
10110 if (num_opnds() == 5) {
10111 unsigned num0 = 0;
10112 unsigned num1 = opnd_array(1)->num_edges(); // dst
10113 unsigned num2 = opnd_array(2)->num_edges(); // src2
10114 unsigned num3 = opnd_array(3)->num_edges(); // dst
10115 unsigned num4 = opnd_array(4)->num_edges(); // tmp
10116 unsigned idx0 = oper_input_base();
10117 unsigned idx1 = idx0 + num0;
10118 unsigned idx2 = idx1 + num1;
10119 unsigned idx3 = idx2 + num2;
10120 unsigned idx4 = idx3 + num3;
10121 unsigned idx5 = idx4 + num4;
10122 set_opnd_array(3, opnd_array(4)->clone()); // tmp
10123 for (unsigned i = 0; i < num4; i++) {
10124 set_req(i + idx3, _in[i + idx4]);
10125 }
10126 num3 = num4;
10127 idx4 = idx3 + num3;
10128 for (int i = idx5 - 1; i >= (int)idx4; i--) {
10129 del_req(i);
10130 }
10131 _num_opnds = 4;
10132 } else {
10133 assert(_num_opnds == 4, "There should be either 4 or 5 operands.")do { if (!(_num_opnds == 4)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 10132, "assert(" "_num_opnds == 4" ") failed"
, "There should be either 4 or 5 operands."); ::breakpoint();
} } while (0)
;
10134 }
10135
10136 return this;
10137}
10138
10139MachNode* vmul4L_reg_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10140 Compile* C = Compile::current();
10141 // Add projection edges for additional defs or kills
10142 // TEMP tmp
10143 MachTempNode *def;
10144 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10145 add_req(def);
10146 // TEMP tmp1
10147 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10148 add_req(def);
10149
10150 return this;
10151}
10152
10153MachNode* vcmov8F_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10154 Compile* C = Compile::current();
10155 // Add projection edges for additional defs or kills
10156 // TEMP dst
10157 MachTempNode *def;
10158 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10159 add_req(def);
10160
10161 return this;
10162}
10163
10164MachNode* vcmov4D_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10165 Compile* C = Compile::current();
10166 // Add projection edges for additional defs or kills
10167 // TEMP dst
10168 MachTempNode *def;
10169 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10170 add_req(def);
10171
10172 return this;
10173}
10174
10175MachNode* minmaxL_reg_sseNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10176 Compile* C = Compile::current();
10177 // Add projection edges for additional defs or kills
10178 // TEMP dst
10179 MachTempNode *def;
10180 def = new MachTempNode(state->MachOperGenerator(VEC));
10181 add_req(def);
10182 // TEMP tmp
10183 def = new MachTempNode(state->MachOperGenerator(RXMM0));
10184 add_req(def);
10185 // Remove duplicated operands and inputs which use the same name.
10186 if (num_opnds() == 5) {
10187 unsigned num0 = 0;
10188 unsigned num1 = opnd_array(1)->num_edges(); // dst
10189 unsigned num2 = opnd_array(2)->num_edges(); // src
10190 unsigned num3 = opnd_array(3)->num_edges(); // dst
10191 unsigned num4 = opnd_array(4)->num_edges(); // tmp
10192 unsigned idx0 = oper_input_base();
10193 unsigned idx1 = idx0 + num0;
10194 unsigned idx2 = idx1 + num1;
10195 unsigned idx3 = idx2 + num2;
10196 unsigned idx4 = idx3 + num3;
10197 unsigned idx5 = idx4 + num4;
10198 set_opnd_array(3, opnd_array(4)->clone()); // tmp
10199 for (unsigned i = 0; i < num4; i++) {
10200 set_req(i + idx3, _in[i + idx4]);
10201 }
10202 num3 = num4;
10203 idx4 = idx3 + num3;
10204 for (int i = idx5 - 1; i >= (int)idx4; i--) {
10205 del_req(i);
10206 }
10207 _num_opnds = 4;
10208 } else {
10209 assert(_num_opnds == 4, "There should be either 4 or 5 operands.")do { if (!(_num_opnds == 4)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 10208, "assert(" "_num_opnds == 4" ") failed"
, "There should be either 4 or 5 operands."); ::breakpoint();
} } while (0)
;
10210 }
10211
10212 return this;
10213}
10214
10215MachNode* minmaxL_reg_sse_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10216 Compile* C = Compile::current();
10217 // Add projection edges for additional defs or kills
10218 // TEMP dst
10219 MachTempNode *def;
10220 def = new MachTempNode(state->MachOperGenerator(VEC));
10221 add_req(def);
10222 // TEMP tmp
10223 def = new MachTempNode(state->MachOperGenerator(RXMM0));
10224 add_req(def);
10225 // Remove duplicated operands and inputs which use the same name.
10226 if (num_opnds() == 5) {
10227 unsigned num0 = 0;
10228 unsigned num1 = opnd_array(1)->num_edges(); // src
10229 unsigned num2 = opnd_array(2)->num_edges(); // dst
10230 unsigned num3 = opnd_array(3)->num_edges(); // dst
10231 unsigned num4 = opnd_array(4)->num_edges(); // tmp
10232 unsigned idx0 = oper_input_base();
10233 unsigned idx1 = idx0 + num0;
10234 unsigned idx2 = idx1 + num1;
10235 unsigned idx3 = idx2 + num2;
10236 unsigned idx4 = idx3 + num3;
10237 unsigned idx5 = idx4 + num4;
10238 set_opnd_array(3, opnd_array(4)->clone()); // tmp
10239 for (unsigned i = 0; i < num4; i++) {
10240 set_req(i + idx3, _in[i + idx4]);
10241 }
10242 num3 = num4;
10243 idx4 = idx3 + num3;
10244 for (int i = idx5 - 1; i >= (int)idx4; i--) {
10245 del_req(i);
10246 }
10247 _num_opnds = 4;
10248 } else {
10249 assert(_num_opnds == 4, "There should be either 4 or 5 operands.")do { if (!(_num_opnds == 4)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 10248, "assert(" "_num_opnds == 4" ") failed"
, "There should be either 4 or 5 operands."); ::breakpoint();
} } while (0)
;
10250 }
10251
10252 return this;
10253}
10254
10255MachNode* vminmaxL_reg_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10256 Compile* C = Compile::current();
10257 // Add projection edges for additional defs or kills
10258 // TEMP dst
10259 MachTempNode *def;
10260 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10261 add_req(def);
10262
10263 return this;
10264}
10265
10266MachNode* vminmaxL_reg_avx_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10267 Compile* C = Compile::current();
10268 // Add projection edges for additional defs or kills
10269 // TEMP dst
10270 MachTempNode *def;
10271 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10272 add_req(def);
10273
10274 return this;
10275}
10276
10277MachNode* minmaxFP_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10278 Compile* C = Compile::current();
10279 // Add projection edges for additional defs or kills
10280 // TEMP tmp
10281 MachTempNode *def;
10282 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10283 add_req(def);
10284 // TEMP atmp
10285 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10286 add_req(def);
10287 // TEMP btmp
10288 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10289 add_req(def);
10290
10291 return this;
10292}
10293
10294MachNode* minmaxFP_reg_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10295 Compile* C = Compile::current();
10296 // Add projection edges for additional defs or kills
10297 // TEMP tmp
10298 MachTempNode *def;
10299 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10300 add_req(def);
10301 // TEMP atmp
10302 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10303 add_req(def);
10304 // TEMP btmp
10305 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
10306 add_req(def);
10307
10308 return this;
10309}
10310
10311MachNode* evminmaxFP_reg_eavxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10312 Compile* C = Compile::current();
10313 // Add projection edges for additional defs or kills
10314 // TEMP dst
10315 MachTempNode *def;
10316 def = new MachTempNode(state->MachOperGenerator(VEC));
10317 add_req(def);
10318 // TEMP atmp
10319 def = new MachTempNode(state->MachOperGenerator(VEC));
10320 add_req(def);
10321 // TEMP btmp
10322 def = new MachTempNode(state->MachOperGenerator(VEC));
10323 add_req(def);
10324 // TEMP ktmp
10325 def = new MachTempNode(state->MachOperGenerator(KREG));
10326 add_req(def);
10327
10328 return this;
10329}
10330
10331MachNode* evminmaxFP_reg_eavx_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10332 Compile* C = Compile::current();
10333 // Add projection edges for additional defs or kills
10334 // TEMP dst
10335 MachTempNode *def;
10336 def = new MachTempNode(state->MachOperGenerator(VEC));
10337 add_req(def);
10338 // TEMP atmp
10339 def = new MachTempNode(state->MachOperGenerator(VEC));
10340 add_req(def);
10341 // TEMP btmp
10342 def = new MachTempNode(state->MachOperGenerator(VEC));
10343 add_req(def);
10344 // TEMP ktmp
10345 def = new MachTempNode(state->MachOperGenerator(KREG));
10346 add_req(def);
10347
10348 return this;
10349}
10350
10351MachNode* signumF_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10352 Compile* C = Compile::current();
10353 // Add projection edges for additional defs or kills
10354 // TEMP scratch
10355 MachTempNode *def;
10356 def = new MachTempNode(state->MachOperGenerator(RREGP));
10357 add_req(def);
10358 // DEF/KILL cr
10359 MachProjNode *kill;
10360 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
10361 proj_list.push(kill);
10362
10363 return this;
10364}
10365
10366MachNode* signumD_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10367 Compile* C = Compile::current();
10368 // Add projection edges for additional defs or kills
10369 // TEMP scratch
10370 MachTempNode *def;
10371 def = new MachTempNode(state->MachOperGenerator(RREGP));
10372 add_req(def);
10373 // DEF/KILL cr
10374 MachProjNode *kill;
10375 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
10376 proj_list.push(kill);
10377
10378 return this;
10379}
10380
10381MachNode* copySignF_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10382 Compile* C = Compile::current();
10383 // Add projection edges for additional defs or kills
10384 // TEMP tmp1
10385 MachTempNode *def;
10386 def = new MachTempNode(state->MachOperGenerator(REGF));
10387 add_req(def);
10388 // TEMP tmp2
10389 def = new MachTempNode(state->MachOperGenerator(RREGI));
10390 add_req(def);
10391
10392 return this;
10393}
10394
10395MachNode* copySignD_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10396 Compile* C = Compile::current();
10397 // Add projection edges for additional defs or kills
10398 // TEMP tmp1
10399 MachTempNode *def;
10400 def = new MachTempNode(state->MachOperGenerator(REGD));
10401 add_req(def);
10402 // TEMP tmp2
10403 def = new MachTempNode(state->MachOperGenerator(RREGL));
10404 add_req(def);
10405
10406 return this;
10407}
10408
10409MachNode* vshiftBNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10410 Compile* C = Compile::current();
10411 // Add projection edges for additional defs or kills
10412 // TEMP dst
10413 MachTempNode *def;
10414 def = new MachTempNode(state->MachOperGenerator(VEC));
10415 add_req(def);
10416 // TEMP tmp
10417 def = new MachTempNode(state->MachOperGenerator(VEC));
10418 add_req(def);
10419 // TEMP scratch
10420 def = new MachTempNode(state->MachOperGenerator(RREGI));
10421 add_req(def);
10422
10423 return this;
10424}
10425
10426MachNode* vshiftB_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10427 Compile* C = Compile::current();
10428 // Add projection edges for additional defs or kills
10429 // TEMP dst
10430 MachTempNode *def;
10431 def = new MachTempNode(state->MachOperGenerator(VEC));
10432 add_req(def);
10433 // TEMP tmp
10434 def = new MachTempNode(state->MachOperGenerator(VEC));
10435 add_req(def);
10436 // TEMP scratch
10437 def = new MachTempNode(state->MachOperGenerator(RREGI));
10438 add_req(def);
10439
10440 return this;
10441}
10442
10443MachNode* vshiftB_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10444 Compile* C = Compile::current();
10445 // Add projection edges for additional defs or kills
10446 // TEMP dst
10447 MachTempNode *def;
10448 def = new MachTempNode(state->MachOperGenerator(VEC));
10449 add_req(def);
10450 // TEMP tmp
10451 def = new MachTempNode(state->MachOperGenerator(VEC));
10452 add_req(def);
10453 // TEMP scratch
10454 def = new MachTempNode(state->MachOperGenerator(RREGI));
10455 add_req(def);
10456
10457 return this;
10458}
10459
10460MachNode* vshift16BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10461 Compile* C = Compile::current();
10462 // Add projection edges for additional defs or kills
10463 // TEMP dst
10464 MachTempNode *def;
10465 def = new MachTempNode(state->MachOperGenerator(VEC));
10466 add_req(def);
10467 // TEMP tmp1
10468 def = new MachTempNode(state->MachOperGenerator(VEC));
10469 add_req(def);
10470 // TEMP tmp2
10471 def = new MachTempNode(state->MachOperGenerator(VEC));
10472 add_req(def);
10473 // TEMP scratch
10474 def = new MachTempNode(state->MachOperGenerator(RREGI));
10475 add_req(def);
10476
10477 return this;
10478}
10479
10480MachNode* vshift16B_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10481 Compile* C = Compile::current();
10482 // Add projection edges for additional defs or kills
10483 // TEMP dst
10484 MachTempNode *def;
10485 def = new MachTempNode(state->MachOperGenerator(VEC));
10486 add_req(def);
10487 // TEMP tmp1
10488 def = new MachTempNode(state->MachOperGenerator(VEC));
10489 add_req(def);
10490 // TEMP tmp2
10491 def = new MachTempNode(state->MachOperGenerator(VEC));
10492 add_req(def);
10493 // TEMP scratch
10494 def = new MachTempNode(state->MachOperGenerator(RREGI));
10495 add_req(def);
10496
10497 return this;
10498}
10499
10500MachNode* vshift16B_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10501 Compile* C = Compile::current();
10502 // Add projection edges for additional defs or kills
10503 // TEMP dst
10504 MachTempNode *def;
10505 def = new MachTempNode(state->MachOperGenerator(VEC));
10506 add_req(def);
10507 // TEMP tmp1
10508 def = new MachTempNode(state->MachOperGenerator(VEC));
10509 add_req(def);
10510 // TEMP tmp2
10511 def = new MachTempNode(state->MachOperGenerator(VEC));
10512 add_req(def);
10513 // TEMP scratch
10514 def = new MachTempNode(state->MachOperGenerator(RREGI));
10515 add_req(def);
10516
10517 return this;
10518}
10519
10520MachNode* vshift16B_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10521 Compile* C = Compile::current();
10522 // Add projection edges for additional defs or kills
10523 // TEMP dst
10524 MachTempNode *def;
10525 def = new MachTempNode(state->MachOperGenerator(VEC));
10526 add_req(def);
10527 // TEMP tmp
10528 def = new MachTempNode(state->MachOperGenerator(VEC));
10529 add_req(def);
10530 // TEMP scratch
10531 def = new MachTempNode(state->MachOperGenerator(RREGI));
10532 add_req(def);
10533
10534 return this;
10535}
10536
10537MachNode* vshift16B_avx_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10538 Compile* C = Compile::current();
10539 // Add projection edges for additional defs or kills
10540 // TEMP dst
10541 MachTempNode *def;
10542 def = new MachTempNode(state->MachOperGenerator(VEC));
10543 add_req(def);
10544 // TEMP tmp
10545 def = new MachTempNode(state->MachOperGenerator(VEC));
10546 add_req(def);
10547 // TEMP scratch
10548 def = new MachTempNode(state->MachOperGenerator(RREGI));
10549 add_req(def);
10550
10551 return this;
10552}
10553
10554MachNode* vshift16B_avx_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10555 Compile* C = Compile::current();
10556 // Add projection edges for additional defs or kills
10557 // TEMP dst
10558 MachTempNode *def;
10559 def = new MachTempNode(state->MachOperGenerator(VEC));
10560 add_req(def);
10561 // TEMP tmp
10562 def = new MachTempNode(state->MachOperGenerator(VEC));
10563 add_req(def);
10564 // TEMP scratch
10565 def = new MachTempNode(state->MachOperGenerator(RREGI));
10566 add_req(def);
10567
10568 return this;
10569}
10570
10571MachNode* vshift32B_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10572 Compile* C = Compile::current();
10573 // Add projection edges for additional defs or kills
10574 // TEMP dst
10575 MachTempNode *def;
10576 def = new MachTempNode(state->MachOperGenerator(VEC));
10577 add_req(def);
10578 // TEMP tmp
10579 def = new MachTempNode(state->MachOperGenerator(VEC));
10580 add_req(def);
10581 // TEMP scratch
10582 def = new MachTempNode(state->MachOperGenerator(RREGI));
10583 add_req(def);
10584
10585 return this;
10586}
10587
10588MachNode* vshift32B_avx_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10589 Compile* C = Compile::current();
10590 // Add projection edges for additional defs or kills
10591 // TEMP dst
10592 MachTempNode *def;
10593 def = new MachTempNode(state->MachOperGenerator(VEC));
10594 add_req(def);
10595 // TEMP tmp
10596 def = new MachTempNode(state->MachOperGenerator(VEC));
10597 add_req(def);
10598 // TEMP scratch
10599 def = new MachTempNode(state->MachOperGenerator(RREGI));
10600 add_req(def);
10601
10602 return this;
10603}
10604
10605MachNode* vshift32B_avx_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10606 Compile* C = Compile::current();
10607 // Add projection edges for additional defs or kills
10608 // TEMP dst
10609 MachTempNode *def;
10610 def = new MachTempNode(state->MachOperGenerator(VEC));
10611 add_req(def);
10612 // TEMP tmp
10613 def = new MachTempNode(state->MachOperGenerator(VEC));
10614 add_req(def);
10615 // TEMP scratch
10616 def = new MachTempNode(state->MachOperGenerator(RREGI));
10617 add_req(def);
10618
10619 return this;
10620}
10621
10622MachNode* vshift64B_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10623 Compile* C = Compile::current();
10624 // Add projection edges for additional defs or kills
10625 // TEMP dst
10626 MachTempNode *def;
10627 def = new MachTempNode(state->MachOperGenerator(VEC));
10628 add_req(def);
10629 // TEMP tmp1
10630 def = new MachTempNode(state->MachOperGenerator(VEC));
10631 add_req(def);
10632 // TEMP tmp2
10633 def = new MachTempNode(state->MachOperGenerator(VEC));
10634 add_req(def);
10635 // TEMP scratch
10636 def = new MachTempNode(state->MachOperGenerator(RREGI));
10637 add_req(def);
10638
10639 return this;
10640}
10641
10642MachNode* vshift64B_avx_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10643 Compile* C = Compile::current();
10644 // Add projection edges for additional defs or kills
10645 // TEMP dst
10646 MachTempNode *def;
10647 def = new MachTempNode(state->MachOperGenerator(VEC));
10648 add_req(def);
10649 // TEMP tmp1
10650 def = new MachTempNode(state->MachOperGenerator(VEC));
10651 add_req(def);
10652 // TEMP tmp2
10653 def = new MachTempNode(state->MachOperGenerator(VEC));
10654 add_req(def);
10655 // TEMP scratch
10656 def = new MachTempNode(state->MachOperGenerator(RREGI));
10657 add_req(def);
10658
10659 return this;
10660}
10661
10662MachNode* vshift64B_avx_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10663 Compile* C = Compile::current();
10664 // Add projection edges for additional defs or kills
10665 // TEMP dst
10666 MachTempNode *def;
10667 def = new MachTempNode(state->MachOperGenerator(VEC));
10668 add_req(def);
10669 // TEMP tmp1
10670 def = new MachTempNode(state->MachOperGenerator(VEC));
10671 add_req(def);
10672 // TEMP tmp2
10673 def = new MachTempNode(state->MachOperGenerator(VEC));
10674 add_req(def);
10675 // TEMP scratch
10676 def = new MachTempNode(state->MachOperGenerator(RREGI));
10677 add_req(def);
10678
10679 return this;
10680}
10681
10682MachNode* vshiftSNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10683 Compile* C = Compile::current();
10684 // Add projection edges for additional defs or kills
10685 // TEMP dst
10686 MachTempNode *def;
10687 def = new MachTempNode(state->MachOperGenerator(VEC));
10688 add_req(def);
10689
10690 return this;
10691}
10692
10693MachNode* vshiftS_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10694 Compile* C = Compile::current();
10695 // Add projection edges for additional defs or kills
10696 // TEMP dst
10697 MachTempNode *def;
10698 def = new MachTempNode(state->MachOperGenerator(VEC));
10699 add_req(def);
10700
10701 return this;
10702}
10703
10704MachNode* vshiftS_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10705 Compile* C = Compile::current();
10706 // Add projection edges for additional defs or kills
10707 // TEMP dst
10708 MachTempNode *def;
10709 def = new MachTempNode(state->MachOperGenerator(VEC));
10710 add_req(def);
10711
10712 return this;
10713}
10714
10715MachNode* vshiftINode::Expand(State* state, Node_List& proj_list, Node* mem) {
10716 Compile* C = Compile::current();
10717 // Add projection edges for additional defs or kills
10718 // TEMP dst
10719 MachTempNode *def;
10720 def = new MachTempNode(state->MachOperGenerator(VEC));
10721 add_req(def);
10722
10723 return this;
10724}
10725
10726MachNode* vshiftI_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10727 Compile* C = Compile::current();
10728 // Add projection edges for additional defs or kills
10729 // TEMP dst
10730 MachTempNode *def;
10731 def = new MachTempNode(state->MachOperGenerator(VEC));
10732 add_req(def);
10733
10734 return this;
10735}
10736
10737MachNode* vshiftI_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10738 Compile* C = Compile::current();
10739 // Add projection edges for additional defs or kills
10740 // TEMP dst
10741 MachTempNode *def;
10742 def = new MachTempNode(state->MachOperGenerator(VEC));
10743 add_req(def);
10744
10745 return this;
10746}
10747
10748MachNode* vshiftLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10749 Compile* C = Compile::current();
10750 // Add projection edges for additional defs or kills
10751 // TEMP dst
10752 MachTempNode *def;
10753 def = new MachTempNode(state->MachOperGenerator(VEC));
10754 add_req(def);
10755
10756 return this;
10757}
10758
10759MachNode* vshiftL_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10760 Compile* C = Compile::current();
10761 // Add projection edges for additional defs or kills
10762 // TEMP dst
10763 MachTempNode *def;
10764 def = new MachTempNode(state->MachOperGenerator(VEC));
10765 add_req(def);
10766
10767 return this;
10768}
10769
10770MachNode* vshiftL_arith_regNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10771 Compile* C = Compile::current();
10772 // Add projection edges for additional defs or kills
10773 // TEMP dst
10774 MachTempNode *def;
10775 def = new MachTempNode(state->MachOperGenerator(VEC));
10776 add_req(def);
10777 // TEMP tmp
10778 def = new MachTempNode(state->MachOperGenerator(VEC));
10779 add_req(def);
10780 // TEMP scratch
10781 def = new MachTempNode(state->MachOperGenerator(RREGI));
10782 add_req(def);
10783
10784 return this;
10785}
10786
10787MachNode* vshift8B_var_nobwNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10788 Compile* C = Compile::current();
10789 // Add projection edges for additional defs or kills
10790 // TEMP dst
10791 MachTempNode *def;
10792 def = new MachTempNode(state->MachOperGenerator(VEC));
10793 add_req(def);
10794 // TEMP vtmp
10795 def = new MachTempNode(state->MachOperGenerator(VEC));
10796 add_req(def);
10797 // TEMP scratch
10798 def = new MachTempNode(state->MachOperGenerator(RREGP));
10799 add_req(def);
10800
10801 return this;
10802}
10803
10804MachNode* vshift8B_var_nobw_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10805 Compile* C = Compile::current();
10806 // Add projection edges for additional defs or kills
10807 // TEMP dst
10808 MachTempNode *def;
10809 def = new MachTempNode(state->MachOperGenerator(VEC));
10810 add_req(def);
10811 // TEMP vtmp
10812 def = new MachTempNode(state->MachOperGenerator(VEC));
10813 add_req(def);
10814 // TEMP scratch
10815 def = new MachTempNode(state->MachOperGenerator(RREGP));
10816 add_req(def);
10817
10818 return this;
10819}
10820
10821MachNode* vshift8B_var_nobw_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10822 Compile* C = Compile::current();
10823 // Add projection edges for additional defs or kills
10824 // TEMP dst
10825 MachTempNode *def;
10826 def = new MachTempNode(state->MachOperGenerator(VEC));
10827 add_req(def);
10828 // TEMP vtmp
10829 def = new MachTempNode(state->MachOperGenerator(VEC));
10830 add_req(def);
10831 // TEMP scratch
10832 def = new MachTempNode(state->MachOperGenerator(RREGP));
10833 add_req(def);
10834
10835 return this;
10836}
10837
10838MachNode* vshift16B_var_nobwNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10839 Compile* C = Compile::current();
10840 // Add projection edges for additional defs or kills
10841 // TEMP dst
10842 MachTempNode *def;
10843 def = new MachTempNode(state->MachOperGenerator(VEC));
10844 add_req(def);
10845 // TEMP vtmp1
10846 def = new MachTempNode(state->MachOperGenerator(VEC));
10847 add_req(def);
10848 // TEMP vtmp2
10849 def = new MachTempNode(state->MachOperGenerator(VEC));
10850 add_req(def);
10851 // TEMP scratch
10852 def = new MachTempNode(state->MachOperGenerator(RREGP));
10853 add_req(def);
10854
10855 return this;
10856}
10857
10858MachNode* vshift16B_var_nobw_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10859 Compile* C = Compile::current();
10860 // Add projection edges for additional defs or kills
10861 // TEMP dst
10862 MachTempNode *def;
10863 def = new MachTempNode(state->MachOperGenerator(VEC));
10864 add_req(def);
10865 // TEMP vtmp1
10866 def = new MachTempNode(state->MachOperGenerator(VEC));
10867 add_req(def);
10868 // TEMP vtmp2
10869 def = new MachTempNode(state->MachOperGenerator(VEC));
10870 add_req(def);
10871 // TEMP scratch
10872 def = new MachTempNode(state->MachOperGenerator(RREGP));
10873 add_req(def);
10874
10875 return this;
10876}
10877
10878MachNode* vshift16B_var_nobw_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10879 Compile* C = Compile::current();
10880 // Add projection edges for additional defs or kills
10881 // TEMP dst
10882 MachTempNode *def;
10883 def = new MachTempNode(state->MachOperGenerator(VEC));
10884 add_req(def);
10885 // TEMP vtmp1
10886 def = new MachTempNode(state->MachOperGenerator(VEC));
10887 add_req(def);
10888 // TEMP vtmp2
10889 def = new MachTempNode(state->MachOperGenerator(VEC));
10890 add_req(def);
10891 // TEMP scratch
10892 def = new MachTempNode(state->MachOperGenerator(RREGP));
10893 add_req(def);
10894
10895 return this;
10896}
10897
10898MachNode* vshift32B_var_nobwNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10899 Compile* C = Compile::current();
10900 // Add projection edges for additional defs or kills
10901 // TEMP dst
10902 MachTempNode *def;
10903 def = new MachTempNode(state->MachOperGenerator(VEC));
10904 add_req(def);
10905 // TEMP vtmp1
10906 def = new MachTempNode(state->MachOperGenerator(VEC));
10907 add_req(def);
10908 // TEMP vtmp2
10909 def = new MachTempNode(state->MachOperGenerator(VEC));
10910 add_req(def);
10911 // TEMP vtmp3
10912 def = new MachTempNode(state->MachOperGenerator(VEC));
10913 add_req(def);
10914 // TEMP vtmp4
10915 def = new MachTempNode(state->MachOperGenerator(VEC));
10916 add_req(def);
10917 // TEMP scratch
10918 def = new MachTempNode(state->MachOperGenerator(RREGP));
10919 add_req(def);
10920
10921 return this;
10922}
10923
10924MachNode* vshift32B_var_nobw_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10925 Compile* C = Compile::current();
10926 // Add projection edges for additional defs or kills
10927 // TEMP dst
10928 MachTempNode *def;
10929 def = new MachTempNode(state->MachOperGenerator(VEC));
10930 add_req(def);
10931 // TEMP vtmp1
10932 def = new MachTempNode(state->MachOperGenerator(VEC));
10933 add_req(def);
10934 // TEMP vtmp2
10935 def = new MachTempNode(state->MachOperGenerator(VEC));
10936 add_req(def);
10937 // TEMP vtmp3
10938 def = new MachTempNode(state->MachOperGenerator(VEC));
10939 add_req(def);
10940 // TEMP vtmp4
10941 def = new MachTempNode(state->MachOperGenerator(VEC));
10942 add_req(def);
10943 // TEMP scratch
10944 def = new MachTempNode(state->MachOperGenerator(RREGP));
10945 add_req(def);
10946
10947 return this;
10948}
10949
10950MachNode* vshift32B_var_nobw_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10951 Compile* C = Compile::current();
10952 // Add projection edges for additional defs or kills
10953 // TEMP dst
10954 MachTempNode *def;
10955 def = new MachTempNode(state->MachOperGenerator(VEC));
10956 add_req(def);
10957 // TEMP vtmp1
10958 def = new MachTempNode(state->MachOperGenerator(VEC));
10959 add_req(def);
10960 // TEMP vtmp2
10961 def = new MachTempNode(state->MachOperGenerator(VEC));
10962 add_req(def);
10963 // TEMP vtmp3
10964 def = new MachTempNode(state->MachOperGenerator(VEC));
10965 add_req(def);
10966 // TEMP vtmp4
10967 def = new MachTempNode(state->MachOperGenerator(VEC));
10968 add_req(def);
10969 // TEMP scratch
10970 def = new MachTempNode(state->MachOperGenerator(RREGP));
10971 add_req(def);
10972
10973 return this;
10974}
10975
10976MachNode* vshiftB_var_evex_bwNode::Expand(State* state, Node_List& proj_list, Node* mem) {
10977 Compile* C = Compile::current();
10978 // Add projection edges for additional defs or kills
10979 // TEMP dst
10980 MachTempNode *def;
10981 def = new MachTempNode(state->MachOperGenerator(VEC));
10982 add_req(def);
10983 // TEMP vtmp
10984 def = new MachTempNode(state->MachOperGenerator(VEC));
10985 add_req(def);
10986 // TEMP scratch
10987 def = new MachTempNode(state->MachOperGenerator(RREGP));
10988 add_req(def);
10989
10990 return this;
10991}
10992
10993MachNode* vshiftB_var_evex_bw_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
10994 Compile* C = Compile::current();
10995 // Add projection edges for additional defs or kills
10996 // TEMP dst
10997 MachTempNode *def;
10998 def = new MachTempNode(state->MachOperGenerator(VEC));
10999 add_req(def);
11000 // TEMP vtmp
11001 def = new MachTempNode(state->MachOperGenerator(VEC));
11002 add_req(def);
11003 // TEMP scratch
11004 def = new MachTempNode(state->MachOperGenerator(RREGP));
11005 add_req(def);
11006
11007 return this;
11008}
11009
11010MachNode* vshiftB_var_evex_bw_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11011 Compile* C = Compile::current();
11012 // Add projection edges for additional defs or kills
11013 // TEMP dst
11014 MachTempNode *def;
11015 def = new MachTempNode(state->MachOperGenerator(VEC));
11016 add_req(def);
11017 // TEMP vtmp
11018 def = new MachTempNode(state->MachOperGenerator(VEC));
11019 add_req(def);
11020 // TEMP scratch
11021 def = new MachTempNode(state->MachOperGenerator(RREGP));
11022 add_req(def);
11023
11024 return this;
11025}
11026
11027MachNode* vshift64B_var_evex_bwNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11028 Compile* C = Compile::current();
11029 // Add projection edges for additional defs or kills
11030 // TEMP dst
11031 MachTempNode *def;
11032 def = new MachTempNode(state->MachOperGenerator(VEC));
11033 add_req(def);
11034 // TEMP vtmp1
11035 def = new MachTempNode(state->MachOperGenerator(VEC));
11036 add_req(def);
11037 // TEMP vtmp2
11038 def = new MachTempNode(state->MachOperGenerator(VEC));
11039 add_req(def);
11040 // TEMP scratch
11041 def = new MachTempNode(state->MachOperGenerator(RREGP));
11042 add_req(def);
11043
11044 return this;
11045}
11046
11047MachNode* vshift64B_var_evex_bw_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11048 Compile* C = Compile::current();
11049 // Add projection edges for additional defs or kills
11050 // TEMP dst
11051 MachTempNode *def;
11052 def = new MachTempNode(state->MachOperGenerator(VEC));
11053 add_req(def);
11054 // TEMP vtmp1
11055 def = new MachTempNode(state->MachOperGenerator(VEC));
11056 add_req(def);
11057 // TEMP vtmp2
11058 def = new MachTempNode(state->MachOperGenerator(VEC));
11059 add_req(def);
11060 // TEMP scratch
11061 def = new MachTempNode(state->MachOperGenerator(RREGP));
11062 add_req(def);
11063
11064 return this;
11065}
11066
11067MachNode* vshift64B_var_evex_bw_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11068 Compile* C = Compile::current();
11069 // Add projection edges for additional defs or kills
11070 // TEMP dst
11071 MachTempNode *def;
11072 def = new MachTempNode(state->MachOperGenerator(VEC));
11073 add_req(def);
11074 // TEMP vtmp1
11075 def = new MachTempNode(state->MachOperGenerator(VEC));
11076 add_req(def);
11077 // TEMP vtmp2
11078 def = new MachTempNode(state->MachOperGenerator(VEC));
11079 add_req(def);
11080 // TEMP scratch
11081 def = new MachTempNode(state->MachOperGenerator(RREGP));
11082 add_req(def);
11083
11084 return this;
11085}
11086
11087MachNode* vshift8S_var_nobwNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11088 Compile* C = Compile::current();
11089 // Add projection edges for additional defs or kills
11090 // TEMP dst
11091 MachTempNode *def;
11092 def = new MachTempNode(state->MachOperGenerator(VEC));
11093 add_req(def);
11094 // TEMP vtmp
11095 def = new MachTempNode(state->MachOperGenerator(VEC));
11096 add_req(def);
11097 // TEMP scratch
11098 def = new MachTempNode(state->MachOperGenerator(RREGP));
11099 add_req(def);
11100
11101 return this;
11102}
11103
11104MachNode* vshift8S_var_nobw_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11105 Compile* C = Compile::current();
11106 // Add projection edges for additional defs or kills
11107 // TEMP dst
11108 MachTempNode *def;
11109 def = new MachTempNode(state->MachOperGenerator(VEC));
11110 add_req(def);
11111 // TEMP vtmp
11112 def = new MachTempNode(state->MachOperGenerator(VEC));
11113 add_req(def);
11114 // TEMP scratch
11115 def = new MachTempNode(state->MachOperGenerator(RREGP));
11116 add_req(def);
11117
11118 return this;
11119}
11120
11121MachNode* vshift8S_var_nobw_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11122 Compile* C = Compile::current();
11123 // Add projection edges for additional defs or kills
11124 // TEMP dst
11125 MachTempNode *def;
11126 def = new MachTempNode(state->MachOperGenerator(VEC));
11127 add_req(def);
11128 // TEMP vtmp
11129 def = new MachTempNode(state->MachOperGenerator(VEC));
11130 add_req(def);
11131 // TEMP scratch
11132 def = new MachTempNode(state->MachOperGenerator(RREGP));
11133 add_req(def);
11134
11135 return this;
11136}
11137
11138MachNode* vshift16S_var_nobwNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11139 Compile* C = Compile::current();
11140 // Add projection edges for additional defs or kills
11141 // TEMP dst
11142 MachTempNode *def;
11143 def = new MachTempNode(state->MachOperGenerator(VEC));
11144 add_req(def);
11145 // TEMP vtmp1
11146 def = new MachTempNode(state->MachOperGenerator(VEC));
11147 add_req(def);
11148 // TEMP vtmp2
11149 def = new MachTempNode(state->MachOperGenerator(VEC));
11150 add_req(def);
11151 // TEMP scratch
11152 def = new MachTempNode(state->MachOperGenerator(RREGP));
11153 add_req(def);
11154
11155 return this;
11156}
11157
11158MachNode* vshift16S_var_nobw_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11159 Compile* C = Compile::current();
11160 // Add projection edges for additional defs or kills
11161 // TEMP dst
11162 MachTempNode *def;
11163 def = new MachTempNode(state->MachOperGenerator(VEC));
11164 add_req(def);
11165 // TEMP vtmp1
11166 def = new MachTempNode(state->MachOperGenerator(VEC));
11167 add_req(def);
11168 // TEMP vtmp2
11169 def = new MachTempNode(state->MachOperGenerator(VEC));
11170 add_req(def);
11171 // TEMP scratch
11172 def = new MachTempNode(state->MachOperGenerator(RREGP));
11173 add_req(def);
11174
11175 return this;
11176}
11177
11178MachNode* vshift16S_var_nobw_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11179 Compile* C = Compile::current();
11180 // Add projection edges for additional defs or kills
11181 // TEMP dst
11182 MachTempNode *def;
11183 def = new MachTempNode(state->MachOperGenerator(VEC));
11184 add_req(def);
11185 // TEMP vtmp1
11186 def = new MachTempNode(state->MachOperGenerator(VEC));
11187 add_req(def);
11188 // TEMP vtmp2
11189 def = new MachTempNode(state->MachOperGenerator(VEC));
11190 add_req(def);
11191 // TEMP scratch
11192 def = new MachTempNode(state->MachOperGenerator(RREGP));
11193 add_req(def);
11194
11195 return this;
11196}
11197
11198MachNode* vshiftL_arith_varNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11199 Compile* C = Compile::current();
11200 // Add projection edges for additional defs or kills
11201 // TEMP dst
11202 MachTempNode *def;
11203 def = new MachTempNode(state->MachOperGenerator(VEC));
11204 add_req(def);
11205 // TEMP vtmp
11206 def = new MachTempNode(state->MachOperGenerator(VEC));
11207 add_req(def);
11208
11209 return this;
11210}
11211
11212MachNode* castStoXNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11213 Compile* C = Compile::current();
11214 // Add projection edges for additional defs or kills
11215 // TEMP scratch
11216 MachTempNode *def;
11217 def = new MachTempNode(state->MachOperGenerator(RREGP));
11218 add_req(def);
11219
11220 return this;
11221}
11222
11223MachNode* vcastStoXNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11224 Compile* C = Compile::current();
11225 // Add projection edges for additional defs or kills
11226 // TEMP dst
11227 MachTempNode *def;
11228 def = new MachTempNode(state->MachOperGenerator(VEC));
11229 add_req(def);
11230 // TEMP vtmp
11231 def = new MachTempNode(state->MachOperGenerator(VEC));
11232 add_req(def);
11233 // TEMP scratch
11234 def = new MachTempNode(state->MachOperGenerator(RREGP));
11235 add_req(def);
11236
11237 return this;
11238}
11239
11240MachNode* castItoXNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11241 Compile* C = Compile::current();
11242 // Add projection edges for additional defs or kills
11243 // TEMP scratch
11244 MachTempNode *def;
11245 def = new MachTempNode(state->MachOperGenerator(RREGP));
11246 add_req(def);
11247
11248 return this;
11249}
11250
11251MachNode* vcastItoXNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11252 Compile* C = Compile::current();
11253 // Add projection edges for additional defs or kills
11254 // TEMP dst
11255 MachTempNode *def;
11256 def = new MachTempNode(state->MachOperGenerator(VEC));
11257 add_req(def);
11258 // TEMP vtmp
11259 def = new MachTempNode(state->MachOperGenerator(VEC));
11260 add_req(def);
11261 // TEMP scratch
11262 def = new MachTempNode(state->MachOperGenerator(RREGP));
11263 add_req(def);
11264
11265 return this;
11266}
11267
11268MachNode* vcastLtoBSNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11269 Compile* C = Compile::current();
11270 // Add projection edges for additional defs or kills
11271 // TEMP scratch
11272 MachTempNode *def;
11273 def = new MachTempNode(state->MachOperGenerator(RREGP));
11274 add_req(def);
11275
11276 return this;
11277}
11278
11279MachNode* vcastFtoI_reg_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11280 Compile* C = Compile::current();
11281 // Add projection edges for additional defs or kills
11282 // TEMP dst
11283 MachTempNode *def;
11284 def = new MachTempNode(state->MachOperGenerator(VEC));
11285 add_req(def);
11286 // TEMP xtmp1
11287 def = new MachTempNode(state->MachOperGenerator(VEC));
11288 add_req(def);
11289 // TEMP xtmp2
11290 def = new MachTempNode(state->MachOperGenerator(VEC));
11291 add_req(def);
11292 // TEMP xtmp3
11293 def = new MachTempNode(state->MachOperGenerator(VEC));
11294 add_req(def);
11295 // TEMP xtmp4
11296 def = new MachTempNode(state->MachOperGenerator(VEC));
11297 add_req(def);
11298 // TEMP scratch
11299 def = new MachTempNode(state->MachOperGenerator(RREGP));
11300 add_req(def);
11301 // DEF/KILL cr
11302 MachProjNode *kill;
11303 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11304 proj_list.push(kill);
11305
11306 return this;
11307}
11308
11309MachNode* vcastFtoI_reg_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11310 Compile* C = Compile::current();
11311 // Add projection edges for additional defs or kills
11312 // TEMP dst
11313 MachTempNode *def;
11314 def = new MachTempNode(state->MachOperGenerator(VEC));
11315 add_req(def);
11316 // TEMP xtmp1
11317 def = new MachTempNode(state->MachOperGenerator(VEC));
11318 add_req(def);
11319 // TEMP xtmp2
11320 def = new MachTempNode(state->MachOperGenerator(VEC));
11321 add_req(def);
11322 // TEMP ktmp1
11323 def = new MachTempNode(state->MachOperGenerator(KREG));
11324 add_req(def);
11325 // TEMP ktmp2
11326 def = new MachTempNode(state->MachOperGenerator(KREG));
11327 add_req(def);
11328 // TEMP scratch
11329 def = new MachTempNode(state->MachOperGenerator(RREGP));
11330 add_req(def);
11331 // DEF/KILL cr
11332 MachProjNode *kill;
11333 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11334 proj_list.push(kill);
11335
11336 return this;
11337}
11338
11339MachNode* vcastDtoL_reg_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11340 Compile* C = Compile::current();
11341 // Add projection edges for additional defs or kills
11342 // TEMP dst
11343 MachTempNode *def;
11344 def = new MachTempNode(state->MachOperGenerator(VEC));
11345 add_req(def);
11346 // TEMP xtmp1
11347 def = new MachTempNode(state->MachOperGenerator(VEC));
11348 add_req(def);
11349 // TEMP xtmp2
11350 def = new MachTempNode(state->MachOperGenerator(VEC));
11351 add_req(def);
11352 // TEMP ktmp1
11353 def = new MachTempNode(state->MachOperGenerator(KREG));
11354 add_req(def);
11355 // TEMP ktmp2
11356 def = new MachTempNode(state->MachOperGenerator(KREG));
11357 add_req(def);
11358 // TEMP scratch
11359 def = new MachTempNode(state->MachOperGenerator(RREGP));
11360 add_req(def);
11361 // DEF/KILL cr
11362 MachProjNode *kill;
11363 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11364 proj_list.push(kill);
11365
11366 return this;
11367}
11368
11369MachNode* evcmpFD64Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11370 Compile* C = Compile::current();
11371 // Add projection edges for additional defs or kills
11372 // TEMP scratch
11373 MachTempNode *def;
11374 def = new MachTempNode(state->MachOperGenerator(RREGP));
11375 add_req(def);
11376 // TEMP ktmp
11377 def = new MachTempNode(state->MachOperGenerator(KREG));
11378 add_req(def);
11379
11380 return this;
11381}
11382
11383MachNode* vcmpNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11384 Compile* C = Compile::current();
11385 // Add projection edges for additional defs or kills
11386 // TEMP scratch
11387 MachTempNode *def;
11388 def = new MachTempNode(state->MachOperGenerator(RREGP));
11389 add_req(def);
11390
11391 return this;
11392}
11393
11394MachNode* vcmpuNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11395 Compile* C = Compile::current();
11396 // Add projection edges for additional defs or kills
11397 // TEMP vtmp1
11398 MachTempNode *def;
11399 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11400 add_req(def);
11401 // TEMP vtmp2
11402 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11403 add_req(def);
11404 // TEMP scratch
11405 def = new MachTempNode(state->MachOperGenerator(RREGP));
11406 add_req(def);
11407
11408 return this;
11409}
11410
11411MachNode* vcmpu32Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11412 Compile* C = Compile::current();
11413 // Add projection edges for additional defs or kills
11414 // TEMP dst
11415 MachTempNode *def;
11416 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11417 add_req(def);
11418 // TEMP vtmp1
11419 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11420 add_req(def);
11421 // TEMP vtmp2
11422 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11423 add_req(def);
11424 // TEMP vtmp3
11425 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11426 add_req(def);
11427 // TEMP scratch
11428 def = new MachTempNode(state->MachOperGenerator(RREGP));
11429 add_req(def);
11430
11431 return this;
11432}
11433
11434MachNode* vcmpu64Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11435 Compile* C = Compile::current();
11436 // Add projection edges for additional defs or kills
11437 // TEMP scratch
11438 MachTempNode *def;
11439 def = new MachTempNode(state->MachOperGenerator(RREGP));
11440 add_req(def);
11441 // TEMP ktmp
11442 def = new MachTempNode(state->MachOperGenerator(KREG));
11443 add_req(def);
11444
11445 return this;
11446}
11447
11448MachNode* vextractINode::Expand(State* state, Node_List& proj_list, Node* mem) {
11449 Compile* C = Compile::current();
11450 // Add projection edges for additional defs or kills
11451 // TEMP vtmp
11452 MachTempNode *def;
11453 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11454 add_req(def);
11455
11456 return this;
11457}
11458
11459MachNode* vextractI_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11460 Compile* C = Compile::current();
11461 // Add projection edges for additional defs or kills
11462 // TEMP vtmp
11463 MachTempNode *def;
11464 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11465 add_req(def);
11466
11467 return this;
11468}
11469
11470MachNode* vextractI_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11471 Compile* C = Compile::current();
11472 // Add projection edges for additional defs or kills
11473 // TEMP vtmp
11474 MachTempNode *def;
11475 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11476 add_req(def);
11477
11478 return this;
11479}
11480
11481MachNode* vextractLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11482 Compile* C = Compile::current();
11483 // Add projection edges for additional defs or kills
11484 // TEMP vtmp
11485 MachTempNode *def;
11486 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11487 add_req(def);
11488
11489 return this;
11490}
11491
11492MachNode* extractFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11493 Compile* C = Compile::current();
11494 // Add projection edges for additional defs or kills
11495 // TEMP dst
11496 MachTempNode *def;
11497 def = new MachTempNode(state->MachOperGenerator(LEGREGF));
11498 add_req(def);
11499 // TEMP tmp
11500 def = new MachTempNode(state->MachOperGenerator(RREGI));
11501 add_req(def);
11502 // TEMP vtmp
11503 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11504 add_req(def);
11505
11506 return this;
11507}
11508
11509MachNode* vextractFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11510 Compile* C = Compile::current();
11511 // Add projection edges for additional defs or kills
11512 // TEMP tmp
11513 MachTempNode *def;
11514 def = new MachTempNode(state->MachOperGenerator(RREGI));
11515 add_req(def);
11516 // TEMP vtmp
11517 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11518 add_req(def);
11519
11520 return this;
11521}
11522
11523MachNode* vextractDNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11524 Compile* C = Compile::current();
11525 // Add projection edges for additional defs or kills
11526 // TEMP vtmp
11527 MachTempNode *def;
11528 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11529 add_req(def);
11530
11531 return this;
11532}
11533
11534MachNode* blendvpNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11535 Compile* C = Compile::current();
11536 // Add projection edges for additional defs or kills
11537 // TEMP tmp
11538 MachTempNode *def;
11539 def = new MachTempNode(state->MachOperGenerator(RXMM0));
11540 add_req(def);
11541
11542 return this;
11543}
11544
11545MachNode* evblendvp64Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11546 Compile* C = Compile::current();
11547 // Add projection edges for additional defs or kills
11548 // TEMP scratch
11549 MachTempNode *def;
11550 def = new MachTempNode(state->MachOperGenerator(RREGP));
11551 add_req(def);
11552 // TEMP ktmp
11553 def = new MachTempNode(state->MachOperGenerator(KREG));
11554 add_req(def);
11555
11556 return this;
11557}
11558
11559MachNode* evblendvp64_maskedNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11560 Compile* C = Compile::current();
11561 // Add projection edges for additional defs or kills
11562 // TEMP scratch
11563 MachTempNode *def;
11564 def = new MachTempNode(state->MachOperGenerator(RREGP));
11565 add_req(def);
11566
11567 return this;
11568}
11569
11570MachNode* vabsnegFNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11571 Compile* C = Compile::current();
11572 // Add projection edges for additional defs or kills
11573 // TEMP scratch
11574 MachTempNode *def;
11575 def = new MachTempNode(state->MachOperGenerator(RREGI));
11576 add_req(def);
11577
11578 return this;
11579}
11580
11581MachNode* vabsnegF_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11582 Compile* C = Compile::current();
11583 // Add projection edges for additional defs or kills
11584 // TEMP scratch
11585 MachTempNode *def;
11586 def = new MachTempNode(state->MachOperGenerator(RREGI));
11587 add_req(def);
11588
11589 return this;
11590}
11591
11592MachNode* vabsneg4FNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11593 Compile* C = Compile::current();
11594 // Add projection edges for additional defs or kills
11595 // TEMP scratch
11596 MachTempNode *def;
11597 def = new MachTempNode(state->MachOperGenerator(RREGI));
11598 add_req(def);
11599
11600 return this;
11601}
11602
11603MachNode* vabsneg4F_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11604 Compile* C = Compile::current();
11605 // Add projection edges for additional defs or kills
11606 // TEMP scratch
11607 MachTempNode *def;
11608 def = new MachTempNode(state->MachOperGenerator(RREGI));
11609 add_req(def);
11610
11611 return this;
11612}
11613
11614MachNode* vabsnegDNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11615 Compile* C = Compile::current();
11616 // Add projection edges for additional defs or kills
11617 // TEMP scratch
11618 MachTempNode *def;
11619 def = new MachTempNode(state->MachOperGenerator(RREGI));
11620 add_req(def);
11621
11622 return this;
11623}
11624
11625MachNode* vabsnegD_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11626 Compile* C = Compile::current();
11627 // Add projection edges for additional defs or kills
11628 // TEMP scratch
11629 MachTempNode *def;
11630 def = new MachTempNode(state->MachOperGenerator(RREGI));
11631 add_req(def);
11632
11633 return this;
11634}
11635
11636MachNode* vptest_alltrue_lt16Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11637 Compile* C = Compile::current();
11638 // Add projection edges for additional defs or kills
11639 // TEMP vtmp1
11640 MachTempNode *def;
11641 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11642 add_req(def);
11643 // TEMP vtmp2
11644 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11645 add_req(def);
11646 // DEF/KILL cr
11647 MachProjNode *kill;
11648 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11649 proj_list.push(kill);
11650
11651 return this;
11652}
11653
11654MachNode* vptest_alltrue_ge16Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11655 Compile* C = Compile::current();
11656 // Add projection edges for additional defs or kills
11657 // DEF/KILL cr
11658 MachProjNode *kill;
11659 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11660 proj_list.push(kill);
11661
11662 return this;
11663}
11664
11665MachNode* vptest_alltrue_lt8_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11666 Compile* C = Compile::current();
11667 // Add projection edges for additional defs or kills
11668 // TEMP kscratch
11669 MachTempNode *def;
11670 def = new MachTempNode(state->MachOperGenerator(KREG));
11671 add_req(def);
11672 // DEF/KILL cr
11673 MachProjNode *kill;
11674 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11675 proj_list.push(kill);
11676
11677 return this;
11678}
11679
11680MachNode* vptest_alltrue_ge8_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11681 Compile* C = Compile::current();
11682 // Add projection edges for additional defs or kills
11683 // DEF/KILL cr
11684 MachProjNode *kill;
11685 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11686 proj_list.push(kill);
11687
11688 return this;
11689}
11690
11691MachNode* vptest_anytrue_lt16Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11692 Compile* C = Compile::current();
11693 // Add projection edges for additional defs or kills
11694 // TEMP vtmp
11695 MachTempNode *def;
11696 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11697 add_req(def);
11698 // DEF/KILL cr
11699 MachProjNode *kill;
11700 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11701 proj_list.push(kill);
11702
11703 return this;
11704}
11705
11706MachNode* vptest_anytrue_ge16Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11707 Compile* C = Compile::current();
11708 // Add projection edges for additional defs or kills
11709 // DEF/KILL cr
11710 MachProjNode *kill;
11711 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11712 proj_list.push(kill);
11713
11714 return this;
11715}
11716
11717MachNode* vptest_anytrue_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11718 Compile* C = Compile::current();
11719 // Add projection edges for additional defs or kills
11720 // DEF/KILL cr
11721 MachProjNode *kill;
11722 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
11723 proj_list.push(kill);
11724
11725 return this;
11726}
11727
11728MachNode* cmpvptest_anytrue_lt16Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11729 Compile* C = Compile::current();
11730 // Add projection edges for additional defs or kills
11731 // TEMP vtmp
11732 MachTempNode *def;
11733 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11734 add_req(def);
11735
11736 return this;
11737}
11738
11739MachNode* loadMaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11740 Compile* C = Compile::current();
11741 // Add projection edges for additional defs or kills
11742 // TEMP dst
11743 MachTempNode *def;
11744 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11745 add_req(def);
11746
11747 return this;
11748}
11749
11750MachNode* loadMask64Node::Expand(State* state, Node_List& proj_list, Node* mem) {
11751 Compile* C = Compile::current();
11752 // Add projection edges for additional defs or kills
11753 // TEMP xtmp
11754 MachTempNode *def;
11755 def = new MachTempNode(state->MachOperGenerator(VEC));
11756 add_req(def);
11757 // TEMP tmp
11758 def = new MachTempNode(state->MachOperGenerator(RREGI));
11759 add_req(def);
11760
11761 return this;
11762}
11763
11764MachNode* loadMask_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11765 Compile* C = Compile::current();
11766 // Add projection edges for additional defs or kills
11767 // TEMP xtmp
11768 MachTempNode *def;
11769 def = new MachTempNode(state->MachOperGenerator(VEC));
11770 add_req(def);
11771
11772 return this;
11773}
11774
11775MachNode* vstoreMask2BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11776 Compile* C = Compile::current();
11777 // Add projection edges for additional defs or kills
11778 // TEMP dst
11779 MachTempNode *def;
11780 def = new MachTempNode(state->MachOperGenerator(VEC));
11781 add_req(def);
11782 // TEMP xtmp
11783 def = new MachTempNode(state->MachOperGenerator(VEC));
11784 add_req(def);
11785
11786 return this;
11787}
11788
11789MachNode* vstoreMask4BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11790 Compile* C = Compile::current();
11791 // Add projection edges for additional defs or kills
11792 // TEMP dst
11793 MachTempNode *def;
11794 def = new MachTempNode(state->MachOperGenerator(VEC));
11795 add_req(def);
11796 // TEMP xtmp
11797 def = new MachTempNode(state->MachOperGenerator(VEC));
11798 add_req(def);
11799
11800 return this;
11801}
11802
11803MachNode* storeMask8BNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11804 Compile* C = Compile::current();
11805 // Add projection edges for additional defs or kills
11806 // TEMP dst
11807 MachTempNode *def;
11808 def = new MachTempNode(state->MachOperGenerator(VEC));
11809 add_req(def);
11810 // TEMP xtmp
11811 def = new MachTempNode(state->MachOperGenerator(VEC));
11812 add_req(def);
11813
11814 return this;
11815}
11816
11817MachNode* storeMask8B_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11818 Compile* C = Compile::current();
11819 // Add projection edges for additional defs or kills
11820 // TEMP dst
11821 MachTempNode *def;
11822 def = new MachTempNode(state->MachOperGenerator(VEC));
11823 add_req(def);
11824 // TEMP vtmp
11825 def = new MachTempNode(state->MachOperGenerator(VEC));
11826 add_req(def);
11827
11828 return this;
11829}
11830
11831MachNode* vstoreMask_evex_vectmaskNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11832 Compile* C = Compile::current();
11833 // Add projection edges for additional defs or kills
11834 // TEMP dst
11835 MachTempNode *def;
11836 def = new MachTempNode(state->MachOperGenerator(VEC));
11837 add_req(def);
11838 // TEMP tmp
11839 def = new MachTempNode(state->MachOperGenerator(RREGI));
11840 add_req(def);
11841
11842 return this;
11843}
11844
11845MachNode* vstoreMask_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11846 Compile* C = Compile::current();
11847 // Add projection edges for additional defs or kills
11848 // TEMP dst
11849 MachTempNode *def;
11850 def = new MachTempNode(state->MachOperGenerator(VEC));
11851 add_req(def);
11852
11853 return this;
11854}
11855
11856MachNode* loadIotaIndicesNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11857 Compile* C = Compile::current();
11858 // Add projection edges for additional defs or kills
11859 // TEMP scratch
11860 MachTempNode *def;
11861 def = new MachTempNode(state->MachOperGenerator(RREGP));
11862 add_req(def);
11863
11864 return this;
11865}
11866
11867MachNode* rearrangeB_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11868 Compile* C = Compile::current();
11869 // Add projection edges for additional defs or kills
11870 // TEMP dst
11871 MachTempNode *def;
11872 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11873 add_req(def);
11874 // TEMP vtmp1
11875 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11876 add_req(def);
11877 // TEMP vtmp2
11878 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11879 add_req(def);
11880 // TEMP scratch
11881 def = new MachTempNode(state->MachOperGenerator(RREGP));
11882 add_req(def);
11883
11884 return this;
11885}
11886
11887MachNode* loadShuffleSNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11888 Compile* C = Compile::current();
11889 // Add projection edges for additional defs or kills
11890 // TEMP dst
11891 MachTempNode *def;
11892 def = new MachTempNode(state->MachOperGenerator(VEC));
11893 add_req(def);
11894 // TEMP vtmp
11895 def = new MachTempNode(state->MachOperGenerator(VEC));
11896 add_req(def);
11897 // TEMP scratch
11898 def = new MachTempNode(state->MachOperGenerator(RREGP));
11899 add_req(def);
11900
11901 return this;
11902}
11903
11904MachNode* rearrangeS_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11905 Compile* C = Compile::current();
11906 // Add projection edges for additional defs or kills
11907 // TEMP dst
11908 MachTempNode *def;
11909 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11910 add_req(def);
11911 // TEMP vtmp1
11912 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11913 add_req(def);
11914 // TEMP vtmp2
11915 def = new MachTempNode(state->MachOperGenerator(LEGVEC));
11916 add_req(def);
11917 // TEMP scratch
11918 def = new MachTempNode(state->MachOperGenerator(RREGP));
11919 add_req(def);
11920
11921 return this;
11922}
11923
11924MachNode* loadShuffleINode::Expand(State* state, Node_List& proj_list, Node* mem) {
11925 Compile* C = Compile::current();
11926 // Add projection edges for additional defs or kills
11927 // TEMP dst
11928 MachTempNode *def;
11929 def = new MachTempNode(state->MachOperGenerator(VEC));
11930 add_req(def);
11931 // TEMP vtmp
11932 def = new MachTempNode(state->MachOperGenerator(VEC));
11933 add_req(def);
11934 // TEMP scratch
11935 def = new MachTempNode(state->MachOperGenerator(RREGP));
11936 add_req(def);
11937
11938 return this;
11939}
11940
11941MachNode* loadShuffleLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11942 Compile* C = Compile::current();
11943 // Add projection edges for additional defs or kills
11944 // TEMP dst
11945 MachTempNode *def;
11946 def = new MachTempNode(state->MachOperGenerator(VEC));
11947 add_req(def);
11948 // TEMP vtmp
11949 def = new MachTempNode(state->MachOperGenerator(VEC));
11950 add_req(def);
11951 // TEMP scratch
11952 def = new MachTempNode(state->MachOperGenerator(RREGP));
11953 add_req(def);
11954
11955 return this;
11956}
11957
11958MachNode* vpternlogNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11959 Compile* C = Compile::current();
11960 // Add projection edges for additional defs or kills
11961 // TEMP dst
11962 MachTempNode *def;
11963 def = new MachTempNode(state->MachOperGenerator(VEC));
11964 add_req(def);
11965 // Remove duplicated operands and inputs which use the same name.
11966 if (num_opnds() == 6) {
11967 unsigned num0 = 0;
11968 unsigned num1 = opnd_array(1)->num_edges(); // dst
11969 unsigned num2 = opnd_array(2)->num_edges(); // src2
11970 unsigned num3 = opnd_array(3)->num_edges(); // src3
11971 unsigned num4 = opnd_array(4)->num_edges(); // func
11972 unsigned num5 = opnd_array(5)->num_edges(); // dst
11973 unsigned idx0 = oper_input_base();
11974 unsigned idx1 = idx0 + num0;
11975 unsigned idx2 = idx1 + num1;
11976 unsigned idx3 = idx2 + num2;
11977 unsigned idx4 = idx3 + num3;
11978 unsigned idx5 = idx4 + num4;
11979 unsigned idx6 = idx5 + num5;
11980 for (int i = idx6 - 1; i >= (int)idx5; i--) {
11981 del_req(i);
11982 }
11983 _num_opnds = 5;
11984 } else {
11985 assert(_num_opnds == 5, "There should be either 5 or 6 operands.")do { if (!(_num_opnds == 5)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 11984, "assert(" "_num_opnds == 5" ") failed"
, "There should be either 5 or 6 operands."); ::breakpoint();
} } while (0)
;
11986 }
11987
11988 return this;
11989}
11990
11991MachNode* vpternlog_memNode::Expand(State* state, Node_List& proj_list, Node* mem) {
11992 Compile* C = Compile::current();
11993 // Add projection edges for additional defs or kills
11994 // TEMP dst
11995 MachTempNode *def;
11996 def = new MachTempNode(state->MachOperGenerator(VEC));
11997 add_req(def);
11998 // Remove duplicated operands and inputs which use the same name.
11999 if (num_opnds() == 6) {
12000 unsigned num0 = 0;
12001 unsigned num1 = opnd_array(1)->num_edges(); // dst
12002 unsigned num2 = opnd_array(2)->num_edges(); // src2
12003 unsigned num3 = opnd_array(3)->num_edges(); // src3
12004 unsigned num4 = opnd_array(4)->num_edges(); // func
12005 unsigned num5 = opnd_array(5)->num_edges(); // dst
12006 unsigned idx0 = oper_input_base();
12007 unsigned idx1 = idx0 + num0;
12008 unsigned idx2 = idx1 + num1;
12009 unsigned idx3 = idx2 + num2;
12010 unsigned idx4 = idx3 + num3;
12011 unsigned idx5 = idx4 + num4;
12012 unsigned idx6 = idx5 + num5;
12013 for (int i = idx6 - 1; i >= (int)idx5; i--) {
12014 del_req(i);
12015 }
12016 _num_opnds = 5;
12017 } else {
12018 assert(_num_opnds == 5, "There should be either 5 or 6 operands.")do { if (!(_num_opnds == 5)) { (*g_assert_poison) = 'X';; report_vm_error
("ad_x86_expand.cpp", 12017, "assert(" "_num_opnds == 5" ") failed"
, "There should be either 5 or 6 operands."); ::breakpoint();
} } while (0)
;
12019 }
12020
12021 return this;
12022}
12023
12024MachNode* vmask_cmp_nodeNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12025 Compile* C = Compile::current();
12026 // Add projection edges for additional defs or kills
12027 // TEMP dst
12028 MachTempNode *def;
12029 def = new MachTempNode(state->MachOperGenerator(RREGI));
12030 add_req(def);
12031 // TEMP ktmp1
12032 def = new MachTempNode(state->MachOperGenerator(KREG));
12033 add_req(def);
12034 // TEMP ktmp2
12035 def = new MachTempNode(state->MachOperGenerator(KREG));
12036 add_req(def);
12037 // DEF/KILL cr
12038 MachProjNode *kill;
12039 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12040 proj_list.push(kill);
12041
12042 return this;
12043}
12044
12045MachNode* vmask_genNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12046 Compile* C = Compile::current();
12047 // Add projection edges for additional defs or kills
12048 // TEMP temp
12049 MachTempNode *def;
12050 def = new MachTempNode(state->MachOperGenerator(RREGL));
12051 add_req(def);
12052
12053 return this;
12054}
12055
12056MachNode* vmask_gen_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12057 Compile* C = Compile::current();
12058 // Add projection edges for additional defs or kills
12059 // TEMP temp
12060 MachTempNode *def;
12061 def = new MachTempNode(state->MachOperGenerator(RREGL));
12062 add_req(def);
12063
12064 return this;
12065}
12066
12067MachNode* vmask_tolong_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12068 Compile* C = Compile::current();
12069 // Add projection edges for additional defs or kills
12070 // TEMP dst
12071 MachTempNode *def;
12072 def = new MachTempNode(state->MachOperGenerator(RREGL));
12073 add_req(def);
12074 // DEF/KILL cr
12075 MachProjNode *kill;
12076 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12077 proj_list.push(kill);
12078
12079 return this;
12080}
12081
12082MachNode* vmask_tolong_boolNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12083 Compile* C = Compile::current();
12084 // Add projection edges for additional defs or kills
12085 // TEMP dst
12086 MachTempNode *def;
12087 def = new MachTempNode(state->MachOperGenerator(RREGL));
12088 add_req(def);
12089 // TEMP xtmp
12090 def = new MachTempNode(state->MachOperGenerator(VEC));
12091 add_req(def);
12092 // DEF/KILL cr
12093 MachProjNode *kill;
12094 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12095 proj_list.push(kill);
12096
12097 return this;
12098}
12099
12100MachNode* vmask_tolong_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12101 Compile* C = Compile::current();
12102 // Add projection edges for additional defs or kills
12103 // TEMP dst
12104 MachTempNode *def;
12105 def = new MachTempNode(state->MachOperGenerator(RREGL));
12106 add_req(def);
12107 // TEMP xtmp
12108 def = new MachTempNode(state->MachOperGenerator(VEC));
12109 add_req(def);
12110 // DEF/KILL cr
12111 MachProjNode *kill;
12112 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12113 proj_list.push(kill);
12114
12115 return this;
12116}
12117
12118MachNode* vmask_truecount_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12119 Compile* C = Compile::current();
12120 // Add projection edges for additional defs or kills
12121 // TEMP dst
12122 MachTempNode *def;
12123 def = new MachTempNode(state->MachOperGenerator(RREGI));
12124 add_req(def);
12125 // TEMP tmp
12126 def = new MachTempNode(state->MachOperGenerator(RREGL));
12127 add_req(def);
12128 // DEF/KILL cr
12129 MachProjNode *kill;
12130 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12131 proj_list.push(kill);
12132
12133 return this;
12134}
12135
12136MachNode* vmask_truecount_boolNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12137 Compile* C = Compile::current();
12138 // Add projection edges for additional defs or kills
12139 // TEMP dst
12140 MachTempNode *def;
12141 def = new MachTempNode(state->MachOperGenerator(RREGI));
12142 add_req(def);
12143 // TEMP tmp
12144 def = new MachTempNode(state->MachOperGenerator(RREGL));
12145 add_req(def);
12146 // TEMP xtmp
12147 def = new MachTempNode(state->MachOperGenerator(VEC));
12148 add_req(def);
12149 // DEF/KILL cr
12150 MachProjNode *kill;
12151 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12152 proj_list.push(kill);
12153
12154 return this;
12155}
12156
12157MachNode* vmask_truecount_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12158 Compile* C = Compile::current();
12159 // Add projection edges for additional defs or kills
12160 // TEMP dst
12161 MachTempNode *def;
12162 def = new MachTempNode(state->MachOperGenerator(RREGI));
12163 add_req(def);
12164 // TEMP tmp
12165 def = new MachTempNode(state->MachOperGenerator(RREGL));
12166 add_req(def);
12167 // TEMP xtmp
12168 def = new MachTempNode(state->MachOperGenerator(VEC));
12169 add_req(def);
12170 // DEF/KILL cr
12171 MachProjNode *kill;
12172 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12173 proj_list.push(kill);
12174
12175 return this;
12176}
12177
12178MachNode* vmask_first_or_last_true_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12179 Compile* C = Compile::current();
12180 // Add projection edges for additional defs or kills
12181 // TEMP dst
12182 MachTempNode *def;
12183 def = new MachTempNode(state->MachOperGenerator(RREGI));
12184 add_req(def);
12185 // TEMP tmp
12186 def = new MachTempNode(state->MachOperGenerator(RREGL));
12187 add_req(def);
12188 // DEF/KILL cr
12189 MachProjNode *kill;
12190 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12191 proj_list.push(kill);
12192
12193 return this;
12194}
12195
12196MachNode* vmask_first_or_last_true_evex_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
12197 Compile* C = Compile::current();
12198 // Add projection edges for additional defs or kills
12199 // TEMP dst
12200 MachTempNode *def;
12201 def = new MachTempNode(state->MachOperGenerator(RREGI));
12202 add_req(def);
12203 // TEMP tmp
12204 def = new MachTempNode(state->MachOperGenerator(RREGL));
12205 add_req(def);
12206 // DEF/KILL cr
12207 MachProjNode *kill;
12208 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12209 proj_list.push(kill);
12210
12211 return this;
12212}
12213
12214MachNode* vmask_first_or_last_true_boolNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12215 Compile* C = Compile::current();
12216 // Add projection edges for additional defs or kills
12217 // TEMP dst
12218 MachTempNode *def;
12219 def = new MachTempNode(state->MachOperGenerator(RREGI));
12220 add_req(def);
12221 // TEMP tmp
12222 def = new MachTempNode(state->MachOperGenerator(RREGL));
12223 add_req(def);
12224 // TEMP xtmp
12225 def = new MachTempNode(state->MachOperGenerator(VEC));
12226 add_req(def);
12227 // DEF/KILL cr
12228 MachProjNode *kill;
12229 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12230 proj_list.push(kill);
12231
12232 return this;
12233}
12234
12235MachNode* vmask_first_or_last_true_bool_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
12236 Compile* C = Compile::current();
12237 // Add projection edges for additional defs or kills
12238 // TEMP dst
12239 MachTempNode *def;
12240 def = new MachTempNode(state->MachOperGenerator(RREGI));
12241 add_req(def);
12242 // TEMP tmp
12243 def = new MachTempNode(state->MachOperGenerator(RREGL));
12244 add_req(def);
12245 // TEMP xtmp
12246 def = new MachTempNode(state->MachOperGenerator(VEC));
12247 add_req(def);
12248 // DEF/KILL cr
12249 MachProjNode *kill;
12250 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12251 proj_list.push(kill);
12252
12253 return this;
12254}
12255
12256MachNode* vmask_first_or_last_true_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12257 Compile* C = Compile::current();
12258 // Add projection edges for additional defs or kills
12259 // TEMP dst
12260 MachTempNode *def;
12261 def = new MachTempNode(state->MachOperGenerator(RREGI));
12262 add_req(def);
12263 // TEMP tmp
12264 def = new MachTempNode(state->MachOperGenerator(RREGL));
12265 add_req(def);
12266 // TEMP xtmp
12267 def = new MachTempNode(state->MachOperGenerator(VEC));
12268 add_req(def);
12269 // DEF/KILL cr
12270 MachProjNode *kill;
12271 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12272 proj_list.push(kill);
12273
12274 return this;
12275}
12276
12277MachNode* vmask_first_or_last_true_avx_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
12278 Compile* C = Compile::current();
12279 // Add projection edges for additional defs or kills
12280 // TEMP dst
12281 MachTempNode *def;
12282 def = new MachTempNode(state->MachOperGenerator(RREGI));
12283 add_req(def);
12284 // TEMP tmp
12285 def = new MachTempNode(state->MachOperGenerator(RREGL));
12286 add_req(def);
12287 // TEMP xtmp
12288 def = new MachTempNode(state->MachOperGenerator(VEC));
12289 add_req(def);
12290 // DEF/KILL cr
12291 MachProjNode *kill;
12292 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12293 proj_list.push(kill);
12294
12295 return this;
12296}
12297
12298MachNode* evcmp_maskedNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12299 Compile* C = Compile::current();
12300 // Add projection edges for additional defs or kills
12301 // TEMP scratch
12302 MachTempNode *def;
12303 def = new MachTempNode(state->MachOperGenerator(RREGP));
12304 add_req(def);
12305
12306 return this;
12307}
12308
12309MachNode* mask_all_evexI_immNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12310 Compile* C = Compile::current();
12311 // Add projection edges for additional defs or kills
12312 // TEMP dst
12313 MachTempNode *def;
12314 def = new MachTempNode(state->MachOperGenerator(KREG));
12315 add_req(def);
12316 // TEMP tmp
12317 def = new MachTempNode(state->MachOperGenerator(RREGL));
12318 add_req(def);
12319
12320 return this;
12321}
12322
12323MachNode* mask_all_evexINode::Expand(State* state, Node_List& proj_list, Node* mem) {
12324 Compile* C = Compile::current();
12325 // Add projection edges for additional defs or kills
12326 // TEMP dst
12327 MachTempNode *def;
12328 def = new MachTempNode(state->MachOperGenerator(KREG));
12329 add_req(def);
12330 // TEMP tmp
12331 def = new MachTempNode(state->MachOperGenerator(RREGL));
12332 add_req(def);
12333
12334 return this;
12335}
12336
12337MachNode* mask_all_evexLNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12338 Compile* C = Compile::current();
12339 // Add projection edges for additional defs or kills
12340 // TEMP dst
12341 MachTempNode *def;
12342 def = new MachTempNode(state->MachOperGenerator(KREG));
12343 add_req(def);
12344
12345 return this;
12346}
12347
12348MachNode* mask_not_immLT8Node::Expand(State* state, Node_List& proj_list, Node* mem) {
12349 Compile* C = Compile::current();
12350 // Add projection edges for additional defs or kills
12351 // TEMP dst
12352 MachTempNode *def;
12353 def = new MachTempNode(state->MachOperGenerator(KREG));
12354 add_req(def);
12355 // TEMP rtmp
12356 def = new MachTempNode(state->MachOperGenerator(RREGI));
12357 add_req(def);
12358 // TEMP ktmp
12359 def = new MachTempNode(state->MachOperGenerator(KREG));
12360 add_req(def);
12361
12362 return this;
12363}
12364
12365MachNode* long_to_maskLE8_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12366 Compile* C = Compile::current();
12367 // Add projection edges for additional defs or kills
12368 // TEMP dst
12369 MachTempNode *def;
12370 def = new MachTempNode(state->MachOperGenerator(VEC));
12371 add_req(def);
12372 // TEMP rtmp1
12373 def = new MachTempNode(state->MachOperGenerator(RREGL));
12374 add_req(def);
12375 // TEMP rtmp2
12376 def = new MachTempNode(state->MachOperGenerator(RREGL));
12377 add_req(def);
12378 // TEMP xtmp
12379 def = new MachTempNode(state->MachOperGenerator(VEC));
12380 add_req(def);
12381
12382 return this;
12383}
12384
12385MachNode* long_to_maskGT8_avxNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12386 Compile* C = Compile::current();
12387 // Add projection edges for additional defs or kills
12388 // TEMP dst
12389 MachTempNode *def;
12390 def = new MachTempNode(state->MachOperGenerator(VEC));
12391 add_req(def);
12392 // TEMP rtmp1
12393 def = new MachTempNode(state->MachOperGenerator(RREGL));
12394 add_req(def);
12395 // TEMP rtmp2
12396 def = new MachTempNode(state->MachOperGenerator(RREGL));
12397 add_req(def);
12398 // TEMP xtmp1
12399 def = new MachTempNode(state->MachOperGenerator(VEC));
12400 add_req(def);
12401 // DEF/KILL cr
12402 MachProjNode *kill;
12403 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12404 proj_list.push(kill);
12405
12406 return this;
12407}
12408
12409MachNode* mask_opers_evexNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12410 Compile* C = Compile::current();
12411 // Add projection edges for additional defs or kills
12412 // TEMP kscratch
12413 MachTempNode *def;
12414 def = new MachTempNode(state->MachOperGenerator(KREG));
12415 add_req(def);
12416
12417 return this;
12418}
12419
12420MachNode* mask_opers_evex_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
12421 Compile* C = Compile::current();
12422 // Add projection edges for additional defs or kills
12423 // TEMP kscratch
12424 MachTempNode *def;
12425 def = new MachTempNode(state->MachOperGenerator(KREG));
12426 add_req(def);
12427
12428 return this;
12429}
12430
12431MachNode* mask_opers_evex_1Node::Expand(State* state, Node_List& proj_list, Node* mem) {
12432 Compile* C = Compile::current();
12433 // Add projection edges for additional defs or kills
12434 // TEMP kscratch
12435 MachTempNode *def;
12436 def = new MachTempNode(state->MachOperGenerator(KREG));
12437 add_req(def);
12438
12439 return this;
12440}
12441
12442MachNode* compareAndSwapP_shenandoahNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12443 Compile* C = Compile::current();
12444 // Add projection edges for additional defs or kills
12445 // DEF/KILL oldval
12446 MachProjNode *kill;
12447 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
12448 proj_list.push(kill);
12449 // TEMP tmp1
12450 MachTempNode *def;
12451 def = new MachTempNode(state->MachOperGenerator(RREGP));
12452 add_req(def);
12453 // TEMP tmp2
12454 def = new MachTempNode(state->MachOperGenerator(RREGP));
12455 add_req(def);
12456 // DEF/KILL cr
12457 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
12458 proj_list.push(kill);
12459
12460 return this;
12461}
12462
12463MachNode* compareAndSwapP_shenandoah_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
12464 Compile* C = Compile::current();
12465 // Add projection edges for additional defs or kills
12466 // DEF/KILL oldval
12467 MachProjNode *kill;
12468 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
12469 proj_list.push(kill);
12470 // TEMP tmp1
12471 MachTempNode *def;
12472 def = new MachTempNode(state->MachOperGenerator(RREGP));
12473 add_req(def);
12474 // TEMP tmp2
12475 def = new MachTempNode(state->MachOperGenerator(RREGP));
12476 add_req(def);
12477 // DEF/KILL cr
12478 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
12479 proj_list.push(kill);
12480
12481 return this;
12482}
12483
12484MachNode* compareAndSwapN_shenandoahNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12485 Compile* C = Compile::current();
12486 // Add projection edges for additional defs or kills
12487 // DEF/KILL oldval
12488 MachProjNode *kill;
12489 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegN );
12490 proj_list.push(kill);
12491 // TEMP tmp1
12492 MachTempNode *def;
12493 def = new MachTempNode(state->MachOperGenerator(RREGP));
12494 add_req(def);
12495 // TEMP tmp2
12496 def = new MachTempNode(state->MachOperGenerator(RREGP));
12497 add_req(def);
12498 // DEF/KILL cr
12499 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
12500 proj_list.push(kill);
12501
12502 return this;
12503}
12504
12505MachNode* compareAndSwapN_shenandoah_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
12506 Compile* C = Compile::current();
12507 // Add projection edges for additional defs or kills
12508 // DEF/KILL oldval
12509 MachProjNode *kill;
12510 kill = new MachProjNode( this, 1, (INT_RAX_REG_mask()), Op_RegN );
12511 proj_list.push(kill);
12512 // TEMP tmp1
12513 MachTempNode *def;
12514 def = new MachTempNode(state->MachOperGenerator(RREGP));
12515 add_req(def);
12516 // TEMP tmp2
12517 def = new MachTempNode(state->MachOperGenerator(RREGP));
12518 add_req(def);
12519 // DEF/KILL cr
12520 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
12521 proj_list.push(kill);
12522
12523 return this;
12524}
12525
12526MachNode* compareAndExchangeN_shenandoahNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12527 Compile* C = Compile::current();
12528 // Add projection edges for additional defs or kills
12529 // TEMP tmp1
12530 MachTempNode *def;
12531 def = new MachTempNode(state->MachOperGenerator(RREGP));
12532 add_req(def);
12533 // TEMP tmp2
12534 def = new MachTempNode(state->MachOperGenerator(RREGP));
12535 add_req(def);
12536 // DEF/KILL cr
12537 MachProjNode *kill;
12538 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12539 proj_list.push(kill);
12540
12541 return this;
12542}
12543
12544MachNode* compareAndExchangeP_shenandoahNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12545 Compile* C = Compile::current();
12546 // Add projection edges for additional defs or kills
12547 // TEMP tmp1
12548 MachTempNode *def;
12549 def = new MachTempNode(state->MachOperGenerator(RREGP));
12550 add_req(def);
12551 // TEMP tmp2
12552 def = new MachTempNode(state->MachOperGenerator(RREGP));
12553 add_req(def);
12554 // DEF/KILL cr
12555 MachProjNode *kill;
12556 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12557 proj_list.push(kill);
12558
12559 return this;
12560}
12561
12562MachNode* zLoadPNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12563 Compile* C = Compile::current();
12564 // Add projection edges for additional defs or kills
12565 // TEMP dst
12566 MachTempNode *def;
12567 def = new MachTempNode(state->MachOperGenerator(RREGP));
12568 add_req(def);
12569 // DEF/KILL cr
12570 MachProjNode *kill;
12571 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12572 proj_list.push(kill);
12573
12574 return this;
12575}
12576
12577MachNode* zCompareAndExchangePNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12578 Compile* C = Compile::current();
12579 // Add projection edges for additional defs or kills
12580 // TEMP tmp
12581 MachTempNode *def;
12582 def = new MachTempNode(state->MachOperGenerator(RREGP));
12583 add_req(def);
12584 // DEF/KILL cr
12585 MachProjNode *kill;
12586 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12587 proj_list.push(kill);
12588
12589 return this;
12590}
12591
12592MachNode* zCompareAndSwapPNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12593 Compile* C = Compile::current();
12594 // Add projection edges for additional defs or kills
12595 // DEF/KILL oldval
12596 MachProjNode *kill;
12597 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
12598 proj_list.push(kill);
12599 // TEMP tmp
12600 MachTempNode *def;
12601 def = new MachTempNode(state->MachOperGenerator(RREGP));
12602 add_req(def);
12603 // DEF/KILL cr
12604 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
12605 proj_list.push(kill);
12606
12607 return this;
12608}
12609
12610MachNode* zCompareAndSwapP_0Node::Expand(State* state, Node_List& proj_list, Node* mem) {
12611 Compile* C = Compile::current();
12612 // Add projection edges for additional defs or kills
12613 // DEF/KILL oldval
12614 MachProjNode *kill;
12615 kill = new MachProjNode( this, 1, (PTR_RAX_REG_mask()), Op_RegP );
12616 proj_list.push(kill);
12617 // TEMP tmp
12618 MachTempNode *def;
12619 def = new MachTempNode(state->MachOperGenerator(RREGP));
12620 add_req(def);
12621 // DEF/KILL cr
12622 kill = new MachProjNode( this, 2, (INT_FLAGS_mask()), Op_RegFlags );
12623 proj_list.push(kill);
12624
12625 return this;
12626}
12627
12628MachNode* zXChgPNode::Expand(State* state, Node_List& proj_list, Node* mem) {
12629 Compile* C = Compile::current();
12630 // Add projection edges for additional defs or kills
12631 // DEF/KILL cr
12632 MachProjNode *kill;
12633 kill = new MachProjNode( this, 1, (INT_FLAGS_mask()), Op_RegFlags );
12634 proj_list.push(kill);
12635
12636 return this;
12637}
12638
12639// Check consistency of C++ compilation with ADLC options:
12640// Check adlc -DLINUX=1
12641#ifndef LINUX1
12642# error "LINUX must be defined"
12643#endif // LINUX
12644// Check adlc -D_GNU_SOURCE=1
12645#ifndef _GNU_SOURCE1
12646# error "_GNU_SOURCE must be defined"
12647#endif // _GNU_SOURCE
12648// Check adlc -DAMD64=1
12649#ifndef AMD641
12650# error "AMD64 must be defined"
12651#endif // AMD64
12652// Check adlc -D_LP64=1
12653#ifndef _LP641
12654# error "_LP64 must be defined"
12655#endif // _LP64