@@ -1359,7 +1359,8 @@ void X86AsmPrinter::emitAsanMemaccessPartial(Module &M, unsigned Reg,
1359
1359
MCSubtargetInfo &STI) {
1360
1360
assert (AccessInfo.AccessSizeIndex == 0 || AccessInfo.AccessSizeIndex == 1 ||
1361
1361
AccessInfo.AccessSizeIndex == 2 );
1362
- assert (Reg != X86::R8);
1362
+ assert (Reg != X86::R10);
1363
+ assert (Reg != X86::R11);
1363
1364
1364
1365
uint64_t ShadowBase;
1365
1366
int MappingScale;
@@ -1368,41 +1369,42 @@ void X86AsmPrinter::emitAsanMemaccessPartial(Module &M, unsigned Reg,
1368
1369
Triple (M.getTargetTriple ()), M.getDataLayout ().getPointerSizeInBits (),
1369
1370
AccessInfo.CompileKernel , &ShadowBase, &MappingScale, &OrShadowOffset);
1370
1371
1371
- OutStreamer->emitInstruction (
1372
- MCInstBuilder (X86::MOV64rr).addReg (X86::R8).addReg (X86::NoRegister + Reg),
1373
- STI);
1372
+ OutStreamer->emitInstruction (MCInstBuilder (X86::MOV64rr)
1373
+ .addReg (X86::R10)
1374
+ .addReg (X86::NoRegister + Reg),
1375
+ STI);
1374
1376
OutStreamer->emitInstruction (MCInstBuilder (X86::SHR64ri)
1375
- .addReg (X86::R8 )
1376
- .addReg (X86::R8 )
1377
+ .addReg (X86::R10 )
1378
+ .addReg (X86::R10 )
1377
1379
.addImm (MappingScale),
1378
1380
STI);
1379
1381
if (OrShadowOffset) {
1380
1382
OutStreamer->emitInstruction (MCInstBuilder (X86::OR64ri32)
1381
- .addReg (X86::R8 )
1382
- .addReg (X86::R8 )
1383
+ .addReg (X86::R10 )
1384
+ .addReg (X86::R10 )
1383
1385
.addImm (ShadowBase),
1384
1386
STI);
1385
1387
OutStreamer->emitInstruction (MCInstBuilder (X86::MOV8rm)
1386
- .addReg (X86::R8B )
1387
- .addReg (X86::R8 )
1388
+ .addReg (X86::R10B )
1389
+ .addReg (X86::R10 )
1388
1390
.addImm (1 )
1389
1391
.addReg (X86::NoRegister)
1390
1392
.addImm (0 )
1391
1393
.addReg (X86::NoRegister),
1392
1394
STI);
1393
1395
OutStreamer->emitInstruction (
1394
- MCInstBuilder (X86::TEST8rr).addReg (X86::R8B ).addReg (X86::R8B ), STI);
1396
+ MCInstBuilder (X86::TEST8rr).addReg (X86::R10B ).addReg (X86::R10B ), STI);
1395
1397
} else {
1396
1398
OutStreamer->emitInstruction (MCInstBuilder (X86::MOVSX32rm8)
1397
- .addReg (X86::R8D )
1398
- .addReg (X86::R8 )
1399
+ .addReg (X86::R10D )
1400
+ .addReg (X86::R10 )
1399
1401
.addImm (1 )
1400
1402
.addReg (X86::NoRegister)
1401
1403
.addImm (ShadowBase)
1402
1404
.addReg (X86::NoRegister),
1403
1405
STI);
1404
1406
OutStreamer->emitInstruction (
1405
- MCInstBuilder (X86::TEST32rr).addReg (X86::R8D ).addReg (X86::R8D ), STI);
1407
+ MCInstBuilder (X86::TEST32rr).addReg (X86::R10D ).addReg (X86::R10D ), STI);
1406
1408
}
1407
1409
MCSymbol *AdditionalCheck = OutContext.createTempSymbol ();
1408
1410
OutStreamer->emitInstruction (
@@ -1416,37 +1418,33 @@ void X86AsmPrinter::emitAsanMemaccessPartial(Module &M, unsigned Reg,
1416
1418
1417
1419
// Shadow byte is non-zero so we need to perform additional checks.
1418
1420
OutStreamer->emitLabel (AdditionalCheck);
1419
- OutStreamer->emitInstruction (MCInstBuilder (X86::PUSH64r).addReg (X86::RCX),
1420
- STI);
1421
1421
OutStreamer->emitInstruction (MCInstBuilder (X86::MOV64rr)
1422
- .addReg (X86::RCX )
1422
+ .addReg (X86::R11 )
1423
1423
.addReg (X86::NoRegister + Reg),
1424
1424
STI);
1425
1425
const size_t Granularity = 1ULL << MappingScale;
1426
1426
OutStreamer->emitInstruction (MCInstBuilder (X86::AND32ri8)
1427
1427
.addReg (X86::NoRegister)
1428
- .addReg (X86::ECX )
1428
+ .addReg (X86::R11D )
1429
1429
.addImm (Granularity - 1 ),
1430
1430
STI);
1431
1431
if (AccessInfo.AccessSizeIndex == 1 ) {
1432
1432
OutStreamer->emitInstruction (MCInstBuilder (X86::ADD32ri8)
1433
1433
.addReg (X86::NoRegister)
1434
- .addReg (X86::ECX )
1434
+ .addReg (X86::R11D )
1435
1435
.addImm (1 ),
1436
1436
STI);
1437
1437
} else if (AccessInfo.AccessSizeIndex == 2 ) {
1438
1438
OutStreamer->emitInstruction (MCInstBuilder (X86::ADD32ri8)
1439
1439
.addReg (X86::NoRegister)
1440
- .addReg (X86::ECX )
1440
+ .addReg (X86::R11D )
1441
1441
.addImm (3 ),
1442
1442
STI);
1443
1443
}
1444
1444
1445
1445
OutStreamer->emitInstruction (
1446
- MCInstBuilder (X86::CMP32rr).addReg (X86::ECX ).addReg (X86::R8D ).addImm (1 ),
1446
+ MCInstBuilder (X86::CMP32rr).addReg (X86::R11D ).addReg (X86::R10D ).addImm (1 ),
1447
1447
STI);
1448
- OutStreamer->emitInstruction (MCInstBuilder (X86::POP64r).addReg (X86::RCX),
1449
- STI);
1450
1448
OutStreamer->emitInstruction (
1451
1449
MCInstBuilder (X86::JCC_1)
1452
1450
.addExpr (MCSymbolRefExpr::create (ReturnSym, OutContext))
@@ -1460,7 +1458,8 @@ void X86AsmPrinter::emitAsanMemaccessFull(Module &M, unsigned Reg,
1460
1458
const ASanAccessInfo &AccessInfo,
1461
1459
MCSubtargetInfo &STI) {
1462
1460
assert (AccessInfo.AccessSizeIndex == 3 || AccessInfo.AccessSizeIndex == 4 );
1463
- assert (Reg != X86::R8);
1461
+ assert (Reg != X86::R10);
1462
+ assert (Reg != X86::R11);
1464
1463
1465
1464
uint64_t ShadowBase;
1466
1465
int MappingScale;
@@ -1469,23 +1468,24 @@ void X86AsmPrinter::emitAsanMemaccessFull(Module &M, unsigned Reg,
1469
1468
Triple (M.getTargetTriple ()), M.getDataLayout ().getPointerSizeInBits (),
1470
1469
AccessInfo.CompileKernel , &ShadowBase, &MappingScale, &OrShadowOffset);
1471
1470
1472
- OutStreamer->emitInstruction (
1473
- MCInstBuilder (X86::MOV64rr).addReg (X86::R8).addReg (X86::NoRegister + Reg),
1474
- STI);
1471
+ OutStreamer->emitInstruction (MCInstBuilder (X86::MOV64rr)
1472
+ .addReg (X86::R10)
1473
+ .addReg (X86::NoRegister + Reg),
1474
+ STI);
1475
1475
OutStreamer->emitInstruction (MCInstBuilder (X86::SHR64ri)
1476
- .addReg (X86::R8 )
1477
- .addReg (X86::R8 )
1476
+ .addReg (X86::R10 )
1477
+ .addReg (X86::R10 )
1478
1478
.addImm (MappingScale),
1479
1479
STI);
1480
1480
if (OrShadowOffset) {
1481
1481
OutStreamer->emitInstruction (MCInstBuilder (X86::OR64ri32)
1482
- .addReg (X86::R8 )
1483
- .addReg (X86::R8 )
1482
+ .addReg (X86::R10 )
1483
+ .addReg (X86::R10 )
1484
1484
.addImm (ShadowBase),
1485
1485
STI);
1486
1486
auto OpCode = AccessInfo.AccessSizeIndex == 3 ? X86::CMP8mi : X86::CMP16mi8;
1487
1487
OutStreamer->emitInstruction (MCInstBuilder (OpCode)
1488
- .addReg (X86::R8 )
1488
+ .addReg (X86::R10 )
1489
1489
.addImm (1 )
1490
1490
.addReg (X86::NoRegister)
1491
1491
.addImm (0 )
@@ -1495,7 +1495,7 @@ void X86AsmPrinter::emitAsanMemaccessFull(Module &M, unsigned Reg,
1495
1495
} else {
1496
1496
auto OpCode = AccessInfo.AccessSizeIndex == 3 ? X86::CMP8mi : X86::CMP16mi8;
1497
1497
OutStreamer->emitInstruction (MCInstBuilder (OpCode)
1498
- .addReg (X86::R8 )
1498
+ .addReg (X86::R10 )
1499
1499
.addImm (1 )
1500
1500
.addReg (X86::NoRegister)
1501
1501
.addImm (ShadowBase)
0 commit comments