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