1// -*- mode:c++ -*- 2 3// Copyright (c) 2010 ARM Limited 4// All rights reserved 5// 6// The license below extends only to copyright in the software and shall 7// not be construed as granting a license to any other intellectual 8// property including but not limited to intellectual property relating --- 487 unchanged lines hidden (view full) --- 496 uint64_t arg2Low = bits(Op2.sw, 15, 0); 497 uint64_t arg2High = bits(Op2.sw, 31, 16); 498 uSaturateOp<16>(midRes, arg1Low, arg2High); 499 replaceBits(resTemp, 15, 0, midRes); 500 uSaturateOp<16>(midRes, arg1High, arg2Low, true); 501 replaceBits(resTemp, 31, 16, midRes); 502 Dest = resTemp; 503 ''', flagType="none", buildCc=False) |
504 505 buildRegDataInst("uadd16", ''' 506 uint32_t geBits = 0; 507 resTemp = 0; 508 for (unsigned i = 0; i < 2; i++) { 509 int high = (i + 1) * 16 - 1; 510 int low = i * 16; 511 int32_t midRes = bits(Op1, high, low) + 512 bits(Op2, high, low); 513 if (midRes >= 0x10000) { 514 geBits = geBits | (0x3 << (i * 2)); 515 } 516 replaceBits(resTemp, high, low, midRes); 517 } 518 Dest = resTemp; 519 resTemp = geBits; 520 ''', flagType="ge", buildNonCc=False) 521 buildRegDataInst("uadd8", ''' 522 uint32_t geBits = 0; 523 resTemp = 0; 524 for (unsigned i = 0; i < 4; i++) { 525 int high = (i + 1) * 8 - 1; 526 int low = i * 8; 527 int32_t midRes = bits(Op1, high, low) + 528 bits(Op2, high, low); 529 if (midRes >= 0x100) { 530 geBits = geBits | (1 << i); 531 } 532 replaceBits(resTemp, high, low, midRes); 533 } 534 Dest = resTemp; 535 resTemp = geBits; 536 ''', flagType="ge", buildNonCc=False) 537 buildRegDataInst("usub16", ''' 538 uint32_t geBits = 0; 539 resTemp = 0; 540 for (unsigned i = 0; i < 2; i++) { 541 int high = (i + 1) * 16 - 1; 542 int low = i * 16; 543 int32_t midRes = bits(Op1, high, low) - 544 bits(Op2, high, low); 545 if (midRes >= 0) { 546 geBits = geBits | (0x3 << (i * 2)); 547 } 548 replaceBits(resTemp, high, low, midRes); 549 } 550 Dest = resTemp; 551 resTemp = geBits; 552 ''', flagType="ge", buildNonCc=False) 553 buildRegDataInst("usub8", ''' 554 uint32_t geBits = 0; 555 resTemp = 0; 556 for (unsigned i = 0; i < 4; i++) { 557 int high = (i + 1) * 8 - 1; 558 int low = i * 8; 559 int32_t midRes = bits(Op1, high, low) - 560 bits(Op2, high, low); 561 if (midRes >= 0) { 562 geBits = geBits | (1 << i); 563 } 564 replaceBits(resTemp, high, low, midRes); 565 } 566 Dest = resTemp; 567 resTemp = geBits; 568 ''', flagType="ge", buildNonCc=False) 569 buildRegDataInst("uasx", ''' 570 int32_t midRes, geBits = 0; 571 resTemp = 0; 572 int64_t arg1Low = bits(Op1.sw, 15, 0); 573 int64_t arg1High = bits(Op1.sw, 31, 16); 574 int64_t arg2Low = bits(Op2.sw, 15, 0); 575 int64_t arg2High = bits(Op2.sw, 31, 16); 576 midRes = arg1Low - arg2High; 577 if (midRes >= 0) { 578 geBits = geBits | 0x3; 579 } 580 replaceBits(resTemp, 15, 0, midRes); 581 midRes = arg1High + arg2Low; 582 if (midRes >= 0x10000) { 583 geBits = geBits | 0xc; 584 } 585 replaceBits(resTemp, 31, 16, midRes); 586 Dest = resTemp; 587 resTemp = geBits; 588 ''', flagType="ge", buildNonCc=False) 589 buildRegDataInst("usax", ''' 590 int32_t midRes, geBits = 0; 591 resTemp = 0; 592 int64_t arg1Low = bits(Op1.sw, 15, 0); 593 int64_t arg1High = bits(Op1.sw, 31, 16); 594 int64_t arg2Low = bits(Op2.sw, 15, 0); 595 int64_t arg2High = bits(Op2.sw, 31, 16); 596 midRes = arg1Low + arg2High; 597 if (midRes >= 0x10000) { 598 geBits = geBits | 0x3; 599 } 600 replaceBits(resTemp, 15, 0, midRes); 601 midRes = arg1High - arg2Low; 602 if (midRes >= 0) { 603 geBits = geBits | 0xc; 604 } 605 replaceBits(resTemp, 31, 16, midRes); 606 Dest = resTemp; 607 resTemp = geBits; 608 ''', flagType="ge", buildNonCc=False) |
609}}; |