aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven J. Hill <sjhill@mips.com>2012-12-06 22:53:52 -0500
committerJohn Crispin <blogic@openwrt.org>2013-02-16 18:15:24 -0500
commit4cb764b4541fe9eacc237b6851198a4c8497b9c4 (patch)
treedfe2c8bebfdb382ed7f380e3ee99335b9df6772b
parentd0c1b478e0b2f0bcbb2a58db6bc5e13354068064 (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.h231
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) \
1438do { \
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) \
1451do { \ 1333do { \
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)
1464do { \ 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))
1477do { \ 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)
1490do { \ 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)
1503do { \ 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)
1516do { \ 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)
1529do { \ 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