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