OLD | NEW |
---|---|
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stdarg.h> | 5 #include <stdarg.h> |
6 #include <stdlib.h> | 6 #include <stdlib.h> |
7 #include <cmath> | 7 #include <cmath> |
8 | 8 |
9 #if V8_TARGET_ARCH_ARM | 9 #if V8_TARGET_ARCH_ARM |
10 | 10 |
(...skipping 3965 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3976 for (int i = 0; i < 4; i++) { | 3976 for (int i = 0; i < 4; i++) { |
3977 src1[i] *= src2[i]; | 3977 src1[i] *= src2[i]; |
3978 } | 3978 } |
3979 break; | 3979 break; |
3980 } | 3980 } |
3981 default: | 3981 default: |
3982 UNIMPLEMENTED(); | 3982 UNIMPLEMENTED(); |
3983 break; | 3983 break; |
3984 } | 3984 } |
3985 set_q_register(Vd, src1); | 3985 set_q_register(Vd, src1); |
3986 } else if (instr->Bits(21, 20) == 0 && instr->Bits(11, 8) == 0xe && | |
3987 instr->Bit(4) == 0) { | |
3988 int Vd = instr->VFPDRegValue(kSimd128Precision); | |
3989 int Vm = instr->VFPMRegValue(kSimd128Precision); | |
3990 int Vn = instr->VFPNRegValue(kSimd128Precision); | |
3991 uint32_t src1[4], src2[4]; | |
3992 get_q_register(Vn, src1); | |
3993 get_q_register(Vm, src2); | |
3994 for (int i = 0; i < 4; i++) { | |
3995 src1[i] = bit_cast<float>(src1[i]) == bit_cast<float>(src2[i]) | |
3996 ? 0xFFFFFFFF | |
3997 : 0; | |
3998 } | |
3999 set_q_register(Vd, src1); | |
4000 | |
3986 } else { | 4001 } else { |
3987 UNIMPLEMENTED(); | 4002 UNIMPLEMENTED(); |
3988 } | 4003 } |
3989 break; | 4004 break; |
3990 case 5: | 4005 case 5: |
3991 if ((instr->Bits(18, 16) == 0) && (instr->Bits(11, 6) == 0x28) && | 4006 if ((instr->Bits(18, 16) == 0) && (instr->Bits(11, 6) == 0x28) && |
3992 (instr->Bit(4) == 1)) { | 4007 (instr->Bit(4) == 1)) { |
3993 // vmovl signed | 4008 // vmovl signed |
3994 if ((instr->VdValue() & 1) != 0) UNIMPLEMENTED(); | 4009 if ((instr->VdValue() & 1) != 0) UNIMPLEMENTED(); |
3995 int Vd = (instr->Bit(22) << 3) | (instr->VdValue() >> 1); | 4010 int Vd = (instr->Bit(22) << 3) | (instr->VdValue() >> 1); |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4488 break; | 4503 break; |
4489 } | 4504 } |
4490 } | 4505 } |
4491 } else { | 4506 } else { |
4492 UNIMPLEMENTED(); | 4507 UNIMPLEMENTED(); |
4493 } | 4508 } |
4494 set_q_register(Vd, src); | 4509 set_q_register(Vd, src); |
4495 } else { | 4510 } else { |
4496 UNIMPLEMENTED(); | 4511 UNIMPLEMENTED(); |
4497 } | 4512 } |
4513 } else { | |
4514 UNIMPLEMENTED(); | |
bbudge
2016/12/20 01:16:57
We need this in case no case 5 matches occur.
| |
4498 } | 4515 } |
4499 break; | 4516 break; |
4500 case 8: | 4517 case 8: |
4501 if (instr->Bits(21, 20) == 0) { | 4518 if (instr->Bits(21, 20) == 0) { |
4502 // vst1 | 4519 // vst1 |
4503 int Vd = (instr->Bit(22) << 4) | instr->VdValue(); | 4520 int Vd = (instr->Bit(22) << 4) | instr->VdValue(); |
4504 int Rn = instr->VnValue(); | 4521 int Rn = instr->VnValue(); |
4505 int type = instr->Bits(11, 8); | 4522 int type = instr->Bits(11, 8); |
4506 int Rm = instr->VmValue(); | 4523 int Rm = instr->VmValue(); |
4507 int32_t address = get_register(Rn); | 4524 int32_t address = get_register(Rn); |
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5006 set_register(sp, current_sp + sizeof(uintptr_t)); | 5023 set_register(sp, current_sp + sizeof(uintptr_t)); |
5007 return address; | 5024 return address; |
5008 } | 5025 } |
5009 | 5026 |
5010 } // namespace internal | 5027 } // namespace internal |
5011 } // namespace v8 | 5028 } // namespace v8 |
5012 | 5029 |
5013 #endif // USE_SIMULATOR | 5030 #endif // USE_SIMULATOR |
5014 | 5031 |
5015 #endif // V8_TARGET_ARCH_ARM | 5032 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |