regop.isa (12588:c007da6c777a) | regop.isa (13613:a19963be12ca) |
---|---|
1// Copyright (c) 2007-2008 The Hewlett-Packard Development Company 2// All rights reserved. 3// 4// The license below extends only to copyright in the software and shall 5// not be construed as granting a license to any other intellectual 6// property including but not limited to intellectual property relating 7// to a hardware implementation of the functionality of the software 8// licensed hereunder. You may use the software subject to the license --- 37 unchanged lines hidden (view full) --- 46 Trace::InstRecord *traceData) const 47 { 48 Fault fault = NoFault; 49 50 DPRINTF(X86, "The data size is %d\n", dataSize); 51 %(op_decl)s; 52 %(op_rd)s; 53 | 1// Copyright (c) 2007-2008 The Hewlett-Packard Development Company 2// All rights reserved. 3// 4// The license below extends only to copyright in the software and shall 5// not be construed as granting a license to any other intellectual 6// property including but not limited to intellectual property relating 7// to a hardware implementation of the functionality of the software 8// licensed hereunder. You may use the software subject to the license --- 37 unchanged lines hidden (view full) --- 46 Trace::InstRecord *traceData) const 47 { 48 Fault fault = NoFault; 49 50 DPRINTF(X86, "The data size is %d\n", dataSize); 51 %(op_decl)s; 52 %(op_rd)s; 53 |
54 IntReg result M5_VAR_USED; | 54 RegVal result M5_VAR_USED; |
55 56 if(%(cond_check)s) 57 { 58 %(code)s; 59 %(flag_code)s; 60 } 61 else 62 { --- 13 unchanged lines hidden (view full) --- 76 Fault %(class_name)s::execute(ExecContext *xc, 77 Trace::InstRecord *traceData) const 78 { 79 Fault fault = NoFault; 80 81 %(op_decl)s; 82 %(op_rd)s; 83 | 55 56 if(%(cond_check)s) 57 { 58 %(code)s; 59 %(flag_code)s; 60 } 61 else 62 { --- 13 unchanged lines hidden (view full) --- 76 Fault %(class_name)s::execute(ExecContext *xc, 77 Trace::InstRecord *traceData) const 78 { 79 Fault fault = NoFault; 80 81 %(op_decl)s; 82 %(op_rd)s; 83 |
84 IntReg result M5_VAR_USED; | 84 RegVal result M5_VAR_USED; |
85 86 if(%(cond_check)s) 87 { 88 %(code)s; 89 %(flag_code)s; 90 } 91 else 92 { --- 1122 unchanged lines hidden (view full) --- 1215 ecfBit = newFlags & ECFBit; 1216 ezfBit = newFlags & EZFBit; 1217 dfBit = newFlags & DFBit; 1218 ccFlagBits = newFlags & ccFlagMask; 1219 ''' 1220 1221 class Wrflags(WrRegOp): 1222 code = ''' | 85 86 if(%(cond_check)s) 87 { 88 %(code)s; 89 %(flag_code)s; 90 } 91 else 92 { --- 1122 unchanged lines hidden (view full) --- 1215 ecfBit = newFlags & ECFBit; 1216 ezfBit = newFlags & EZFBit; 1217 dfBit = newFlags & DFBit; 1218 ccFlagBits = newFlags & ccFlagMask; 1219 ''' 1220 1221 class Wrflags(WrRegOp): 1222 code = ''' |
1223 MiscReg newFlags = psrc1 ^ op2; 1224 MiscReg userFlagMask = 0xDD5; | 1223 RegVal newFlags = psrc1 ^ op2; 1224 RegVal userFlagMask = 0xDD5; |
1225 1226 // Get only the user flags 1227 ccFlagBits = newFlags & ccFlagMask; 1228 dfBit = newFlags & DFBit; 1229 cfofBits = newFlags & cfofMask; 1230 ecfBit = 0; 1231 ezfBit = 0; 1232 --- 30 unchanged lines hidden (view full) --- 1263 1264 def __init__(self, dest, imm, flags=None, \ 1265 dataSize="env.dataSize"): 1266 super(Ruflag, self).__init__(dest, \ 1267 "InstRegIndex(NUM_INTREGS)", imm, flags, dataSize) 1268 1269 class Rflag(RegOp): 1270 code = ''' | 1225 1226 // Get only the user flags 1227 ccFlagBits = newFlags & ccFlagMask; 1228 dfBit = newFlags & DFBit; 1229 cfofBits = newFlags & cfofMask; 1230 ecfBit = 0; 1231 ezfBit = 0; 1232 --- 30 unchanged lines hidden (view full) --- 1263 1264 def __init__(self, dest, imm, flags=None, \ 1265 dataSize="env.dataSize"): 1266 super(Ruflag, self).__init__(dest, \ 1267 "InstRegIndex(NUM_INTREGS)", imm, flags, dataSize) 1268 1269 class Rflag(RegOp): 1270 code = ''' |
1271 MiscReg flagMask = 0x3F7FDD5; 1272 MiscReg flags = (nccFlagBits | ccFlagBits | cfofBits | dfBit | | 1271 RegVal flagMask = 0x3F7FDD5; 1272 RegVal flags = (nccFlagBits | ccFlagBits | cfofBits | dfBit | |
1273 ecfBit | ezfBit) & flagMask; 1274 1275 int flag = bits(flags, imm8); 1276 DestReg = merge(DestReg, flag, dataSize); 1277 ezfBit = (flag == 0) ? EZFBit : 0; 1278 ''' 1279 1280 big_code = ''' | 1273 ecfBit | ezfBit) & flagMask; 1274 1275 int flag = bits(flags, imm8); 1276 DestReg = merge(DestReg, flag, dataSize); 1277 ezfBit = (flag == 0) ? EZFBit : 0; 1278 ''' 1279 1280 big_code = ''' |
1281 MiscReg flagMask = 0x3F7FDD5; 1282 MiscReg flags = (nccFlagBits | ccFlagBits | cfofBits | dfBit | | 1281 RegVal flagMask = 0x3F7FDD5; 1282 RegVal flags = (nccFlagBits | ccFlagBits | cfofBits | dfBit | |
1283 ecfBit | ezfBit) & flagMask; 1284 1285 int flag = bits(flags, imm8); 1286 DestReg = flag & mask(dataSize * 8); 1287 ezfBit = (flag == 0) ? EZFBit : 0; 1288 ''' 1289 1290 def __init__(self, dest, imm, flags=None, \ 1291 dataSize="env.dataSize"): 1292 super(Rflag, self).__init__(dest, \ 1293 "InstRegIndex(NUM_INTREGS)", imm, flags, dataSize) 1294 1295 class Sext(RegOp): 1296 code = ''' | 1283 ecfBit | ezfBit) & flagMask; 1284 1285 int flag = bits(flags, imm8); 1286 DestReg = flag & mask(dataSize * 8); 1287 ezfBit = (flag == 0) ? EZFBit : 0; 1288 ''' 1289 1290 def __init__(self, dest, imm, flags=None, \ 1291 dataSize="env.dataSize"): 1292 super(Rflag, self).__init__(dest, \ 1293 "InstRegIndex(NUM_INTREGS)", imm, flags, dataSize) 1294 1295 class Sext(RegOp): 1296 code = ''' |
1297 IntReg val = psrc1; | 1297 RegVal val = psrc1; |
1298 // Mask the bit position so that it wraps. 1299 int bitPos = op2 & (dataSize * 8 - 1); 1300 int sign_bit = bits(val, bitPos, bitPos); 1301 uint64_t maskVal = mask(bitPos+1); 1302 val = sign_bit ? (val | ~maskVal) : (val & maskVal); 1303 DestReg = merge(DestReg, val, dataSize); 1304 ''' 1305 1306 big_code = ''' | 1298 // Mask the bit position so that it wraps. 1299 int bitPos = op2 & (dataSize * 8 - 1); 1300 int sign_bit = bits(val, bitPos, bitPos); 1301 uint64_t maskVal = mask(bitPos+1); 1302 val = sign_bit ? (val | ~maskVal) : (val & maskVal); 1303 DestReg = merge(DestReg, val, dataSize); 1304 ''' 1305 1306 big_code = ''' |
1307 IntReg val = psrc1; | 1307 RegVal val = psrc1; |
1308 // Mask the bit position so that it wraps. 1309 int bitPos = op2 & (dataSize * 8 - 1); 1310 int sign_bit = bits(val, bitPos, bitPos); 1311 uint64_t maskVal = mask(bitPos+1); 1312 val = sign_bit ? (val | ~maskVal) : (val & maskVal); 1313 DestReg = val & mask(dataSize * 8); 1314 ''' 1315 --- 69 unchanged lines hidden (view full) --- 1385 class Wrcr(RegOp): 1386 def __init__(self, dest, src1, flags=None, dataSize="env.dataSize"): 1387 super(Wrcr, self).__init__(dest, \ 1388 src1, "InstRegIndex(NUM_INTREGS)", flags, dataSize) 1389 code = ''' 1390 if (dest == 1 || (dest > 4 && dest < 8) || (dest > 8)) { 1391 fault = std::make_shared<InvalidOpcode>(); 1392 } else { | 1308 // Mask the bit position so that it wraps. 1309 int bitPos = op2 & (dataSize * 8 - 1); 1310 int sign_bit = bits(val, bitPos, bitPos); 1311 uint64_t maskVal = mask(bitPos+1); 1312 val = sign_bit ? (val | ~maskVal) : (val & maskVal); 1313 DestReg = val & mask(dataSize * 8); 1314 ''' 1315 --- 69 unchanged lines hidden (view full) --- 1385 class Wrcr(RegOp): 1386 def __init__(self, dest, src1, flags=None, dataSize="env.dataSize"): 1387 super(Wrcr, self).__init__(dest, \ 1388 src1, "InstRegIndex(NUM_INTREGS)", flags, dataSize) 1389 code = ''' 1390 if (dest == 1 || (dest > 4 && dest < 8) || (dest > 8)) { 1391 fault = std::make_shared<InvalidOpcode>(); 1392 } else { |
1393 // There are *s in the line below so it doesn't confuse the 1394 // parser. They may be unnecessary. 1395 //Mis*cReg old*Val = pick(Cont*rolDest, 0, dat*aSize); 1396 MiscReg newVal = psrc1; | 1393 RegVal newVal = psrc1; |
1397 1398 // Check for any modifications that would cause a fault. 1399 switch(dest) { 1400 case 0: 1401 { 1402 Efer efer = EferOp; 1403 CR0 cr0 = newVal; 1404 CR4 oldCr4 = CR4Op; --- 326 unchanged lines hidden --- | 1394 1395 // Check for any modifications that would cause a fault. 1396 switch(dest) { 1397 case 0: 1398 { 1399 Efer efer = EferOp; 1400 CR0 cr0 = newVal; 1401 CR4 oldCr4 = CR4Op; --- 326 unchanged lines hidden --- |