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, 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 50 # This shouldn't be part of the eaCode, but until the exec templates 51 # are converted over it's the easiest place to put it. --- 10 unchanged lines hidden (view full) --- 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 imm: |
70 if double: 71 declareTemplate = LoadStoreDImmDeclare 72 constructTemplate = LoadStoreDImmConstructor 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 91 def loadStoreBase(name, Name, imm, eaCode, accCode, memFlags, |
92 instFlags, double, base = 'Memory', 93 execTemplateBase = ''): |
94 codeBlobs = { "ea_code": eaCode, 95 "memacc_code": accCode, 96 "predicate_test": predicateTest } 97 return loadStoreBaseWork(name, Name, imm, False, codeBlobs, memFlags, |
98 instFlags, double, base, execTemplateBase) |
99 100 def SwapBase(name, Name, eaCode, preAccCode, postAccCode, memFlags, 101 instFlags): 102 codeBlobs = { "ea_code": eaCode, 103 "preacc_code": preAccCode, 104 "postacc_code": postAccCode, 105 "predicate_test": predicateTest } 106 return loadStoreBaseWork(name, Name, False, True, codeBlobs, memFlags, |
107 instFlags, False, 'Swap', 'Swap') |
108 109 def memClassName(base, post, add, writeback, \ 110 size=4, sign=False, user=False): 111 Name = base 112 113 if post: 114 Name += '_PY' 115 else: --- 56 unchanged lines hidden --- |