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