@@ -1320,7 +1320,8 @@ GEN({
1320
1320
RVOP (
1321
1321
lrw ,
1322
1322
{
1323
- rv -> X [ir -> rd ] = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1323
+ if (ir -> rd )
1324
+ rv -> X [ir -> rd ] = rv -> io .mem_read_w (rv -> X [ir -> rs1 ]);
1324
1325
/* skip registration of the 'reservation set'
1325
1326
* FIXME: uimplemented
1326
1327
*/
@@ -1347,7 +1348,8 @@ RVOP(
1347
1348
RVOP (
1348
1349
amoswapw ,
1349
1350
{
1350
- rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1351
+ if (ir -> rd )
1352
+ rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1351
1353
rv -> io .mem_write_s (ir -> rs1 , rv -> X [ir -> rs2 ]);
1352
1354
},
1353
1355
GEN ({
@@ -1358,7 +1360,8 @@ RVOP(
1358
1360
RVOP (
1359
1361
amoaddw ,
1360
1362
{
1361
- rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1363
+ if (ir -> rd )
1364
+ rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1362
1365
const int32_t res = (int32_t ) rv -> X [ir -> rd ] + (int32_t ) rv -> X [ir -> rs2 ];
1363
1366
rv -> io .mem_write_s (ir -> rs1 , res );
1364
1367
},
@@ -1370,7 +1373,8 @@ RVOP(
1370
1373
RVOP (
1371
1374
amoxorw ,
1372
1375
{
1373
- rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1376
+ if (ir -> rd )
1377
+ rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1374
1378
const int32_t res = rv -> X [ir -> rd ] ^ rv -> X [ir -> rs2 ];
1375
1379
rv -> io .mem_write_s (ir -> rs1 , res );
1376
1380
},
@@ -1382,7 +1386,8 @@ RVOP(
1382
1386
RVOP (
1383
1387
amoandw ,
1384
1388
{
1385
- rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1389
+ if (ir -> rd )
1390
+ rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1386
1391
const int32_t res = rv -> X [ir -> rd ] & rv -> X [ir -> rs2 ];
1387
1392
rv -> io .mem_write_s (ir -> rs1 , res );
1388
1393
},
@@ -1394,7 +1399,8 @@ RVOP(
1394
1399
RVOP (
1395
1400
amoorw ,
1396
1401
{
1397
- rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1402
+ if (ir -> rd )
1403
+ rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1398
1404
const int32_t res = rv -> X [ir -> rd ] | rv -> X [ir -> rs2 ];
1399
1405
rv -> io .mem_write_s (ir -> rs1 , res );
1400
1406
},
@@ -1406,7 +1412,8 @@ RVOP(
1406
1412
RVOP (
1407
1413
amominw ,
1408
1414
{
1409
- rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1415
+ if (ir -> rd )
1416
+ rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1410
1417
const int32_t a = rv -> X [ir -> rd ];
1411
1418
const int32_t b = rv -> X [ir -> rs2 ];
1412
1419
const uint32_t res = a < b ? rv -> X [ir -> rd ] : rv -> X [ir -> rs2 ];
@@ -1420,7 +1427,8 @@ RVOP(
1420
1427
RVOP (
1421
1428
amomaxw ,
1422
1429
{
1423
- rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1430
+ if (ir -> rd )
1431
+ rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1424
1432
const int32_t a = rv -> X [ir -> rd ];
1425
1433
const int32_t b = rv -> X [ir -> rs2 ];
1426
1434
const uint32_t res = a > b ? rv -> X [ir -> rd ] : rv -> X [ir -> rs2 ];
@@ -1434,7 +1442,8 @@ RVOP(
1434
1442
RVOP (
1435
1443
amominuw ,
1436
1444
{
1437
- rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1445
+ if (ir -> rd )
1446
+ rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1438
1447
const uint32_t ures =
1439
1448
rv -> X [ir -> rd ] < rv -> X [ir -> rs2 ] ? rv -> X [ir -> rd ] : rv -> X [ir -> rs2 ];
1440
1449
rv -> io .mem_write_s (ir -> rs1 , ures );
@@ -1447,7 +1456,8 @@ RVOP(
1447
1456
RVOP (
1448
1457
amomaxuw ,
1449
1458
{
1450
- rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1459
+ if (ir -> rd )
1460
+ rv -> X [ir -> rd ] = rv -> io .mem_read_w (ir -> rs1 );
1451
1461
const uint32_t ures =
1452
1462
rv -> X [ir -> rd ] > rv -> X [ir -> rs2 ] ? rv -> X [ir -> rd ] : rv -> X [ir -> rs2 ];
1453
1463
rv -> io .mem_write_s (ir -> rs1 , ures );
0 commit comments