diff options
Diffstat (limited to 'arch/mips')
| -rw-r--r-- | arch/mips/include/asm/mipsregs.h | 231 |
1 files changed, 30 insertions, 201 deletions
diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h index 24417de673c5..9f47cda632ab 100644 --- a/arch/mips/include/asm/mipsregs.h +++ b/arch/mips/include/asm/mipsregs.h | |||
| @@ -1314,229 +1314,58 @@ do { \ | |||
| 1314 | : "r" (val), "i" (mask)); \ | 1314 | : "r" (val), "i" (mask)); \ |
| 1315 | } while (0) | 1315 | } while (0) |
| 1316 | 1316 | ||
| 1317 | #define mfhi0() \ | 1317 | #define _dsp_mfxxx(ins) \ |
| 1318 | ({ \ | 1318 | ({ \ |
| 1319 | unsigned long __treg; \ | 1319 | unsigned long __treg; \ |
| 1320 | \ | 1320 | \ |
| 1321 | __asm__ __volatile__( \ | 1321 | __asm__ __volatile__( \ |
| 1322 | " .set push \n" \ | ||
| 1323 | " .set noat \n" \ | ||
| 1324 | " # mfhi %0, $ac0 \n" \ | ||
| 1325 | " .word 0x00000810 \n" \ | ||
| 1326 | " move %0, $1 \n" \ | ||
| 1327 | " .set pop \n" \ | ||
| 1328 | : "=r" (__treg)); \ | ||
| 1329 | __treg; \ | ||
| 1330 | }) | ||
| 1331 | |||
| 1332 | #define mfhi1() \ | ||
| 1333 | ({ \ | ||
| 1334 | unsigned long __treg; \ | ||
| 1335 | \ | ||
| 1336 | __asm__ __volatile__( \ | ||
| 1337 | " .set push \n" \ | ||
| 1338 | " .set noat \n" \ | ||
| 1339 | " # mfhi %0, $ac1 \n" \ | ||
| 1340 | " .word 0x00200810 \n" \ | ||
| 1341 | " move %0, $1 \n" \ | ||
| 1342 | " .set pop \n" \ | ||
| 1343 | : "=r" (__treg)); \ | ||
| 1344 | __treg; \ | ||
| 1345 | }) | ||
| 1346 | |||
| 1347 | #define mfhi2() \ | ||
| 1348 | ({ \ | ||
| 1349 | unsigned long __treg; \ | ||
| 1350 | \ | ||
| 1351 | __asm__ __volatile__( \ | ||
| 1352 | " .set push \n" \ | ||
| 1353 | " .set noat \n" \ | ||
| 1354 | " # mfhi %0, $ac2 \n" \ | ||
| 1355 | " .word 0x00400810 \n" \ | ||
| 1356 | " move %0, $1 \n" \ | ||
| 1357 | " .set pop \n" \ | ||
| 1358 | : "=r" (__treg)); \ | ||
| 1359 | __treg; \ | ||
| 1360 | }) | ||
| 1361 | |||
| 1362 | #define mfhi3() \ | ||
| 1363 | ({ \ | ||
| 1364 | unsigned long __treg; \ | ||
| 1365 | \ | ||
| 1366 | __asm__ __volatile__( \ | ||
| 1367 | " .set push \n" \ | ||
| 1368 | " .set noat \n" \ | ||
| 1369 | " # mfhi %0, $ac3 \n" \ | ||
| 1370 | " .word 0x00600810 \n" \ | ||
| 1371 | " move %0, $1 \n" \ | ||
| 1372 | " .set pop \n" \ | ||
| 1373 | : "=r" (__treg)); \ | ||
| 1374 | __treg; \ | ||
| 1375 | }) | ||
| 1376 | |||
| 1377 | #define mflo0() \ | ||
| 1378 | ({ \ | ||
| 1379 | unsigned long __treg; \ | ||
| 1380 | \ | ||
| 1381 | __asm__ __volatile__( \ | ||
| 1382 | " .set push \n" \ | ||
| 1383 | " .set noat \n" \ | ||
| 1384 | " # mflo %0, $ac0 \n" \ | ||
| 1385 | " .word 0x00000812 \n" \ | ||
| 1386 | " move %0, $1 \n" \ | ||
| 1387 | " .set pop \n" \ | ||
| 1388 | : "=r" (__treg)); \ | ||
| 1389 | __treg; \ | ||
| 1390 | }) | ||
| 1391 | |||
| 1392 | #define mflo1() \ | ||
| 1393 | ({ \ | ||
| 1394 | unsigned long __treg; \ | ||
| 1395 | \ | ||
| 1396 | __asm__ __volatile__( \ | ||
| 1397 | " .set push \n" \ | ||
| 1398 | " .set noat \n" \ | ||
| 1399 | " # mflo %0, $ac1 \n" \ | ||
| 1400 | " .word 0x00200812 \n" \ | ||
| 1401 | " move %0, $1 \n" \ | ||
| 1402 | " .set pop \n" \ | ||
| 1403 | : "=r" (__treg)); \ | ||
| 1404 | __treg; \ | ||
| 1405 | }) | ||
| 1406 | |||
| 1407 | #define mflo2() \ | ||
| 1408 | ({ \ | ||
| 1409 | unsigned long __treg; \ | ||
| 1410 | \ | ||
| 1411 | __asm__ __volatile__( \ | ||
| 1412 | " .set push \n" \ | ||
| 1413 | " .set noat \n" \ | ||
| 1414 | " # mflo %0, $ac2 \n" \ | ||
| 1415 | " .word 0x00400812 \n" \ | ||
| 1416 | " move %0, $1 \n" \ | ||
| 1417 | " .set pop \n" \ | ||
| 1418 | : "=r" (__treg)); \ | ||
| 1419 | __treg; \ | ||
| 1420 | }) | ||
| 1421 | |||
| 1422 | #define mflo3() \ | ||
| 1423 | ({ \ | ||
| 1424 | unsigned long __treg; \ | ||
| 1425 | \ | ||
| 1426 | __asm__ __volatile__( \ | ||
| 1427 | " .set push \n" \ | ||
| 1428 | " .set noat \n" \ | ||
| 1429 | " # mflo %0, $ac3 \n" \ | ||
| 1430 | " .word 0x00600812 \n" \ | ||
| 1431 | " move %0, $1 \n" \ | ||
| 1432 | " .set pop \n" \ | ||
| 1433 | : "=r" (__treg)); \ | ||
| 1434 | __treg; \ | ||
| 1435 | }) | ||
| 1436 | |||
| 1437 | #define mthi0(x) \ | ||
| 1438 | do { \ | ||
| 1439 | __asm__ __volatile__( \ | ||
| 1440 | " .set push \n" \ | 1322 | " .set push \n" \ |
| 1441 | " .set noat \n" \ | 1323 | " .set noat \n" \ |
| 1442 | " move $1, %0 \n" \ | 1324 | " .word (0x00000810 | %1) \n" \ |
| 1443 | " # mthi $1, $ac0 \n" \ | 1325 | " move %0, $1 \n" \ |
| 1444 | " .word 0x00200011 \n" \ | ||
| 1445 | " .set pop \n" \ | 1326 | " .set pop \n" \ |
| 1446 | : \ | 1327 | : "=r" (__treg) \ |
| 1447 | : "r" (x)); \ | 1328 | : "i" (ins)); \ |
| 1448 | } while (0) | 1329 | __treg; \ |
| 1330 | }) | ||
| 1449 | 1331 | ||
| 1450 | #define mthi1(x) \ | 1332 | #define _dsp_mtxxx(val, ins) \ |
| 1451 | do { \ | 1333 | do { \ |
| 1452 | __asm__ __volatile__( \ | 1334 | __asm__ __volatile__( \ |
| 1453 | " .set push \n" \ | 1335 | " .set push \n" \ |
| 1454 | " .set noat \n" \ | 1336 | " .set noat \n" \ |
| 1455 | " move $1, %0 \n" \ | 1337 | " move $1, %0 \n" \ |
| 1456 | " # mthi $1, $ac1 \n" \ | 1338 | " .word (0x00200011 | %1) \n" \ |
| 1457 | " .word 0x00200811 \n" \ | ||
| 1458 | " .set pop \n" \ | 1339 | " .set pop \n" \ |
| 1459 | : \ | 1340 | : \ |
| 1460 | : "r" (x)); \ | 1341 | : "r" (val), "i" (ins)); \ |
| 1461 | } while (0) | 1342 | } while (0) |
| 1462 | 1343 | ||
| 1463 | #define mthi2(x) \ | 1344 | #define _dsp_mflo(reg) _dsp_mfxxx((reg << 21) | 0x0002) |
| 1464 | do { \ | 1345 | #define _dsp_mfhi(reg) _dsp_mfxxx((reg << 21) | 0x0000) |
| 1465 | __asm__ __volatile__( \ | ||
| 1466 | " .set push \n" \ | ||
| 1467 | " .set noat \n" \ | ||
| 1468 | " move $1, %0 \n" \ | ||
| 1469 | " # mthi $1, $ac2 \n" \ | ||
| 1470 | " .word 0x00201011 \n" \ | ||
| 1471 | " .set pop \n" \ | ||
| 1472 | : \ | ||
| 1473 | : "r" (x)); \ | ||
| 1474 | } while (0) | ||
| 1475 | 1346 | ||
| 1476 | #define mthi3(x) \ | 1347 | #define _dsp_mtlo(val, reg) _dsp_mtxxx(val, ((reg << 11) | 0x0002)) |
| 1477 | do { \ | 1348 | #define _dsp_mthi(val, reg) _dsp_mtxxx(val, ((reg << 11) | 0x0000)) |
| 1478 | __asm__ __volatile__( \ | ||
| 1479 | " .set push \n" \ | ||
| 1480 | " .set noat \n" \ | ||
| 1481 | " move $1, %0 \n" \ | ||
| 1482 | " # mthi $1, $ac3 \n" \ | ||
| 1483 | " .word 0x00201811 \n" \ | ||
| 1484 | " .set pop \n" \ | ||
| 1485 | : \ | ||
| 1486 | : "r" (x)); \ | ||
| 1487 | } while (0) | ||
| 1488 | 1349 | ||
| 1489 | #define mtlo0(x) \ | 1350 | #define mflo0() _dsp_mflo(0) |
| 1490 | do { \ | 1351 | #define mflo1() _dsp_mflo(1) |
| 1491 | __asm__ __volatile__( \ | 1352 | #define mflo2() _dsp_mflo(2) |
| 1492 | " .set push \n" \ | 1353 | #define mflo3() _dsp_mflo(3) |
| 1493 | " .set noat \n" \ | ||
| 1494 | " move $1, %0 \n" \ | ||
| 1495 | " # mtlo $1, $ac0 \n" \ | ||
| 1496 | " .word 0x00200013 \n" \ | ||
| 1497 | " .set pop \n" \ | ||
| 1498 | : \ | ||
| 1499 | : "r" (x)); \ | ||
| 1500 | } while (0) | ||
| 1501 | 1354 | ||
| 1502 | #define mtlo1(x) \ | 1355 | #define mfhi0() _dsp_mfhi(0) |
| 1503 | do { \ | 1356 | #define mfhi1() _dsp_mfhi(1) |
| 1504 | __asm__ __volatile__( \ | 1357 | #define mfhi2() _dsp_mfhi(2) |
| 1505 | " .set push \n" \ | 1358 | #define mfhi3() _dsp_mfhi(3) |
| 1506 | " .set noat \n" \ | ||
| 1507 | " move $1, %0 \n" \ | ||
| 1508 | " # mtlo $1, $ac1 \n" \ | ||
| 1509 | " .word 0x00200813 \n" \ | ||
| 1510 | " .set pop \n" \ | ||
| 1511 | : \ | ||
| 1512 | : "r" (x)); \ | ||
| 1513 | } while (0) | ||
| 1514 | 1359 | ||
| 1515 | #define mtlo2(x) \ | 1360 | #define mtlo0(x) _dsp_mtlo(x, 0) |
| 1516 | do { \ | 1361 | #define mtlo1(x) _dsp_mtlo(x, 1) |
| 1517 | __asm__ __volatile__( \ | 1362 | #define mtlo2(x) _dsp_mtlo(x, 2) |
| 1518 | " .set push \n" \ | 1363 | #define mtlo3(x) _dsp_mtlo(x, 3) |
| 1519 | " .set noat \n" \ | ||
| 1520 | " move $1, %0 \n" \ | ||
| 1521 | " # mtlo $1, $ac2 \n" \ | ||
| 1522 | " .word 0x00201013 \n" \ | ||
| 1523 | " .set pop \n" \ | ||
| 1524 | : \ | ||
| 1525 | : "r" (x)); \ | ||
| 1526 | } while (0) | ||
| 1527 | 1364 | ||
| 1528 | #define mtlo3(x) \ | 1365 | #define mthi0(x) _dsp_mthi(x, 0) |
| 1529 | do { \ | 1366 | #define mthi1(x) _dsp_mthi(x, 1) |
| 1530 | __asm__ __volatile__( \ | 1367 | #define mthi2(x) _dsp_mthi(x, 2) |
| 1531 | " .set push \n" \ | 1368 | #define mthi3(x) _dsp_mthi(x, 3) |
| 1532 | " .set noat \n" \ | ||
| 1533 | " move $1, %0 \n" \ | ||
| 1534 | " # mtlo $1, $ac3 \n" \ | ||
| 1535 | " .word 0x00201813 \n" \ | ||
| 1536 | " .set pop \n" \ | ||
| 1537 | : \ | ||
| 1538 | : "r" (x)); \ | ||
| 1539 | } while (0) | ||
| 1540 | 1369 | ||
| 1541 | #endif /* CONFIG_CPU_MICROMIPS */ | 1370 | #endif /* CONFIG_CPU_MICROMIPS */ |
| 1542 | #endif | 1371 | #endif |
