1// -*- mode:c++ -*-
2
3// Copyright (c) 2010 ARM Limited
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

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

33// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
34// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37//
38// Authors: Gabe Black
39
40let {{
41 def loadStoreBaseWork(name, Name, imm, swp, codeBlobs, memFlags,
41 def loadStoreBaseWork(name, Name, imm, swp, rfe, codeBlobs, memFlags,
42 instFlags, double, base = 'Memory',
43 execTemplateBase = ''):
44 # Make sure flags are in lists (convert to lists if not).
45 memFlags = makeList(memFlags)
46 instFlags = makeList(instFlags)
47
48 eaCode = codeBlobs["ea_code"]
49

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

61
62 fullExecTemplate = eval(execTemplateBase + 'Execute')
63 initiateAccTemplate = eval(execTemplateBase + 'InitiateAcc')
64 completeAccTemplate = eval(execTemplateBase + 'CompleteAcc')
65
66 if swp:
67 declareTemplate = SwapDeclare
68 constructTemplate = SwapConstructor
69 elif rfe:
70 declareTemplate = RfeDeclare
71 constructTemplate = RfeConstructor
72 elif imm:
73 if double:
74 declareTemplate = LoadStoreDImmDeclare
75 constructTemplate = LoadStoreDImmConstructor
76 else:
77 declareTemplate = LoadStoreImmDeclare
78 constructTemplate = LoadStoreImmConstructor
79 else:

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

92 + completeAccTemplate.subst(iop))
93
94 def loadStoreBase(name, Name, imm, eaCode, accCode, memFlags,
95 instFlags, double, base = 'Memory',
96 execTemplateBase = ''):
97 codeBlobs = { "ea_code": eaCode,
98 "memacc_code": accCode,
99 "predicate_test": predicateTest }
97 return loadStoreBaseWork(name, Name, imm, False, codeBlobs, memFlags,
98 instFlags, double, base, execTemplateBase)
100 return loadStoreBaseWork(name, Name, imm, False, False, codeBlobs,
101 memFlags, instFlags, double, base,
102 execTemplateBase)
103
104 def RfeBase(name, Name, eaCode, accCode, memFlags, instFlags):
105 codeBlobs = { "ea_code": eaCode,
106 "memacc_code": accCode,
107 "predicate_test": predicateTest }
108 return loadStoreBaseWork(name, Name, False, False, True, codeBlobs,
109 memFlags, instFlags, False, 'RfeOp', 'Load')
110
111 def SwapBase(name, Name, eaCode, preAccCode, postAccCode, memFlags,
112 instFlags):
113 codeBlobs = { "ea_code": eaCode,
114 "preacc_code": preAccCode,
115 "postacc_code": postAccCode,
116 "predicate_test": predicateTest }
106 return loadStoreBaseWork(name, Name, False, True, codeBlobs, memFlags,
107 instFlags, False, 'Swap', 'Swap')
117 return loadStoreBaseWork(name, Name, False, True, False, codeBlobs,
118 memFlags, instFlags, False, 'Swap', 'Swap')
119
120 def memClassName(base, post, add, writeback, \
121 size=4, sign=False, user=False):
122 Name = base
123
124 if post:
125 Name += '_PY'
126 else:

--- 56 unchanged lines hidden ---