macromem.isa (6310:be6658746087) macromem.isa (6717:07546255fb03)
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

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

208 start_addr = 4;
209 break;
210 default:
211 panic("Unhandled Load/Store Multiple Instruction, "
212 "puswl = 0x%x", (unsigned) puswl);
213 break;
214 }
215
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

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

208 start_addr = 4;
209 break;
210 default:
211 panic("Unhandled Load/Store Multiple Instruction, "
212 "puswl = 0x%x", (unsigned) puswl);
213 break;
214 }
215
216 // Add 0 to Rn and stick it in Raddr (register 17).
216 // Add 0 to Rn and stick it in ureg0.
217 // This is equivalent to a move.
217 // This is equivalent to a move.
218 microOps[0] = new MicroAddiUop(machInst, 17, RN, 0);
218 microOps[0] = new MicroAddiUop(machInst, INTREG_UREG0, RN, 0);
219
220 unsigned j = 0;
221 for (int i = 1; i < ones+1; i++) {
222 // Get next available bit for transfer
223 while (! ( regs_to_handle & (1<<j)))
224 j++;
225 regs_to_handle &= ~(1<<j);
226
227 if (loadop)
219
220 unsigned j = 0;
221 for (int i = 1; i < ones+1; i++) {
222 // Get next available bit for transfer
223 while (! ( regs_to_handle & (1<<j)))
224 j++;
225 regs_to_handle &= ~(1<<j);
226
227 if (loadop)
228 microOps[i] = new MicroLdrUop(machInst, j, 17, start_addr);
228 microOps[i] = new MicroLdrUop(machInst, j,
229 INTREG_UREG0, start_addr);
229 else
230 else
230 microOps[i] = new MicroStrUop(machInst, j, 17, start_addr);
231 microOps[i] = new MicroStrUop(machInst, j,
232 INTREG_UREG0, start_addr);
231
232 if (up)
233 start_addr += 4;
234 else
235 start_addr -= 4;
236 }
237
238 if (writeback) {

--- 121 unchanged lines hidden ---
233
234 if (up)
235 start_addr += 4;
236 else
237 start_addr -= 4;
238 }
239
240 if (writeback) {

--- 121 unchanged lines hidden ---