macromem.isa (7207:82cfe1198d6f) | macromem.isa (7296:27c60324ec4d) |
---|---|
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 --- 37 unchanged lines hidden (view full) --- 46// Load/store microops 47// 48 49let {{ 50 predicateTest = 'testPredicate(CondCodes, condCode)' 51}}; 52 53let {{ | 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 --- 37 unchanged lines hidden (view full) --- 46// Load/store microops 47// 48 49let {{ 50 predicateTest = 'testPredicate(CondCodes, condCode)' 51}}; 52 53let {{ |
54 microLdrUopCode = "IWRa = cSwap(Mem.uw, ((CPSR)Cpsr).e);" |
|
54 microLdrUopIop = InstObjParams('ldr_uop', 'MicroLdrUop', 55 'MicroMemOp', | 55 microLdrUopIop = InstObjParams('ldr_uop', 'MicroLdrUop', 56 'MicroMemOp', |
56 {'memacc_code': 'IWRa = Mem;', | 57 {'memacc_code': microLdrUopCode, |
57 'ea_code': 'EA = Rb + (up ? imm : -imm);', 58 'predicate_test': predicateTest}, 59 ['IsMicroop']) 60 | 58 'ea_code': 'EA = Rb + (up ? imm : -imm);', 59 'predicate_test': predicateTest}, 60 ['IsMicroop']) 61 |
62 microLdrFpUopCode = "Fa = cSwap(Mem.uw, ((CPSR)Cpsr).e);" |
|
61 microLdrFpUopIop = InstObjParams('ldrfp_uop', 'MicroLdrFpUop', 62 'MicroMemOp', | 63 microLdrFpUopIop = InstObjParams('ldrfp_uop', 'MicroLdrFpUop', 64 'MicroMemOp', |
63 {'memacc_code': 'Fa = Mem;', | 65 {'memacc_code': microLdrFpUopCode, |
64 'ea_code': 'EA = Rb + (up ? imm : -imm);', 65 'predicate_test': predicateTest}, 66 ['IsMicroop']) 67 68 microLdrRetUopCode = ''' | 66 'ea_code': 'EA = Rb + (up ? imm : -imm);', 67 'predicate_test': predicateTest}, 68 ['IsMicroop']) 69 70 microLdrRetUopCode = ''' |
71 CPSR cpsr = Cpsr; |
|
69 uint32_t newCpsr = | 72 uint32_t newCpsr = |
70 cpsrWriteByInstr(Cpsr | CondCodes, Spsr, 0xF, true); | 73 cpsrWriteByInstr(cpsr | CondCodes, Spsr, 0xF, true); |
71 Cpsr = ~CondCodesMask & newCpsr; 72 CondCodes = CondCodesMask & newCpsr; | 74 Cpsr = ~CondCodesMask & newCpsr; 75 CondCodes = CondCodesMask & newCpsr; |
73 IWNPC = Mem | ((Spsr & 0x20) ? 1 : 0); | 76 IWNPC = cSwap(Mem.uw, cpsr.e) | ((Spsr & 0x20) ? 1 : 0); |
74 ''' 75 microLdrRetUopIop = InstObjParams('ldr_ret_uop', 'MicroLdrRetUop', 76 'MicroMemOp', 77 {'memacc_code': microLdrRetUopCode, 78 'ea_code': 79 'EA = Rb + (up ? imm : -imm);', 80 'predicate_test': predicateTest}, 81 ['IsMicroop']) 82 | 77 ''' 78 microLdrRetUopIop = InstObjParams('ldr_ret_uop', 'MicroLdrRetUop', 79 'MicroMemOp', 80 {'memacc_code': microLdrRetUopCode, 81 'ea_code': 82 'EA = Rb + (up ? imm : -imm);', 83 'predicate_test': predicateTest}, 84 ['IsMicroop']) 85 |
86 microStrUopCode = "Mem = cSwap(Ra.uw, ((CPSR)Cpsr).e);" |
|
83 microStrUopIop = InstObjParams('str_uop', 'MicroStrUop', 84 'MicroMemOp', | 87 microStrUopIop = InstObjParams('str_uop', 'MicroStrUop', 88 'MicroMemOp', |
85 {'memacc_code': 'Mem = Ra;', | 89 {'memacc_code': microStrUopCode, |
86 'ea_code': 'EA = Rb + (up ? imm : -imm);', 87 'predicate_test': predicateTest}, 88 ['IsMicroop']) 89 | 90 'ea_code': 'EA = Rb + (up ? imm : -imm);', 91 'predicate_test': predicateTest}, 92 ['IsMicroop']) 93 |
94 microStrFpUopCode = "Mem = cSwap(Fa.uw, ((CPSR)Cpsr).e);" |
|
90 microStrFpUopIop = InstObjParams('strfp_uop', 'MicroStrFpUop', 91 'MicroMemOp', | 95 microStrFpUopIop = InstObjParams('strfp_uop', 'MicroStrFpUop', 96 'MicroMemOp', |
92 {'memacc_code': 'Mem = Fa;', | 97 {'memacc_code': microStrFpUopCode, |
93 'ea_code': 'EA = Rb + (up ? imm : -imm);', 94 'predicate_test': predicateTest}, 95 ['IsMicroop']) 96 97 header_output = decoder_output = exec_output = '' 98 99 loadIops = (microLdrUopIop, microLdrFpUopIop, microLdrRetUopIop) 100 storeIops = (microStrUopIop, microStrFpUopIop) --- 48 unchanged lines hidden --- | 98 'ea_code': 'EA = Rb + (up ? imm : -imm);', 99 'predicate_test': predicateTest}, 100 ['IsMicroop']) 101 102 header_output = decoder_output = exec_output = '' 103 104 loadIops = (microLdrUopIop, microLdrFpUopIop, microLdrRetUopIop) 105 storeIops = (microStrUopIop, microStrFpUopIop) --- 48 unchanged lines hidden --- |