本文整理汇总了C#中AstExpression.UShr2Addr方法的典型用法代码示例。如果您正苦于以下问题:C# AstExpression.UShr2Addr方法的具体用法?C# AstExpression.UShr2Addr怎么用?C# AstExpression.UShr2Addr使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AstExpression
的用法示例。
在下文中一共展示了AstExpression.UShr2Addr方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: VisitExpression
//.........这里部分代码省略.........
}
case AstCode.CompoundShl:
{
var localReg = frame.GetArgument((AstVariable) node.Operand);
return new RLRange(args,
this.Add(node.SourceLocation, node.Shl2Addr(), localReg, args[0].Result),
localReg);
}
case AstCode.Shr:
{
var r = frame.AllocateTemp(args[0].Result.Type);
return new RLRange(args,
this.Add(node.SourceLocation, node.Shr(), r, args[0].Result, args[1].Result),
r);
}
case AstCode.CompoundShr:
{
var localReg = frame.GetArgument((AstVariable) node.Operand);
return new RLRange(args,
this.Add(node.SourceLocation, node.Shr2Addr(), localReg, args[0].Result),
localReg);
}
case AstCode.Shr_Un:
{
var r = frame.AllocateTemp(args[0].Result.Type);
return new RLRange(args,
this.Add(node.SourceLocation, node.UShr(), r, args[0].Result, args[1].Result),
r);
}
case AstCode.CompoundShr_Un:
{
var localReg = frame.GetArgument((AstVariable) node.Operand);
return new RLRange(args,
this.Add(node.SourceLocation, node.UShr2Addr(), localReg, args[0].Result),
localReg);
}
case AstCode.Conditional: // arg[0] ? arg[1] : arg[2]
{
var valueType = (XTypeReference) node.Operand;
var result = frame.AllocateTemp(valueType.GetReference(targetPackage));
var move = node.Arguments[1].Move();
var move2 = node.Arguments[2].Move();
if (move2 == RCode.Move_object) move = move2;
// condition
var gotoArg2 = this.Add(node.SourceLocation, RCode.If_eqz, null, args[0].Result.Registers);
// Generate code for arg[1]
var arg1 = node.Arguments[1].Accept(this, node);
this.Add(node.SourceLocation, move, result, arg1.Result);
var gotoEnd = this.Add(node.SourceLocation, RCode.Goto, null);
// Generate code for arg[2]
var arg2Start = this.Add(node.SourceLocation, RCode.Nop);
var arg2 = node.Arguments[2].Accept(this, node);
this.Add(node.SourceLocation, move, result, arg2.Result);
var end = this.Add(node.SourceLocation, RCode.Nop);
// Set branch targets
gotoArg2.Operand = arg2Start;
gotoEnd.Operand = end;
return new RLRange(gotoArg2, end, result);
}
#endregion