| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32. |
| 6 #if defined(TARGET_ARCH_IA32) | 6 #if defined(TARGET_ARCH_IA32) |
| 7 | 7 |
| 8 #include "vm/intermediate_language.h" | 8 #include "vm/intermediate_language.h" |
| 9 | 9 |
| 10 #include "lib/error.h" | 10 #include "lib/error.h" |
| (...skipping 2983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2994 | 2994 |
| 2995 | 2995 |
| 2996 void Float32x4ConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 2996 void Float32x4ConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 2997 XmmRegister v0 = locs()->in(0).fpu_reg(); | 2997 XmmRegister v0 = locs()->in(0).fpu_reg(); |
| 2998 XmmRegister v1 = locs()->in(1).fpu_reg(); | 2998 XmmRegister v1 = locs()->in(1).fpu_reg(); |
| 2999 XmmRegister v2 = locs()->in(2).fpu_reg(); | 2999 XmmRegister v2 = locs()->in(2).fpu_reg(); |
| 3000 XmmRegister v3 = locs()->in(3).fpu_reg(); | 3000 XmmRegister v3 = locs()->in(3).fpu_reg(); |
| 3001 ASSERT(v0 == locs()->out().fpu_reg()); | 3001 ASSERT(v0 == locs()->out().fpu_reg()); |
| 3002 __ subl(ESP, Immediate(16)); | 3002 __ subl(ESP, Immediate(16)); |
| 3003 __ cvtsd2ss(v0, v0); | 3003 __ cvtsd2ss(v0, v0); |
| 3004 __ movss(Address(ESP, -16), v0); | 3004 __ movss(Address(ESP, 0), v0); |
| 3005 __ movsd(v0, v1); | 3005 __ movsd(v0, v1); |
| 3006 __ cvtsd2ss(v0, v0); | 3006 __ cvtsd2ss(v0, v0); |
| 3007 __ movss(Address(ESP, -12), v0); | 3007 __ movss(Address(ESP, 4), v0); |
| 3008 __ movsd(v0, v2); | 3008 __ movsd(v0, v2); |
| 3009 __ cvtsd2ss(v0, v0); | 3009 __ cvtsd2ss(v0, v0); |
| 3010 __ movss(Address(ESP, -8), v0); | 3010 __ movss(Address(ESP, 8), v0); |
| 3011 __ movsd(v0, v3); | 3011 __ movsd(v0, v3); |
| 3012 __ cvtsd2ss(v0, v0); | 3012 __ cvtsd2ss(v0, v0); |
| 3013 __ movss(Address(ESP, -4), v0); | 3013 __ movss(Address(ESP, 12), v0); |
| 3014 __ movups(v0, Address(ESP, -16)); | 3014 __ movups(v0, Address(ESP, 0)); |
| 3015 __ addl(ESP, Immediate(16)); | 3015 __ addl(ESP, Immediate(16)); |
| 3016 } | 3016 } |
| 3017 | 3017 |
| 3018 | 3018 |
| 3019 LocationSummary* Float32x4ZeroInstr::MakeLocationSummary() const { | 3019 LocationSummary* Float32x4ZeroInstr::MakeLocationSummary() const { |
| 3020 const intptr_t kNumInputs = 0; | 3020 const intptr_t kNumInputs = 0; |
| 3021 const intptr_t kNumTemps = 0; | 3021 const intptr_t kNumTemps = 0; |
| 3022 LocationSummary* summary = | 3022 LocationSummary* summary = |
| 3023 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); | 3023 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3024 summary->set_out(Location::RequiresFpuRegister()); | 3024 summary->set_out(Location::RequiresFpuRegister()); |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3240 const intptr_t kNumInputs = 2; | 3240 const intptr_t kNumInputs = 2; |
| 3241 const intptr_t kNumTemps = 0; | 3241 const intptr_t kNumTemps = 0; |
| 3242 LocationSummary* summary = | 3242 LocationSummary* summary = |
| 3243 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); | 3243 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3244 summary->set_in(0, Location::RequiresFpuRegister()); | 3244 summary->set_in(0, Location::RequiresFpuRegister()); |
| 3245 summary->set_in(1, Location::RequiresFpuRegister()); | 3245 summary->set_in(1, Location::RequiresFpuRegister()); |
| 3246 summary->set_out(Location::SameAsFirstInput()); | 3246 summary->set_out(Location::SameAsFirstInput()); |
| 3247 return summary; | 3247 return summary; |
| 3248 } | 3248 } |
| 3249 | 3249 |
| 3250 |
| 3250 void Float32x4WithInstr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3251 void Float32x4WithInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3251 XmmRegister replacement = locs()->in(0).fpu_reg(); | 3252 XmmRegister replacement = locs()->in(0).fpu_reg(); |
| 3252 XmmRegister value = locs()->in(1).fpu_reg(); | 3253 XmmRegister value = locs()->in(1).fpu_reg(); |
| 3253 | 3254 |
| 3254 ASSERT(locs()->out().fpu_reg() == replacement); | 3255 ASSERT(locs()->out().fpu_reg() == replacement); |
| 3255 | 3256 |
| 3256 switch (op_kind()) { | 3257 switch (op_kind()) { |
| 3257 case MethodRecognizer::kFloat32x4WithX: | 3258 case MethodRecognizer::kFloat32x4WithX: |
| 3258 __ cvtsd2ss(replacement, replacement); | 3259 __ cvtsd2ss(replacement, replacement); |
| 3259 __ subl(ESP, Immediate(16)); | 3260 __ subl(ESP, Immediate(16)); |
| 3260 // Move value to stack. | 3261 // Move value to stack. |
| 3261 __ movups(Address(ESP, -16), value); | 3262 __ movups(Address(ESP, 0), value); |
| 3262 // Write over X value. | 3263 // Write over X value. |
| 3263 __ movss(Address(ESP, -16), replacement); | 3264 __ movss(Address(ESP, 0), replacement); |
| 3264 // Move updated value into output register. | 3265 // Move updated value into output register. |
| 3265 __ movups(replacement, Address(ESP, -16)); | 3266 __ movups(replacement, Address(ESP, 0)); |
| 3266 __ addl(ESP, Immediate(16)); | 3267 __ addl(ESP, Immediate(16)); |
| 3267 break; | 3268 break; |
| 3268 case MethodRecognizer::kFloat32x4WithY: | 3269 case MethodRecognizer::kFloat32x4WithY: |
| 3269 __ cvtsd2ss(replacement, replacement); | 3270 __ cvtsd2ss(replacement, replacement); |
| 3270 __ subl(ESP, Immediate(16)); | 3271 __ subl(ESP, Immediate(16)); |
| 3271 // Move value to stack. | 3272 // Move value to stack. |
| 3272 __ movups(Address(ESP, -16), value); | 3273 __ movups(Address(ESP, 0), value); |
| 3273 // Write over Y value. | 3274 // Write over Y value. |
| 3274 __ movss(Address(ESP, -12), replacement); | 3275 __ movss(Address(ESP, 4), replacement); |
| 3275 // Move updated value into output register. | 3276 // Move updated value into output register. |
| 3276 __ movups(replacement, Address(ESP, -16)); | 3277 __ movups(replacement, Address(ESP, 0)); |
| 3277 __ addl(ESP, Immediate(16)); | 3278 __ addl(ESP, Immediate(16)); |
| 3278 break; | 3279 break; |
| 3279 case MethodRecognizer::kFloat32x4WithZ: | 3280 case MethodRecognizer::kFloat32x4WithZ: |
| 3280 __ cvtsd2ss(replacement, replacement); | 3281 __ cvtsd2ss(replacement, replacement); |
| 3281 __ subl(ESP, Immediate(16)); | 3282 __ subl(ESP, Immediate(16)); |
| 3282 // Move value to stack. | 3283 // Move value to stack. |
| 3283 __ movups(Address(ESP, -16), value); | 3284 __ movups(Address(ESP, 0), value); |
| 3284 // Write over Z value. | 3285 // Write over Z value. |
| 3285 __ movss(Address(ESP, -8), replacement); | 3286 __ movss(Address(ESP, 8), replacement); |
| 3286 // Move updated value into output register. | 3287 // Move updated value into output register. |
| 3287 __ movups(replacement, Address(ESP, -16)); | 3288 __ movups(replacement, Address(ESP, 0)); |
| 3288 __ addl(ESP, Immediate(16)); | 3289 __ addl(ESP, Immediate(16)); |
| 3289 break; | 3290 break; |
| 3290 case MethodRecognizer::kFloat32x4WithW: | 3291 case MethodRecognizer::kFloat32x4WithW: |
| 3291 __ cvtsd2ss(replacement, replacement); | 3292 __ cvtsd2ss(replacement, replacement); |
| 3292 __ subl(ESP, Immediate(16)); | 3293 __ subl(ESP, Immediate(16)); |
| 3293 // Move value to stack. | 3294 // Move value to stack. |
| 3294 __ movups(Address(ESP, -16), value); | 3295 __ movups(Address(ESP, 0), value); |
| 3295 // Write over W value. | 3296 // Write over W value. |
| 3296 __ movss(Address(ESP, -4), replacement); | 3297 __ movss(Address(ESP, 12), replacement); |
| 3297 // Move updated value into output register. | 3298 // Move updated value into output register. |
| 3298 __ movups(replacement, Address(ESP, -16)); | 3299 __ movups(replacement, Address(ESP, 0)); |
| 3299 __ addl(ESP, Immediate(16)); | 3300 __ addl(ESP, Immediate(16)); |
| 3300 break; | 3301 break; |
| 3301 default: UNREACHABLE(); | 3302 default: UNREACHABLE(); |
| 3302 } | 3303 } |
| 3303 } | 3304 } |
| 3304 | 3305 |
| 3305 | 3306 |
| 3306 LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const { | 3307 LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const { |
| 3307 const intptr_t kNumInputs = 1; | 3308 const intptr_t kNumInputs = 1; |
| 3308 const intptr_t kNumTemps = 0; | 3309 const intptr_t kNumTemps = 0; |
| 3309 LocationSummary* summary = | 3310 LocationSummary* summary = |
| 3310 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); | 3311 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3311 summary->set_in(0, Location::RequiresFpuRegister()); | 3312 summary->set_in(0, Location::RequiresFpuRegister()); |
| 3312 summary->set_out(Location::SameAsFirstInput()); | 3313 summary->set_out(Location::SameAsFirstInput()); |
| 3313 return summary; | 3314 return summary; |
| 3314 } | 3315 } |
| 3315 | 3316 |
| 3316 | 3317 |
| 3317 void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { | 3318 void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3318 // NOP. | 3319 // NOP. |
| 3319 } | 3320 } |
| 3320 | 3321 |
| 3321 | 3322 |
| 3323 LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const { |
| 3324 const intptr_t kNumInputs = 4; |
| 3325 const intptr_t kNumTemps = 0; |
| 3326 LocationSummary* summary = |
| 3327 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3328 summary->set_in(0, Location::RequiresRegister()); |
| 3329 summary->set_in(1, Location::RequiresRegister()); |
| 3330 summary->set_in(2, Location::RequiresRegister()); |
| 3331 summary->set_in(3, Location::RequiresRegister()); |
| 3332 summary->set_out(Location::RequiresFpuRegister()); |
| 3333 return summary; |
| 3334 } |
| 3335 |
| 3336 |
| 3337 void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3338 Register v0 = locs()->in(0).reg(); |
| 3339 Register v1 = locs()->in(1).reg(); |
| 3340 Register v2 = locs()->in(2).reg(); |
| 3341 Register v3 = locs()->in(3).reg(); |
| 3342 XmmRegister result = locs()->out().fpu_reg(); |
| 3343 Label x_false, x_done; |
| 3344 Label y_false, y_done; |
| 3345 Label z_false, z_done; |
| 3346 Label w_false, w_done; |
| 3347 __ subl(ESP, Immediate(16)); |
| 3348 __ CompareObject(v0, Bool::True()); |
| 3349 __ j(NOT_EQUAL, &x_false); |
| 3350 __ movl(Address(ESP, 0), Immediate(0xFFFFFFFF)); |
| 3351 __ jmp(&x_done); |
| 3352 __ Bind(&x_false); |
| 3353 __ movl(Address(ESP, 0), Immediate(0x0)); |
| 3354 __ Bind(&x_done); |
| 3355 |
| 3356 __ CompareObject(v1, Bool::True()); |
| 3357 __ j(NOT_EQUAL, &y_false); |
| 3358 __ movl(Address(ESP, 4), Immediate(0xFFFFFFFF)); |
| 3359 __ jmp(&y_done); |
| 3360 __ Bind(&y_false); |
| 3361 __ movl(Address(ESP, 4), Immediate(0x0)); |
| 3362 __ Bind(&y_done); |
| 3363 |
| 3364 __ CompareObject(v2, Bool::True()); |
| 3365 __ j(NOT_EQUAL, &z_false); |
| 3366 __ movl(Address(ESP, 8), Immediate(0xFFFFFFFF)); |
| 3367 __ jmp(&z_done); |
| 3368 __ Bind(&z_false); |
| 3369 __ movl(Address(ESP, 8), Immediate(0x0)); |
| 3370 __ Bind(&z_done); |
| 3371 |
| 3372 __ CompareObject(v3, Bool::True()); |
| 3373 __ j(NOT_EQUAL, &w_false); |
| 3374 __ movl(Address(ESP, 12), Immediate(0xFFFFFFFF)); |
| 3375 __ jmp(&w_done); |
| 3376 __ Bind(&w_false); |
| 3377 __ movl(Address(ESP, 12), Immediate(0x0)); |
| 3378 __ Bind(&w_done); |
| 3379 |
| 3380 __ movups(result, Address(ESP, 0)); |
| 3381 __ addl(ESP, Immediate(16)); |
| 3382 } |
| 3383 |
| 3384 |
| 3385 LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const { |
| 3386 const intptr_t kNumInputs = 1; |
| 3387 const intptr_t kNumTemps = 0; |
| 3388 LocationSummary* summary = |
| 3389 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3390 summary->set_in(0, Location::RequiresFpuRegister()); |
| 3391 summary->set_out(Location::RequiresRegister()); |
| 3392 return summary; |
| 3393 } |
| 3394 |
| 3395 |
| 3396 void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3397 XmmRegister value = locs()->in(0).fpu_reg(); |
| 3398 Register result = locs()->out().reg(); |
| 3399 Label done; |
| 3400 Label non_zero; |
| 3401 __ movmskps(result, value); |
| 3402 switch (op_kind()) { |
| 3403 case MethodRecognizer::kUint32x4GetFlagX: |
| 3404 __ testl(result, Immediate(0x1)); |
| 3405 break; |
| 3406 case MethodRecognizer::kUint32x4GetFlagY: |
| 3407 __ testl(result, Immediate(0x2)); |
| 3408 break; |
| 3409 case MethodRecognizer::kUint32x4GetFlagZ: |
| 3410 __ testl(result, Immediate(0x3)); |
| 3411 break; |
| 3412 case MethodRecognizer::kUint32x4GetFlagW: |
| 3413 __ testl(result, Immediate(0x4)); |
| 3414 break; |
| 3415 default: UNREACHABLE(); |
| 3416 } |
| 3417 __ j(NOT_ZERO, &non_zero, Assembler::kNearJump); |
| 3418 __ LoadObject(result, Bool::False()); |
| 3419 __ jmp(&done); |
| 3420 __ Bind(&non_zero); |
| 3421 __ LoadObject(result, Bool::True()); |
| 3422 __ Bind(&done); |
| 3423 } |
| 3424 |
| 3425 |
| 3426 LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const { |
| 3427 const intptr_t kNumInputs = 3; |
| 3428 const intptr_t kNumTemps = 1; |
| 3429 LocationSummary* summary = |
| 3430 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3431 summary->set_in(0, Location::RequiresFpuRegister()); |
| 3432 summary->set_in(1, Location::RequiresFpuRegister()); |
| 3433 summary->set_in(2, Location::RequiresFpuRegister()); |
| 3434 summary->set_temp(0, Location::RequiresFpuRegister()); |
| 3435 summary->set_out(Location::SameAsFirstInput()); |
| 3436 return summary; |
| 3437 } |
| 3438 |
| 3439 |
| 3440 void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3441 XmmRegister mask = locs()->in(0).fpu_reg(); |
| 3442 XmmRegister trueValue = locs()->in(1).fpu_reg(); |
| 3443 XmmRegister falseValue = locs()->in(2).fpu_reg(); |
| 3444 XmmRegister out = locs()->out().fpu_reg(); |
| 3445 XmmRegister temp = locs()->temp(0).fpu_reg(); |
| 3446 ASSERT(out == mask); |
| 3447 // Copy mask. |
| 3448 __ movaps(temp, mask); |
| 3449 // Invert it. |
| 3450 __ notps(temp); |
| 3451 // mask = mask & trueValue. |
| 3452 __ andps(mask, trueValue); |
| 3453 // temp = temp & falseValue. |
| 3454 __ andps(temp, falseValue); |
| 3455 // out = mask | temp. |
| 3456 __ orps(mask, temp); |
| 3457 } |
| 3458 |
| 3459 |
| 3460 LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const { |
| 3461 const intptr_t kNumInputs = 2; |
| 3462 const intptr_t kNumTemps = 0; |
| 3463 LocationSummary* summary = |
| 3464 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3465 summary->set_in(0, Location::RequiresFpuRegister()); |
| 3466 summary->set_in(1, Location::RequiresRegister()); |
| 3467 summary->set_out(Location::SameAsFirstInput()); |
| 3468 return summary; |
| 3469 } |
| 3470 |
| 3471 |
| 3472 void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3473 XmmRegister mask = locs()->in(0).fpu_reg(); |
| 3474 Register flag = locs()->in(1).reg(); |
| 3475 ASSERT(mask == locs()->out().fpu_reg()); |
| 3476 __ subl(ESP, Immediate(16)); |
| 3477 // Copy mask to stack. |
| 3478 __ movups(Address(ESP, 0), mask); |
| 3479 Label falsePath, exitPath; |
| 3480 __ CompareObject(flag, Bool::True()); |
| 3481 __ j(NOT_EQUAL, &falsePath); |
| 3482 switch (op_kind()) { |
| 3483 case MethodRecognizer::kUint32x4WithFlagX: |
| 3484 __ movl(Address(ESP, 0), Immediate(0xFFFFFFFF)); |
| 3485 __ jmp(&exitPath); |
| 3486 __ Bind(&falsePath); |
| 3487 __ movl(Address(ESP, 0), Immediate(0x0)); |
| 3488 break; |
| 3489 case MethodRecognizer::kUint32x4WithFlagY: |
| 3490 __ movl(Address(ESP, 4), Immediate(0xFFFFFFFF)); |
| 3491 __ jmp(&exitPath); |
| 3492 __ Bind(&falsePath); |
| 3493 __ movl(Address(ESP, 4), Immediate(0x0)); |
| 3494 break; |
| 3495 case MethodRecognizer::kUint32x4WithFlagZ: |
| 3496 __ movl(Address(ESP, 8), Immediate(0xFFFFFFFF)); |
| 3497 __ jmp(&exitPath); |
| 3498 __ Bind(&falsePath); |
| 3499 __ movl(Address(ESP, 8), Immediate(0x0)); |
| 3500 break; |
| 3501 case MethodRecognizer::kUint32x4WithFlagW: |
| 3502 __ movl(Address(ESP, 12), Immediate(0xFFFFFFFF)); |
| 3503 __ jmp(&exitPath); |
| 3504 __ Bind(&falsePath); |
| 3505 __ movl(Address(ESP, 12), Immediate(0x0)); |
| 3506 break; |
| 3507 default: UNREACHABLE(); |
| 3508 } |
| 3509 __ Bind(&exitPath); |
| 3510 // Copy mask back to register. |
| 3511 __ movups(mask, Address(ESP, 0)); |
| 3512 __ addl(ESP, Immediate(16)); |
| 3513 } |
| 3514 |
| 3515 |
| 3516 LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const { |
| 3517 const intptr_t kNumInputs = 1; |
| 3518 const intptr_t kNumTemps = 0; |
| 3519 LocationSummary* summary = |
| 3520 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3521 summary->set_in(0, Location::RequiresFpuRegister()); |
| 3522 summary->set_out(Location::SameAsFirstInput()); |
| 3523 return summary; |
| 3524 } |
| 3525 |
| 3526 |
| 3527 void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3528 // NOP. |
| 3529 } |
| 3530 |
| 3531 |
| 3532 LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const { |
| 3533 const intptr_t kNumInputs = 2; |
| 3534 const intptr_t kNumTemps = 0; |
| 3535 LocationSummary* summary = |
| 3536 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3537 summary->set_in(0, Location::RequiresFpuRegister()); |
| 3538 summary->set_in(1, Location::RequiresFpuRegister()); |
| 3539 summary->set_out(Location::SameAsFirstInput()); |
| 3540 return summary; |
| 3541 } |
| 3542 |
| 3543 |
| 3544 void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| 3545 XmmRegister left = locs()->in(0).fpu_reg(); |
| 3546 XmmRegister right = locs()->in(1).fpu_reg(); |
| 3547 ASSERT(left == locs()->out().fpu_reg()); |
| 3548 switch (op_kind()) { |
| 3549 case Token::kBIT_AND: { |
| 3550 __ andps(left, right); |
| 3551 break; |
| 3552 } |
| 3553 case Token::kBIT_OR: { |
| 3554 __ orps(left, right); |
| 3555 break; |
| 3556 } |
| 3557 case Token::kBIT_XOR: { |
| 3558 __ xorps(left, right); |
| 3559 break; |
| 3560 } |
| 3561 default: UNREACHABLE(); |
| 3562 } |
| 3563 } |
| 3564 |
| 3565 |
| 3322 LocationSummary* MathSqrtInstr::MakeLocationSummary() const { | 3566 LocationSummary* MathSqrtInstr::MakeLocationSummary() const { |
| 3323 const intptr_t kNumInputs = 1; | 3567 const intptr_t kNumInputs = 1; |
| 3324 const intptr_t kNumTemps = 0; | 3568 const intptr_t kNumTemps = 0; |
| 3325 LocationSummary* summary = | 3569 LocationSummary* summary = |
| 3326 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); | 3570 new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| 3327 summary->set_in(0, Location::RequiresFpuRegister()); | 3571 summary->set_in(0, Location::RequiresFpuRegister()); |
| 3328 summary->set_out(Location::RequiresFpuRegister()); | 3572 summary->set_out(Location::RequiresFpuRegister()); |
| 3329 return summary; | 3573 return summary; |
| 3330 } | 3574 } |
| 3331 | 3575 |
| (...skipping 1094 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4426 PcDescriptors::kOther, | 4670 PcDescriptors::kOther, |
| 4427 locs()); | 4671 locs()); |
| 4428 __ Drop(2); // Discard type arguments and receiver. | 4672 __ Drop(2); // Discard type arguments and receiver. |
| 4429 } | 4673 } |
| 4430 | 4674 |
| 4431 } // namespace dart | 4675 } // namespace dart |
| 4432 | 4676 |
| 4433 #undef __ | 4677 #undef __ |
| 4434 | 4678 |
| 4435 #endif // defined TARGET_ARCH_IA32 | 4679 #endif // defined TARGET_ARCH_IA32 |
| OLD | NEW |