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