Deleted Added
sdiff udiff text old ( 14150:1391e94a7b95 ) new ( 14157:0f836da31d9c )
full compact
1// -*- mode:c++ -*-
2
3// Copyright (c) 2018 Metempsy Technology Consulting
4// All rights reserved
5//
6// The license below extends only to copyright in the software and shall
7// not be construed as granting a license to any other intellectual
8// property including but not limited to intellectual property relating

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

60 decoder_output = ""
61 exec_output = ""
62
63 class AtomicInst64(LoadStoreInst):
64 execBase = 'AtomicInst64'
65 micro = False
66
67 def __init__(self, mnem, Name, size=4, user=False, flavor="normal",
68 unsign=True, top = False, paired=False):
69 super(AtomicInst64, self).__init__()
70
71 self.name= mnem
72 self.Name = Name
73 self.size = size
74 self.user = user
75 self.flavor = flavor
76 self.unsign = unsign

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

93 self.instFlags.append("IsMicroop")
94
95 if self.flavor in ("release", "acquire_release", "acquire"):
96 self.instFlags.append("IsMemBarrier")
97 if self.flavor in ("release", "acquire_release"):
98 self.instFlags.append("IsWriteBarrier")
99 if self.flavor in ("acquire_release", "acquire"):
100 self.instFlags.append("IsReadBarrier")
101 self.memFlags.append('Request::ATOMIC_RETURN_OP')
102
103 def emitHelper(self, base = 'Memory64', wbDecl = None, ):
104 global header_output, decoder_output, exec_output
105
106 # If this is a microop itself, don't allow anything that would
107 # require further microcoding.
108 if self.micro:
109 assert not wbDecl
110
111 fa_code = None
112 if not self.micro :
113 #and self.flavor in ("normal", "release"):
114 fa_code = '''
115 fault->annotate(ArmFault::SAS, %s);
116 fault->annotate(ArmFault::SSE, false);
117 fault->annotate(ArmFault::SRT, dest);
118 fault->annotate(ArmFault::SF, %s);
119 fault->annotate(ArmFault::AR, %s);
120 ''' % ("0" if self.size == 1 else
121 "1" if self.size == 2 else
122 "2" if self.size == 4 else "3",
123 "true" if self.size == 8 else "false",
124 "true" if self.flavor != "normal" else "false")
125 sas_code = "3"
126 if self.size == 1 :
127 sas_code = "0"
128 elif self.size == 2:
129 sas_code = "1"
130 elif self.size == 4:
131 sas_code = "2"
132

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

393 CasPair64("caspl", "CASPL64", 8, flavor="release", paired=True).emit()
394
395 CasPair64("casp", "CASP32", 4, flavor="normal", paired=True).emit()
396 CasPair64("caspa", "CASPA32", 4, flavor="acquire", paired=True).emit()
397 CasPair64("caspal", "CASPAL32", 4, flavor="acquire_release",
398 paired=True).emit()
399 CasPair64("caspl", "CASPL32", 4, flavor="release", paired=True).emit()
400
401}};