1a2
> # Copyright (c) 2013 Advanced Micro Devices, Inc.
499a501,503
> def isCCReg(self):
> return 0
>
662a667,739
> class CCRegOperand(Operand):
> def isReg(self):
> return 1
>
> def isCCReg(self):
> return 1
>
> def makeConstructor(self, predRead, predWrite):
> c_src = ''
> c_dest = ''
>
> if self.is_src:
> c_src = '\n\t_srcRegIdx[_numSrcRegs++] = %s + CC_Reg_Base;' % \
> (self.reg_spec)
> if self.hasReadPred():
> c_src = '\n\tif (%s) {%s\n\t}' % \
> (self.read_predicate, c_src)
>
> if self.is_dest:
> c_dest = \
> '\n\t_destRegIdx[_numDestRegs++] = %s + CC_Reg_Base;' % \
> (self.reg_spec)
> c_dest += '\n\t_numCCDestRegs++;'
> if self.hasWritePred():
> c_dest = '\n\tif (%s) {%s\n\t}' % \
> (self.write_predicate, c_dest)
>
> return c_src + c_dest
>
> def makeRead(self, predRead):
> if (self.ctype == 'float' or self.ctype == 'double'):
> error('Attempt to read condition-code register as FP')
> if self.read_code != None:
> return self.buildReadCode('readCCRegOperand')
>
> int_reg_val = ''
> if predRead:
> int_reg_val = 'xc->readCCRegOperand(this, _sourceIndex++)'
> if self.hasReadPred():
> int_reg_val = '(%s) ? %s : 0' % \
> (self.read_predicate, int_reg_val)
> else:
> int_reg_val = 'xc->readCCRegOperand(this, %d)' % self.src_reg_idx
>
> return '%s = %s;\n' % (self.base_name, int_reg_val)
>
> def makeWrite(self, predWrite):
> if (self.ctype == 'float' or self.ctype == 'double'):
> error('Attempt to write condition-code register as FP')
> if self.write_code != None:
> return self.buildWriteCode('setCCRegOperand')
>
> if predWrite:
> wp = 'true'
> if self.hasWritePred():
> wp = self.write_predicate
>
> wcond = 'if (%s)' % (wp)
> windex = '_destIndex++'
> else:
> wcond = ''
> windex = '%d' % self.dest_reg_idx
>
> wb = '''
> %s
> {
> %s final_val = %s;
> xc->setCCRegOperand(this, %s, final_val);\n
> if (traceData) { traceData->setData(final_val); }
> }''' % (wcond, self.ctype, self.base_name, windex)
>
> return wb
>
817a895
> self.numCCDestRegs = 0
837a916,917
> elif op_desc.isCCReg():
> self.numCCDestRegs += 1
1032a1113
> header += '\n\t_numCCDestRegs = 0;'