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 3834 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3845 if (instr->Bits(21, 20) == 2 && instr->Bits(11, 8) == 1 && | 3845 if (instr->Bits(21, 20) == 2 && instr->Bits(11, 8) == 1 && |
3846 instr->Bit(4) == 1) { | 3846 instr->Bit(4) == 1) { |
3847 // vmov Qd, Qm | 3847 // vmov Qd, Qm |
3848 int Vd = instr->VFPDRegValue(kSimd128Precision); | 3848 int Vd = instr->VFPDRegValue(kSimd128Precision); |
3849 int Vm = instr->VFPMRegValue(kSimd128Precision); | 3849 int Vm = instr->VFPMRegValue(kSimd128Precision); |
3850 uint32_t data[4]; | 3850 uint32_t data[4]; |
3851 get_q_register(Vm, data); | 3851 get_q_register(Vm, data); |
3852 set_q_register(Vd, data); | 3852 set_q_register(Vd, data); |
3853 } else if (instr->Bits(11, 8) == 8) { | 3853 } else if (instr->Bits(11, 8) == 8) { |
3854 // vadd/vtst | 3854 // vadd/vtst |
3855 int size = static_cast<NeonSize>(instr->Bits(21, 20)); | 3855 NeonSize size = static_cast<NeonSize>(instr->Bits(21, 20)); |
3856 int Vd = instr->VFPDRegValue(kSimd128Precision); | 3856 int Vd = instr->VFPDRegValue(kSimd128Precision); |
3857 int Vm = instr->VFPMRegValue(kSimd128Precision); | 3857 int Vm = instr->VFPMRegValue(kSimd128Precision); |
3858 int Vn = instr->VFPNRegValue(kSimd128Precision); | 3858 int Vn = instr->VFPNRegValue(kSimd128Precision); |
3859 uint32_t src1[4], src2[4]; | 3859 uint32_t src1[4], src2[4]; |
3860 get_q_register(Vn, src1); | 3860 get_q_register(Vn, src1); |
3861 get_q_register(Vm, src2); | 3861 get_q_register(Vm, src2); |
3862 if (instr->Bit(4) == 0) { | 3862 if (instr->Bit(4) == 0) { |
3863 // vadd.i<size> Qd, Qm, Qn. | 3863 // vadd.i<size> Qd, Qm, Qn. |
3864 switch (size) { | 3864 switch (size) { |
3865 case Neon8: { | 3865 case Neon8: { |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
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 && | 3986 } else if (instr->Bits(21, 20) == 0 && instr->Bits(11, 8) == 0xe && |
3987 instr->Bit(4) == 0) { | 3987 instr->Bit(4) == 0) { |
3988 // vceq.f32 Qd, Qm, Qn | |
3988 int Vd = instr->VFPDRegValue(kSimd128Precision); | 3989 int Vd = instr->VFPDRegValue(kSimd128Precision); |
3989 int Vm = instr->VFPMRegValue(kSimd128Precision); | 3990 int Vm = instr->VFPMRegValue(kSimd128Precision); |
3990 int Vn = instr->VFPNRegValue(kSimd128Precision); | 3991 int Vn = instr->VFPNRegValue(kSimd128Precision); |
3991 uint32_t src1[4], src2[4]; | 3992 uint32_t src1[4], src2[4]; |
3992 get_q_register(Vn, src1); | 3993 get_q_register(Vn, src1); |
3993 get_q_register(Vm, src2); | 3994 get_q_register(Vm, src2); |
3994 for (int i = 0; i < 4; i++) { | 3995 for (int i = 0; i < 4; i++) { |
3995 src1[i] = bit_cast<float>(src1[i]) == bit_cast<float>(src2[i]) | 3996 src1[i] = bit_cast<float>(src1[i]) == bit_cast<float>(src2[i]) |
3996 ? 0xFFFFFFFF | 3997 ? 0xFFFFFFFF |
3997 : 0; | 3998 : 0; |
3998 } | 3999 } |
3999 set_q_register(Vd, src1); | 4000 set_q_register(Vd, src1); |
4000 | 4001 |
4002 } else if (instr->Bits(11, 8) == 0x3) { | |
4003 // vcge/vcgt.s<size> Qd, Qm, Qn. | |
4004 bool ge = instr->Bit(4) == 1; | |
4005 NeonSize size = static_cast<NeonSize>(instr->Bits(21, 20)); | |
4006 int Vd = instr->VFPDRegValue(kSimd128Precision); | |
4007 int Vm = instr->VFPMRegValue(kSimd128Precision); | |
4008 int Vn = instr->VFPNRegValue(kSimd128Precision); | |
4009 uint32_t src1[4], src2[4]; | |
4010 get_q_register(Vn, src1); | |
4011 get_q_register(Vm, src2); | |
4012 switch (size) { | |
4013 case Neon8: { | |
4014 int8_t* s1 = reinterpret_cast<int8_t*>(src1); | |
martyn.capewell
2017/01/06 19:10:21
It's worth implementing some new get/set_q_registe
bbudge
2017/01/10 11:17:51
Yes, good idea. Done.
| |
4015 int8_t* s2 = reinterpret_cast<int8_t*>(src2); | |
4016 for (int i = 0; i < 16; i++) { | |
4017 if (ge) | |
4018 s1[i] = s1[i] >= s2[i] ? 0xFF : 0; | |
4019 else | |
4020 s1[i] = s1[i] > s2[i] ? 0xFF : 0; | |
4021 } | |
4022 break; | |
4023 } | |
4024 case Neon16: { | |
4025 int16_t s1[8], s2[8]; | |
4026 memcpy(s1, src1, sizeof(s1)); | |
4027 memcpy(s2, src2, sizeof(s2)); | |
4028 for (int i = 0; i < 8; i++) { | |
4029 if (ge) | |
4030 s1[i] = s1[i] >= s2[i] ? 0xffffu : 0; | |
4031 else | |
4032 s1[i] = s1[i] > s2[i] ? 0xffffu : 0; | |
4033 } | |
4034 memcpy(src1, s1, sizeof(src1)); | |
4035 break; | |
4036 } | |
4037 case Neon32: { | |
4038 int32_t* s1 = reinterpret_cast<int32_t*>(src1); | |
4039 int32_t* s2 = reinterpret_cast<int32_t*>(src2); | |
4040 for (int i = 0; i < 4; i++) { | |
4041 if (ge) | |
4042 s1[i] = s1[i] >= s2[i] ? 0xFFFFFFFF : 0; | |
4043 else | |
4044 s1[i] = s1[i] > s2[i] ? 0xFFFFFFFF : 0; | |
4045 } | |
4046 break; | |
4047 } | |
4048 default: | |
4049 UNREACHABLE(); | |
4050 break; | |
4051 } | |
4052 set_q_register(Vd, src1); | |
4001 } else { | 4053 } else { |
4002 UNIMPLEMENTED(); | 4054 UNIMPLEMENTED(); |
4003 } | 4055 } |
4004 break; | 4056 break; |
4005 case 5: | 4057 case 5: |
4006 if ((instr->Bits(18, 16) == 0) && (instr->Bits(11, 6) == 0x28) && | 4058 if ((instr->Bits(18, 16) == 0) && (instr->Bits(11, 6) == 0x28) && |
4007 (instr->Bit(4) == 1)) { | 4059 (instr->Bit(4) == 1)) { |
4008 // vmovl signed | 4060 // vmovl signed |
4009 if ((instr->VdValue() & 1) != 0) UNIMPLEMENTED(); | 4061 if ((instr->VdValue() & 1) != 0) UNIMPLEMENTED(); |
4010 int Vd = (instr->Bit(22) << 3) | (instr->VdValue() >> 1); | 4062 int Vd = (instr->Bit(22) << 3) | (instr->VdValue() >> 1); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4043 d[i] = s2[i - boundary]; | 4095 d[i] = s2[i - boundary]; |
4044 } | 4096 } |
4045 set_q_register(Vd, dst); | 4097 set_q_register(Vd, dst); |
4046 } else { | 4098 } else { |
4047 UNIMPLEMENTED(); | 4099 UNIMPLEMENTED(); |
4048 } | 4100 } |
4049 break; | 4101 break; |
4050 case 6: | 4102 case 6: |
4051 if (instr->Bits(11, 8) == 8 && instr->Bit(4) == 0) { | 4103 if (instr->Bits(11, 8) == 8 && instr->Bit(4) == 0) { |
4052 // vsub.size Qd, Qm, Qn. | 4104 // vsub.size Qd, Qm, Qn. |
4053 int size = static_cast<NeonSize>(instr->Bits(21, 20)); | 4105 NeonSize size = static_cast<NeonSize>(instr->Bits(21, 20)); |
4054 int Vd = instr->VFPDRegValue(kSimd128Precision); | 4106 int Vd = instr->VFPDRegValue(kSimd128Precision); |
4055 int Vm = instr->VFPMRegValue(kSimd128Precision); | 4107 int Vm = instr->VFPMRegValue(kSimd128Precision); |
4056 int Vn = instr->VFPNRegValue(kSimd128Precision); | 4108 int Vn = instr->VFPNRegValue(kSimd128Precision); |
4057 uint32_t src1[4], src2[4]; | 4109 uint32_t src1[4], src2[4]; |
4058 get_q_register(Vn, src1); | 4110 get_q_register(Vn, src1); |
4059 get_q_register(Vm, src2); | 4111 get_q_register(Vm, src2); |
4060 switch (size) { | 4112 switch (size) { |
4061 case Neon8: { | 4113 case Neon8: { |
4062 uint8_t* s1 = reinterpret_cast<uint8_t*>(src1); | 4114 uint8_t* s1 = reinterpret_cast<uint8_t*>(src1); |
4063 uint8_t* s2 = reinterpret_cast<uint8_t*>(src2); | 4115 uint8_t* s2 = reinterpret_cast<uint8_t*>(src2); |
(...skipping 18 matching lines...) Expand all Loading... | |
4082 } | 4134 } |
4083 break; | 4135 break; |
4084 } | 4136 } |
4085 default: | 4137 default: |
4086 UNREACHABLE(); | 4138 UNREACHABLE(); |
4087 break; | 4139 break; |
4088 } | 4140 } |
4089 set_q_register(Vd, src1); | 4141 set_q_register(Vd, src1); |
4090 } else if (instr->Bits(11, 8) == 8 && instr->Bit(4) == 1) { | 4142 } else if (instr->Bits(11, 8) == 8 && instr->Bit(4) == 1) { |
4091 // vceq.size Qd, Qm, Qn. | 4143 // vceq.size Qd, Qm, Qn. |
4092 int size = static_cast<NeonSize>(instr->Bits(21, 20)); | 4144 NeonSize size = static_cast<NeonSize>(instr->Bits(21, 20)); |
4093 int Vd = instr->VFPDRegValue(kSimd128Precision); | 4145 int Vd = instr->VFPDRegValue(kSimd128Precision); |
4094 int Vm = instr->VFPMRegValue(kSimd128Precision); | 4146 int Vm = instr->VFPMRegValue(kSimd128Precision); |
4095 int Vn = instr->VFPNRegValue(kSimd128Precision); | 4147 int Vn = instr->VFPNRegValue(kSimd128Precision); |
4096 uint32_t src1[4], src2[4]; | 4148 uint32_t src1[4], src2[4]; |
4097 get_q_register(Vn, src1); | 4149 get_q_register(Vn, src1); |
4098 get_q_register(Vm, src2); | 4150 get_q_register(Vm, src2); |
4099 switch (size) { | 4151 switch (size) { |
4100 case Neon8: { | 4152 case Neon8: { |
4101 uint8_t* s1 = reinterpret_cast<uint8_t*>(src1); | 4153 uint8_t* s1 = reinterpret_cast<uint8_t*>(src1); |
4102 uint8_t* s2 = reinterpret_cast<uint8_t*>(src2); | 4154 uint8_t* s2 = reinterpret_cast<uint8_t*>(src2); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4171 int Vn = instr->VFPNRegValue(kSimd128Precision); | 4223 int Vn = instr->VFPNRegValue(kSimd128Precision); |
4172 int Vm = instr->VFPMRegValue(kSimd128Precision); | 4224 int Vm = instr->VFPMRegValue(kSimd128Precision); |
4173 uint32_t src1[4], src2[4]; | 4225 uint32_t src1[4], src2[4]; |
4174 get_q_register(Vn, src1); | 4226 get_q_register(Vn, src1); |
4175 get_q_register(Vm, src2); | 4227 get_q_register(Vm, src2); |
4176 for (int i = 0; i < 4; i++) { | 4228 for (int i = 0; i < 4; i++) { |
4177 src1[i] = bit_cast<uint32_t>(bit_cast<float>(src1[i]) * | 4229 src1[i] = bit_cast<uint32_t>(bit_cast<float>(src1[i]) * |
4178 bit_cast<float>(src2[i])); | 4230 bit_cast<float>(src2[i])); |
4179 } | 4231 } |
4180 set_q_register(Vd, src1); | 4232 set_q_register(Vd, src1); |
4233 } else if (instr->Bit(20) == 0 && instr->Bits(11, 8) == 0xe && | |
4234 instr->Bit(4) == 0) { | |
4235 // vcge/vcgt.f32 Qd, Qm, Qn | |
4236 bool ge = instr->Bit(21) == 0; | |
4237 int Vd = instr->VFPDRegValue(kSimd128Precision); | |
4238 int Vm = instr->VFPMRegValue(kSimd128Precision); | |
4239 int Vn = instr->VFPNRegValue(kSimd128Precision); | |
4240 uint32_t src1[4], src2[4]; | |
4241 get_q_register(Vn, src1); | |
4242 get_q_register(Vm, src2); | |
4243 for (int i = 0; i < 4; i++) { | |
4244 if (ge) { | |
4245 src1[i] = bit_cast<float>(src1[i]) >= bit_cast<float>(src2[i]) | |
4246 ? 0xFFFFFFFF | |
4247 : 0; | |
4248 } else { | |
4249 src1[i] = bit_cast<float>(src1[i]) > bit_cast<float>(src2[i]) | |
4250 ? 0xFFFFFFFF | |
4251 : 0; | |
4252 } | |
4253 } | |
4254 set_q_register(Vd, src1); | |
4255 | |
4256 } else if (instr->Bits(11, 8) == 0x3) { | |
4257 // vcge/vcgt.u<size> Qd, Qm, Qn. | |
4258 bool ge = instr->Bit(4) == 1; | |
4259 NeonSize size = static_cast<NeonSize>(instr->Bits(21, 20)); | |
4260 int Vd = instr->VFPDRegValue(kSimd128Precision); | |
4261 int Vm = instr->VFPMRegValue(kSimd128Precision); | |
4262 int Vn = instr->VFPNRegValue(kSimd128Precision); | |
4263 uint32_t src1[4], src2[4]; | |
4264 get_q_register(Vn, src1); | |
4265 get_q_register(Vm, src2); | |
4266 switch (size) { | |
4267 case Neon8: { | |
4268 uint8_t* s1 = reinterpret_cast<uint8_t*>(src1); | |
4269 uint8_t* s2 = reinterpret_cast<uint8_t*>(src2); | |
4270 for (int i = 0; i < 16; i++) { | |
4271 if (ge) | |
4272 s1[i] = s1[i] >= s2[i] ? 0xFF : 0; | |
4273 else | |
4274 s1[i] = s1[i] > s2[i] ? 0xFF : 0; | |
4275 } | |
4276 break; | |
4277 } | |
4278 case Neon16: { | |
4279 uint16_t s1[8], s2[8]; | |
4280 memcpy(s1, src1, sizeof(s1)); | |
4281 memcpy(s2, src2, sizeof(s2)); | |
4282 for (int i = 0; i < 8; i++) { | |
4283 if (ge) | |
4284 s1[i] = s1[i] >= s2[i] ? 0xffffu : 0; | |
4285 else | |
4286 s1[i] = s1[i] > s2[i] ? 0xffffu : 0; | |
4287 } | |
4288 memcpy(src1, s1, sizeof(src1)); | |
4289 break; | |
4290 } | |
4291 case Neon32: { | |
4292 for (int i = 0; i < 4; i++) { | |
4293 if (ge) | |
4294 src1[i] = src1[i] >= src2[i] ? 0xFFFFFFFF : 0; | |
4295 else | |
4296 src1[i] = src1[i] > src2[i] ? 0xFFFFFFFF : 0; | |
4297 } | |
4298 break; | |
4299 } | |
4300 default: | |
4301 UNREACHABLE(); | |
4302 break; | |
4303 } | |
4304 set_q_register(Vd, src1); | |
4181 } else { | 4305 } else { |
4182 UNIMPLEMENTED(); | 4306 UNIMPLEMENTED(); |
4183 } | 4307 } |
4184 break; | 4308 break; |
4185 case 7: | 4309 case 7: |
4186 if ((instr->Bits(18, 16) == 0) && (instr->Bits(11, 6) == 0x28) && | 4310 if ((instr->Bits(18, 16) == 0) && (instr->Bits(11, 6) == 0x28) && |
4187 (instr->Bit(4) == 1)) { | 4311 (instr->Bit(4) == 1)) { |
4188 // vmovl unsigned | 4312 // vmovl unsigned |
4189 if ((instr->VdValue() & 1) != 0) UNIMPLEMENTED(); | 4313 if ((instr->VdValue() & 1) != 0) UNIMPLEMENTED(); |
4190 int Vd = (instr->Bit(22) << 3) | (instr->VdValue() >> 1); | 4314 int Vd = (instr->Bit(22) << 3) | (instr->VdValue() >> 1); |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4292 result |= | 4416 result |= |
4293 ((table >> ((index % kDoubleSize) * kBitsPerByte)) & 0xFF) | 4417 ((table >> ((index % kDoubleSize) * kBitsPerByte)) & 0xFF) |
4294 << shift; | 4418 << shift; |
4295 } else if (vtbx) { | 4419 } else if (vtbx) { |
4296 result |= destination & (0xFFull << shift); | 4420 result |= destination & (0xFFull << shift); |
4297 } | 4421 } |
4298 } | 4422 } |
4299 set_d_register(vd, &result); | 4423 set_d_register(vd, &result); |
4300 } else if (instr->Bits(17, 16) == 0x2 && instr->Bits(11, 6) == 0x7) { | 4424 } else if (instr->Bits(17, 16) == 0x2 && instr->Bits(11, 6) == 0x7) { |
4301 // vzip.<size> Qd, Qm. | 4425 // vzip.<size> Qd, Qm. |
4302 int size = static_cast<NeonSize>(instr->Bits(19, 18)); | 4426 NeonSize size = static_cast<NeonSize>(instr->Bits(19, 18)); |
4303 int Vd = instr->VFPDRegValue(kSimd128Precision); | 4427 int Vd = instr->VFPDRegValue(kSimd128Precision); |
4304 int Vm = instr->VFPMRegValue(kSimd128Precision); | 4428 int Vm = instr->VFPMRegValue(kSimd128Precision); |
4305 uint32_t src1[4], src2[4], dst1[4], dst2[4]; | 4429 uint32_t src1[4], src2[4], dst1[4], dst2[4]; |
4306 get_q_register(Vd, src1); | 4430 get_q_register(Vd, src1); |
4307 get_q_register(Vm, src2); | 4431 get_q_register(Vm, src2); |
4308 switch (size) { | 4432 switch (size) { |
4309 case Neon8: { | 4433 case Neon8: { |
4310 uint8_t* s1 = reinterpret_cast<uint8_t*>(src1); | 4434 uint8_t* s1 = reinterpret_cast<uint8_t*>(src1); |
4311 uint8_t* s2 = reinterpret_cast<uint8_t*>(src2); | 4435 uint8_t* s2 = reinterpret_cast<uint8_t*>(src2); |
4312 uint8_t* d1 = reinterpret_cast<uint8_t*>(dst1); | 4436 uint8_t* d1 = reinterpret_cast<uint8_t*>(dst1); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4345 default: | 4469 default: |
4346 UNREACHABLE(); | 4470 UNREACHABLE(); |
4347 break; | 4471 break; |
4348 } | 4472 } |
4349 set_q_register(Vd, dst1); | 4473 set_q_register(Vd, dst1); |
4350 set_q_register(Vm, dst2); | 4474 set_q_register(Vm, dst2); |
4351 } else if (instr->Bits(17, 16) == 0 && instr->Bits(11, 9) == 0) { | 4475 } else if (instr->Bits(17, 16) == 0 && instr->Bits(11, 9) == 0) { |
4352 // vrev<op>.size Qd, Qm | 4476 // vrev<op>.size Qd, Qm |
4353 int Vd = instr->VFPDRegValue(kSimd128Precision); | 4477 int Vd = instr->VFPDRegValue(kSimd128Precision); |
4354 int Vm = instr->VFPMRegValue(kSimd128Precision); | 4478 int Vm = instr->VFPMRegValue(kSimd128Precision); |
4355 int size = static_cast<NeonSize>(instr->Bits(19, 18)); | 4479 NeonSize size = static_cast<NeonSize>(instr->Bits(19, 18)); |
4356 NeonSize op = static_cast<NeonSize>(static_cast<int>(Neon64) - | 4480 NeonSize op = static_cast<NeonSize>(static_cast<int>(Neon64) - |
4357 instr->Bits(8, 7)); | 4481 instr->Bits(8, 7)); |
4358 uint32_t src[4]; | 4482 uint32_t src[4]; |
4359 get_q_register(Vm, src); | 4483 get_q_register(Vm, src); |
4360 switch (op) { | 4484 switch (op) { |
4361 case Neon16: { | 4485 case Neon16: { |
4362 DCHECK_EQ(Neon8, size); | 4486 DCHECK_EQ(Neon8, size); |
4363 uint8_t* s = reinterpret_cast<uint8_t*>(src); | 4487 uint8_t* s = reinterpret_cast<uint8_t*>(src); |
4364 for (int i = 0; i < 16; i += 2) { | 4488 for (int i = 0; i < 16; i += 2) { |
4365 std::swap(s[i], s[i + 1]); | 4489 std::swap(s[i], s[i + 1]); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4418 break; | 4542 break; |
4419 } | 4543 } |
4420 default: | 4544 default: |
4421 UNREACHABLE(); | 4545 UNREACHABLE(); |
4422 break; | 4546 break; |
4423 } | 4547 } |
4424 set_q_register(Vd, src); | 4548 set_q_register(Vd, src); |
4425 } else if (instr->Bits(17, 16) == 0x1 && instr->Bit(11) == 0) { | 4549 } else if (instr->Bits(17, 16) == 0x1 && instr->Bit(11) == 0) { |
4426 int Vd = instr->VFPDRegValue(kSimd128Precision); | 4550 int Vd = instr->VFPDRegValue(kSimd128Precision); |
4427 int Vm = instr->VFPMRegValue(kSimd128Precision); | 4551 int Vm = instr->VFPMRegValue(kSimd128Precision); |
4428 int size = static_cast<NeonSize>(instr->Bits(19, 18)); | 4552 NeonSize size = static_cast<NeonSize>(instr->Bits(19, 18)); |
4429 uint32_t src[4]; | 4553 uint32_t src[4]; |
4430 get_q_register(Vm, src); | 4554 get_q_register(Vm, src); |
4431 if (instr->Bits(9, 6) == 0xd) { | 4555 if (instr->Bits(9, 6) == 0xd) { |
4432 // vabs<type>.<size> Qd, Qm | 4556 // vabs<type>.<size> Qd, Qm |
4433 if (instr->Bit(10) != 0) { | 4557 if (instr->Bit(10) != 0) { |
4434 // floating point (clear sign bits) | 4558 // floating point (clear sign bits) |
4435 for (int i = 0; i < 4; i++) { | 4559 for (int i = 0; i < 4; i++) { |
4436 src[i] &= ~0x80000000; | 4560 src[i] &= ~0x80000000; |
4437 } | 4561 } |
4438 } else { | 4562 } else { |
(...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5023 set_register(sp, current_sp + sizeof(uintptr_t)); | 5147 set_register(sp, current_sp + sizeof(uintptr_t)); |
5024 return address; | 5148 return address; |
5025 } | 5149 } |
5026 | 5150 |
5027 } // namespace internal | 5151 } // namespace internal |
5028 } // namespace v8 | 5152 } // namespace v8 |
5029 | 5153 |
5030 #endif // USE_SIMULATOR | 5154 #endif // USE_SIMULATOR |
5031 | 5155 |
5032 #endif // V8_TARGET_ARCH_ARM | 5156 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |