1// -*- mode:c++ -*- 2 3// Copyright (c) 2010 ARM Limited 4// All rights reserved 5// 6// The license below extends only to copyright in the software and shall 7// not be construed as granting a license to any other intellectual 8// property including but not limited to intellectual property relating --- 30 unchanged lines hidden (view full) --- 39 40let {{ 41 42 header_output = "" 43 decoder_output = "" 44 exec_output = "" 45 46 calcGECode = ''' |
47 CondCodesGE = insertBits(0, 19, 16, resTemp); |
48 ''' 49 50 calcQCode = ''' |
51 CondCodesQ = CondCodesQ | ((resTemp & 1) << 27); |
52 ''' 53 54 calcCcCode = ''' 55 uint16_t _ic, _iv, _iz, _in; 56 _in = (resTemp >> %(negBit)d) & 1; 57 _iz = (resTemp == 0); 58 _iv = %(ivValue)s & 1; 59 _ic = %(icValue)s & 1; 60 |
61 CondCodesF = _in << 31 | _iz << 30 | _ic << 29 | _iv << 28; |
62 63 DPRINTF(Arm, "(in, iz, ic, iv) = (%%d, %%d, %%d, %%d)\\n", 64 _in, _iz, _ic, _iv); 65 ''' 66 67 # Dict of code to set the carry flag. (imm, reg, reg-reg) |
68 oldC = 'CondCodesF<29:>' 69 oldV = 'CondCodesF<28:>' |
70 carryCode = { 71 "none": (oldC, oldC, oldC), 72 "llbit": (oldC, oldC, oldC), 73 "saturate": ('0', '0', '0'), 74 "overflow": ('0', '0', '0'), 75 "ge": ('0', '0', '0'), 76 "add": ('findCarry(32, resTemp, Op1, secondOp)', 77 'findCarry(32, resTemp, Op1, secondOp)', --- 18 unchanged lines hidden (view full) --- 96 "add": 'findOverflow(32, resTemp, Op1, secondOp)', 97 "sub": 'findOverflow(32, resTemp, Op1, ~secondOp)', 98 "rsb": 'findOverflow(32, resTemp, secondOp, ~Op1)', 99 "logic": oldV 100 } 101 102 secondOpRe = re.compile("secondOp") 103 immOp2 = "imm" |
104 regOp2 = "shift_rm_imm(Op2, shiftAmt, shiftType, CondCodesF<29:>)" 105 regRegOp2 = "shift_rm_rs(Op2, Shift<7:0>, shiftType, CondCodesF<29:>)" |
106 107 def buildImmDataInst(mnem, code, flagType = "logic", suffix = "Imm", \ 108 buildCc = True, buildNonCc = True, instFlags = []): 109 cCode = carryCode[flagType] 110 vCode = overflowCode[flagType] 111 negBit = 31 112 if flagType == "llbit": 113 negBit = 63 --- 120 unchanged lines hidden (view full) --- 234 buildImmDataInst(mnem, instCode, flagType) 235 buildRegDataInst(mnem, instCode, flagType, 236 isRasPop = isRasPop, isBranch = isBranch) 237 buildRegRegDataInst(mnem, regRegCode, flagType) 238 if subsPcLr: 239 code += ''' 240 SCTLR sctlr = Sctlr; 241 uint32_t newCpsr = |
242 cpsrWriteByInstr(Cpsr | CondCodesF | CondCodesQ | CondCodesGE, 243 Spsr, 0xF, true, sctlr.nmfi); |
244 Cpsr = ~CondCodesMask & newCpsr; |
245 CondCodesF = CondCodesMaskF & newCpsr; 246 CondCodesQ = CondCodesMaskQ & newCpsr; 247 CondCodesGE = CondCodesMaskGE & newCpsr; |
248 NextThumb = ((CPSR)newCpsr).t; 249 NextJazelle = ((CPSR)newCpsr).j; 250 NextItState = ((((CPSR)newCpsr).it2 << 2) & 0xFC) 251 | (((CPSR)newCpsr).it1 & 0x3); 252 SevMailbox = 1; 253 ''' 254 buildImmDataInst(mnem + 's', code, flagType, 255 suffix = "ImmPclr", buildCc = False, --- 573 unchanged lines hidden --- |