mem.isa (7294:fda2c00880db) mem.isa (7303:6b70985664c8)
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

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

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, rfe, codeBlobs, memFlags,
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

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

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, rfe, codeBlobs, memFlags,
42 instFlags, double, base = 'Memory',
42 instFlags, double, strex, 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
50 # This shouldn't be part of the eaCode, but until the exec templates

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

65 constructTemplate = SwapConstructor
66 elif rfe:
67 declareTemplate = RfeDeclare
68 constructTemplate = RfeConstructor
69 elif imm:
70 if double:
71 declareTemplate = LoadStoreDImmDeclare
72 constructTemplate = LoadStoreDImmConstructor
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
50 # This shouldn't be part of the eaCode, but until the exec templates

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

65 constructTemplate = SwapConstructor
66 elif rfe:
67 declareTemplate = RfeDeclare
68 constructTemplate = RfeConstructor
69 elif imm:
70 if double:
71 declareTemplate = LoadStoreDImmDeclare
72 constructTemplate = LoadStoreDImmConstructor
73 if strex:
74 declareTemplate = StoreExDImmDeclare
75 constructTemplate = StoreExDImmConstructor
76 elif strex:
77 declareTemplate = StoreExImmDeclare
78 constructTemplate = StoreExImmConstructor
73 else:
74 declareTemplate = LoadStoreImmDeclare
75 constructTemplate = LoadStoreImmConstructor
76 else:
77 if double:
78 declareTemplate = LoadStoreDRegDeclare
79 constructTemplate = LoadStoreDRegConstructor
80 else:
81 declareTemplate = LoadStoreRegDeclare
82 constructTemplate = LoadStoreRegConstructor
83
84 # (header_output, decoder_output, decode_block, exec_output)
85 return (declareTemplate.subst(iop),
86 constructTemplate.subst(iop),
87 fullExecTemplate.subst(iop)
88 + initiateAccTemplate.subst(iop)
89 + completeAccTemplate.subst(iop))
90
79 else:
80 declareTemplate = LoadStoreImmDeclare
81 constructTemplate = LoadStoreImmConstructor
82 else:
83 if double:
84 declareTemplate = LoadStoreDRegDeclare
85 constructTemplate = LoadStoreDRegConstructor
86 else:
87 declareTemplate = LoadStoreRegDeclare
88 constructTemplate = LoadStoreRegConstructor
89
90 # (header_output, decoder_output, decode_block, exec_output)
91 return (declareTemplate.subst(iop),
92 constructTemplate.subst(iop),
93 fullExecTemplate.subst(iop)
94 + initiateAccTemplate.subst(iop)
95 + completeAccTemplate.subst(iop))
96
91 def loadStoreBase(name, Name, imm, eaCode, accCode, memFlags,
92 instFlags, double, base = 'Memory',
97 def loadStoreBase(name, Name, imm, eaCode, accCode, postAccCode,
98 memFlags, instFlags, double, strex, base = 'Memory',
93 execTemplateBase = ''):
94 codeBlobs = { "ea_code": eaCode,
95 "memacc_code": accCode,
99 execTemplateBase = ''):
100 codeBlobs = { "ea_code": eaCode,
101 "memacc_code": accCode,
102 "postacc_code": postAccCode,
96 "predicate_test": predicateTest }
97 return loadStoreBaseWork(name, Name, imm, False, False, codeBlobs,
103 "predicate_test": predicateTest }
104 return loadStoreBaseWork(name, Name, imm, False, False, codeBlobs,
98 memFlags, instFlags, double, base,
105 memFlags, instFlags, double, strex, base,
99 execTemplateBase)
100
101 def RfeBase(name, Name, eaCode, accCode, memFlags, instFlags):
102 codeBlobs = { "ea_code": eaCode,
103 "memacc_code": accCode,
104 "predicate_test": predicateTest }
105 return loadStoreBaseWork(name, Name, False, False, True, codeBlobs,
106 execTemplateBase)
107
108 def RfeBase(name, Name, eaCode, accCode, memFlags, instFlags):
109 codeBlobs = { "ea_code": eaCode,
110 "memacc_code": accCode,
111 "predicate_test": predicateTest }
112 return loadStoreBaseWork(name, Name, False, False, True, codeBlobs,
106 memFlags, instFlags, False, 'RfeOp', 'Load')
113 memFlags, instFlags, False, False,
114 'RfeOp', 'Load')
107
108 def SwapBase(name, Name, eaCode, preAccCode, postAccCode, memFlags,
109 instFlags):
110 codeBlobs = { "ea_code": eaCode,
111 "preacc_code": preAccCode,
112 "postacc_code": postAccCode,
113 "predicate_test": predicateTest }
114 return loadStoreBaseWork(name, Name, False, True, False, codeBlobs,
115
116 def SwapBase(name, Name, eaCode, preAccCode, postAccCode, memFlags,
117 instFlags):
118 codeBlobs = { "ea_code": eaCode,
119 "preacc_code": preAccCode,
120 "postacc_code": postAccCode,
121 "predicate_test": predicateTest }
122 return loadStoreBaseWork(name, Name, False, True, False, codeBlobs,
115 memFlags, instFlags, False, 'Swap', 'Swap')
123 memFlags, instFlags, False, False,
124 'Swap', 'Swap')
116
117 def memClassName(base, post, add, writeback, \
118 size=4, sign=False, user=False):
119 Name = base
120
121 if post:
122 Name += '_PY'
123 else:

--- 56 unchanged lines hidden ---
125
126 def memClassName(base, post, add, writeback, \
127 size=4, sign=False, user=False):
128 Name = base
129
130 if post:
131 Name += '_PY'
132 else:

--- 56 unchanged lines hidden ---