Wed, 20 Sep 2017 11:08:18 +0800
[Interpreter] Optimize TemplateTable::fconst, TemplateTable::dconst and TemplateTable::sipush.
src/cpu/mips/vm/templateTable_mips_64.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/cpu/mips/vm/templateTable_mips_64.cpp Wed Sep 20 09:38:17 2017 +0800 1.2 +++ b/src/cpu/mips/vm/templateTable_mips_64.cpp Wed Sep 20 11:08:18 2017 +0800 1.3 @@ -211,30 +211,28 @@ 1.4 } 1.5 1.6 void TemplateTable::fconst(int value) { 1.7 - static float _f1 = 1.0, _f2 = 2.0; 1.8 transition(vtos, ftos); 1.9 - float* p; 1.10 switch( value ) { 1.11 + case 0: __ mtc1(R0, FSF); return; 1.12 + case 1: __ addiu(AT, R0, 1); break; 1.13 + case 2: __ addiu(AT, R0, 2); break; 1.14 default: ShouldNotReachHere(); 1.15 - case 0: __ dmtc1(R0, FSF); return; 1.16 - case 1: p = &_f1; break; 1.17 - case 2: p = &_f2; break; 1.18 } 1.19 - __ li(AT, (address)p); 1.20 - __ lwc1(FSF, AT, 0); 1.21 + __ mtc1(AT, FSF); 1.22 + __ cvt_s_w(FSF, FSF); 1.23 } 1.24 1.25 void TemplateTable::dconst(int value) { 1.26 - static double _d1 = 1.0; 1.27 transition(vtos, dtos); 1.28 - double* p; 1.29 switch( value ) { 1.30 + case 0: __ dmtc1(R0, FSF); 1.31 + return; 1.32 + case 1: __ daddiu(AT, R0, 1); 1.33 + __ dmtc1(AT, FSF); 1.34 + __ cvt_d_w(FSF, FSF); 1.35 + break; 1.36 default: ShouldNotReachHere(); 1.37 - case 0: __ dmtc1(R0, FSF); return; 1.38 - case 1: p = &_d1; break; 1.39 } 1.40 - __ li(AT, (address)p); 1.41 - __ ldc1(FSF, AT, 0); 1.42 } 1.43 1.44 void TemplateTable::bipush() { 1.45 @@ -244,8 +242,10 @@ 1.46 1.47 void TemplateTable::sipush() { 1.48 transition(vtos, itos); 1.49 - __ get_2_byte_integer_at_bcp(FSR, AT, 1); 1.50 - __ hswap(FSR); 1.51 + __ lb(FSR, BCP, 1); 1.52 + __ lbu(AT, BCP, 2); 1.53 + __ dsll(FSR, FSR, 8); 1.54 + __ orr(FSR, FSR, AT); 1.55 } 1.56 1.57 // T1 : tags