104,105c104,145
< def format DataOp(code, icValue = {{ }},
< ivValue = {{ Cpsr<28:> }}) {{
---
> let {{
> def getCcCode(flagtype):
> icReg = icImm = iv = ''
> if flagtype == "none":
> icReg = icImm = iv = '1'
> elif flagtype == "add":
> icReg = icImm = 'findCarry(32, resTemp, Rn, op2)'
> iv = 'findOverflow(32, resTemp, Rn, op2)'
> elif flagtype == "sub":
> icReg = icImm ='findCarry(32, resTemp, Rn, ~op2)'
> iv = 'findOverflow(32, resTemp, Rn, ~op2)'
> elif flagtype == "rsb":
> icReg = icImm = 'findCarry(32, resTemp, op2, ~Rn)'
> iv = 'findOverflow(32, resTemp, op2, ~Rn)'
> else:
> icReg = 'shift_carry_rs(Rm, Rs, shift, Cpsr<29:>)'
> icImm = 'shift_carry_imm(Rm, shift_size, shift, Cpsr<29:>)'
> iv = 'Cpsr<28:>'
> return (calcCcCode % {"icValue" : icReg, "ivValue" : iv},
> calcCcCode % {"icValue" : icImm, "ivValue" : iv})
>
> def getImmCcCode(flagtype):
> ivValue = icValue = ''
> if flagtype == "none":
> icValue = ivValue = '1'
> elif flagtype == "add":
> icValue = 'findCarry(32, resTemp, Rn, rotated_imm)'
> ivValue = 'findOverflow(32, resTemp, Rn, rotated_imm)'
> elif flagtype == "sub":
> icValue = 'findCarry(32, resTemp, Rn, ~rotated_imm)'
> ivValue = 'findOverflow(32, resTemp, Rn, ~rotated_imm)'
> elif flagtype == "rsb":
> icValue = 'findCarry(32, resTemp, rotated_imm, ~Rn)'
> ivValue = 'findOverflow(32, resTemp, rotated_imm, ~Rn)'
> else:
> icValue = '(rotate ? rotated_carry:Cpsr<29:>)'
> ivValue = 'Cpsr<28:>'
> return calcCcCode % vars()
> }};
>
> def format DataOp(code, flagtype = logic) {{
> (regCcCode, immCcCode) = getCcCode(flagtype)
112,121d151
< if icValue == " ":
< icValueReg = 'shift_carry_rs(Rm, Rs, shift, Cpsr<29:>)'
< icValueImm = 'shift_carry_imm(Rm, shift_size, shift, Cpsr<29:>)'
< else:
< icValueReg = icValue
< icValueImm = icValue
< regCcCode = calcCcCode % {"icValue" : icValueReg,
< "ivValue" : ivValue}
< immCcCode = calcCcCode % {"icValue" : icValueImm,
< "ivValue" : ivValue}
149,151c179
< def format DataImmOp(code,
< icValue = {{ (rotate ? rotated_carry:Cpsr<29:>) }},
< ivValue = {{ Cpsr<28:> }}) {{
---
> def format DataImmOp(code, flagtype = logic) {{
157c185
< {"code": code + calcCcCode % vars(),
---
> {"code": code + getImmCcCode(flagtype),