--- old/src/share/vm/c1/c1_LIR.hpp 2014-07-09 16:46:34.607163224 -0400 +++ new/src/share/vm/c1/c1_LIR.hpp 2014-07-09 16:46:34.113406725 -0400 @@ -883,6 +883,7 @@ class LIR_OpCompareAndSwap; class LIR_OpProfileCall; class LIR_OpProfileType; +class LIR_OpCrypto_CBC_AES; #ifdef ASSERT class LIR_OpAssert; #endif @@ -1011,6 +1012,9 @@ , begin_opAssert , lir_assert , end_opAssert + , begin_opCrypto + , lir_crypto_cbc_aes + , end_opCrypto }; @@ -1149,6 +1153,7 @@ virtual LIR_OpCompareAndSwap* as_OpCompareAndSwap() { return NULL; } virtual LIR_OpProfileCall* as_OpProfileCall() { return NULL; } virtual LIR_OpProfileType* as_OpProfileType() { return NULL; } + virtual LIR_OpCrypto_CBC_AES* as_OpCrypto_CBC_AES() { return NULL; } #ifdef ASSERT virtual LIR_OpAssert* as_OpAssert() { return NULL; } #endif @@ -1991,6 +1996,55 @@ virtual void print_instr(outputStream* out) const PRODUCT_RETURN; }; +class LIR_OpCrypto_CBC_AES: public LIR_Op { + friend class LIR_OpVisitState; + + private: + LIR_Opr _insof; + LIR_Opr _recv; + LIR_Opr _src; + LIR_Opr _dst; + LIR_Opr _src_len; + LIR_Opr _src_off; + LIR_Opr _dst_off; + bool _encrypt; + + public: + LIR_OpCrypto_CBC_AES(bool encrypt, + LIR_Opr result, + LIR_Opr insof, + LIR_Opr recv, + LIR_Opr src, + LIR_Opr src_off, + LIR_Opr src_len, + LIR_Opr dst, + LIR_Opr dst_off, + CodeEmitInfo* info) + : LIR_Op(lir_crypto_cbc_aes, result, info) + , _encrypt(encrypt) + , _insof(insof) + , _recv(recv) + , _src(src) + , _src_off(src_off) + , _src_len(src_len) + , _dst(dst) + , _dst_off(dst_off) + { } + + LIR_Opr src() const { return _src; } + LIR_Opr src_len() const { return _src_len; } + LIR_Opr src_off() const { return _src_off; } + LIR_Opr dst() const { return _dst; } + LIR_Opr dst_off() const { return _dst_off; } + LIR_Opr insof() const { return _insof; } + LIR_Opr recv() const { return _recv; } + bool is_encrypt() const { return _encrypt; } + + virtual void emit_code(LIR_Assembler* masm); + virtual LIR_OpCrypto_CBC_AES* as_OpCrypto_CBC_AES() { return this; } + virtual void print_instr(outputStream* out) const PRODUCT_RETURN; +}; + class LIR_InsertionBuffer; //--------------------------------LIR_List--------------------------------------------------- @@ -2298,6 +2352,16 @@ void xadd(LIR_Opr src, LIR_Opr add, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xadd, src, add, res, tmp)); } void xchg(LIR_Opr src, LIR_Opr set, LIR_Opr res, LIR_Opr tmp) { append(new LIR_Op2(lir_xchg, src, set, res, tmp)); } + + void crypto_cbc_aes(bool encrypt, LIR_Opr result, + LIR_Opr insof, LIR_Opr recv, + LIR_Opr src, LIR_Opr src_offset, + LIR_Opr src_len, + LIR_Opr dst, LIR_Opr dst_offset, + CodeEmitInfo* info) { + append(new LIR_OpCrypto_CBC_AES(encrypt, result, insof, recv, src, src_offset, src_len, dst, dst_offset, info)); + } + #ifdef ASSERT void lir_assert(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2, const char* msg, bool halt) { append(new LIR_OpAssert(condition, opr1, opr2, msg, halt)); } #endif