Diff
checker
Texte
Texte
Images
Documents
Excel
Dossiers
Legal
Enterprise
Application de bureau
Prix
Se connecter
Télécharger Diffchecker Desktop
Comparer le texte
Trouver la différence entre deux fichiers texte
Outils
Historique
Éditeur live
Masquer les espaces
Cacher identiques
Sans retour à la ligne
Vue
Divisé
Unifié
Niveau de précision
Intelligent
Mot
Caractère
Styles de texte
Modifier l’apparence
Coloration syntaxique
Choisir la syntaxe
Ignorer
Transformer le texte
Aller au premier écart
Modifier l'entrée
Diffchecker Desktop
La façon la plus sécurisée d'utiliser Diffchecker. Obtenez l'application Diffchecker Desktop : vos diffs ne quittent jamais votre ordinateur !
Obtenir Desktop
Untitled Diff
Créé
il y a 4 ans
Le diff n'expire jamais
Effacer
Exporter
Partager
Expliquer
75 suppressions
Lignes
Total
Supprimé
Caractères
Total
Supprimé
Pour continuer à utiliser cette fonctionnalité, passez à
Diff
checker
Pro
Voir les prix
100 lignes
Copier tout
73 ajouts
Lignes
Total
Ajouté
Caractères
Total
Ajouté
Pour continuer à utiliser cette fonctionnalité, passez à
Diff
checker
Pro
Voir les prix
99 lignes
Copier tout
RefPosition *__fastcall LinearScan::BuildUse(
RefPosition *__fastcall LinearScan::BuildUse(
LinearScan *this,
LinearScan *this,
GenTree *operand,
GenTree *operand,
unsigned int candidates,
unsigned int candidates,
unsigned int multiRegIdx)
unsigned int multiRegIdx)
{
{
Copier
Copié
Copier
Copié
unsigned __int8 gtLIRFlags; //
di
unsigned __int8 gtLIRFlags; //
r14
GenTree *theTreeNode; //
r11
GenTree *theTreeNode; //
rdi
genTreeOps gtOper; // dl
genTreeOps gtOper; // dl
Copier
Copié
Copier
Copié
char v8; //
di
char v8; //
r14
Compiler *v1
0
; //
rsi
Compiler *v1
1
; //
r9
__int64 v1
1
; // rcx
__int64 v1
2
; // rcx
LclVarDsc *lvaTable; // r8
LclVarDsc *lvaTable; // r8
Copier
Copié
Copier
Copié
Interval *v1
3
; //
rbx
Interval *v1
4
; //
rsi
unsigned __int64 v1
4
; // rcx
unsigned __int64 v1
5
; // rcx
unsigned __int64 *v16; // r8
GenTreeFlags gtFlags; // r8d
Compiler *compiler; // r9
__int64 lvVarIndex; // r10
unsigned __int64 *currentLiveVars; // r8
unsigned __int64 *currentLiveVars; // r8
Copier
Copié
Copier
Copié
__int64 lvVarIndex; // rdx
GenTreeFlags gtFlags; // r8d
Compiler *compiler; // rsi
RefInfoListNode *m_head; // rdx
RefInfoListNode *m_head; // rdx
Copier
Copié
Copier
Copié
RefInfoListNode *v2
0
; // r8
RefInfoListNode *v2
2
; // r8
RefInfoListNode *m_next; // rax
RefInfoListNode *m_next; // rax
Interval **ref; // rax
Interval **ref; // rax
RefPosition *result; // rax
RefPosition *result; // rax
gtLIRFlags = operand->gtLIRFlags;
gtLIRFlags = operand->gtLIRFlags;
theTreeNode = operand;
theTreeNode = operand;
gtOper = operand->gtOper;
gtOper = operand->gtOper;
v8 = gtLIRFlags >> 2;
v8 = gtLIRFlags >> 2;
if ( (unsigned __int8)(gtOper - 2) > 4u
if ( (unsigned __int8)(gtOper - 2) > 4u
Copier
Copié
Copier
Copié
|| (v1
0
= this->compiler,
|| (v1
1
= this->compiler,
v1
1
= *(unsigned int *)&theTreeNode[1]._gtRegNum,
v1
2
= *(unsigned int *)&theTreeNode[1]._gtRegNum,
lvaTable = v1
0
->lvaTable,
lvaTable = v1
1
->lvaTable,
*((char *)&lvaTable[v1
1
] + 4) >= 0) )
*((char *)&lvaTable[v1
2
] + 4) >= 0) )
{
{
Copier
Copié
Copier
Copié
if ( ((gtOper - 3) & 0xFD)
=
= 0
&&
(theTreeNode->gtFlags & 0x2000000)
!= 0 )
if ( ((gtOper - 3) & 0xFD)
!
= 0
||
(theTreeNode->gtFlags & 0x2000000)
== 0 )
{
m_head = this->defList.m_head;
v22 = 0i64;
if ( !m_head )
LABEL_26:
noWayAssertBody();
while ( m_head->treeNode != theTreeNode || ((*((unsigned __int8 *)m_head->ref + 37) >> 1) & 3) != multiRegIdx )
{
v22 = m_head;
m_head = m_head->m_next;
if ( !m_head )
goto LABEL_26;
}
m_next = m_head->m_next;
if ( v22 )
v22->m_next = m_next;
else
this->defList.m_head = m_next;
if ( !m_next )
this->defList.m_tail = v22;
ref = (Interval **)m_head->ref;
theTreeNode = 0i64;
m_head->m_next = 0i64;
v14 = *ref;
m_head->m_next = this->listNodePool.m_freeList;
this->listNodePool.m_freeList = m_head;
}
else
{
{
compiler = this->compiler;
compiler = this->compiler;
lvVarIndex = compiler->lvaTable[multiRegIdx
lvVarIndex = compiler->lvaTable[multiRegIdx
+ compiler->lvaTable[*(unsigned int *)&theTreeNode[1]._gtRegNum].lvFieldLclStart].lvVarIndex;
+ compiler->lvaTable[*(unsigned int *)&theTreeNode[1]._gtRegNum].lvFieldLclStart].lvVarIndex;
Copier
Copié
Copier
Copié
v1
3
= this->localVarIntervals[lvVarIndex];
v1
4
= this->localVarIntervals[lvVarIndex];
gtFlags = theTreeNode->gtFlags;
gtFlags = theTreeNode->gtFlags;
Copier
Copié
Copier
Copié
if (
!
_bittest((const int *)>Flags, (unsigned __int8)(multiRegIdx + 26)) )
if (
_bittest((const int *)>Flags, (unsigned __int8)(multiRegIdx + 26)) )
goto LABEL_23;
{
v14 = compiler->lvaTable[multiRegIdx
currentLiveVars = this->currentLiveVars;
+ compiler->lvaTable[*(unsigned int *)&theTreeNode[1]._gtRegNum].lvFieldLclStart].lvVarIndex;
if ( compiler->lvaTrackedCountInSizeTUnits > 1 )
currentLiveVars = this->currentLiveVars;
currentLiveVars[(unsigned __int64)(unsigned int)lvVarIndex >> 6] &= ~(1i64 << (lvVarIndex & 0x3F));
if ( compiler->lvaTrackedCountInSizeTUnits > 1 )
else
goto LABEL_6;
this->currentLiveVars = (unsigned __int64 *)((unsigned __int64)currentLiveVars & ~(1i64 << lvVarIndex));
goto LABEL_11;
}
}
m_head = this->defList.m_head;
v20 = 0i64;
if ( !m_head )
LABEL_24:
noWayAssertBody();
while ( m_head->treeNode != theTreeNode || ((*((unsigned __int8 *)m_head->ref + 37) >> 1) & 3) != multiRegIdx )
{
v20 = m_head;
m_head = m_head->m_next;
if ( !m_head )
goto LABEL_24;
}
}
Copier
Copié
Copier
Copié
m_next = m_head->m_next;
if ( v20 )
v20->m_next = m_next;
else
this->defList.m_head = m_next;
if ( !m_next )
this->defList.m_tail = v20;
ref = (Interval **)m_head->ref;
theTreeNode = 0i64;
m_head->m_next = 0i64;
v13 = *ref;
m_head->m_next = this->listNodePool.m_freeList;
this->listNodePool.m_freeList = m_head;
}
}
else
else
{
{
Copier
Copié
Copier
Copié
v1
3
= this->localVarIntervals[lvaTable[v1
1
].lvVarIndex];
v1
4
= this->localVarIntervals[lvaTable[v1
2
].lvVarIndex];
if ( (theTreeNode->gtFlags & 0x4000000) != 0 )
if ( (theTreeNode->gtFlags & 0x4000000) != 0 )
{
{
Copier
Copié
Copier
Copié
v1
4
= lvaTable[v1
3
->varNum].lvVarIndex;
v1
5
= lvaTable[v1
4
->varNum].lvVarIndex;
currentLiveVars
= this->currentLiveVars;
v16
= this->currentLiveVars;
if ( v1
0
->lvaTrackedCountInSizeTUnits > 1 )
if ( v1
1
->lvaTrackedCountInSizeTUnits > 1 )
{
v16
[v1
5
>> 6] &= ~(1i64 << (
v15
& 0x3F));
LOBYTE(lvVarIndex) = v14;
else
LABEL_6:
this->currentLiveVars = (unsigned __int64 *)((unsigned __int64)
v16
& ~(1i64 << v1
5
));
currentLiveVars
[v1
4
>> 6] &= ~(1i64 << (
lvVarIndex
& 0x3F));
LinearScan::UpdatePreferencesOfDyingLocal(this, v14);
goto LABEL_23;
}
LABEL_11:
this->currentLiveVars = (unsigned __int64 *)((unsigned __int64)
currentLiveVars
& ~(1i64 << v1
4
));
}
}
}
}
Copier
Copié
Copier
Copié
LABEL_23:
result = LinearScan::newRefPosition(this, v1
4
, this->currentLoc, RefTypeUse, theTreeNode, candidates, multiRegIdx);
result = LinearScan::newRefPosition(this, v1
3
, this->currentLoc, RefTypeUse, theTreeNode, candidates, multiRegIdx);
*((_BYTE *)result + 37) ^= (*((_BYTE *)result + 37) ^ v8) & 1;
*((_BYTE *)result + 37) ^= (*((_BYTE *)result + 37) ^ v8) & 1;
return result;
return result;
}
}
Différences enregistrées
Texte d'origine
Ouvrir un fichier
RefPosition *__fastcall LinearScan::BuildUse( LinearScan *this, GenTree *operand, unsigned int candidates, unsigned int multiRegIdx) { unsigned __int8 gtLIRFlags; // di GenTree *theTreeNode; // r11 genTreeOps gtOper; // dl char v8; // di Compiler *v10; // rsi __int64 v11; // rcx LclVarDsc *lvaTable; // r8 Interval *v13; // rbx unsigned __int64 v14; // rcx unsigned __int64 *currentLiveVars; // r8 __int64 lvVarIndex; // rdx GenTreeFlags gtFlags; // r8d Compiler *compiler; // rsi RefInfoListNode *m_head; // rdx RefInfoListNode *v20; // r8 RefInfoListNode *m_next; // rax Interval **ref; // rax RefPosition *result; // rax gtLIRFlags = operand->gtLIRFlags; theTreeNode = operand; gtOper = operand->gtOper; v8 = gtLIRFlags >> 2; if ( (unsigned __int8)(gtOper - 2) > 4u || (v10 = this->compiler, v11 = *(unsigned int *)&theTreeNode[1]._gtRegNum, lvaTable = v10->lvaTable, *((char *)&lvaTable[v11] + 4) >= 0) ) { if ( ((gtOper - 3) & 0xFD) == 0 && (theTreeNode->gtFlags & 0x2000000) != 0 ) { compiler = this->compiler; lvVarIndex = compiler->lvaTable[multiRegIdx + compiler->lvaTable[*(unsigned int *)&theTreeNode[1]._gtRegNum].lvFieldLclStart].lvVarIndex; v13 = this->localVarIntervals[lvVarIndex]; gtFlags = theTreeNode->gtFlags; if ( !_bittest((const int *)>Flags, (unsigned __int8)(multiRegIdx + 26)) ) goto LABEL_23; v14 = compiler->lvaTable[multiRegIdx + compiler->lvaTable[*(unsigned int *)&theTreeNode[1]._gtRegNum].lvFieldLclStart].lvVarIndex; currentLiveVars = this->currentLiveVars; if ( compiler->lvaTrackedCountInSizeTUnits > 1 ) goto LABEL_6; goto LABEL_11; } m_head = this->defList.m_head; v20 = 0i64; if ( !m_head ) LABEL_24: noWayAssertBody(); while ( m_head->treeNode != theTreeNode || ((*((unsigned __int8 *)m_head->ref + 37) >> 1) & 3) != multiRegIdx ) { v20 = m_head; m_head = m_head->m_next; if ( !m_head ) goto LABEL_24; } m_next = m_head->m_next; if ( v20 ) v20->m_next = m_next; else this->defList.m_head = m_next; if ( !m_next ) this->defList.m_tail = v20; ref = (Interval **)m_head->ref; theTreeNode = 0i64; m_head->m_next = 0i64; v13 = *ref; m_head->m_next = this->listNodePool.m_freeList; this->listNodePool.m_freeList = m_head; } else { v13 = this->localVarIntervals[lvaTable[v11].lvVarIndex]; if ( (theTreeNode->gtFlags & 0x4000000) != 0 ) { v14 = lvaTable[v13->varNum].lvVarIndex; currentLiveVars = this->currentLiveVars; if ( v10->lvaTrackedCountInSizeTUnits > 1 ) { LOBYTE(lvVarIndex) = v14; LABEL_6: currentLiveVars[v14 >> 6] &= ~(1i64 << (lvVarIndex & 0x3F)); goto LABEL_23; } LABEL_11: this->currentLiveVars = (unsigned __int64 *)((unsigned __int64)currentLiveVars & ~(1i64 << v14)); } } LABEL_23: result = LinearScan::newRefPosition(this, v13, this->currentLoc, RefTypeUse, theTreeNode, candidates, multiRegIdx); *((_BYTE *)result + 37) ^= (*((_BYTE *)result + 37) ^ v8) & 1; return result; }
Texte modifié
Ouvrir un fichier
RefPosition *__fastcall LinearScan::BuildUse( LinearScan *this, GenTree *operand, unsigned int candidates, unsigned int multiRegIdx) { unsigned __int8 gtLIRFlags; // r14 GenTree *theTreeNode; // rdi genTreeOps gtOper; // dl char v8; // r14 Compiler *v11; // r9 __int64 v12; // rcx LclVarDsc *lvaTable; // r8 Interval *v14; // rsi unsigned __int64 v15; // rcx unsigned __int64 *v16; // r8 GenTreeFlags gtFlags; // r8d Compiler *compiler; // r9 __int64 lvVarIndex; // r10 unsigned __int64 *currentLiveVars; // r8 RefInfoListNode *m_head; // rdx RefInfoListNode *v22; // r8 RefInfoListNode *m_next; // rax Interval **ref; // rax RefPosition *result; // rax gtLIRFlags = operand->gtLIRFlags; theTreeNode = operand; gtOper = operand->gtOper; v8 = gtLIRFlags >> 2; if ( (unsigned __int8)(gtOper - 2) > 4u || (v11 = this->compiler, v12 = *(unsigned int *)&theTreeNode[1]._gtRegNum, lvaTable = v11->lvaTable, *((char *)&lvaTable[v12] + 4) >= 0) ) { if ( ((gtOper - 3) & 0xFD) != 0 || (theTreeNode->gtFlags & 0x2000000) == 0 ) { m_head = this->defList.m_head; v22 = 0i64; if ( !m_head ) LABEL_26: noWayAssertBody(); while ( m_head->treeNode != theTreeNode || ((*((unsigned __int8 *)m_head->ref + 37) >> 1) & 3) != multiRegIdx ) { v22 = m_head; m_head = m_head->m_next; if ( !m_head ) goto LABEL_26; } m_next = m_head->m_next; if ( v22 ) v22->m_next = m_next; else this->defList.m_head = m_next; if ( !m_next ) this->defList.m_tail = v22; ref = (Interval **)m_head->ref; theTreeNode = 0i64; m_head->m_next = 0i64; v14 = *ref; m_head->m_next = this->listNodePool.m_freeList; this->listNodePool.m_freeList = m_head; } else { compiler = this->compiler; lvVarIndex = compiler->lvaTable[multiRegIdx + compiler->lvaTable[*(unsigned int *)&theTreeNode[1]._gtRegNum].lvFieldLclStart].lvVarIndex; v14 = this->localVarIntervals[lvVarIndex]; gtFlags = theTreeNode->gtFlags; if ( _bittest((const int *)>Flags, (unsigned __int8)(multiRegIdx + 26)) ) { currentLiveVars = this->currentLiveVars; if ( compiler->lvaTrackedCountInSizeTUnits > 1 ) currentLiveVars[(unsigned __int64)(unsigned int)lvVarIndex >> 6] &= ~(1i64 << (lvVarIndex & 0x3F)); else this->currentLiveVars = (unsigned __int64 *)((unsigned __int64)currentLiveVars & ~(1i64 << lvVarIndex)); } } } else { v14 = this->localVarIntervals[lvaTable[v12].lvVarIndex]; if ( (theTreeNode->gtFlags & 0x4000000) != 0 ) { v15 = lvaTable[v14->varNum].lvVarIndex; v16 = this->currentLiveVars; if ( v11->lvaTrackedCountInSizeTUnits > 1 ) v16[v15 >> 6] &= ~(1i64 << (v15 & 0x3F)); else this->currentLiveVars = (unsigned __int64 *)((unsigned __int64)v16 & ~(1i64 << v15)); LinearScan::UpdatePreferencesOfDyingLocal(this, v14); } } result = LinearScan::newRefPosition(this, v14, this->currentLoc, RefTypeUse, theTreeNode, candidates, multiRegIdx); *((_BYTE *)result + 37) ^= (*((_BYTE *)result + 37) ^ v8) & 1; return result; }
Trouver la différence