Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: src/DartARM32/assembler_arm.cc

Issue 1422253003: Add UMULL to ARM integrated assembler. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fix nits. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/DartARM32/assembler_arm.h ('k') | src/IceAssemblerARM32.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 // This is forked from Dart revision df52deea9f25690eb8b66c5995da92b70f7ac1fe 5 // This is forked from Dart revision df52deea9f25690eb8b66c5995da92b70f7ac1fe
6 // Please update the (git) revision if we merge changes from Dart. 6 // Please update the (git) revision if we merge changes from Dart.
7 // https://code.google.com/p/dart/wiki/GettingTheSource 7 // https://code.google.com/p/dart/wiki/GettingTheSource
8 8
9 #include "vm/globals.h" // NOLINT 9 #include "vm/globals.h" // NOLINT
10 #if defined(TARGET_ARCH_ARM) 10 #if defined(TARGET_ARCH_ARM)
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 EmitMulOp(cond, 0, R0, rd, rn, rm); 386 EmitMulOp(cond, 0, R0, rd, rn, rm);
387 } 387 }
388 #endif 388 #endif
389 389
390 // Like mul, but sets condition flags. 390 // Like mul, but sets condition flags.
391 void Assembler::muls(Register rd, Register rn, Register rm, Condition cond) { 391 void Assembler::muls(Register rd, Register rn, Register rm, Condition cond) {
392 EmitMulOp(cond, B20, R0, rd, rn, rm); 392 EmitMulOp(cond, B20, R0, rd, rn, rm);
393 } 393 }
394 394
395 #if 0 395 #if 0
396 // Moved to ARM32::AssemblerARM32::mla 396 // Moved to ARM32::AssemblerARM32::mla()
397 void Assembler::mla(Register rd, Register rn, 397 void Assembler::mla(Register rd, Register rn,
398 Register rm, Register ra, Condition cond) { 398 Register rm, Register ra, Condition cond) {
399 // rd <- ra + rn * rm. 399 // rd <- ra + rn * rm.
400 // Assembler registers rd, rn, rm, ra are encoded as rn, rm, rs, rd. 400 // Assembler registers rd, rn, rm, ra are encoded as rn, rm, rs, rd.
401 EmitMulOp(cond, B21, ra, rd, rn, rm); 401 EmitMulOp(cond, B21, ra, rd, rn, rm);
402 } 402 }
403 #endif 403 #endif
404 404
405 405
406 void Assembler::mls(Register rd, Register rn, 406 void Assembler::mls(Register rd, Register rn,
407 Register rm, Register ra, Condition cond) { 407 Register rm, Register ra, Condition cond) {
408 // rd <- ra - rn * rm. 408 // rd <- ra - rn * rm.
409 if (TargetCPUFeatures::arm_version() == ARMv7) { 409 if (TargetCPUFeatures::arm_version() == ARMv7) {
410 // Assembler registers rd, rn, rm, ra are encoded as rn, rm, rs, rd. 410 // Assembler registers rd, rn, rm, ra are encoded as rn, rm, rs, rd.
411 EmitMulOp(cond, B22 | B21, ra, rd, rn, rm); 411 EmitMulOp(cond, B22 | B21, ra, rd, rn, rm);
412 } else { 412 } else {
413 mul(IP, rn, rm, cond); 413 mul(IP, rn, rm, cond);
414 sub(rd, ra, Operand(IP), cond); 414 sub(rd, ra, Operand(IP), cond);
415 } 415 }
416 } 416 }
417 417
418 418
419 void Assembler::smull(Register rd_lo, Register rd_hi, 419 void Assembler::smull(Register rd_lo, Register rd_hi,
420 Register rn, Register rm, Condition cond) { 420 Register rn, Register rm, Condition cond) {
421 // Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. 421 // Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs.
422 EmitMulOp(cond, B23 | B22, rd_lo, rd_hi, rn, rm); 422 EmitMulOp(cond, B23 | B22, rd_lo, rd_hi, rn, rm);
423 } 423 }
424 424
425 425 #if 0
426 // Moved to ARM32::AssemblerARM32::umull()
426 void Assembler::umull(Register rd_lo, Register rd_hi, 427 void Assembler::umull(Register rd_lo, Register rd_hi,
427 Register rn, Register rm, Condition cond) { 428 Register rn, Register rm, Condition cond) {
428 // Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. 429 // Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs.
429 EmitMulOp(cond, B23, rd_lo, rd_hi, rn, rm); 430 EmitMulOp(cond, B23, rd_lo, rd_hi, rn, rm);
430 } 431 }
431 432 #endif
432 433
433 void Assembler::umlal(Register rd_lo, Register rd_hi, 434 void Assembler::umlal(Register rd_lo, Register rd_hi,
434 Register rn, Register rm, Condition cond) { 435 Register rn, Register rm, Condition cond) {
435 // Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. 436 // Assembler registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs.
436 EmitMulOp(cond, B23 | B21, rd_lo, rd_hi, rn, rm); 437 EmitMulOp(cond, B23 | B21, rd_lo, rd_hi, rn, rm);
437 } 438 }
438 439
439 440
440 void Assembler::umaal(Register rd_lo, Register rd_hi, 441 void Assembler::umaal(Register rd_lo, Register rd_hi,
441 Register rn, Register rm) { 442 Register rn, Register rm) {
(...skipping 3248 matching lines...) Expand 10 before | Expand all | Expand 10 after
3690 3691
3691 3692
3692 const char* Assembler::FpuRegisterName(FpuRegister reg) { 3693 const char* Assembler::FpuRegisterName(FpuRegister reg) {
3693 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters)); 3694 ASSERT((0 <= reg) && (reg < kNumberOfFpuRegisters));
3694 return fpu_reg_names[reg]; 3695 return fpu_reg_names[reg];
3695 } 3696 }
3696 3697
3697 } // namespace dart 3698 } // namespace dart
3698 3699
3699 #endif // defined TARGET_ARCH_ARM 3700 #endif // defined TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/DartARM32/assembler_arm.h ('k') | src/IceAssemblerARM32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698