1# Copyright (c) 2014 ARM Limited
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

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

515 my_flags += self.flags[2]
516 return my_flags
517
518 def makeDecl(self):
519 # Note that initializations in the declarations are solely
520 # to avoid 'uninitialized variable' errors from the compiler.
521 return self.ctype + ' ' + self.base_name + ' = 0;\n';
522
523
524src_reg_constructor = '\n\t_srcRegIdx[_numSrcRegs++] = RegId(%s, %s);'
525dst_reg_constructor = '\n\t_destRegIdx[_numDestRegs++] = RegId(%s, %s);'
526
527
528class IntRegOperand(Operand):
529 reg_class = 'IntRegClass'
530
531 def isReg(self):
532 return 1
533
534 def isIntReg(self):
535 return 1
536
537 def makeConstructor(self, predRead, predWrite):
538 c_src = ''
539 c_dest = ''
540
541 if self.is_src:
535 c_src = '\n\t_srcRegIdx[_numSrcRegs++] = %s;' % (self.reg_spec)
542 c_src = src_reg_constructor % (self.reg_class, self.reg_spec)
543 if self.hasReadPred():
544 c_src = '\n\tif (%s) {%s\n\t}' % \
545 (self.read_predicate, c_src)
546
547 if self.is_dest:
541 c_dest = '\n\t_destRegIdx[_numDestRegs++] = %s;' % \
542 (self.reg_spec)
548 c_dest = dst_reg_constructor % (self.reg_class, self.reg_spec)
549 c_dest += '\n\t_numIntDestRegs++;'
550 if self.hasWritePred():
551 c_dest = '\n\tif (%s) {%s\n\t}' % \
552 (self.write_predicate, c_dest)
553
554 return c_src + c_dest
555
556 def makeRead(self, predRead):

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

593 %s final_val = %s;
594 xc->setIntRegOperand(this, %s, final_val);\n
595 if (traceData) { traceData->setData(final_val); }
596 }''' % (wcond, self.ctype, self.base_name, windex)
597
598 return wb
599
600class FloatRegOperand(Operand):
601 reg_class = 'FloatRegClass'
602
603 def isReg(self):
604 return 1
605
606 def isFloatReg(self):
607 return 1
608
609 def makeConstructor(self, predRead, predWrite):
610 c_src = ''
611 c_dest = ''
612
613 if self.is_src:
606 c_src = '\n\t_srcRegIdx[_numSrcRegs++] = %s + FP_Reg_Base;' % \
607 (self.reg_spec)
614 c_src = src_reg_constructor % (self.reg_class, self.reg_spec)
615
616 if self.is_dest:
610 c_dest = \
611 '\n\t_destRegIdx[_numDestRegs++] = %s + FP_Reg_Base;' % \
612 (self.reg_spec)
617 c_dest = dst_reg_constructor % (self.reg_class, self.reg_spec)
618 c_dest += '\n\t_numFPDestRegs++;'
619
620 return c_src + c_dest
621
622 def makeRead(self, predRead):
623 bit_select = 0
624 if (self.ctype == 'float' or self.ctype == 'double'):
625 func = 'readFloatRegOperand'

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

654 {
655 %s final_val = %s;
656 %s\n
657 if (traceData) { traceData->setData(final_val); }
658 }''' % (self.ctype, self.base_name, wp)
659 return wb
660
661class CCRegOperand(Operand):
662 reg_class = 'CCRegClass'
663
664 def isReg(self):
665 return 1
666
667 def isCCReg(self):
668 return 1
669
670 def makeConstructor(self, predRead, predWrite):
671 c_src = ''
672 c_dest = ''
673
674 if self.is_src:
668 c_src = '\n\t_srcRegIdx[_numSrcRegs++] = %s + CC_Reg_Base;' % \
669 (self.reg_spec)
675 c_src = src_reg_constructor % (self.reg_class, self.reg_spec)
676 if self.hasReadPred():
677 c_src = '\n\tif (%s) {%s\n\t}' % \
678 (self.read_predicate, c_src)
679
680 if self.is_dest:
675 c_dest = \
676 '\n\t_destRegIdx[_numDestRegs++] = %s + CC_Reg_Base;' % \
677 (self.reg_spec)
681 c_dest = dst_reg_constructor % (self.reg_class, self.reg_spec)
682 c_dest += '\n\t_numCCDestRegs++;'
683 if self.hasWritePred():
684 c_dest = '\n\tif (%s) {%s\n\t}' % \
685 (self.write_predicate, c_dest)
686
687 return c_src + c_dest
688
689 def makeRead(self, predRead):

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

726 %s final_val = %s;
727 xc->setCCRegOperand(this, %s, final_val);\n
728 if (traceData) { traceData->setData(final_val); }
729 }''' % (wcond, self.ctype, self.base_name, windex)
730
731 return wb
732
733class ControlRegOperand(Operand):
734 reg_class = 'MiscRegClass'
735
736 def isReg(self):
737 return 1
738
739 def isControlReg(self):
740 return 1
741
742 def makeConstructor(self, predRead, predWrite):
743 c_src = ''
744 c_dest = ''
745
746 if self.is_src:
741 c_src = \
742 '\n\t_srcRegIdx[_numSrcRegs++] = %s + Misc_Reg_Base;' % \
743 (self.reg_spec)
747 c_src = src_reg_constructor % (self.reg_class, self.reg_spec)
748
749 if self.is_dest:
746 c_dest = \
747 '\n\t_destRegIdx[_numDestRegs++] = %s + Misc_Reg_Base;' % \
748 (self.reg_spec)
750 c_dest = dst_reg_constructor % (self.reg_class, self.reg_spec)
751
752 return c_src + c_dest
753
754 def makeRead(self, predRead):
755 bit_select = 0
756 if (self.ctype == 'float' or self.ctype == 'double'):
757 error('Attempt to read control register as FP')
758 if self.read_code != None:

--- 1696 unchanged lines hidden ---