src/cpu/x86/vm/stubGenerator_x86_64.cpp

changeset 6312
04d32e7fad07
parent 5528
740e263c80c6
child 6876
710a3c8b516e
child 7152
166d744df0de
     1.1 --- a/src/cpu/x86/vm/stubGenerator_x86_64.cpp	Fri Feb 14 16:17:22 2014 +0100
     1.2 +++ b/src/cpu/x86/vm/stubGenerator_x86_64.cpp	Tue Jan 14 17:46:48 2014 -0800
     1.3 @@ -3217,6 +3217,9 @@
     1.4    //   c_rarg3   - r vector byte array address
     1.5    //   c_rarg4   - input length
     1.6    //
     1.7 +  // Output:
     1.8 +  //   rax       - input length
     1.9 +  //
    1.10    address generate_cipherBlockChaining_encryptAESCrypt() {
    1.11      assert(UseAES, "need AES instructions and misaligned SSE support");
    1.12      __ align(CodeEntryAlignment);
    1.13 @@ -3232,7 +3235,7 @@
    1.14  #ifndef _WIN64
    1.15      const Register len_reg     = c_rarg4;  // src len (must be multiple of blocksize 16)
    1.16  #else
    1.17 -    const Address  len_mem(rsp, 6 * wordSize);  // length is on stack on Win64
    1.18 +    const Address  len_mem(rbp, 6 * wordSize);  // length is on stack on Win64
    1.19      const Register len_reg     = r10;      // pick the first volatile windows register
    1.20  #endif
    1.21      const Register pos         = rax;
    1.22 @@ -3259,6 +3262,8 @@
    1.23      for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) {
    1.24        __ movdqu(xmm_save(i), as_XMMRegister(i));
    1.25      }
    1.26 +#else
    1.27 +    __ push(len_reg); // Save
    1.28  #endif
    1.29  
    1.30      const XMMRegister xmm_key_shuf_mask = xmm_temp;  // used temporarily to swap key bytes up front
    1.31 @@ -3301,8 +3306,10 @@
    1.32      for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) {
    1.33        __ movdqu(as_XMMRegister(i), xmm_save(i));
    1.34      }
    1.35 +    __ movl(rax, len_mem);
    1.36 +#else
    1.37 +    __ pop(rax); // return length
    1.38  #endif
    1.39 -    __ movl(rax, 0); // return 0 (why?)
    1.40      __ leave(); // required for proper stackwalking of RuntimeStub frame
    1.41      __ ret(0);
    1.42  
    1.43 @@ -3409,6 +3416,9 @@
    1.44    //   c_rarg3   - r vector byte array address
    1.45    //   c_rarg4   - input length
    1.46    //
    1.47 +  // Output:
    1.48 +  //   rax       - input length
    1.49 +  //
    1.50  
    1.51    address generate_cipherBlockChaining_decryptAESCrypt_Parallel() {
    1.52      assert(UseAES, "need AES instructions and misaligned SSE support");
    1.53 @@ -3427,7 +3437,7 @@
    1.54  #ifndef _WIN64
    1.55      const Register len_reg     = c_rarg4;  // src len (must be multiple of blocksize 16)
    1.56  #else
    1.57 -    const Address  len_mem(rsp, 6 * wordSize);  // length is on stack on Win64
    1.58 +    const Address  len_mem(rbp, 6 * wordSize);  // length is on stack on Win64
    1.59      const Register len_reg     = r10;      // pick the first volatile windows register
    1.60  #endif
    1.61      const Register pos         = rax;
    1.62 @@ -3448,7 +3458,10 @@
    1.63      for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) {
    1.64        __ movdqu(xmm_save(i), as_XMMRegister(i));
    1.65      }
    1.66 +#else
    1.67 +    __ push(len_reg); // Save
    1.68  #endif
    1.69 +
    1.70      // the java expanded key ordering is rotated one position from what we want
    1.71      // so we start from 0x10 here and hit 0x00 last
    1.72      const XMMRegister xmm_key_shuf_mask = xmm1;  // used temporarily to swap key bytes up front
    1.73 @@ -3554,8 +3567,10 @@
    1.74      for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) {
    1.75        __ movdqu(as_XMMRegister(i), xmm_save(i));
    1.76      }
    1.77 +    __ movl(rax, len_mem);
    1.78 +#else
    1.79 +    __ pop(rax); // return length
    1.80  #endif
    1.81 -    __ movl(rax, 0); // return 0 (why?)
    1.82      __ leave(); // required for proper stackwalking of RuntimeStub frame
    1.83      __ ret(0);
    1.84  

mercurial