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 ---