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, rfe, srs, codeBlobs, 42 memFlags, instFlags, double, strex, 43 base = 'Memory', 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. --- 9 unchanged lines hidden (view full) --- 61 completeAccTemplate = eval(execTemplateBase + 'CompleteAcc') 62 63 if swp: 64 declareTemplate = SwapDeclare 65 constructTemplate = SwapConstructor 66 elif rfe: 67 declareTemplate = RfeDeclare 68 constructTemplate = RfeConstructor |
69 elif srs: 70 declareTemplate = SrsDeclare 71 constructTemplate = SrsConstructor |
72 elif imm: 73 if double: 74 declareTemplate = LoadStoreDImmDeclare 75 constructTemplate = LoadStoreDImmConstructor 76 if strex: 77 declareTemplate = StoreExDImmDeclare 78 constructTemplate = StoreExDImmConstructor 79 elif strex: --- 19 unchanged lines hidden (view full) --- 99 100 def loadStoreBase(name, Name, imm, eaCode, accCode, postAccCode, 101 memFlags, instFlags, double, strex, base = 'Memory', 102 execTemplateBase = ''): 103 codeBlobs = { "ea_code": eaCode, 104 "memacc_code": accCode, 105 "postacc_code": postAccCode, 106 "predicate_test": predicateTest } |
107 return loadStoreBaseWork(name, Name, imm, False, False, False, 108 codeBlobs, memFlags, instFlags, double, 109 strex, base, execTemplateBase) |
110 111 def RfeBase(name, Name, eaCode, accCode, memFlags, instFlags): 112 codeBlobs = { "ea_code": eaCode, 113 "memacc_code": accCode, 114 "predicate_test": predicateTest } |
115 return loadStoreBaseWork(name, Name, False, False, True, False, 116 codeBlobs, memFlags, instFlags, False, False, |
117 'RfeOp', 'Load') 118 |
119 def SrsBase(name, Name, eaCode, accCode, memFlags, instFlags): 120 codeBlobs = { "ea_code": eaCode, 121 "memacc_code": accCode, 122 "postacc_code": "", 123 "predicate_test": predicateTest } 124 return loadStoreBaseWork(name, Name, False, False, False, True, 125 codeBlobs, memFlags, instFlags, False, False, 126 'SrsOp', 'Store') 127 |
128 def SwapBase(name, Name, eaCode, preAccCode, postAccCode, memFlags, 129 instFlags): 130 codeBlobs = { "ea_code": eaCode, 131 "preacc_code": preAccCode, 132 "postacc_code": postAccCode, 133 "predicate_test": predicateTest } |
134 return loadStoreBaseWork(name, Name, False, True, False, False, 135 codeBlobs, memFlags, instFlags, False, False, |
136 'Swap', 'Swap') 137 138 def memClassName(base, post, add, writeback, \ 139 size=4, sign=False, user=False): 140 Name = base 141 142 if post: 143 Name += '_PY' --- 57 unchanged lines hidden --- |