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 --- |