Mercurial > hg > truffle
comparison src/cpu/sparc/vm/sparc.ad @ 13048:53662b2f1d68
Merge
author | drchase |
---|---|
date | Thu, 07 Nov 2013 10:02:28 -0500 |
parents | 208ebea980f8 |
children | f3e0bcfff3ab da862781b584 |
comparison
equal
deleted
inserted
replaced
13041:04df110c8655 | 13048:53662b2f1d68 |
---|---|
2914 | 2914 |
2915 // Strings might not be equal | 2915 // Strings might not be equal |
2916 __ bind(LSkip2); | 2916 __ bind(LSkip2); |
2917 } | 2917 } |
2918 | 2918 |
2919 // We have no guarantee that on 64 bit the higher half of limit_reg is 0 | |
2920 __ signx(limit_reg); | |
2921 | |
2919 __ subcc(limit_reg, 1 * sizeof(jchar), chr1_reg); | 2922 __ subcc(limit_reg, 1 * sizeof(jchar), chr1_reg); |
2920 __ br(Assembler::equal, true, Assembler::pn, Ldone); | 2923 __ br(Assembler::equal, true, Assembler::pn, Ldone); |
2921 __ delayed()->mov(O7, result_reg); // result is difference in lengths | 2924 __ delayed()->mov(O7, result_reg); // result is difference in lengths |
2922 | 2925 |
2923 // Shift str1_reg and str2_reg to the end of the arrays, negate limit | 2926 // Shift str1_reg and str2_reg to the end of the arrays, negate limit |
2970 | 2973 |
2971 //rename registers | 2974 //rename registers |
2972 Register limit_reg = cnt_reg; | 2975 Register limit_reg = cnt_reg; |
2973 Register chr1_reg = result_reg; | 2976 Register chr1_reg = result_reg; |
2974 Register chr2_reg = tmp1_reg; | 2977 Register chr2_reg = tmp1_reg; |
2978 | |
2979 // We have no guarantee that on 64 bit the higher half of limit_reg is 0 | |
2980 __ signx(limit_reg); | |
2975 | 2981 |
2976 //check for alignment and position the pointers to the ends | 2982 //check for alignment and position the pointers to the ends |
2977 __ or3(str1_reg, str2_reg, chr1_reg); | 2983 __ or3(str1_reg, str2_reg, chr1_reg); |
2978 __ andcc(chr1_reg, 0x3, chr1_reg); | 2984 __ andcc(chr1_reg, 0x3, chr1_reg); |
2979 // notZero means at least one not 4-byte aligned. | 2985 // notZero means at least one not 4-byte aligned. |