< prev index next >

src/hotspot/share/opto/callnode.hpp

Print this page

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

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

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

 843     : CallNode(tf, addr, adr_type), _arg_regs(arg_regs),
 844       _ret_regs(ret_regs), _shadow_space_bytes(shadow_space_bytes)

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