equal
deleted
inserted
replaced
1491 if ( instr->ideal_only() ) continue; |
1491 if ( instr->ideal_only() ) continue; |
1492 |
1492 |
1493 // Build class definition for this instruction |
1493 // Build class definition for this instruction |
1494 fprintf(fp,"\n"); |
1494 fprintf(fp,"\n"); |
1495 fprintf(fp,"class %sNode : public %s { \n", |
1495 fprintf(fp,"class %sNode : public %s { \n", |
1496 instr->_ident, instr->mach_base_class() ); |
1496 instr->_ident, instr->mach_base_class(_globalNames) ); |
1497 fprintf(fp,"private:\n"); |
1497 fprintf(fp,"private:\n"); |
1498 fprintf(fp," MachOper *_opnd_array[%d];\n", instr->num_opnds() ); |
1498 fprintf(fp," MachOper *_opnd_array[%d];\n", instr->num_opnds() ); |
1499 if ( instr->is_ideal_jump() ) { |
1499 if ( instr->is_ideal_jump() ) { |
1500 fprintf(fp, " GrowableArray<Label*> _index2label;\n"); |
1500 fprintf(fp, " GrowableArray<Label*> _index2label;\n"); |
1501 } |
1501 } |
1564 |
1564 |
1565 // Return the top-level ideal opcode. |
1565 // Return the top-level ideal opcode. |
1566 // Use MachNode::ideal_Opcode() for nodes based on MachNode class |
1566 // Use MachNode::ideal_Opcode() for nodes based on MachNode class |
1567 // if the ideal_Opcode == Op_Node. |
1567 // if the ideal_Opcode == Op_Node. |
1568 if ( strcmp("Node", instr->ideal_Opcode(_globalNames)) != 0 || |
1568 if ( strcmp("Node", instr->ideal_Opcode(_globalNames)) != 0 || |
1569 strcmp("MachNode", instr->mach_base_class()) != 0 ) { |
1569 strcmp("MachNode", instr->mach_base_class(_globalNames)) != 0 ) { |
1570 fprintf(fp," virtual int ideal_Opcode() const { return Op_%s; }\n", |
1570 fprintf(fp," virtual int ideal_Opcode() const { return Op_%s; }\n", |
1571 instr->ideal_Opcode(_globalNames) ); |
1571 instr->ideal_Opcode(_globalNames) ); |
1572 } |
1572 } |
1573 |
1573 |
1574 // Allow machine-independent optimization, invert the sense of the IF test |
1574 // Allow machine-independent optimization, invert the sense of the IF test |
1629 |
1629 |
1630 // Starting point for inputs matcher wants. |
1630 // Starting point for inputs matcher wants. |
1631 // Use MachNode::oper_input_base() for nodes based on MachNode class |
1631 // Use MachNode::oper_input_base() for nodes based on MachNode class |
1632 // if the base == 1. |
1632 // if the base == 1. |
1633 if ( instr->oper_input_base(_globalNames) != 1 || |
1633 if ( instr->oper_input_base(_globalNames) != 1 || |
1634 strcmp("MachNode", instr->mach_base_class()) != 0 ) { |
1634 strcmp("MachNode", instr->mach_base_class(_globalNames)) != 0 ) { |
1635 fprintf(fp," virtual uint oper_input_base() const { return %d; }\n", |
1635 fprintf(fp," virtual uint oper_input_base() const { return %d; }\n", |
1636 instr->oper_input_base(_globalNames)); |
1636 instr->oper_input_base(_globalNames)); |
1637 } |
1637 } |
1638 |
1638 |
1639 // Make the constructor and following methods 'public:' |
1639 // Make the constructor and following methods 'public:' |
1903 offset = 2; |
1903 offset = 2; |
1904 } |
1904 } |
1905 // Special hack for ideal CMoveN; ideal type depends on inputs |
1905 // Special hack for ideal CMoveN; ideal type depends on inputs |
1906 fprintf(fp," const Type *bottom_type() const { const Type *t = in(oper_input_base()+%d)->bottom_type(); return (req() <= oper_input_base()+%d) ? t : t->meet(in(oper_input_base()+%d)->bottom_type()); } // CMoveN\n", |
1906 fprintf(fp," const Type *bottom_type() const { const Type *t = in(oper_input_base()+%d)->bottom_type(); return (req() <= oper_input_base()+%d) ? t : t->meet(in(oper_input_base()+%d)->bottom_type()); } // CMoveN\n", |
1907 offset, offset+1, offset+1); |
1907 offset, offset+1, offset+1); |
1908 } |
|
1909 else if( instr->needs_base_oop_edge(_globalNames) ) { |
|
1910 // Special hack for ideal AddP. Bottom type is an oop IFF it has a |
|
1911 // legal base-pointer input. Otherwise it is NOT an oop. |
|
1912 fprintf(fp," const Type *bottom_type() const { return AddPNode::mach_bottom_type(this); } // AddP\n"); |
|
1913 } |
1908 } |
1914 else if (instr->is_tls_instruction()) { |
1909 else if (instr->is_tls_instruction()) { |
1915 // Special hack for tlsLoadP |
1910 // Special hack for tlsLoadP |
1916 fprintf(fp," const Type *bottom_type() const { return TypeRawPtr::BOTTOM; } // tlsLoadP\n"); |
1911 fprintf(fp," const Type *bottom_type() const { return TypeRawPtr::BOTTOM; } // tlsLoadP\n"); |
1917 } |
1912 } |