evoasm 0.0.2.pre7 → 0.1.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gdbinit +41 -0
- data/.gitignore +1 -2
- data/.gitmodules +3 -0
- data/.rubocop.yml +8 -0
- data/Gemfile +4 -0
- data/LICENSE.md +660 -0
- data/Makefile +1 -1
- data/README.md +17 -9
- data/Rakefile +39 -107
- data/bin/gdb +1 -1
- data/bin/gdb_loop +4 -0
- data/docs/FindingInstructions.md +17 -0
- data/docs/JIT.md +14 -0
- data/docs/SymbolicRegression.md +102 -0
- data/docs/Visualization.md +29 -0
- data/docs/examples/bit_insts.rb +44 -0
- data/docs/examples/jit.rb +26 -0
- data/docs/examples/loss.gif +0 -0
- data/docs/examples/program.png +0 -0
- data/docs/examples/sym_reg.rb +64 -0
- data/docs/examples/vis.rb +38 -0
- data/evoasm.gemspec +21 -15
- data/ext/evoasm_ext/Rakefile +3 -0
- data/ext/evoasm_ext/compile.rake +35 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-alloc.c +226 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-alloc.h +84 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-arch.c +52 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-arch.h +101 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-bitmap.h +158 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-buf.c +204 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-buf.h +109 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-domain.c +124 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-domain.h +279 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-error.c +65 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-error.h +108 -0
- data/ext/evoasm_ext/{evoasm-log.c → libevoasm/src/evoasm-log.c} +36 -18
- data/ext/evoasm_ext/libevoasm/src/evoasm-log.h +93 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-param.c +22 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-param.h +33 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-pop-params.c +192 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-pop-params.h +60 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-pop.c +1323 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-pop.h +107 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-program-io.c +116 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-program-io.h +60 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-program.c +1827 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-program.h +167 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-rand.c +65 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-rand.h +76 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-signal.c +106 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-signal.h +58 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-util.h +112 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-x64.c +925 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm-x64.h +277 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm.c +28 -0
- data/ext/evoasm_ext/libevoasm/src/evoasm.h +35 -0
- data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-enums.h +2077 -0
- data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-insts.c +191203 -0
- data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-insts.h +1713 -0
- data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-misc.c +348 -0
- data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-misc.h +93 -0
- data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-params.c +51 -0
- data/ext/evoasm_ext/libevoasm/src/gen/evoasm-x64-params.h +509 -0
- data/lib/evoasm.rb +28 -11
- data/lib/evoasm/buffer.rb +105 -0
- data/lib/evoasm/capstone.rb +100 -0
- data/lib/evoasm/domain.rb +116 -0
- data/lib/evoasm/error.rb +37 -16
- data/lib/evoasm/exception_error.rb +19 -0
- data/lib/evoasm/ffi_ext.rb +53 -0
- data/lib/evoasm/libevoasm.rb +286 -0
- data/lib/evoasm/libevoasm/x64_enums.rb +1967 -0
- data/lib/evoasm/parameter.rb +20 -0
- data/lib/evoasm/population.rb +145 -0
- data/lib/evoasm/population/parameters.rb +227 -0
- data/lib/evoasm/population/plotter.rb +89 -0
- data/lib/evoasm/prng.rb +64 -0
- data/lib/evoasm/program.rb +195 -12
- data/lib/evoasm/program/io.rb +144 -0
- data/lib/evoasm/test.rb +8 -0
- data/lib/evoasm/version.rb +1 -1
- data/lib/evoasm/x64.rb +115 -0
- data/lib/evoasm/x64/cpu_state.rb +95 -0
- data/lib/evoasm/x64/instruction.rb +109 -0
- data/lib/evoasm/x64/operand.rb +156 -0
- data/lib/evoasm/x64/parameters.rb +211 -0
- data/test/helpers/population_helper.rb +128 -0
- data/test/helpers/test_helper.rb +1 -0
- data/test/helpers/x64_helper.rb +24 -0
- data/test/integration/bitwise_reverse_test.rb +41 -0
- data/test/integration/gcd_test.rb +52 -0
- data/test/integration/popcnt_test.rb +46 -0
- data/test/integration/sym_reg_test.rb +68 -0
- data/test/unit/evoasm/buffer_test.rb +48 -0
- data/test/unit/evoasm/capstone_test.rb +18 -0
- data/test/unit/evoasm/domain_test.rb +55 -0
- data/test/unit/evoasm/population/parameters_test.rb +106 -0
- data/test/unit/evoasm/population_test.rb +96 -0
- data/test/unit/evoasm/prng_test.rb +47 -0
- data/test/unit/evoasm/x64/cpu_state_test.rb +73 -0
- data/test/unit/evoasm/x64/encoding_test.rb +320 -0
- data/test/unit/evoasm/x64/instruction_access_test.rb +177 -0
- data/test/unit/evoasm/x64/instruction_encoding_test.rb +780 -0
- data/test/unit/evoasm/x64/instruction_test.rb +62 -0
- data/test/unit/evoasm/x64/parameters_test.rb +65 -0
- data/test/unit/evoasm/x64_test.rb +52 -0
- metadata +195 -89
- data/Gemfile.rake +0 -8
- data/Gemfile.rake.lock +0 -51
- data/LICENSE.txt +0 -373
- data/data/tables/README.md +0 -19
- data/data/tables/x64.csv +0 -1684
- data/data/templates/evoasm-x64.c.erb +0 -319
- data/data/templates/evoasm-x64.h.erb +0 -126
- data/examples/abs.yml +0 -20
- data/examples/popcnt.yml +0 -17
- data/examples/sym_reg.yml +0 -26
- data/exe/evoasm-search +0 -13
- data/ext/evoasm_ext/evoasm-alloc.c +0 -145
- data/ext/evoasm_ext/evoasm-alloc.h +0 -59
- data/ext/evoasm_ext/evoasm-arch.c +0 -44
- data/ext/evoasm_ext/evoasm-arch.h +0 -161
- data/ext/evoasm_ext/evoasm-bitmap.h +0 -114
- data/ext/evoasm_ext/evoasm-buf.c +0 -130
- data/ext/evoasm_ext/evoasm-buf.h +0 -47
- data/ext/evoasm_ext/evoasm-error.c +0 -31
- data/ext/evoasm_ext/evoasm-error.h +0 -75
- data/ext/evoasm_ext/evoasm-free-list.c.tmpl +0 -121
- data/ext/evoasm_ext/evoasm-free-list.h.tmpl +0 -86
- data/ext/evoasm_ext/evoasm-log.h +0 -69
- data/ext/evoasm_ext/evoasm-misc.c +0 -23
- data/ext/evoasm_ext/evoasm-misc.h +0 -282
- data/ext/evoasm_ext/evoasm-param.h +0 -37
- data/ext/evoasm_ext/evoasm-search.c +0 -2145
- data/ext/evoasm_ext/evoasm-search.h +0 -214
- data/ext/evoasm_ext/evoasm-util.h +0 -40
- data/ext/evoasm_ext/evoasm-x64.c +0 -275624
- data/ext/evoasm_ext/evoasm-x64.h +0 -5436
- data/ext/evoasm_ext/evoasm.c +0 -7
- data/ext/evoasm_ext/evoasm.h +0 -23
- data/ext/evoasm_ext/evoasm_ext.c +0 -1757
- data/ext/evoasm_ext/extconf.rb +0 -31
- data/lib/evoasm/cli.rb +0 -6
- data/lib/evoasm/cli/search.rb +0 -127
- data/lib/evoasm/core_ext.rb +0 -1
- data/lib/evoasm/core_ext/array.rb +0 -9
- data/lib/evoasm/core_ext/integer.rb +0 -10
- data/lib/evoasm/core_ext/kwstruct.rb +0 -13
- data/lib/evoasm/core_ext/range.rb +0 -5
- data/lib/evoasm/examples.rb +0 -27
- data/lib/evoasm/gen.rb +0 -8
- data/lib/evoasm/gen/enum.rb +0 -169
- data/lib/evoasm/gen/name_util.rb +0 -80
- data/lib/evoasm/gen/state.rb +0 -176
- data/lib/evoasm/gen/state_dsl.rb +0 -152
- data/lib/evoasm/gen/strio.rb +0 -27
- data/lib/evoasm/gen/translator.rb +0 -1102
- data/lib/evoasm/gen/version.rb +0 -5
- data/lib/evoasm/gen/x64.rb +0 -237
- data/lib/evoasm/gen/x64/funcs.rb +0 -495
- data/lib/evoasm/gen/x64/inst.rb +0 -781
- data/lib/evoasm/search.rb +0 -40
- data/lib/evoasm/tasks/gen_task.rb +0 -86
- data/lib/evoasm/tasks/template_task.rb +0 -52
- data/test/test_helper.rb +0 -1
- data/test/x64/test_helper.rb +0 -19
- data/test/x64/x64_test.rb +0 -87
data/lib/evoasm/search.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
module Evoasm
|
2
|
-
class Search
|
3
|
-
module Util
|
4
|
-
def flatten_examples(examples)
|
5
|
-
arity = check_arity examples
|
6
|
-
|
7
|
-
[examples.flatten, arity]
|
8
|
-
end
|
9
|
-
|
10
|
-
def check_arity(examples)
|
11
|
-
arity = Array(examples.first).size
|
12
|
-
examples.each do |example|
|
13
|
-
example_arity = Array(example).size
|
14
|
-
if arity && arity != example_arity
|
15
|
-
raise ArgumentError, "invalid arity for example '#{example}'"\
|
16
|
-
" (#{example_arity} for #{arity})"
|
17
|
-
end
|
18
|
-
end
|
19
|
-
arity
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
DEFAULT_SEED = (1..64).to_a
|
24
|
-
def initialize(arch, examples:, instructions:, kernel_size:,
|
25
|
-
program_size:, population_size:, parameters:,
|
26
|
-
mutation_rate: 0.10, seed: DEFAULT_SEED, domains: {}, recur_limit: 0)
|
27
|
-
|
28
|
-
input_examples, output_examples = examples.keys, examples.values
|
29
|
-
input_examples, input_arity = flatten_examples input_examples
|
30
|
-
output_examples, output_arity = flatten_examples output_examples
|
31
|
-
|
32
|
-
__initialize__ input_examples, input_arity, output_examples, output_arity,
|
33
|
-
arch, population_size, kernel_size, program_size, instructions,
|
34
|
-
parameters, mutation_rate, seed, domains, recur_limit
|
35
|
-
end
|
36
|
-
|
37
|
-
include Util
|
38
|
-
|
39
|
-
end
|
40
|
-
end
|
@@ -1,86 +0,0 @@
|
|
1
|
-
require 'evoasm'
|
2
|
-
require 'evoasm/gen/state'
|
3
|
-
require 'evoasm/gen/translator'
|
4
|
-
|
5
|
-
require 'rake'
|
6
|
-
|
7
|
-
module Evoasm
|
8
|
-
module Tasks
|
9
|
-
class GenTask < Rake::TaskLib
|
10
|
-
include Evoasm::Gen
|
11
|
-
|
12
|
-
HEADER_N_LINES = 15
|
13
|
-
CSV_SEPARATOR = ','
|
14
|
-
|
15
|
-
attr_accessor :ruby_bindings
|
16
|
-
attr_reader :name, :archs
|
17
|
-
|
18
|
-
ALL_ARCHS = %i(x64)
|
19
|
-
X64_TABLE_FILENAME = File.join(Evoasm.data, 'tables', 'x64.csv')
|
20
|
-
ARCH_TABLES = {
|
21
|
-
x64: X64_TABLE_FILENAME
|
22
|
-
}
|
23
|
-
|
24
|
-
def initialize(name = 'evoasm:gen', &block)
|
25
|
-
@ruby_bindings = true
|
26
|
-
@name = name
|
27
|
-
@archs = ALL_ARCHS
|
28
|
-
|
29
|
-
block[self] if block
|
30
|
-
|
31
|
-
define
|
32
|
-
end
|
33
|
-
|
34
|
-
def define
|
35
|
-
namespace 'evoasm:gen' do
|
36
|
-
archs.each do |arch|
|
37
|
-
prereqs = [ARCH_TABLES[arch]]
|
38
|
-
|
39
|
-
prereqs << Translator.template_path(arch)
|
40
|
-
target_path = gen_path(Translator.target_filename(arch))
|
41
|
-
|
42
|
-
file target_path => prereqs do
|
43
|
-
puts "Translating"
|
44
|
-
insts = load_insts arch
|
45
|
-
translator = Translator.new(arch, insts, ruby: ruby_bindings)
|
46
|
-
translator.translate! do |filename, content|
|
47
|
-
File.write gen_path(filename), content
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
task "translate:#{arch}" => target_path
|
52
|
-
end
|
53
|
-
|
54
|
-
task 'translate' => archs.map { |arch| "translate:#{arch}" }
|
55
|
-
end
|
56
|
-
|
57
|
-
task name => 'gen:translate'
|
58
|
-
end
|
59
|
-
|
60
|
-
def gen_path(filename)
|
61
|
-
File.join Evoasm.root, 'ext', 'evoasm_ext', filename
|
62
|
-
end
|
63
|
-
|
64
|
-
def load_insts(arch)
|
65
|
-
send :"load_#{arch}_insts"
|
66
|
-
end
|
67
|
-
|
68
|
-
def load_x64_insts
|
69
|
-
require 'evoasm/gen/x64/inst'
|
70
|
-
|
71
|
-
rows = []
|
72
|
-
File.open X64_TABLE_FILENAME do |file|
|
73
|
-
file.each_line.with_index do |line, line_idx|
|
74
|
-
# header
|
75
|
-
next if line_idx == 0
|
76
|
-
|
77
|
-
row = line.split(CSV_SEPARATOR)
|
78
|
-
rows << row
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
Gen::X64::Inst.load(rows)
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'rake'
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
module Evoasm
|
5
|
-
module Tasks
|
6
|
-
class TemplateTask < Rake::TaskLib
|
7
|
-
attr_accessor :source
|
8
|
-
attr_accessor :target
|
9
|
-
attr_accessor :subs
|
10
|
-
|
11
|
-
class << self
|
12
|
-
attr_reader :all
|
13
|
-
end
|
14
|
-
@all = []
|
15
|
-
|
16
|
-
def initialize(&block)
|
17
|
-
block[self] if block
|
18
|
-
define
|
19
|
-
end
|
20
|
-
|
21
|
-
def define
|
22
|
-
srcs = Array(source).map { |f| ext_path f }
|
23
|
-
dsts = Array(target).map { |f| gen_path f }
|
24
|
-
srcs.zip(dsts).each do |src, dst|
|
25
|
-
file dst => src do
|
26
|
-
data = File.read src
|
27
|
-
subs.sort_by{|k, _| k.length }.reverse.each do |name, value|
|
28
|
-
data.gsub! "$#{name}", value.to_s
|
29
|
-
data.gsub! "$#{name.upcase}", value.to_s.upcase
|
30
|
-
p "$-#{name}"
|
31
|
-
data.gsub! "$-#{name}", value.to_s.gsub('_', '-')
|
32
|
-
end
|
33
|
-
File.write dst, data
|
34
|
-
end
|
35
|
-
self.class.all << dst
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def ext_dir
|
40
|
-
File.join Evoasm.root, 'ext', 'evoasm_ext'
|
41
|
-
end
|
42
|
-
|
43
|
-
def ext_path(filename)
|
44
|
-
File.join ext_dir, filename
|
45
|
-
end
|
46
|
-
|
47
|
-
def gen_path(filename)
|
48
|
-
File.join ext_dir, 'gen', filename
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
data/test/x64/test_helper.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require_relative '../test_helper'
|
2
|
-
|
3
|
-
require 'evoasm'
|
4
|
-
|
5
|
-
module MiniTest::Assertions
|
6
|
-
include Evoasm
|
7
|
-
|
8
|
-
def assert_disassembles_to(disasm, inst_name, **params)
|
9
|
-
assert_equal disasm,
|
10
|
-
Evoasm::X64.disassemble(@x64.encode(inst_name, params)).first
|
11
|
-
end
|
12
|
-
|
13
|
-
def assert_assembles_to(asm, inst_name, **params)
|
14
|
-
assert_equal asm, @x64.encode(inst_name, params)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
Array.infect_an_assertion :assert_disassembles_to, :must_disassemble_to
|
19
|
-
Array.infect_an_assertion :assert_assembles_to, :must_assemble_to
|
data/test/x64/x64_test.rb
DELETED
@@ -1,87 +0,0 @@
|
|
1
|
-
require_relative 'test_helper'
|
2
|
-
|
3
|
-
class X64Test < Minitest::Test
|
4
|
-
def setup
|
5
|
-
@x64 = Evoasm::X64.new
|
6
|
-
@x64.encode :add_r32_rm32, reg0: :A, reg1: :B
|
7
|
-
end
|
8
|
-
|
9
|
-
def test_rm_reg_reg
|
10
|
-
assert_disassembles_to 'add rax, rbx', :add_r64_rm64,
|
11
|
-
reg0: :A, reg1: :B
|
12
|
-
assert_disassembles_to 'add r11, r12', :add_r64_rm64,
|
13
|
-
reg0: :R11, reg1: :R12
|
14
|
-
assert_disassembles_to 'add eax, ebx', :add_r32_rm32,
|
15
|
-
reg0: :A, reg1: :B
|
16
|
-
assert_disassembles_to 'add ax, bx', :add_r16_rm16,
|
17
|
-
reg0: :A, reg1: :B
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_rm_reg_base
|
21
|
-
assert_disassembles_to 'add rax, qword ptr [rbx]', :add_r64_rm64,
|
22
|
-
reg0: :A, reg_base: :B
|
23
|
-
assert_disassembles_to 'add r11, qword ptr [r12]', :add_r64_rm64,
|
24
|
-
reg0: :R11, reg_base: :R12
|
25
|
-
assert_disassembles_to 'add eax, dword ptr [rbx]', :add_r32_rm32,
|
26
|
-
reg0: :A, reg_base: :B
|
27
|
-
assert_disassembles_to 'add ax, word ptr [rbx]', :add_r16_rm16,
|
28
|
-
reg0: :A, reg_base: :B
|
29
|
-
|
30
|
-
# reg1 should be ignored
|
31
|
-
assert_disassembles_to 'add eax, dword ptr [rbx]', :add_r32_rm32,
|
32
|
-
reg0: :A, reg1: :C, reg_base: :B
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_rm_reg_base32
|
36
|
-
assert_disassembles_to 'add rax, dword ptr [ebx]', :add_r64_rm64,
|
37
|
-
reg0: :A, reg_base: :B, address_size: 32
|
38
|
-
|
39
|
-
assert_disassembles_to 'add eax, dword ptr [ebx]', :add_r32_rm32,
|
40
|
-
reg0: :A, reg_base: :B, address_size: 32
|
41
|
-
end
|
42
|
-
|
43
|
-
def test_rm_reg_sib
|
44
|
-
assert_disassembles_to 'add rax, qword ptr [rbx + rcx*4]', :add_r64_rm64,
|
45
|
-
reg0: :A, reg_base: :B, reg_index: :C, scale: 4
|
46
|
-
assert_disassembles_to 'add rax, qword ptr [rbx + rcx]', :add_r64_rm64,
|
47
|
-
reg0: :A, reg_base: :B, reg_index: :C, scale: 1
|
48
|
-
assert_disassembles_to 'add rax, qword ptr [rbx + rcx*8]', :add_r64_rm64,
|
49
|
-
reg0: :A, reg_base: :B, reg_index: :C, scale: 8
|
50
|
-
|
51
|
-
assert_disassembles_to 'add r10, qword ptr [r11 + r12*4]', :add_r64_rm64,
|
52
|
-
reg0: :R10, reg_base: :R11, reg_index: :R12, scale: 4
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_mi
|
57
|
-
assert_disassembles_to 'add rax, 0xa', :add_rm64_imm8,
|
58
|
-
reg0: :A, imm0: 0xa
|
59
|
-
|
60
|
-
assert_disassembles_to 'add qword ptr [rax], 0xa', :add_rm64_imm8,
|
61
|
-
reg_base: :A, imm0: 0xa
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_vex
|
65
|
-
assert_assembles_to "\xC5\xF5\xEC\xC2", :vpaddsb_ymm_ymm_ymmm256,
|
66
|
-
reg0: :XMM0, reg1: :XMM1, reg2: :XMM2, force_long_vex?: false
|
67
|
-
assert_assembles_to "\xC4\xE1u\xEC\xC2", :vpaddsb_ymm_ymm_ymmm256,
|
68
|
-
reg0: :XMM0, reg1: :XMM1, reg2: :XMM2, force_long_vex?: true
|
69
|
-
assert_disassembles_to 'vpaddsb ymm0, ymm1, ymm2', :vpaddsb_ymm_ymm_ymmm256,
|
70
|
-
reg0: :XMM0, reg1: :XMM1, reg2: :XMM2
|
71
|
-
assert_disassembles_to 'vpaddsb ymm0, ymm1, ymm2', :vpaddsb_ymm_ymm_ymmm256,
|
72
|
-
reg0: :XMM0, reg1: :XMM1, reg2: :XMM2, force_long_vex?: true
|
73
|
-
|
74
|
-
assert_assembles_to "\xC5\xF5\xEC\xC2", :vpaddsb_ymm_ymm_ymmm256,
|
75
|
-
reg0: :XMM0, reg1: :XMM1, reg2: :XMM2
|
76
|
-
assert_disassembles_to 'vpaddusb xmm0, xmm1, xmm2', :vpaddusb_xmm_xmm_xmmm128,
|
77
|
-
reg0: :XMM0, reg1: :XMM1, reg2: :XMM2
|
78
|
-
assert_assembles_to "\xC5\xF8\x5A\xCA", :vcvtps2pd_xmm_xmmm64,
|
79
|
-
reg0: :XMM1, reg1: :XMM2
|
80
|
-
assert_assembles_to "\xC5\xEA\x5A\xCB", :vcvtss2sd_xmm_xmm_xmmm32,
|
81
|
-
reg0: :XMM1, reg1: :XMM2, reg2: :XMM3
|
82
|
-
|
83
|
-
assert_assembles_to "\xC4\xE3\x79\x1D\xD1\x00", :vcvtps2ph_xmmm64_xmm_imm8,
|
84
|
-
reg0: :XMM1, reg1: :XMM2, imm0: 0x0
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|