mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.3 KiB
51 lines
1.3 KiB
using ICSharpCode.Decompiler.Disassembler; |
|
using Mono.Cecil; |
|
using System; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Threading.Tasks; |
|
|
|
namespace ICSharpCode.Decompiler.IL |
|
{ |
|
interface ISupportsMemoryPrefix : ISupportsVolatilePrefix |
|
{ |
|
/// <summary> |
|
/// Returns the alignment specified by the 'unaligned' prefix; or 0 if there was no 'unaligned' prefix. |
|
/// </summary> |
|
byte UnalignedPrefix { get; set; } |
|
} |
|
|
|
interface ISupportsVolatilePrefix |
|
{ |
|
/// <summary> |
|
/// Gets/Sets whether the memory access is volatile. |
|
/// </summary> |
|
bool IsVolatile { get; set; } |
|
} |
|
|
|
class LoadIndirect(public readonly TypeReference TypeReference) : UnaryInstruction(OpCode.LdInd), ISupportsMemoryPrefix |
|
{ |
|
public byte UnalignedPrefix { get; set; } |
|
public bool IsVolatile { get; set; } |
|
|
|
public override void WriteTo(ITextOutput output) |
|
{ |
|
if (IsVolatile) |
|
output.Write("volatile."); |
|
if (UnalignedPrefix != 0) |
|
output.Write("unaligned " + UnalignedPrefix + "."); |
|
output.Write(OpCode); |
|
output.Write(' '); |
|
TypeReference.WriteTo(output); |
|
output.Write('('); |
|
Operand.WriteTo(output); |
|
output.Write(')'); |
|
} |
|
|
|
public override InstructionFlags Flags |
|
{ |
|
get { return Operand.Flags | InstructionFlags.SideEffects; } |
|
} |
|
} |
|
}
|
|
|