< prev index next >

src/hotspot/share/opto/callnode.hpp

Print this page

 819   }
 820   virtual int   Opcode() const;
 821   virtual bool        guaranteed_safepoint()  { return false; }
 822 #ifndef PRODUCT
 823   virtual void  dump_spec(outputStream *st) const;
 824 #endif
 825 };
 826 
 827 //------------------------------CallNativeNode-----------------------------------
 828 // Make a direct call into a foreign function with an arbitrary ABI
 829 // safepoints
 830 class CallNativeNode : public CallNode {
 831   friend class MachCallNativeNode;
 832   virtual bool cmp( const Node &n ) const;
 833   virtual uint size_of() const;
 834   static void print_regs(const GrowableArray<VMReg>& regs, outputStream* st);
 835 public:
 836   GrowableArray<VMReg> _arg_regs;
 837   GrowableArray<VMReg> _ret_regs;
 838   const int _shadow_space_bytes;
 839   const bool _need_transition;
 840 
 841   CallNativeNode(const TypeFunc* tf, address addr, const char* name,
 842                  const TypePtr* adr_type,
 843                  const GrowableArray<VMReg>& arg_regs,
 844                  const GrowableArray<VMReg>& ret_regs,
 845                  int shadow_space_bytes,
 846                  bool need_transition)
 847     : CallNode(tf, addr, adr_type), _arg_regs(arg_regs),
 848       _ret_regs(ret_regs), _shadow_space_bytes(shadow_space_bytes),
 849       _need_transition(need_transition)
 850   {
 851     init_class_id(Class_CallNative);
 852     _name = name;
 853   }
 854   virtual int   Opcode() const;
 855   virtual bool  guaranteed_safepoint()  { return _need_transition; }
 856   virtual Node* match(const ProjNode *proj, const Matcher *m);
 857   virtual void  calling_convention( BasicType* sig_bt, VMRegPair *parm_regs, uint argcnt ) const;
 858 #ifndef PRODUCT
 859   virtual void  dump_spec(outputStream *st) const;
 860 #endif
 861 };
 862 
 863 //------------------------------CallLeafNoFPNode-------------------------------
 864 // CallLeafNode, not using floating point or using it in the same manner as
 865 // the generated code
 866 class CallLeafNoFPNode : public CallLeafNode {
 867 public:
 868   CallLeafNoFPNode(const TypeFunc* tf, address addr, const char* name,
 869                    const TypePtr* adr_type)
 870     : CallLeafNode(tf, addr, name, adr_type)
 871   {
 872     init_class_id(Class_CallLeafNoFP);
 873   }
 874   virtual int   Opcode() const;
 875 };

 819   }
 820   virtual int   Opcode() const;
 821   virtual bool        guaranteed_safepoint()  { return false; }
 822 #ifndef PRODUCT
 823   virtual void  dump_spec(outputStream *st) const;
 824 #endif
 825 };
 826 
 827 //------------------------------CallNativeNode-----------------------------------
 828 // Make a direct call into a foreign function with an arbitrary ABI
 829 // safepoints
 830 class CallNativeNode : public CallNode {
 831   friend class MachCallNativeNode;
 832   virtual bool cmp( const Node &n ) const;
 833   virtual uint size_of() const;
 834   static void print_regs(const GrowableArray<VMReg>& regs, outputStream* st);
 835 public:
 836   GrowableArray<VMReg> _arg_regs;
 837   GrowableArray<VMReg> _ret_regs;
 838   const int _shadow_space_bytes;

 839 
 840   CallNativeNode(const TypeFunc* tf, address addr, const char* name,
 841                  const TypePtr* adr_type,
 842                  const GrowableArray<VMReg>& arg_regs,
 843                  const GrowableArray<VMReg>& ret_regs,
 844                  int shadow_space_bytes)

 845     : CallNode(tf, addr, adr_type), _arg_regs(arg_regs),
 846       _ret_regs(ret_regs), _shadow_space_bytes(shadow_space_bytes)

 847   {
 848     init_class_id(Class_CallNative);
 849     _name = name;
 850   }
 851   virtual int   Opcode() const;
 852   virtual bool  guaranteed_safepoint()  { return false; }
 853   virtual Node* match(const ProjNode *proj, const Matcher *m);
 854   virtual void  calling_convention( BasicType* sig_bt, VMRegPair *parm_regs, uint argcnt ) const;
 855 #ifndef PRODUCT
 856   virtual void  dump_spec(outputStream *st) const;
 857 #endif
 858 };
 859 
 860 //------------------------------CallLeafNoFPNode-------------------------------
 861 // CallLeafNode, not using floating point or using it in the same manner as
 862 // the generated code
 863 class CallLeafNoFPNode : public CallLeafNode {
 864 public:
 865   CallLeafNoFPNode(const TypeFunc* tf, address addr, const char* name,
 866                    const TypePtr* adr_type)
 867     : CallLeafNode(tf, addr, name, adr_type)
 868   {
 869     init_class_id(Class_CallLeafNoFP);
 870   }
 871   virtual int   Opcode() const;
 872 };
< prev index next >