Example #1
0
 private static int GetComponents(IntegerSize size)
 {
     return(size switch
     {
         IntegerSize.B64 => 2,
         IntegerSize.B128 => 4,
         IntegerSize.UB128 => 4,
         _ => 1
     });
Example #2
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);
        }
Example #3
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);
        }
Example #4
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);
        }
Example #5
0
        private static int GetVectorCount(IntegerSize size)
        {
            switch (size)
            {
            case IntegerSize.B64:
                return(2);

            case IntegerSize.B128:
            case IntegerSize.UB128:
                return(4);
            }

            return(1);
        }
Example #6
0
        private static Operand ExtractSmallInt(
            EmitterContext context,
            IntegerSize size,
            Operand bitOffset,
            Operand value)
        {
            value = context.ShiftRightU32(value, bitOffset);

            switch (size)
            {
            case IntegerSize.U8:  value = ZeroExtendTo32(context, value, 8);  break;

            case IntegerSize.U16: value = ZeroExtendTo32(context, value, 16); break;

            case IntegerSize.S8:  value = SignExtendTo32(context, value, 8);  break;

            case IntegerSize.S16: value = SignExtendTo32(context, value, 16); break;
            }

            return(value);
        }
Example #7
0
        private static Operand InsertSmallInt(
            EmitterContext context,
            IntegerSize size,
            Operand bitOffset,
            Operand word,
            Operand value)
        {
            switch (size)
            {
            case IntegerSize.U8:
            case IntegerSize.S8:
                value = context.BitwiseAnd(value, Const(0xff));
                value = context.BitfieldInsert(word, value, bitOffset, Const(8));
                break;

            case IntegerSize.U16:
            case IntegerSize.S16:
                value = context.BitwiseAnd(value, Const(0xffff));
                value = context.BitfieldInsert(word, value, bitOffset, Const(16));
                break;
            }

            return(value);
        }
Example #8
0
 private void SetSize(IntegerSize size)
 {
     Debug.Assert(size != IntegerSize.Unknown);
     SetMetadata((int)size, IntSizeMask, IntSizeShift);
 }
Example #9
0
 /// <summary>
 /// Sets the size.
 /// </summary>
 /// <returns>The size.</returns>
 /// <param name="size">Size.</param>
 public void SetSize(IntegerSize size)
 {
     this.size = size;
 }