OpCode.cs 998 B

1234567891011121314151617181920212223242526272829303132
  1. using Ryujinx.Graphics.Shader.Instructions;
  2. namespace Ryujinx.Graphics.Shader.Decoders
  3. {
  4. class OpCode
  5. {
  6. public InstEmitter Emitter { get; }
  7. public ulong Address { get; }
  8. public long RawOpCode { get; }
  9. public Register Predicate { get; protected set; }
  10. public bool InvertPredicate { get; protected set; }
  11. // When inverted, the always true predicate == always false.
  12. public bool NeverExecute => Predicate.Index == RegisterConsts.PredicateTrueIndex && InvertPredicate;
  13. public static OpCode Create(InstEmitter emitter, ulong address, long opCode) => new OpCode(emitter, address, opCode);
  14. public OpCode(InstEmitter emitter, ulong address, long opCode)
  15. {
  16. Emitter = emitter;
  17. Address = address;
  18. RawOpCode = opCode;
  19. Predicate = new Register(opCode.Extract(16, 3), RegisterType.Predicate);
  20. InvertPredicate = opCode.Extract(19);
  21. }
  22. }
  23. }