data.isa (7214:9eba696c4592) | data.isa (7215:4fb71bcb1126) |
---|---|
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 --- 59 unchanged lines hidden (view full) --- 68 # Dict of code to set the carry flag. (imm, reg, reg-reg) 69 oldC = 'CondCodes<29:>' 70 oldV = 'CondCodes<28:>' 71 carryCode = { 72 "none": (oldC, oldC, oldC), 73 "llbit": (oldC, oldC, oldC), 74 "saturate": ('0', '0', '0'), 75 "overflow": ('0', '0', '0'), | 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 --- 59 unchanged lines hidden (view full) --- 68 # Dict of code to set the carry flag. (imm, reg, reg-reg) 69 oldC = 'CondCodes<29:>' 70 oldV = 'CondCodes<28:>' 71 carryCode = { 72 "none": (oldC, oldC, oldC), 73 "llbit": (oldC, oldC, oldC), 74 "saturate": ('0', '0', '0'), 75 "overflow": ('0', '0', '0'), |
76 "ge": ('0', '0', '0'), |
|
76 "add": ('findCarry(32, resTemp, Op1, secondOp)', 77 'findCarry(32, resTemp, Op1, secondOp)', 78 'findCarry(32, resTemp, Op1, secondOp)'), 79 "sub": ('findCarry(32, resTemp, Op1, ~secondOp)', 80 'findCarry(32, resTemp, Op1, ~secondOp)', 81 'findCarry(32, resTemp, Op1, ~secondOp)'), 82 "rsb": ('findCarry(32, resTemp, secondOp, ~Op1)', 83 'findCarry(32, resTemp, secondOp, ~Op1)', 84 'findCarry(32, resTemp, secondOp, ~Op1)'), 85 "logic": ('(rotC ? bits(secondOp, 31) : %s)' % oldC, 86 'shift_carry_imm(Op2, shiftAmt, shiftType, %s)' % oldC, 87 'shift_carry_rs(Op2, Shift<7:0>, shiftType, %s)' % oldC) 88 } 89 # Dict of code to set the overflow flag. 90 overflowCode = { 91 "none": oldV, 92 "llbit": oldV, 93 "saturate": '0', 94 "overflow": '0', | 77 "add": ('findCarry(32, resTemp, Op1, secondOp)', 78 'findCarry(32, resTemp, Op1, secondOp)', 79 'findCarry(32, resTemp, Op1, secondOp)'), 80 "sub": ('findCarry(32, resTemp, Op1, ~secondOp)', 81 'findCarry(32, resTemp, Op1, ~secondOp)', 82 'findCarry(32, resTemp, Op1, ~secondOp)'), 83 "rsb": ('findCarry(32, resTemp, secondOp, ~Op1)', 84 'findCarry(32, resTemp, secondOp, ~Op1)', 85 'findCarry(32, resTemp, secondOp, ~Op1)'), 86 "logic": ('(rotC ? bits(secondOp, 31) : %s)' % oldC, 87 'shift_carry_imm(Op2, shiftAmt, shiftType, %s)' % oldC, 88 'shift_carry_rs(Op2, Shift<7:0>, shiftType, %s)' % oldC) 89 } 90 # Dict of code to set the overflow flag. 91 overflowCode = { 92 "none": oldV, 93 "llbit": oldV, 94 "saturate": '0', 95 "overflow": '0', |
96 "ge": '0', |
|
95 "add": 'findOverflow(32, resTemp, Op1, secondOp)', 96 "sub": 'findOverflow(32, resTemp, Op1, ~secondOp)', 97 "rsb": 'findOverflow(32, resTemp, secondOp, ~Op1)', 98 "logic": oldV 99 } 100 101 secondOpRe = re.compile("secondOp") 102 immOp2 = "imm" --- 42 unchanged lines hidden (view full) --- 145 cCode = carryCode[flagType] 146 vCode = overflowCode[flagType] 147 negBit = 31 148 if flagType == "llbit": 149 negBit = 63 150 if flagType == "saturate": 151 regCcCode = calcQCode 152 elif flagType == "ge": | 97 "add": 'findOverflow(32, resTemp, Op1, secondOp)', 98 "sub": 'findOverflow(32, resTemp, Op1, ~secondOp)', 99 "rsb": 'findOverflow(32, resTemp, secondOp, ~Op1)', 100 "logic": oldV 101 } 102 103 secondOpRe = re.compile("secondOp") 104 immOp2 = "imm" --- 42 unchanged lines hidden (view full) --- 147 cCode = carryCode[flagType] 148 vCode = overflowCode[flagType] 149 negBit = 31 150 if flagType == "llbit": 151 negBit = 63 152 if flagType == "saturate": 153 regCcCode = calcQCode 154 elif flagType == "ge": |
153 immCcCode = calcGECode | 155 regCcCode = calcGECode |
154 else: 155 regCcCode = calcCcCode % { 156 "icValue": secondOpRe.sub(regOp2, cCode[1]), 157 "ivValue": secondOpRe.sub(regOp2, vCode), 158 "negBit": negBit 159 } 160 regCode = secondOpRe.sub(regOp2, code) 161 regIop = InstObjParams(mnem, mnem.capitalize() + suffix, "DataRegOp", --- 21 unchanged lines hidden (view full) --- 183 cCode = carryCode[flagType] 184 vCode = overflowCode[flagType] 185 negBit = 31 186 if flagType == "llbit": 187 negBit = 63 188 if flagType == "saturate": 189 regRegCcCode = calcQCode 190 elif flagType == "ge": | 156 else: 157 regCcCode = calcCcCode % { 158 "icValue": secondOpRe.sub(regOp2, cCode[1]), 159 "ivValue": secondOpRe.sub(regOp2, vCode), 160 "negBit": negBit 161 } 162 regCode = secondOpRe.sub(regOp2, code) 163 regIop = InstObjParams(mnem, mnem.capitalize() + suffix, "DataRegOp", --- 21 unchanged lines hidden (view full) --- 185 cCode = carryCode[flagType] 186 vCode = overflowCode[flagType] 187 negBit = 31 188 if flagType == "llbit": 189 negBit = 63 190 if flagType == "saturate": 191 regRegCcCode = calcQCode 192 elif flagType == "ge": |
191 immCcCode = calcGECode | 193 regRegCcCode = calcGECode |
192 else: 193 regRegCcCode = calcCcCode % { 194 "icValue": secondOpRe.sub(regRegOp2, cCode[2]), 195 "ivValue": secondOpRe.sub(regRegOp2, vCode), 196 "negBit": negBit 197 } 198 regRegCode = secondOpRe.sub(regRegOp2, code) 199 regRegIop = InstObjParams(mnem, mnem.capitalize() + suffix, --- 155 unchanged lines hidden (view full) --- 355 int64_t arg2Low = sext<16>(bits(Op2.sw, 15, 0)); 356 int64_t arg2High = sext<16>(bits(Op2.sw, 31, 16)); 357 saturateOp<16>(midRes, arg1Low, arg2High); 358 replaceBits(resTemp, 15, 0, midRes); 359 saturateOp<16>(midRes, arg1High, arg2Low, true); 360 replaceBits(resTemp, 31, 16, midRes); 361 Dest = resTemp; 362 ''', flagType="none", buildCc=False) | 194 else: 195 regRegCcCode = calcCcCode % { 196 "icValue": secondOpRe.sub(regRegOp2, cCode[2]), 197 "ivValue": secondOpRe.sub(regRegOp2, vCode), 198 "negBit": negBit 199 } 200 regRegCode = secondOpRe.sub(regRegOp2, code) 201 regRegIop = InstObjParams(mnem, mnem.capitalize() + suffix, --- 155 unchanged lines hidden (view full) --- 357 int64_t arg2Low = sext<16>(bits(Op2.sw, 15, 0)); 358 int64_t arg2High = sext<16>(bits(Op2.sw, 31, 16)); 359 saturateOp<16>(midRes, arg1Low, arg2High); 360 replaceBits(resTemp, 15, 0, midRes); 361 saturateOp<16>(midRes, arg1High, arg2Low, true); 362 replaceBits(resTemp, 31, 16, midRes); 363 Dest = resTemp; 364 ''', flagType="none", buildCc=False) |
365 366 buildRegDataInst("sadd8", ''' 367 uint32_t geBits = 0; 368 resTemp = 0; 369 for (unsigned i = 0; i < 4; i++) { 370 int high = (i + 1) * 8 - 1; 371 int low = i * 8; 372 int32_t midRes = sext<8>(bits(Op1, high, low)) + 373 sext<8>(bits(Op2, high, low)); 374 replaceBits(resTemp, high, low, midRes); 375 if (midRes >= 0) { 376 geBits = geBits | (1 << i); 377 } 378 } 379 Dest = resTemp; 380 resTemp = geBits; 381 ''', flagType="ge", buildNonCc=False) 382 buildRegDataInst("sadd16", ''' 383 uint32_t geBits = 0; 384 resTemp = 0; 385 for (unsigned i = 0; i < 2; i++) { 386 int high = (i + 1) * 16 - 1; 387 int low = i * 16; 388 int32_t midRes = sext<16>(bits(Op1, high, low)) + 389 sext<16>(bits(Op2, high, low)); 390 replaceBits(resTemp, high, low, midRes); 391 if (midRes >= 0) { 392 geBits = geBits | (0x3 << (i * 2)); 393 } 394 } 395 Dest = resTemp; 396 resTemp = geBits; 397 ''', flagType="ge", buildNonCc=False) |
|
363}}; | 398}}; |