Diff
checker
文本
文本
图像
文档
Excel
文件夹
Legal
Enterprise
桌面版
定价
登录
下载 Diffchecker 桌面版
比较文本
查找两个文本文件之间的差异
工具
历史
实时编辑器
隐藏空白更改
折叠未更改行
关闭换行
视图
拆分
统一
比对精度
智能
单词
字符
文本样式
更改外观
语法高亮
选择语法
忽略
文本转换
转到第一个差异
编辑输入
Diffchecker Desktop
运行Diffchecker最安全的方式。获取Diffchecker桌面应用:您的差异永远不会离开您的电脑!
获取桌面版
Untitled Diff
创建于
4年前
差异永不过期
清除
导出
分享
解释
75 删除
行
总计
删除
字符
总计
删除
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
100 行
全部复制
73 添加
行
总计
添加
字符
总计
添加
要继续使用此功能,请升级到
Diff
checker
Pro
查看价格
99 行
全部复制
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)
{
{
复制
已复制
复制
已复制
unsigned __int8 gtLIRFlags; //
di
unsigned __int8 gtLIRFlags; //
r14
GenTree *theTreeNode; //
r11
GenTree *theTreeNode; //
rdi
genTreeOps gtOper; // dl
genTreeOps gtOper; // dl
复制
已复制
复制
已复制
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
复制
已复制
复制
已复制
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
复制
已复制
复制
已复制
__int64 lvVarIndex; // rdx
GenTreeFlags gtFlags; // r8d
Compiler *compiler; // rsi
RefInfoListNode *m_head; // rdx
RefInfoListNode *m_head; // rdx
复制
已复制
复制
已复制
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
复制
已复制
复制
已复制
|| (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) )
{
{
复制
已复制
复制
已复制
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;
复制
已复制
复制
已复制
v1
3
= this->localVarIntervals[lvVarIndex];
v1
4
= this->localVarIntervals[lvVarIndex];
gtFlags = theTreeNode->gtFlags;
gtFlags = theTreeNode->gtFlags;
复制
已复制
复制
已复制
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;
}
}
复制
已复制
复制
已复制
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
{
{
复制
已复制
复制
已复制
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 )
{
{
复制
已复制
复制
已复制
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
));
}
}
}
}
复制
已复制
复制
已复制
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;
}
}
已保存差异
原始文本
打开文件
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; }
更改后文本
打开文件
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; }
查找差异