decoder.isa (12289:abb573c4e7ed) decoder.isa (12386:2bf5fb25a5f1)
1// Copyright (c) 2006-2007 The Regents of The University of Michigan
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met: redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer;
8// redistributions in binary form must reproduce the above copyright

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

1097 }
1098 }
1099 0x3: decode OP3 {
1100 format Load {
1101 0x00: lduw({{Rd = Mem_uw;}});
1102 0x01: ldub({{Rd = Mem_ub;}});
1103 0x02: lduh({{Rd = Mem_uhw;}});
1104 0x03: ldtw({{
1// Copyright (c) 2006-2007 The Regents of The University of Michigan
2// All rights reserved.
3//
4// Redistribution and use in source and binary forms, with or without
5// modification, are permitted provided that the following conditions are
6// met: redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer;
8// redistributions in binary form must reproduce the above copyright

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

1097 }
1098 }
1099 0x3: decode OP3 {
1100 format Load {
1101 0x00: lduw({{Rd = Mem_uw;}});
1102 0x01: ldub({{Rd = Mem_ub;}});
1103 0x02: lduh({{Rd = Mem_uhw;}});
1104 0x03: ldtw({{
1105 RdLow = (Mem_tuw).a;
1106 RdHigh = (Mem_tuw).b;
1105 RdLow = Mem_tuw[0];
1106 RdHigh = Mem_tuw[1];
1107 }});
1108 }
1109 format Store {
1110 0x04: stw({{Mem_uw = Rd_sw;}});
1111 0x05: stb({{Mem_ub = Rd_sb;}});
1112 0x06: sth({{Mem_uhw = Rd_shw;}});
1113 0x07: sttw({{
1114 // This temporary needs to be here so that the parser
1115 // will correctly identify this instruction as a store.
1116 // It's probably either the parenthesis or referencing
1117 // the member variable that throws confuses it.
1107 }});
1108 }
1109 format Store {
1110 0x04: stw({{Mem_uw = Rd_sw;}});
1111 0x05: stb({{Mem_ub = Rd_sb;}});
1112 0x06: sth({{Mem_uhw = Rd_shw;}});
1113 0x07: sttw({{
1114 // This temporary needs to be here so that the parser
1115 // will correctly identify this instruction as a store.
1116 // It's probably either the parenthesis or referencing
1117 // the member variable that throws confuses it.
1118 Twin32_t temp;
1119 temp.a = RdLow<31:0>;
1120 temp.b = RdHigh<31:0>;
1118 std::array<uint32_t, 2> temp;
1119 temp[0] = RdLow<31:0>;
1120 temp[1] = RdHigh<31:0>;
1121 Mem_tuw = temp;
1122 }});
1123 }
1124 format Load {
1125 0x08: ldsw({{Rd = Mem_sw;}});
1126 0x09: ldsb({{Rd = Mem_sb;}});
1127 0x0A: ldsh({{Rd = Mem_shw;}});
1128 0x0B: ldx({{Rd = Mem_sdw;}});

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

1140 }}, MEM_SWAP);
1141 format LoadAlt {
1142 0x10: lduwa({{Rd = Mem_uw;}});
1143 0x11: lduba({{Rd = Mem_ub;}});
1144 0x12: lduha({{Rd = Mem_uhw;}});
1145 0x13: decode EXT_ASI {
1146 // ASI_LDTD_AIUP
1147 0x22: TwinLoad::ldtx_aiup(
1121 Mem_tuw = temp;
1122 }});
1123 }
1124 format Load {
1125 0x08: ldsw({{Rd = Mem_sw;}});
1126 0x09: ldsb({{Rd = Mem_sb;}});
1127 0x0A: ldsh({{Rd = Mem_shw;}});
1128 0x0B: ldx({{Rd = Mem_sdw;}});

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

1140 }}, MEM_SWAP);
1141 format LoadAlt {
1142 0x10: lduwa({{Rd = Mem_uw;}});
1143 0x11: lduba({{Rd = Mem_ub;}});
1144 0x12: lduha({{Rd = Mem_uhw;}});
1145 0x13: decode EXT_ASI {
1146 // ASI_LDTD_AIUP
1147 0x22: TwinLoad::ldtx_aiup(
1148 {{RdLow_udw = (Mem_tudw).a;
1149 RdHigh_udw = (Mem_tudw).b;}});
1148 {{RdLow_udw = Mem_tudw[0];
1149 RdHigh_udw = Mem_tudw[1];}});
1150 // ASI_LDTD_AIUS
1151 0x23: TwinLoad::ldtx_aius(
1150 // ASI_LDTD_AIUS
1151 0x23: TwinLoad::ldtx_aius(
1152 {{RdLow_udw = (Mem_tudw).a;
1153 RdHigh_udw = (Mem_tudw).b;}});
1152 {{RdLow_udw = Mem_tudw[0];
1153 RdHigh_udw = Mem_tudw[1];}});
1154 // ASI_QUAD_LDD
1155 0x24: TwinLoad::ldtx_quad_ldd(
1154 // ASI_QUAD_LDD
1155 0x24: TwinLoad::ldtx_quad_ldd(
1156 {{RdLow_udw = (Mem_tudw).a;
1157 RdHigh_udw = (Mem_tudw).b;}});
1156 {{RdLow_udw = Mem_tudw[0];
1157 RdHigh_udw = Mem_tudw[1];}});
1158 // ASI_LDTX_REAL
1159 0x26: TwinLoad::ldtx_real(
1158 // ASI_LDTX_REAL
1159 0x26: TwinLoad::ldtx_real(
1160 {{RdLow_udw = (Mem_tudw).a;
1161 RdHigh_udw = (Mem_tudw).b;}});
1160 {{RdLow_udw = Mem_tudw[0];
1161 RdHigh_udw = Mem_tudw[1];}});
1162 // ASI_LDTX_N
1163 0x27: TwinLoad::ldtx_n(
1162 // ASI_LDTX_N
1163 0x27: TwinLoad::ldtx_n(
1164 {{RdLow_udw = (Mem_tudw).a;
1165 RdHigh_udw = (Mem_tudw).b;}});
1164 {{RdLow_udw = Mem_tudw[0];
1165 RdHigh_udw = Mem_tudw[1];}});
1166 // ASI_LDTX_AIUP_L
1167 0x2A: TwinLoad::ldtx_aiup_l(
1166 // ASI_LDTX_AIUP_L
1167 0x2A: TwinLoad::ldtx_aiup_l(
1168 {{RdLow_udw = (Mem_tudw).a;
1169 RdHigh_udw = (Mem_tudw).b;}});
1168 {{RdLow_udw = Mem_tudw[0];
1169 RdHigh_udw = Mem_tudw[1];}});
1170 // ASI_LDTX_AIUS_L
1171 0x2B: TwinLoad::ldtx_aius_l(
1170 // ASI_LDTX_AIUS_L
1171 0x2B: TwinLoad::ldtx_aius_l(
1172 {{RdLow_udw = (Mem_tudw).a;
1173 RdHigh_udw = (Mem_tudw).b;}});
1172 {{RdLow_udw = Mem_tudw[0];
1173 RdHigh_udw = Mem_tudw[1];}});
1174 // ASI_LDTX_L
1175 0x2C: TwinLoad::ldtx_l(
1174 // ASI_LDTX_L
1175 0x2C: TwinLoad::ldtx_l(
1176 {{RdLow_udw = (Mem_tudw).a;
1177 RdHigh_udw = (Mem_tudw).b;}});
1176 {{RdLow_udw = Mem_tudw[0];
1177 RdHigh_udw = Mem_tudw[1];}});
1178 // ASI_LDTX_REAL_L
1179 0x2E: TwinLoad::ldtx_real_l(
1178 // ASI_LDTX_REAL_L
1179 0x2E: TwinLoad::ldtx_real_l(
1180 {{RdLow_udw = (Mem_tudw).a;
1181 RdHigh_udw = (Mem_tudw).b;}});
1180 {{RdLow_udw = Mem_tudw[0];
1181 RdHigh_udw = Mem_tudw[1];}});
1182 // ASI_LDTX_N_L
1183 0x2F: TwinLoad::ldtx_n_l(
1182 // ASI_LDTX_N_L
1183 0x2F: TwinLoad::ldtx_n_l(
1184 {{RdLow_udw = (Mem_tudw).a;
1185 RdHigh_udw = (Mem_tudw).b;}});
1184 {{RdLow_udw = Mem_tudw[0];
1185 RdHigh_udw = Mem_tudw[1];}});
1186 // ASI_LDTX_P
1187 0xE2: TwinLoad::ldtx_p(
1186 // ASI_LDTX_P
1187 0xE2: TwinLoad::ldtx_p(
1188 {{RdLow_udw = (Mem_tudw).a;
1189 RdHigh_udw = (Mem_tudw).b;}});
1188 {{RdLow_udw = Mem_tudw[0];
1189 RdHigh_udw = Mem_tudw[1];}});
1190 // ASI_LDTX_S
1191 0xE3: TwinLoad::ldtx_s(
1190 // ASI_LDTX_S
1191 0xE3: TwinLoad::ldtx_s(
1192 {{RdLow_udw = (Mem_tudw).a;
1193 RdHigh_udw = (Mem_tudw).b;}});
1192 {{RdLow_udw = Mem_tudw[0];
1193 RdHigh_udw = Mem_tudw[1];}});
1194 // ASI_LDTX_PL
1195 0xEA: TwinLoad::ldtx_pl(
1194 // ASI_LDTX_PL
1195 0xEA: TwinLoad::ldtx_pl(
1196 {{RdLow_udw = (Mem_tudw).a;
1197 RdHigh_udw = (Mem_tudw).b;}});
1196 {{RdLow_udw = Mem_tudw[0];
1197 RdHigh_udw = Mem_tudw[1];}});
1198 // ASI_LDTX_SL
1199 0xEB: TwinLoad::ldtx_sl(
1198 // ASI_LDTX_SL
1199 0xEB: TwinLoad::ldtx_sl(
1200 {{RdLow_udw = (Mem_tudw).a;
1201 RdHigh_udw = (Mem_tudw).b;}});
1200 {{RdLow_udw = Mem_tudw[0];
1201 RdHigh_udw = Mem_tudw[1];}});
1202 default: ldtwa({{
1202 default: ldtwa({{
1203 RdLow = (Mem_tuw).a;
1204 RdHigh = (Mem_tuw).b;}});
1203 RdLow = Mem_tuw[0];
1204 RdHigh = Mem_tuw[1];}});
1205 }
1206 }
1207 format StoreAlt {
1208 0x14: stwa({{Mem_uw = Rd;}});
1209 0x15: stba({{Mem_ub = Rd;}});
1210 0x16: stha({{Mem_uhw = Rd;}});
1211 0x17: sttwa({{
1212 // This temporary needs to be here so that the parser
1213 // will correctly identify this instruction as a store.
1214 // It's probably either the parenthesis or referencing
1215 // the member variable that throws confuses it.
1205 }
1206 }
1207 format StoreAlt {
1208 0x14: stwa({{Mem_uw = Rd;}});
1209 0x15: stba({{Mem_ub = Rd;}});
1210 0x16: stha({{Mem_uhw = Rd;}});
1211 0x17: sttwa({{
1212 // This temporary needs to be here so that the parser
1213 // will correctly identify this instruction as a store.
1214 // It's probably either the parenthesis or referencing
1215 // the member variable that throws confuses it.
1216 Twin32_t temp;
1217 temp.a = RdLow<31:0>;
1218 temp.b = RdHigh<31:0>;
1216 std::array<uint32_t, 2> temp;
1217 temp[0] = RdLow<31:0>;
1218 temp[1] = RdHigh<31:0>;
1219 Mem_tuw = temp;
1220 }});
1221 }
1222 format LoadAlt {
1223 0x18: ldswa({{Rd = Mem_sw;}});
1224 0x19: ldsba({{Rd = Mem_sb;}});
1225 0x1A: ldsha({{Rd = Mem_shw;}});
1226 0x1B: ldxa({{Rd = Mem_sdw;}});

--- 223 unchanged lines hidden ---
1219 Mem_tuw = temp;
1220 }});
1221 }
1222 format LoadAlt {
1223 0x18: ldswa({{Rd = Mem_sw;}});
1224 0x19: ldsba({{Rd = Mem_sb;}});
1225 0x1A: ldsha({{Rd = Mem_shw;}});
1226 0x1B: ldxa({{Rd = Mem_sdw;}});

--- 223 unchanged lines hidden ---