868 } 869 }; 870 871 class CompareAndExchangeNode : public LoadStoreNode { 872 private: 873 const MemNode::MemOrd _mem_ord; 874 public: 875 enum { 876 ExpectedIn = MemNode::ValueIn+1 // One more input than MemNode 877 }; 878 CompareAndExchangeNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord, const TypePtr* at, const Type* t) : 879 LoadStoreNode(c, mem, adr, val, at, t, 5), _mem_ord(mem_ord) { 880 init_req(ExpectedIn, ex ); 881 } 882 883 MemNode::MemOrd order() const { 884 return _mem_ord; 885 } 886 }; 887 888 //------------------------------CompareAndSwapLNode--------------------------- 889 class CompareAndSwapLNode : public CompareAndSwapNode { 890 public: 891 CompareAndSwapLNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 892 virtual int Opcode() const; 893 }; 894 895 896 //------------------------------CompareAndSwapINode--------------------------- 897 class CompareAndSwapINode : public CompareAndSwapNode { 898 public: 899 CompareAndSwapINode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 900 virtual int Opcode() const; 901 }; 902 903 904 //------------------------------CompareAndSwapPNode--------------------------- 905 class CompareAndSwapPNode : public CompareAndSwapNode { 906 public: 907 CompareAndSwapPNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 908 virtual int Opcode() const; 909 }; 910 911 //------------------------------CompareAndSwapNNode--------------------------- 912 class CompareAndSwapNNode : public CompareAndSwapNode { 913 public: 914 CompareAndSwapNNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 915 virtual int Opcode() const; 916 }; 917 918 919 //------------------------------WeakCompareAndSwapLNode--------------------------- 920 class WeakCompareAndSwapLNode : public CompareAndSwapNode { 921 public: 922 WeakCompareAndSwapLNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 923 virtual int Opcode() const; 924 }; 925 926 927 //------------------------------WeakCompareAndSwapINode--------------------------- 928 class WeakCompareAndSwapINode : public CompareAndSwapNode { 929 public: 930 WeakCompareAndSwapINode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 931 virtual int Opcode() const; 932 }; 933 934 935 //------------------------------WeakCompareAndSwapPNode--------------------------- 936 class WeakCompareAndSwapPNode : public CompareAndSwapNode { 937 public: 938 WeakCompareAndSwapPNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 939 virtual int Opcode() const; 940 }; 941 942 //------------------------------WeakCompareAndSwapNNode--------------------------- 943 class WeakCompareAndSwapNNode : public CompareAndSwapNode { 944 public: 945 WeakCompareAndSwapNNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 946 virtual int Opcode() const; 947 }; 948 949 //------------------------------CompareAndExchangeLNode--------------------------- 950 class CompareAndExchangeLNode : public CompareAndExchangeNode { 951 public: 952 CompareAndExchangeLNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, const TypePtr* at, MemNode::MemOrd mem_ord) : CompareAndExchangeNode(c, mem, adr, val, ex, mem_ord, at, TypeLong::LONG) { } 953 virtual int Opcode() const; 954 }; 955 956 957 //------------------------------CompareAndExchangeINode--------------------------- 958 class CompareAndExchangeINode : public CompareAndExchangeNode { 959 public: 960 CompareAndExchangeINode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, const TypePtr* at, MemNode::MemOrd mem_ord) : CompareAndExchangeNode(c, mem, adr, val, ex, mem_ord, at, TypeInt::INT) { } 961 virtual int Opcode() const; 962 }; 963 964 965 //------------------------------CompareAndExchangePNode--------------------------- 966 class CompareAndExchangePNode : public CompareAndExchangeNode { 967 public: 968 CompareAndExchangePNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, const TypePtr* at, const Type* t, MemNode::MemOrd mem_ord) : CompareAndExchangeNode(c, mem, adr, val, ex, mem_ord, at, t) { } 969 virtual int Opcode() const; 970 }; 971 972 //------------------------------CompareAndExchangeNNode--------------------------- 973 class CompareAndExchangeNNode : public CompareAndExchangeNode { 974 public: 975 CompareAndExchangeNNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, const TypePtr* at, const Type* t, MemNode::MemOrd mem_ord) : CompareAndExchangeNode(c, mem, adr, val, ex, mem_ord, at, t) { } 976 virtual int Opcode() const; 977 }; 978 979 //------------------------------GetAndAddINode--------------------------- 980 class GetAndAddINode : public LoadStoreNode { 981 public: 982 GetAndAddINode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeInt::INT, 4) { } 983 virtual int Opcode() const; 984 }; 985 986 //------------------------------GetAndAddLNode--------------------------- 987 class GetAndAddLNode : public LoadStoreNode { 988 public: 989 GetAndAddLNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeLong::LONG, 4) { } 990 virtual int Opcode() const; 991 }; 992 993 994 //------------------------------GetAndSetINode--------------------------- 995 class GetAndSetINode : public LoadStoreNode { 996 public: 997 GetAndSetINode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeInt::INT, 4) { } 998 virtual int Opcode() const; 999 }; 1000 1001 //------------------------------GetAndSetINode--------------------------- 1002 class GetAndSetLNode : public LoadStoreNode { 1003 public: 1004 GetAndSetLNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeLong::LONG, 4) { } 1005 virtual int Opcode() const; 1006 }; 1007 1008 //------------------------------GetAndSetPNode--------------------------- 1009 class GetAndSetPNode : public LoadStoreNode { 1010 public: 1011 GetAndSetPNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at, const Type* t ) : LoadStoreNode(c, mem, adr, val, at, t, 4) { } 1012 virtual int Opcode() const; 1013 }; 1014 1015 //------------------------------GetAndSetNNode--------------------------- 1016 class GetAndSetNNode : public LoadStoreNode { 1017 public: 1018 GetAndSetNNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at, const Type* t ) : LoadStoreNode(c, mem, adr, val, at, t, 4) { } 1019 virtual int Opcode() const; 1020 }; 1021 | 868 } 869 }; 870 871 class CompareAndExchangeNode : public LoadStoreNode { 872 private: 873 const MemNode::MemOrd _mem_ord; 874 public: 875 enum { 876 ExpectedIn = MemNode::ValueIn+1 // One more input than MemNode 877 }; 878 CompareAndExchangeNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord, const TypePtr* at, const Type* t) : 879 LoadStoreNode(c, mem, adr, val, at, t, 5), _mem_ord(mem_ord) { 880 init_req(ExpectedIn, ex ); 881 } 882 883 MemNode::MemOrd order() const { 884 return _mem_ord; 885 } 886 }; 887 888 //------------------------------CompareAndSwapBNode--------------------------- 889 class CompareAndSwapBNode : public CompareAndSwapNode { 890 public: 891 CompareAndSwapBNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 892 virtual int Opcode() const; 893 }; 894 895 //------------------------------CompareAndSwapSNode--------------------------- 896 class CompareAndSwapSNode : public CompareAndSwapNode { 897 public: 898 CompareAndSwapSNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 899 virtual int Opcode() const; 900 }; 901 902 //------------------------------CompareAndSwapINode--------------------------- 903 class CompareAndSwapINode : public CompareAndSwapNode { 904 public: 905 CompareAndSwapINode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 906 virtual int Opcode() const; 907 }; 908 909 //------------------------------CompareAndSwapLNode--------------------------- 910 class CompareAndSwapLNode : public CompareAndSwapNode { 911 public: 912 CompareAndSwapLNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 913 virtual int Opcode() const; 914 }; 915 916 //------------------------------CompareAndSwapPNode--------------------------- 917 class CompareAndSwapPNode : public CompareAndSwapNode { 918 public: 919 CompareAndSwapPNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 920 virtual int Opcode() const; 921 }; 922 923 //------------------------------CompareAndSwapNNode--------------------------- 924 class CompareAndSwapNNode : public CompareAndSwapNode { 925 public: 926 CompareAndSwapNNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 927 virtual int Opcode() const; 928 }; 929 930 //------------------------------WeakCompareAndSwapBNode--------------------------- 931 class WeakCompareAndSwapBNode : public CompareAndSwapNode { 932 public: 933 WeakCompareAndSwapBNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 934 virtual int Opcode() const; 935 }; 936 937 //------------------------------WeakCompareAndSwapSNode--------------------------- 938 class WeakCompareAndSwapSNode : public CompareAndSwapNode { 939 public: 940 WeakCompareAndSwapSNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 941 virtual int Opcode() const; 942 }; 943 944 //------------------------------WeakCompareAndSwapINode--------------------------- 945 class WeakCompareAndSwapINode : public CompareAndSwapNode { 946 public: 947 WeakCompareAndSwapINode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 948 virtual int Opcode() const; 949 }; 950 951 //------------------------------WeakCompareAndSwapLNode--------------------------- 952 class WeakCompareAndSwapLNode : public CompareAndSwapNode { 953 public: 954 WeakCompareAndSwapLNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 955 virtual int Opcode() const; 956 }; 957 958 //------------------------------WeakCompareAndSwapPNode--------------------------- 959 class WeakCompareAndSwapPNode : public CompareAndSwapNode { 960 public: 961 WeakCompareAndSwapPNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 962 virtual int Opcode() const; 963 }; 964 965 //------------------------------WeakCompareAndSwapNNode--------------------------- 966 class WeakCompareAndSwapNNode : public CompareAndSwapNode { 967 public: 968 WeakCompareAndSwapNNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, MemNode::MemOrd mem_ord) : CompareAndSwapNode(c, mem, adr, val, ex, mem_ord) { } 969 virtual int Opcode() const; 970 }; 971 972 //------------------------------CompareAndExchangeBNode--------------------------- 973 class CompareAndExchangeBNode : public CompareAndExchangeNode { 974 public: 975 CompareAndExchangeBNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, const TypePtr* at, MemNode::MemOrd mem_ord) : CompareAndExchangeNode(c, mem, adr, val, ex, mem_ord, at, TypeInt::BYTE) { } 976 virtual int Opcode() const; 977 }; 978 979 980 //------------------------------CompareAndExchangeSNode--------------------------- 981 class CompareAndExchangeSNode : public CompareAndExchangeNode { 982 public: 983 CompareAndExchangeSNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, const TypePtr* at, MemNode::MemOrd mem_ord) : CompareAndExchangeNode(c, mem, adr, val, ex, mem_ord, at, TypeInt::SHORT) { } 984 virtual int Opcode() const; 985 }; 986 987 //------------------------------CompareAndExchangeLNode--------------------------- 988 class CompareAndExchangeLNode : public CompareAndExchangeNode { 989 public: 990 CompareAndExchangeLNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, const TypePtr* at, MemNode::MemOrd mem_ord) : CompareAndExchangeNode(c, mem, adr, val, ex, mem_ord, at, TypeLong::LONG) { } 991 virtual int Opcode() const; 992 }; 993 994 995 //------------------------------CompareAndExchangeINode--------------------------- 996 class CompareAndExchangeINode : public CompareAndExchangeNode { 997 public: 998 CompareAndExchangeINode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, const TypePtr* at, MemNode::MemOrd mem_ord) : CompareAndExchangeNode(c, mem, adr, val, ex, mem_ord, at, TypeInt::INT) { } 999 virtual int Opcode() const; 1000 }; 1001 1002 1003 //------------------------------CompareAndExchangePNode--------------------------- 1004 class CompareAndExchangePNode : public CompareAndExchangeNode { 1005 public: 1006 CompareAndExchangePNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, const TypePtr* at, const Type* t, MemNode::MemOrd mem_ord) : CompareAndExchangeNode(c, mem, adr, val, ex, mem_ord, at, t) { } 1007 virtual int Opcode() const; 1008 }; 1009 1010 //------------------------------CompareAndExchangeNNode--------------------------- 1011 class CompareAndExchangeNNode : public CompareAndExchangeNode { 1012 public: 1013 CompareAndExchangeNNode( Node *c, Node *mem, Node *adr, Node *val, Node *ex, const TypePtr* at, const Type* t, MemNode::MemOrd mem_ord) : CompareAndExchangeNode(c, mem, adr, val, ex, mem_ord, at, t) { } 1014 virtual int Opcode() const; 1015 }; 1016 1017 //------------------------------GetAndAddBNode--------------------------- 1018 class GetAndAddBNode : public LoadStoreNode { 1019 public: 1020 GetAndAddBNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeInt::BYTE, 4) { } 1021 virtual int Opcode() const; 1022 }; 1023 1024 //------------------------------GetAndAddSNode--------------------------- 1025 class GetAndAddSNode : public LoadStoreNode { 1026 public: 1027 GetAndAddSNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeInt::SHORT, 4) { } 1028 virtual int Opcode() const; 1029 }; 1030 1031 //------------------------------GetAndAddINode--------------------------- 1032 class GetAndAddINode : public LoadStoreNode { 1033 public: 1034 GetAndAddINode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeInt::INT, 4) { } 1035 virtual int Opcode() const; 1036 }; 1037 1038 //------------------------------GetAndAddLNode--------------------------- 1039 class GetAndAddLNode : public LoadStoreNode { 1040 public: 1041 GetAndAddLNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeLong::LONG, 4) { } 1042 virtual int Opcode() const; 1043 }; 1044 1045 //------------------------------GetAndSetBNode--------------------------- 1046 class GetAndSetBNode : public LoadStoreNode { 1047 public: 1048 GetAndSetBNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeInt::BYTE, 4) { } 1049 virtual int Opcode() const; 1050 }; 1051 1052 //------------------------------GetAndSetSNode--------------------------- 1053 class GetAndSetSNode : public LoadStoreNode { 1054 public: 1055 GetAndSetSNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeInt::SHORT, 4) { } 1056 virtual int Opcode() const; 1057 }; 1058 1059 //------------------------------GetAndSetINode--------------------------- 1060 class GetAndSetINode : public LoadStoreNode { 1061 public: 1062 GetAndSetINode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeInt::INT, 4) { } 1063 virtual int Opcode() const; 1064 }; 1065 1066 //------------------------------GetAndSetLNode--------------------------- 1067 class GetAndSetLNode : public LoadStoreNode { 1068 public: 1069 GetAndSetLNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at ) : LoadStoreNode(c, mem, adr, val, at, TypeLong::LONG, 4) { } 1070 virtual int Opcode() const; 1071 }; 1072 1073 //------------------------------GetAndSetPNode--------------------------- 1074 class GetAndSetPNode : public LoadStoreNode { 1075 public: 1076 GetAndSetPNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at, const Type* t ) : LoadStoreNode(c, mem, adr, val, at, t, 4) { } 1077 virtual int Opcode() const; 1078 }; 1079 1080 //------------------------------GetAndSetNNode--------------------------- 1081 class GetAndSetNNode : public LoadStoreNode { 1082 public: 1083 GetAndSetNNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at, const Type* t ) : LoadStoreNode(c, mem, adr, val, at, t, 4) { } 1084 virtual int Opcode() const; 1085 }; 1086 |