macromem.isa (6754:72836109775f) | macromem.isa (6755:e9970c1bccdd) |
---|---|
1// -*- mode:c++ -*- 2 3// Copyright (c) 2007-2008 The Florida State University 4// All rights reserved. 5// 6// Redistribution and use in source and binary forms, with or without 7// modification, are permitted provided that the following conditions are 8// met: redistributions of source code must retain the above copyright --- 196 unchanged lines hidden (view full) --- 205 if (machInst.puswl.prepost) 206 addr += 4; 207 208 // Add 0 to Rn and stick it in ureg0. 209 // This is equivalent to a move. 210 microOps[0] = new MicroAddiUop(machInst, INTREG_UREG0, RN, 0); 211 212 unsigned reg = 0; | 1// -*- mode:c++ -*- 2 3// Copyright (c) 2007-2008 The Florida State University 4// All rights reserved. 5// 6// Redistribution and use in source and binary forms, with or without 7// modification, are permitted provided that the following conditions are 8// met: redistributions of source code must retain the above copyright --- 196 unchanged lines hidden (view full) --- 205 if (machInst.puswl.prepost) 206 addr += 4; 207 208 // Add 0 to Rn and stick it in ureg0. 209 // This is equivalent to a move. 210 microOps[0] = new MicroAddiUop(machInst, INTREG_UREG0, RN, 0); 211 212 unsigned reg = 0; |
213 bool forceUser = machInst.puswl.psruser; |
|
213 for (int i = 1; i < ones + 1; i++) { 214 // Find the next register. 215 while (!bits(regs, reg)) 216 reg++; 217 replaceBits(regs, reg, 0); 218 219 unsigned regIdx = reg; | 214 for (int i = 1; i < ones + 1; i++) { 215 // Find the next register. 216 while (!bits(regs, reg)) 217 reg++; 218 replaceBits(regs, reg, 0); 219 220 unsigned regIdx = reg; |
220 if (machInst.puswl.psruser) { | 221 if (forceUser) { |
221 regIdx = intRegForceUser(regIdx); 222 } 223 224 if (machInst.puswl.loadOp) { | 222 regIdx = intRegForceUser(regIdx); 223 } 224 225 if (machInst.puswl.loadOp) { |
225 microOps[i] = 226 new MicroLdrUop(machInst, regIdx, INTREG_UREG0, addr); | 226 if (reg == INTREG_PC && forceUser) { 227 // This must be the exception return form of ldm. 228 microOps[i] = 229 new MicroLdrRetUop(machInst, regIdx, INTREG_UREG0, addr); 230 } else { 231 microOps[i] = 232 new MicroLdrUop(machInst, regIdx, INTREG_UREG0, addr); 233 } |
227 } else { 228 microOps[i] = 229 new MicroStrUop(machInst, regIdx, INTREG_UREG0, addr); 230 } 231 232 if (up) 233 addr += 4; 234 else --- 124 unchanged lines hidden --- | 234 } else { 235 microOps[i] = 236 new MicroStrUop(machInst, regIdx, INTREG_UREG0, addr); 237 } 238 239 if (up) 240 addr += 4; 241 else --- 124 unchanged lines hidden --- |