aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/Decoders/OpCodeFArithImm32.cs
blob: 09d0a13d8791e5f565afb08307d92086c1b49606 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using Ryujinx.Graphics.Shader.Instructions;
using System;

namespace Ryujinx.Graphics.Shader.Decoders
{
    class OpCodeFArithImm32 : OpCodeAlu, IOpCodeFArith, IOpCodeImmF
    {
        public RoundingMode RoundingMode => RoundingMode.ToNearest;

        public FPMultiplyScale Scale => FPMultiplyScale.None;

        public bool FlushToZero { get; }
        public bool AbsoluteA   { get; }

        public float Immediate { get; }

        public new static OpCode Create(InstEmitter emitter, ulong address, long opCode) => new OpCodeFArithImm32(emitter, address, opCode);

        public OpCodeFArithImm32(InstEmitter emitter, ulong address, long opCode) : base(emitter, address, opCode)
        {
            int imm = opCode.Extract(20, 32);

            Immediate = BitConverter.Int32BitsToSingle(imm);

            SetCondCode = opCode.Extract(52);
            AbsoluteA   = opCode.Extract(54);
            FlushToZero = opCode.Extract(55);

            Saturate = false;
        }
    }
}