Index: runtime/vm/intermediate_language_arm.cc |
=================================================================== |
--- runtime/vm/intermediate_language_arm.cc (revision 36576) |
+++ runtime/vm/intermediate_language_arm.cc (working copy) |
@@ -3926,6 +3926,10 @@ |
const DRegister dvalue0 = EvenDRegisterOf(value); |
const DRegister dvalue1 = OddDRegisterOf(value); |
+ const SRegister svalue0 = EvenSRegisterOf(dvalue0); |
+ const SRegister svalue1 = OddSRegisterOf(dvalue0); |
+ const SRegister svalue2 = EvenSRegisterOf(dvalue1); |
+ const SRegister svalue3 = OddSRegisterOf(dvalue1); |
const DRegister dtemp0 = DTMP; |
const DRegister dtemp1 = OddDRegisterOf(QTMP); |
@@ -3935,20 +3939,16 @@ |
switch (op_kind()) { |
case MethodRecognizer::kFloat32x4ShuffleX: |
- __ vdup(kWord, result, dvalue0, 0); |
- __ vcvtds(dresult0, sresult0); |
+ __ vcvtds(dresult0, svalue0); |
break; |
case MethodRecognizer::kFloat32x4ShuffleY: |
- __ vdup(kWord, result, dvalue0, 1); |
- __ vcvtds(dresult0, sresult0); |
+ __ vcvtds(dresult0, svalue1); |
break; |
case MethodRecognizer::kFloat32x4ShuffleZ: |
- __ vdup(kWord, result, dvalue1, 0); |
- __ vcvtds(dresult0, sresult0); |
+ __ vcvtds(dresult0, svalue2); |
break; |
case MethodRecognizer::kFloat32x4ShuffleW: |
- __ vdup(kWord, result, dvalue1, 1); |
- __ vcvtds(dresult0, sresult0); |
+ __ vcvtds(dresult0, svalue3); |
break; |
case MethodRecognizer::kInt32x4Shuffle: |
case MethodRecognizer::kFloat32x4Shuffle: |
@@ -4945,24 +4945,11 @@ |
const QRegister right = locs()->in(1).fpu_reg(); |
const QRegister result = locs()->out(0).fpu_reg(); |
switch (op_kind()) { |
- case Token::kBIT_AND: { |
- __ vandq(result, left, right); |
- break; |
- } |
- case Token::kBIT_OR: { |
- __ vorrq(result, left, right); |
- break; |
- } |
- case Token::kBIT_XOR: { |
- __ veorq(result, left, right); |
- break; |
- } |
- case Token::kADD: |
- __ vaddqi(kWord, result, left, right); |
- break; |
- case Token::kSUB: |
- __ vsubqi(kWord, result, left, right); |
- break; |
+ case Token::kBIT_AND: __ vandq(result, left, right); break; |
+ case Token::kBIT_OR: __ vorrq(result, left, right); break; |
+ case Token::kBIT_XOR: __ veorq(result, left, right); break; |
+ case Token::kADD: __ vaddqi(kWord, result, left, right); break; |
+ case Token::kSUB: __ vsubqi(kWord, result, left, right); break; |
default: UNREACHABLE(); |
} |
} |