コード例 #1
0
ファイル: OpCodeTable.cs プロジェクト: yunfile123/Ryujinx
 public TableEntry(InstEmitter emitter, Type opCodeType, int xBits)
 {
     Emitter     = emitter;
     OpCodeType  = opCodeType;
     XBits       = xBits;
     OpActivator = CacheOpActivator(opCodeType);
 }
コード例 #2
0
        public OpCodePsetp(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Predicate12 = new Register(opCode.Extract(12, 3), RegisterType.Predicate);
            Predicate29 = new Register(opCode.Extract(29, 3), RegisterType.Predicate);

            LogicalOpAB = (LogicalOperation)opCode.Extract(24, 2);
        }
コード例 #3
0
ファイル: OpCodeTld4s.cs プロジェクト: zpoo32/Ryujinx
        public OpCodeTld4s(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            HasDepthCompare = opCode.Extract(50);
            HasOffset       = opCode.Extract(51);

            GatherCompIndex = opCode.Extract(52, 2);
        }
コード例 #4
0
ファイル: OpCodeAluRegCbuf.cs プロジェクト: ianuub/Ryujinxxx
        public OpCodeAluRegCbuf(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Offset = opCode.Extract(20, 14);
            Slot   = opCode.Extract(34, 5);

            Rb = new Register(opCode.Extract(39, 8), RegisterType.Gpr);
        }
コード例 #5
0
ファイル: OpCodeBranchIndir.cs プロジェクト: ski982/Ryujinx-1
        public OpCodeBranchIndir(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            PossibleTargets = new HashSet <Block>();

            Ra = new Register(opCode.Extract(8, 8), RegisterType.Gpr);

            Offset = ((int)(opCode >> 20) << 8) >> 8;
        }
コード例 #6
0
ファイル: OpCodeAluImm32.cs プロジェクト: ski982/Ryujinx-1
        public OpCodeAluImm32(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Immediate = opCode.Extract(20, 32);

            SetCondCode = opCode.Extract(52);
            Extended    = opCode.Extract(53);
            Saturate    = opCode.Extract(54);
        }
コード例 #7
0
ファイル: OpCodeAl2p.cs プロジェクト: neozumm/Ryujinx
        public OpCodeAl2p(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Rd          = new Register(opCode.Extract(0, 8), RegisterType.Gpr);
            Ra          = new Register(opCode.Extract(8, 8), RegisterType.Gpr);
            Predicate44 = new Register(opCode.Extract(44, 3), RegisterType.Predicate);

            Immediate = ((int)opCode << 1) >> 21;
        }
コード例 #8
0
ファイル: OpCodeHfmaImm32.cs プロジェクト: ianuub/Ryujinxxx
        public OpCodeHfmaImm32(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Immediate = opCode.Extract(20, 32);

            NegateC = opCode.Extract(52);

            Rc = Rd;
        }
コード例 #9
0
ファイル: OpCodeHfma.cs プロジェクト: bedo-dev/Ryujinx
        public OpCodeHfma(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Rd = new Register(opCode.Extract(0, 8), RegisterType.Gpr);
            Ra = new Register(opCode.Extract(8, 8), RegisterType.Gpr);
            Rc = new Register(opCode.Extract(39, 8), RegisterType.Gpr);

            SwizzleA = (FPHalfSwizzle)opCode.Extract(47, 2);
        }
コード例 #10
0
        public OpCodeBranch(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Condition = (Condition)(opCode & 0x1f);

            Offset = ((int)(opCode >> 20) << 8) >> 8;

            PushTarget = false;
        }
コード例 #11
0
        public OpCodeTld4(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            HasDepthCompare = opCode.Extract(50);

            Offset = (TextureGatherOffset)opCode.Extract(54, 2);

            GatherCompIndex = opCode.Extract(56, 2);
        }
コード例 #12
0
ファイル: OpCodeTxd.cs プロジェクト: ski982/Ryujinx-1
        public OpCodeTxd(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            HasOffset = opCode.Extract(35);

            IsBindless = opCode.Extract(54);

            LodMode = TextureLodMode.None;
        }
コード例 #13
0
ファイル: OpCodeIpa.cs プロジェクト: ski982/Ryujinx-1
        public OpCodeIpa(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            AttributeOffset = opCode.Extract(28, 10);

            Saturate = opCode.Extract(51);

            Mode = (InterpolationMode)opCode.Extract(54, 2);
        }
コード例 #14
0
ファイル: InstOp.cs プロジェクト: piyachetk/Ryujinx
 public InstOp(ulong address, ulong rawOpCode, InstName name, InstEmitter emitter, InstProps props)
 {
     Address   = address;
     RawOpCode = rawOpCode;
     Name      = name;
     Emitter   = emitter;
     Props     = props;
 }
コード例 #15
0
ファイル: OpCodeSsy.cs プロジェクト: zpoo32/Ryujinx
        public OpCodeSsy(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Syncs = new Dictionary <OpCodeSync, Operand>();

            Predicate = new Register(RegisterConsts.PredicateTrueIndex, RegisterType.Predicate);

            InvertPredicate = false;
        }
コード例 #16
0
        public OpCodeFArith(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            RoundingMode = (RoundingMode)opCode.Extract(39, 2);

            Scale = (FPMultiplyScale)opCode.Extract(41, 3);

            FlushToZero = opCode.Extract(44);
            AbsoluteA   = opCode.Extract(46);
        }
コード例 #17
0
        public OpCodeLopImm32(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            LogicalOp = (LogicalOperation)opCode.Extract(53, 2);

            InvertA = opCode.Extract(55);
            InvertB = opCode.Extract(56);

            Extended = opCode.Extract(57);
        }
コード例 #18
0
        public OpCodeLop(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            InvertA = opCode.Extract(39);
            InvertB = opCode.Extract(40);

            LogicalOp = (LogicalOperation)opCode.Extract(41, 2);

            Predicate48 = new Register(opCode.Extract(48, 3), RegisterType.Predicate);
        }
コード例 #19
0
        public OpCodeSet(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Predicate0 = new Register(opCode.Extract(0, 3), RegisterType.Predicate);
            Predicate3 = new Register(opCode.Extract(3, 3), RegisterType.Predicate);

            LogicalOp = (LogicalOperation)opCode.Extract(45, 2);

            FlushToZero = opCode.Extract(47);
        }
コード例 #20
0
        public OpCodeVideo(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Rd = new Register(opCode.Extract(0, 8), RegisterType.Gpr);
            Ra = new Register(opCode.Extract(8, 8), RegisterType.Gpr);
            Rc = new Register(opCode.Extract(39, 8), RegisterType.Gpr);

            SetCondCode = opCode.Extract(47);
            Saturate    = opCode.Extract(55);
        }
コード例 #21
0
ファイル: OpCodeHfmaImm2x10.cs プロジェクト: ski982/Ryujinx-1
        public OpCodeHfmaImm2x10(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Immediate = DecoderHelper.Decode2xF10Immediate(opCode);

            NegateC  = opCode.Extract(51);
            Saturate = opCode.Extract(52);

            SwizzleC = (FPHalfSwizzle)opCode.Extract(53, 2);
        }
コード例 #22
0
        public OpCodePush(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            PopOps = new Dictionary <OpCodeBranchPop, Operand>();

            Predicate = new Register(RegisterConsts.PredicateTrueIndex, RegisterType.Predicate);

            InvertPredicate = false;

            PushTarget = true;
        }
コード例 #23
0
ファイル: OpCodeVote.cs プロジェクト: ski982/Ryujinx-1
        public OpCodeVote(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Rd          = new Register(opCode.Extract(0, 8), RegisterType.Gpr);
            Predicate39 = new Register(opCode.Extract(39, 3), RegisterType.Predicate);
            Predicate45 = new Register(opCode.Extract(45, 3), RegisterType.Predicate);

            InvertP = opCode.Extract(42);

            VoteOp = (VoteOp)opCode.Extract(48, 2);
        }
コード例 #24
0
        public OpCode(InstEmitter emitter, ulong address, long opCode)
        {
            Emitter   = emitter;
            Address   = address;
            RawOpCode = opCode;

            Predicate = new Register(opCode.Extract(16, 3), RegisterType.Predicate);

            InvertPredicate = opCode.Extract(19);
        }
コード例 #25
0
        public OpCodeLdc(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Rd = new Register(opCode.Extract(0, 8), RegisterType.Gpr);
            Ra = new Register(opCode.Extract(8, 8), RegisterType.Gpr);

            Offset = opCode.Extract(22, 14);
            Slot   = opCode.Extract(36, 5);

            Size = (IntegerSize)opCode.Extract(48, 3);
        }
コード例 #26
0
        public OpCodeAtom(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Rd = new Register(opCode.Extract(0, 8), RegisterType.Gpr);
            Ra = new Register(opCode.Extract(8, 8), RegisterType.Gpr);
            Rb = new Register(opCode.Extract(20, 8), RegisterType.Gpr);

            Extended = opCode.Extract(48);

            AtomicOp = (AtomicOp)opCode.Extract(52, 4);
        }
コード例 #27
0
        private static OpCode MakeOpCode(Type type, InstEmitter emitter, ulong address, long opCode)
        {
            if (type == null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            OpActivator createInstance = _opActivators.GetOrAdd(type, CacheOpActivator);

            return((OpCode)createInstance(emitter, address, opCode));
        }
コード例 #28
0
        public OpCodeMemory(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Rd = new Register(opCode.Extract(0, 8), RegisterType.Gpr);
            Ra = new Register(opCode.Extract(8, 8), RegisterType.Gpr);

            Offset = (opCode.Extract(20, 24) << 8) >> 8;

            Extended = opCode.Extract(45);

            Size = (IntegerSize)opCode.Extract(48, 3);
        }
コード例 #29
0
ファイル: OpCodeTld4s.cs プロジェクト: ski982/Ryujinx-1
        public OpCodeTld4s(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            HasDepthCompare = opCode.Extract(50);
            HasOffset       = opCode.Extract(51);

            GatherCompIndex = opCode.Extract(52, 2);

            IsFp16 = opCode.Extract(55);

            ComponentMask = Rd1.IsRZ ? 3 : 0xf;
        }
コード例 #30
0
        public OpCodeLdc(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            Rd = new Register(opCode.Extract(0, 8), RegisterType.Gpr);
            Ra = new Register(opCode.Extract(8, 8), RegisterType.Gpr);

            Offset = (opCode.Extract(20, 16) << 16) >> 16;
            Slot   = opCode.Extract(36, 5);

            IndexMode = (CbIndexMode)opCode.Extract(44, 2);
            Size      = (IntegerSize)opCode.Extract(48, 3);
        }