data.isa (9077:e236675714a4) data.isa (9250:dab0f29394f0)
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

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

111 }
112
113 secondOpRe = re.compile("secondOp")
114 immOp2 = "imm"
115 regOp2 = "shift_rm_imm(Op2, shiftAmt, shiftType, OptShiftRmCondCodesC)"
116 regRegOp2 = "shift_rm_rs(Op2, Shift<7:0>, shiftType, 0)"
117
118 def buildImmDataInst(mnem, code, flagType = "logic", suffix = "Imm", \
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

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

111 }
112
113 secondOpRe = re.compile("secondOp")
114 immOp2 = "imm"
115 regOp2 = "shift_rm_imm(Op2, shiftAmt, shiftType, OptShiftRmCondCodesC)"
116 regRegOp2 = "shift_rm_rs(Op2, Shift<7:0>, shiftType, 0)"
117
118 def buildImmDataInst(mnem, code, flagType = "logic", suffix = "Imm", \
119 buildCc = True, buildNonCc = True, instFlags = []):
119 buildCc = True, buildNonCc = True, isBranch = "0", \
120 instFlags = []):
120 cCode = carryCode[flagType]
121 vCode = overflowCode[flagType]
122 negBit = 31
123 if flagType == "llbit":
124 negBit = 63
125 if flagType == "saturate":
126 immCcCode = calcQCode
127 elif flagType == "ge":
128 immCcCode = calcGECode
129 else:
130 immCcCode = createCcCode(negBit, secondOpRe.sub(immOp2, cCode[0]),
131 secondOpRe.sub(immOp2, vCode))
132
133 immCode = secondOpRe.sub(immOp2, code)
134 immIop = InstObjParams(mnem, mnem.capitalize() + suffix, "DataImmOp",
135 {"code" : immCode,
121 cCode = carryCode[flagType]
122 vCode = overflowCode[flagType]
123 negBit = 31
124 if flagType == "llbit":
125 negBit = 63
126 if flagType == "saturate":
127 immCcCode = calcQCode
128 elif flagType == "ge":
129 immCcCode = calcGECode
130 else:
131 immCcCode = createCcCode(negBit, secondOpRe.sub(immOp2, cCode[0]),
132 secondOpRe.sub(immOp2, vCode))
133
134 immCode = secondOpRe.sub(immOp2, code)
135 immIop = InstObjParams(mnem, mnem.capitalize() + suffix, "DataImmOp",
136 {"code" : immCode,
137 "is_branch" : isBranch,
136 "predicate_test": pickPredicate(immCode)}, instFlags)
137 immIopCc = InstObjParams(mnem + "s", mnem.capitalize() + suffix + "Cc",
138 "DataImmOp",
139 {"code" : immCode + immCcCode,
138 "predicate_test": pickPredicate(immCode)}, instFlags)
139 immIopCc = InstObjParams(mnem + "s", mnem.capitalize() + suffix + "Cc",
140 "DataImmOp",
141 {"code" : immCode + immCcCode,
142 "is_branch" : isBranch,
140 "predicate_test": pickPredicate(immCode + immCcCode)}, instFlags)
141
142 def subst(iop):
143 global header_output, decoder_output, exec_output
144 header_output += DataImmDeclare.subst(iop)
145 decoder_output += DataImmConstructor.subst(iop)
146 exec_output += PredOpExecute.subst(iop)
147

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

239 aiw = True, regRegAiw = True,
240 subsPcLr = True, isRasPop = "0", isBranch = "0"):
241 regRegCode = instCode = code
242 if aiw:
243 instCode = "AIW" + instCode
244 if regRegAiw:
245 regRegCode = "AIW" + regRegCode
246
143 "predicate_test": pickPredicate(immCode + immCcCode)}, instFlags)
144
145 def subst(iop):
146 global header_output, decoder_output, exec_output
147 header_output += DataImmDeclare.subst(iop)
148 decoder_output += DataImmConstructor.subst(iop)
149 exec_output += PredOpExecute.subst(iop)
150

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

242 aiw = True, regRegAiw = True,
243 subsPcLr = True, isRasPop = "0", isBranch = "0"):
244 regRegCode = instCode = code
245 if aiw:
246 instCode = "AIW" + instCode
247 if regRegAiw:
248 regRegCode = "AIW" + regRegCode
249
247 buildImmDataInst(mnem, instCode, flagType)
250 buildImmDataInst(mnem, instCode, flagType, isBranch = isBranch)
248 buildRegDataInst(mnem, instCode, flagType,
249 isRasPop = isRasPop, isBranch = isBranch)
250 buildRegRegDataInst(mnem, regRegCode, flagType)
251 if subsPcLr:
252 code += '''
253 SCTLR sctlr = Sctlr;
254 CPSR old_cpsr = Cpsr;
255

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

271 suffix = "ImmPclr", buildCc = False,
272 instFlags = ["IsSerializeAfter","IsNonSpeculative"])
273 buildRegDataInst(mnem + 's', code, flagType,
274 suffix = "RegPclr", buildCc = False,
275 instFlags = ["IsSerializeAfter","IsNonSpeculative"])
276
277 buildDataInst("and", "Dest = resTemp = Op1 & secondOp;")
278 buildDataInst("eor", "Dest = resTemp = Op1 ^ secondOp;")
251 buildRegDataInst(mnem, instCode, flagType,
252 isRasPop = isRasPop, isBranch = isBranch)
253 buildRegRegDataInst(mnem, regRegCode, flagType)
254 if subsPcLr:
255 code += '''
256 SCTLR sctlr = Sctlr;
257 CPSR old_cpsr = Cpsr;
258

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

274 suffix = "ImmPclr", buildCc = False,
275 instFlags = ["IsSerializeAfter","IsNonSpeculative"])
276 buildRegDataInst(mnem + 's', code, flagType,
277 suffix = "RegPclr", buildCc = False,
278 instFlags = ["IsSerializeAfter","IsNonSpeculative"])
279
280 buildDataInst("and", "Dest = resTemp = Op1 & secondOp;")
281 buildDataInst("eor", "Dest = resTemp = Op1 ^ secondOp;")
279 buildDataInst("sub", "Dest = resTemp = Op1 - secondOp;", "sub")
282 buildDataInst("sub", "Dest = resTemp = Op1 - secondOp;", "sub",
283 isBranch = "dest == INTREG_PC")
280 buildDataInst("rsb", "Dest = resTemp = secondOp - Op1;", "rsb")
284 buildDataInst("rsb", "Dest = resTemp = secondOp - Op1;", "rsb")
281 buildDataInst("add", "Dest = resTemp = Op1 + secondOp;", "add")
285 buildDataInst("add", "Dest = resTemp = Op1 + secondOp;", "add",
286 isBranch = "dest == INTREG_PC")
282 buildImmDataInst("adr", '''
283 Dest = resTemp = (PC & ~0x3) +
284 (op1 ? secondOp : -secondOp);
287 buildImmDataInst("adr", '''
288 Dest = resTemp = (PC & ~0x3) +
289 (op1 ? secondOp : -secondOp);
285 ''')
290 ''', isBranch = "dest == INTREG_PC")
286 buildDataInst("adc", "Dest = resTemp = Op1 + secondOp + %s;" % oldC, "add")
287 buildDataInst("sbc", "Dest = resTemp = Op1 - secondOp - !%s;" % oldC, "sub")
288 buildDataInst("rsc", "Dest = resTemp = secondOp - Op1 - !%s;" % oldC, "rsb")
289 buildDataInst("tst", "resTemp = Op1 & secondOp;", aiw = False)
290 buildDataInst("teq", "resTemp = Op1 ^ secondOp;", aiw = False)
291 buildDataInst("cmp", "resTemp = Op1 - secondOp;", "sub", aiw = False)
292 buildDataInst("cmn", "resTemp = Op1 + secondOp;", "add", aiw = False)
293 buildDataInst("orr", "Dest = resTemp = Op1 | secondOp;")

--- 551 unchanged lines hidden ---
291 buildDataInst("adc", "Dest = resTemp = Op1 + secondOp + %s;" % oldC, "add")
292 buildDataInst("sbc", "Dest = resTemp = Op1 - secondOp - !%s;" % oldC, "sub")
293 buildDataInst("rsc", "Dest = resTemp = secondOp - Op1 - !%s;" % oldC, "rsb")
294 buildDataInst("tst", "resTemp = Op1 & secondOp;", aiw = False)
295 buildDataInst("teq", "resTemp = Op1 ^ secondOp;", aiw = False)
296 buildDataInst("cmp", "resTemp = Op1 - secondOp;", "sub", aiw = False)
297 buildDataInst("cmn", "resTemp = Op1 + secondOp;", "add", aiw = False)
298 buildDataInst("orr", "Dest = resTemp = Op1 | secondOp;")

--- 551 unchanged lines hidden ---