data.isa (7219:0c995c5f8245) data.isa (7221:99ae09123a46)
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)
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)
504}};
609}};