ldstop.isa (12236:126ac9da6050) ldstop.isa (12384:481add71d2e4)
1// Copyright (c) 2007-2008 The Hewlett-Packard Development Company
2// Copyright (c) 2015 Advanced Micro Devices, Inc.
3// All rights reserved.
4//
5// The license below extends only to copyright in the software and shall
6// not be construed as granting a license to any other intellectual
7// property including but not limited to intellectual property relating
8// to a hardware implementation of the functionality of the software

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

94 Fault fault = NoFault;
95 Addr EA;
96
97 %(op_decl)s;
98 %(op_rd)s;
99 %(ea_code)s;
100 DPRINTF(X86, "%s : %s: The address is %#x\n", instMnem, mnemonic, EA);
101
1// Copyright (c) 2007-2008 The Hewlett-Packard Development Company
2// Copyright (c) 2015 Advanced Micro Devices, Inc.
3// All rights reserved.
4//
5// The license below extends only to copyright in the software and shall
6// not be construed as granting a license to any other intellectual
7// property including but not limited to intellectual property relating
8// to a hardware implementation of the functionality of the software

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

94 Fault fault = NoFault;
95 Addr EA;
96
97 %(op_decl)s;
98 %(op_rd)s;
99 %(ea_code)s;
100 DPRINTF(X86, "%s : %s: The address is %#x\n", instMnem, mnemonic, EA);
101
102 fault = readMemAtomic(xc, traceData, EA, Mem,
103 %(memDataSize)s, memFlags);
102 fault = readMemAtomic(xc, traceData, EA, Mem, dataSize, memFlags);
104
105 if (fault == NoFault) {
106 %(code)s;
107 } else if (memFlags & Request::PREFETCH) {
108 // For prefetches, ignore any faults/exceptions.
109 return NoFault;
110 }
111 if(fault == NoFault)

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

140 Fault %(class_name)s::completeAcc(PacketPtr pkt, ExecContext * xc,
141 Trace::InstRecord * traceData) const
142 {
143 Fault fault = NoFault;
144
145 %(op_decl)s;
146 %(op_rd)s;
147
103
104 if (fault == NoFault) {
105 %(code)s;
106 } else if (memFlags & Request::PREFETCH) {
107 // For prefetches, ignore any faults/exceptions.
108 return NoFault;
109 }
110 if(fault == NoFault)

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

139 Fault %(class_name)s::completeAcc(PacketPtr pkt, ExecContext * xc,
140 Trace::InstRecord * traceData) const
141 {
142 Fault fault = NoFault;
143
144 %(op_decl)s;
145 %(op_rd)s;
146
148 getMem(pkt, Mem, %(memDataSize)s, traceData);
147 getMem(pkt, Mem, dataSize, traceData);
149
150 %(code)s;
151
152 if(fault == NoFault)
153 {
154 %(op_wb)s;
155 }
156

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

169 Addr EA;
170 %(op_decl)s;
171 %(op_rd)s;
172 %(ea_code)s;
173 DPRINTF(X86, "%s : %s: The address is %#x\n", instMnem, mnemonic, EA);
174
175 %(code)s;
176
148
149 %(code)s;
150
151 if(fault == NoFault)
152 {
153 %(op_wb)s;
154 }
155

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

168 Addr EA;
169 %(op_decl)s;
170 %(op_rd)s;
171 %(ea_code)s;
172 DPRINTF(X86, "%s : %s: The address is %#x\n", instMnem, mnemonic, EA);
173
174 %(code)s;
175
177 if(fault == NoFault)
178 {
179 fault = writeMemAtomic(xc, traceData, Mem, %(memDataSize)s, EA,
180 memFlags, NULL);
181 if(fault == NoFault)
182 {
176 if (fault == NoFault) {
177 fault = writeMemAtomic(xc, traceData, Mem, dataSize, EA,
178 memFlags, NULL);
179 if (fault == NoFault) {
183 %(op_wb)s;
184 }
185 }
186
187 return fault;
188 }
189}};
190

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

197 Addr EA;
198 %(op_decl)s;
199 %(op_rd)s;
200 %(ea_code)s;
201 DPRINTF(X86, "%s : %s: The address is %#x\n", instMnem, mnemonic, EA);
202
203 %(code)s;
204
180 %(op_wb)s;
181 }
182 }
183
184 return fault;
185 }
186}};
187

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

194 Addr EA;
195 %(op_decl)s;
196 %(op_rd)s;
197 %(ea_code)s;
198 DPRINTF(X86, "%s : %s: The address is %#x\n", instMnem, mnemonic, EA);
199
200 %(code)s;
201
205 if(fault == NoFault)
206 {
207 fault = writeMemTiming(xc, traceData, Mem, %(memDataSize)s, EA,
208 memFlags, NULL);
202 if (fault == NoFault) {
203 fault = writeMemTiming(xc, traceData, Mem, dataSize, EA,
204 memFlags, NULL);
209 }
210 return fault;
211 }
212}};
213
214def template MicroStoreCompleteAcc {{
215 Fault %(class_name)s::completeAcc(PacketPtr pkt,
216 ExecContext * xc, Trace::InstRecord * traceData) const

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

556 disp, dataSize, addressSize, mem_flags,
557 atCPL0, prefetch, nonSpec, implicitStack)
558 self.className = Name
559 self.mnemonic = name
560
561 microopClasses[name] = LoadOp
562
563 code = '''
205 }
206 return fault;
207 }
208}};
209
210def template MicroStoreCompleteAcc {{
211 Fault %(class_name)s::completeAcc(PacketPtr pkt,
212 ExecContext * xc, Trace::InstRecord * traceData) const

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

552 disp, dataSize, addressSize, mem_flags,
553 atCPL0, prefetch, nonSpec, implicitStack)
554 self.className = Name
555 self.mnemonic = name
556
557 microopClasses[name] = LoadOp
558
559 code = '''
564 switch (dataSize) {
565 case 4:
566 DataLow = bits(Mem_u2qw[0], 31, 0);
567 DataHi = bits(Mem_u2qw[0], 63, 32);
568 break;
569 case 8:
570 DataLow = Mem_u2qw[0];
571 DataHi = Mem_u2qw[1];
572 break;
573 default:
574 panic("Unhandled data size %d in LdSplit.\\n", dataSize);
575 }'''
560 DataLow = Mem_u2qw[0];
561 DataHi = Mem_u2qw[1];
562 '''
576
577 defineMicroLoadSplitOp('LdSplit', code,
578 '(StoreCheck << FlagShift)')
579
580 defineMicroLoadSplitOp('LdSplitl', code,
581 '(StoreCheck << FlagShift) | Request::LOCKED_RMW',
582 nonSpec=True)
583

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

678 dataSize, addressSize, mem_flags, atCPL0, False,
679 nonSpec, implicitStack)
680 self.className = Name
681 self.mnemonic = name
682
683 microopClasses[name] = StoreOp
684
685 code = '''
563
564 defineMicroLoadSplitOp('LdSplit', code,
565 '(StoreCheck << FlagShift)')
566
567 defineMicroLoadSplitOp('LdSplitl', code,
568 '(StoreCheck << FlagShift) | Request::LOCKED_RMW',
569 nonSpec=True)
570

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

665 dataSize, addressSize, mem_flags, atCPL0, False,
666 nonSpec, implicitStack)
667 self.className = Name
668 self.mnemonic = name
669
670 microopClasses[name] = StoreOp
671
672 code = '''
686 switch (dataSize) {
687 case 4:
688 Mem_u2qw[0] = (DataHi << 32) | DataLow;
689 break;
690 case 8:
691 Mem_u2qw[0] = DataLow;
692 Mem_u2qw[1] = DataHi;
693 break;
694 default:
695 panic("Unhandled data size %d in StSplit.\\n", dataSize);
696 }'''
673 Mem_u2qw[0] = DataLow;
674 Mem_u2qw[1] = DataHi;
675 '''
697
698 defineMicroStoreSplitOp('StSplit', code);
699
700 defineMicroStoreSplitOp('StSplitul', code,
701 mem_flags='Request::LOCKED_RMW')
702
703 iop = InstObjParams("lea", "Lea", 'X86ISA::LdStOp',
704 { "code": "Data = merge(Data, EA, dataSize);",

--- 49 unchanged lines hidden ---
676
677 defineMicroStoreSplitOp('StSplit', code);
678
679 defineMicroStoreSplitOp('StSplitul', code,
680 mem_flags='Request::LOCKED_RMW')
681
682 iop = InstObjParams("lea", "Lea", 'X86ISA::LdStOp',
683 { "code": "Data = merge(Data, EA, dataSize);",

--- 49 unchanged lines hidden ---