これらは, C2 JIT Compiler 用の高レベル中間語を表すクラス. より具体的に言うと, 主に「乗算」を表すクラス.
なお単なる数値の乗算だけでなく, 環(ring)上の乗算とみなせるものは全てここで扱う (例: AND 演算など).
(ついでに左シフトも混ざっているがまぁこれは掛け算と見なせるか. だけど右シフトはどちらかというと割り算のような気もするが... 論理右シフトも unsigned な割り算だが...)
Node クラスのサブクラスの1つ. 「乗算」を表す全ての Node クラスの基底クラス.
(なお単なる数値の乗算だけでなく, 環(ring)上の乗算とみなせるものは全てこのクラスのサブクラスで扱う) (例: AND 演算など).
なお, このクラス自体は abstract class であり, 実際に使われるのはサブクラス.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Classic MULTIPLY functionality. This covers all the usual 'multiply'
// behaviors for an algebraic ring. Multiply-integer, multiply-float,
// multiply-double, and binary-and are all inherited from this class. The
// various identity values are supplied by virtual functions.
class MulNode : public Node {
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
MulNode( Node *in1, Node *in2 ): Node(0,in1,in2) {
init_class_id(Class_Mul);
}
なお, このクラスは以下のファイル中に書かれている Ideal クラスの一覧には出ていない.
See: here for details
MulNode クラスの具象サブクラスの1つ. このクラスは int 値同士の乗算用.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Multiply 2 integers
class MulINode : public MulNode {
なお MulXNode という型も使われるが,
#ifdef _LP64
でない場合は, これは MulINode の別名.
((cite: hotspot/src/share/vm/opto/type.hpp))
#define MulXNode MulINode
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
MulINode( Node *in1, Node *in2 ) : MulNode(in1,in2) {}
See: here for details
MulNode クラスの具象サブクラスの1つ. このクラスは long 値同士の乗算用.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Multiply 2 longs
class MulLNode : public MulNode {
なお MulXNode という型も使われるが,
#ifdef _LP64
の場合は, これは MulLNode の別名.
((cite: hotspot/src/share/vm/opto/type.hpp))
#define MulXNode MulLNode
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
MulLNode( Node *in1, Node *in2 ) : MulNode(in1,in2) {}
See: here for details
MulNode クラスの具象サブクラスの1つ. このクラスは float 値同士の乗算用.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Multiply 2 floats
class MulFNode : public MulNode {
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
MulFNode( Node *in1, Node *in2 ) : MulNode(in1,in2) {}
See: here for details
MulNode クラスの具象サブクラスの1つ. このクラスは double 値同士の乗算用.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Multiply 2 doubles
class MulDNode : public MulNode {
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
MulDNode( Node *in1, Node *in2 ) : MulNode(in1,in2) {}
See: here for details
long 値に対する除算(DivLNode, ModLNode)を最適化するための Node クラス.
MulNode クラスの具象サブクラスの1つ. このクラスは 64bit 同士の乗算結果の上位64bitを表す.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Upper 64 bits of a 64 bit by 64 bit multiply
class MulHiLNode : public Node {
long_by_long_mulhi() 内で(のみ)生成されている. そして, この関数は現在は以下のパスで(のみ)呼び出されている.
DivLNode::Ideal() -> transform_long_divide() -> long_by_long_mulhi() ModLNode::Ideal() -> transform_long_divide() -> long_by_long_mulhi()
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
MulHiLNode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
See: here for details
MulINode クラスのサブクラス. このクラスは int 値同士の論理積(ビットAND)演算用.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Logically AND 2 integers. Included with the MUL nodes because it inherits
// all the behavior of multiplication on a ring.
class AndINode : public MulINode {
なお AndXNode という型も使われるが,
#ifdef _LP64
でない場合は, これは AndINode の別名.
((cite: hotspot/src/share/vm/opto/type.hpp))
#define AndXNode AndINode
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
AndINode( Node *in1, Node *in2 ) : MulINode(in1,in2) {}
See: here for details
MulLNode クラスのサブクラス. このクラスは long 値同士の論理積(ビットAND)演算用.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Logically AND 2 longs. Included with the MUL nodes because it inherits
// all the behavior of multiplication on a ring.
class AndLNode : public MulLNode {
なお AndXNode という型も使われるが,
#ifdef _LP64
の場合は, これは AndLNode の別名.
((cite: hotspot/src/share/vm/opto/type.hpp))
#define AndXNode AndLNode
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
AndLNode( Node *in1, Node *in2 ) : MulLNode(in1,in2) {}
See: here for details
Node クラスの具象サブクラスの1つ. このクラスは int 値に対する左シフト演算用.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Logical shift left
class LShiftINode : public Node {
なお LShiftXNode という型も使われるが, #ifdef _LP64
でない場合は, これは LShiftINode の別名.
((cite: hotspot/src/share/vm/opto/type.hpp))
#define LShiftXNode LShiftINode
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
LShiftINode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
See: here for details
Node クラスの具象サブクラスの1つ. このクラスは long 値に対する左シフト演算用.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Logical shift left
class LShiftLNode : public Node {
なお LShiftXNode という型も使われるが, #ifdef _LP64
の場合は, これは LShiftLNode の別名.
((cite: hotspot/src/share/vm/opto/type.hpp))
#define LShiftXNode LShiftLNode
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
LShiftLNode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
See: here for details
Node クラスの具象サブクラスの1つ. このクラスは int 値に対する算術右シフト演算用.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Signed shift right
class RShiftINode : public Node {
なお RShiftXNode という型も使われるが, #ifdef _LP64
でない場合は, これは RShiftINode の別名.
((cite: hotspot/src/share/vm/opto/type.hpp))
#define RShiftXNode RShiftINode
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
RShiftINode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
See: here for details
Node クラスの具象サブクラスの1つ. このクラスは long 値に対する算術右シフト演算用.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Signed shift right
class RShiftLNode : public Node {
なお RShiftXNode という型も使われるが, #ifdef _LP64
の場合は, これは RShiftLNode の別名.
((cite: hotspot/src/share/vm/opto/type.hpp))
#define RShiftXNode RShiftLNode
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
RShiftLNode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
See: here for details
Node クラスの具象サブクラスの1つ. このクラスは int 値に対する論理右シフト演算用.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Logical shift right
class URShiftINode : public Node {
なお URShiftXNode という型も使われるが, #ifdef _LP64
でない場合は, これは URShiftINode の別名.
((cite: hotspot/src/share/vm/opto/type.hpp))
#define URShiftXNode URShiftINode
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
URShiftINode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
See: here for details
Node クラスの具象サブクラスの1つ. このクラスは long 値に対する論理右シフト演算用.
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
// Logical shift right
class URShiftLNode : public Node {
なお URShiftXNode という型も使われるが, #ifdef _LP64
の場合は, これは URShiftLNode の別名.
((cite: hotspot/src/share/vm/opto/type.hpp))
#define URShiftXNode URShiftLNode
2項演算を表すノードなので, (control input も含めて) 3つの入力ノードを持つ. ただし control input は常に空 (0 が設定される).
((cite: hotspot/src/share/vm/opto/mulnode.hpp))
URShiftLNode( Node *in1, Node *in2 ) : Node(0,in1,in2) {}
See: here for details
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.