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
@@ -0,0 +1,348 @@
|
|
1
|
+
/* AUTOGENERATED FILE, DO NOT EDIT */
|
2
|
+
|
3
|
+
/*
|
4
|
+
* Copyright (C) 2016 Julian Aron Prenner <jap@polyadic.com>
|
5
|
+
*
|
6
|
+
* This program is free software: you can redistribute it and/or modify
|
7
|
+
* it under the terms of the GNU Affero General Public License as published by
|
8
|
+
* the Free Software Foundation, either version 3 of the License, or
|
9
|
+
* (at your option) any later version.
|
10
|
+
*
|
11
|
+
* This program is distributed in the hope that it will be useful,
|
12
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
* GNU Affero General Public License for more details.
|
15
|
+
*
|
16
|
+
* You should have received a copy of the GNU Affero General Public License
|
17
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
*/
|
19
|
+
|
20
|
+
#include "evoasm-x64.h"
|
21
|
+
#include "evoasm-log.h"
|
22
|
+
|
23
|
+
static const char *_evoasm_log_tag = "x64";
|
24
|
+
|
25
|
+
evoasm_success_t
|
26
|
+
evoasm_x64_get_features(uint64_t *features_) {
|
27
|
+
evoasm_buf_t buf_;
|
28
|
+
evoasm_buf_t *buf = &buf_;
|
29
|
+
evoasm_x64_params_t params = {0};
|
30
|
+
bool retval = true;
|
31
|
+
uint64_t features = 0;
|
32
|
+
|
33
|
+
uint32_t vals[3][2] = {0};
|
34
|
+
|
35
|
+
evoasm_log_debug("Running CPUID...");
|
36
|
+
|
37
|
+
EVOASM_TRY(alloc_failed, evoasm_buf_init, buf, EVOASM_BUF_TYPE_MMAP, 512);
|
38
|
+
EVOASM_TRY(enc_failed, evoasm_x64_emit_func_prolog, EVOASM_X64_ABI_SYSV, buf);
|
39
|
+
|
40
|
+
|
41
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG0, EVOASM_X64_REG_A);
|
42
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_IMM0, 1);
|
43
|
+
EVOASM_X64_ENC(mov_r32_imm32);
|
44
|
+
|
45
|
+
|
46
|
+
EVOASM_X64_ENC(cpuid);
|
47
|
+
|
48
|
+
|
49
|
+
{
|
50
|
+
int64_t addr_imm;
|
51
|
+
addr_imm = (int64_t)(uintptr_t) &vals[0][0];
|
52
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG0, EVOASM_X64_REG_DI);
|
53
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_IMM0, addr_imm);
|
54
|
+
EVOASM_X64_ENC(mov_r64_imm64);
|
55
|
+
|
56
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG1, EVOASM_X64_REG_D);
|
57
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG_BASE, EVOASM_X64_REG_DI);
|
58
|
+
EVOASM_X64_ENC(mov_rm32_r32);
|
59
|
+
EVOASM_X64_UNSET(EVOASM_X64_PARAM_ADDR_SIZE);
|
60
|
+
EVOASM_X64_UNSET(EVOASM_X64_PARAM_REG_BASE);
|
61
|
+
|
62
|
+
}
|
63
|
+
|
64
|
+
{
|
65
|
+
int64_t addr_imm;
|
66
|
+
addr_imm = (int64_t)(uintptr_t) &vals[0][1];
|
67
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG0, EVOASM_X64_REG_DI);
|
68
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_IMM0, addr_imm);
|
69
|
+
EVOASM_X64_ENC(mov_r64_imm64);
|
70
|
+
|
71
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG1, EVOASM_X64_REG_C);
|
72
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG_BASE, EVOASM_X64_REG_DI);
|
73
|
+
EVOASM_X64_ENC(mov_rm32_r32);
|
74
|
+
EVOASM_X64_UNSET(EVOASM_X64_PARAM_ADDR_SIZE);
|
75
|
+
EVOASM_X64_UNSET(EVOASM_X64_PARAM_REG_BASE);
|
76
|
+
|
77
|
+
}
|
78
|
+
|
79
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG0, EVOASM_X64_REG_A);
|
80
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_IMM0, 7);
|
81
|
+
EVOASM_X64_ENC(mov_r32_imm32);
|
82
|
+
|
83
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG0, EVOASM_X64_REG_C);
|
84
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_IMM0, 0);
|
85
|
+
EVOASM_X64_ENC(mov_r32_imm32);
|
86
|
+
|
87
|
+
EVOASM_X64_ENC(cpuid);
|
88
|
+
|
89
|
+
|
90
|
+
{
|
91
|
+
int64_t addr_imm;
|
92
|
+
addr_imm = (int64_t)(uintptr_t) &vals[1][0];
|
93
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG0, EVOASM_X64_REG_DI);
|
94
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_IMM0, addr_imm);
|
95
|
+
EVOASM_X64_ENC(mov_r64_imm64);
|
96
|
+
|
97
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG1, EVOASM_X64_REG_B);
|
98
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG_BASE, EVOASM_X64_REG_DI);
|
99
|
+
EVOASM_X64_ENC(mov_rm32_r32);
|
100
|
+
EVOASM_X64_UNSET(EVOASM_X64_PARAM_ADDR_SIZE);
|
101
|
+
EVOASM_X64_UNSET(EVOASM_X64_PARAM_REG_BASE);
|
102
|
+
|
103
|
+
}
|
104
|
+
|
105
|
+
{
|
106
|
+
int64_t addr_imm;
|
107
|
+
addr_imm = (int64_t)(uintptr_t) &vals[1][1];
|
108
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG0, EVOASM_X64_REG_DI);
|
109
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_IMM0, addr_imm);
|
110
|
+
EVOASM_X64_ENC(mov_r64_imm64);
|
111
|
+
|
112
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG1, EVOASM_X64_REG_C);
|
113
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG_BASE, EVOASM_X64_REG_DI);
|
114
|
+
EVOASM_X64_ENC(mov_rm32_r32);
|
115
|
+
EVOASM_X64_UNSET(EVOASM_X64_PARAM_ADDR_SIZE);
|
116
|
+
EVOASM_X64_UNSET(EVOASM_X64_PARAM_REG_BASE);
|
117
|
+
|
118
|
+
}
|
119
|
+
|
120
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG0, EVOASM_X64_REG_A);
|
121
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_IMM0, 2147483649);
|
122
|
+
EVOASM_X64_ENC(mov_r32_imm32);
|
123
|
+
|
124
|
+
|
125
|
+
EVOASM_X64_ENC(cpuid);
|
126
|
+
|
127
|
+
|
128
|
+
{
|
129
|
+
int64_t addr_imm;
|
130
|
+
addr_imm = (int64_t)(uintptr_t) &vals[2][0];
|
131
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG0, EVOASM_X64_REG_DI);
|
132
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_IMM0, addr_imm);
|
133
|
+
EVOASM_X64_ENC(mov_r64_imm64);
|
134
|
+
|
135
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG1, EVOASM_X64_REG_D);
|
136
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG_BASE, EVOASM_X64_REG_DI);
|
137
|
+
EVOASM_X64_ENC(mov_rm32_r32);
|
138
|
+
EVOASM_X64_UNSET(EVOASM_X64_PARAM_ADDR_SIZE);
|
139
|
+
EVOASM_X64_UNSET(EVOASM_X64_PARAM_REG_BASE);
|
140
|
+
|
141
|
+
}
|
142
|
+
|
143
|
+
{
|
144
|
+
int64_t addr_imm;
|
145
|
+
addr_imm = (int64_t)(uintptr_t) &vals[2][1];
|
146
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG0, EVOASM_X64_REG_DI);
|
147
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_IMM0, addr_imm);
|
148
|
+
EVOASM_X64_ENC(mov_r64_imm64);
|
149
|
+
|
150
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG1, EVOASM_X64_REG_C);
|
151
|
+
EVOASM_X64_SET(EVOASM_X64_PARAM_REG_BASE, EVOASM_X64_REG_DI);
|
152
|
+
EVOASM_X64_ENC(mov_rm32_r32);
|
153
|
+
EVOASM_X64_UNSET(EVOASM_X64_PARAM_ADDR_SIZE);
|
154
|
+
EVOASM_X64_UNSET(EVOASM_X64_PARAM_REG_BASE);
|
155
|
+
|
156
|
+
}
|
157
|
+
|
158
|
+
EVOASM_TRY(enc_failed, evoasm_x64_emit_func_epilog, EVOASM_X64_ABI_SYSV, buf);
|
159
|
+
|
160
|
+
/*evoasm_buf_dump(buf, stderr);*/
|
161
|
+
|
162
|
+
EVOASM_TRY(enc_failed, evoasm_buf_protect, buf, EVOASM_MPROT_MODE_RX);
|
163
|
+
evoasm_buf_exec(buf);
|
164
|
+
|
165
|
+
if(vals[0][0] & (1ull << 8)) {
|
166
|
+
features |= (1ull << EVOASM_X64_FEATURE_CX8);
|
167
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "CX8" EVOASM_ANSI_CODE_RESET);
|
168
|
+
} else {
|
169
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " CX8" EVOASM_ANSI_CODE_RESET);
|
170
|
+
}
|
171
|
+
if(vals[0][0] & (1ull << 15)) {
|
172
|
+
features |= (1ull << EVOASM_X64_FEATURE_CMOV);
|
173
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "CMOV" EVOASM_ANSI_CODE_RESET);
|
174
|
+
} else {
|
175
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " CMOV" EVOASM_ANSI_CODE_RESET);
|
176
|
+
}
|
177
|
+
if(vals[0][0] & (1ull << 23)) {
|
178
|
+
features |= (1ull << EVOASM_X64_FEATURE_MMX);
|
179
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "MMX" EVOASM_ANSI_CODE_RESET);
|
180
|
+
} else {
|
181
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " MMX" EVOASM_ANSI_CODE_RESET);
|
182
|
+
}
|
183
|
+
if(vals[0][0] & (1ull << 25)) {
|
184
|
+
features |= (1ull << EVOASM_X64_FEATURE_SSE);
|
185
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "SSE" EVOASM_ANSI_CODE_RESET);
|
186
|
+
} else {
|
187
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " SSE" EVOASM_ANSI_CODE_RESET);
|
188
|
+
}
|
189
|
+
if(vals[0][0] & (1ull << 26)) {
|
190
|
+
features |= (1ull << EVOASM_X64_FEATURE_SSE2);
|
191
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "SSE2" EVOASM_ANSI_CODE_RESET);
|
192
|
+
} else {
|
193
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " SSE2" EVOASM_ANSI_CODE_RESET);
|
194
|
+
}
|
195
|
+
if(vals[0][1] & (1ull << 0)) {
|
196
|
+
features |= (1ull << EVOASM_X64_FEATURE_SSE3);
|
197
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "SSE3" EVOASM_ANSI_CODE_RESET);
|
198
|
+
} else {
|
199
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " SSE3" EVOASM_ANSI_CODE_RESET);
|
200
|
+
}
|
201
|
+
if(vals[0][1] & (1ull << 1)) {
|
202
|
+
features |= (1ull << EVOASM_X64_FEATURE_PCLMULQDQ);
|
203
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "PCLMULQDQ" EVOASM_ANSI_CODE_RESET);
|
204
|
+
} else {
|
205
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " PCLMULQDQ" EVOASM_ANSI_CODE_RESET);
|
206
|
+
}
|
207
|
+
if(vals[0][1] & (1ull << 9)) {
|
208
|
+
features |= (1ull << EVOASM_X64_FEATURE_SSSE3);
|
209
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "SSSE3" EVOASM_ANSI_CODE_RESET);
|
210
|
+
} else {
|
211
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " SSSE3" EVOASM_ANSI_CODE_RESET);
|
212
|
+
}
|
213
|
+
if(vals[0][1] & (1ull << 12)) {
|
214
|
+
features |= (1ull << EVOASM_X64_FEATURE_FMA);
|
215
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "FMA" EVOASM_ANSI_CODE_RESET);
|
216
|
+
} else {
|
217
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " FMA" EVOASM_ANSI_CODE_RESET);
|
218
|
+
}
|
219
|
+
if(vals[0][1] & (1ull << 13)) {
|
220
|
+
features |= (1ull << EVOASM_X64_FEATURE_CX16);
|
221
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "CX16" EVOASM_ANSI_CODE_RESET);
|
222
|
+
} else {
|
223
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " CX16" EVOASM_ANSI_CODE_RESET);
|
224
|
+
}
|
225
|
+
if(vals[0][1] & (1ull << 19)) {
|
226
|
+
features |= (1ull << EVOASM_X64_FEATURE_SSE4_1);
|
227
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "SSE4_1" EVOASM_ANSI_CODE_RESET);
|
228
|
+
} else {
|
229
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " SSE4_1" EVOASM_ANSI_CODE_RESET);
|
230
|
+
}
|
231
|
+
if(vals[0][1] & (1ull << 20)) {
|
232
|
+
features |= (1ull << EVOASM_X64_FEATURE_SSE4_2);
|
233
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "SSE4_2" EVOASM_ANSI_CODE_RESET);
|
234
|
+
} else {
|
235
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " SSE4_2" EVOASM_ANSI_CODE_RESET);
|
236
|
+
}
|
237
|
+
if(vals[0][1] & (1ull << 22)) {
|
238
|
+
features |= (1ull << EVOASM_X64_FEATURE_MOVBE);
|
239
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "MOVBE" EVOASM_ANSI_CODE_RESET);
|
240
|
+
} else {
|
241
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " MOVBE" EVOASM_ANSI_CODE_RESET);
|
242
|
+
}
|
243
|
+
if(vals[0][1] & (1ull << 23)) {
|
244
|
+
features |= (1ull << EVOASM_X64_FEATURE_POPCNT);
|
245
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "POPCNT" EVOASM_ANSI_CODE_RESET);
|
246
|
+
} else {
|
247
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " POPCNT" EVOASM_ANSI_CODE_RESET);
|
248
|
+
}
|
249
|
+
if(vals[0][1] & (1ull << 25)) {
|
250
|
+
features |= (1ull << EVOASM_X64_FEATURE_AES);
|
251
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "AES" EVOASM_ANSI_CODE_RESET);
|
252
|
+
} else {
|
253
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " AES" EVOASM_ANSI_CODE_RESET);
|
254
|
+
}
|
255
|
+
if(vals[0][1] & (1ull << 28)) {
|
256
|
+
features |= (1ull << EVOASM_X64_FEATURE_AVX);
|
257
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "AVX" EVOASM_ANSI_CODE_RESET);
|
258
|
+
} else {
|
259
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " AVX" EVOASM_ANSI_CODE_RESET);
|
260
|
+
}
|
261
|
+
if(vals[0][1] & (1ull << 29)) {
|
262
|
+
features |= (1ull << EVOASM_X64_FEATURE_F16C);
|
263
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "F16C" EVOASM_ANSI_CODE_RESET);
|
264
|
+
} else {
|
265
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " F16C" EVOASM_ANSI_CODE_RESET);
|
266
|
+
}
|
267
|
+
if(vals[0][1] & (1ull << 30)) {
|
268
|
+
features |= (1ull << EVOASM_X64_FEATURE_RDRAND);
|
269
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "RDRAND" EVOASM_ANSI_CODE_RESET);
|
270
|
+
} else {
|
271
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " RDRAND" EVOASM_ANSI_CODE_RESET);
|
272
|
+
}
|
273
|
+
if(vals[1][0] & (1ull << 3)) {
|
274
|
+
features |= (1ull << EVOASM_X64_FEATURE_BMI1);
|
275
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "BMI1" EVOASM_ANSI_CODE_RESET);
|
276
|
+
} else {
|
277
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " BMI1" EVOASM_ANSI_CODE_RESET);
|
278
|
+
}
|
279
|
+
if(vals[1][0] & (1ull << 5)) {
|
280
|
+
features |= (1ull << EVOASM_X64_FEATURE_AVX2);
|
281
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "AVX2" EVOASM_ANSI_CODE_RESET);
|
282
|
+
} else {
|
283
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " AVX2" EVOASM_ANSI_CODE_RESET);
|
284
|
+
}
|
285
|
+
if(vals[1][0] & (1ull << 8)) {
|
286
|
+
features |= (1ull << EVOASM_X64_FEATURE_BMI2);
|
287
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "BMI2" EVOASM_ANSI_CODE_RESET);
|
288
|
+
} else {
|
289
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " BMI2" EVOASM_ANSI_CODE_RESET);
|
290
|
+
}
|
291
|
+
if(vals[1][0] & (1ull << 11)) {
|
292
|
+
features |= (1ull << EVOASM_X64_FEATURE_RTM);
|
293
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "RTM" EVOASM_ANSI_CODE_RESET);
|
294
|
+
} else {
|
295
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " RTM" EVOASM_ANSI_CODE_RESET);
|
296
|
+
}
|
297
|
+
if(vals[1][0] & (1ull << 18)) {
|
298
|
+
features |= (1ull << EVOASM_X64_FEATURE_RDSEED);
|
299
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "RDSEED" EVOASM_ANSI_CODE_RESET);
|
300
|
+
} else {
|
301
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " RDSEED" EVOASM_ANSI_CODE_RESET);
|
302
|
+
}
|
303
|
+
if(vals[1][0] & (1ull << 19)) {
|
304
|
+
features |= (1ull << EVOASM_X64_FEATURE_ADX);
|
305
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "ADX" EVOASM_ANSI_CODE_RESET);
|
306
|
+
} else {
|
307
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " ADX" EVOASM_ANSI_CODE_RESET);
|
308
|
+
}
|
309
|
+
if(vals[1][0] & (1ull << 23)) {
|
310
|
+
features |= (1ull << EVOASM_X64_FEATURE_CLFLUSHOPT);
|
311
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "CLFLUSHOPT" EVOASM_ANSI_CODE_RESET);
|
312
|
+
} else {
|
313
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " CLFLUSHOPT" EVOASM_ANSI_CODE_RESET);
|
314
|
+
}
|
315
|
+
if(vals[1][0] & (1ull << 28)) {
|
316
|
+
features |= (1ull << EVOASM_X64_FEATURE_SHA);
|
317
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "SHA" EVOASM_ANSI_CODE_RESET);
|
318
|
+
} else {
|
319
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " SHA" EVOASM_ANSI_CODE_RESET);
|
320
|
+
}
|
321
|
+
if(vals[1][1] & (1ull << 0)) {
|
322
|
+
features |= (1ull << EVOASM_X64_FEATURE_PREFETCHWT1);
|
323
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "PREFETCHWT1" EVOASM_ANSI_CODE_RESET);
|
324
|
+
} else {
|
325
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " PREFETCHWT1" EVOASM_ANSI_CODE_RESET);
|
326
|
+
}
|
327
|
+
if(vals[2][1] & (1ull << 0)) {
|
328
|
+
features |= (1ull << EVOASM_X64_FEATURE_LAHF_LM);
|
329
|
+
evoasm_log_info("Found support for " EVOASM_ANSI_CODE_GREEN "LAHF_LM" EVOASM_ANSI_CODE_RESET);
|
330
|
+
} else {
|
331
|
+
evoasm_log_info("Missing support for " EVOASM_ANSI_CODE_RED " LAHF_LM" EVOASM_ANSI_CODE_RESET);
|
332
|
+
}
|
333
|
+
|
334
|
+
|
335
|
+
*features_ = features;
|
336
|
+
|
337
|
+
cleanup:
|
338
|
+
EVOASM_TRY(destroy_failed, evoasm_buf_destroy, buf);
|
339
|
+
return retval;
|
340
|
+
enc_failed:
|
341
|
+
retval = false;
|
342
|
+
goto cleanup;
|
343
|
+
destroy_failed:
|
344
|
+
return false;
|
345
|
+
alloc_failed:
|
346
|
+
return false;
|
347
|
+
}
|
348
|
+
|
@@ -0,0 +1,93 @@
|
|
1
|
+
/* vim: set filetype=c: */
|
2
|
+
/* AUTOGENERATED FILE, DO NOT EDIT */
|
3
|
+
|
4
|
+
/*
|
5
|
+
* Copyright (C) 2016 Julian Aron Prenner <jap@polyadic.com>
|
6
|
+
*
|
7
|
+
* This program is free software: you can redistribute it and/or modify
|
8
|
+
* it under the terms of the GNU Affero General Public License as published by
|
9
|
+
* the Free Software Foundation, either version 3 of the License, or
|
10
|
+
* (at your option) any later version.
|
11
|
+
*
|
12
|
+
* This program is distributed in the hope that it will be useful,
|
13
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
* GNU Affero General Public License for more details.
|
16
|
+
*
|
17
|
+
* You should have received a copy of the GNU Affero General Public License
|
18
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
19
|
+
*/
|
20
|
+
|
21
|
+
#pragma once
|
22
|
+
|
23
|
+
static inline evoasm_x64_reg_type_t
|
24
|
+
evoasm_x64_get_reg_type(evoasm_x64_reg_id_t reg) {
|
25
|
+
switch(reg) {
|
26
|
+
case EVOASM_X64_REG_IP: return EVOASM_X64_REG_TYPE_IP;
|
27
|
+
case EVOASM_X64_REG_RFLAGS: return EVOASM_X64_REG_TYPE_RFLAGS;
|
28
|
+
case EVOASM_X64_REG_MXCSR: return EVOASM_X64_REG_TYPE_MXCSR;
|
29
|
+
case EVOASM_X64_REG_A: return EVOASM_X64_REG_TYPE_GP;
|
30
|
+
case EVOASM_X64_REG_C: return EVOASM_X64_REG_TYPE_GP;
|
31
|
+
case EVOASM_X64_REG_D: return EVOASM_X64_REG_TYPE_GP;
|
32
|
+
case EVOASM_X64_REG_B: return EVOASM_X64_REG_TYPE_GP;
|
33
|
+
case EVOASM_X64_REG_SP: return EVOASM_X64_REG_TYPE_GP;
|
34
|
+
case EVOASM_X64_REG_BP: return EVOASM_X64_REG_TYPE_GP;
|
35
|
+
case EVOASM_X64_REG_SI: return EVOASM_X64_REG_TYPE_GP;
|
36
|
+
case EVOASM_X64_REG_DI: return EVOASM_X64_REG_TYPE_GP;
|
37
|
+
case EVOASM_X64_REG_8: return EVOASM_X64_REG_TYPE_GP;
|
38
|
+
case EVOASM_X64_REG_9: return EVOASM_X64_REG_TYPE_GP;
|
39
|
+
case EVOASM_X64_REG_10: return EVOASM_X64_REG_TYPE_GP;
|
40
|
+
case EVOASM_X64_REG_11: return EVOASM_X64_REG_TYPE_GP;
|
41
|
+
case EVOASM_X64_REG_12: return EVOASM_X64_REG_TYPE_GP;
|
42
|
+
case EVOASM_X64_REG_13: return EVOASM_X64_REG_TYPE_GP;
|
43
|
+
case EVOASM_X64_REG_14: return EVOASM_X64_REG_TYPE_GP;
|
44
|
+
case EVOASM_X64_REG_15: return EVOASM_X64_REG_TYPE_GP;
|
45
|
+
case EVOASM_X64_REG_MM0: return EVOASM_X64_REG_TYPE_MM;
|
46
|
+
case EVOASM_X64_REG_MM1: return EVOASM_X64_REG_TYPE_MM;
|
47
|
+
case EVOASM_X64_REG_MM2: return EVOASM_X64_REG_TYPE_MM;
|
48
|
+
case EVOASM_X64_REG_MM3: return EVOASM_X64_REG_TYPE_MM;
|
49
|
+
case EVOASM_X64_REG_MM4: return EVOASM_X64_REG_TYPE_MM;
|
50
|
+
case EVOASM_X64_REG_MM5: return EVOASM_X64_REG_TYPE_MM;
|
51
|
+
case EVOASM_X64_REG_MM6: return EVOASM_X64_REG_TYPE_MM;
|
52
|
+
case EVOASM_X64_REG_MM7: return EVOASM_X64_REG_TYPE_MM;
|
53
|
+
case EVOASM_X64_REG_XMM0: return EVOASM_X64_REG_TYPE_XMM;
|
54
|
+
case EVOASM_X64_REG_XMM1: return EVOASM_X64_REG_TYPE_XMM;
|
55
|
+
case EVOASM_X64_REG_XMM2: return EVOASM_X64_REG_TYPE_XMM;
|
56
|
+
case EVOASM_X64_REG_XMM3: return EVOASM_X64_REG_TYPE_XMM;
|
57
|
+
case EVOASM_X64_REG_XMM4: return EVOASM_X64_REG_TYPE_XMM;
|
58
|
+
case EVOASM_X64_REG_XMM5: return EVOASM_X64_REG_TYPE_XMM;
|
59
|
+
case EVOASM_X64_REG_XMM6: return EVOASM_X64_REG_TYPE_XMM;
|
60
|
+
case EVOASM_X64_REG_XMM7: return EVOASM_X64_REG_TYPE_XMM;
|
61
|
+
case EVOASM_X64_REG_XMM8: return EVOASM_X64_REG_TYPE_XMM;
|
62
|
+
case EVOASM_X64_REG_XMM9: return EVOASM_X64_REG_TYPE_XMM;
|
63
|
+
case EVOASM_X64_REG_XMM10: return EVOASM_X64_REG_TYPE_XMM;
|
64
|
+
case EVOASM_X64_REG_XMM11: return EVOASM_X64_REG_TYPE_XMM;
|
65
|
+
case EVOASM_X64_REG_XMM12: return EVOASM_X64_REG_TYPE_XMM;
|
66
|
+
case EVOASM_X64_REG_XMM13: return EVOASM_X64_REG_TYPE_XMM;
|
67
|
+
case EVOASM_X64_REG_XMM14: return EVOASM_X64_REG_TYPE_XMM;
|
68
|
+
case EVOASM_X64_REG_XMM15: return EVOASM_X64_REG_TYPE_XMM;
|
69
|
+
case EVOASM_X64_REG_ZMM16: return EVOASM_X64_REG_TYPE_ZMM;
|
70
|
+
case EVOASM_X64_REG_ZMM17: return EVOASM_X64_REG_TYPE_ZMM;
|
71
|
+
case EVOASM_X64_REG_ZMM18: return EVOASM_X64_REG_TYPE_ZMM;
|
72
|
+
case EVOASM_X64_REG_ZMM19: return EVOASM_X64_REG_TYPE_ZMM;
|
73
|
+
case EVOASM_X64_REG_ZMM20: return EVOASM_X64_REG_TYPE_ZMM;
|
74
|
+
case EVOASM_X64_REG_ZMM21: return EVOASM_X64_REG_TYPE_ZMM;
|
75
|
+
case EVOASM_X64_REG_ZMM22: return EVOASM_X64_REG_TYPE_ZMM;
|
76
|
+
case EVOASM_X64_REG_ZMM23: return EVOASM_X64_REG_TYPE_ZMM;
|
77
|
+
case EVOASM_X64_REG_ZMM24: return EVOASM_X64_REG_TYPE_ZMM;
|
78
|
+
case EVOASM_X64_REG_ZMM25: return EVOASM_X64_REG_TYPE_ZMM;
|
79
|
+
case EVOASM_X64_REG_ZMM26: return EVOASM_X64_REG_TYPE_ZMM;
|
80
|
+
case EVOASM_X64_REG_ZMM27: return EVOASM_X64_REG_TYPE_ZMM;
|
81
|
+
case EVOASM_X64_REG_ZMM28: return EVOASM_X64_REG_TYPE_ZMM;
|
82
|
+
case EVOASM_X64_REG_ZMM29: return EVOASM_X64_REG_TYPE_ZMM;
|
83
|
+
case EVOASM_X64_REG_ZMM30: return EVOASM_X64_REG_TYPE_ZMM;
|
84
|
+
case EVOASM_X64_REG_ZMM31: return EVOASM_X64_REG_TYPE_ZMM;
|
85
|
+
default: evoasm_assert_not_reached();
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
evoasm_success_t
|
90
|
+
evoasm_x64_get_features(uint64_t *features);
|
91
|
+
|
92
|
+
#define EVOASM_X64_INSTS_VAR_NAME _evoasm_x64_insts
|
93
|
+
|
@@ -0,0 +1,51 @@
|
|
1
|
+
/* AUTOGENERATED FILE, DO NOT EDIT */
|
2
|
+
|
3
|
+
/*
|
4
|
+
* Copyright (C) 2016 Julian Aron Prenner <jap@polyadic.com>
|
5
|
+
*
|
6
|
+
* This program is free software: you can redistribute it and/or modify
|
7
|
+
* it under the terms of the GNU Affero General Public License as published by
|
8
|
+
* the Free Software Foundation, either version 3 of the License, or
|
9
|
+
* (at your option) any later version.
|
10
|
+
*
|
11
|
+
* This program is distributed in the hope that it will be useful,
|
12
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
* GNU Affero General Public License for more details.
|
15
|
+
*
|
16
|
+
* You should have received a copy of the GNU Affero General Public License
|
17
|
+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
*/
|
19
|
+
|
20
|
+
|
21
|
+
#include "evoasm-x64.h"
|
22
|
+
|
23
|
+
void evoasm_x64_params_set(evoasm_x64_params_t * params, evoasm_x64_param_id_t param, int64_t param_val) {
|
24
|
+
evoasm_x64_params_set_(params, param, param_val );
|
25
|
+
}
|
26
|
+
|
27
|
+
void evoasm_x64_basic_params_set(evoasm_x64_basic_params_t * params, evoasm_x64_basic_param_id_t param, int64_t param_val) {
|
28
|
+
evoasm_x64_basic_params_set_(params, param, param_val );
|
29
|
+
}
|
30
|
+
int64_t evoasm_x64_params_get(evoasm_x64_params_t * params, evoasm_x64_param_id_t param) {
|
31
|
+
return evoasm_x64_params_get_(params, param );
|
32
|
+
}
|
33
|
+
|
34
|
+
int64_t evoasm_x64_basic_params_get(evoasm_x64_basic_params_t * params, evoasm_x64_basic_param_id_t param) {
|
35
|
+
return evoasm_x64_basic_params_get_(params, param );
|
36
|
+
}
|
37
|
+
void evoasm_x64_params_unset(evoasm_x64_params_t * params, evoasm_x64_param_id_t param) {
|
38
|
+
evoasm_x64_params_unset_(params, param );
|
39
|
+
}
|
40
|
+
|
41
|
+
void evoasm_x64_basic_params_unset(evoasm_x64_basic_params_t * params, evoasm_x64_basic_param_id_t param) {
|
42
|
+
evoasm_x64_basic_params_unset_(params, param );
|
43
|
+
}
|
44
|
+
evoasm_x64_param_type_t evoasm_x64_params_get_type(evoasm_x64_param_id_t param) {
|
45
|
+
return evoasm_x64_params_get_type_(param );
|
46
|
+
}
|
47
|
+
|
48
|
+
evoasm_x64_param_type_t evoasm_x64_basic_params_get_type(evoasm_x64_basic_param_id_t param) {
|
49
|
+
return evoasm_x64_basic_params_get_type_(param );
|
50
|
+
}
|
51
|
+
|