regop.isa (4733:b0785fa2d7b6) regop.isa (4756:a7083c283274)
1// Copyright (c) 2007 The Hewlett-Packard Development Company
2// All rights reserved.
3//
4// Redistribution and use of this software in source and binary forms,
5// with or without modification, are permitted provided that the
6// following conditions are met:
7//
8// The software must be used only for Non-Commercial Use which means any

--- 452 unchanged lines hidden (view full) ---

461 defineMicroRegOp('Xor', 'DestReg = merge(DestReg, SrcReg1 ^ op2, dataSize)')
462 # defineMicroRegOp('Cmp', 'DestReg = merge(DestReg, DestReg - op2, dataSize)', True)
463 defineMicroRegOp('Mul1s', 'DestReg = merge(DestReg, DestReg * op2, dataSize)')
464 defineMicroRegOp('Mov', 'DestReg = merge(SrcReg1, op2, dataSize)',
465 elseCode='DestReg=DestReg;', cc=True)
466
467 # Shift instructions
468 defineMicroRegOp('Sll', '''
1// Copyright (c) 2007 The Hewlett-Packard Development Company
2// All rights reserved.
3//
4// Redistribution and use of this software in source and binary forms,
5// with or without modification, are permitted provided that the
6// following conditions are met:
7//
8// The software must be used only for Non-Commercial Use which means any

--- 452 unchanged lines hidden (view full) ---

461 defineMicroRegOp('Xor', 'DestReg = merge(DestReg, SrcReg1 ^ op2, dataSize)')
462 # defineMicroRegOp('Cmp', 'DestReg = merge(DestReg, DestReg - op2, dataSize)', True)
463 defineMicroRegOp('Mul1s', 'DestReg = merge(DestReg, DestReg * op2, dataSize)')
464 defineMicroRegOp('Mov', 'DestReg = merge(SrcReg1, op2, dataSize)',
465 elseCode='DestReg=DestReg;', cc=True)
466
467 # Shift instructions
468 defineMicroRegOp('Sll', '''
469 uint8_t shiftAmt = (op2 & ((dataSize == 8) ? mask(4) : mask(3)));
469 uint8_t shiftAmt = (op2 & ((dataSize == 8) ? mask(6) : mask(5)));
470 DestReg = merge(DestReg, SrcReg1 << shiftAmt, dataSize);
471 ''')
472 defineMicroRegOp('Srl', '''
470 DestReg = merge(DestReg, SrcReg1 << shiftAmt, dataSize);
471 ''')
472 defineMicroRegOp('Srl', '''
473 uint8_t shiftAmt = (op2 & ((dataSize == 8) ? mask(4) : mask(3)));
473 uint8_t shiftAmt = (op2 & ((dataSize == 8) ? mask(6) : mask(5)));
474 // Because what happens to the bits shift -in- on a right shift
475 // is not defined in the C/C++ standard, we have to mask them out
476 // to be sure they're zero.
477 uint64_t logicalMask = mask(dataSize * 8 - shiftAmt);
478 DestReg = merge(DestReg, (SrcReg1 >> shiftAmt) & logicalMask, dataSize);
479 ''')
480 defineMicroRegOp('Sra', '''
474 // Because what happens to the bits shift -in- on a right shift
475 // is not defined in the C/C++ standard, we have to mask them out
476 // to be sure they're zero.
477 uint64_t logicalMask = mask(dataSize * 8 - shiftAmt);
478 DestReg = merge(DestReg, (SrcReg1 >> shiftAmt) & logicalMask, dataSize);
479 ''')
480 defineMicroRegOp('Sra', '''
481 uint8_t shiftAmt = (op2 & ((dataSize == 8) ? mask(4) : mask(3)));
481 uint8_t shiftAmt = (op2 & ((dataSize == 8) ? mask(6) : mask(5)));
482 // Because what happens to the bits shift -in- on a right shift
483 // is not defined in the C/C++ standard, we have to sign extend
484 // them manually to be sure.
485 uint64_t arithMask =
486 -bits(op2, dataSize * 8 - 1) << (dataSize * 8 - shiftAmt);
487 DestReg = merge(DestReg, (SrcReg1 >> shiftAmt) | arithMask, dataSize);
488 ''')
489 defineMicroRegOp('Ror', '''
490 uint8_t shiftAmt =
482 // Because what happens to the bits shift -in- on a right shift
483 // is not defined in the C/C++ standard, we have to sign extend
484 // them manually to be sure.
485 uint64_t arithMask =
486 -bits(op2, dataSize * 8 - 1) << (dataSize * 8 - shiftAmt);
487 DestReg = merge(DestReg, (SrcReg1 >> shiftAmt) | arithMask, dataSize);
488 ''')
489 defineMicroRegOp('Ror', '''
490 uint8_t shiftAmt =
491 (op2 & ((dataSize == 8) ? mask(4) : mask(3)));
491 (op2 & ((dataSize == 8) ? mask(6) : mask(5)));
492 if(shiftAmt)
493 {
494 uint64_t top = SrcReg1 << (dataSize * 8 - shiftAmt);
495 uint64_t bottom = bits(SrcReg1, dataSize * 8, shiftAmt);
496 DestReg = merge(DestReg, top | bottom, dataSize);
497 }
498 else
499 DestReg = DestReg;
500 ''')
501 defineMicroRegOp('Rcr', '''
502 uint8_t shiftAmt =
492 if(shiftAmt)
493 {
494 uint64_t top = SrcReg1 << (dataSize * 8 - shiftAmt);
495 uint64_t bottom = bits(SrcReg1, dataSize * 8, shiftAmt);
496 DestReg = merge(DestReg, top | bottom, dataSize);
497 }
498 else
499 DestReg = DestReg;
500 ''')
501 defineMicroRegOp('Rcr', '''
502 uint8_t shiftAmt =
503 (op2 & ((dataSize == 8) ? mask(4) : mask(3)));
503 (op2 & ((dataSize == 8) ? mask(6) : mask(5)));
504 if(shiftAmt)
505 {
506 CCFlagBits flags = ccFlagBits;
507 uint64_t top = flags.CF << (dataSize * 8 - shiftAmt);
508 if(shiftAmt > 1)
509 top |= SrcReg1 << (dataSize * 8 - shiftAmt - 1);
510 uint64_t bottom = bits(SrcReg1, dataSize * 8, shiftAmt);
511 DestReg = merge(DestReg, top | bottom, dataSize);
512 }
513 else
514 DestReg = DestReg;
515 ''')
516 defineMicroRegOp('Rol', '''
517 uint8_t shiftAmt =
504 if(shiftAmt)
505 {
506 CCFlagBits flags = ccFlagBits;
507 uint64_t top = flags.CF << (dataSize * 8 - shiftAmt);
508 if(shiftAmt > 1)
509 top |= SrcReg1 << (dataSize * 8 - shiftAmt - 1);
510 uint64_t bottom = bits(SrcReg1, dataSize * 8, shiftAmt);
511 DestReg = merge(DestReg, top | bottom, dataSize);
512 }
513 else
514 DestReg = DestReg;
515 ''')
516 defineMicroRegOp('Rol', '''
517 uint8_t shiftAmt =
518 (op2 & ((dataSize == 8) ? mask(4) : mask(3)));
518 (op2 & ((dataSize == 8) ? mask(6) : mask(5)));
519 if(shiftAmt)
520 {
521 uint64_t top = SrcReg1 << shiftAmt;
522 uint64_t bottom =
523 bits(SrcReg1, dataSize * 8 - 1, dataSize * 8 - shiftAmt);
524 DestReg = merge(DestReg, top | bottom, dataSize);
525 }
526 else
527 DestReg = DestReg;
528 ''')
529 defineMicroRegOp('Rcl', '''
530 uint8_t shiftAmt =
519 if(shiftAmt)
520 {
521 uint64_t top = SrcReg1 << shiftAmt;
522 uint64_t bottom =
523 bits(SrcReg1, dataSize * 8 - 1, dataSize * 8 - shiftAmt);
524 DestReg = merge(DestReg, top | bottom, dataSize);
525 }
526 else
527 DestReg = DestReg;
528 ''')
529 defineMicroRegOp('Rcl', '''
530 uint8_t shiftAmt =
531 (op2 & ((dataSize == 8) ? mask(4) : mask(3)));
531 (op2 & ((dataSize == 8) ? mask(6) : mask(5)));
532 if(shiftAmt)
533 {
534 CCFlagBits flags = ccFlagBits;
535 uint64_t top = SrcReg1 << shiftAmt;
536 uint64_t bottom = flags.CF << (shiftAmt - 1);
537 if(shiftAmt > 1)
538 bottom |=
539 bits(SrcReg1, dataSize * 8 - 1,

--- 19 unchanged lines hidden ---
532 if(shiftAmt)
533 {
534 CCFlagBits flags = ccFlagBits;
535 uint64_t top = SrcReg1 << shiftAmt;
536 uint64_t bottom = flags.CF << (shiftAmt - 1);
537 if(shiftAmt > 1)
538 bottom |=
539 bits(SrcReg1, dataSize * 8 - 1,

--- 19 unchanged lines hidden ---