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

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

Issue 15874005: Fixes buggy FPU tests for MIPS hardware. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 6 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 | « no previous file | runtime/vm/constants_mips.h » ('j') | runtime/vm/simulator_mips.h » ('J')
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 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 __ jr(RA); 185 __ jr(RA);
186 } 186 }
187 187
188 188
189 ASSEMBLER_TEST_RUN(Div, test) { 189 ASSEMBLER_TEST_RUN(Div, test) {
190 typedef int (*SimpleCode)(); 190 typedef int (*SimpleCode)();
191 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 191 EXPECT_EQ(3, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
192 } 192 }
193 193
194 194
195 ASSEMBLER_TEST_GENERATE(Divu_zero, assembler) {
196 __ addiu(R1, ZR, Immediate(27));
197 __ addiu(R2, ZR, Immediate(0));
198 __ divu(R1, R2);
199 __ mflo(V0);
200 __ jr(RA);
201 }
202
203
204 ASSEMBLER_TEST_RUN(Divu_zero, test) {
205 typedef int (*SimpleCode)();
206 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
207 }
208
209
210 ASSEMBLER_TEST_GENERATE(Div_zero, assembler) {
211 __ addiu(R1, ZR, Immediate(27));
212 __ addiu(R2, ZR, Immediate(0));
213 __ div(R1, R2);
214 __ mflo(V0);
215 __ jr(RA);
216 }
217
218
219 ASSEMBLER_TEST_RUN(Div_zero, test) {
220 typedef int (*SimpleCode)();
221 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
222 }
223
224
225 ASSEMBLER_TEST_GENERATE(Divu_corner, assembler) { 195 ASSEMBLER_TEST_GENERATE(Divu_corner, assembler) {
226 __ LoadImmediate(R1, 0x80000000); 196 __ LoadImmediate(R1, 0x80000000);
227 __ LoadImmediate(R2, 0xffffffff); 197 __ LoadImmediate(R2, 0xffffffff);
228 __ divu(R1, R2); 198 __ divu(R1, R2);
229 __ mflo(V0); 199 __ mflo(V0);
230 __ jr(RA); 200 __ jr(RA);
231 } 201 }
232 202
233 203
234 ASSEMBLER_TEST_RUN(Divu_corner, test) { 204 ASSEMBLER_TEST_RUN(Divu_corner, test) {
(...skipping 975 matching lines...) Expand 10 before | Expand all | Expand 10 after
1210 1180
1211 1181
1212 ASSEMBLER_TEST_RUN(SubOverflow_detect, test) { 1182 ASSEMBLER_TEST_RUN(SubOverflow_detect, test) {
1213 typedef int (*SimpleCode)(); 1183 typedef int (*SimpleCode)();
1214 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1184 EXPECT_EQ(1, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1215 } 1185 }
1216 1186
1217 1187
1218 ASSEMBLER_TEST_GENERATE(Mtc1Mfc1, assembler) { 1188 ASSEMBLER_TEST_GENERATE(Mtc1Mfc1, assembler) {
1219 __ mtc1(ZR, F0); 1189 __ mtc1(ZR, F0);
1190 __ mtc1(ZR, F1);
1220 __ mfc1(V0, F0); 1191 __ mfc1(V0, F0);
1192 __ mfc1(V1, F1);
1221 __ Ret(); 1193 __ Ret();
1222 } 1194 }
1223 1195
1224 1196
1225 ASSEMBLER_TEST_RUN(Mtc1Mfc1, test) { 1197 ASSEMBLER_TEST_RUN(Mtc1Mfc1, test) {
1226 typedef double (*SimpleCode)(); 1198 typedef int (*SimpleCode)();
1227 EXPECT(test != NULL); 1199 EXPECT(test != NULL);
1228 double res = EXECUTE_TEST_CODE_FLOAT(SimpleCode, test->entry()); 1200 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1229 EXPECT_FLOAT_EQ(0.0, res, 0.001);
1230 } 1201 }
1231 1202
1232 1203
1233 ASSEMBLER_TEST_GENERATE(Addd, assembler) { 1204 ASSEMBLER_TEST_GENERATE(Addd, assembler) {
1234 __ LoadImmediate(D0, 1.0); 1205 __ LoadImmediate(D0, 1.0);
1235 __ LoadImmediate(D1, 2.0); 1206 __ LoadImmediate(D1, 2.0);
1236 __ addd(D2, D0, D1); 1207 __ addd(D0, D0, D1);
1237 __ mfc1(V0, F4);
1238 __ mfc1(V1, F5);
1239 __ Ret(); 1208 __ Ret();
1240 } 1209 }
1241 1210
1242 1211
1243 ASSEMBLER_TEST_RUN(Addd, test) { 1212 ASSEMBLER_TEST_RUN(Addd, test) {
1244 typedef double (*SimpleCode)(); 1213 typedef double (*SimpleCode)();
1245 EXPECT(test != NULL); 1214 EXPECT(test != NULL);
1246 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1215 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1247 EXPECT_FLOAT_EQ(3.0, res, 0.001); 1216 EXPECT_FLOAT_EQ(3.0, res, 0.001);
1248 } 1217 }
1249 1218
1250 1219
1251 ASSEMBLER_TEST_GENERATE(Movd, assembler) { 1220 ASSEMBLER_TEST_GENERATE(Movd, assembler) {
1252 __ LoadImmediate(D0, 1.0); 1221 __ LoadImmediate(D1, 1.0);
1253 __ movd(D1, D0); 1222 __ movd(D0, D1);
1254 __ mfc1(V0, F2);
1255 __ mfc1(V1, F3);
1256 __ Ret(); 1223 __ Ret();
1257 } 1224 }
1258 1225
1259 1226
1260 ASSEMBLER_TEST_RUN(Movd, test) { 1227 ASSEMBLER_TEST_RUN(Movd, test) {
1261 typedef double (*SimpleCode)(); 1228 typedef double (*SimpleCode)();
1262 EXPECT(test != NULL); 1229 EXPECT(test != NULL);
1263 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1230 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1264 EXPECT_FLOAT_EQ(1.0, res, 0.001); 1231 EXPECT_FLOAT_EQ(1.0, res, 0.001);
1265 } 1232 }
1266 1233
1267 1234
1268 ASSEMBLER_TEST_GENERATE(Sdc1Ldc1, assembler) { 1235 ASSEMBLER_TEST_GENERATE(Sdc1Ldc1, assembler) {
1269 __ AddImmediate(SP, -8 * kWordSize); 1236 __ AddImmediate(SP, -8 * kWordSize);
1270 __ LoadImmediate(T1, ~(8 - 1)); 1237 __ LoadImmediate(T1, ~(8 - 1));
1271 __ and_(T0, SP, T1); // Need 8 byte alignment. 1238 __ and_(T0, SP, T1); // Need 8 byte alignment.
1272 __ LoadImmediate(D0, 1.0); 1239 __ LoadImmediate(D1, 1.0);
1273 __ sdc1(D0, Address(T0)); 1240 __ sdc1(D1, Address(T0));
1274 __ ldc1(D1, Address(T0)); 1241 __ ldc1(D0, Address(T0));
1275 __ mfc1(V0, F2);
1276 __ mfc1(V1, F3);
1277 __ Ret(); 1242 __ Ret();
1278 } 1243 }
1279 1244
1280 1245
1281 ASSEMBLER_TEST_RUN(Sdc1Ldc1, test) { 1246 ASSEMBLER_TEST_RUN(Sdc1Ldc1, test) {
1282 typedef double (*SimpleCode)(); 1247 typedef double (*SimpleCode)();
1283 EXPECT(test != NULL); 1248 EXPECT(test != NULL);
1284 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1249 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1285 EXPECT_FLOAT_EQ(1.0, res, 0.001); 1250 EXPECT_FLOAT_EQ(1.0, res, 0.001);
1286 } 1251 }
1287 1252
1288 1253
1289 ASSEMBLER_TEST_GENERATE(Addd_NaN, assembler) { 1254 ASSEMBLER_TEST_GENERATE(Addd_NaN, assembler) {
1290 __ LoadImmediate(D0, 1.0); 1255 __ LoadImmediate(D0, 1.0);
1291 // Double non-signaling NaN is 0x7FF8000000000000. 1256 // Double non-signaling NaN is 0x7FF8000000000000.
1292 __ LoadImmediate(T0, 0x7FF80000); 1257 __ LoadImmediate(T0, 0x7FF80000);
1293 __ mtc1(ZR, F2); // Load upper bits of NaN. 1258 __ mtc1(ZR, F2); // Load upper bits of NaN.
1294 __ mtc1(T0, F3); // Load lower bits of NaN. 1259 __ mtc1(T0, F3); // Load lower bits of NaN.
1295 __ addd(D2, D0, D1); 1260 __ addd(D0, D0, D1);
1296 __ mfc1(V0, F4);
1297 __ mfc1(V1, F5);
1298 __ Ret(); 1261 __ Ret();
1299 } 1262 }
1300 1263
1301 1264
1302 ASSEMBLER_TEST_RUN(Addd_NaN, test) { 1265 ASSEMBLER_TEST_RUN(Addd_NaN, test) {
1303 typedef double (*SimpleCode)(); 1266 typedef double (*SimpleCode)();
1304 EXPECT(test != NULL); 1267 EXPECT(test != NULL);
1305 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1268 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1306 EXPECT_EQ(isnan(res), true); 1269 EXPECT_EQ(isnan(res), true);
1307 } 1270 }
1308 1271
1309 1272
1310 ASSEMBLER_TEST_GENERATE(Addd_Inf, assembler) { 1273 ASSEMBLER_TEST_GENERATE(Addd_Inf, assembler) {
1311 __ LoadImmediate(D0, 1.0); 1274 __ LoadImmediate(D0, 1.0);
1312 __ LoadImmediate(T0, 0x7FF00000); // +inf 1275 __ LoadImmediate(T0, 0x7FF00000); // +inf
1313 __ mtc1(ZR, F2); 1276 __ mtc1(ZR, F2);
1314 __ mtc1(T0, F3); 1277 __ mtc1(T0, F3);
1315 __ addd(D2, D0, D1); 1278 __ addd(D0, D0, D1);
1316 __ mfc1(V0, F4);
1317 __ mfc1(V1, F5);
1318 __ Ret(); 1279 __ Ret();
1319 } 1280 }
1320 1281
1321 1282
1322 ASSEMBLER_TEST_RUN(Addd_Inf, test) { 1283 ASSEMBLER_TEST_RUN(Addd_Inf, test) {
1323 typedef double (*SimpleCode)(); 1284 typedef double (*SimpleCode)();
1324 EXPECT(test != NULL); 1285 EXPECT(test != NULL);
1325 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1286 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1326 EXPECT_EQ(isfinite(res), false); 1287 EXPECT_EQ(isfinite(res), false);
1327 } 1288 }
1328 1289
1329 1290
1330 ASSEMBLER_TEST_GENERATE(Subd, assembler) { 1291 ASSEMBLER_TEST_GENERATE(Subd, assembler) {
1331 __ LoadImmediate(D0, 2.5); 1292 __ LoadImmediate(D0, 2.5);
1332 __ LoadImmediate(D1, 1.5); 1293 __ LoadImmediate(D1, 1.5);
1333 __ subd(D2, D0, D1); 1294 __ subd(D0, D0, D1);
1334 __ mfc1(V0, F4);
1335 __ mfc1(V1, F5);
1336 __ Ret(); 1295 __ Ret();
1337 } 1296 }
1338 1297
1339 1298
1340 ASSEMBLER_TEST_RUN(Subd, test) { 1299 ASSEMBLER_TEST_RUN(Subd, test) {
1341 typedef double (*SimpleCode)(); 1300 typedef double (*SimpleCode)();
1342 EXPECT(test != NULL); 1301 EXPECT(test != NULL);
1343 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1302 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1344 EXPECT_FLOAT_EQ(1.0, res, 0.001); 1303 EXPECT_FLOAT_EQ(1.0, res, 0.001);
1345 } 1304 }
1346 1305
1347 1306
1348 ASSEMBLER_TEST_GENERATE(Muld, assembler) { 1307 ASSEMBLER_TEST_GENERATE(Muld, assembler) {
1349 __ LoadImmediate(D0, 6.0); 1308 __ LoadImmediate(D0, 6.0);
1350 __ LoadImmediate(D1, 7.0); 1309 __ LoadImmediate(D1, 7.0);
1351 __ muld(D2, D0, D1); 1310 __ muld(D0, D0, D1);
1352 __ mfc1(V0, F4);
1353 __ mfc1(V1, F5);
1354 __ Ret(); 1311 __ Ret();
1355 } 1312 }
1356 1313
1357 1314
1358 ASSEMBLER_TEST_RUN(Muld, test) { 1315 ASSEMBLER_TEST_RUN(Muld, test) {
1359 typedef double (*SimpleCode)(); 1316 typedef double (*SimpleCode)();
1360 EXPECT(test != NULL); 1317 EXPECT(test != NULL);
1361 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1318 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1362 EXPECT_FLOAT_EQ(42.0, res, 0.001); 1319 EXPECT_FLOAT_EQ(42.0, res, 0.001);
1363 } 1320 }
1364 1321
1365 1322
1366 ASSEMBLER_TEST_GENERATE(Divd, assembler) { 1323 ASSEMBLER_TEST_GENERATE(Divd, assembler) {
1367 __ LoadImmediate(D0, 42.0); 1324 __ LoadImmediate(D0, 42.0);
1368 __ LoadImmediate(D1, 7.0); 1325 __ LoadImmediate(D1, 7.0);
1369 __ divd(D2, D0, D1); 1326 __ divd(D0, D0, D1);
1370 __ mfc1(V0, F4);
1371 __ mfc1(V1, F5);
1372 __ Ret(); 1327 __ Ret();
1373 } 1328 }
1374 1329
1375 1330
1376 ASSEMBLER_TEST_RUN(Divd, test) { 1331 ASSEMBLER_TEST_RUN(Divd, test) {
1377 typedef double (*SimpleCode)(); 1332 typedef double (*SimpleCode)();
1378 EXPECT(test != NULL); 1333 EXPECT(test != NULL);
1379 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1334 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1380 EXPECT_FLOAT_EQ(6.0, res, 0.001); 1335 EXPECT_FLOAT_EQ(6.0, res, 0.001);
1381 } 1336 }
1382 1337
1383 1338
1384 ASSEMBLER_TEST_GENERATE(Sqrtd, assembler) { 1339 ASSEMBLER_TEST_GENERATE(Sqrtd, assembler) {
1385 __ LoadImmediate(D0, 36.0); 1340 __ LoadImmediate(D1, 36.0);
1386 __ sqrtd(D2, D0); 1341 __ sqrtd(D0, D1);
1387 __ mfc1(V0, F4);
1388 __ mfc1(V1, F5);
1389 __ Ret(); 1342 __ Ret();
1390 } 1343 }
1391 1344
1392 1345
1393 ASSEMBLER_TEST_RUN(Sqrtd, test) { 1346 ASSEMBLER_TEST_RUN(Sqrtd, test) {
1394 typedef double (*SimpleCode)(); 1347 typedef double (*SimpleCode)();
1395 EXPECT(test != NULL); 1348 EXPECT(test != NULL);
1396 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1349 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1397 EXPECT_FLOAT_EQ(6.0, res, 0.001); 1350 EXPECT_FLOAT_EQ(6.0, res, 0.001);
1398 } 1351 }
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
1595 1548
1596 1549
1597 ASSEMBLER_TEST_RUN(Cop1COLE_not_taken, test) { 1550 ASSEMBLER_TEST_RUN(Cop1COLE_not_taken, test) {
1598 typedef int (*SimpleCode)(); 1551 typedef int (*SimpleCode)();
1599 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1552 EXPECT_EQ(0, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1600 } 1553 }
1601 1554
1602 1555
1603 ASSEMBLER_TEST_GENERATE(Cop1CvtDW, assembler) { 1556 ASSEMBLER_TEST_GENERATE(Cop1CvtDW, assembler) {
1604 __ LoadImmediate(T0, 42); 1557 __ LoadImmediate(T0, 42);
1605 __ mtc1(T0, F0); 1558 __ mtc1(T0, F2);
1606 __ cvtdw(D1, F0); 1559 __ cvtdw(D0, F2);
1607 __ mfc1(V0, F2);
1608 __ mfc1(V1, F3);
1609 __ Ret(); 1560 __ Ret();
1610 } 1561 }
1611 1562
1612 1563
1613 ASSEMBLER_TEST_RUN(Cop1CvtDW, test) { 1564 ASSEMBLER_TEST_RUN(Cop1CvtDW, test) {
1614 typedef double (*SimpleCode)(); 1565 typedef double (*SimpleCode)();
1615 EXPECT(test != NULL); 1566 EXPECT(test != NULL);
1616 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1567 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1617 EXPECT_FLOAT_EQ(42.0, res, 0.001); 1568 EXPECT_FLOAT_EQ(42.0, res, 0.001);
1618 } 1569 }
1619 1570
1620 1571
1621 ASSEMBLER_TEST_GENERATE(Cop1CvtDW_neg, assembler) { 1572 ASSEMBLER_TEST_GENERATE(Cop1CvtDW_neg, assembler) {
1622 __ LoadImmediate(T0, -42); 1573 __ LoadImmediate(T0, -42);
1623 __ mtc1(T0, F0); 1574 __ mtc1(T0, F2);
1624 __ cvtdw(D1, F0); 1575 __ cvtdw(D0, F2);
1625 __ mfc1(V0, F2);
1626 __ mfc1(V1, F3);
1627 __ Ret(); 1576 __ Ret();
1628 } 1577 }
1629 1578
1630 1579
1631 ASSEMBLER_TEST_RUN(Cop1CvtDW_neg, test) { 1580 ASSEMBLER_TEST_RUN(Cop1CvtDW_neg, test) {
1632 typedef double (*SimpleCode)(); 1581 typedef double (*SimpleCode)();
1633 EXPECT(test != NULL); 1582 EXPECT(test != NULL);
1634 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1583 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1635 EXPECT_FLOAT_EQ(-42.0, res, 0.001); 1584 EXPECT_FLOAT_EQ(-42.0, res, 0.001);
1636 } 1585 }
1637 1586
1638 1587
1639 ASSEMBLER_TEST_GENERATE(Cop1CvtDL, assembler) { 1588 ASSEMBLER_TEST_GENERATE(Cop1CvtDL, assembler) {
1640 __ LoadImmediate(T0, 0x1); 1589 __ LoadImmediate(T0, 0x1);
1641 __ mtc1(ZR, F0); 1590 __ mtc1(ZR, F2);
1642 __ mtc1(T0, F1); // D0 <- 0x100000000 = 4294967296 1591 __ mtc1(T0, F3); // D0 <- 0x100000000 = 4294967296
1643 __ cvtdl(D1, D0); 1592 __ cvtdl(D0, D1);
1644 __ mfc1(V0, F2);
1645 __ mfc1(V1, F3);
1646 __ Ret(); 1593 __ Ret();
1647 } 1594 }
1648 1595
1649 1596
1650 ASSEMBLER_TEST_RUN(Cop1CvtDL, test) { 1597 ASSEMBLER_TEST_RUN(Cop1CvtDL, test) {
1651 typedef double (*SimpleCode)(); 1598 typedef double (*SimpleCode)();
1652 EXPECT(test != NULL); 1599 EXPECT(test != NULL);
1653 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1600 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1654 EXPECT_FLOAT_EQ(4294967296.0, res, 0.001); 1601 EXPECT_FLOAT_EQ(4294967296.0, res, 0.001);
1655 } 1602 }
1656 1603
1657 1604
1658 ASSEMBLER_TEST_GENERATE(Cop1CvtDL_neg, assembler) { 1605 ASSEMBLER_TEST_GENERATE(Cop1CvtDL_neg, assembler) {
1659 __ LoadImmediate(T0, 0xffffffff); 1606 __ LoadImmediate(T0, 0xffffffff);
1660 __ mtc1(T0, F0); 1607 __ mtc1(T0, F2);
1661 __ mtc1(T0, F1); // D0 <- 0xffffffffffffffff = -1 1608 __ mtc1(T0, F3); // D0 <- 0xffffffffffffffff = -1
1662 __ cvtdl(D1, D0); 1609 __ cvtdl(D0, D1);;
1663 __ mfc1(V0, F2);
1664 __ mfc1(V1, F3);
1665 __ Ret(); 1610 __ Ret();
1666 } 1611 }
1667 1612
1668 1613
1669 ASSEMBLER_TEST_RUN(Cop1CvtDL_neg, test) { 1614 ASSEMBLER_TEST_RUN(Cop1CvtDL_neg, test) {
1670 typedef double (*SimpleCode)(); 1615 typedef double (*SimpleCode)();
1671 EXPECT(test != NULL); 1616 EXPECT(test != NULL);
1672 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry()); 1617 double res = EXECUTE_TEST_CODE_DOUBLE(SimpleCode, test->entry());
1673 EXPECT_FLOAT_EQ(-1.0, res, 0.001); 1618 EXPECT_FLOAT_EQ(-1.0, res, 0.001);
1674 } 1619 }
1675 1620
1676 1621
1677 ASSEMBLER_TEST_GENERATE(Cop1CvtWD, assembler) { 1622 ASSEMBLER_TEST_GENERATE(Cop1CvtWD, assembler) {
1678 __ LoadImmediate(D0, 42.0); 1623 __ LoadImmediate(D1, 42.0);
1679 __ cvtwd(F2, D0); 1624 __ cvtwd(F0, D1);
1680 __ mfc1(V0, F2); 1625 __ mfc1(V0, F0);
1681 __ Ret(); 1626 __ Ret();
1682 } 1627 }
1683 1628
1684 1629
1685 ASSEMBLER_TEST_RUN(Cop1CvtWD, test) { 1630 ASSEMBLER_TEST_RUN(Cop1CvtWD, test) {
1686 typedef double (*SimpleCode)(); 1631 typedef int (*SimpleCode)();
1687 EXPECT(test != NULL); 1632 EXPECT(test != NULL);
1688 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1633 EXPECT_EQ(42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1689 } 1634 }
1690 1635
1691 1636
1692 ASSEMBLER_TEST_GENERATE(Cop1CvtWD_neg, assembler) { 1637 ASSEMBLER_TEST_GENERATE(Cop1CvtWD_neg, assembler) {
1693 __ LoadImmediate(D0, -42.0); 1638 __ LoadImmediate(D1, -42.0);
1694 __ cvtwd(F2, D0); 1639 __ cvtwd(F0, D1);
1695 __ mfc1(V0, F2); 1640 __ mfc1(V0, F0);
1696 __ Ret(); 1641 __ Ret();
1697 } 1642 }
1698 1643
1699 1644
1700 ASSEMBLER_TEST_RUN(Cop1CvtWD_neg, test) { 1645 ASSEMBLER_TEST_RUN(Cop1CvtWD_neg, test) {
1701 typedef double (*SimpleCode)(); 1646 typedef int (*SimpleCode)();
1702 EXPECT(test != NULL); 1647 EXPECT(test != NULL);
1703 EXPECT_EQ(-42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry())); 1648 EXPECT_EQ(-42, EXECUTE_TEST_CODE_INT32(SimpleCode, test->entry()));
1704 } 1649 }
1705 1650
1706 1651
1707 // Called from assembler_test.cc. 1652 // Called from assembler_test.cc.
1708 // RA: return address. 1653 // RA: return address.
1709 // A0: context. 1654 // A0: context.
1710 // A1: value. 1655 // A1: value.
1711 // A2: growable array. 1656 // A2: growable array.
1712 ASSEMBLER_TEST_GENERATE(StoreIntoObject, assembler) { 1657 ASSEMBLER_TEST_GENERATE(StoreIntoObject, assembler) {
1713 __ addiu(SP, SP, Immediate(-2 * kWordSize)); 1658 __ addiu(SP, SP, Immediate(-2 * kWordSize));
1714 __ sw(CTX, Address(SP, 1 * kWordSize)); 1659 __ sw(CTX, Address(SP, 1 * kWordSize));
1715 __ sw(RA, Address(SP, 0 * kWordSize)); 1660 __ sw(RA, Address(SP, 0 * kWordSize));
1716 1661
1717 __ mov(CTX, A0); 1662 __ mov(CTX, A0);
1718 __ StoreIntoObject(A2, 1663 __ StoreIntoObject(A2,
1719 FieldAddress(A2, GrowableObjectArray::data_offset()), 1664 FieldAddress(A2, GrowableObjectArray::data_offset()),
1720 A1); 1665 A1);
1721 __ lw(RA, Address(SP, 0 * kWordSize)); 1666 __ lw(RA, Address(SP, 0 * kWordSize));
1722 __ lw(CTX, Address(SP, 1 * kWordSize)); 1667 __ lw(CTX, Address(SP, 1 * kWordSize));
1723 __ addiu(SP, SP, Immediate(2 * kWordSize)); 1668 __ addiu(SP, SP, Immediate(2 * kWordSize));
1724 __ Ret(); 1669 __ Ret();
1725 } 1670 }
1726 1671
1727 } // namespace dart 1672 } // namespace dart
1728 1673
1729 #endif // defined TARGET_ARCH_MIPS 1674 #endif // defined TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/constants_mips.h » ('j') | runtime/vm/simulator_mips.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698