@@ -1349,9 +1349,12 @@ RVOP(
1349
1349
RVOP (
1350
1350
amoswapw ,
1351
1351
{
1352
+ const uint32_t addr = rv -> X [ir -> rs1 ];
1353
+ const uint32_t value1 = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1354
+ const uint32_t value2 = rv -> X [ir -> rs2 ];
1352
1355
if (ir -> rd )
1353
- rv -> X [ir -> rd ] = rv -> io . mem_read_w ( rv -> X [ ir -> rs1 ]) ;
1354
- rv -> io .mem_write_w (rv -> X [ ir -> rs1 ], rv -> X [ ir -> rs2 ] );
1356
+ rv -> X [ir -> rd ] = value1 ;
1357
+ rv -> io .mem_write_w (addr , value2 );
1355
1358
},
1356
1359
GEN ({
1357
1360
assert ; /* FIXME: Implement */
@@ -1361,10 +1364,13 @@ RVOP(
1361
1364
RVOP (
1362
1365
amoaddw ,
1363
1366
{
1367
+ const uint32_t addr = rv -> X [ir -> rs1 ];
1368
+ const uint32_t value1 = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1369
+ const uint32_t value2 = rv -> X [ir -> rs2 ];
1364
1370
if (ir -> rd )
1365
- rv -> X [ir -> rd ] = rv -> io . mem_read_w ( rv -> X [ ir -> rs1 ]) ;
1366
- const uint32_t res = rv -> X [ ir -> rd ] + rv -> X [ ir -> rs2 ] ;
1367
- rv -> io .mem_write_w (rv -> X [ ir -> rs1 ] , res );
1371
+ rv -> X [ir -> rd ] = value1 ;
1372
+ const uint32_t res = value1 + value2 ;
1373
+ rv -> io .mem_write_w (addr , res );
1368
1374
},
1369
1375
GEN ({
1370
1376
assert ; /* FIXME: Implement */
@@ -1374,10 +1380,13 @@ RVOP(
1374
1380
RVOP (
1375
1381
amoxorw ,
1376
1382
{
1383
+ const uint32_t addr = rv -> X [ir -> rs1 ];
1384
+ const uint32_t value1 = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1385
+ const uint32_t value2 = rv -> X [ir -> rs2 ];
1377
1386
if (ir -> rd )
1378
- rv -> X [ir -> rd ] = rv -> io . mem_read_w ( rv -> X [ ir -> rs1 ]) ;
1379
- const uint32_t res = rv -> X [ ir -> rd ] ^ rv -> X [ ir -> rs2 ] ;
1380
- rv -> io .mem_write_w (rv -> X [ ir -> rs1 ] , res );
1387
+ rv -> X [ir -> rd ] = value1 ;
1388
+ const uint32_t res = value1 ^ value2 ;
1389
+ rv -> io .mem_write_w (addr , res );
1381
1390
},
1382
1391
GEN ({
1383
1392
assert ; /* FIXME: Implement */
@@ -1387,10 +1396,13 @@ RVOP(
1387
1396
RVOP (
1388
1397
amoandw ,
1389
1398
{
1399
+ const uint32_t addr = rv -> X [ir -> rs1 ];
1400
+ const uint32_t value1 = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1401
+ const uint32_t value2 = rv -> X [ir -> rs2 ];
1390
1402
if (ir -> rd )
1391
- rv -> X [ir -> rd ] = rv -> io . mem_read_w ( rv -> X [ ir -> rs1 ]) ;
1392
- const uint32_t res = rv -> X [ ir -> rd ] & rv -> X [ ir -> rs2 ] ;
1393
- rv -> io .mem_write_w (rv -> X [ ir -> rs1 ] , res );
1403
+ rv -> X [ir -> rd ] = value1 ;
1404
+ const uint32_t res = value1 & value2 ;
1405
+ rv -> io .mem_write_w (addr , res );
1394
1406
},
1395
1407
GEN ({
1396
1408
assert ; /* FIXME: Implement */
@@ -1400,10 +1412,13 @@ RVOP(
1400
1412
RVOP (
1401
1413
amoorw ,
1402
1414
{
1415
+ const uint32_t addr = rv -> X [ir -> rs1 ];
1416
+ const uint32_t value1 = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1417
+ const uint32_t value2 = rv -> X [ir -> rs2 ];
1403
1418
if (ir -> rd )
1404
- rv -> X [ir -> rd ] = rv -> io . mem_read_w ( rv -> X [ ir -> rs1 ]) ;
1405
- const uint32_t res = rv -> X [ ir -> rd ] | rv -> X [ ir -> rs2 ] ;
1406
- rv -> io .mem_write_w (rv -> X [ ir -> rs1 ] , res );
1419
+ rv -> X [ir -> rd ] = value1 ;
1420
+ const uint32_t res = value1 | value2 ;
1421
+ rv -> io .mem_write_w (addr , res );
1407
1422
},
1408
1423
GEN ({
1409
1424
assert ; /* FIXME: Implement */
@@ -1413,12 +1428,15 @@ RVOP(
1413
1428
RVOP (
1414
1429
amominw ,
1415
1430
{
1431
+ const uint32_t addr = rv -> X [ir -> rs1 ];
1432
+ const uint32_t value1 = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1433
+ const uint32_t value2 = rv -> X [ir -> rs2 ];
1416
1434
if (ir -> rd )
1417
- rv -> X [ir -> rd ] = rv -> io . mem_read_w ( rv -> X [ ir -> rs1 ]) ;
1418
- const int32_t a = rv -> X [ ir -> rd ] ;
1419
- const int32_t b = rv -> X [ ir -> rs2 ] ;
1420
- const uint32_t res = a < b ? rv -> X [ ir -> rd ] : rv -> X [ ir -> rs2 ] ;
1421
- rv -> io .mem_write_w (rv -> X [ ir -> rs1 ] , res );
1435
+ rv -> X [ir -> rd ] = value1 ;
1436
+ const int32_t a = value1 ;
1437
+ const int32_t b = value2 ;
1438
+ const uint32_t res = a < b ? value1 : value2 ;
1439
+ rv -> io .mem_write_w (addr , res );
1422
1440
},
1423
1441
GEN ({
1424
1442
assert ; /* FIXME: Implement */
@@ -1428,12 +1446,15 @@ RVOP(
1428
1446
RVOP (
1429
1447
amomaxw ,
1430
1448
{
1449
+ const uint32_t addr = rv -> X [ir -> rs1 ];
1450
+ const uint32_t value1 = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1451
+ const uint32_t value2 = rv -> X [ir -> rs2 ];
1431
1452
if (ir -> rd )
1432
- rv -> X [ir -> rd ] = rv -> io . mem_read_w ( rv -> X [ ir -> rs1 ]) ;
1433
- const int32_t a = rv -> X [ ir -> rd ] ;
1434
- const int32_t b = rv -> X [ ir -> rs2 ] ;
1435
- const uint32_t res = a > b ? rv -> X [ ir -> rd ] : rv -> X [ ir -> rs2 ] ;
1436
- rv -> io .mem_write_w (rv -> X [ ir -> rs1 ] , res );
1453
+ rv -> X [ir -> rd ] = value1 ;
1454
+ const int32_t a = value1 ;
1455
+ const int32_t b = value2 ;
1456
+ const uint32_t res = a > b ? value1 : value2 ;
1457
+ rv -> io .mem_write_w (addr , res );
1437
1458
},
1438
1459
GEN ({
1439
1460
assert ; /* FIXME: Implement */
@@ -1443,11 +1464,13 @@ RVOP(
1443
1464
RVOP (
1444
1465
amominuw ,
1445
1466
{
1467
+ const uint32_t addr = rv -> X [ir -> rs1 ];
1468
+ const uint32_t value1 = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1469
+ const uint32_t value2 = rv -> X [ir -> rs2 ];
1446
1470
if (ir -> rd )
1447
- rv -> X [ir -> rd ] = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1448
- const uint32_t ures =
1449
- rv -> X [ir -> rd ] < rv -> X [ir -> rs2 ] ? rv -> X [ir -> rd ] : rv -> X [ir -> rs2 ];
1450
- rv -> io .mem_write_w (rv -> X [ir -> rs1 ], ures );
1471
+ rv -> X [ir -> rd ] = value1 ;
1472
+ const uint32_t ures = value1 < value2 ? value1 : value2 ;
1473
+ rv -> io .mem_write_w (addr , ures );
1451
1474
},
1452
1475
GEN ({
1453
1476
assert ; /* FIXME: Implement */
@@ -1457,11 +1480,13 @@ RVOP(
1457
1480
RVOP (
1458
1481
amomaxuw ,
1459
1482
{
1483
+ const uint32_t addr = rv -> X [ir -> rs1 ];
1484
+ const uint32_t value1 = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1485
+ const uint32_t value2 = rv -> X [ir -> rs2 ];
1460
1486
if (ir -> rd )
1461
- rv -> X [ir -> rd ] = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1462
- const uint32_t ures =
1463
- rv -> X [ir -> rd ] > rv -> X [ir -> rs2 ] ? rv -> X [ir -> rd ] : rv -> X [ir -> rs2 ];
1464
- rv -> io .mem_write_w (rv -> X [ir -> rs1 ], ures );
1487
+ rv -> X [ir -> rd ] = value1 ;
1488
+ const uint32_t ures = value1 > value2 ? value1 : value2 ;
1489
+ rv -> io .mem_write_w (addr , ures );
1465
1490
},
1466
1491
GEN ({
1467
1492
assert ; /* FIXME: Implement */
0 commit comments