Diff
checker
Testo
Testo
Immagini
Documenti
Excel
Cartelle
Legal
Enterprise
Applicazione per desktop
Prezzi
Accedi
Scarica Diffchecker Desktop
Confronta il testo
Trova la differenza tra due file di testo
Strumenti
Cronologia
Editor live
Nascondi spazi bianchi
Comprimi invariate
Senza a capo
Layout
Diviso
Unificato
Livello di dettaglio
Intelligente
Parola
Carattere
Stili testo
Modifica aspetto
Evidenziazione sintassi
Scegli sintassi
Ignora
Trasforma testo
Vai alla prima modifica
Modifica input
Diffchecker Desktop
Il modo più sicuro per usare Diffchecker. Ottieni l'app Diffchecker Desktop: i tuoi diff non lasciano mai il tuo computer!
Ottieni Desktop
Untitled Diff
Creato
4 anni fa
Il diff non scade mai
Eliminare
Esporta
Condividere
Spiegare
75 rimozioni
Linee
Totale
Rimosso
Caratteri
Totale
Rimosso
Per continuare a utilizzare questa funzione, aggiorna a
Diff
checker
Pro
Visualizza prezzi
100 linee
Copia tutti
73 aggiunte
Linee
Totale
Aggiunto
Caratteri
Totale
Aggiunto
Per continuare a utilizzare questa funzione, aggiorna a
Diff
checker
Pro
Visualizza prezzi
99 linee
Copia tutti
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)
{
{
Copia
Copiato
Copia
Copiato
unsigned __int8 gtLIRFlags; //
di
unsigned __int8 gtLIRFlags; //
r14
GenTree *theTreeNode; //
r11
GenTree *theTreeNode; //
rdi
genTreeOps gtOper; // dl
genTreeOps gtOper; // dl
Copia
Copiato
Copia
Copiato
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
Copia
Copiato
Copia
Copiato
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
Copia
Copiato
Copia
Copiato
__int64 lvVarIndex; // rdx
GenTreeFlags gtFlags; // r8d
Compiler *compiler; // rsi
RefInfoListNode *m_head; // rdx
RefInfoListNode *m_head; // rdx
Copia
Copiato
Copia
Copiato
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
Copia
Copiato
Copia
Copiato
|| (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) )
{
{
Copia
Copiato
Copia
Copiato
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;
Copia
Copiato
Copia
Copiato
v1
3
= this->localVarIntervals[lvVarIndex];
v1
4
= this->localVarIntervals[lvVarIndex];
gtFlags = theTreeNode->gtFlags;
gtFlags = theTreeNode->gtFlags;
Copia
Copiato
Copia
Copiato
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;
}
}
Copia
Copiato
Copia
Copiato
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
{
{
Copia
Copiato
Copia
Copiato
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 )
{
{
Copia
Copiato
Copia
Copiato
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
));
}
}
}
}
Copia
Copiato
Copia
Copiato
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 salvati
Testo originale
Apri file
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; }
Testo modificato
Apri file
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; }
Trovare la differenza