OpCode.cs 871 B

123456789101112131415161718192021222324252627282930
  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 OpCode(InstEmitter emitter, ulong address, long opCode)
  14. {
  15. Emitter = emitter;
  16. Address = address;
  17. RawOpCode = opCode;
  18. Predicate = new Register(opCode.Extract(16, 3), RegisterType.Predicate);
  19. InvertPredicate = opCode.Extract(19);
  20. }
  21. }
  22. }