class Metasm::MIPS64

Public Class Methods

new(endianness = :big, family = :latest) click to toggle source
Calls superclass method Metasm::MIPS::new
# File metasm/cpu/mips/main.rb, line 73
def initialize(endianness = :big, family = :latest)
        super(endianness, family)
        @size = 64
end

Public Instance Methods

init_latest()
Alias for: init_mips64r2
init_mips64() click to toggle source
# File metasm/cpu/mips/opcodes.rb, line 242
def init_mips64
        init_mips32r2
        @valid_props.update :mi64 => true

        addop 'ld',     0b110111 << 26, :rt, :rs_i16, :m64
        addop 'lwu',    0b100111 << 26, :rt, :rs_i16
        addop 'sd',     0b111111 << 26, :rt, :rs_i16, :m64
        addop 'scd',    0b111100 << 26, :rt, :rs_i16, :m64
        addop 'ldl',    0b011010 << 26, :rt, :rs_i16
        addop 'ldr',    0b011011 << 26, :rt, :rs_i16
        addop 'sdl',    0b101100 << 26, :rt, :rs_i16
        addop 'sdr',    0b101101 << 26, :rt, :rs_i16
        addop 'lld',    0b110100 << 26, :rt, :rs_i16
        addop 'daddi',  0b011000 << 26, :rt, :rs, :i16
        addop 'daddiu', 0b011001 << 26, :rt, :rs, :i16

        addop 'dclo',  (0b011100 << 26) | (0b100101), :rd, :rt, :rs
        addop 'dclz',  (0b011100 << 26) | (0b100100), :rd, :rt, :rs

        addop 'dadd',   0b101100, :rd, :rs, :rt
        addop 'daddu',  0b101101, :rd, :rs, :rt
        addop 'dsub',   0b101110, :rd, :rs, :rt
        addop 'dsubu',  0b101111, :rd, :rs, :rt
        addop 'dsll',   0b111000, :rd, :rt, :sa
        addop 'dsll32', 0b111100, :rd, :rt, :sa
        addop 'dsllv',  0b010100, :rd, :rt, :rs
        addop 'dsra',   0b111011, :rd, :rt, :sa
        addop 'dsra32', 0b111111, :rd, :rt, :sa
        addop 'dsrav',  0b010111, :rd, :rt, :rs
        addop 'dsrl',   0b111010, :rd, :rt, :sa
        addop 'dsrl32', 0b111110, :rd, :rt, :sa
        addop 'dsrlv',  0b010110, :rd, :rt, :rs
        addop 'ddiv',   0b011110, :rs, :rt
        addop 'ddivu',  0b011111, :rs, :rt
        addop 'dmult',  0b011100, :rs, :rt
        addop 'dmultu', 0b011101, :rs, :rt

        addop 'dmfc0', (0b010000<<26) | (0b00001<<21), :rt, :idb
        addop 'dmfc0', (0b010000<<26) | (0b00001<<21), :rt, :idb, :sel
        addop 'dmtc0', (0b010000<<26) | (0b00101<<21), :rt, :idb
        addop 'dmtc0', (0b010000<<26) | (0b00101<<21), :rt, :idb, :sel
end
init_mips64r2() click to toggle source
# File metasm/cpu/mips/opcodes.rb, line 285
def init_mips64r2
        init_mips64
        @fields_mask.update :msbd => 0x1f
        @fields_shift.update :msbd => 11

        addop 'dext',  (0b011111 << 26) | 0b000011, :rt, :rs, :sa, :msbd      # sa => lsb
        addop 'dextm', (0b011111 << 26) | 0b000001, :rt, :rs, :sa, :msbd
        addop 'dextu', (0b011111 << 26) | 0b000010, :rt, :rs, :sa, :msbd
        addop 'dins',  (0b011111 << 26) | 0b000111, :rt, :rs, :sa, :msbd
        addop 'dinsm', (0b011111 << 26) | 0b000101, :rt, :rs, :sa, :msbd
        addop 'dinsu', (0b011111 << 26) | 0b000110, :rt, :rs, :sa, :msbd

        addop 'drotr',   (1 << 21) | 0b111010, :rd, :rt, :sa
        addop 'drotr32', (1 << 21) | 0b111110, :rd, :rt, :sa
        addop 'drotrv',  (1 <<  6) | 0b010110, :rd, :rt, :rs

        addop 'dsbh', (0b011111 << 26) | (0b00010 << 6) | 0b100100, :rd, :rt
        addop 'dshd', (0b011111 << 26) | (0b00101 << 6) | 0b100100, :rd, :rt
end
Also aliased as: init_latest