regop.isa (7967:b243dc8cec8b) | regop.isa (7969:068f061e57a8) |
---|---|
1// Copyright (c) 2007-2008 The Hewlett-Packard Development Company 2// All rights reserved. 3// 4// The license below extends only to copyright in the software and shall 5// not be construed as granting a license to any other intellectual 6// property including but not limited to intellectual property relating 7// to a hardware implementation of the functionality of the software 8// licensed hereunder. You may use the software subject to the license --- 37 unchanged lines hidden (view full) --- 46 Trace::InstRecord *traceData) const 47 { 48 Fault fault = NoFault; 49 50 DPRINTF(X86, "The data size is %d\n", dataSize); 51 %(op_decl)s; 52 %(op_rd)s; 53 | 1// Copyright (c) 2007-2008 The Hewlett-Packard Development Company 2// All rights reserved. 3// 4// The license below extends only to copyright in the software and shall 5// not be construed as granting a license to any other intellectual 6// property including but not limited to intellectual property relating 7// to a hardware implementation of the functionality of the software 8// licensed hereunder. You may use the software subject to the license --- 37 unchanged lines hidden (view full) --- 46 Trace::InstRecord *traceData) const 47 { 48 Fault fault = NoFault; 49 50 DPRINTF(X86, "The data size is %d\n", dataSize); 51 %(op_decl)s; 52 %(op_rd)s; 53 |
54 IntReg result M5_VAR_USED; 55 |
|
54 if(%(cond_check)s) 55 { 56 %(code)s; 57 %(flag_code)s; 58 } 59 else 60 { 61 %(else_code)s; --- 12 unchanged lines hidden (view full) --- 74 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, 75 Trace::InstRecord *traceData) const 76 { 77 Fault fault = NoFault; 78 79 %(op_decl)s; 80 %(op_rd)s; 81 | 56 if(%(cond_check)s) 57 { 58 %(code)s; 59 %(flag_code)s; 60 } 61 else 62 { 63 %(else_code)s; --- 12 unchanged lines hidden (view full) --- 76 Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, 77 Trace::InstRecord *traceData) const 78 { 79 Fault fault = NoFault; 80 81 %(op_decl)s; 82 %(op_rd)s; 83 |
84 IntReg result M5_VAR_USED; 85 |
|
82 if(%(cond_check)s) 83 { 84 %(code)s; 85 %(flag_code)s; 86 } 87 else 88 { 89 %(else_code)s; --- 339 unchanged lines hidden (view full) --- 429 "ext" : self.ext} 430 return allocator 431 432 class LogicRegOp(RegOp): 433 abstract = True 434 flag_code = ''' 435 //Don't have genFlags handle the OF or CF bits 436 uint64_t mask = CFBit | ECFBit | OFBit; | 86 if(%(cond_check)s) 87 { 88 %(code)s; 89 %(flag_code)s; 90 } 91 else 92 { 93 %(else_code)s; --- 339 unchanged lines hidden (view full) --- 433 "ext" : self.ext} 434 return allocator 435 436 class LogicRegOp(RegOp): 437 abstract = True 438 flag_code = ''' 439 //Don't have genFlags handle the OF or CF bits 440 uint64_t mask = CFBit | ECFBit | OFBit; |
437 ccFlagBits = genFlags(ccFlagBits, ext & ~mask, DestReg, psrc1, op2); | 441 ccFlagBits = genFlags(ccFlagBits, ext & ~mask, result, psrc1, op2); |
438 //If a logic microop wants to set these, it wants to set them to 0. 439 ccFlagBits &= ~(CFBit & ext); 440 ccFlagBits &= ~(ECFBit & ext); 441 ccFlagBits &= ~(OFBit & ext); 442 ''' 443 444 class FlagRegOp(RegOp): 445 abstract = True 446 flag_code = \ | 442 //If a logic microop wants to set these, it wants to set them to 0. 443 ccFlagBits &= ~(CFBit & ext); 444 ccFlagBits &= ~(ECFBit & ext); 445 ccFlagBits &= ~(OFBit & ext); 446 ''' 447 448 class FlagRegOp(RegOp): 449 abstract = True 450 flag_code = \ |
447 "ccFlagBits = genFlags(ccFlagBits, ext, DestReg, psrc1, op2);" | 451 "ccFlagBits = genFlags(ccFlagBits, ext, result, psrc1, op2);" |
448 449 class SubRegOp(RegOp): 450 abstract = True 451 flag_code = \ | 452 453 class SubRegOp(RegOp): 454 abstract = True 455 flag_code = \ |
452 "ccFlagBits = genFlags(ccFlagBits, ext, DestReg, psrc1, ~op2, true);" | 456 "ccFlagBits = genFlags(ccFlagBits, ext, result, psrc1, ~op2, true);" |
453 454 class CondRegOp(RegOp): 455 abstract = True 456 cond_check = "checkCondition(ccFlagBits, ext)" 457 cond_control_flag_init = "flags[IsCondControl] = flags[IsControl];" 458 459 class RdRegOp(RegOp): 460 abstract = True --- 5 unchanged lines hidden (view full) --- 466 467 class WrRegOp(RegOp): 468 abstract = True 469 def __init__(self, src1, src2, flags=None, dataSize="env.dataSize"): 470 super(WrRegOp, self).__init__("InstRegIndex(NUM_INTREGS)", \ 471 src1, src2, flags, dataSize) 472 473 class Add(FlagRegOp): | 457 458 class CondRegOp(RegOp): 459 abstract = True 460 cond_check = "checkCondition(ccFlagBits, ext)" 461 cond_control_flag_init = "flags[IsCondControl] = flags[IsControl];" 462 463 class RdRegOp(RegOp): 464 abstract = True --- 5 unchanged lines hidden (view full) --- 470 471 class WrRegOp(RegOp): 472 abstract = True 473 def __init__(self, src1, src2, flags=None, dataSize="env.dataSize"): 474 super(WrRegOp, self).__init__("InstRegIndex(NUM_INTREGS)", \ 475 src1, src2, flags, dataSize) 476 477 class Add(FlagRegOp): |
474 code = 'DestReg = merge(DestReg, psrc1 + op2, dataSize);' 475 big_code = 'DestReg = (psrc1 + op2) & mask(dataSize * 8);' | 478 code = 'DestReg = merge(DestReg, result = (psrc1 + op2), dataSize);' 479 big_code = 'DestReg = result = (psrc1 + op2) & mask(dataSize * 8);' |
476 477 class Or(LogicRegOp): | 480 481 class Or(LogicRegOp): |
478 code = 'DestReg = merge(DestReg, psrc1 | op2, dataSize);' 479 big_code = 'DestReg = (psrc1 | op2) & mask(dataSize * 8);' | 482 code = 'DestReg = merge(DestReg, result = (psrc1 | op2), dataSize);' 483 big_code = 'DestReg = result = (psrc1 | op2) & mask(dataSize * 8);' |
480 481 class Adc(FlagRegOp): 482 code = ''' 483 CCFlagBits flags = ccFlagBits; | 484 485 class Adc(FlagRegOp): 486 code = ''' 487 CCFlagBits flags = ccFlagBits; |
484 DestReg = merge(DestReg, psrc1 + op2 + flags.cf, dataSize); | 488 DestReg = merge(DestReg, result = (psrc1 + op2 + flags.cf), dataSize); |
485 ''' 486 big_code = ''' 487 CCFlagBits flags = ccFlagBits; | 489 ''' 490 big_code = ''' 491 CCFlagBits flags = ccFlagBits; |
488 DestReg = (psrc1 + op2 + flags.cf) & mask(dataSize * 8); | 492 DestReg = result = (psrc1 + op2 + flags.cf) & mask(dataSize * 8); |
489 ''' 490 491 class Sbb(SubRegOp): 492 code = ''' 493 CCFlagBits flags = ccFlagBits; | 493 ''' 494 495 class Sbb(SubRegOp): 496 code = ''' 497 CCFlagBits flags = ccFlagBits; |
494 DestReg = merge(DestReg, psrc1 - op2 - flags.cf, dataSize); | 498 DestReg = merge(DestReg, result = (psrc1 - op2 - flags.cf), dataSize); |
495 ''' 496 big_code = ''' 497 CCFlagBits flags = ccFlagBits; | 499 ''' 500 big_code = ''' 501 CCFlagBits flags = ccFlagBits; |
498 DestReg = (psrc1 - op2 - flags.cf) & mask(dataSize * 8); | 502 DestReg = result = (psrc1 - op2 - flags.cf) & mask(dataSize * 8); |
499 ''' 500 501 class And(LogicRegOp): | 503 ''' 504 505 class And(LogicRegOp): |
502 code = 'DestReg = merge(DestReg, psrc1 & op2, dataSize)' 503 big_code = 'DestReg = (psrc1 & op2) & mask(dataSize * 8)' | 506 code = 'DestReg = merge(DestReg, result = (psrc1 & op2), dataSize)' 507 big_code = 'DestReg = result = (psrc1 & op2) & mask(dataSize * 8)' |
504 505 class Sub(SubRegOp): | 508 509 class Sub(SubRegOp): |
506 code = 'DestReg = merge(DestReg, psrc1 - op2, dataSize)' 507 big_code = 'DestReg = (psrc1 - op2) & mask(dataSize * 8)' | 510 code = 'DestReg = merge(DestReg, result = (psrc1 - op2), dataSize)' 511 big_code = 'DestReg = result = (psrc1 - op2) & mask(dataSize * 8)' |
508 509 class Xor(LogicRegOp): | 512 513 class Xor(LogicRegOp): |
510 code = 'DestReg = merge(DestReg, psrc1 ^ op2, dataSize)' 511 big_code = 'DestReg = (psrc1 ^ op2) & mask(dataSize * 8)' | 514 code = 'DestReg = merge(DestReg, result = (psrc1 ^ op2), dataSize)' 515 big_code = 'DestReg = result = (psrc1 ^ op2) & mask(dataSize * 8)' |
512 513 class Mul1s(WrRegOp): 514 code = ''' 515 ProdLow = psrc1 * op2; 516 int halfSize = (dataSize * 8) / 2; 517 uint64_t shifter = (ULL(1) << halfSize); 518 uint64_t hiResult; 519 uint64_t psrc1_h = psrc1 / shifter; --- 975 unchanged lines hidden --- | 516 517 class Mul1s(WrRegOp): 518 code = ''' 519 ProdLow = psrc1 * op2; 520 int halfSize = (dataSize * 8) / 2; 521 uint64_t shifter = (ULL(1) << halfSize); 522 uint64_t hiResult; 523 uint64_t psrc1_h = psrc1 / shifter; --- 975 unchanged lines hidden --- |