src/cpu/mips/vm/templateTable_mips_64.cpp

changeset 6888
b6a542947da3
parent 6887
59aca571c8d0
child 6889
a1eb29ee98ab
     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

mercurial