macromem.cc (10199:6cf40d777682) macromem.cc (10339:53278be85b40)
1/*
1/*
2 * Copyright (c) 2010-2013 ARM Limited
2 * Copyright (c) 2010-2014 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

--- 1091 unchanged lines hidden (view full) ---

1102 UXTX, 0);
1103 } else {
1104 microOps[uopIdx++] = new MicroAddXiUop(machInst, rnsp, rnsp,
1105 totNumBytes);
1106 }
1107 }
1108
1109 for (int i = 0; i < numMarshalMicroops; ++i) {
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated

--- 1091 unchanged lines hidden (view full) ---

1102 UXTX, 0);
1103 } else {
1104 microOps[uopIdx++] = new MicroAddXiUop(machInst, rnsp, rnsp,
1105 totNumBytes);
1106 }
1107 }
1108
1109 for (int i = 0; i < numMarshalMicroops; ++i) {
1110 microOps[uopIdx++] = new MicroDeintNeon64(
1111 machInst, vd + (RegIndex) (2 * i), vx, eSize, dataSize,
1112 numStructElems, numRegs, i /* step */);
1110 switch(numRegs) {
1111 case 1: microOps[uopIdx++] = new MicroDeintNeon64_1Reg(
1112 machInst, vd + (RegIndex) (2 * i), vx, eSize, dataSize,
1113 numStructElems, 1, i /* step */);
1114 break;
1115 case 2: microOps[uopIdx++] = new MicroDeintNeon64_2Reg(
1116 machInst, vd + (RegIndex) (2 * i), vx, eSize, dataSize,
1117 numStructElems, 2, i /* step */);
1118 break;
1119 case 3: microOps[uopIdx++] = new MicroDeintNeon64_3Reg(
1120 machInst, vd + (RegIndex) (2 * i), vx, eSize, dataSize,
1121 numStructElems, 3, i /* step */);
1122 break;
1123 case 4: microOps[uopIdx++] = new MicroDeintNeon64_4Reg(
1124 machInst, vd + (RegIndex) (2 * i), vx, eSize, dataSize,
1125 numStructElems, 4, i /* step */);
1126 break;
1127 default: panic("Invalid number of registers");
1128 }
1129
1113 }
1114
1115 assert(uopIdx == numMicroops);
1116
1117 for (int i = 0; i < numMicroops - 1; ++i) {
1118 microOps[i]->setDelayedCommit();
1119 }
1120 microOps[numMicroops - 1]->setLastMicroop();

--- 24 unchanged lines hidden (view full) ---

1145
1146 int numMarshalMicroops = totNumBytes > 32 ? 2 : 1;
1147 numMicroops += numMarshalMicroops;
1148
1149 microOps = new StaticInstPtr[numMicroops];
1150 unsigned uopIdx = 0;
1151
1152 for(int i = 0; i < numMarshalMicroops; ++i) {
1130 }
1131
1132 assert(uopIdx == numMicroops);
1133
1134 for (int i = 0; i < numMicroops - 1; ++i) {
1135 microOps[i]->setDelayedCommit();
1136 }
1137 microOps[numMicroops - 1]->setLastMicroop();

--- 24 unchanged lines hidden (view full) ---

1162
1163 int numMarshalMicroops = totNumBytes > 32 ? 2 : 1;
1164 numMicroops += numMarshalMicroops;
1165
1166 microOps = new StaticInstPtr[numMicroops];
1167 unsigned uopIdx = 0;
1168
1169 for(int i = 0; i < numMarshalMicroops; ++i) {
1153 microOps[uopIdx++] = new MicroIntNeon64(
1154 machInst, vx + (RegIndex) (2 * i), vd, eSize, dataSize,
1155 numStructElems, numRegs, i /* step */);
1170 switch (numRegs) {
1171 case 1: microOps[uopIdx++] = new MicroIntNeon64_1Reg(
1172 machInst, vx + (RegIndex) (2 * i), vd, eSize, dataSize,
1173 numStructElems, 1, i /* step */);
1174 break;
1175 case 2: microOps[uopIdx++] = new MicroIntNeon64_2Reg(
1176 machInst, vx + (RegIndex) (2 * i), vd, eSize, dataSize,
1177 numStructElems, 2, i /* step */);
1178 break;
1179 case 3: microOps[uopIdx++] = new MicroIntNeon64_3Reg(
1180 machInst, vx + (RegIndex) (2 * i), vd, eSize, dataSize,
1181 numStructElems, 3, i /* step */);
1182 break;
1183 case 4: microOps[uopIdx++] = new MicroIntNeon64_4Reg(
1184 machInst, vx + (RegIndex) (2 * i), vd, eSize, dataSize,
1185 numStructElems, 4, i /* step */);
1186 break;
1187 default: panic("Invalid number of registers");
1188 }
1156 }
1157
1158 uint32_t memaccessFlags = TLB::MustBeOne | (TLB::ArmFlags) eSize |
1159 TLB::AllowUnaligned;
1160
1161 int i = 0;
1162 for(; i < numMemMicroops - 1; ++i) {
1163 microOps[uopIdx++] = new MicroNeonStore64(

--- 345 unchanged lines hidden ---
1189 }
1190
1191 uint32_t memaccessFlags = TLB::MustBeOne | (TLB::ArmFlags) eSize |
1192 TLB::AllowUnaligned;
1193
1194 int i = 0;
1195 for(; i < numMemMicroops - 1; ++i) {
1196 microOps[uopIdx++] = new MicroNeonStore64(

--- 345 unchanged lines hidden ---