1143 virtual LIR_OpArrayCopy* as_OpArrayCopy() { return NULL; } |
1145 virtual LIR_OpArrayCopy* as_OpArrayCopy() { return NULL; } |
1144 virtual LIR_OpUpdateCRC32* as_OpUpdateCRC32() { return NULL; } |
1146 virtual LIR_OpUpdateCRC32* as_OpUpdateCRC32() { return NULL; } |
1145 virtual LIR_OpTypeCheck* as_OpTypeCheck() { return NULL; } |
1147 virtual LIR_OpTypeCheck* as_OpTypeCheck() { return NULL; } |
1146 virtual LIR_OpCompareAndSwap* as_OpCompareAndSwap() { return NULL; } |
1148 virtual LIR_OpCompareAndSwap* as_OpCompareAndSwap() { return NULL; } |
1147 virtual LIR_OpProfileCall* as_OpProfileCall() { return NULL; } |
1149 virtual LIR_OpProfileCall* as_OpProfileCall() { return NULL; } |
|
1150 virtual LIR_OpProfileType* as_OpProfileType() { return NULL; } |
1148 #ifdef ASSERT |
1151 #ifdef ASSERT |
1149 virtual LIR_OpAssert* as_OpAssert() { return NULL; } |
1152 virtual LIR_OpAssert* as_OpAssert() { return NULL; } |
1150 #endif |
1153 #endif |
1151 |
1154 |
1152 virtual void verify() const {} |
1155 virtual void verify() const {} |
1923 LIR_Opr _tmp1; |
1926 LIR_Opr _tmp1; |
1924 ciKlass* _known_holder; |
1927 ciKlass* _known_holder; |
1925 |
1928 |
1926 public: |
1929 public: |
1927 // Destroys recv |
1930 // Destroys recv |
1928 LIR_OpProfileCall(LIR_Code code, ciMethod* profiled_method, int profiled_bci, ciMethod* profiled_callee, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* known_holder) |
1931 LIR_OpProfileCall(ciMethod* profiled_method, int profiled_bci, ciMethod* profiled_callee, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* known_holder) |
1929 : LIR_Op(code, LIR_OprFact::illegalOpr, NULL) // no result, no info |
1932 : LIR_Op(lir_profile_call, LIR_OprFact::illegalOpr, NULL) // no result, no info |
1930 , _profiled_method(profiled_method) |
1933 , _profiled_method(profiled_method) |
1931 , _profiled_bci(profiled_bci) |
1934 , _profiled_bci(profiled_bci) |
1932 , _profiled_callee(profiled_callee) |
1935 , _profiled_callee(profiled_callee) |
1933 , _mdo(mdo) |
1936 , _mdo(mdo) |
1934 , _recv(recv) |
1937 , _recv(recv) |
1943 LIR_Opr tmp1() const { return _tmp1; } |
1946 LIR_Opr tmp1() const { return _tmp1; } |
1944 ciKlass* known_holder() const { return _known_holder; } |
1947 ciKlass* known_holder() const { return _known_holder; } |
1945 |
1948 |
1946 virtual void emit_code(LIR_Assembler* masm); |
1949 virtual void emit_code(LIR_Assembler* masm); |
1947 virtual LIR_OpProfileCall* as_OpProfileCall() { return this; } |
1950 virtual LIR_OpProfileCall* as_OpProfileCall() { return this; } |
|
1951 virtual void print_instr(outputStream* out) const PRODUCT_RETURN; |
|
1952 }; |
|
1953 |
|
1954 // LIR_OpProfileType |
|
1955 class LIR_OpProfileType : public LIR_Op { |
|
1956 friend class LIR_OpVisitState; |
|
1957 |
|
1958 private: |
|
1959 LIR_Opr _mdp; |
|
1960 LIR_Opr _obj; |
|
1961 LIR_Opr _tmp; |
|
1962 ciKlass* _exact_klass; // non NULL if we know the klass statically (no need to load it from _obj) |
|
1963 intptr_t _current_klass; // what the profiling currently reports |
|
1964 bool _not_null; // true if we know statically that _obj cannot be null |
|
1965 bool _no_conflict; // true if we're profling parameters, _exact_klass is not NULL and we know |
|
1966 // _exact_klass it the only possible type for this parameter in any context. |
|
1967 |
|
1968 public: |
|
1969 // Destroys recv |
|
1970 LIR_OpProfileType(LIR_Opr mdp, LIR_Opr obj, ciKlass* exact_klass, intptr_t current_klass, LIR_Opr tmp, bool not_null, bool no_conflict) |
|
1971 : LIR_Op(lir_profile_type, LIR_OprFact::illegalOpr, NULL) // no result, no info |
|
1972 , _mdp(mdp) |
|
1973 , _obj(obj) |
|
1974 , _exact_klass(exact_klass) |
|
1975 , _current_klass(current_klass) |
|
1976 , _tmp(tmp) |
|
1977 , _not_null(not_null) |
|
1978 , _no_conflict(no_conflict) { } |
|
1979 |
|
1980 LIR_Opr mdp() const { return _mdp; } |
|
1981 LIR_Opr obj() const { return _obj; } |
|
1982 LIR_Opr tmp() const { return _tmp; } |
|
1983 ciKlass* exact_klass() const { return _exact_klass; } |
|
1984 intptr_t current_klass() const { return _current_klass; } |
|
1985 bool not_null() const { return _not_null; } |
|
1986 bool no_conflict() const { return _no_conflict; } |
|
1987 |
|
1988 virtual void emit_code(LIR_Assembler* masm); |
|
1989 virtual LIR_OpProfileType* as_OpProfileType() { return this; } |
1948 virtual void print_instr(outputStream* out) const PRODUCT_RETURN; |
1990 virtual void print_instr(outputStream* out) const PRODUCT_RETURN; |
1949 }; |
1991 }; |
1950 |
1992 |
1951 class LIR_InsertionBuffer; |
1993 class LIR_InsertionBuffer; |
1952 |
1994 |
2245 LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check, |
2287 LIR_Opr tmp1, LIR_Opr tmp2, LIR_Opr tmp3, bool fast_check, |
2246 CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub, |
2288 CodeEmitInfo* info_for_exception, CodeEmitInfo* info_for_patch, CodeStub* stub, |
2247 ciMethod* profiled_method, int profiled_bci); |
2289 ciMethod* profiled_method, int profiled_bci); |
2248 // MethodData* profiling |
2290 // MethodData* profiling |
2249 void profile_call(ciMethod* method, int bci, ciMethod* callee, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* cha_klass) { |
2291 void profile_call(ciMethod* method, int bci, ciMethod* callee, LIR_Opr mdo, LIR_Opr recv, LIR_Opr t1, ciKlass* cha_klass) { |
2250 append(new LIR_OpProfileCall(lir_profile_call, method, bci, callee, mdo, recv, t1, cha_klass)); |
2292 append(new LIR_OpProfileCall(method, bci, callee, mdo, recv, t1, cha_klass)); |
|
2293 } |
|
2294 void profile_type(LIR_Address* mdp, LIR_Opr obj, ciKlass* exact_klass, intptr_t current_klass, LIR_Opr tmp, bool not_null, bool no_conflict) { |
|
2295 append(new LIR_OpProfileType(LIR_OprFact::address(mdp), obj, exact_klass, current_klass, tmp, not_null, no_conflict)); |
2251 } |
2296 } |
2252 |
2297 |
2253 void xadd(LIR_Opr src, LIR_Opr add, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xadd, src, add, res, tmp)); } |
2298 void xadd(LIR_Opr src, LIR_Opr add, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xadd, src, add, res, tmp)); } |
2254 void xchg(LIR_Opr src, LIR_Opr set, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xchg, src, set, res, tmp)); } |
2299 void xchg(LIR_Opr src, LIR_Opr set, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xchg, src, set, res, tmp)); } |
2255 #ifdef ASSERT |
2300 #ifdef ASSERT |