Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(237)

Side by Side Diff: runtime/vm/assembler_mips_test.cc

Issue 16022011: Enables optimization on MIPS (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/assembler_mips.cc ('k') | runtime/vm/code_generator.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/globals.h" 5 #include "vm/globals.h"
6 #if defined(TARGET_ARCH_MIPS) 6 #if defined(TARGET_ARCH_MIPS)
7 7
8 #include "vm/assembler.h" 8 #include "vm/assembler.h"
9 #include "vm/os.h" 9 #include "vm/os.h"
10 #include "vm/unit_test.h" 10 #include "vm/unit_test.h"
(...skipping 1168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 1179
1180 ASSEMBLER_TEST_RUN(Mtc1Mfc1, test) { 1180 ASSEMBLER_TEST_RUN(Mtc1Mfc1, test) {
1181 typedef double (*SimpleCode)(); 1181 typedef double (*SimpleCode)();
1182 EXPECT(test != NULL); 1182 EXPECT(test != NULL);
1183 double res = EXECUTE_TEST_CODE_FLOAT(SimpleCode, test->entry()); 1183 double res = EXECUTE_TEST_CODE_FLOAT(SimpleCode, test->entry());
1184 EXPECT_FLOAT_EQ(0.0, res, 0.001); 1184 EXPECT_FLOAT_EQ(0.0, res, 0.001);
1185 } 1185 }
1186 1186
1187 1187
1188 ASSEMBLER_TEST_GENERATE(Addd, assembler) { 1188 ASSEMBLER_TEST_GENERATE(Addd, assembler) {
1189 __ LoadImmediate(F0, 1.0); 1189 __ LoadImmediate(D0, 1.0);
1190 __ LoadImmediate(F2, 2.0); 1190 __ LoadImmediate(D1, 2.0);
1191 __ addd(F4, F0, F2); 1191 __ addd(D2, D0, D1);
1192 __ mfc1(V0, F4); 1192 __ mfc1(V0, F4);
1193 __ mfc1(V1, F5); 1193 __ mfc1(V1, F5);
1194 __ Ret(); 1194 __ Ret();
1195 } 1195 }
1196 1196
1197 1197
1198 ASSEMBLER_TEST_RUN(Addd, test) { 1198 ASSEMBLER_TEST_RUN(Addd, test) {
1199 typedef double (*SimpleCode)(); 1199 typedef double (*SimpleCode)();
1200 EXPECT(test != NULL); 1200 EXPECT(test != NULL);
1201 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1201 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1202 EXPECT_FLOAT_EQ(3.0, res, 0.001); 1202 EXPECT_FLOAT_EQ(3.0, res, 0.001);
1203 } 1203 }
1204 1204
1205 1205
1206 ASSEMBLER_TEST_GENERATE(Movd, assembler) { 1206 ASSEMBLER_TEST_GENERATE(Movd, assembler) {
1207 __ LoadImmediate(F0, 1.0); 1207 __ LoadImmediate(D0, 1.0);
1208 __ movd(F2, F0); 1208 __ movd(D1, D0);
1209 __ mfc1(V0, F2); 1209 __ mfc1(V0, F2);
1210 __ mfc1(V1, F3); 1210 __ mfc1(V1, F3);
1211 __ Ret(); 1211 __ Ret();
1212 } 1212 }
1213 1213
1214 1214
1215 ASSEMBLER_TEST_RUN(Movd, test) { 1215 ASSEMBLER_TEST_RUN(Movd, test) {
1216 typedef double (*SimpleCode)(); 1216 typedef double (*SimpleCode)();
1217 EXPECT(test != NULL); 1217 EXPECT(test != NULL);
1218 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1218 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1219 EXPECT_FLOAT_EQ(1.0, res, 0.001); 1219 EXPECT_FLOAT_EQ(1.0, res, 0.001);
1220 } 1220 }
1221 1221
1222 1222
1223 ASSEMBLER_TEST_GENERATE(Sdc1Ldc1, assembler) { 1223 ASSEMBLER_TEST_GENERATE(Sdc1Ldc1, assembler) {
1224 __ AddImmediate(SP, -8 * kWordSize); 1224 __ AddImmediate(SP, -8 * kWordSize);
1225 __ LoadImmediate(T1, ~(8 - 1)); 1225 __ LoadImmediate(T1, ~(8 - 1));
1226 __ and_(T0, SP, T1); // Need 8 byte alignment. 1226 __ and_(T0, SP, T1); // Need 8 byte alignment.
1227 __ LoadImmediate(F0, 1.0); 1227 __ LoadImmediate(D0, 1.0);
1228 __ sdc1(F0, Address(T0)); 1228 __ sdc1(D0, Address(T0));
1229 __ ldc1(F2, Address(T0)); 1229 __ ldc1(D1, Address(T0));
1230 __ mfc1(V0, F2); 1230 __ mfc1(V0, F2);
1231 __ mfc1(V1, F3); 1231 __ mfc1(V1, F3);
1232 __ Ret(); 1232 __ Ret();
1233 } 1233 }
1234 1234
1235 1235
1236 ASSEMBLER_TEST_RUN(Sdc1Ldc1, test) { 1236 ASSEMBLER_TEST_RUN(Sdc1Ldc1, test) {
1237 typedef double (*SimpleCode)(); 1237 typedef double (*SimpleCode)();
1238 EXPECT(test != NULL); 1238 EXPECT(test != NULL);
1239 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1239 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1240 EXPECT_FLOAT_EQ(1.0, res, 0.001); 1240 EXPECT_FLOAT_EQ(1.0, res, 0.001);
1241 } 1241 }
1242 1242
1243 1243
1244 ASSEMBLER_TEST_GENERATE(Addd_NaN, assembler) { 1244 ASSEMBLER_TEST_GENERATE(Addd_NaN, assembler) {
1245 __ LoadImmediate(F0, 1.0); 1245 __ LoadImmediate(D0, 1.0);
1246 // Double non-signaling NaN is 0x7FF8000000000000. 1246 // Double non-signaling NaN is 0x7FF8000000000000.
1247 __ LoadImmediate(T0, 0x7FF80000); 1247 __ LoadImmediate(T0, 0x7FF80000);
1248 __ mtc1(ZR, F2); // Load upper bits of NaN. 1248 __ mtc1(ZR, F2); // Load upper bits of NaN.
1249 __ mtc1(T0, F3); // Load lower bits of NaN. 1249 __ mtc1(T0, F3); // Load lower bits of NaN.
1250 __ addd(F4, F0, F2); 1250 __ addd(D2, D0, D1);
1251 __ mfc1(V0, F4); 1251 __ mfc1(V0, F4);
1252 __ mfc1(V1, F5); 1252 __ mfc1(V1, F5);
1253 __ Ret(); 1253 __ Ret();
1254 } 1254 }
1255 1255
1256 1256
1257 ASSEMBLER_TEST_RUN(Addd_NaN, test) { 1257 ASSEMBLER_TEST_RUN(Addd_NaN, test) {
1258 typedef double (*SimpleCode)(); 1258 typedef double (*SimpleCode)();
1259 EXPECT(test != NULL); 1259 EXPECT(test != NULL);
1260 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1260 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1261 EXPECT_EQ(isnan(res), true); 1261 EXPECT_EQ(isnan(res), true);
1262 } 1262 }
1263 1263
1264 1264
1265 ASSEMBLER_TEST_GENERATE(Addd_Inf, assembler) { 1265 ASSEMBLER_TEST_GENERATE(Addd_Inf, assembler) {
1266 __ LoadImmediate(F0, 1.0f); 1266 __ LoadImmediate(D0, 1.0);
1267 __ LoadImmediate(T0, 0x7FF00000); // +inf 1267 __ LoadImmediate(T0, 0x7FF00000); // +inf
1268 __ mtc1(ZR, F2); 1268 __ mtc1(ZR, F2);
1269 __ mtc1(T0, F3); 1269 __ mtc1(T0, F3);
1270 __ addd(F4, F0, F2); 1270 __ addd(D2, D0, D1);
1271 __ mfc1(V0, F4); 1271 __ mfc1(V0, F4);
1272 __ mfc1(V1, F5); 1272 __ mfc1(V1, F5);
1273 __ Ret(); 1273 __ Ret();
1274 } 1274 }
1275 1275
1276 1276
1277 ASSEMBLER_TEST_RUN(Addd_Inf, test) { 1277 ASSEMBLER_TEST_RUN(Addd_Inf, test) {
1278 typedef double (*SimpleCode)(); 1278 typedef double (*SimpleCode)();
1279 EXPECT(test != NULL); 1279 EXPECT(test != NULL);
1280 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1280 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1281 EXPECT_EQ(isfinite(res), false); 1281 EXPECT_EQ(isfinite(res), false);
1282 } 1282 }
1283 1283
1284 1284
1285 ASSEMBLER_TEST_GENERATE(Subd, assembler) { 1285 ASSEMBLER_TEST_GENERATE(Subd, assembler) {
1286 __ LoadImmediate(F0, 2.5); 1286 __ LoadImmediate(D0, 2.5);
1287 __ LoadImmediate(F2, 1.5); 1287 __ LoadImmediate(D1, 1.5);
1288 __ subd(F4, F0, F2); 1288 __ subd(D2, D0, D1);
1289 __ mfc1(V0, F4); 1289 __ mfc1(V0, F4);
1290 __ mfc1(V1, F5); 1290 __ mfc1(V1, F5);
1291 __ Ret(); 1291 __ Ret();
1292 } 1292 }
1293 1293
1294 1294
1295 ASSEMBLER_TEST_RUN(Subd, test) { 1295 ASSEMBLER_TEST_RUN(Subd, test) {
1296 typedef double (*SimpleCode)(); 1296 typedef double (*SimpleCode)();
1297 EXPECT(test != NULL); 1297 EXPECT(test != NULL);
1298 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1298 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1299 EXPECT_FLOAT_EQ(1.0, res, 0.001); 1299 EXPECT_FLOAT_EQ(1.0, res, 0.001);
1300 } 1300 }
1301 1301
1302 1302
1303 ASSEMBLER_TEST_GENERATE(Muld, assembler) { 1303 ASSEMBLER_TEST_GENERATE(Muld, assembler) {
1304 __ LoadImmediate(F0, 6.0); 1304 __ LoadImmediate(D0, 6.0);
1305 __ LoadImmediate(F2, 7.0); 1305 __ LoadImmediate(D1, 7.0);
1306 __ muld(F4, F0, F2); 1306 __ muld(D2, D0, D1);
1307 __ mfc1(V0, F4); 1307 __ mfc1(V0, F4);
1308 __ mfc1(V1, F5); 1308 __ mfc1(V1, F5);
1309 __ Ret(); 1309 __ Ret();
1310 } 1310 }
1311 1311
1312 1312
1313 ASSEMBLER_TEST_RUN(Muld, test) { 1313 ASSEMBLER_TEST_RUN(Muld, test) {
1314 typedef double (*SimpleCode)(); 1314 typedef double (*SimpleCode)();
1315 EXPECT(test != NULL); 1315 EXPECT(test != NULL);
1316 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1316 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1317 EXPECT_FLOAT_EQ(42.0, res, 0.001); 1317 EXPECT_FLOAT_EQ(42.0, res, 0.001);
1318 } 1318 }
1319 1319
1320 1320
1321 ASSEMBLER_TEST_GENERATE(Divd, assembler) { 1321 ASSEMBLER_TEST_GENERATE(Divd, assembler) {
1322 __ LoadImmediate(F0, 42.0); 1322 __ LoadImmediate(D0, 42.0);
1323 __ LoadImmediate(F2, 7.0); 1323 __ LoadImmediate(D1, 7.0);
1324 __ divd(F4, F0, F2); 1324 __ divd(D2, D0, D1);
1325 __ mfc1(V0, F4); 1325 __ mfc1(V0, F4);
1326 __ mfc1(V1, F5); 1326 __ mfc1(V1, F5);
1327 __ Ret(); 1327 __ Ret();
1328 } 1328 }
1329 1329
1330 1330
1331 ASSEMBLER_TEST_RUN(Divd, test) { 1331 ASSEMBLER_TEST_RUN(Divd, test) {
1332 typedef double (*SimpleCode)(); 1332 typedef double (*SimpleCode)();
1333 EXPECT(test != NULL); 1333 EXPECT(test != NULL);
1334 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1334 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1335 EXPECT_FLOAT_EQ(6.0, res, 0.001); 1335 EXPECT_FLOAT_EQ(6.0, res, 0.001);
1336 } 1336 }
1337 1337
1338 1338
1339 ASSEMBLER_TEST_GENERATE(Sqrtd, assembler) { 1339 ASSEMBLER_TEST_GENERATE(Sqrtd, assembler) {
1340 __ LoadImmediate(F0, 36.0); 1340 __ LoadImmediate(D0, 36.0);
1341 __ sqrtd(F4, F0); 1341 __ sqrtd(D2, D0);
1342 __ mfc1(V0, F4); 1342 __ mfc1(V0, F4);
1343 __ mfc1(V1, F5); 1343 __ mfc1(V1, F5);
1344 __ Ret(); 1344 __ Ret();
1345 } 1345 }
1346 1346
1347 1347
1348 ASSEMBLER_TEST_RUN(Sqrtd, test) { 1348 ASSEMBLER_TEST_RUN(Sqrtd, test) {
1349 typedef double (*SimpleCode)(); 1349 typedef double (*SimpleCode)();
1350 EXPECT(test != NULL); 1350 EXPECT(test != NULL);
1351 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1351 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1352 EXPECT_FLOAT_EQ(6.0, res, 0.001); 1352 EXPECT_FLOAT_EQ(6.0, res, 0.001);
1353 } 1353 }
1354 1354
1355 1355
1356 ASSEMBLER_TEST_GENERATE(Cop1CUN, assembler) { 1356 ASSEMBLER_TEST_GENERATE(Cop1CUN, assembler) {
1357 Label is_true; 1357 Label is_true;
1358 1358
1359 __ LoadImmediate(F0, 42.0); 1359 __ LoadImmediate(D0, 42.0);
1360 __ LoadImmediate(T0, 0x7FF80000); 1360 __ LoadImmediate(T0, 0x7FF80000);
1361 __ mtc1(ZR, F2); 1361 __ mtc1(ZR, F2);
1362 __ mtc1(T0, F3); 1362 __ mtc1(T0, F3);
1363 __ LoadImmediate(V0, 42); 1363 __ LoadImmediate(V0, 42);
1364 __ cund(F0, F2); 1364 __ cund(D0, D1);
1365 __ bc1t(&is_true); 1365 __ bc1t(&is_true);
1366 __ mov(V0, ZR); 1366 __ mov(V0, ZR);
1367 __ Bind(&is_true); 1367 __ Bind(&is_true);
1368 __ Ret(); 1368 __ Ret();
1369 } 1369 }
1370 1370
1371 1371
1372 ASSEMBLER_TEST_RUN(Cop1CUN, test) { 1372 ASSEMBLER_TEST_RUN(Cop1CUN, test) {
1373 typedef int (*SimpleCode)(); 1373 typedef int (*SimpleCode)();
1374 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1374 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1375 } 1375 }
1376 1376
1377 1377
1378 ASSEMBLER_TEST_GENERATE(Cop1CUN_not_taken, assembler) { 1378 ASSEMBLER_TEST_GENERATE(Cop1CUN_not_taken, assembler) {
1379 Label is_true; 1379 Label is_true;
1380 1380
1381 __ LoadImmediate(F0, 42.0); 1381 __ LoadImmediate(D0, 42.0);
1382 __ LoadImmediate(F2, 42.0); 1382 __ LoadImmediate(D1, 42.0);
1383 __ LoadImmediate(V0, 42); 1383 __ LoadImmediate(V0, 42);
1384 __ cund(F0, F2); 1384 __ cund(D0, D1);
1385 __ bc1t(&is_true); 1385 __ bc1t(&is_true);
1386 __ mov(V0, ZR); 1386 __ mov(V0, ZR);
1387 __ Bind(&is_true); 1387 __ Bind(&is_true);
1388 __ Ret(); 1388 __ Ret();
1389 } 1389 }
1390 1390
1391 1391
1392 ASSEMBLER_TEST_RUN(Cop1CUN_not_taken, test) { 1392 ASSEMBLER_TEST_RUN(Cop1CUN_not_taken, test) {
1393 typedef int (*SimpleCode)(); 1393 typedef int (*SimpleCode)();
1394 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1394 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1395 } 1395 }
1396 1396
1397 1397
1398 ASSEMBLER_TEST_GENERATE(Cop1CEq, assembler) { 1398 ASSEMBLER_TEST_GENERATE(Cop1CEq, assembler) {
1399 Label is_true; 1399 Label is_true;
1400 1400
1401 __ LoadImmediate(F0, 42.5); 1401 __ LoadImmediate(D0, 42.5);
1402 __ LoadImmediate(F2, 42.5); 1402 __ LoadImmediate(D1, 42.5);
1403 __ LoadImmediate(V0, 42); 1403 __ LoadImmediate(V0, 42);
1404 __ ceqd(F0, F2); 1404 __ ceqd(D0, D1);
1405 __ bc1t(&is_true); 1405 __ bc1t(&is_true);
1406 __ mov(V0, ZR); 1406 __ mov(V0, ZR);
1407 __ Bind(&is_true); 1407 __ Bind(&is_true);
1408 __ Ret(); 1408 __ Ret();
1409 } 1409 }
1410 1410
1411 1411
1412 ASSEMBLER_TEST_RUN(Cop1CEq, test) { 1412 ASSEMBLER_TEST_RUN(Cop1CEq, test) {
1413 typedef int (*SimpleCode)(); 1413 typedef int (*SimpleCode)();
1414 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1414 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1415 } 1415 }
1416 1416
1417 1417
1418 ASSEMBLER_TEST_GENERATE(Cop1CEq_not_taken, assembler) { 1418 ASSEMBLER_TEST_GENERATE(Cop1CEq_not_taken, assembler) {
1419 Label is_true; 1419 Label is_true;
1420 1420
1421 __ LoadImmediate(F0, 42.0); 1421 __ LoadImmediate(D0, 42.0);
1422 __ LoadImmediate(F2, 42.5); 1422 __ LoadImmediate(D1, 42.5);
1423 __ LoadImmediate(V0, 42); 1423 __ LoadImmediate(V0, 42);
1424 __ ceqd(F0, F2); 1424 __ ceqd(D0, D1);
1425 __ bc1t(&is_true); 1425 __ bc1t(&is_true);
1426 __ mov(V0, ZR); 1426 __ mov(V0, ZR);
1427 __ Bind(&is_true); 1427 __ Bind(&is_true);
1428 __ Ret(); 1428 __ Ret();
1429 } 1429 }
1430 1430
1431 1431
1432 ASSEMBLER_TEST_RUN(Cop1CEq_not_taken, test) { 1432 ASSEMBLER_TEST_RUN(Cop1CEq_not_taken, test) {
1433 typedef int (*SimpleCode)(); 1433 typedef int (*SimpleCode)();
1434 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1434 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1435 } 1435 }
1436 1436
1437 1437
1438 ASSEMBLER_TEST_GENERATE(Cop1CEq_false, assembler) { 1438 ASSEMBLER_TEST_GENERATE(Cop1CEq_false, assembler) {
1439 Label is_true; 1439 Label is_true;
1440 1440
1441 __ LoadImmediate(F0, 42.0); 1441 __ LoadImmediate(D0, 42.0);
1442 __ LoadImmediate(F2, 42.5); 1442 __ LoadImmediate(D1, 42.5);
1443 __ LoadImmediate(V0, 42); 1443 __ LoadImmediate(V0, 42);
1444 __ ceqd(F0, F2); 1444 __ ceqd(D0, D1);
1445 __ bc1f(&is_true); 1445 __ bc1f(&is_true);
1446 __ mov(V0, ZR); 1446 __ mov(V0, ZR);
1447 __ Bind(&is_true); 1447 __ Bind(&is_true);
1448 __ Ret(); 1448 __ Ret();
1449 } 1449 }
1450 1450
1451 1451
1452 ASSEMBLER_TEST_RUN(Cop1CEq_false, test) { 1452 ASSEMBLER_TEST_RUN(Cop1CEq_false, test) {
1453 typedef int (*SimpleCode)(); 1453 typedef int (*SimpleCode)();
1454 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1454 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1455 } 1455 }
1456 1456
1457 1457
1458 ASSEMBLER_TEST_GENERATE(Cop1CEq_false_not_taken, assembler) { 1458 ASSEMBLER_TEST_GENERATE(Cop1CEq_false_not_taken, assembler) {
1459 Label is_true; 1459 Label is_true;
1460 1460
1461 __ LoadImmediate(F0, 42.5); 1461 __ LoadImmediate(D0, 42.5);
1462 __ LoadImmediate(F2, 42.5); 1462 __ LoadImmediate(D1, 42.5);
1463 __ LoadImmediate(V0, 42); 1463 __ LoadImmediate(V0, 42);
1464 __ ceqd(F0, F2); 1464 __ ceqd(D0, D1);
1465 __ bc1f(&is_true); 1465 __ bc1f(&is_true);
1466 __ mov(V0, ZR); 1466 __ mov(V0, ZR);
1467 __ Bind(&is_true); 1467 __ Bind(&is_true);
1468 __ Ret(); 1468 __ Ret();
1469 } 1469 }
1470 1470
1471 1471
1472 ASSEMBLER_TEST_RUN(Cop1CEq_false_not_taken, test) { 1472 ASSEMBLER_TEST_RUN(Cop1CEq_false_not_taken, test) {
1473 typedef int (*SimpleCode)(); 1473 typedef int (*SimpleCode)();
1474 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1474 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1475 } 1475 }
1476 1476
1477 1477
1478 ASSEMBLER_TEST_GENERATE(Cop1COLT, assembler) { 1478 ASSEMBLER_TEST_GENERATE(Cop1COLT, assembler) {
1479 Label is_true; 1479 Label is_true;
1480 1480
1481 __ LoadImmediate(F0, 42.0); 1481 __ LoadImmediate(D0, 42.0);
1482 __ LoadImmediate(F2, 42.5); 1482 __ LoadImmediate(D1, 42.5);
1483 __ LoadImmediate(V0, 42); 1483 __ LoadImmediate(V0, 42);
1484 __ coltd(F0, F2); 1484 __ coltd(D0, D1);
1485 __ bc1t(&is_true); 1485 __ bc1t(&is_true);
1486 __ mov(V0, ZR); 1486 __ mov(V0, ZR);
1487 __ Bind(&is_true); 1487 __ Bind(&is_true);
1488 __ Ret(); 1488 __ Ret();
1489 } 1489 }
1490 1490
1491 1491
1492 ASSEMBLER_TEST_RUN(Cop1COLT, test) { 1492 ASSEMBLER_TEST_RUN(Cop1COLT, test) {
1493 typedef int (*SimpleCode)(); 1493 typedef int (*SimpleCode)();
1494 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1494 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1495 } 1495 }
1496 1496
1497 1497
1498 ASSEMBLER_TEST_GENERATE(Cop1COLT_not_taken, assembler) { 1498 ASSEMBLER_TEST_GENERATE(Cop1COLT_not_taken, assembler) {
1499 Label is_true; 1499 Label is_true;
1500 1500
1501 __ LoadImmediate(F0, 42.5); 1501 __ LoadImmediate(D0, 42.5);
1502 __ LoadImmediate(F2, 42.0); 1502 __ LoadImmediate(D1, 42.0);
1503 __ LoadImmediate(V0, 42); 1503 __ LoadImmediate(V0, 42);
1504 __ coltd(F0, F2); 1504 __ coltd(D0, D1);
1505 __ bc1t(&is_true); 1505 __ bc1t(&is_true);
1506 __ mov(V0, ZR); 1506 __ mov(V0, ZR);
1507 __ Bind(&is_true); 1507 __ Bind(&is_true);
1508 __ Ret(); 1508 __ Ret();
1509 } 1509 }
1510 1510
1511 1511
1512 ASSEMBLER_TEST_RUN(Cop1COLT_not_taken, test) { 1512 ASSEMBLER_TEST_RUN(Cop1COLT_not_taken, test) {
1513 typedef int (*SimpleCode)(); 1513 typedef int (*SimpleCode)();
1514 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1514 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1515 } 1515 }
1516 1516
1517 1517
1518 ASSEMBLER_TEST_GENERATE(Cop1COLE, assembler) { 1518 ASSEMBLER_TEST_GENERATE(Cop1COLE, assembler) {
1519 Label is_true; 1519 Label is_true;
1520 1520
1521 __ LoadImmediate(F0, 42.0); 1521 __ LoadImmediate(D0, 42.0);
1522 __ LoadImmediate(F2, 42.0); 1522 __ LoadImmediate(D1, 42.0);
1523 __ LoadImmediate(V0, 42); 1523 __ LoadImmediate(V0, 42);
1524 __ coled(F0, F2); 1524 __ coled(D0, D1);
1525 __ bc1t(&is_true); 1525 __ bc1t(&is_true);
1526 __ mov(V0, ZR); 1526 __ mov(V0, ZR);
1527 __ Bind(&is_true); 1527 __ Bind(&is_true);
1528 __ Ret(); 1528 __ Ret();
1529 } 1529 }
1530 1530
1531 1531
1532 ASSEMBLER_TEST_RUN(Cop1COLE, test) { 1532 ASSEMBLER_TEST_RUN(Cop1COLE, test) {
1533 typedef int (*SimpleCode)(); 1533 typedef int (*SimpleCode)();
1534 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1534 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1535 } 1535 }
1536 1536
1537 1537
1538 ASSEMBLER_TEST_GENERATE(Cop1COLE_not_taken, assembler) { 1538 ASSEMBLER_TEST_GENERATE(Cop1COLE_not_taken, assembler) {
1539 Label is_true; 1539 Label is_true;
1540 1540
1541 __ LoadImmediate(F0, 42.5); 1541 __ LoadImmediate(D0, 42.5);
1542 __ LoadImmediate(F2, 42.0); 1542 __ LoadImmediate(D1, 42.0);
1543 __ LoadImmediate(V0, 42); 1543 __ LoadImmediate(V0, 42);
1544 __ coled(F0, F2); 1544 __ coled(D0, D1);
1545 __ bc1t(&is_true); 1545 __ bc1t(&is_true);
1546 __ mov(V0, ZR); 1546 __ mov(V0, ZR);
1547 __ Bind(&is_true); 1547 __ Bind(&is_true);
1548 __ Ret(); 1548 __ Ret();
1549 } 1549 }
1550 1550
1551 1551
1552 ASSEMBLER_TEST_RUN(Cop1COLE_not_taken, test) { 1552 ASSEMBLER_TEST_RUN(Cop1COLE_not_taken, test) {
1553 typedef int (*SimpleCode)(); 1553 typedef int (*SimpleCode)();
1554 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1554 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1555 } 1555 }
1556 1556
1557 1557
1558 ASSEMBLER_TEST_GENERATE(Cop1CvtDW, assembler) { 1558 ASSEMBLER_TEST_GENERATE(Cop1CvtDW, assembler) {
1559 __ LoadImmediate(T0, 42); 1559 __ LoadImmediate(T0, 42);
1560 __ mtc1(T0, F0); 1560 __ mtc1(T0, F0);
1561 __ cvtdw(F2, F0); 1561 __ cvtdw(D1, F0);
1562 __ mfc1(V0, F2); 1562 __ mfc1(V0, F2);
1563 __ mfc1(V1, F3); 1563 __ mfc1(V1, F3);
1564 __ Ret(); 1564 __ Ret();
1565 } 1565 }
1566 1566
1567 1567
1568 ASSEMBLER_TEST_RUN(Cop1CvtDW, test) { 1568 ASSEMBLER_TEST_RUN(Cop1CvtDW, test) {
1569 typedef double (*SimpleCode)(); 1569 typedef double (*SimpleCode)();
1570 EXPECT(test != NULL); 1570 EXPECT(test != NULL);
1571 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1571 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1572 EXPECT_FLOAT_EQ(42.0, res, 0.001); 1572 EXPECT_FLOAT_EQ(42.0, res, 0.001);
1573 } 1573 }
1574 1574
1575 1575
1576 ASSEMBLER_TEST_GENERATE(Cop1CvtDW_neg, assembler) { 1576 ASSEMBLER_TEST_GENERATE(Cop1CvtDW_neg, assembler) {
1577 __ LoadImmediate(T0, -42); 1577 __ LoadImmediate(T0, -42);
1578 __ mtc1(T0, F0); 1578 __ mtc1(T0, F0);
1579 __ cvtdw(F2, F0); 1579 __ cvtdw(D1, F0);
1580 __ mfc1(V0, F2); 1580 __ mfc1(V0, F2);
1581 __ mfc1(V1, F3); 1581 __ mfc1(V1, F3);
1582 __ Ret(); 1582 __ Ret();
1583 } 1583 }
1584 1584
1585 1585
1586 ASSEMBLER_TEST_RUN(Cop1CvtDW_neg, test) { 1586 ASSEMBLER_TEST_RUN(Cop1CvtDW_neg, test) {
1587 typedef double (*SimpleCode)(); 1587 typedef double (*SimpleCode)();
1588 EXPECT(test != NULL); 1588 EXPECT(test != NULL);
1589 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1589 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1590 EXPECT_FLOAT_EQ(-42.0, res, 0.001); 1590 EXPECT_FLOAT_EQ(-42.0, res, 0.001);
1591 } 1591 }
1592 1592
1593 1593
1594 ASSEMBLER_TEST_GENERATE(Cop1CvtDL, assembler) { 1594 ASSEMBLER_TEST_GENERATE(Cop1CvtDL, assembler) {
1595 __ LoadImmediate(T0, 0x1); 1595 __ LoadImmediate(T0, 0x1);
1596 __ mtc1(ZR, F0); 1596 __ mtc1(ZR, F0);
1597 __ mtc1(T0, F1); // D0 <- 0x100000000 = 4294967296 1597 __ mtc1(T0, F1); // D0 <- 0x100000000 = 4294967296
1598 __ cvtdl(F2, F0); 1598 __ cvtdl(D1, D0);
1599 __ mfc1(V0, F2); 1599 __ mfc1(V0, F2);
1600 __ mfc1(V1, F3); 1600 __ mfc1(V1, F3);
1601 __ Ret(); 1601 __ Ret();
1602 } 1602 }
1603 1603
1604 1604
1605 ASSEMBLER_TEST_RUN(Cop1CvtDL, test) { 1605 ASSEMBLER_TEST_RUN(Cop1CvtDL, test) {
1606 typedef double (*SimpleCode)(); 1606 typedef double (*SimpleCode)();
1607 EXPECT(test != NULL); 1607 EXPECT(test != NULL);
1608 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1608 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1609 EXPECT_FLOAT_EQ(4294967296.0, res, 0.001); 1609 EXPECT_FLOAT_EQ(4294967296.0, res, 0.001);
1610 } 1610 }
1611 1611
1612 1612
1613 ASSEMBLER_TEST_GENERATE(Cop1CvtDL_neg, assembler) { 1613 ASSEMBLER_TEST_GENERATE(Cop1CvtDL_neg, assembler) {
1614 __ LoadImmediate(T0, 0xffffffff); 1614 __ LoadImmediate(T0, 0xffffffff);
1615 __ mtc1(T0, F0); 1615 __ mtc1(T0, F0);
1616 __ mtc1(T0, F1); // D0 <- 0xffffffffffffffff = -1 1616 __ mtc1(T0, F1); // D0 <- 0xffffffffffffffff = -1
1617 __ cvtdl(F2, F0); 1617 __ cvtdl(D1, D0);
1618 __ mfc1(V0, F2); 1618 __ mfc1(V0, F2);
1619 __ mfc1(V1, F3); 1619 __ mfc1(V1, F3);
1620 __ Ret(); 1620 __ Ret();
1621 } 1621 }
1622 1622
1623 1623
1624 ASSEMBLER_TEST_RUN(Cop1CvtDL_neg, test) { 1624 ASSEMBLER_TEST_RUN(Cop1CvtDL_neg, test) {
1625 typedef double (*SimpleCode)(); 1625 typedef double (*SimpleCode)();
1626 EXPECT(test != NULL); 1626 EXPECT(test != NULL);
1627 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1627 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1628 EXPECT_FLOAT_EQ(-1.0, res, 0.001); 1628 EXPECT_FLOAT_EQ(-1.0, res, 0.001);
1629 } 1629 }
1630 1630
1631 1631
1632 ASSEMBLER_TEST_GENERATE(Cop1CvtWD, assembler) { 1632 ASSEMBLER_TEST_GENERATE(Cop1CvtWD, assembler) {
1633 __ LoadImmediate(F0, 42.0); 1633 __ LoadImmediate(D0, 42.0);
1634 __ cvtwd(F2, F0); 1634 __ cvtwd(F2, D0);
1635 __ mfc1(V0, F2); 1635 __ mfc1(V0, F2);
1636 __ Ret(); 1636 __ Ret();
1637 } 1637 }
1638 1638
1639 1639
1640 ASSEMBLER_TEST_RUN(Cop1CvtWD, test) { 1640 ASSEMBLER_TEST_RUN(Cop1CvtWD, test) {
1641 typedef double (*SimpleCode)(); 1641 typedef double (*SimpleCode)();
1642 EXPECT(test != NULL); 1642 EXPECT(test != NULL);
1643 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1643 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1644 } 1644 }
1645 1645
1646 1646
1647 ASSEMBLER_TEST_GENERATE(Cop1CvtWD_neg, assembler) { 1647 ASSEMBLER_TEST_GENERATE(Cop1CvtWD_neg, assembler) {
1648 __ LoadImmediate(F0, -42.0); 1648 __ LoadImmediate(D0, -42.0);
1649 __ cvtwd(F2, F0); 1649 __ cvtwd(F2, D0);
1650 __ mfc1(V0, F2); 1650 __ mfc1(V0, F2);
1651 __ Ret(); 1651 __ Ret();
1652 } 1652 }
1653 1653
1654 1654
1655 ASSEMBLER_TEST_RUN(Cop1CvtWD_neg, test) { 1655 ASSEMBLER_TEST_RUN(Cop1CvtWD_neg, test) {
1656 typedef double (*SimpleCode)(); 1656 typedef double (*SimpleCode)();
1657 EXPECT(test != NULL); 1657 EXPECT(test != NULL);
1658 EXPECT_EQ(-42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1658 EXPECT_EQ(-42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1659 } 1659 }
(...skipping 15 matching lines...) Expand all
1675 A1); 1675 A1);
1676 __ lw(RA, Address(SP, 0 * kWordSize)); 1676 __ lw(RA, Address(SP, 0 * kWordSize));
1677 __ lw(CTX, Address(SP, 1 * kWordSize)); 1677 __ lw(CTX, Address(SP, 1 * kWordSize));
1678 __ addiu(SP, SP, Immediate(2 * kWordSize)); 1678 __ addiu(SP, SP, Immediate(2 * kWordSize));
1679 __ Ret(); 1679 __ Ret();
1680 } 1680 }
1681 1681
1682 } // namespace dart 1682 } // namespace dart
1683 1683
1684 #endif // defined TARGET_ARCH_MIPS 1684 #endif // defined TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « runtime/vm/assembler_mips.cc ('k') | runtime/vm/code_generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698