src/share/vm/opto/mathexactnode.hpp

Wed, 10 Aug 2016 14:59:21 +0200

author
simonis
date
Wed, 10 Aug 2016 14:59:21 +0200
changeset 8608
0d78aecb0948
parent 6375
085b304a1cc5
child 6876
710a3c8b516e
permissions
-rw-r--r--

8152172: PPC64: Support AES intrinsics
Summary: Add support for AES intrinsics on PPC64.
Reviewed-by: kvn, mdoerr, simonis, zmajo
Contributed-by: Hiroshi H Horii <horii@jp.ibm.com>

rbackman@5791 1 /*
rbackman@5791 2 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
rbackman@5791 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
rbackman@5791 4 *
rbackman@5791 5 * This code is free software; you can redistribute it and/or modify it
rbackman@5791 6 * under the terms of the GNU General Public License version 2 only, as
rbackman@5791 7 * published by the Free Software Foundation.
rbackman@5791 8 *
rbackman@5791 9 * This code is distributed in the hope that it will be useful, but WITHOUT
rbackman@5791 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
rbackman@5791 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
rbackman@5791 12 * version 2 for more details (a copy is included in the LICENSE file that
rbackman@5791 13 * accompanied this code).
rbackman@5791 14 *
rbackman@5791 15 * You should have received a copy of the GNU General Public License version
rbackman@5791 16 * 2 along with this work; if not, write to the Free Software Foundation,
rbackman@5791 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
rbackman@5791 18 *
rbackman@5791 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
rbackman@5791 20 * or visit www.oracle.com if you need additional information or have any
rbackman@5791 21 * questions.
rbackman@5791 22 *
rbackman@5791 23 */
rbackman@5791 24
rbackman@5791 25 #ifndef SHARE_VM_OPTO_MATHEXACTNODE_HPP
rbackman@5791 26 #define SHARE_VM_OPTO_MATHEXACTNODE_HPP
rbackman@5791 27
rbackman@5791 28 #include "opto/multnode.hpp"
rbackman@5791 29 #include "opto/node.hpp"
rbackman@6375 30 #include "opto/addnode.hpp"
rbackman@5927 31 #include "opto/subnode.hpp"
rbackman@5791 32 #include "opto/type.hpp"
rbackman@5791 33
rbackman@5791 34 class PhaseGVN;
rbackman@5791 35 class PhaseTransform;
rbackman@5791 36
rbackman@6375 37 class OverflowNode : public CmpNode {
rbackman@5791 38 public:
rbackman@6375 39 OverflowNode(Node* in1, Node* in2) : CmpNode(in1, in2) {}
rbackman@5791 40
rbackman@6375 41 virtual uint ideal_reg() const { return Op_RegFlags; }
rbackman@6375 42 virtual const Type* sub(const Type* t1, const Type* t2) const;
rbackman@5791 43 };
rbackman@5791 44
rbackman@6375 45 class OverflowINode : public OverflowNode {
rbackman@6375 46 public:
rbackman@6375 47 typedef TypeInt TypeClass;
rbackman@6375 48
rbackman@6375 49 OverflowINode(Node* in1, Node* in2) : OverflowNode(in1, in2) {}
rbackman@6375 50 virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
rbackman@6375 51 virtual const Type* Value(PhaseTransform* phase) const;
rbackman@6375 52
rbackman@6375 53 virtual bool will_overflow(jint v1, jint v2) const = 0;
rbackman@6375 54 virtual bool can_overflow(const Type* t1, const Type* t2) const = 0;
rbackman@5997 55 };
rbackman@5997 56
rbackman@6375 57
rbackman@6375 58 class OverflowLNode : public OverflowNode {
rbackman@5791 59 public:
rbackman@6375 60 typedef TypeLong TypeClass;
rbackman@6375 61
rbackman@6375 62 OverflowLNode(Node* in1, Node* in2) : OverflowNode(in1, in2) {}
rbackman@6375 63 virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
rbackman@6375 64 virtual const Type* Value(PhaseTransform* phase) const;
rbackman@6375 65
rbackman@6375 66 virtual bool will_overflow(jlong v1, jlong v2) const = 0;
rbackman@6375 67 virtual bool can_overflow(const Type* t1, const Type* t2) const = 0;
rbackman@5997 68 };
rbackman@5997 69
rbackman@6375 70 class OverflowAddINode : public OverflowINode {
rbackman@5997 71 public:
rbackman@6375 72 typedef AddINode MathOp;
rbackman@6375 73
rbackman@6375 74 OverflowAddINode(Node* in1, Node* in2) : OverflowINode(in1, in2) {}
rbackman@5997 75 virtual int Opcode() const;
rbackman@6375 76
rbackman@6375 77 virtual bool will_overflow(jint v1, jint v2) const;
rbackman@6375 78 virtual bool can_overflow(const Type* t1, const Type* t2) const;
rbackman@5791 79 };
rbackman@5791 80
rbackman@6375 81 class OverflowSubINode : public OverflowINode {
rbackman@5997 82 public:
rbackman@6375 83 typedef SubINode MathOp;
rbackman@6375 84
rbackman@6375 85 OverflowSubINode(Node* in1, Node* in2) : OverflowINode(in1, in2) {}
rbackman@5997 86 virtual int Opcode() const;
rbackman@6375 87
rbackman@6375 88 virtual bool will_overflow(jint v1, jint v2) const;
rbackman@6375 89 virtual bool can_overflow(const Type* t1, const Type* t2) const;
rbackman@5997 90 };
rbackman@5997 91
rbackman@6375 92 class OverflowMulINode : public OverflowINode {
rbackman@5997 93 public:
rbackman@6375 94 typedef MulINode MathOp;
rbackman@6375 95
rbackman@6375 96 OverflowMulINode(Node* in1, Node* in2) : OverflowINode(in1, in2) {}
rbackman@5997 97 virtual int Opcode() const;
rbackman@6375 98
rbackman@6375 99 virtual bool will_overflow(jint v1, jint v2) const;
rbackman@6375 100 virtual bool can_overflow(const Type* t1, const Type* t2) const;
rbackman@5997 101 };
rbackman@5997 102
rbackman@6375 103 class OverflowAddLNode : public OverflowLNode {
rbackman@5997 104 public:
rbackman@6375 105 typedef AddLNode MathOp;
rbackman@6375 106
rbackman@6375 107 OverflowAddLNode(Node* in1, Node* in2) : OverflowLNode(in1, in2) {}
rbackman@5997 108 virtual int Opcode() const;
rbackman@6375 109
rbackman@6375 110 virtual bool will_overflow(jlong v1, jlong v2) const;
rbackman@6375 111 virtual bool can_overflow(const Type* t1, const Type* t2) const;
rbackman@5997 112 };
rbackman@5997 113
rbackman@6375 114 class OverflowSubLNode : public OverflowLNode {
rbackman@5997 115 public:
rbackman@6375 116 typedef SubLNode MathOp;
rbackman@6375 117
rbackman@6375 118 OverflowSubLNode(Node* in1, Node* in2) : OverflowLNode(in1, in2) {}
rbackman@5997 119 virtual int Opcode() const;
rbackman@6375 120
rbackman@6375 121 virtual bool will_overflow(jlong v1, jlong v2) const;
rbackman@6375 122 virtual bool can_overflow(const Type* t1, const Type* t2) const;
rbackman@5997 123 };
rbackman@5997 124
rbackman@6375 125 class OverflowMulLNode : public OverflowLNode {
rbackman@5997 126 public:
rbackman@6375 127 typedef MulLNode MathOp;
rbackman@6375 128
rbackman@6375 129 OverflowMulLNode(Node* in1, Node* in2) : OverflowLNode(in1, in2) {}
rbackman@5997 130 virtual int Opcode() const;
rbackman@6375 131
rbackman@6375 132 virtual bool will_overflow(jlong v1, jlong v2) const;
rbackman@6375 133 virtual bool can_overflow(const Type* t1, const Type* t2) const;
rbackman@5997 134 };
rbackman@5997 135
rbackman@5791 136 #endif
rbackman@5791 137

mercurial