diff options
author | Steven J. Hill <sjhill@mips.com> | 2012-12-06 22:53:52 -0500 |
---|---|---|
committer | John Crispin <blogic@openwrt.org> | 2013-02-16 18:15:24 -0500 |
commit | 4cb764b4541fe9eacc237b6851198a4c8497b9c4 (patch) | |
tree | dfe2c8bebfdb382ed7f380e3ee99335b9df6772b | |
parent | d0c1b478e0b2f0bcbb2a58db6bc5e13354068064 (diff) |
MIPS: dsp: Simplify the DSP macros.
Simplify the DSP macros for vanilla (non-microMIPS) kernels and
toolchains that do not support the DSP ASEs.
Signed-off-by: Steven J. Hill <sjhill@mips.com>
Patchwork: http://patchwork.linux-mips.org/patch/4687/
Signed-off-by: John Crispin <blogic@openwrt.org>
-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 |