mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 21:38:32 +08:00
perf/core improvements and fixes:
User visible: - Use PERF_RECORD_SWITCH when available in intel-pt, instead of "sched:sched_switch" events, enabling an unprivileged user to trace multi-threaded or multi-process workloads (Adrian Hunter) - Always use non inlined file name for 'srcfile' sort key (Andi Kleen) - Quieten failed to read counter message, helps in systems without backend-stalled-cycles (Andi Kleen) Infrastructure: - Add a 'perf test' entry for decoding of new x86 instructions (Adrian Hunter) - Add new instructions (sha, clflushopt, clwb, pcommit, rdpkru, wrpkru, xsavec, xsaves, xrstors) to the x86 instruction decoder (Adrian Hunter) - Add a build test to warn when source code drifts happen for the instruction decoder files in the kernel and in tools/perf (Adrian Hunter) - Copy linux/filter.h to tools/include (He Kuang) - Support function __get_dynamic_array_len in libtraceevent (He Kuanguuu) - Tracing path finding/mounting/error reporting refactorings (Jiri Olsa) - Store CPU socket and core IDs in perf.data (Kan Liang) - Reorganize add/del probe insertion routines in 'perf probe' (Namhyung Kim, Wang Nan) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJV6ciXAAoJENZQFvNTUqpAyQwP/0X+yVHyXFbwsLQSWtESeu/V HCgep/4CA6dTG/Si6bIVqQpVAQ3446tTP4L1OlKB4qvkO2iQdXTm/oGfzkLAuvsf sbl6//fyDQrMEDWhJYs/0C2aNVc6viSd3nYZTwtkM4Khs9L3QMDBCHfFxgETOq66 KKtddMc74qQTkSAC+xNCGoIL9bOrud414kM+XZ5XtrKwHHj4DUqIl8v39giGi/TI Gu4vr+NuVtY8PHi1ApOT1GY4laAgbOmf4ITa+e2QwxtSybQvBwhLZwvLs1gTSjih u45Qk3yJNYbExwVILV8gN/J8Uy2RqBZz6dlR4ejTeMF/YHAJZAct5ZCT0ebZI4+2 P4eqg4C0rE9z9EZWpa/hM21QTMOHd9zXn3NLPZXd209VrFRvxWqcXhLg7qBtQjMS JQBZbszv/tD3wmCZWG1uyzFWsTimiutm8XUfXV5e1UPGpk5G8ZthTtouq+J2L3Yq U4Spaox76eVEGFFBAEt7eBQVjZMDa68/telhQb9bnmGffpth5rnEf75L7bhuLznj dtudYN+FaXT7BkljvyxlUdM3RLR3zN4FmrXCKRjKa8hgFMM8qOh/uL6C05CBx5hT 4flaE02K2xc3TaY/FshB7EZRpBEWuYz0ITum6IKB+SxvdT3yVKHrQWbXdTXqSFMa 7BuYILR9CcKGQmXrWliy =uRtf -----END PGP SIGNATURE----- Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo: User visible changes: - Use PERF_RECORD_SWITCH when available in intel-pt, instead of "sched:sched_switch" events, enabling an unprivileged user to trace multi-threaded or multi-process workloads. (Adrian Hunter) - Always use non inlined file name for 'srcfile' sort key. (Andi Kleen) - Quieten failed to read counter message, helps in systems without backend-stalled-cycles. (Andi Kleen) Infrastructure changes: - Add a 'perf test' entry for decoding of new x86 instructions. (Adrian Hunter) - Add new instructions (sha, clflushopt, clwb, pcommit, rdpkru, wrpkru, xsavec, xsaves, xrstors) to the x86 instruction decoder. (Adrian Hunter) - Add a build test to warn when source code drifts happen for the instruction decoder files in the kernel and in tools/perf. (Adrian Hunter) - Copy linux/filter.h to tools/include. (He Kuang) - Support function __get_dynamic_array_len in libtraceevent. (He Kuanguuu) - Tracing path finding/mounting/error reporting refactorings. (Jiri Olsa) - Store CPU socket and core IDs in perf.data. (Kan Liang) - Reorganize add/del probe insertion routines in 'perf probe'. (Namhyung Kim, Wang Nan) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
commit
3bd7617596
@ -353,8 +353,12 @@ AVXcode: 1
|
||||
17: vmovhps Mq,Vq (v1) | vmovhpd Mq,Vq (66),(v1)
|
||||
18: Grp16 (1A)
|
||||
19:
|
||||
1a: BNDCL Ev,Gv | BNDCU Ev,Gv | BNDMOV Gv,Ev | BNDLDX Gv,Ev,Gv
|
||||
1b: BNDCN Ev,Gv | BNDMOV Ev,Gv | BNDMK Gv,Ev | BNDSTX Ev,GV,Gv
|
||||
# Intel SDM opcode map does not list MPX instructions. For now using Gv for
|
||||
# bnd registers and Ev for everything else is OK because the instruction
|
||||
# decoder does not use the information except as an indication that there is
|
||||
# a ModR/M byte.
|
||||
1a: BNDCL Gv,Ev (F3) | BNDCU Gv,Ev (F2) | BNDMOV Gv,Ev (66) | BNDLDX Gv,Ev
|
||||
1b: BNDCN Gv,Ev (F2) | BNDMOV Ev,Gv (66) | BNDMK Gv,Ev (F3) | BNDSTX Ev,Gv
|
||||
1c:
|
||||
1d:
|
||||
1e:
|
||||
@ -732,6 +736,12 @@ bd: vfnmadd231ss/d Vx,Hx,Wx (66),(v),(v1)
|
||||
be: vfnmsub231ps/d Vx,Hx,Wx (66),(v)
|
||||
bf: vfnmsub231ss/d Vx,Hx,Wx (66),(v),(v1)
|
||||
# 0x0f 0x38 0xc0-0xff
|
||||
c8: sha1nexte Vdq,Wdq
|
||||
c9: sha1msg1 Vdq,Wdq
|
||||
ca: sha1msg2 Vdq,Wdq
|
||||
cb: sha256rnds2 Vdq,Wdq
|
||||
cc: sha256msg1 Vdq,Wdq
|
||||
cd: sha256msg2 Vdq,Wdq
|
||||
db: VAESIMC Vdq,Wdq (66),(v1)
|
||||
dc: VAESENC Vdq,Hdq,Wdq (66),(v1)
|
||||
dd: VAESENCLAST Vdq,Hdq,Wdq (66),(v1)
|
||||
@ -790,6 +800,7 @@ AVXcode: 3
|
||||
61: vpcmpestri Vdq,Wdq,Ib (66),(v1)
|
||||
62: vpcmpistrm Vdq,Wdq,Ib (66),(v1)
|
||||
63: vpcmpistri Vdq,Wdq,Ib (66),(v1)
|
||||
cc: sha1rnds4 Vdq,Wdq,Ib
|
||||
df: VAESKEYGEN Vdq,Wdq,Ib (66),(v1)
|
||||
f0: RORX Gy,Ey,Ib (F2),(v)
|
||||
EndTable
|
||||
@ -874,7 +885,7 @@ GrpTable: Grp7
|
||||
2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B)
|
||||
3: LIDT Ms
|
||||
4: SMSW Mw/Rv
|
||||
5:
|
||||
5: rdpkru (110),(11B) | wrpkru (111),(11B)
|
||||
6: LMSW Ew
|
||||
7: INVLPG Mb | SWAPGS (o64),(000),(11B) | RDTSCP (001),(11B)
|
||||
EndTable
|
||||
@ -888,6 +899,9 @@ EndTable
|
||||
|
||||
GrpTable: Grp9
|
||||
1: CMPXCHG8B/16B Mq/Mdq
|
||||
3: xrstors
|
||||
4: xsavec
|
||||
5: xsaves
|
||||
6: VMPTRLD Mq | VMCLEAR Mq (66) | VMXON Mq (F3) | RDRAND Rv (11B)
|
||||
7: VMPTRST Mq | VMPTRST Mq (F3) | RDSEED Rv (11B)
|
||||
EndTable
|
||||
@ -932,8 +946,8 @@ GrpTable: Grp15
|
||||
3: vstmxcsr Md (v1) | WRGSBASE Ry (F3),(11B)
|
||||
4: XSAVE
|
||||
5: XRSTOR | lfence (11B)
|
||||
6: XSAVEOPT | mfence (11B)
|
||||
7: clflush | sfence (11B)
|
||||
6: XSAVEOPT | clwb (66) | mfence (11B)
|
||||
7: clflush | clflushopt (66) | sfence (11B) | pcommit (66),(11B)
|
||||
EndTable
|
||||
|
||||
GrpTable: Grp16
|
||||
|
231
tools/include/linux/filter.h
Normal file
231
tools/include/linux/filter.h
Normal file
@ -0,0 +1,231 @@
|
||||
/*
|
||||
* Linux Socket Filter Data Structures
|
||||
*/
|
||||
#ifndef __TOOLS_LINUX_FILTER_H
|
||||
#define __TOOLS_LINUX_FILTER_H
|
||||
|
||||
#include <linux/bpf.h>
|
||||
|
||||
/* ArgX, context and stack frame pointer register positions. Note,
|
||||
* Arg1, Arg2, Arg3, etc are used as argument mappings of function
|
||||
* calls in BPF_CALL instruction.
|
||||
*/
|
||||
#define BPF_REG_ARG1 BPF_REG_1
|
||||
#define BPF_REG_ARG2 BPF_REG_2
|
||||
#define BPF_REG_ARG3 BPF_REG_3
|
||||
#define BPF_REG_ARG4 BPF_REG_4
|
||||
#define BPF_REG_ARG5 BPF_REG_5
|
||||
#define BPF_REG_CTX BPF_REG_6
|
||||
#define BPF_REG_FP BPF_REG_10
|
||||
|
||||
/* Additional register mappings for converted user programs. */
|
||||
#define BPF_REG_A BPF_REG_0
|
||||
#define BPF_REG_X BPF_REG_7
|
||||
#define BPF_REG_TMP BPF_REG_8
|
||||
|
||||
/* BPF program can access up to 512 bytes of stack space. */
|
||||
#define MAX_BPF_STACK 512
|
||||
|
||||
/* Helper macros for filter block array initializers. */
|
||||
|
||||
/* ALU ops on registers, bpf_add|sub|...: dst_reg += src_reg */
|
||||
|
||||
#define BPF_ALU64_REG(OP, DST, SRC) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ALU64 | BPF_OP(OP) | BPF_X, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = SRC, \
|
||||
.off = 0, \
|
||||
.imm = 0 })
|
||||
|
||||
#define BPF_ALU32_REG(OP, DST, SRC) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ALU | BPF_OP(OP) | BPF_X, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = SRC, \
|
||||
.off = 0, \
|
||||
.imm = 0 })
|
||||
|
||||
/* ALU ops on immediates, bpf_add|sub|...: dst_reg += imm32 */
|
||||
|
||||
#define BPF_ALU64_IMM(OP, DST, IMM) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ALU64 | BPF_OP(OP) | BPF_K, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = 0, \
|
||||
.off = 0, \
|
||||
.imm = IMM })
|
||||
|
||||
#define BPF_ALU32_IMM(OP, DST, IMM) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ALU | BPF_OP(OP) | BPF_K, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = 0, \
|
||||
.off = 0, \
|
||||
.imm = IMM })
|
||||
|
||||
/* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */
|
||||
|
||||
#define BPF_ENDIAN(TYPE, DST, LEN) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ALU | BPF_END | BPF_SRC(TYPE), \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = 0, \
|
||||
.off = 0, \
|
||||
.imm = LEN })
|
||||
|
||||
/* Short form of mov, dst_reg = src_reg */
|
||||
|
||||
#define BPF_MOV64_REG(DST, SRC) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ALU64 | BPF_MOV | BPF_X, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = SRC, \
|
||||
.off = 0, \
|
||||
.imm = 0 })
|
||||
|
||||
#define BPF_MOV32_REG(DST, SRC) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ALU | BPF_MOV | BPF_X, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = SRC, \
|
||||
.off = 0, \
|
||||
.imm = 0 })
|
||||
|
||||
/* Short form of mov, dst_reg = imm32 */
|
||||
|
||||
#define BPF_MOV64_IMM(DST, IMM) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ALU64 | BPF_MOV | BPF_K, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = 0, \
|
||||
.off = 0, \
|
||||
.imm = IMM })
|
||||
|
||||
#define BPF_MOV32_IMM(DST, IMM) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ALU | BPF_MOV | BPF_K, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = 0, \
|
||||
.off = 0, \
|
||||
.imm = IMM })
|
||||
|
||||
/* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */
|
||||
|
||||
#define BPF_MOV64_RAW(TYPE, DST, SRC, IMM) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ALU64 | BPF_MOV | BPF_SRC(TYPE), \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = SRC, \
|
||||
.off = 0, \
|
||||
.imm = IMM })
|
||||
|
||||
#define BPF_MOV32_RAW(TYPE, DST, SRC, IMM) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ALU | BPF_MOV | BPF_SRC(TYPE), \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = SRC, \
|
||||
.off = 0, \
|
||||
.imm = IMM })
|
||||
|
||||
/* Direct packet access, R0 = *(uint *) (skb->data + imm32) */
|
||||
|
||||
#define BPF_LD_ABS(SIZE, IMM) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_LD | BPF_SIZE(SIZE) | BPF_ABS, \
|
||||
.dst_reg = 0, \
|
||||
.src_reg = 0, \
|
||||
.off = 0, \
|
||||
.imm = IMM })
|
||||
|
||||
/* Indirect packet access, R0 = *(uint *) (skb->data + src_reg + imm32) */
|
||||
|
||||
#define BPF_LD_IND(SIZE, SRC, IMM) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_LD | BPF_SIZE(SIZE) | BPF_IND, \
|
||||
.dst_reg = 0, \
|
||||
.src_reg = SRC, \
|
||||
.off = 0, \
|
||||
.imm = IMM })
|
||||
|
||||
/* Memory load, dst_reg = *(uint *) (src_reg + off16) */
|
||||
|
||||
#define BPF_LDX_MEM(SIZE, DST, SRC, OFF) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_LDX | BPF_SIZE(SIZE) | BPF_MEM, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = SRC, \
|
||||
.off = OFF, \
|
||||
.imm = 0 })
|
||||
|
||||
/* Memory store, *(uint *) (dst_reg + off16) = src_reg */
|
||||
|
||||
#define BPF_STX_MEM(SIZE, DST, SRC, OFF) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_STX | BPF_SIZE(SIZE) | BPF_MEM, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = SRC, \
|
||||
.off = OFF, \
|
||||
.imm = 0 })
|
||||
|
||||
/* Memory store, *(uint *) (dst_reg + off16) = imm32 */
|
||||
|
||||
#define BPF_ST_MEM(SIZE, DST, OFF, IMM) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_ST | BPF_SIZE(SIZE) | BPF_MEM, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = 0, \
|
||||
.off = OFF, \
|
||||
.imm = IMM })
|
||||
|
||||
/* Conditional jumps against registers, if (dst_reg 'op' src_reg) goto pc + off16 */
|
||||
|
||||
#define BPF_JMP_REG(OP, DST, SRC, OFF) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_JMP | BPF_OP(OP) | BPF_X, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = SRC, \
|
||||
.off = OFF, \
|
||||
.imm = 0 })
|
||||
|
||||
/* Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + off16 */
|
||||
|
||||
#define BPF_JMP_IMM(OP, DST, IMM, OFF) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_JMP | BPF_OP(OP) | BPF_K, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = 0, \
|
||||
.off = OFF, \
|
||||
.imm = IMM })
|
||||
|
||||
/* Function call */
|
||||
|
||||
#define BPF_EMIT_CALL(FUNC) \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_JMP | BPF_CALL, \
|
||||
.dst_reg = 0, \
|
||||
.src_reg = 0, \
|
||||
.off = 0, \
|
||||
.imm = ((FUNC) - BPF_FUNC_unspec) })
|
||||
|
||||
/* Raw code statement block */
|
||||
|
||||
#define BPF_RAW_INSN(CODE, DST, SRC, OFF, IMM) \
|
||||
((struct bpf_insn) { \
|
||||
.code = CODE, \
|
||||
.dst_reg = DST, \
|
||||
.src_reg = SRC, \
|
||||
.off = OFF, \
|
||||
.imm = IMM })
|
||||
|
||||
/* Program exit */
|
||||
|
||||
#define BPF_EXIT_INSN() \
|
||||
((struct bpf_insn) { \
|
||||
.code = BPF_JMP | BPF_EXIT, \
|
||||
.dst_reg = 0, \
|
||||
.src_reg = 0, \
|
||||
.off = 0, \
|
||||
.imm = 0 })
|
||||
|
||||
#endif /* __TOOLS_LINUX_FILTER_H */
|
@ -1,4 +1,5 @@
|
||||
libapi-y += fs.o
|
||||
libapi-y += tracing_path.o
|
||||
libapi-y += debugfs.o
|
||||
libapi-y += findfs.o
|
||||
libapi-y += tracefs.o
|
||||
|
@ -75,55 +75,3 @@ char *debugfs_mount(const char *mountpoint)
|
||||
out:
|
||||
return debugfs_mountpoint;
|
||||
}
|
||||
|
||||
int debugfs__strerror_open(int err, char *buf, size_t size, const char *filename)
|
||||
{
|
||||
char sbuf[128];
|
||||
|
||||
switch (err) {
|
||||
case ENOENT:
|
||||
if (debugfs_found) {
|
||||
snprintf(buf, size,
|
||||
"Error:\tFile %s/%s not found.\n"
|
||||
"Hint:\tPerhaps this kernel misses some CONFIG_ setting to enable this feature?.\n",
|
||||
debugfs_mountpoint, filename);
|
||||
break;
|
||||
}
|
||||
snprintf(buf, size, "%s",
|
||||
"Error:\tUnable to find debugfs\n"
|
||||
"Hint:\tWas your kernel compiled with debugfs support?\n"
|
||||
"Hint:\tIs the debugfs filesystem mounted?\n"
|
||||
"Hint:\tTry 'sudo mount -t debugfs nodev /sys/kernel/debug'");
|
||||
break;
|
||||
case EACCES: {
|
||||
const char *mountpoint = debugfs_mountpoint;
|
||||
|
||||
if (!access(debugfs_mountpoint, R_OK) && strncmp(filename, "tracing/", 8) == 0) {
|
||||
const char *tracefs_mntpoint = tracefs_find_mountpoint();
|
||||
|
||||
if (tracefs_mntpoint)
|
||||
mountpoint = tracefs_mntpoint;
|
||||
}
|
||||
|
||||
snprintf(buf, size,
|
||||
"Error:\tNo permissions to read %s/%s\n"
|
||||
"Hint:\tTry 'sudo mount -o remount,mode=755 %s'\n",
|
||||
debugfs_mountpoint, filename, mountpoint);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
snprintf(buf, size, "%s", strerror_r(err, sbuf, sizeof(sbuf)));
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int debugfs__strerror_open_tp(int err, char *buf, size_t size, const char *sys, const char *name)
|
||||
{
|
||||
char path[PATH_MAX];
|
||||
|
||||
snprintf(path, PATH_MAX, "tracing/events/%s/%s", sys, name ?: "*");
|
||||
|
||||
return debugfs__strerror_open(err, buf, size, path);
|
||||
}
|
||||
|
@ -1,5 +1,3 @@
|
||||
/* TODO merge/factor in debugfs.c here */
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <stdbool.h>
|
||||
@ -11,10 +9,30 @@
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mount.h>
|
||||
|
||||
#include "debugfs.h"
|
||||
#include "fs.h"
|
||||
|
||||
#define _STR(x) #x
|
||||
#define STR(x) _STR(x)
|
||||
|
||||
#ifndef SYSFS_MAGIC
|
||||
#define SYSFS_MAGIC 0x62656572
|
||||
#endif
|
||||
|
||||
#ifndef PROC_SUPER_MAGIC
|
||||
#define PROC_SUPER_MAGIC 0x9fa0
|
||||
#endif
|
||||
|
||||
#ifndef DEBUGFS_MAGIC
|
||||
#define DEBUGFS_MAGIC 0x64626720
|
||||
#endif
|
||||
|
||||
#ifndef TRACEFS_MAGIC
|
||||
#define TRACEFS_MAGIC 0x74726163
|
||||
#endif
|
||||
|
||||
static const char * const sysfs__fs_known_mountpoints[] = {
|
||||
"/sys",
|
||||
0,
|
||||
@ -25,6 +43,29 @@ static const char * const procfs__known_mountpoints[] = {
|
||||
0,
|
||||
};
|
||||
|
||||
#ifndef DEBUGFS_DEFAULT_PATH
|
||||
#define DEBUGFS_DEFAULT_PATH "/sys/kernel/debug"
|
||||
#endif
|
||||
|
||||
static const char * const debugfs__known_mountpoints[] = {
|
||||
DEBUGFS_DEFAULT_PATH,
|
||||
"/debug",
|
||||
0,
|
||||
};
|
||||
|
||||
|
||||
#ifndef TRACEFS_DEFAULT_PATH
|
||||
#define TRACEFS_DEFAULT_PATH "/sys/kernel/tracing"
|
||||
#endif
|
||||
|
||||
static const char * const tracefs__known_mountpoints[] = {
|
||||
TRACEFS_DEFAULT_PATH,
|
||||
"/sys/kernel/debug/tracing",
|
||||
"/tracing",
|
||||
"/trace",
|
||||
0,
|
||||
};
|
||||
|
||||
struct fs {
|
||||
const char *name;
|
||||
const char * const *mounts;
|
||||
@ -34,10 +75,16 @@ struct fs {
|
||||
};
|
||||
|
||||
enum {
|
||||
FS__SYSFS = 0,
|
||||
FS__PROCFS = 1,
|
||||
FS__SYSFS = 0,
|
||||
FS__PROCFS = 1,
|
||||
FS__DEBUGFS = 2,
|
||||
FS__TRACEFS = 3,
|
||||
};
|
||||
|
||||
#ifndef TRACEFS_MAGIC
|
||||
#define TRACEFS_MAGIC 0x74726163
|
||||
#endif
|
||||
|
||||
static struct fs fs__entries[] = {
|
||||
[FS__SYSFS] = {
|
||||
.name = "sysfs",
|
||||
@ -49,6 +96,16 @@ static struct fs fs__entries[] = {
|
||||
.mounts = procfs__known_mountpoints,
|
||||
.magic = PROC_SUPER_MAGIC,
|
||||
},
|
||||
[FS__DEBUGFS] = {
|
||||
.name = "debugfs",
|
||||
.mounts = debugfs__known_mountpoints,
|
||||
.magic = DEBUGFS_MAGIC,
|
||||
},
|
||||
[FS__TRACEFS] = {
|
||||
.name = "tracefs",
|
||||
.mounts = tracefs__known_mountpoints,
|
||||
.magic = TRACEFS_MAGIC,
|
||||
},
|
||||
};
|
||||
|
||||
static bool fs__read_mounts(struct fs *fs)
|
||||
@ -159,14 +216,54 @@ static const char *fs__mountpoint(int idx)
|
||||
return fs__get_mountpoint(fs);
|
||||
}
|
||||
|
||||
#define FS__MOUNTPOINT(name, idx) \
|
||||
const char *name##__mountpoint(void) \
|
||||
{ \
|
||||
return fs__mountpoint(idx); \
|
||||
static const char *mount_overload(struct fs *fs)
|
||||
{
|
||||
size_t name_len = strlen(fs->name);
|
||||
/* "PERF_" + name + "_ENVIRONMENT" + '\0' */
|
||||
char upper_name[5 + name_len + 12 + 1];
|
||||
|
||||
snprintf(upper_name, name_len, "PERF_%s_ENVIRONMENT", fs->name);
|
||||
mem_toupper(upper_name, name_len);
|
||||
|
||||
return getenv(upper_name) ?: *fs->mounts;
|
||||
}
|
||||
|
||||
FS__MOUNTPOINT(sysfs, FS__SYSFS);
|
||||
FS__MOUNTPOINT(procfs, FS__PROCFS);
|
||||
static const char *fs__mount(int idx)
|
||||
{
|
||||
struct fs *fs = &fs__entries[idx];
|
||||
const char *mountpoint;
|
||||
|
||||
if (fs__mountpoint(idx))
|
||||
return (const char *)fs->path;
|
||||
|
||||
mountpoint = mount_overload(fs);
|
||||
|
||||
if (mount(NULL, mountpoint, fs->name, 0, NULL) < 0)
|
||||
return NULL;
|
||||
|
||||
return fs__check_mounts(fs) ? fs->path : NULL;
|
||||
}
|
||||
|
||||
#define FS(name, idx) \
|
||||
const char *name##__mountpoint(void) \
|
||||
{ \
|
||||
return fs__mountpoint(idx); \
|
||||
} \
|
||||
\
|
||||
const char *name##__mount(void) \
|
||||
{ \
|
||||
return fs__mount(idx); \
|
||||
} \
|
||||
\
|
||||
bool name##__configured(void) \
|
||||
{ \
|
||||
return name##__mountpoint() != NULL; \
|
||||
}
|
||||
|
||||
FS(sysfs, FS__SYSFS);
|
||||
FS(procfs, FS__PROCFS);
|
||||
FS(debugfs, FS__DEBUGFS);
|
||||
FS(tracefs, FS__TRACEFS);
|
||||
|
||||
int filename__read_int(const char *filename, int *value)
|
||||
{
|
||||
|
@ -1,16 +1,28 @@
|
||||
#ifndef __API_FS__
|
||||
#define __API_FS__
|
||||
|
||||
#ifndef SYSFS_MAGIC
|
||||
#define SYSFS_MAGIC 0x62656572
|
||||
#include <stdbool.h>
|
||||
|
||||
/*
|
||||
* On most systems <limits.h> would have given us this, but not on some systems
|
||||
* (e.g. GNU/Hurd).
|
||||
*/
|
||||
#ifndef PATH_MAX
|
||||
#define PATH_MAX 4096
|
||||
#endif
|
||||
|
||||
#ifndef PROC_SUPER_MAGIC
|
||||
#define PROC_SUPER_MAGIC 0x9fa0
|
||||
#endif
|
||||
#define FS(name) \
|
||||
const char *name##__mountpoint(void); \
|
||||
const char *name##__mount(void); \
|
||||
bool name##__configured(void); \
|
||||
|
||||
FS(sysfs)
|
||||
FS(procfs)
|
||||
FS(debugfs)
|
||||
FS(tracefs)
|
||||
|
||||
#undef FS
|
||||
|
||||
const char *sysfs__mountpoint(void);
|
||||
const char *procfs__mountpoint(void);
|
||||
|
||||
int filename__read_int(const char *filename, int *value);
|
||||
int sysctl__read_int(const char *sysctl, int *value);
|
||||
|
137
tools/lib/api/fs/tracing_path.c
Normal file
137
tools/lib/api/fs/tracing_path.c
Normal file
@ -0,0 +1,137 @@
|
||||
#ifndef _GNU_SOURCE
|
||||
# define _GNU_SOURCE
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include "debugfs.h"
|
||||
#include "tracefs.h"
|
||||
|
||||
#include "tracing_path.h"
|
||||
|
||||
|
||||
char tracing_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing";
|
||||
char tracing_events_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing/events";
|
||||
|
||||
|
||||
static void __tracing_path_set(const char *tracing, const char *mountpoint)
|
||||
{
|
||||
snprintf(tracing_path, sizeof(tracing_path), "%s/%s",
|
||||
mountpoint, tracing);
|
||||
snprintf(tracing_events_path, sizeof(tracing_events_path), "%s/%s%s",
|
||||
mountpoint, tracing, "events");
|
||||
}
|
||||
|
||||
static const char *tracing_path_tracefs_mount(void)
|
||||
{
|
||||
const char *mnt;
|
||||
|
||||
mnt = tracefs_mount(NULL);
|
||||
if (!mnt)
|
||||
return NULL;
|
||||
|
||||
__tracing_path_set("", mnt);
|
||||
|
||||
return mnt;
|
||||
}
|
||||
|
||||
static const char *tracing_path_debugfs_mount(void)
|
||||
{
|
||||
const char *mnt;
|
||||
|
||||
mnt = debugfs_mount(NULL);
|
||||
if (!mnt)
|
||||
return NULL;
|
||||
|
||||
__tracing_path_set("tracing/", mnt);
|
||||
|
||||
return mnt;
|
||||
}
|
||||
|
||||
const char *tracing_path_mount(void)
|
||||
{
|
||||
const char *mnt;
|
||||
|
||||
mnt = tracing_path_tracefs_mount();
|
||||
if (mnt)
|
||||
return mnt;
|
||||
|
||||
mnt = tracing_path_debugfs_mount();
|
||||
|
||||
return mnt;
|
||||
}
|
||||
|
||||
void tracing_path_set(const char *mntpt)
|
||||
{
|
||||
__tracing_path_set("tracing/", mntpt);
|
||||
}
|
||||
|
||||
char *get_tracing_file(const char *name)
|
||||
{
|
||||
char *file;
|
||||
|
||||
if (asprintf(&file, "%s/%s", tracing_path, name) < 0)
|
||||
return NULL;
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
void put_tracing_file(char *file)
|
||||
{
|
||||
free(file);
|
||||
}
|
||||
|
||||
static int strerror_open(int err, char *buf, size_t size, const char *filename)
|
||||
{
|
||||
char sbuf[128];
|
||||
|
||||
switch (err) {
|
||||
case ENOENT:
|
||||
if (debugfs_configured()) {
|
||||
snprintf(buf, size,
|
||||
"Error:\tFile %s/%s not found.\n"
|
||||
"Hint:\tPerhaps this kernel misses some CONFIG_ setting to enable this feature?.\n",
|
||||
debugfs_mountpoint, filename);
|
||||
break;
|
||||
}
|
||||
snprintf(buf, size, "%s",
|
||||
"Error:\tUnable to find debugfs\n"
|
||||
"Hint:\tWas your kernel compiled with debugfs support?\n"
|
||||
"Hint:\tIs the debugfs filesystem mounted?\n"
|
||||
"Hint:\tTry 'sudo mount -t debugfs nodev /sys/kernel/debug'");
|
||||
break;
|
||||
case EACCES: {
|
||||
const char *mountpoint = debugfs_mountpoint;
|
||||
|
||||
if (!access(debugfs_mountpoint, R_OK) && strncmp(filename, "tracing/", 8) == 0) {
|
||||
const char *tracefs_mntpoint = tracefs_find_mountpoint();
|
||||
|
||||
if (tracefs_mntpoint)
|
||||
mountpoint = tracefs_mntpoint;
|
||||
}
|
||||
|
||||
snprintf(buf, size,
|
||||
"Error:\tNo permissions to read %s/%s\n"
|
||||
"Hint:\tTry 'sudo mount -o remount,mode=755 %s'\n",
|
||||
debugfs_mountpoint, filename, mountpoint);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
snprintf(buf, size, "%s", strerror_r(err, sbuf, sizeof(sbuf)));
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tracing_path__strerror_open_tp(int err, char *buf, size_t size, const char *sys, const char *name)
|
||||
{
|
||||
char path[PATH_MAX];
|
||||
|
||||
snprintf(path, PATH_MAX, "tracing/events/%s/%s", sys, name ?: "*");
|
||||
|
||||
return strerror_open(err, buf, size, path);
|
||||
}
|
16
tools/lib/api/fs/tracing_path.h
Normal file
16
tools/lib/api/fs/tracing_path.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef __API_FS_TRACING_PATH_H
|
||||
#define __API_FS_TRACING_PATH_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
extern char tracing_path[];
|
||||
extern char tracing_events_path[];
|
||||
|
||||
void tracing_path_set(const char *mountpoint);
|
||||
const char *tracing_path_mount(void);
|
||||
|
||||
char *get_tracing_file(const char *name);
|
||||
void put_tracing_file(char *file);
|
||||
|
||||
int tracing_path__strerror_open_tp(int err, char *buf, size_t size, const char *sys, const char *name);
|
||||
#endif /* __API_FS_TRACING_PATH_H */
|
@ -848,6 +848,7 @@ static void free_arg(struct print_arg *arg)
|
||||
free(arg->bitmask.bitmask);
|
||||
break;
|
||||
case PRINT_DYNAMIC_ARRAY:
|
||||
case PRINT_DYNAMIC_ARRAY_LEN:
|
||||
free(arg->dynarray.index);
|
||||
break;
|
||||
case PRINT_OP:
|
||||
@ -2728,6 +2729,42 @@ process_dynamic_array(struct event_format *event, struct print_arg *arg, char **
|
||||
return EVENT_ERROR;
|
||||
}
|
||||
|
||||
static enum event_type
|
||||
process_dynamic_array_len(struct event_format *event, struct print_arg *arg,
|
||||
char **tok)
|
||||
{
|
||||
struct format_field *field;
|
||||
enum event_type type;
|
||||
char *token;
|
||||
|
||||
if (read_expect_type(EVENT_ITEM, &token) < 0)
|
||||
goto out_free;
|
||||
|
||||
arg->type = PRINT_DYNAMIC_ARRAY_LEN;
|
||||
|
||||
/* Find the field */
|
||||
field = pevent_find_field(event, token);
|
||||
if (!field)
|
||||
goto out_free;
|
||||
|
||||
arg->dynarray.field = field;
|
||||
arg->dynarray.index = 0;
|
||||
|
||||
if (read_expected(EVENT_DELIM, ")") < 0)
|
||||
goto out_err;
|
||||
|
||||
type = read_token(&token);
|
||||
*tok = token;
|
||||
|
||||
return type;
|
||||
|
||||
out_free:
|
||||
free_token(token);
|
||||
out_err:
|
||||
*tok = NULL;
|
||||
return EVENT_ERROR;
|
||||
}
|
||||
|
||||
static enum event_type
|
||||
process_paren(struct event_format *event, struct print_arg *arg, char **tok)
|
||||
{
|
||||
@ -2975,6 +3012,10 @@ process_function(struct event_format *event, struct print_arg *arg,
|
||||
free_token(token);
|
||||
return process_dynamic_array(event, arg, tok);
|
||||
}
|
||||
if (strcmp(token, "__get_dynamic_array_len") == 0) {
|
||||
free_token(token);
|
||||
return process_dynamic_array_len(event, arg, tok);
|
||||
}
|
||||
|
||||
func = find_func_handler(event->pevent, token);
|
||||
if (func) {
|
||||
@ -3655,14 +3696,25 @@ eval_num_arg(void *data, int size, struct event_format *event, struct print_arg
|
||||
goto out_warning_op;
|
||||
}
|
||||
break;
|
||||
case PRINT_DYNAMIC_ARRAY_LEN:
|
||||
offset = pevent_read_number(pevent,
|
||||
data + arg->dynarray.field->offset,
|
||||
arg->dynarray.field->size);
|
||||
/*
|
||||
* The total allocated length of the dynamic array is
|
||||
* stored in the top half of the field, and the offset
|
||||
* is in the bottom half of the 32 bit field.
|
||||
*/
|
||||
val = (unsigned long long)(offset >> 16);
|
||||
break;
|
||||
case PRINT_DYNAMIC_ARRAY:
|
||||
/* Without [], we pass the address to the dynamic data */
|
||||
offset = pevent_read_number(pevent,
|
||||
data + arg->dynarray.field->offset,
|
||||
arg->dynarray.field->size);
|
||||
/*
|
||||
* The actual length of the dynamic array is stored
|
||||
* in the top half of the field, and the offset
|
||||
* The total allocated length of the dynamic array is
|
||||
* stored in the top half of the field, and the offset
|
||||
* is in the bottom half of the 32 bit field.
|
||||
*/
|
||||
offset &= 0xffff;
|
||||
|
@ -294,6 +294,7 @@ enum print_arg_type {
|
||||
PRINT_OP,
|
||||
PRINT_FUNC,
|
||||
PRINT_BITMASK,
|
||||
PRINT_DYNAMIC_ARRAY_LEN,
|
||||
};
|
||||
|
||||
struct print_arg {
|
||||
|
@ -41,6 +41,7 @@ tools/include/asm-generic/bitops.h
|
||||
tools/include/linux/atomic.h
|
||||
tools/include/linux/bitops.h
|
||||
tools/include/linux/compiler.h
|
||||
tools/include/linux/filter.h
|
||||
tools/include/linux/hash.h
|
||||
tools/include/linux/kernel.h
|
||||
tools/include/linux/list.h
|
||||
|
@ -624,13 +624,49 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
|
||||
* threads.
|
||||
*/
|
||||
if (have_timing_info && !cpu_map__empty(cpus)) {
|
||||
err = intel_pt_track_switches(evlist);
|
||||
if (err == -EPERM)
|
||||
pr_debug2("Unable to select sched:sched_switch\n");
|
||||
else if (err)
|
||||
return err;
|
||||
else
|
||||
ptr->have_sched_switch = 1;
|
||||
if (perf_can_record_switch_events()) {
|
||||
bool cpu_wide = !target__none(&opts->target) &&
|
||||
!target__has_task(&opts->target);
|
||||
|
||||
if (!cpu_wide && perf_can_record_cpu_wide()) {
|
||||
struct perf_evsel *switch_evsel;
|
||||
|
||||
err = parse_events(evlist, "dummy:u", NULL);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
switch_evsel = perf_evlist__last(evlist);
|
||||
|
||||
switch_evsel->attr.freq = 0;
|
||||
switch_evsel->attr.sample_period = 1;
|
||||
switch_evsel->attr.context_switch = 1;
|
||||
|
||||
switch_evsel->system_wide = true;
|
||||
switch_evsel->no_aux_samples = true;
|
||||
switch_evsel->immediate = true;
|
||||
|
||||
perf_evsel__set_sample_bit(switch_evsel, TID);
|
||||
perf_evsel__set_sample_bit(switch_evsel, TIME);
|
||||
perf_evsel__set_sample_bit(switch_evsel, CPU);
|
||||
|
||||
opts->record_switch_events = false;
|
||||
ptr->have_sched_switch = 3;
|
||||
} else {
|
||||
opts->record_switch_events = true;
|
||||
if (cpu_wide)
|
||||
ptr->have_sched_switch = 3;
|
||||
else
|
||||
ptr->have_sched_switch = 2;
|
||||
}
|
||||
} else {
|
||||
err = intel_pt_track_switches(evlist);
|
||||
if (err == -EPERM)
|
||||
pr_debug2("Unable to select sched:sched_switch\n");
|
||||
else if (err)
|
||||
return err;
|
||||
else
|
||||
ptr->have_sched_switch = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (intel_pt_evsel) {
|
||||
@ -663,8 +699,11 @@ static int intel_pt_recording_options(struct auxtrace_record *itr,
|
||||
tracking_evsel->attr.sample_period = 1;
|
||||
|
||||
/* In per-cpu case, always need the time of mmap events etc */
|
||||
if (!cpu_map__empty(cpus))
|
||||
if (!cpu_map__empty(cpus)) {
|
||||
perf_evsel__set_sample_bit(tracking_evsel, TIME);
|
||||
/* And the CPU for switch events */
|
||||
perf_evsel__set_sample_bit(tracking_evsel, CPU);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -41,6 +41,7 @@
|
||||
#include "util/parse-options.h"
|
||||
#include "util/probe-finder.h"
|
||||
#include "util/probe-event.h"
|
||||
#include "util/probe-file.h"
|
||||
|
||||
#define DEFAULT_VAR_FILTER "!__k???tab_* & !__crc_*"
|
||||
#define DEFAULT_FUNC_FILTER "!_*"
|
||||
@ -311,6 +312,111 @@ static void pr_err_with_code(const char *msg, int err)
|
||||
pr_err("\n");
|
||||
}
|
||||
|
||||
static int perf_add_probe_events(struct perf_probe_event *pevs, int npevs)
|
||||
{
|
||||
int ret;
|
||||
int i, k;
|
||||
const char *event = NULL, *group = NULL;
|
||||
|
||||
ret = convert_perf_probe_events(pevs, npevs);
|
||||
if (ret < 0)
|
||||
goto out_cleanup;
|
||||
|
||||
ret = apply_perf_probe_events(pevs, npevs);
|
||||
if (ret < 0)
|
||||
goto out_cleanup;
|
||||
|
||||
for (i = k = 0; i < npevs; i++)
|
||||
k += pevs[i].ntevs;
|
||||
|
||||
pr_info("Added new event%s\n", (k > 1) ? "s:" : ":");
|
||||
for (i = 0; i < npevs; i++) {
|
||||
struct perf_probe_event *pev = &pevs[i];
|
||||
|
||||
for (k = 0; k < pev->ntevs; k++) {
|
||||
struct probe_trace_event *tev = &pev->tevs[k];
|
||||
|
||||
/* We use tev's name for showing new events */
|
||||
show_perf_probe_event(tev->group, tev->event, pev,
|
||||
tev->point.module, false);
|
||||
|
||||
/* Save the last valid name */
|
||||
event = tev->event;
|
||||
group = tev->group;
|
||||
}
|
||||
}
|
||||
|
||||
/* Note that it is possible to skip all events because of blacklist */
|
||||
if (event) {
|
||||
/* Show how to use the event. */
|
||||
pr_info("\nYou can now use it in all perf tools, such as:\n\n");
|
||||
pr_info("\tperf record -e %s:%s -aR sleep 1\n\n", group, event);
|
||||
}
|
||||
|
||||
out_cleanup:
|
||||
cleanup_perf_probe_events(pevs, npevs);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int perf_del_probe_events(struct strfilter *filter)
|
||||
{
|
||||
int ret, ret2, ufd = -1, kfd = -1;
|
||||
char *str = strfilter__string(filter);
|
||||
struct strlist *klist = NULL, *ulist = NULL;
|
||||
struct str_node *ent;
|
||||
|
||||
if (!str)
|
||||
return -EINVAL;
|
||||
|
||||
pr_debug("Delete filter: \'%s\'\n", str);
|
||||
|
||||
/* Get current event names */
|
||||
ret = probe_file__open_both(&kfd, &ufd, PF_FL_RW);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
klist = strlist__new(NULL, NULL);
|
||||
if (!klist)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = probe_file__get_events(kfd, filter, klist);
|
||||
if (ret == 0) {
|
||||
strlist__for_each(ent, klist)
|
||||
pr_info("Removed event: %s\n", ent->s);
|
||||
|
||||
ret = probe_file__del_strlist(kfd, klist);
|
||||
if (ret < 0)
|
||||
goto error;
|
||||
}
|
||||
|
||||
ret2 = probe_file__get_events(ufd, filter, ulist);
|
||||
if (ret2 == 0) {
|
||||
strlist__for_each(ent, ulist)
|
||||
pr_info("Removed event: %s\n", ent->s);
|
||||
|
||||
ret2 = probe_file__del_strlist(ufd, ulist);
|
||||
if (ret2 < 0)
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (ret == -ENOENT && ret2 == -ENOENT)
|
||||
pr_debug("\"%s\" does not hit any event.\n", str);
|
||||
/* Note that this is silently ignored */
|
||||
ret = 0;
|
||||
|
||||
error:
|
||||
if (kfd >= 0)
|
||||
close(kfd);
|
||||
if (ufd >= 0)
|
||||
close(ufd);
|
||||
out:
|
||||
strlist__delete(klist);
|
||||
strlist__delete(ulist);
|
||||
free(str);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
__cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
|
||||
{
|
||||
@ -483,7 +589,7 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
|
||||
return ret;
|
||||
#endif
|
||||
case 'd':
|
||||
ret = del_perf_probe_events(params.filter);
|
||||
ret = perf_del_probe_events(params.filter);
|
||||
if (ret < 0) {
|
||||
pr_err_with_code(" Error: Failed to delete events.", ret);
|
||||
return ret;
|
||||
@ -496,7 +602,7 @@ __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused)
|
||||
usage_with_options(probe_usage, options);
|
||||
}
|
||||
|
||||
ret = add_perf_probe_events(params.events, params.nevents);
|
||||
ret = perf_add_probe_events(params.events, params.nevents);
|
||||
if (ret < 0) {
|
||||
pr_err_with_code(" Error: Failed to add events.", ret);
|
||||
return ret;
|
||||
|
@ -215,7 +215,7 @@ static void read_counters(bool close_counters)
|
||||
|
||||
evlist__for_each(evsel_list, counter) {
|
||||
if (read_counter(counter))
|
||||
pr_warning("failed to read counter %s\n", counter->name);
|
||||
pr_debug("failed to read counter %s\n", counter->name);
|
||||
|
||||
if (perf_stat_process_counter(&stat_config, counter))
|
||||
pr_warning("failed to process counter %s\n", counter->name);
|
||||
|
@ -17,6 +17,7 @@
|
||||
*/
|
||||
|
||||
#include <traceevent/event-parse.h>
|
||||
#include <api/fs/tracing_path.h>
|
||||
#include "builtin.h"
|
||||
#include "util/color.h"
|
||||
#include "util/debug.h"
|
||||
@ -2686,11 +2687,11 @@ out_delete_evlist:
|
||||
char errbuf[BUFSIZ];
|
||||
|
||||
out_error_sched_stat_runtime:
|
||||
debugfs__strerror_open_tp(errno, errbuf, sizeof(errbuf), "sched", "sched_stat_runtime");
|
||||
tracing_path__strerror_open_tp(errno, errbuf, sizeof(errbuf), "sched", "sched_stat_runtime");
|
||||
goto out_error;
|
||||
|
||||
out_error_raw_syscalls:
|
||||
debugfs__strerror_open_tp(errno, errbuf, sizeof(errbuf), "raw_syscalls", "sys_(enter|exit)");
|
||||
tracing_path__strerror_open_tp(errno, errbuf, sizeof(errbuf), "raw_syscalls", "sys_(enter|exit)");
|
||||
goto out_error;
|
||||
|
||||
out_error_mmap:
|
||||
|
@ -15,7 +15,7 @@
|
||||
#include "util/parse-events.h"
|
||||
#include "util/parse-options.h"
|
||||
#include "util/debug.h"
|
||||
#include <api/fs/debugfs.h>
|
||||
#include <api/fs/tracing_path.h>
|
||||
#include <pthread.h>
|
||||
|
||||
const char perf_usage_string[] =
|
||||
@ -214,7 +214,7 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
|
||||
fprintf(stderr, "No directory given for --debugfs-dir.\n");
|
||||
usage(perf_usage_string);
|
||||
}
|
||||
perf_debugfs_set_path((*argv)[1]);
|
||||
tracing_path_set((*argv)[1]);
|
||||
if (envchanged)
|
||||
*envchanged = 1;
|
||||
(*argv)++;
|
||||
@ -230,7 +230,7 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
|
||||
(*argv)++;
|
||||
(*argc)--;
|
||||
} else if (!prefixcmp(cmd, CMD_DEBUGFS_DIR)) {
|
||||
perf_debugfs_set_path(cmd + strlen(CMD_DEBUGFS_DIR));
|
||||
tracing_path_set(cmd + strlen(CMD_DEBUGFS_DIR));
|
||||
fprintf(stderr, "dir: %s\n", tracing_path);
|
||||
if (envchanged)
|
||||
*envchanged = 1;
|
||||
@ -517,8 +517,10 @@ int main(int argc, const char **argv)
|
||||
cmd = perf_extract_argv0_path(argv[0]);
|
||||
if (!cmd)
|
||||
cmd = "perf-help";
|
||||
/* get debugfs mount point from /proc/mounts */
|
||||
perf_debugfs_mount(NULL);
|
||||
|
||||
/* get debugfs/tracefs mount point from /proc/mounts */
|
||||
tracing_path_mount();
|
||||
|
||||
/*
|
||||
* "perf-xxxx" is the same as "perf xxxx", but we obviously:
|
||||
*
|
||||
|
@ -35,6 +35,9 @@ perf-y += thread-map.o
|
||||
perf-y += llvm.o
|
||||
|
||||
perf-$(CONFIG_X86) += perf-time-to-tsc.o
|
||||
ifdef CONFIG_AUXTRACE
|
||||
perf-$(CONFIG_X86) += insn-x86.o
|
||||
endif
|
||||
|
||||
ifeq ($(ARCH),$(filter $(ARCH),x86 arm arm64))
|
||||
perf-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
|
||||
|
@ -178,6 +178,14 @@ static struct test {
|
||||
.desc = "Test LLVM searching and compiling",
|
||||
.func = test__llvm,
|
||||
},
|
||||
#ifdef HAVE_AUXTRACE_SUPPORT
|
||||
#if defined(__x86_64__) || defined(__i386__)
|
||||
{
|
||||
.desc = "Test x86 instruction decoder - new instructions",
|
||||
.func = test__insn_x86,
|
||||
},
|
||||
#endif
|
||||
#endif
|
||||
{
|
||||
.func = NULL,
|
||||
},
|
||||
|
75
tools/perf/tests/gen-insn-x86-dat.awk
Normal file
75
tools/perf/tests/gen-insn-x86-dat.awk
Normal file
@ -0,0 +1,75 @@
|
||||
#!/bin/awk -f
|
||||
# gen-insn-x86-dat.awk: script to convert data for the insn-x86 test
|
||||
# Copyright (c) 2015, Intel Corporation.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms and conditions of the GNU General Public License,
|
||||
# version 2, as published by the Free Software Foundation.
|
||||
#
|
||||
# This program is distributed in the hope it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
# more details.
|
||||
|
||||
BEGIN {
|
||||
print "/*"
|
||||
print " * Generated by gen-insn-x86-dat.sh and gen-insn-x86-dat.awk"
|
||||
print " * from insn-x86-dat-src.c for inclusion by insn-x86.c"
|
||||
print " * Do not change this code."
|
||||
print "*/\n"
|
||||
op = ""
|
||||
branch = ""
|
||||
rel = 0
|
||||
going = 0
|
||||
}
|
||||
|
||||
/ Start here / {
|
||||
going = 1
|
||||
}
|
||||
|
||||
/ Stop here / {
|
||||
going = 0
|
||||
}
|
||||
|
||||
/^\s*[0-9a-fA-F]+\:/ {
|
||||
if (going) {
|
||||
colon_pos = index($0, ":")
|
||||
useful_line = substr($0, colon_pos + 1)
|
||||
first_pos = match(useful_line, "[0-9a-fA-F]")
|
||||
useful_line = substr(useful_line, first_pos)
|
||||
gsub("\t", "\\t", useful_line)
|
||||
printf "{{"
|
||||
len = 0
|
||||
for (i = 2; i <= NF; i++) {
|
||||
if (match($i, "^[0-9a-fA-F][0-9a-fA-F]$")) {
|
||||
printf "0x%s, ", $i
|
||||
len += 1
|
||||
} else {
|
||||
break
|
||||
}
|
||||
}
|
||||
printf "}, %d, %s, \"%s\", \"%s\",", len, rel, op, branch
|
||||
printf "\n\"%s\",},\n", useful_line
|
||||
op = ""
|
||||
branch = ""
|
||||
rel = 0
|
||||
}
|
||||
}
|
||||
|
||||
/ Expecting: / {
|
||||
expecting_str = " Expecting: "
|
||||
expecting_len = length(expecting_str)
|
||||
expecting_pos = index($0, expecting_str)
|
||||
useful_line = substr($0, expecting_pos + expecting_len)
|
||||
for (i = 1; i <= NF; i++) {
|
||||
if ($i == "Expecting:") {
|
||||
i++
|
||||
op = $i
|
||||
i++
|
||||
branch = $i
|
||||
i++
|
||||
rel = $i
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
43
tools/perf/tests/gen-insn-x86-dat.sh
Executable file
43
tools/perf/tests/gen-insn-x86-dat.sh
Executable file
@ -0,0 +1,43 @@
|
||||
#!/bin/sh
|
||||
# gen-insn-x86-dat: generate data for the insn-x86 test
|
||||
# Copyright (c) 2015, Intel Corporation.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms and conditions of the GNU General Public License,
|
||||
# version 2, as published by the Free Software Foundation.
|
||||
#
|
||||
# This program is distributed in the hope it will be useful, but WITHOUT
|
||||
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
# more details.
|
||||
|
||||
set -e
|
||||
|
||||
if [ "$(uname -m)" != "x86_64" ]; then
|
||||
echo "ERROR: This script only works on x86_64"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd $(dirname $0)
|
||||
|
||||
trap 'echo "Might need a more recent version of binutils"' EXIT
|
||||
|
||||
echo "Compiling insn-x86-dat-src.c to 64-bit object"
|
||||
|
||||
gcc -g -c insn-x86-dat-src.c
|
||||
|
||||
objdump -dSw insn-x86-dat-src.o | awk -f gen-insn-x86-dat.awk > insn-x86-dat-64.c
|
||||
|
||||
rm -f insn-x86-dat-src.o
|
||||
|
||||
echo "Compiling insn-x86-dat-src.c to 32-bit object"
|
||||
|
||||
gcc -g -c -m32 insn-x86-dat-src.c
|
||||
|
||||
objdump -dSw insn-x86-dat-src.o | awk -f gen-insn-x86-dat.awk > insn-x86-dat-32.c
|
||||
|
||||
rm -f insn-x86-dat-src.o
|
||||
|
||||
trap - EXIT
|
||||
|
||||
echo "Done (use git diff to see the changes)"
|
658
tools/perf/tests/insn-x86-dat-32.c
Normal file
658
tools/perf/tests/insn-x86-dat-32.c
Normal file
@ -0,0 +1,658 @@
|
||||
/*
|
||||
* Generated by gen-insn-x86-dat.sh and gen-insn-x86-dat.awk
|
||||
* from insn-x86-dat-src.c for inclusion by insn-x86.c
|
||||
* Do not change this code.
|
||||
*/
|
||||
|
||||
{{0x0f, 0x31, }, 2, 0, "", "",
|
||||
"0f 31 \trdtsc ",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x00, }, 4, 0, "", "",
|
||||
"f3 0f 1b 00 \tbndmk (%eax),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f3 0f 1b 05 78 56 34 12 \tbndmk 0x12345678,%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x18, }, 4, 0, "", "",
|
||||
"f3 0f 1b 18 \tbndmk (%eax),%bnd3",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"f3 0f 1b 04 01 \tbndmk (%ecx,%eax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1b 04 05 78 56 34 12 \tbndmk 0x12345678(,%eax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"f3 0f 1b 04 08 \tbndmk (%eax,%ecx,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"f3 0f 1b 04 c8 \tbndmk (%eax,%ecx,8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"f3 0f 1b 40 12 \tbndmk 0x12(%eax),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"f3 0f 1b 45 12 \tbndmk 0x12(%ebp),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1b 44 01 12 \tbndmk 0x12(%ecx,%eax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1b 44 05 12 \tbndmk 0x12(%ebp,%eax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1b 44 08 12 \tbndmk 0x12(%eax,%ecx,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1b 44 c8 12 \tbndmk 0x12(%eax,%ecx,8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f3 0f 1b 80 78 56 34 12 \tbndmk 0x12345678(%eax),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f3 0f 1b 85 78 56 34 12 \tbndmk 0x12345678(%ebp),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1b 84 01 78 56 34 12 \tbndmk 0x12345678(%ecx,%eax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1b 84 05 78 56 34 12 \tbndmk 0x12345678(%ebp,%eax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1b 84 08 78 56 34 12 \tbndmk 0x12345678(%eax,%ecx,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1b 84 c8 78 56 34 12 \tbndmk 0x12345678(%eax,%ecx,8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x00, }, 4, 0, "", "",
|
||||
"f3 0f 1a 00 \tbndcl (%eax),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f3 0f 1a 05 78 56 34 12 \tbndcl 0x12345678,%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x18, }, 4, 0, "", "",
|
||||
"f3 0f 1a 18 \tbndcl (%eax),%bnd3",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"f3 0f 1a 04 01 \tbndcl (%ecx,%eax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1a 04 05 78 56 34 12 \tbndcl 0x12345678(,%eax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"f3 0f 1a 04 08 \tbndcl (%eax,%ecx,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"f3 0f 1a 04 c8 \tbndcl (%eax,%ecx,8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"f3 0f 1a 40 12 \tbndcl 0x12(%eax),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"f3 0f 1a 45 12 \tbndcl 0x12(%ebp),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1a 44 01 12 \tbndcl 0x12(%ecx,%eax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1a 44 05 12 \tbndcl 0x12(%ebp,%eax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1a 44 08 12 \tbndcl 0x12(%eax,%ecx,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1a 44 c8 12 \tbndcl 0x12(%eax,%ecx,8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f3 0f 1a 80 78 56 34 12 \tbndcl 0x12345678(%eax),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f3 0f 1a 85 78 56 34 12 \tbndcl 0x12345678(%ebp),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1a 84 01 78 56 34 12 \tbndcl 0x12345678(%ecx,%eax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1a 84 05 78 56 34 12 \tbndcl 0x12345678(%ebp,%eax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1a 84 08 78 56 34 12 \tbndcl 0x12345678(%eax,%ecx,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1a 84 c8 78 56 34 12 \tbndcl 0x12345678(%eax,%ecx,8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0xc0, }, 4, 0, "", "",
|
||||
"f3 0f 1a c0 \tbndcl %eax,%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x00, }, 4, 0, "", "",
|
||||
"f2 0f 1a 00 \tbndcu (%eax),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f2 0f 1a 05 78 56 34 12 \tbndcu 0x12345678,%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x18, }, 4, 0, "", "",
|
||||
"f2 0f 1a 18 \tbndcu (%eax),%bnd3",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"f2 0f 1a 04 01 \tbndcu (%ecx,%eax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1a 04 05 78 56 34 12 \tbndcu 0x12345678(,%eax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"f2 0f 1a 04 08 \tbndcu (%eax,%ecx,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"f2 0f 1a 04 c8 \tbndcu (%eax,%ecx,8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"f2 0f 1a 40 12 \tbndcu 0x12(%eax),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"f2 0f 1a 45 12 \tbndcu 0x12(%ebp),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1a 44 01 12 \tbndcu 0x12(%ecx,%eax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1a 44 05 12 \tbndcu 0x12(%ebp,%eax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1a 44 08 12 \tbndcu 0x12(%eax,%ecx,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1a 44 c8 12 \tbndcu 0x12(%eax,%ecx,8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f2 0f 1a 80 78 56 34 12 \tbndcu 0x12345678(%eax),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f2 0f 1a 85 78 56 34 12 \tbndcu 0x12345678(%ebp),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1a 84 01 78 56 34 12 \tbndcu 0x12345678(%ecx,%eax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1a 84 05 78 56 34 12 \tbndcu 0x12345678(%ebp,%eax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1a 84 08 78 56 34 12 \tbndcu 0x12345678(%eax,%ecx,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1a 84 c8 78 56 34 12 \tbndcu 0x12345678(%eax,%ecx,8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0xc0, }, 4, 0, "", "",
|
||||
"f2 0f 1a c0 \tbndcu %eax,%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x00, }, 4, 0, "", "",
|
||||
"f2 0f 1b 00 \tbndcn (%eax),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f2 0f 1b 05 78 56 34 12 \tbndcn 0x12345678,%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x18, }, 4, 0, "", "",
|
||||
"f2 0f 1b 18 \tbndcn (%eax),%bnd3",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"f2 0f 1b 04 01 \tbndcn (%ecx,%eax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1b 04 05 78 56 34 12 \tbndcn 0x12345678(,%eax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"f2 0f 1b 04 08 \tbndcn (%eax,%ecx,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"f2 0f 1b 04 c8 \tbndcn (%eax,%ecx,8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"f2 0f 1b 40 12 \tbndcn 0x12(%eax),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"f2 0f 1b 45 12 \tbndcn 0x12(%ebp),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1b 44 01 12 \tbndcn 0x12(%ecx,%eax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1b 44 05 12 \tbndcn 0x12(%ebp,%eax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1b 44 08 12 \tbndcn 0x12(%eax,%ecx,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1b 44 c8 12 \tbndcn 0x12(%eax,%ecx,8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f2 0f 1b 80 78 56 34 12 \tbndcn 0x12345678(%eax),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f2 0f 1b 85 78 56 34 12 \tbndcn 0x12345678(%ebp),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1b 84 01 78 56 34 12 \tbndcn 0x12345678(%ecx,%eax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1b 84 05 78 56 34 12 \tbndcn 0x12345678(%ebp,%eax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1b 84 08 78 56 34 12 \tbndcn 0x12345678(%eax,%ecx,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1b 84 c8 78 56 34 12 \tbndcn 0x12345678(%eax,%ecx,8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0xc0, }, 4, 0, "", "",
|
||||
"f2 0f 1b c0 \tbndcn %eax,%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x00, }, 4, 0, "", "",
|
||||
"66 0f 1a 00 \tbndmov (%eax),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"66 0f 1a 05 78 56 34 12 \tbndmov 0x12345678,%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x18, }, 4, 0, "", "",
|
||||
"66 0f 1a 18 \tbndmov (%eax),%bnd3",},
|
||||
{{0x66, 0x0f, 0x1a, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"66 0f 1a 04 01 \tbndmov (%ecx,%eax,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1a 04 05 78 56 34 12 \tbndmov 0x12345678(,%eax,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"66 0f 1a 04 08 \tbndmov (%eax,%ecx,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"66 0f 1a 04 c8 \tbndmov (%eax,%ecx,8),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"66 0f 1a 40 12 \tbndmov 0x12(%eax),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"66 0f 1a 45 12 \tbndmov 0x12(%ebp),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1a 44 01 12 \tbndmov 0x12(%ecx,%eax,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1a 44 05 12 \tbndmov 0x12(%ebp,%eax,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1a 44 08 12 \tbndmov 0x12(%eax,%ecx,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1a 44 c8 12 \tbndmov 0x12(%eax,%ecx,8),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"66 0f 1a 80 78 56 34 12 \tbndmov 0x12345678(%eax),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"66 0f 1a 85 78 56 34 12 \tbndmov 0x12345678(%ebp),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1a 84 01 78 56 34 12 \tbndmov 0x12345678(%ecx,%eax,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1a 84 05 78 56 34 12 \tbndmov 0x12345678(%ebp,%eax,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1a 84 08 78 56 34 12 \tbndmov 0x12345678(%eax,%ecx,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1a 84 c8 78 56 34 12 \tbndmov 0x12345678(%eax,%ecx,8),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1b, 0x00, }, 4, 0, "", "",
|
||||
"66 0f 1b 00 \tbndmov %bnd0,(%eax)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"66 0f 1b 05 78 56 34 12 \tbndmov %bnd0,0x12345678",},
|
||||
{{0x66, 0x0f, 0x1b, 0x18, }, 4, 0, "", "",
|
||||
"66 0f 1b 18 \tbndmov %bnd3,(%eax)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"66 0f 1b 04 01 \tbndmov %bnd0,(%ecx,%eax,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1b 04 05 78 56 34 12 \tbndmov %bnd0,0x12345678(,%eax,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"66 0f 1b 04 08 \tbndmov %bnd0,(%eax,%ecx,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"66 0f 1b 04 c8 \tbndmov %bnd0,(%eax,%ecx,8)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"66 0f 1b 40 12 \tbndmov %bnd0,0x12(%eax)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"66 0f 1b 45 12 \tbndmov %bnd0,0x12(%ebp)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1b 44 01 12 \tbndmov %bnd0,0x12(%ecx,%eax,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1b 44 05 12 \tbndmov %bnd0,0x12(%ebp,%eax,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1b 44 08 12 \tbndmov %bnd0,0x12(%eax,%ecx,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1b 44 c8 12 \tbndmov %bnd0,0x12(%eax,%ecx,8)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"66 0f 1b 80 78 56 34 12 \tbndmov %bnd0,0x12345678(%eax)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"66 0f 1b 85 78 56 34 12 \tbndmov %bnd0,0x12345678(%ebp)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1b 84 01 78 56 34 12 \tbndmov %bnd0,0x12345678(%ecx,%eax,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1b 84 05 78 56 34 12 \tbndmov %bnd0,0x12345678(%ebp,%eax,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1b 84 08 78 56 34 12 \tbndmov %bnd0,0x12345678(%eax,%ecx,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1b 84 c8 78 56 34 12 \tbndmov %bnd0,0x12345678(%eax,%ecx,8)",},
|
||||
{{0x66, 0x0f, 0x1a, 0xc8, }, 4, 0, "", "",
|
||||
"66 0f 1a c8 \tbndmov %bnd0,%bnd1",},
|
||||
{{0x66, 0x0f, 0x1a, 0xc1, }, 4, 0, "", "",
|
||||
"66 0f 1a c1 \tbndmov %bnd1,%bnd0",},
|
||||
{{0x0f, 0x1a, 0x00, }, 3, 0, "", "",
|
||||
"0f 1a 00 \tbndldx (%eax),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x05, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f 1a 05 78 56 34 12 \tbndldx 0x12345678,%bnd0",},
|
||||
{{0x0f, 0x1a, 0x18, }, 3, 0, "", "",
|
||||
"0f 1a 18 \tbndldx (%eax),%bnd3",},
|
||||
{{0x0f, 0x1a, 0x04, 0x01, }, 4, 0, "", "",
|
||||
"0f 1a 04 01 \tbndldx (%ecx,%eax,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1a 04 05 78 56 34 12 \tbndldx 0x12345678(,%eax,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x04, 0x08, }, 4, 0, "", "",
|
||||
"0f 1a 04 08 \tbndldx (%eax,%ecx,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x40, 0x12, }, 4, 0, "", "",
|
||||
"0f 1a 40 12 \tbndldx 0x12(%eax),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x45, 0x12, }, 4, 0, "", "",
|
||||
"0f 1a 45 12 \tbndldx 0x12(%ebp),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x44, 0x01, 0x12, }, 5, 0, "", "",
|
||||
"0f 1a 44 01 12 \tbndldx 0x12(%ecx,%eax,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x44, 0x05, 0x12, }, 5, 0, "", "",
|
||||
"0f 1a 44 05 12 \tbndldx 0x12(%ebp,%eax,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x44, 0x08, 0x12, }, 5, 0, "", "",
|
||||
"0f 1a 44 08 12 \tbndldx 0x12(%eax,%ecx,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f 1a 80 78 56 34 12 \tbndldx 0x12345678(%eax),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f 1a 85 78 56 34 12 \tbndldx 0x12345678(%ebp),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1a 84 01 78 56 34 12 \tbndldx 0x12345678(%ecx,%eax,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1a 84 05 78 56 34 12 \tbndldx 0x12345678(%ebp,%eax,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1a 84 08 78 56 34 12 \tbndldx 0x12345678(%eax,%ecx,1),%bnd0",},
|
||||
{{0x0f, 0x1b, 0x00, }, 3, 0, "", "",
|
||||
"0f 1b 00 \tbndstx %bnd0,(%eax)",},
|
||||
{{0x0f, 0x1b, 0x05, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f 1b 05 78 56 34 12 \tbndstx %bnd0,0x12345678",},
|
||||
{{0x0f, 0x1b, 0x18, }, 3, 0, "", "",
|
||||
"0f 1b 18 \tbndstx %bnd3,(%eax)",},
|
||||
{{0x0f, 0x1b, 0x04, 0x01, }, 4, 0, "", "",
|
||||
"0f 1b 04 01 \tbndstx %bnd0,(%ecx,%eax,1)",},
|
||||
{{0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1b 04 05 78 56 34 12 \tbndstx %bnd0,0x12345678(,%eax,1)",},
|
||||
{{0x0f, 0x1b, 0x04, 0x08, }, 4, 0, "", "",
|
||||
"0f 1b 04 08 \tbndstx %bnd0,(%eax,%ecx,1)",},
|
||||
{{0x0f, 0x1b, 0x40, 0x12, }, 4, 0, "", "",
|
||||
"0f 1b 40 12 \tbndstx %bnd0,0x12(%eax)",},
|
||||
{{0x0f, 0x1b, 0x45, 0x12, }, 4, 0, "", "",
|
||||
"0f 1b 45 12 \tbndstx %bnd0,0x12(%ebp)",},
|
||||
{{0x0f, 0x1b, 0x44, 0x01, 0x12, }, 5, 0, "", "",
|
||||
"0f 1b 44 01 12 \tbndstx %bnd0,0x12(%ecx,%eax,1)",},
|
||||
{{0x0f, 0x1b, 0x44, 0x05, 0x12, }, 5, 0, "", "",
|
||||
"0f 1b 44 05 12 \tbndstx %bnd0,0x12(%ebp,%eax,1)",},
|
||||
{{0x0f, 0x1b, 0x44, 0x08, 0x12, }, 5, 0, "", "",
|
||||
"0f 1b 44 08 12 \tbndstx %bnd0,0x12(%eax,%ecx,1)",},
|
||||
{{0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f 1b 80 78 56 34 12 \tbndstx %bnd0,0x12345678(%eax)",},
|
||||
{{0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f 1b 85 78 56 34 12 \tbndstx %bnd0,0x12345678(%ebp)",},
|
||||
{{0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1b 84 01 78 56 34 12 \tbndstx %bnd0,0x12345678(%ecx,%eax,1)",},
|
||||
{{0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1b 84 05 78 56 34 12 \tbndstx %bnd0,0x12345678(%ebp,%eax,1)",},
|
||||
{{0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1b 84 08 78 56 34 12 \tbndstx %bnd0,0x12345678(%eax,%ecx,1)",},
|
||||
{{0xf2, 0xe8, 0xfc, 0xff, 0xff, 0xff, }, 6, 0xfffffffc, "call", "unconditional",
|
||||
"f2 e8 fc ff ff ff \tbnd call 3c3 <main+0x3c3>",},
|
||||
{{0xf2, 0xff, 0x10, }, 3, 0, "call", "indirect",
|
||||
"f2 ff 10 \tbnd call *(%eax)",},
|
||||
{{0xf2, 0xc3, }, 2, 0, "ret", "indirect",
|
||||
"f2 c3 \tbnd ret ",},
|
||||
{{0xf2, 0xe9, 0xfc, 0xff, 0xff, 0xff, }, 6, 0xfffffffc, "jmp", "unconditional",
|
||||
"f2 e9 fc ff ff ff \tbnd jmp 3ce <main+0x3ce>",},
|
||||
{{0xf2, 0xe9, 0xfc, 0xff, 0xff, 0xff, }, 6, 0xfffffffc, "jmp", "unconditional",
|
||||
"f2 e9 fc ff ff ff \tbnd jmp 3d4 <main+0x3d4>",},
|
||||
{{0xf2, 0xff, 0x21, }, 3, 0, "jmp", "indirect",
|
||||
"f2 ff 21 \tbnd jmp *(%ecx)",},
|
||||
{{0xf2, 0x0f, 0x85, 0xfc, 0xff, 0xff, 0xff, }, 7, 0xfffffffc, "jcc", "conditional",
|
||||
"f2 0f 85 fc ff ff ff \tbnd jne 3de <main+0x3de>",},
|
||||
{{0x0f, 0x3a, 0xcc, 0xc1, 0x00, }, 5, 0, "", "",
|
||||
"0f 3a cc c1 00 \tsha1rnds4 $0x0,%xmm1,%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0xd7, 0x91, }, 5, 0, "", "",
|
||||
"0f 3a cc d7 91 \tsha1rnds4 $0x91,%xmm7,%xmm2",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x00, 0x91, }, 5, 0, "", "",
|
||||
"0f 3a cc 00 91 \tsha1rnds4 $0x91,(%eax),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x05, 0x78, 0x56, 0x34, 0x12, 0x91, }, 9, 0, "", "",
|
||||
"0f 3a cc 05 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678,%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x18, 0x91, }, 5, 0, "", "",
|
||||
"0f 3a cc 18 91 \tsha1rnds4 $0x91,(%eax),%xmm3",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x04, 0x01, 0x91, }, 6, 0, "", "",
|
||||
"0f 3a cc 04 01 91 \tsha1rnds4 $0x91,(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "",
|
||||
"0f 3a cc 04 05 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x04, 0x08, 0x91, }, 6, 0, "", "",
|
||||
"0f 3a cc 04 08 91 \tsha1rnds4 $0x91,(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x04, 0xc8, 0x91, }, 6, 0, "", "",
|
||||
"0f 3a cc 04 c8 91 \tsha1rnds4 $0x91,(%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x40, 0x12, 0x91, }, 6, 0, "", "",
|
||||
"0f 3a cc 40 12 91 \tsha1rnds4 $0x91,0x12(%eax),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x45, 0x12, 0x91, }, 6, 0, "", "",
|
||||
"0f 3a cc 45 12 91 \tsha1rnds4 $0x91,0x12(%ebp),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x44, 0x01, 0x12, 0x91, }, 7, 0, "", "",
|
||||
"0f 3a cc 44 01 12 91 \tsha1rnds4 $0x91,0x12(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x44, 0x05, 0x12, 0x91, }, 7, 0, "", "",
|
||||
"0f 3a cc 44 05 12 91 \tsha1rnds4 $0x91,0x12(%ebp,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x44, 0x08, 0x12, 0x91, }, 7, 0, "", "",
|
||||
"0f 3a cc 44 08 12 91 \tsha1rnds4 $0x91,0x12(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x44, 0xc8, 0x12, 0x91, }, 7, 0, "", "",
|
||||
"0f 3a cc 44 c8 12 91 \tsha1rnds4 $0x91,0x12(%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x80, 0x78, 0x56, 0x34, 0x12, 0x91, }, 9, 0, "", "",
|
||||
"0f 3a cc 80 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%eax),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x85, 0x78, 0x56, 0x34, 0x12, 0x91, }, 9, 0, "", "",
|
||||
"0f 3a cc 85 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%ebp),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "",
|
||||
"0f 3a cc 84 01 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "",
|
||||
"0f 3a cc 84 05 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%ebp,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "",
|
||||
"0f 3a cc 84 08 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "",
|
||||
"0f 3a cc 84 c8 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0xc1, }, 4, 0, "", "",
|
||||
"0f 38 c8 c1 \tsha1nexte %xmm1,%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0xd7, }, 4, 0, "", "",
|
||||
"0f 38 c8 d7 \tsha1nexte %xmm7,%xmm2",},
|
||||
{{0x0f, 0x38, 0xc8, 0x00, }, 4, 0, "", "",
|
||||
"0f 38 c8 00 \tsha1nexte (%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 c8 05 78 56 34 12 \tsha1nexte 0x12345678,%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x18, }, 4, 0, "", "",
|
||||
"0f 38 c8 18 \tsha1nexte (%eax),%xmm3",},
|
||||
{{0x0f, 0x38, 0xc8, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"0f 38 c8 04 01 \tsha1nexte (%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c8 04 05 78 56 34 12 \tsha1nexte 0x12345678(,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"0f 38 c8 04 08 \tsha1nexte (%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"0f 38 c8 04 c8 \tsha1nexte (%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 c8 40 12 \tsha1nexte 0x12(%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 c8 45 12 \tsha1nexte 0x12(%ebp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c8 44 01 12 \tsha1nexte 0x12(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c8 44 05 12 \tsha1nexte 0x12(%ebp,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c8 44 08 12 \tsha1nexte 0x12(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c8 44 c8 12 \tsha1nexte 0x12(%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 c8 80 78 56 34 12 \tsha1nexte 0x12345678(%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 c8 85 78 56 34 12 \tsha1nexte 0x12345678(%ebp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c8 84 01 78 56 34 12 \tsha1nexte 0x12345678(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c8 84 05 78 56 34 12 \tsha1nexte 0x12345678(%ebp,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c8 84 08 78 56 34 12 \tsha1nexte 0x12345678(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c8 84 c8 78 56 34 12 \tsha1nexte 0x12345678(%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0xc1, }, 4, 0, "", "",
|
||||
"0f 38 c9 c1 \tsha1msg1 %xmm1,%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0xd7, }, 4, 0, "", "",
|
||||
"0f 38 c9 d7 \tsha1msg1 %xmm7,%xmm2",},
|
||||
{{0x0f, 0x38, 0xc9, 0x00, }, 4, 0, "", "",
|
||||
"0f 38 c9 00 \tsha1msg1 (%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 c9 05 78 56 34 12 \tsha1msg1 0x12345678,%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x18, }, 4, 0, "", "",
|
||||
"0f 38 c9 18 \tsha1msg1 (%eax),%xmm3",},
|
||||
{{0x0f, 0x38, 0xc9, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"0f 38 c9 04 01 \tsha1msg1 (%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c9 04 05 78 56 34 12 \tsha1msg1 0x12345678(,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"0f 38 c9 04 08 \tsha1msg1 (%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"0f 38 c9 04 c8 \tsha1msg1 (%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 c9 40 12 \tsha1msg1 0x12(%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 c9 45 12 \tsha1msg1 0x12(%ebp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c9 44 01 12 \tsha1msg1 0x12(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c9 44 05 12 \tsha1msg1 0x12(%ebp,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c9 44 08 12 \tsha1msg1 0x12(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c9 44 c8 12 \tsha1msg1 0x12(%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 c9 80 78 56 34 12 \tsha1msg1 0x12345678(%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 c9 85 78 56 34 12 \tsha1msg1 0x12345678(%ebp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c9 84 01 78 56 34 12 \tsha1msg1 0x12345678(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c9 84 05 78 56 34 12 \tsha1msg1 0x12345678(%ebp,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c9 84 08 78 56 34 12 \tsha1msg1 0x12345678(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c9 84 c8 78 56 34 12 \tsha1msg1 0x12345678(%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0xc1, }, 4, 0, "", "",
|
||||
"0f 38 ca c1 \tsha1msg2 %xmm1,%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0xd7, }, 4, 0, "", "",
|
||||
"0f 38 ca d7 \tsha1msg2 %xmm7,%xmm2",},
|
||||
{{0x0f, 0x38, 0xca, 0x00, }, 4, 0, "", "",
|
||||
"0f 38 ca 00 \tsha1msg2 (%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 ca 05 78 56 34 12 \tsha1msg2 0x12345678,%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x18, }, 4, 0, "", "",
|
||||
"0f 38 ca 18 \tsha1msg2 (%eax),%xmm3",},
|
||||
{{0x0f, 0x38, 0xca, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"0f 38 ca 04 01 \tsha1msg2 (%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 ca 04 05 78 56 34 12 \tsha1msg2 0x12345678(,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"0f 38 ca 04 08 \tsha1msg2 (%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"0f 38 ca 04 c8 \tsha1msg2 (%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 ca 40 12 \tsha1msg2 0x12(%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 ca 45 12 \tsha1msg2 0x12(%ebp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 ca 44 01 12 \tsha1msg2 0x12(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 ca 44 05 12 \tsha1msg2 0x12(%ebp,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 ca 44 08 12 \tsha1msg2 0x12(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 ca 44 c8 12 \tsha1msg2 0x12(%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 ca 80 78 56 34 12 \tsha1msg2 0x12345678(%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 ca 85 78 56 34 12 \tsha1msg2 0x12345678(%ebp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 ca 84 01 78 56 34 12 \tsha1msg2 0x12345678(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 ca 84 05 78 56 34 12 \tsha1msg2 0x12345678(%ebp,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 ca 84 08 78 56 34 12 \tsha1msg2 0x12345678(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 ca 84 c8 78 56 34 12 \tsha1msg2 0x12345678(%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcb, 0xcc, }, 4, 0, "", "",
|
||||
"0f 38 cb cc \tsha256rnds2 %xmm0,%xmm4,%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0xd7, }, 4, 0, "", "",
|
||||
"0f 38 cb d7 \tsha256rnds2 %xmm0,%xmm7,%xmm2",},
|
||||
{{0x0f, 0x38, 0xcb, 0x08, }, 4, 0, "", "",
|
||||
"0f 38 cb 08 \tsha256rnds2 %xmm0,(%eax),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x0d, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cb 0d 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678,%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x18, }, 4, 0, "", "",
|
||||
"0f 38 cb 18 \tsha256rnds2 %xmm0,(%eax),%xmm3",},
|
||||
{{0x0f, 0x38, 0xcb, 0x0c, 0x01, }, 5, 0, "", "",
|
||||
"0f 38 cb 0c 01 \tsha256rnds2 %xmm0,(%ecx,%eax,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x0c, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cb 0c 05 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(,%eax,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x0c, 0x08, }, 5, 0, "", "",
|
||||
"0f 38 cb 0c 08 \tsha256rnds2 %xmm0,(%eax,%ecx,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x0c, 0xc8, }, 5, 0, "", "",
|
||||
"0f 38 cb 0c c8 \tsha256rnds2 %xmm0,(%eax,%ecx,8),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x48, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 cb 48 12 \tsha256rnds2 %xmm0,0x12(%eax),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x4d, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 cb 4d 12 \tsha256rnds2 %xmm0,0x12(%ebp),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x4c, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cb 4c 01 12 \tsha256rnds2 %xmm0,0x12(%ecx,%eax,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x4c, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cb 4c 05 12 \tsha256rnds2 %xmm0,0x12(%ebp,%eax,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x4c, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cb 4c 08 12 \tsha256rnds2 %xmm0,0x12(%eax,%ecx,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x4c, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cb 4c c8 12 \tsha256rnds2 %xmm0,0x12(%eax,%ecx,8),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x88, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cb 88 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%eax),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x8d, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cb 8d 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%ebp),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x8c, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cb 8c 01 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%ecx,%eax,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x8c, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cb 8c 05 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%ebp,%eax,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x8c, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cb 8c 08 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%eax,%ecx,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x8c, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cb 8c c8 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%eax,%ecx,8),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcc, 0xc1, }, 4, 0, "", "",
|
||||
"0f 38 cc c1 \tsha256msg1 %xmm1,%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0xd7, }, 4, 0, "", "",
|
||||
"0f 38 cc d7 \tsha256msg1 %xmm7,%xmm2",},
|
||||
{{0x0f, 0x38, 0xcc, 0x00, }, 4, 0, "", "",
|
||||
"0f 38 cc 00 \tsha256msg1 (%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cc 05 78 56 34 12 \tsha256msg1 0x12345678,%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x18, }, 4, 0, "", "",
|
||||
"0f 38 cc 18 \tsha256msg1 (%eax),%xmm3",},
|
||||
{{0x0f, 0x38, 0xcc, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"0f 38 cc 04 01 \tsha256msg1 (%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cc 04 05 78 56 34 12 \tsha256msg1 0x12345678(,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"0f 38 cc 04 08 \tsha256msg1 (%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"0f 38 cc 04 c8 \tsha256msg1 (%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 cc 40 12 \tsha256msg1 0x12(%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 cc 45 12 \tsha256msg1 0x12(%ebp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cc 44 01 12 \tsha256msg1 0x12(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cc 44 05 12 \tsha256msg1 0x12(%ebp,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cc 44 08 12 \tsha256msg1 0x12(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cc 44 c8 12 \tsha256msg1 0x12(%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cc 80 78 56 34 12 \tsha256msg1 0x12345678(%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cc 85 78 56 34 12 \tsha256msg1 0x12345678(%ebp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cc 84 01 78 56 34 12 \tsha256msg1 0x12345678(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cc 84 05 78 56 34 12 \tsha256msg1 0x12345678(%ebp,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cc 84 08 78 56 34 12 \tsha256msg1 0x12345678(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cc 84 c8 78 56 34 12 \tsha256msg1 0x12345678(%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0xc1, }, 4, 0, "", "",
|
||||
"0f 38 cd c1 \tsha256msg2 %xmm1,%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0xd7, }, 4, 0, "", "",
|
||||
"0f 38 cd d7 \tsha256msg2 %xmm7,%xmm2",},
|
||||
{{0x0f, 0x38, 0xcd, 0x00, }, 4, 0, "", "",
|
||||
"0f 38 cd 00 \tsha256msg2 (%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cd 05 78 56 34 12 \tsha256msg2 0x12345678,%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x18, }, 4, 0, "", "",
|
||||
"0f 38 cd 18 \tsha256msg2 (%eax),%xmm3",},
|
||||
{{0x0f, 0x38, 0xcd, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"0f 38 cd 04 01 \tsha256msg2 (%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cd 04 05 78 56 34 12 \tsha256msg2 0x12345678(,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"0f 38 cd 04 08 \tsha256msg2 (%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"0f 38 cd 04 c8 \tsha256msg2 (%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 cd 40 12 \tsha256msg2 0x12(%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 cd 45 12 \tsha256msg2 0x12(%ebp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cd 44 01 12 \tsha256msg2 0x12(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cd 44 05 12 \tsha256msg2 0x12(%ebp,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cd 44 08 12 \tsha256msg2 0x12(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cd 44 c8 12 \tsha256msg2 0x12(%eax,%ecx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cd 80 78 56 34 12 \tsha256msg2 0x12345678(%eax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cd 85 78 56 34 12 \tsha256msg2 0x12345678(%ebp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cd 84 01 78 56 34 12 \tsha256msg2 0x12345678(%ecx,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cd 84 05 78 56 34 12 \tsha256msg2 0x12345678(%ebp,%eax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cd 84 08 78 56 34 12 \tsha256msg2 0x12345678(%eax,%ecx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cd 84 c8 78 56 34 12 \tsha256msg2 0x12345678(%eax,%ecx,8),%xmm0",},
|
||||
{{0x66, 0x0f, 0xae, 0x38, }, 4, 0, "", "",
|
||||
"66 0f ae 38 \tclflushopt (%eax)",},
|
||||
{{0x66, 0x0f, 0xae, 0x3d, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"66 0f ae 3d 78 56 34 12 \tclflushopt 0x12345678",},
|
||||
{{0x66, 0x0f, 0xae, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f ae bc c8 78 56 34 12 \tclflushopt 0x12345678(%eax,%ecx,8)",},
|
||||
{{0x0f, 0xae, 0x38, }, 3, 0, "", "",
|
||||
"0f ae 38 \tclflush (%eax)",},
|
||||
{{0x0f, 0xae, 0xf8, }, 3, 0, "", "",
|
||||
"0f ae f8 \tsfence ",},
|
||||
{{0x66, 0x0f, 0xae, 0x30, }, 4, 0, "", "",
|
||||
"66 0f ae 30 \tclwb (%eax)",},
|
||||
{{0x66, 0x0f, 0xae, 0x35, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"66 0f ae 35 78 56 34 12 \tclwb 0x12345678",},
|
||||
{{0x66, 0x0f, 0xae, 0xb4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f ae b4 c8 78 56 34 12 \tclwb 0x12345678(%eax,%ecx,8)",},
|
||||
{{0x0f, 0xae, 0x30, }, 3, 0, "", "",
|
||||
"0f ae 30 \txsaveopt (%eax)",},
|
||||
{{0x0f, 0xae, 0xf0, }, 3, 0, "", "",
|
||||
"0f ae f0 \tmfence ",},
|
||||
{{0x0f, 0xc7, 0x20, }, 3, 0, "", "",
|
||||
"0f c7 20 \txsavec (%eax)",},
|
||||
{{0x0f, 0xc7, 0x25, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f c7 25 78 56 34 12 \txsavec 0x12345678",},
|
||||
{{0x0f, 0xc7, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f c7 a4 c8 78 56 34 12 \txsavec 0x12345678(%eax,%ecx,8)",},
|
||||
{{0x0f, 0xc7, 0x28, }, 3, 0, "", "",
|
||||
"0f c7 28 \txsaves (%eax)",},
|
||||
{{0x0f, 0xc7, 0x2d, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f c7 2d 78 56 34 12 \txsaves 0x12345678",},
|
||||
{{0x0f, 0xc7, 0xac, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f c7 ac c8 78 56 34 12 \txsaves 0x12345678(%eax,%ecx,8)",},
|
||||
{{0x0f, 0xc7, 0x18, }, 3, 0, "", "",
|
||||
"0f c7 18 \txrstors (%eax)",},
|
||||
{{0x0f, 0xc7, 0x1d, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f c7 1d 78 56 34 12 \txrstors 0x12345678",},
|
||||
{{0x0f, 0xc7, 0x9c, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f c7 9c c8 78 56 34 12 \txrstors 0x12345678(%eax,%ecx,8)",},
|
||||
{{0x66, 0x0f, 0xae, 0xf8, }, 4, 0, "", "",
|
||||
"66 0f ae f8 \tpcommit ",},
|
768
tools/perf/tests/insn-x86-dat-64.c
Normal file
768
tools/perf/tests/insn-x86-dat-64.c
Normal file
@ -0,0 +1,768 @@
|
||||
/*
|
||||
* Generated by gen-insn-x86-dat.sh and gen-insn-x86-dat.awk
|
||||
* from insn-x86-dat-src.c for inclusion by insn-x86.c
|
||||
* Do not change this code.
|
||||
*/
|
||||
|
||||
{{0x0f, 0x31, }, 2, 0, "", "",
|
||||
"0f 31 \trdtsc ",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x00, }, 4, 0, "", "",
|
||||
"f3 0f 1b 00 \tbndmk (%rax),%bnd0",},
|
||||
{{0xf3, 0x41, 0x0f, 0x1b, 0x00, }, 5, 0, "", "",
|
||||
"f3 41 0f 1b 00 \tbndmk (%r8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1b 04 25 78 56 34 12 \tbndmk 0x12345678,%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x18, }, 4, 0, "", "",
|
||||
"f3 0f 1b 18 \tbndmk (%rax),%bnd3",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"f3 0f 1b 04 01 \tbndmk (%rcx,%rax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1b 04 05 78 56 34 12 \tbndmk 0x12345678(,%rax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"f3 0f 1b 04 08 \tbndmk (%rax,%rcx,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"f3 0f 1b 04 c8 \tbndmk (%rax,%rcx,8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"f3 0f 1b 40 12 \tbndmk 0x12(%rax),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"f3 0f 1b 45 12 \tbndmk 0x12(%rbp),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1b 44 01 12 \tbndmk 0x12(%rcx,%rax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1b 44 05 12 \tbndmk 0x12(%rbp,%rax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1b 44 08 12 \tbndmk 0x12(%rax,%rcx,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1b 44 c8 12 \tbndmk 0x12(%rax,%rcx,8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f3 0f 1b 80 78 56 34 12 \tbndmk 0x12345678(%rax),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f3 0f 1b 85 78 56 34 12 \tbndmk 0x12345678(%rbp),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1b 84 01 78 56 34 12 \tbndmk 0x12345678(%rcx,%rax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1b 84 05 78 56 34 12 \tbndmk 0x12345678(%rbp,%rax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1b 84 08 78 56 34 12 \tbndmk 0x12345678(%rax,%rcx,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1b, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1b 84 c8 78 56 34 12 \tbndmk 0x12345678(%rax,%rcx,8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x00, }, 4, 0, "", "",
|
||||
"f3 0f 1a 00 \tbndcl (%rax),%bnd0",},
|
||||
{{0xf3, 0x41, 0x0f, 0x1a, 0x00, }, 5, 0, "", "",
|
||||
"f3 41 0f 1a 00 \tbndcl (%r8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1a 04 25 78 56 34 12 \tbndcl 0x12345678,%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x18, }, 4, 0, "", "",
|
||||
"f3 0f 1a 18 \tbndcl (%rax),%bnd3",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"f3 0f 1a 04 01 \tbndcl (%rcx,%rax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1a 04 05 78 56 34 12 \tbndcl 0x12345678(,%rax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"f3 0f 1a 04 08 \tbndcl (%rax,%rcx,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"f3 0f 1a 04 c8 \tbndcl (%rax,%rcx,8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"f3 0f 1a 40 12 \tbndcl 0x12(%rax),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"f3 0f 1a 45 12 \tbndcl 0x12(%rbp),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1a 44 01 12 \tbndcl 0x12(%rcx,%rax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1a 44 05 12 \tbndcl 0x12(%rbp,%rax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1a 44 08 12 \tbndcl 0x12(%rax,%rcx,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"f3 0f 1a 44 c8 12 \tbndcl 0x12(%rax,%rcx,8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f3 0f 1a 80 78 56 34 12 \tbndcl 0x12345678(%rax),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f3 0f 1a 85 78 56 34 12 \tbndcl 0x12345678(%rbp),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1a 84 01 78 56 34 12 \tbndcl 0x12345678(%rcx,%rax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1a 84 05 78 56 34 12 \tbndcl 0x12345678(%rbp,%rax,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1a 84 08 78 56 34 12 \tbndcl 0x12345678(%rax,%rcx,1),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f3 0f 1a 84 c8 78 56 34 12 \tbndcl 0x12345678(%rax,%rcx,8),%bnd0",},
|
||||
{{0xf3, 0x0f, 0x1a, 0xc0, }, 4, 0, "", "",
|
||||
"f3 0f 1a c0 \tbndcl %rax,%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x00, }, 4, 0, "", "",
|
||||
"f2 0f 1a 00 \tbndcu (%rax),%bnd0",},
|
||||
{{0xf2, 0x41, 0x0f, 0x1a, 0x00, }, 5, 0, "", "",
|
||||
"f2 41 0f 1a 00 \tbndcu (%r8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1a 04 25 78 56 34 12 \tbndcu 0x12345678,%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x18, }, 4, 0, "", "",
|
||||
"f2 0f 1a 18 \tbndcu (%rax),%bnd3",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"f2 0f 1a 04 01 \tbndcu (%rcx,%rax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1a 04 05 78 56 34 12 \tbndcu 0x12345678(,%rax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"f2 0f 1a 04 08 \tbndcu (%rax,%rcx,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"f2 0f 1a 04 c8 \tbndcu (%rax,%rcx,8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"f2 0f 1a 40 12 \tbndcu 0x12(%rax),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"f2 0f 1a 45 12 \tbndcu 0x12(%rbp),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1a 44 01 12 \tbndcu 0x12(%rcx,%rax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1a 44 05 12 \tbndcu 0x12(%rbp,%rax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1a 44 08 12 \tbndcu 0x12(%rax,%rcx,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1a 44 c8 12 \tbndcu 0x12(%rax,%rcx,8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f2 0f 1a 80 78 56 34 12 \tbndcu 0x12345678(%rax),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f2 0f 1a 85 78 56 34 12 \tbndcu 0x12345678(%rbp),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1a 84 01 78 56 34 12 \tbndcu 0x12345678(%rcx,%rax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1a 84 05 78 56 34 12 \tbndcu 0x12345678(%rbp,%rax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1a 84 08 78 56 34 12 \tbndcu 0x12345678(%rax,%rcx,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1a 84 c8 78 56 34 12 \tbndcu 0x12345678(%rax,%rcx,8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1a, 0xc0, }, 4, 0, "", "",
|
||||
"f2 0f 1a c0 \tbndcu %rax,%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x00, }, 4, 0, "", "",
|
||||
"f2 0f 1b 00 \tbndcn (%rax),%bnd0",},
|
||||
{{0xf2, 0x41, 0x0f, 0x1b, 0x00, }, 5, 0, "", "",
|
||||
"f2 41 0f 1b 00 \tbndcn (%r8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1b 04 25 78 56 34 12 \tbndcn 0x12345678,%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x18, }, 4, 0, "", "",
|
||||
"f2 0f 1b 18 \tbndcn (%rax),%bnd3",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"f2 0f 1b 04 01 \tbndcn (%rcx,%rax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1b 04 05 78 56 34 12 \tbndcn 0x12345678(,%rax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"f2 0f 1b 04 08 \tbndcn (%rax,%rcx,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"f2 0f 1b 04 c8 \tbndcn (%rax,%rcx,8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"f2 0f 1b 40 12 \tbndcn 0x12(%rax),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"f2 0f 1b 45 12 \tbndcn 0x12(%rbp),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1b 44 01 12 \tbndcn 0x12(%rcx,%rax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1b 44 05 12 \tbndcn 0x12(%rbp,%rax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1b 44 08 12 \tbndcn 0x12(%rax,%rcx,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"f2 0f 1b 44 c8 12 \tbndcn 0x12(%rax,%rcx,8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f2 0f 1b 80 78 56 34 12 \tbndcn 0x12345678(%rax),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"f2 0f 1b 85 78 56 34 12 \tbndcn 0x12345678(%rbp),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1b 84 01 78 56 34 12 \tbndcn 0x12345678(%rcx,%rax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1b 84 05 78 56 34 12 \tbndcn 0x12345678(%rbp,%rax,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1b 84 08 78 56 34 12 \tbndcn 0x12345678(%rax,%rcx,1),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"f2 0f 1b 84 c8 78 56 34 12 \tbndcn 0x12345678(%rax,%rcx,8),%bnd0",},
|
||||
{{0xf2, 0x0f, 0x1b, 0xc0, }, 4, 0, "", "",
|
||||
"f2 0f 1b c0 \tbndcn %rax,%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x00, }, 4, 0, "", "",
|
||||
"66 0f 1a 00 \tbndmov (%rax),%bnd0",},
|
||||
{{0x66, 0x41, 0x0f, 0x1a, 0x00, }, 5, 0, "", "",
|
||||
"66 41 0f 1a 00 \tbndmov (%r8),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1a 04 25 78 56 34 12 \tbndmov 0x12345678,%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x18, }, 4, 0, "", "",
|
||||
"66 0f 1a 18 \tbndmov (%rax),%bnd3",},
|
||||
{{0x66, 0x0f, 0x1a, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"66 0f 1a 04 01 \tbndmov (%rcx,%rax,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1a 04 05 78 56 34 12 \tbndmov 0x12345678(,%rax,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"66 0f 1a 04 08 \tbndmov (%rax,%rcx,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"66 0f 1a 04 c8 \tbndmov (%rax,%rcx,8),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"66 0f 1a 40 12 \tbndmov 0x12(%rax),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"66 0f 1a 45 12 \tbndmov 0x12(%rbp),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1a 44 01 12 \tbndmov 0x12(%rcx,%rax,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1a 44 05 12 \tbndmov 0x12(%rbp,%rax,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1a 44 08 12 \tbndmov 0x12(%rax,%rcx,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1a 44 c8 12 \tbndmov 0x12(%rax,%rcx,8),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"66 0f 1a 80 78 56 34 12 \tbndmov 0x12345678(%rax),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"66 0f 1a 85 78 56 34 12 \tbndmov 0x12345678(%rbp),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1a 84 01 78 56 34 12 \tbndmov 0x12345678(%rcx,%rax,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1a 84 05 78 56 34 12 \tbndmov 0x12345678(%rbp,%rax,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1a 84 08 78 56 34 12 \tbndmov 0x12345678(%rax,%rcx,1),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1a, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1a 84 c8 78 56 34 12 \tbndmov 0x12345678(%rax,%rcx,8),%bnd0",},
|
||||
{{0x66, 0x0f, 0x1b, 0x00, }, 4, 0, "", "",
|
||||
"66 0f 1b 00 \tbndmov %bnd0,(%rax)",},
|
||||
{{0x66, 0x41, 0x0f, 0x1b, 0x00, }, 5, 0, "", "",
|
||||
"66 41 0f 1b 00 \tbndmov %bnd0,(%r8)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1b 04 25 78 56 34 12 \tbndmov %bnd0,0x12345678",},
|
||||
{{0x66, 0x0f, 0x1b, 0x18, }, 4, 0, "", "",
|
||||
"66 0f 1b 18 \tbndmov %bnd3,(%rax)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"66 0f 1b 04 01 \tbndmov %bnd0,(%rcx,%rax,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1b 04 05 78 56 34 12 \tbndmov %bnd0,0x12345678(,%rax,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"66 0f 1b 04 08 \tbndmov %bnd0,(%rax,%rcx,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"66 0f 1b 04 c8 \tbndmov %bnd0,(%rax,%rcx,8)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"66 0f 1b 40 12 \tbndmov %bnd0,0x12(%rax)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"66 0f 1b 45 12 \tbndmov %bnd0,0x12(%rbp)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1b 44 01 12 \tbndmov %bnd0,0x12(%rcx,%rax,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1b 44 05 12 \tbndmov %bnd0,0x12(%rbp,%rax,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1b 44 08 12 \tbndmov %bnd0,0x12(%rax,%rcx,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"66 0f 1b 44 c8 12 \tbndmov %bnd0,0x12(%rax,%rcx,8)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"66 0f 1b 80 78 56 34 12 \tbndmov %bnd0,0x12345678(%rax)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"66 0f 1b 85 78 56 34 12 \tbndmov %bnd0,0x12345678(%rbp)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1b 84 01 78 56 34 12 \tbndmov %bnd0,0x12345678(%rcx,%rax,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1b 84 05 78 56 34 12 \tbndmov %bnd0,0x12345678(%rbp,%rax,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1b 84 08 78 56 34 12 \tbndmov %bnd0,0x12345678(%rax,%rcx,1)",},
|
||||
{{0x66, 0x0f, 0x1b, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f 1b 84 c8 78 56 34 12 \tbndmov %bnd0,0x12345678(%rax,%rcx,8)",},
|
||||
{{0x66, 0x0f, 0x1a, 0xc8, }, 4, 0, "", "",
|
||||
"66 0f 1a c8 \tbndmov %bnd0,%bnd1",},
|
||||
{{0x66, 0x0f, 0x1a, 0xc1, }, 4, 0, "", "",
|
||||
"66 0f 1a c1 \tbndmov %bnd1,%bnd0",},
|
||||
{{0x0f, 0x1a, 0x00, }, 3, 0, "", "",
|
||||
"0f 1a 00 \tbndldx (%rax),%bnd0",},
|
||||
{{0x41, 0x0f, 0x1a, 0x00, }, 4, 0, "", "",
|
||||
"41 0f 1a 00 \tbndldx (%r8),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1a 04 25 78 56 34 12 \tbndldx 0x12345678,%bnd0",},
|
||||
{{0x0f, 0x1a, 0x18, }, 3, 0, "", "",
|
||||
"0f 1a 18 \tbndldx (%rax),%bnd3",},
|
||||
{{0x0f, 0x1a, 0x04, 0x01, }, 4, 0, "", "",
|
||||
"0f 1a 04 01 \tbndldx (%rcx,%rax,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1a 04 05 78 56 34 12 \tbndldx 0x12345678(,%rax,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x04, 0x08, }, 4, 0, "", "",
|
||||
"0f 1a 04 08 \tbndldx (%rax,%rcx,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x40, 0x12, }, 4, 0, "", "",
|
||||
"0f 1a 40 12 \tbndldx 0x12(%rax),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x45, 0x12, }, 4, 0, "", "",
|
||||
"0f 1a 45 12 \tbndldx 0x12(%rbp),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x44, 0x01, 0x12, }, 5, 0, "", "",
|
||||
"0f 1a 44 01 12 \tbndldx 0x12(%rcx,%rax,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x44, 0x05, 0x12, }, 5, 0, "", "",
|
||||
"0f 1a 44 05 12 \tbndldx 0x12(%rbp,%rax,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x44, 0x08, 0x12, }, 5, 0, "", "",
|
||||
"0f 1a 44 08 12 \tbndldx 0x12(%rax,%rcx,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f 1a 80 78 56 34 12 \tbndldx 0x12345678(%rax),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f 1a 85 78 56 34 12 \tbndldx 0x12345678(%rbp),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1a 84 01 78 56 34 12 \tbndldx 0x12345678(%rcx,%rax,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1a 84 05 78 56 34 12 \tbndldx 0x12345678(%rbp,%rax,1),%bnd0",},
|
||||
{{0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1a 84 08 78 56 34 12 \tbndldx 0x12345678(%rax,%rcx,1),%bnd0",},
|
||||
{{0x0f, 0x1b, 0x00, }, 3, 0, "", "",
|
||||
"0f 1b 00 \tbndstx %bnd0,(%rax)",},
|
||||
{{0x41, 0x0f, 0x1b, 0x00, }, 4, 0, "", "",
|
||||
"41 0f 1b 00 \tbndstx %bnd0,(%r8)",},
|
||||
{{0x0f, 0x1b, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1b 04 25 78 56 34 12 \tbndstx %bnd0,0x12345678",},
|
||||
{{0x0f, 0x1b, 0x18, }, 3, 0, "", "",
|
||||
"0f 1b 18 \tbndstx %bnd3,(%rax)",},
|
||||
{{0x0f, 0x1b, 0x04, 0x01, }, 4, 0, "", "",
|
||||
"0f 1b 04 01 \tbndstx %bnd0,(%rcx,%rax,1)",},
|
||||
{{0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1b 04 05 78 56 34 12 \tbndstx %bnd0,0x12345678(,%rax,1)",},
|
||||
{{0x0f, 0x1b, 0x04, 0x08, }, 4, 0, "", "",
|
||||
"0f 1b 04 08 \tbndstx %bnd0,(%rax,%rcx,1)",},
|
||||
{{0x0f, 0x1b, 0x40, 0x12, }, 4, 0, "", "",
|
||||
"0f 1b 40 12 \tbndstx %bnd0,0x12(%rax)",},
|
||||
{{0x0f, 0x1b, 0x45, 0x12, }, 4, 0, "", "",
|
||||
"0f 1b 45 12 \tbndstx %bnd0,0x12(%rbp)",},
|
||||
{{0x0f, 0x1b, 0x44, 0x01, 0x12, }, 5, 0, "", "",
|
||||
"0f 1b 44 01 12 \tbndstx %bnd0,0x12(%rcx,%rax,1)",},
|
||||
{{0x0f, 0x1b, 0x44, 0x05, 0x12, }, 5, 0, "", "",
|
||||
"0f 1b 44 05 12 \tbndstx %bnd0,0x12(%rbp,%rax,1)",},
|
||||
{{0x0f, 0x1b, 0x44, 0x08, 0x12, }, 5, 0, "", "",
|
||||
"0f 1b 44 08 12 \tbndstx %bnd0,0x12(%rax,%rcx,1)",},
|
||||
{{0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f 1b 80 78 56 34 12 \tbndstx %bnd0,0x12345678(%rax)",},
|
||||
{{0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "",
|
||||
"0f 1b 85 78 56 34 12 \tbndstx %bnd0,0x12345678(%rbp)",},
|
||||
{{0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1b 84 01 78 56 34 12 \tbndstx %bnd0,0x12345678(%rcx,%rax,1)",},
|
||||
{{0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1b 84 05 78 56 34 12 \tbndstx %bnd0,0x12345678(%rbp,%rax,1)",},
|
||||
{{0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 1b 84 08 78 56 34 12 \tbndstx %bnd0,0x12345678(%rax,%rcx,1)",},
|
||||
{{0xf2, 0xe8, 0x00, 0x00, 0x00, 0x00, }, 6, 0, "call", "unconditional",
|
||||
"f2 e8 00 00 00 00 \tbnd callq 3f6 <main+0x3f6>",},
|
||||
{{0x67, 0xf2, 0xff, 0x10, }, 4, 0, "call", "indirect",
|
||||
"67 f2 ff 10 \tbnd callq *(%eax)",},
|
||||
{{0xf2, 0xc3, }, 2, 0, "ret", "indirect",
|
||||
"f2 c3 \tbnd retq ",},
|
||||
{{0xf2, 0xe9, 0x00, 0x00, 0x00, 0x00, }, 6, 0, "jmp", "unconditional",
|
||||
"f2 e9 00 00 00 00 \tbnd jmpq 402 <main+0x402>",},
|
||||
{{0xf2, 0xe9, 0x00, 0x00, 0x00, 0x00, }, 6, 0, "jmp", "unconditional",
|
||||
"f2 e9 00 00 00 00 \tbnd jmpq 408 <main+0x408>",},
|
||||
{{0x67, 0xf2, 0xff, 0x21, }, 4, 0, "jmp", "indirect",
|
||||
"67 f2 ff 21 \tbnd jmpq *(%ecx)",},
|
||||
{{0xf2, 0x0f, 0x85, 0x00, 0x00, 0x00, 0x00, }, 7, 0, "jcc", "conditional",
|
||||
"f2 0f 85 00 00 00 00 \tbnd jne 413 <main+0x413>",},
|
||||
{{0x0f, 0x3a, 0xcc, 0xc1, 0x00, }, 5, 0, "", "",
|
||||
"0f 3a cc c1 00 \tsha1rnds4 $0x0,%xmm1,%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0xd7, 0x91, }, 5, 0, "", "",
|
||||
"0f 3a cc d7 91 \tsha1rnds4 $0x91,%xmm7,%xmm2",},
|
||||
{{0x41, 0x0f, 0x3a, 0xcc, 0xc0, 0x91, }, 6, 0, "", "",
|
||||
"41 0f 3a cc c0 91 \tsha1rnds4 $0x91,%xmm8,%xmm0",},
|
||||
{{0x44, 0x0f, 0x3a, 0xcc, 0xc7, 0x91, }, 6, 0, "", "",
|
||||
"44 0f 3a cc c7 91 \tsha1rnds4 $0x91,%xmm7,%xmm8",},
|
||||
{{0x45, 0x0f, 0x3a, 0xcc, 0xc7, 0x91, }, 6, 0, "", "",
|
||||
"45 0f 3a cc c7 91 \tsha1rnds4 $0x91,%xmm15,%xmm8",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x00, 0x91, }, 5, 0, "", "",
|
||||
"0f 3a cc 00 91 \tsha1rnds4 $0x91,(%rax),%xmm0",},
|
||||
{{0x41, 0x0f, 0x3a, 0xcc, 0x00, 0x91, }, 6, 0, "", "",
|
||||
"41 0f 3a cc 00 91 \tsha1rnds4 $0x91,(%r8),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "",
|
||||
"0f 3a cc 04 25 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678,%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x18, 0x91, }, 5, 0, "", "",
|
||||
"0f 3a cc 18 91 \tsha1rnds4 $0x91,(%rax),%xmm3",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x04, 0x01, 0x91, }, 6, 0, "", "",
|
||||
"0f 3a cc 04 01 91 \tsha1rnds4 $0x91,(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "",
|
||||
"0f 3a cc 04 05 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x04, 0x08, 0x91, }, 6, 0, "", "",
|
||||
"0f 3a cc 04 08 91 \tsha1rnds4 $0x91,(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x04, 0xc8, 0x91, }, 6, 0, "", "",
|
||||
"0f 3a cc 04 c8 91 \tsha1rnds4 $0x91,(%rax,%rcx,8),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x40, 0x12, 0x91, }, 6, 0, "", "",
|
||||
"0f 3a cc 40 12 91 \tsha1rnds4 $0x91,0x12(%rax),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x45, 0x12, 0x91, }, 6, 0, "", "",
|
||||
"0f 3a cc 45 12 91 \tsha1rnds4 $0x91,0x12(%rbp),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x44, 0x01, 0x12, 0x91, }, 7, 0, "", "",
|
||||
"0f 3a cc 44 01 12 91 \tsha1rnds4 $0x91,0x12(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x44, 0x05, 0x12, 0x91, }, 7, 0, "", "",
|
||||
"0f 3a cc 44 05 12 91 \tsha1rnds4 $0x91,0x12(%rbp,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x44, 0x08, 0x12, 0x91, }, 7, 0, "", "",
|
||||
"0f 3a cc 44 08 12 91 \tsha1rnds4 $0x91,0x12(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x44, 0xc8, 0x12, 0x91, }, 7, 0, "", "",
|
||||
"0f 3a cc 44 c8 12 91 \tsha1rnds4 $0x91,0x12(%rax,%rcx,8),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x80, 0x78, 0x56, 0x34, 0x12, 0x91, }, 9, 0, "", "",
|
||||
"0f 3a cc 80 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rax),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x85, 0x78, 0x56, 0x34, 0x12, 0x91, }, 9, 0, "", "",
|
||||
"0f 3a cc 85 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rbp),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "",
|
||||
"0f 3a cc 84 01 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "",
|
||||
"0f 3a cc 84 05 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rbp,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "",
|
||||
"0f 3a cc 84 08 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x3a, 0xcc, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "",
|
||||
"0f 3a cc 84 c8 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rax,%rcx,8),%xmm0",},
|
||||
{{0x44, 0x0f, 0x3a, 0xcc, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, 0x91, }, 11, 0, "", "",
|
||||
"44 0f 3a cc bc c8 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rax,%rcx,8),%xmm15",},
|
||||
{{0x0f, 0x38, 0xc8, 0xc1, }, 4, 0, "", "",
|
||||
"0f 38 c8 c1 \tsha1nexte %xmm1,%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0xd7, }, 4, 0, "", "",
|
||||
"0f 38 c8 d7 \tsha1nexte %xmm7,%xmm2",},
|
||||
{{0x41, 0x0f, 0x38, 0xc8, 0xc0, }, 5, 0, "", "",
|
||||
"41 0f 38 c8 c0 \tsha1nexte %xmm8,%xmm0",},
|
||||
{{0x44, 0x0f, 0x38, 0xc8, 0xc7, }, 5, 0, "", "",
|
||||
"44 0f 38 c8 c7 \tsha1nexte %xmm7,%xmm8",},
|
||||
{{0x45, 0x0f, 0x38, 0xc8, 0xc7, }, 5, 0, "", "",
|
||||
"45 0f 38 c8 c7 \tsha1nexte %xmm15,%xmm8",},
|
||||
{{0x0f, 0x38, 0xc8, 0x00, }, 4, 0, "", "",
|
||||
"0f 38 c8 00 \tsha1nexte (%rax),%xmm0",},
|
||||
{{0x41, 0x0f, 0x38, 0xc8, 0x00, }, 5, 0, "", "",
|
||||
"41 0f 38 c8 00 \tsha1nexte (%r8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c8 04 25 78 56 34 12 \tsha1nexte 0x12345678,%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x18, }, 4, 0, "", "",
|
||||
"0f 38 c8 18 \tsha1nexte (%rax),%xmm3",},
|
||||
{{0x0f, 0x38, 0xc8, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"0f 38 c8 04 01 \tsha1nexte (%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c8 04 05 78 56 34 12 \tsha1nexte 0x12345678(,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"0f 38 c8 04 08 \tsha1nexte (%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"0f 38 c8 04 c8 \tsha1nexte (%rax,%rcx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 c8 40 12 \tsha1nexte 0x12(%rax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 c8 45 12 \tsha1nexte 0x12(%rbp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c8 44 01 12 \tsha1nexte 0x12(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c8 44 05 12 \tsha1nexte 0x12(%rbp,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c8 44 08 12 \tsha1nexte 0x12(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c8 44 c8 12 \tsha1nexte 0x12(%rax,%rcx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 c8 80 78 56 34 12 \tsha1nexte 0x12345678(%rax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 c8 85 78 56 34 12 \tsha1nexte 0x12345678(%rbp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c8 84 01 78 56 34 12 \tsha1nexte 0x12345678(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c8 84 05 78 56 34 12 \tsha1nexte 0x12345678(%rbp,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c8 84 08 78 56 34 12 \tsha1nexte 0x12345678(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc8, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c8 84 c8 78 56 34 12 \tsha1nexte 0x12345678(%rax,%rcx,8),%xmm0",},
|
||||
{{0x44, 0x0f, 0x38, 0xc8, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
|
||||
"44 0f 38 c8 bc c8 78 56 34 12 \tsha1nexte 0x12345678(%rax,%rcx,8),%xmm15",},
|
||||
{{0x0f, 0x38, 0xc9, 0xc1, }, 4, 0, "", "",
|
||||
"0f 38 c9 c1 \tsha1msg1 %xmm1,%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0xd7, }, 4, 0, "", "",
|
||||
"0f 38 c9 d7 \tsha1msg1 %xmm7,%xmm2",},
|
||||
{{0x41, 0x0f, 0x38, 0xc9, 0xc0, }, 5, 0, "", "",
|
||||
"41 0f 38 c9 c0 \tsha1msg1 %xmm8,%xmm0",},
|
||||
{{0x44, 0x0f, 0x38, 0xc9, 0xc7, }, 5, 0, "", "",
|
||||
"44 0f 38 c9 c7 \tsha1msg1 %xmm7,%xmm8",},
|
||||
{{0x45, 0x0f, 0x38, 0xc9, 0xc7, }, 5, 0, "", "",
|
||||
"45 0f 38 c9 c7 \tsha1msg1 %xmm15,%xmm8",},
|
||||
{{0x0f, 0x38, 0xc9, 0x00, }, 4, 0, "", "",
|
||||
"0f 38 c9 00 \tsha1msg1 (%rax),%xmm0",},
|
||||
{{0x41, 0x0f, 0x38, 0xc9, 0x00, }, 5, 0, "", "",
|
||||
"41 0f 38 c9 00 \tsha1msg1 (%r8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c9 04 25 78 56 34 12 \tsha1msg1 0x12345678,%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x18, }, 4, 0, "", "",
|
||||
"0f 38 c9 18 \tsha1msg1 (%rax),%xmm3",},
|
||||
{{0x0f, 0x38, 0xc9, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"0f 38 c9 04 01 \tsha1msg1 (%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c9 04 05 78 56 34 12 \tsha1msg1 0x12345678(,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"0f 38 c9 04 08 \tsha1msg1 (%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"0f 38 c9 04 c8 \tsha1msg1 (%rax,%rcx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 c9 40 12 \tsha1msg1 0x12(%rax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 c9 45 12 \tsha1msg1 0x12(%rbp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c9 44 01 12 \tsha1msg1 0x12(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c9 44 05 12 \tsha1msg1 0x12(%rbp,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c9 44 08 12 \tsha1msg1 0x12(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 c9 44 c8 12 \tsha1msg1 0x12(%rax,%rcx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 c9 80 78 56 34 12 \tsha1msg1 0x12345678(%rax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 c9 85 78 56 34 12 \tsha1msg1 0x12345678(%rbp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c9 84 01 78 56 34 12 \tsha1msg1 0x12345678(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c9 84 05 78 56 34 12 \tsha1msg1 0x12345678(%rbp,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c9 84 08 78 56 34 12 \tsha1msg1 0x12345678(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xc9, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 c9 84 c8 78 56 34 12 \tsha1msg1 0x12345678(%rax,%rcx,8),%xmm0",},
|
||||
{{0x44, 0x0f, 0x38, 0xc9, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
|
||||
"44 0f 38 c9 bc c8 78 56 34 12 \tsha1msg1 0x12345678(%rax,%rcx,8),%xmm15",},
|
||||
{{0x0f, 0x38, 0xca, 0xc1, }, 4, 0, "", "",
|
||||
"0f 38 ca c1 \tsha1msg2 %xmm1,%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0xd7, }, 4, 0, "", "",
|
||||
"0f 38 ca d7 \tsha1msg2 %xmm7,%xmm2",},
|
||||
{{0x41, 0x0f, 0x38, 0xca, 0xc0, }, 5, 0, "", "",
|
||||
"41 0f 38 ca c0 \tsha1msg2 %xmm8,%xmm0",},
|
||||
{{0x44, 0x0f, 0x38, 0xca, 0xc7, }, 5, 0, "", "",
|
||||
"44 0f 38 ca c7 \tsha1msg2 %xmm7,%xmm8",},
|
||||
{{0x45, 0x0f, 0x38, 0xca, 0xc7, }, 5, 0, "", "",
|
||||
"45 0f 38 ca c7 \tsha1msg2 %xmm15,%xmm8",},
|
||||
{{0x0f, 0x38, 0xca, 0x00, }, 4, 0, "", "",
|
||||
"0f 38 ca 00 \tsha1msg2 (%rax),%xmm0",},
|
||||
{{0x41, 0x0f, 0x38, 0xca, 0x00, }, 5, 0, "", "",
|
||||
"41 0f 38 ca 00 \tsha1msg2 (%r8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 ca 04 25 78 56 34 12 \tsha1msg2 0x12345678,%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x18, }, 4, 0, "", "",
|
||||
"0f 38 ca 18 \tsha1msg2 (%rax),%xmm3",},
|
||||
{{0x0f, 0x38, 0xca, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"0f 38 ca 04 01 \tsha1msg2 (%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 ca 04 05 78 56 34 12 \tsha1msg2 0x12345678(,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"0f 38 ca 04 08 \tsha1msg2 (%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"0f 38 ca 04 c8 \tsha1msg2 (%rax,%rcx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 ca 40 12 \tsha1msg2 0x12(%rax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 ca 45 12 \tsha1msg2 0x12(%rbp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 ca 44 01 12 \tsha1msg2 0x12(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 ca 44 05 12 \tsha1msg2 0x12(%rbp,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 ca 44 08 12 \tsha1msg2 0x12(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 ca 44 c8 12 \tsha1msg2 0x12(%rax,%rcx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 ca 80 78 56 34 12 \tsha1msg2 0x12345678(%rax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 ca 85 78 56 34 12 \tsha1msg2 0x12345678(%rbp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 ca 84 01 78 56 34 12 \tsha1msg2 0x12345678(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 ca 84 05 78 56 34 12 \tsha1msg2 0x12345678(%rbp,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 ca 84 08 78 56 34 12 \tsha1msg2 0x12345678(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xca, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 ca 84 c8 78 56 34 12 \tsha1msg2 0x12345678(%rax,%rcx,8),%xmm0",},
|
||||
{{0x44, 0x0f, 0x38, 0xca, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
|
||||
"44 0f 38 ca bc c8 78 56 34 12 \tsha1msg2 0x12345678(%rax,%rcx,8),%xmm15",},
|
||||
{{0x0f, 0x38, 0xcb, 0xcc, }, 4, 0, "", "",
|
||||
"0f 38 cb cc \tsha256rnds2 %xmm0,%xmm4,%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0xd7, }, 4, 0, "", "",
|
||||
"0f 38 cb d7 \tsha256rnds2 %xmm0,%xmm7,%xmm2",},
|
||||
{{0x41, 0x0f, 0x38, 0xcb, 0xc8, }, 5, 0, "", "",
|
||||
"41 0f 38 cb c8 \tsha256rnds2 %xmm0,%xmm8,%xmm1",},
|
||||
{{0x44, 0x0f, 0x38, 0xcb, 0xc7, }, 5, 0, "", "",
|
||||
"44 0f 38 cb c7 \tsha256rnds2 %xmm0,%xmm7,%xmm8",},
|
||||
{{0x45, 0x0f, 0x38, 0xcb, 0xc7, }, 5, 0, "", "",
|
||||
"45 0f 38 cb c7 \tsha256rnds2 %xmm0,%xmm15,%xmm8",},
|
||||
{{0x0f, 0x38, 0xcb, 0x08, }, 4, 0, "", "",
|
||||
"0f 38 cb 08 \tsha256rnds2 %xmm0,(%rax),%xmm1",},
|
||||
{{0x41, 0x0f, 0x38, 0xcb, 0x08, }, 5, 0, "", "",
|
||||
"41 0f 38 cb 08 \tsha256rnds2 %xmm0,(%r8),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x0c, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cb 0c 25 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678,%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x18, }, 4, 0, "", "",
|
||||
"0f 38 cb 18 \tsha256rnds2 %xmm0,(%rax),%xmm3",},
|
||||
{{0x0f, 0x38, 0xcb, 0x0c, 0x01, }, 5, 0, "", "",
|
||||
"0f 38 cb 0c 01 \tsha256rnds2 %xmm0,(%rcx,%rax,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x0c, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cb 0c 05 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(,%rax,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x0c, 0x08, }, 5, 0, "", "",
|
||||
"0f 38 cb 0c 08 \tsha256rnds2 %xmm0,(%rax,%rcx,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x0c, 0xc8, }, 5, 0, "", "",
|
||||
"0f 38 cb 0c c8 \tsha256rnds2 %xmm0,(%rax,%rcx,8),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x48, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 cb 48 12 \tsha256rnds2 %xmm0,0x12(%rax),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x4d, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 cb 4d 12 \tsha256rnds2 %xmm0,0x12(%rbp),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x4c, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cb 4c 01 12 \tsha256rnds2 %xmm0,0x12(%rcx,%rax,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x4c, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cb 4c 05 12 \tsha256rnds2 %xmm0,0x12(%rbp,%rax,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x4c, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cb 4c 08 12 \tsha256rnds2 %xmm0,0x12(%rax,%rcx,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x4c, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cb 4c c8 12 \tsha256rnds2 %xmm0,0x12(%rax,%rcx,8),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x88, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cb 88 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rax),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x8d, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cb 8d 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rbp),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x8c, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cb 8c 01 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rcx,%rax,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x8c, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cb 8c 05 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rbp,%rax,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x8c, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cb 8c 08 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rax,%rcx,1),%xmm1",},
|
||||
{{0x0f, 0x38, 0xcb, 0x8c, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cb 8c c8 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rax,%rcx,8),%xmm1",},
|
||||
{{0x44, 0x0f, 0x38, 0xcb, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
|
||||
"44 0f 38 cb bc c8 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rax,%rcx,8),%xmm15",},
|
||||
{{0x0f, 0x38, 0xcc, 0xc1, }, 4, 0, "", "",
|
||||
"0f 38 cc c1 \tsha256msg1 %xmm1,%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0xd7, }, 4, 0, "", "",
|
||||
"0f 38 cc d7 \tsha256msg1 %xmm7,%xmm2",},
|
||||
{{0x41, 0x0f, 0x38, 0xcc, 0xc0, }, 5, 0, "", "",
|
||||
"41 0f 38 cc c0 \tsha256msg1 %xmm8,%xmm0",},
|
||||
{{0x44, 0x0f, 0x38, 0xcc, 0xc7, }, 5, 0, "", "",
|
||||
"44 0f 38 cc c7 \tsha256msg1 %xmm7,%xmm8",},
|
||||
{{0x45, 0x0f, 0x38, 0xcc, 0xc7, }, 5, 0, "", "",
|
||||
"45 0f 38 cc c7 \tsha256msg1 %xmm15,%xmm8",},
|
||||
{{0x0f, 0x38, 0xcc, 0x00, }, 4, 0, "", "",
|
||||
"0f 38 cc 00 \tsha256msg1 (%rax),%xmm0",},
|
||||
{{0x41, 0x0f, 0x38, 0xcc, 0x00, }, 5, 0, "", "",
|
||||
"41 0f 38 cc 00 \tsha256msg1 (%r8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cc 04 25 78 56 34 12 \tsha256msg1 0x12345678,%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x18, }, 4, 0, "", "",
|
||||
"0f 38 cc 18 \tsha256msg1 (%rax),%xmm3",},
|
||||
{{0x0f, 0x38, 0xcc, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"0f 38 cc 04 01 \tsha256msg1 (%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cc 04 05 78 56 34 12 \tsha256msg1 0x12345678(,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"0f 38 cc 04 08 \tsha256msg1 (%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"0f 38 cc 04 c8 \tsha256msg1 (%rax,%rcx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 cc 40 12 \tsha256msg1 0x12(%rax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 cc 45 12 \tsha256msg1 0x12(%rbp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cc 44 01 12 \tsha256msg1 0x12(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cc 44 05 12 \tsha256msg1 0x12(%rbp,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cc 44 08 12 \tsha256msg1 0x12(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cc 44 c8 12 \tsha256msg1 0x12(%rax,%rcx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cc 80 78 56 34 12 \tsha256msg1 0x12345678(%rax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cc 85 78 56 34 12 \tsha256msg1 0x12345678(%rbp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cc 84 01 78 56 34 12 \tsha256msg1 0x12345678(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cc 84 05 78 56 34 12 \tsha256msg1 0x12345678(%rbp,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cc 84 08 78 56 34 12 \tsha256msg1 0x12345678(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcc, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cc 84 c8 78 56 34 12 \tsha256msg1 0x12345678(%rax,%rcx,8),%xmm0",},
|
||||
{{0x44, 0x0f, 0x38, 0xcc, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
|
||||
"44 0f 38 cc bc c8 78 56 34 12 \tsha256msg1 0x12345678(%rax,%rcx,8),%xmm15",},
|
||||
{{0x0f, 0x38, 0xcd, 0xc1, }, 4, 0, "", "",
|
||||
"0f 38 cd c1 \tsha256msg2 %xmm1,%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0xd7, }, 4, 0, "", "",
|
||||
"0f 38 cd d7 \tsha256msg2 %xmm7,%xmm2",},
|
||||
{{0x41, 0x0f, 0x38, 0xcd, 0xc0, }, 5, 0, "", "",
|
||||
"41 0f 38 cd c0 \tsha256msg2 %xmm8,%xmm0",},
|
||||
{{0x44, 0x0f, 0x38, 0xcd, 0xc7, }, 5, 0, "", "",
|
||||
"44 0f 38 cd c7 \tsha256msg2 %xmm7,%xmm8",},
|
||||
{{0x45, 0x0f, 0x38, 0xcd, 0xc7, }, 5, 0, "", "",
|
||||
"45 0f 38 cd c7 \tsha256msg2 %xmm15,%xmm8",},
|
||||
{{0x0f, 0x38, 0xcd, 0x00, }, 4, 0, "", "",
|
||||
"0f 38 cd 00 \tsha256msg2 (%rax),%xmm0",},
|
||||
{{0x41, 0x0f, 0x38, 0xcd, 0x00, }, 5, 0, "", "",
|
||||
"41 0f 38 cd 00 \tsha256msg2 (%r8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cd 04 25 78 56 34 12 \tsha256msg2 0x12345678,%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x18, }, 4, 0, "", "",
|
||||
"0f 38 cd 18 \tsha256msg2 (%rax),%xmm3",},
|
||||
{{0x0f, 0x38, 0xcd, 0x04, 0x01, }, 5, 0, "", "",
|
||||
"0f 38 cd 04 01 \tsha256msg2 (%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cd 04 05 78 56 34 12 \tsha256msg2 0x12345678(,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x04, 0x08, }, 5, 0, "", "",
|
||||
"0f 38 cd 04 08 \tsha256msg2 (%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x04, 0xc8, }, 5, 0, "", "",
|
||||
"0f 38 cd 04 c8 \tsha256msg2 (%rax,%rcx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x40, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 cd 40 12 \tsha256msg2 0x12(%rax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x45, 0x12, }, 5, 0, "", "",
|
||||
"0f 38 cd 45 12 \tsha256msg2 0x12(%rbp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x44, 0x01, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cd 44 01 12 \tsha256msg2 0x12(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x44, 0x05, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cd 44 05 12 \tsha256msg2 0x12(%rbp,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x44, 0x08, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cd 44 08 12 \tsha256msg2 0x12(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x44, 0xc8, 0x12, }, 6, 0, "", "",
|
||||
"0f 38 cd 44 c8 12 \tsha256msg2 0x12(%rax,%rcx,8),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cd 80 78 56 34 12 \tsha256msg2 0x12345678(%rax),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f 38 cd 85 78 56 34 12 \tsha256msg2 0x12345678(%rbp),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cd 84 01 78 56 34 12 \tsha256msg2 0x12345678(%rcx,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cd 84 05 78 56 34 12 \tsha256msg2 0x12345678(%rbp,%rax,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cd 84 08 78 56 34 12 \tsha256msg2 0x12345678(%rax,%rcx,1),%xmm0",},
|
||||
{{0x0f, 0x38, 0xcd, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"0f 38 cd 84 c8 78 56 34 12 \tsha256msg2 0x12345678(%rax,%rcx,8),%xmm0",},
|
||||
{{0x44, 0x0f, 0x38, 0xcd, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
|
||||
"44 0f 38 cd bc c8 78 56 34 12 \tsha256msg2 0x12345678(%rax,%rcx,8),%xmm15",},
|
||||
{{0x66, 0x0f, 0xae, 0x38, }, 4, 0, "", "",
|
||||
"66 0f ae 38 \tclflushopt (%rax)",},
|
||||
{{0x66, 0x41, 0x0f, 0xae, 0x38, }, 5, 0, "", "",
|
||||
"66 41 0f ae 38 \tclflushopt (%r8)",},
|
||||
{{0x66, 0x0f, 0xae, 0x3c, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f ae 3c 25 78 56 34 12 \tclflushopt 0x12345678",},
|
||||
{{0x66, 0x0f, 0xae, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f ae bc c8 78 56 34 12 \tclflushopt 0x12345678(%rax,%rcx,8)",},
|
||||
{{0x66, 0x41, 0x0f, 0xae, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
|
||||
"66 41 0f ae bc c8 78 56 34 12 \tclflushopt 0x12345678(%r8,%rcx,8)",},
|
||||
{{0x0f, 0xae, 0x38, }, 3, 0, "", "",
|
||||
"0f ae 38 \tclflush (%rax)",},
|
||||
{{0x41, 0x0f, 0xae, 0x38, }, 4, 0, "", "",
|
||||
"41 0f ae 38 \tclflush (%r8)",},
|
||||
{{0x0f, 0xae, 0xf8, }, 3, 0, "", "",
|
||||
"0f ae f8 \tsfence ",},
|
||||
{{0x66, 0x0f, 0xae, 0x30, }, 4, 0, "", "",
|
||||
"66 0f ae 30 \tclwb (%rax)",},
|
||||
{{0x66, 0x41, 0x0f, 0xae, 0x30, }, 5, 0, "", "",
|
||||
"66 41 0f ae 30 \tclwb (%r8)",},
|
||||
{{0x66, 0x0f, 0xae, 0x34, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f ae 34 25 78 56 34 12 \tclwb 0x12345678",},
|
||||
{{0x66, 0x0f, 0xae, 0xb4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"66 0f ae b4 c8 78 56 34 12 \tclwb 0x12345678(%rax,%rcx,8)",},
|
||||
{{0x66, 0x41, 0x0f, 0xae, 0xb4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "",
|
||||
"66 41 0f ae b4 c8 78 56 34 12 \tclwb 0x12345678(%r8,%rcx,8)",},
|
||||
{{0x0f, 0xae, 0x30, }, 3, 0, "", "",
|
||||
"0f ae 30 \txsaveopt (%rax)",},
|
||||
{{0x41, 0x0f, 0xae, 0x30, }, 4, 0, "", "",
|
||||
"41 0f ae 30 \txsaveopt (%r8)",},
|
||||
{{0x0f, 0xae, 0xf0, }, 3, 0, "", "",
|
||||
"0f ae f0 \tmfence ",},
|
||||
{{0x0f, 0xc7, 0x20, }, 3, 0, "", "",
|
||||
"0f c7 20 \txsavec (%rax)",},
|
||||
{{0x41, 0x0f, 0xc7, 0x20, }, 4, 0, "", "",
|
||||
"41 0f c7 20 \txsavec (%r8)",},
|
||||
{{0x0f, 0xc7, 0x24, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f c7 24 25 78 56 34 12 \txsavec 0x12345678",},
|
||||
{{0x0f, 0xc7, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f c7 a4 c8 78 56 34 12 \txsavec 0x12345678(%rax,%rcx,8)",},
|
||||
{{0x41, 0x0f, 0xc7, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"41 0f c7 a4 c8 78 56 34 12 \txsavec 0x12345678(%r8,%rcx,8)",},
|
||||
{{0x0f, 0xc7, 0x28, }, 3, 0, "", "",
|
||||
"0f c7 28 \txsaves (%rax)",},
|
||||
{{0x41, 0x0f, 0xc7, 0x28, }, 4, 0, "", "",
|
||||
"41 0f c7 28 \txsaves (%r8)",},
|
||||
{{0x0f, 0xc7, 0x2c, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f c7 2c 25 78 56 34 12 \txsaves 0x12345678",},
|
||||
{{0x0f, 0xc7, 0xac, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f c7 ac c8 78 56 34 12 \txsaves 0x12345678(%rax,%rcx,8)",},
|
||||
{{0x41, 0x0f, 0xc7, 0xac, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"41 0f c7 ac c8 78 56 34 12 \txsaves 0x12345678(%r8,%rcx,8)",},
|
||||
{{0x0f, 0xc7, 0x18, }, 3, 0, "", "",
|
||||
"0f c7 18 \txrstors (%rax)",},
|
||||
{{0x41, 0x0f, 0xc7, 0x18, }, 4, 0, "", "",
|
||||
"41 0f c7 18 \txrstors (%r8)",},
|
||||
{{0x0f, 0xc7, 0x1c, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f c7 1c 25 78 56 34 12 \txrstors 0x12345678",},
|
||||
{{0x0f, 0xc7, 0x9c, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "",
|
||||
"0f c7 9c c8 78 56 34 12 \txrstors 0x12345678(%rax,%rcx,8)",},
|
||||
{{0x41, 0x0f, 0xc7, 0x9c, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "",
|
||||
"41 0f c7 9c c8 78 56 34 12 \txrstors 0x12345678(%r8,%rcx,8)",},
|
||||
{{0x66, 0x0f, 0xae, 0xf8, }, 4, 0, "", "",
|
||||
"66 0f ae f8 \tpcommit ",},
|
877
tools/perf/tests/insn-x86-dat-src.c
Normal file
877
tools/perf/tests/insn-x86-dat-src.c
Normal file
@ -0,0 +1,877 @@
|
||||
/*
|
||||
* This file contains instructions for testing by the test titled:
|
||||
*
|
||||
* "Test x86 instruction decoder - new instructions"
|
||||
*
|
||||
* Note that the 'Expecting' comment lines are consumed by the
|
||||
* gen-insn-x86-dat.awk script and have the format:
|
||||
*
|
||||
* Expecting: <op> <branch> <rel>
|
||||
*
|
||||
* If this file is changed, remember to run the gen-insn-x86-dat.sh
|
||||
* script and commit the result.
|
||||
*
|
||||
* Refer to insn-x86.c for more details.
|
||||
*/
|
||||
|
||||
int main(void)
|
||||
{
|
||||
/* Following line is a marker for the awk script - do not change */
|
||||
asm volatile("rdtsc"); /* Start here */
|
||||
|
||||
#ifdef __x86_64__
|
||||
|
||||
/* bndmk m64, bnd */
|
||||
|
||||
asm volatile("bndmk (%rax), %bnd0");
|
||||
asm volatile("bndmk (%r8), %bnd0");
|
||||
asm volatile("bndmk (0x12345678), %bnd0");
|
||||
asm volatile("bndmk (%rax), %bnd3");
|
||||
asm volatile("bndmk (%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(,%rax,1), %bnd0");
|
||||
asm volatile("bndmk (%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndmk (%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndmk 0x12(%rax), %bnd0");
|
||||
asm volatile("bndmk 0x12(%rbp), %bnd0");
|
||||
asm volatile("bndmk 0x12(%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndmk 0x12(%rbp,%rax,1), %bnd0");
|
||||
asm volatile("bndmk 0x12(%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndmk 0x12(%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(%rax), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(%rbp), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(%rbp,%rax,1), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(%rax,%rcx,8), %bnd0");
|
||||
|
||||
/* bndcl r/m64, bnd */
|
||||
|
||||
asm volatile("bndcl (%rax), %bnd0");
|
||||
asm volatile("bndcl (%r8), %bnd0");
|
||||
asm volatile("bndcl (0x12345678), %bnd0");
|
||||
asm volatile("bndcl (%rax), %bnd3");
|
||||
asm volatile("bndcl (%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(,%rax,1), %bnd0");
|
||||
asm volatile("bndcl (%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndcl (%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndcl 0x12(%rax), %bnd0");
|
||||
asm volatile("bndcl 0x12(%rbp), %bnd0");
|
||||
asm volatile("bndcl 0x12(%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndcl 0x12(%rbp,%rax,1), %bnd0");
|
||||
asm volatile("bndcl 0x12(%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndcl 0x12(%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(%rax), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(%rbp), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(%rbp,%rax,1), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndcl %rax, %bnd0");
|
||||
|
||||
/* bndcu r/m64, bnd */
|
||||
|
||||
asm volatile("bndcu (%rax), %bnd0");
|
||||
asm volatile("bndcu (%r8), %bnd0");
|
||||
asm volatile("bndcu (0x12345678), %bnd0");
|
||||
asm volatile("bndcu (%rax), %bnd3");
|
||||
asm volatile("bndcu (%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(,%rax,1), %bnd0");
|
||||
asm volatile("bndcu (%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndcu (%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndcu 0x12(%rax), %bnd0");
|
||||
asm volatile("bndcu 0x12(%rbp), %bnd0");
|
||||
asm volatile("bndcu 0x12(%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndcu 0x12(%rbp,%rax,1), %bnd0");
|
||||
asm volatile("bndcu 0x12(%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndcu 0x12(%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(%rax), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(%rbp), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(%rbp,%rax,1), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndcu %rax, %bnd0");
|
||||
|
||||
/* bndcn r/m64, bnd */
|
||||
|
||||
asm volatile("bndcn (%rax), %bnd0");
|
||||
asm volatile("bndcn (%r8), %bnd0");
|
||||
asm volatile("bndcn (0x12345678), %bnd0");
|
||||
asm volatile("bndcn (%rax), %bnd3");
|
||||
asm volatile("bndcn (%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(,%rax,1), %bnd0");
|
||||
asm volatile("bndcn (%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndcn (%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndcn 0x12(%rax), %bnd0");
|
||||
asm volatile("bndcn 0x12(%rbp), %bnd0");
|
||||
asm volatile("bndcn 0x12(%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndcn 0x12(%rbp,%rax,1), %bnd0");
|
||||
asm volatile("bndcn 0x12(%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndcn 0x12(%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(%rax), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(%rbp), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(%rbp,%rax,1), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndcn %rax, %bnd0");
|
||||
|
||||
/* bndmov m128, bnd */
|
||||
|
||||
asm volatile("bndmov (%rax), %bnd0");
|
||||
asm volatile("bndmov (%r8), %bnd0");
|
||||
asm volatile("bndmov (0x12345678), %bnd0");
|
||||
asm volatile("bndmov (%rax), %bnd3");
|
||||
asm volatile("bndmov (%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(,%rax,1), %bnd0");
|
||||
asm volatile("bndmov (%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndmov (%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndmov 0x12(%rax), %bnd0");
|
||||
asm volatile("bndmov 0x12(%rbp), %bnd0");
|
||||
asm volatile("bndmov 0x12(%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndmov 0x12(%rbp,%rax,1), %bnd0");
|
||||
asm volatile("bndmov 0x12(%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndmov 0x12(%rax,%rcx,8), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(%rax), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(%rbp), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(%rbp,%rax,1), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(%rax,%rcx,8), %bnd0");
|
||||
|
||||
/* bndmov bnd, m128 */
|
||||
|
||||
asm volatile("bndmov %bnd0, (%rax)");
|
||||
asm volatile("bndmov %bnd0, (%r8)");
|
||||
asm volatile("bndmov %bnd0, (0x12345678)");
|
||||
asm volatile("bndmov %bnd3, (%rax)");
|
||||
asm volatile("bndmov %bnd0, (%rcx,%rax,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(,%rax,1)");
|
||||
asm volatile("bndmov %bnd0, (%rax,%rcx,1)");
|
||||
asm volatile("bndmov %bnd0, (%rax,%rcx,8)");
|
||||
asm volatile("bndmov %bnd0, 0x12(%rax)");
|
||||
asm volatile("bndmov %bnd0, 0x12(%rbp)");
|
||||
asm volatile("bndmov %bnd0, 0x12(%rcx,%rax,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12(%rbp,%rax,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,8)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(%rax)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(%rbp)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(%rcx,%rax,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(%rbp,%rax,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,8)");
|
||||
|
||||
/* bndmov bnd2, bnd1 */
|
||||
|
||||
asm volatile("bndmov %bnd0, %bnd1");
|
||||
asm volatile("bndmov %bnd1, %bnd0");
|
||||
|
||||
/* bndldx mib, bnd */
|
||||
|
||||
asm volatile("bndldx (%rax), %bnd0");
|
||||
asm volatile("bndldx (%r8), %bnd0");
|
||||
asm volatile("bndldx (0x12345678), %bnd0");
|
||||
asm volatile("bndldx (%rax), %bnd3");
|
||||
asm volatile("bndldx (%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndldx 0x12345678(,%rax,1), %bnd0");
|
||||
asm volatile("bndldx (%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndldx 0x12(%rax), %bnd0");
|
||||
asm volatile("bndldx 0x12(%rbp), %bnd0");
|
||||
asm volatile("bndldx 0x12(%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndldx 0x12(%rbp,%rax,1), %bnd0");
|
||||
asm volatile("bndldx 0x12(%rax,%rcx,1), %bnd0");
|
||||
asm volatile("bndldx 0x12345678(%rax), %bnd0");
|
||||
asm volatile("bndldx 0x12345678(%rbp), %bnd0");
|
||||
asm volatile("bndldx 0x12345678(%rcx,%rax,1), %bnd0");
|
||||
asm volatile("bndldx 0x12345678(%rbp,%rax,1), %bnd0");
|
||||
asm volatile("bndldx 0x12345678(%rax,%rcx,1), %bnd0");
|
||||
|
||||
/* bndstx bnd, mib */
|
||||
|
||||
asm volatile("bndstx %bnd0, (%rax)");
|
||||
asm volatile("bndstx %bnd0, (%r8)");
|
||||
asm volatile("bndstx %bnd0, (0x12345678)");
|
||||
asm volatile("bndstx %bnd3, (%rax)");
|
||||
asm volatile("bndstx %bnd0, (%rcx,%rax,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12345678(,%rax,1)");
|
||||
asm volatile("bndstx %bnd0, (%rax,%rcx,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12(%rax)");
|
||||
asm volatile("bndstx %bnd0, 0x12(%rbp)");
|
||||
asm volatile("bndstx %bnd0, 0x12(%rcx,%rax,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12(%rbp,%rax,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12(%rax,%rcx,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12345678(%rax)");
|
||||
asm volatile("bndstx %bnd0, 0x12345678(%rbp)");
|
||||
asm volatile("bndstx %bnd0, 0x12345678(%rcx,%rax,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12345678(%rbp,%rax,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12345678(%rax,%rcx,1)");
|
||||
|
||||
/* bnd prefix on call, ret, jmp and all jcc */
|
||||
|
||||
asm volatile("bnd call label1"); /* Expecting: call unconditional 0 */
|
||||
asm volatile("bnd call *(%eax)"); /* Expecting: call indirect 0 */
|
||||
asm volatile("bnd ret"); /* Expecting: ret indirect 0 */
|
||||
asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0 */
|
||||
asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0 */
|
||||
asm volatile("bnd jmp *(%ecx)"); /* Expecting: jmp indirect 0 */
|
||||
asm volatile("bnd jne label1"); /* Expecting: jcc conditional 0 */
|
||||
|
||||
/* sha1rnds4 imm8, xmm2/m128, xmm1 */
|
||||
|
||||
asm volatile("sha1rnds4 $0x0, %xmm1, %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, %xmm7, %xmm2");
|
||||
asm volatile("sha1rnds4 $0x91, %xmm8, %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, %xmm7, %xmm8");
|
||||
asm volatile("sha1rnds4 $0x91, %xmm15, %xmm8");
|
||||
asm volatile("sha1rnds4 $0x91, (%rax), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, (%r8), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, (0x12345678), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, (%rax), %xmm3");
|
||||
asm volatile("sha1rnds4 $0x91, (%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(,%rax,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, (%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, (%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12(%rax), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12(%rbp), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12(%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12(%rbp,%rax,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%rax), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp,%rax,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm15");
|
||||
|
||||
/* sha1nexte xmm2/m128, xmm1 */
|
||||
|
||||
asm volatile("sha1nexte %xmm1, %xmm0");
|
||||
asm volatile("sha1nexte %xmm7, %xmm2");
|
||||
asm volatile("sha1nexte %xmm8, %xmm0");
|
||||
asm volatile("sha1nexte %xmm7, %xmm8");
|
||||
asm volatile("sha1nexte %xmm15, %xmm8");
|
||||
asm volatile("sha1nexte (%rax), %xmm0");
|
||||
asm volatile("sha1nexte (%r8), %xmm0");
|
||||
asm volatile("sha1nexte (0x12345678), %xmm0");
|
||||
asm volatile("sha1nexte (%rax), %xmm3");
|
||||
asm volatile("sha1nexte (%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(,%rax,1), %xmm0");
|
||||
asm volatile("sha1nexte (%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha1nexte (%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha1nexte 0x12(%rax), %xmm0");
|
||||
asm volatile("sha1nexte 0x12(%rbp), %xmm0");
|
||||
asm volatile("sha1nexte 0x12(%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12(%rbp,%rax,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12(%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12(%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%rax), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%rbp), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%rbp,%rax,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm15");
|
||||
|
||||
/* sha1msg1 xmm2/m128, xmm1 */
|
||||
|
||||
asm volatile("sha1msg1 %xmm1, %xmm0");
|
||||
asm volatile("sha1msg1 %xmm7, %xmm2");
|
||||
asm volatile("sha1msg1 %xmm8, %xmm0");
|
||||
asm volatile("sha1msg1 %xmm7, %xmm8");
|
||||
asm volatile("sha1msg1 %xmm15, %xmm8");
|
||||
asm volatile("sha1msg1 (%rax), %xmm0");
|
||||
asm volatile("sha1msg1 (%r8), %xmm0");
|
||||
asm volatile("sha1msg1 (0x12345678), %xmm0");
|
||||
asm volatile("sha1msg1 (%rax), %xmm3");
|
||||
asm volatile("sha1msg1 (%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(,%rax,1), %xmm0");
|
||||
asm volatile("sha1msg1 (%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha1msg1 (%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha1msg1 0x12(%rax), %xmm0");
|
||||
asm volatile("sha1msg1 0x12(%rbp), %xmm0");
|
||||
asm volatile("sha1msg1 0x12(%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12(%rbp,%rax,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12(%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12(%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%rax), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%rbp), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%rbp,%rax,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm15");
|
||||
|
||||
/* sha1msg2 xmm2/m128, xmm1 */
|
||||
|
||||
asm volatile("sha1msg2 %xmm1, %xmm0");
|
||||
asm volatile("sha1msg2 %xmm7, %xmm2");
|
||||
asm volatile("sha1msg2 %xmm8, %xmm0");
|
||||
asm volatile("sha1msg2 %xmm7, %xmm8");
|
||||
asm volatile("sha1msg2 %xmm15, %xmm8");
|
||||
asm volatile("sha1msg2 (%rax), %xmm0");
|
||||
asm volatile("sha1msg2 (%r8), %xmm0");
|
||||
asm volatile("sha1msg2 (0x12345678), %xmm0");
|
||||
asm volatile("sha1msg2 (%rax), %xmm3");
|
||||
asm volatile("sha1msg2 (%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(,%rax,1), %xmm0");
|
||||
asm volatile("sha1msg2 (%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha1msg2 (%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha1msg2 0x12(%rax), %xmm0");
|
||||
asm volatile("sha1msg2 0x12(%rbp), %xmm0");
|
||||
asm volatile("sha1msg2 0x12(%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12(%rbp,%rax,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12(%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12(%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%rax), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%rbp), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%rbp,%rax,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm15");
|
||||
|
||||
/* sha256rnds2 <XMM0>, xmm2/m128, xmm1 */
|
||||
/* Note sha256rnds2 has an implicit operand 'xmm0' */
|
||||
|
||||
asm volatile("sha256rnds2 %xmm4, %xmm1");
|
||||
asm volatile("sha256rnds2 %xmm7, %xmm2");
|
||||
asm volatile("sha256rnds2 %xmm8, %xmm1");
|
||||
asm volatile("sha256rnds2 %xmm7, %xmm8");
|
||||
asm volatile("sha256rnds2 %xmm15, %xmm8");
|
||||
asm volatile("sha256rnds2 (%rax), %xmm1");
|
||||
asm volatile("sha256rnds2 (%r8), %xmm1");
|
||||
asm volatile("sha256rnds2 (0x12345678), %xmm1");
|
||||
asm volatile("sha256rnds2 (%rax), %xmm3");
|
||||
asm volatile("sha256rnds2 (%rcx,%rax,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(,%rax,1), %xmm1");
|
||||
asm volatile("sha256rnds2 (%rax,%rcx,1), %xmm1");
|
||||
asm volatile("sha256rnds2 (%rax,%rcx,8), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12(%rax), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12(%rbp), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12(%rcx,%rax,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12(%rbp,%rax,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12(%rax,%rcx,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12(%rax,%rcx,8), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%rax), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%rbp), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%rcx,%rax,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%rbp,%rax,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%rax,%rcx,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm15");
|
||||
|
||||
/* sha256msg1 xmm2/m128, xmm1 */
|
||||
|
||||
asm volatile("sha256msg1 %xmm1, %xmm0");
|
||||
asm volatile("sha256msg1 %xmm7, %xmm2");
|
||||
asm volatile("sha256msg1 %xmm8, %xmm0");
|
||||
asm volatile("sha256msg1 %xmm7, %xmm8");
|
||||
asm volatile("sha256msg1 %xmm15, %xmm8");
|
||||
asm volatile("sha256msg1 (%rax), %xmm0");
|
||||
asm volatile("sha256msg1 (%r8), %xmm0");
|
||||
asm volatile("sha256msg1 (0x12345678), %xmm0");
|
||||
asm volatile("sha256msg1 (%rax), %xmm3");
|
||||
asm volatile("sha256msg1 (%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(,%rax,1), %xmm0");
|
||||
asm volatile("sha256msg1 (%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha256msg1 (%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha256msg1 0x12(%rax), %xmm0");
|
||||
asm volatile("sha256msg1 0x12(%rbp), %xmm0");
|
||||
asm volatile("sha256msg1 0x12(%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12(%rbp,%rax,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12(%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12(%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%rax), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%rbp), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%rbp,%rax,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm15");
|
||||
|
||||
/* sha256msg2 xmm2/m128, xmm1 */
|
||||
|
||||
asm volatile("sha256msg2 %xmm1, %xmm0");
|
||||
asm volatile("sha256msg2 %xmm7, %xmm2");
|
||||
asm volatile("sha256msg2 %xmm8, %xmm0");
|
||||
asm volatile("sha256msg2 %xmm7, %xmm8");
|
||||
asm volatile("sha256msg2 %xmm15, %xmm8");
|
||||
asm volatile("sha256msg2 (%rax), %xmm0");
|
||||
asm volatile("sha256msg2 (%r8), %xmm0");
|
||||
asm volatile("sha256msg2 (0x12345678), %xmm0");
|
||||
asm volatile("sha256msg2 (%rax), %xmm3");
|
||||
asm volatile("sha256msg2 (%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(,%rax,1), %xmm0");
|
||||
asm volatile("sha256msg2 (%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha256msg2 (%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha256msg2 0x12(%rax), %xmm0");
|
||||
asm volatile("sha256msg2 0x12(%rbp), %xmm0");
|
||||
asm volatile("sha256msg2 0x12(%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12(%rbp,%rax,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12(%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12(%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%rax), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%rbp), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%rcx,%rax,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%rbp,%rax,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%rax,%rcx,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm15");
|
||||
|
||||
/* clflushopt m8 */
|
||||
|
||||
asm volatile("clflushopt (%rax)");
|
||||
asm volatile("clflushopt (%r8)");
|
||||
asm volatile("clflushopt (0x12345678)");
|
||||
asm volatile("clflushopt 0x12345678(%rax,%rcx,8)");
|
||||
asm volatile("clflushopt 0x12345678(%r8,%rcx,8)");
|
||||
/* Also check instructions in the same group encoding as clflushopt */
|
||||
asm volatile("clflush (%rax)");
|
||||
asm volatile("clflush (%r8)");
|
||||
asm volatile("sfence");
|
||||
|
||||
/* clwb m8 */
|
||||
|
||||
asm volatile("clwb (%rax)");
|
||||
asm volatile("clwb (%r8)");
|
||||
asm volatile("clwb (0x12345678)");
|
||||
asm volatile("clwb 0x12345678(%rax,%rcx,8)");
|
||||
asm volatile("clwb 0x12345678(%r8,%rcx,8)");
|
||||
/* Also check instructions in the same group encoding as clwb */
|
||||
asm volatile("xsaveopt (%rax)");
|
||||
asm volatile("xsaveopt (%r8)");
|
||||
asm volatile("mfence");
|
||||
|
||||
/* xsavec mem */
|
||||
|
||||
asm volatile("xsavec (%rax)");
|
||||
asm volatile("xsavec (%r8)");
|
||||
asm volatile("xsavec (0x12345678)");
|
||||
asm volatile("xsavec 0x12345678(%rax,%rcx,8)");
|
||||
asm volatile("xsavec 0x12345678(%r8,%rcx,8)");
|
||||
|
||||
/* xsaves mem */
|
||||
|
||||
asm volatile("xsaves (%rax)");
|
||||
asm volatile("xsaves (%r8)");
|
||||
asm volatile("xsaves (0x12345678)");
|
||||
asm volatile("xsaves 0x12345678(%rax,%rcx,8)");
|
||||
asm volatile("xsaves 0x12345678(%r8,%rcx,8)");
|
||||
|
||||
/* xrstors mem */
|
||||
|
||||
asm volatile("xrstors (%rax)");
|
||||
asm volatile("xrstors (%r8)");
|
||||
asm volatile("xrstors (0x12345678)");
|
||||
asm volatile("xrstors 0x12345678(%rax,%rcx,8)");
|
||||
asm volatile("xrstors 0x12345678(%r8,%rcx,8)");
|
||||
|
||||
#else /* #ifdef __x86_64__ */
|
||||
|
||||
/* bndmk m32, bnd */
|
||||
|
||||
asm volatile("bndmk (%eax), %bnd0");
|
||||
asm volatile("bndmk (0x12345678), %bnd0");
|
||||
asm volatile("bndmk (%eax), %bnd3");
|
||||
asm volatile("bndmk (%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(,%eax,1), %bnd0");
|
||||
asm volatile("bndmk (%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndmk (%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndmk 0x12(%eax), %bnd0");
|
||||
asm volatile("bndmk 0x12(%ebp), %bnd0");
|
||||
asm volatile("bndmk 0x12(%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndmk 0x12(%ebp,%eax,1), %bnd0");
|
||||
asm volatile("bndmk 0x12(%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndmk 0x12(%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(%eax), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(%ebp), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(%ebp,%eax,1), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndmk 0x12345678(%eax,%ecx,8), %bnd0");
|
||||
|
||||
/* bndcl r/m32, bnd */
|
||||
|
||||
asm volatile("bndcl (%eax), %bnd0");
|
||||
asm volatile("bndcl (0x12345678), %bnd0");
|
||||
asm volatile("bndcl (%eax), %bnd3");
|
||||
asm volatile("bndcl (%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(,%eax,1), %bnd0");
|
||||
asm volatile("bndcl (%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndcl (%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndcl 0x12(%eax), %bnd0");
|
||||
asm volatile("bndcl 0x12(%ebp), %bnd0");
|
||||
asm volatile("bndcl 0x12(%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndcl 0x12(%ebp,%eax,1), %bnd0");
|
||||
asm volatile("bndcl 0x12(%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndcl 0x12(%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(%eax), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(%ebp), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(%ebp,%eax,1), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndcl 0x12345678(%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndcl %eax, %bnd0");
|
||||
|
||||
/* bndcu r/m32, bnd */
|
||||
|
||||
asm volatile("bndcu (%eax), %bnd0");
|
||||
asm volatile("bndcu (0x12345678), %bnd0");
|
||||
asm volatile("bndcu (%eax), %bnd3");
|
||||
asm volatile("bndcu (%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(,%eax,1), %bnd0");
|
||||
asm volatile("bndcu (%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndcu (%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndcu 0x12(%eax), %bnd0");
|
||||
asm volatile("bndcu 0x12(%ebp), %bnd0");
|
||||
asm volatile("bndcu 0x12(%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndcu 0x12(%ebp,%eax,1), %bnd0");
|
||||
asm volatile("bndcu 0x12(%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndcu 0x12(%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(%eax), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(%ebp), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(%ebp,%eax,1), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndcu 0x12345678(%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndcu %eax, %bnd0");
|
||||
|
||||
/* bndcn r/m32, bnd */
|
||||
|
||||
asm volatile("bndcn (%eax), %bnd0");
|
||||
asm volatile("bndcn (0x12345678), %bnd0");
|
||||
asm volatile("bndcn (%eax), %bnd3");
|
||||
asm volatile("bndcn (%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(,%eax,1), %bnd0");
|
||||
asm volatile("bndcn (%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndcn (%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndcn 0x12(%eax), %bnd0");
|
||||
asm volatile("bndcn 0x12(%ebp), %bnd0");
|
||||
asm volatile("bndcn 0x12(%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndcn 0x12(%ebp,%eax,1), %bnd0");
|
||||
asm volatile("bndcn 0x12(%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndcn 0x12(%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(%eax), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(%ebp), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(%ebp,%eax,1), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndcn 0x12345678(%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndcn %eax, %bnd0");
|
||||
|
||||
/* bndmov m64, bnd */
|
||||
|
||||
asm volatile("bndmov (%eax), %bnd0");
|
||||
asm volatile("bndmov (0x12345678), %bnd0");
|
||||
asm volatile("bndmov (%eax), %bnd3");
|
||||
asm volatile("bndmov (%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(,%eax,1), %bnd0");
|
||||
asm volatile("bndmov (%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndmov (%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndmov 0x12(%eax), %bnd0");
|
||||
asm volatile("bndmov 0x12(%ebp), %bnd0");
|
||||
asm volatile("bndmov 0x12(%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndmov 0x12(%ebp,%eax,1), %bnd0");
|
||||
asm volatile("bndmov 0x12(%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndmov 0x12(%eax,%ecx,8), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(%eax), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(%ebp), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(%ebp,%eax,1), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndmov 0x12345678(%eax,%ecx,8), %bnd0");
|
||||
|
||||
/* bndmov bnd, m64 */
|
||||
|
||||
asm volatile("bndmov %bnd0, (%eax)");
|
||||
asm volatile("bndmov %bnd0, (0x12345678)");
|
||||
asm volatile("bndmov %bnd3, (%eax)");
|
||||
asm volatile("bndmov %bnd0, (%ecx,%eax,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(,%eax,1)");
|
||||
asm volatile("bndmov %bnd0, (%eax,%ecx,1)");
|
||||
asm volatile("bndmov %bnd0, (%eax,%ecx,8)");
|
||||
asm volatile("bndmov %bnd0, 0x12(%eax)");
|
||||
asm volatile("bndmov %bnd0, 0x12(%ebp)");
|
||||
asm volatile("bndmov %bnd0, 0x12(%ecx,%eax,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12(%ebp,%eax,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12(%eax,%ecx,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12(%eax,%ecx,8)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(%eax)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(%ebp)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(%ecx,%eax,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(%ebp,%eax,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(%eax,%ecx,1)");
|
||||
asm volatile("bndmov %bnd0, 0x12345678(%eax,%ecx,8)");
|
||||
|
||||
/* bndmov bnd2, bnd1 */
|
||||
|
||||
asm volatile("bndmov %bnd0, %bnd1");
|
||||
asm volatile("bndmov %bnd1, %bnd0");
|
||||
|
||||
/* bndldx mib, bnd */
|
||||
|
||||
asm volatile("bndldx (%eax), %bnd0");
|
||||
asm volatile("bndldx (0x12345678), %bnd0");
|
||||
asm volatile("bndldx (%eax), %bnd3");
|
||||
asm volatile("bndldx (%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndldx 0x12345678(,%eax,1), %bnd0");
|
||||
asm volatile("bndldx (%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndldx 0x12(%eax), %bnd0");
|
||||
asm volatile("bndldx 0x12(%ebp), %bnd0");
|
||||
asm volatile("bndldx 0x12(%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndldx 0x12(%ebp,%eax,1), %bnd0");
|
||||
asm volatile("bndldx 0x12(%eax,%ecx,1), %bnd0");
|
||||
asm volatile("bndldx 0x12345678(%eax), %bnd0");
|
||||
asm volatile("bndldx 0x12345678(%ebp), %bnd0");
|
||||
asm volatile("bndldx 0x12345678(%ecx,%eax,1), %bnd0");
|
||||
asm volatile("bndldx 0x12345678(%ebp,%eax,1), %bnd0");
|
||||
asm volatile("bndldx 0x12345678(%eax,%ecx,1), %bnd0");
|
||||
|
||||
/* bndstx bnd, mib */
|
||||
|
||||
asm volatile("bndstx %bnd0, (%eax)");
|
||||
asm volatile("bndstx %bnd0, (0x12345678)");
|
||||
asm volatile("bndstx %bnd3, (%eax)");
|
||||
asm volatile("bndstx %bnd0, (%ecx,%eax,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12345678(,%eax,1)");
|
||||
asm volatile("bndstx %bnd0, (%eax,%ecx,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12(%eax)");
|
||||
asm volatile("bndstx %bnd0, 0x12(%ebp)");
|
||||
asm volatile("bndstx %bnd0, 0x12(%ecx,%eax,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12(%ebp,%eax,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12(%eax,%ecx,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12345678(%eax)");
|
||||
asm volatile("bndstx %bnd0, 0x12345678(%ebp)");
|
||||
asm volatile("bndstx %bnd0, 0x12345678(%ecx,%eax,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12345678(%ebp,%eax,1)");
|
||||
asm volatile("bndstx %bnd0, 0x12345678(%eax,%ecx,1)");
|
||||
|
||||
/* bnd prefix on call, ret, jmp and all jcc */
|
||||
|
||||
asm volatile("bnd call label1"); /* Expecting: call unconditional 0xfffffffc */
|
||||
asm volatile("bnd call *(%eax)"); /* Expecting: call indirect 0 */
|
||||
asm volatile("bnd ret"); /* Expecting: ret indirect 0 */
|
||||
asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0xfffffffc */
|
||||
asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0xfffffffc */
|
||||
asm volatile("bnd jmp *(%ecx)"); /* Expecting: jmp indirect 0 */
|
||||
asm volatile("bnd jne label1"); /* Expecting: jcc conditional 0xfffffffc */
|
||||
|
||||
/* sha1rnds4 imm8, xmm2/m128, xmm1 */
|
||||
|
||||
asm volatile("sha1rnds4 $0x0, %xmm1, %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, %xmm7, %xmm2");
|
||||
asm volatile("sha1rnds4 $0x91, (%eax), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, (0x12345678), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, (%eax), %xmm3");
|
||||
asm volatile("sha1rnds4 $0x91, (%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(,%eax,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, (%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, (%eax,%ecx,8), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12(%eax), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12(%ebp), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12(%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12(%ebp,%eax,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12(%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12(%eax,%ecx,8), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%eax), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%ebp), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%ebp,%eax,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha1rnds4 $0x91, 0x12345678(%eax,%ecx,8), %xmm0");
|
||||
|
||||
/* sha1nexte xmm2/m128, xmm1 */
|
||||
|
||||
asm volatile("sha1nexte %xmm1, %xmm0");
|
||||
asm volatile("sha1nexte %xmm7, %xmm2");
|
||||
asm volatile("sha1nexte (%eax), %xmm0");
|
||||
asm volatile("sha1nexte (0x12345678), %xmm0");
|
||||
asm volatile("sha1nexte (%eax), %xmm3");
|
||||
asm volatile("sha1nexte (%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(,%eax,1), %xmm0");
|
||||
asm volatile("sha1nexte (%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha1nexte (%eax,%ecx,8), %xmm0");
|
||||
asm volatile("sha1nexte 0x12(%eax), %xmm0");
|
||||
asm volatile("sha1nexte 0x12(%ebp), %xmm0");
|
||||
asm volatile("sha1nexte 0x12(%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12(%ebp,%eax,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12(%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12(%eax,%ecx,8), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%eax), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%ebp), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%ebp,%eax,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha1nexte 0x12345678(%eax,%ecx,8), %xmm0");
|
||||
|
||||
/* sha1msg1 xmm2/m128, xmm1 */
|
||||
|
||||
asm volatile("sha1msg1 %xmm1, %xmm0");
|
||||
asm volatile("sha1msg1 %xmm7, %xmm2");
|
||||
asm volatile("sha1msg1 (%eax), %xmm0");
|
||||
asm volatile("sha1msg1 (0x12345678), %xmm0");
|
||||
asm volatile("sha1msg1 (%eax), %xmm3");
|
||||
asm volatile("sha1msg1 (%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(,%eax,1), %xmm0");
|
||||
asm volatile("sha1msg1 (%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha1msg1 (%eax,%ecx,8), %xmm0");
|
||||
asm volatile("sha1msg1 0x12(%eax), %xmm0");
|
||||
asm volatile("sha1msg1 0x12(%ebp), %xmm0");
|
||||
asm volatile("sha1msg1 0x12(%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12(%ebp,%eax,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12(%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12(%eax,%ecx,8), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%eax), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%ebp), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%ebp,%eax,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha1msg1 0x12345678(%eax,%ecx,8), %xmm0");
|
||||
|
||||
/* sha1msg2 xmm2/m128, xmm1 */
|
||||
|
||||
asm volatile("sha1msg2 %xmm1, %xmm0");
|
||||
asm volatile("sha1msg2 %xmm7, %xmm2");
|
||||
asm volatile("sha1msg2 (%eax), %xmm0");
|
||||
asm volatile("sha1msg2 (0x12345678), %xmm0");
|
||||
asm volatile("sha1msg2 (%eax), %xmm3");
|
||||
asm volatile("sha1msg2 (%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(,%eax,1), %xmm0");
|
||||
asm volatile("sha1msg2 (%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha1msg2 (%eax,%ecx,8), %xmm0");
|
||||
asm volatile("sha1msg2 0x12(%eax), %xmm0");
|
||||
asm volatile("sha1msg2 0x12(%ebp), %xmm0");
|
||||
asm volatile("sha1msg2 0x12(%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12(%ebp,%eax,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12(%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12(%eax,%ecx,8), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%eax), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%ebp), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%ebp,%eax,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha1msg2 0x12345678(%eax,%ecx,8), %xmm0");
|
||||
|
||||
/* sha256rnds2 <XMM0>, xmm2/m128, xmm1 */
|
||||
/* Note sha256rnds2 has an implicit operand 'xmm0' */
|
||||
|
||||
asm volatile("sha256rnds2 %xmm4, %xmm1");
|
||||
asm volatile("sha256rnds2 %xmm7, %xmm2");
|
||||
asm volatile("sha256rnds2 (%eax), %xmm1");
|
||||
asm volatile("sha256rnds2 (0x12345678), %xmm1");
|
||||
asm volatile("sha256rnds2 (%eax), %xmm3");
|
||||
asm volatile("sha256rnds2 (%ecx,%eax,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(,%eax,1), %xmm1");
|
||||
asm volatile("sha256rnds2 (%eax,%ecx,1), %xmm1");
|
||||
asm volatile("sha256rnds2 (%eax,%ecx,8), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12(%eax), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12(%ebp), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12(%ecx,%eax,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12(%ebp,%eax,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12(%eax,%ecx,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12(%eax,%ecx,8), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%eax), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%ebp), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%ecx,%eax,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%ebp,%eax,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%eax,%ecx,1), %xmm1");
|
||||
asm volatile("sha256rnds2 0x12345678(%eax,%ecx,8), %xmm1");
|
||||
|
||||
/* sha256msg1 xmm2/m128, xmm1 */
|
||||
|
||||
asm volatile("sha256msg1 %xmm1, %xmm0");
|
||||
asm volatile("sha256msg1 %xmm7, %xmm2");
|
||||
asm volatile("sha256msg1 (%eax), %xmm0");
|
||||
asm volatile("sha256msg1 (0x12345678), %xmm0");
|
||||
asm volatile("sha256msg1 (%eax), %xmm3");
|
||||
asm volatile("sha256msg1 (%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(,%eax,1), %xmm0");
|
||||
asm volatile("sha256msg1 (%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha256msg1 (%eax,%ecx,8), %xmm0");
|
||||
asm volatile("sha256msg1 0x12(%eax), %xmm0");
|
||||
asm volatile("sha256msg1 0x12(%ebp), %xmm0");
|
||||
asm volatile("sha256msg1 0x12(%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12(%ebp,%eax,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12(%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12(%eax,%ecx,8), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%eax), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%ebp), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%ebp,%eax,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha256msg1 0x12345678(%eax,%ecx,8), %xmm0");
|
||||
|
||||
/* sha256msg2 xmm2/m128, xmm1 */
|
||||
|
||||
asm volatile("sha256msg2 %xmm1, %xmm0");
|
||||
asm volatile("sha256msg2 %xmm7, %xmm2");
|
||||
asm volatile("sha256msg2 (%eax), %xmm0");
|
||||
asm volatile("sha256msg2 (0x12345678), %xmm0");
|
||||
asm volatile("sha256msg2 (%eax), %xmm3");
|
||||
asm volatile("sha256msg2 (%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(,%eax,1), %xmm0");
|
||||
asm volatile("sha256msg2 (%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha256msg2 (%eax,%ecx,8), %xmm0");
|
||||
asm volatile("sha256msg2 0x12(%eax), %xmm0");
|
||||
asm volatile("sha256msg2 0x12(%ebp), %xmm0");
|
||||
asm volatile("sha256msg2 0x12(%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12(%ebp,%eax,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12(%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12(%eax,%ecx,8), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%eax), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%ebp), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%ecx,%eax,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%ebp,%eax,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%eax,%ecx,1), %xmm0");
|
||||
asm volatile("sha256msg2 0x12345678(%eax,%ecx,8), %xmm0");
|
||||
|
||||
/* clflushopt m8 */
|
||||
|
||||
asm volatile("clflushopt (%eax)");
|
||||
asm volatile("clflushopt (0x12345678)");
|
||||
asm volatile("clflushopt 0x12345678(%eax,%ecx,8)");
|
||||
/* Also check instructions in the same group encoding as clflushopt */
|
||||
asm volatile("clflush (%eax)");
|
||||
asm volatile("sfence");
|
||||
|
||||
/* clwb m8 */
|
||||
|
||||
asm volatile("clwb (%eax)");
|
||||
asm volatile("clwb (0x12345678)");
|
||||
asm volatile("clwb 0x12345678(%eax,%ecx,8)");
|
||||
/* Also check instructions in the same group encoding as clwb */
|
||||
asm volatile("xsaveopt (%eax)");
|
||||
asm volatile("mfence");
|
||||
|
||||
/* xsavec mem */
|
||||
|
||||
asm volatile("xsavec (%eax)");
|
||||
asm volatile("xsavec (0x12345678)");
|
||||
asm volatile("xsavec 0x12345678(%eax,%ecx,8)");
|
||||
|
||||
/* xsaves mem */
|
||||
|
||||
asm volatile("xsaves (%eax)");
|
||||
asm volatile("xsaves (0x12345678)");
|
||||
asm volatile("xsaves 0x12345678(%eax,%ecx,8)");
|
||||
|
||||
/* xrstors mem */
|
||||
|
||||
asm volatile("xrstors (%eax)");
|
||||
asm volatile("xrstors (0x12345678)");
|
||||
asm volatile("xrstors 0x12345678(%eax,%ecx,8)");
|
||||
|
||||
#endif /* #ifndef __x86_64__ */
|
||||
|
||||
/* pcommit */
|
||||
|
||||
asm volatile("pcommit");
|
||||
|
||||
/* Following line is a marker for the awk script - do not change */
|
||||
asm volatile("rdtsc"); /* Stop here */
|
||||
|
||||
return 0;
|
||||
}
|
184
tools/perf/tests/insn-x86.c
Normal file
184
tools/perf/tests/insn-x86.c
Normal file
@ -0,0 +1,184 @@
|
||||
#include <linux/types.h>
|
||||
|
||||
#include "debug.h"
|
||||
#include "tests.h"
|
||||
|
||||
#include "intel-pt-decoder/insn.h"
|
||||
#include "intel-pt-decoder/intel-pt-insn-decoder.h"
|
||||
|
||||
struct test_data {
|
||||
u8 data[MAX_INSN_SIZE];
|
||||
int expected_length;
|
||||
int expected_rel;
|
||||
const char *expected_op_str;
|
||||
const char *expected_branch_str;
|
||||
const char *asm_rep;
|
||||
};
|
||||
|
||||
struct test_data test_data_32[] = {
|
||||
#include "insn-x86-dat-32.c"
|
||||
{{0x0f, 0x01, 0xee}, 3, 0, NULL, NULL, "0f 01 ee \trdpkru"},
|
||||
{{0x0f, 0x01, 0xef}, 3, 0, NULL, NULL, "0f 01 ef \twrpkru"},
|
||||
{{0}, 0, 0, NULL, NULL, NULL},
|
||||
};
|
||||
|
||||
struct test_data test_data_64[] = {
|
||||
#include "insn-x86-dat-64.c"
|
||||
{{0x0f, 0x01, 0xee}, 3, 0, NULL, NULL, "0f 01 ee \trdpkru"},
|
||||
{{0x0f, 0x01, 0xef}, 3, 0, NULL, NULL, "0f 01 ef \twrpkru"},
|
||||
{{0}, 0, 0, NULL, NULL, NULL},
|
||||
};
|
||||
|
||||
static int get_op(const char *op_str)
|
||||
{
|
||||
struct val_data {
|
||||
const char *name;
|
||||
int val;
|
||||
} vals[] = {
|
||||
{"other", INTEL_PT_OP_OTHER},
|
||||
{"call", INTEL_PT_OP_CALL},
|
||||
{"ret", INTEL_PT_OP_RET},
|
||||
{"jcc", INTEL_PT_OP_JCC},
|
||||
{"jmp", INTEL_PT_OP_JMP},
|
||||
{"loop", INTEL_PT_OP_LOOP},
|
||||
{"iret", INTEL_PT_OP_IRET},
|
||||
{"int", INTEL_PT_OP_INT},
|
||||
{"syscall", INTEL_PT_OP_SYSCALL},
|
||||
{"sysret", INTEL_PT_OP_SYSRET},
|
||||
{NULL, 0},
|
||||
};
|
||||
struct val_data *val;
|
||||
|
||||
if (!op_str || !strlen(op_str))
|
||||
return 0;
|
||||
|
||||
for (val = vals; val->name; val++) {
|
||||
if (!strcmp(val->name, op_str))
|
||||
return val->val;
|
||||
}
|
||||
|
||||
pr_debug("Failed to get op\n");
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int get_branch(const char *branch_str)
|
||||
{
|
||||
struct val_data {
|
||||
const char *name;
|
||||
int val;
|
||||
} vals[] = {
|
||||
{"no_branch", INTEL_PT_BR_NO_BRANCH},
|
||||
{"indirect", INTEL_PT_BR_INDIRECT},
|
||||
{"conditional", INTEL_PT_BR_CONDITIONAL},
|
||||
{"unconditional", INTEL_PT_BR_UNCONDITIONAL},
|
||||
{NULL, 0},
|
||||
};
|
||||
struct val_data *val;
|
||||
|
||||
if (!branch_str || !strlen(branch_str))
|
||||
return 0;
|
||||
|
||||
for (val = vals; val->name; val++) {
|
||||
if (!strcmp(val->name, branch_str))
|
||||
return val->val;
|
||||
}
|
||||
|
||||
pr_debug("Failed to get branch\n");
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int test_data_item(struct test_data *dat, int x86_64)
|
||||
{
|
||||
struct intel_pt_insn intel_pt_insn;
|
||||
struct insn insn;
|
||||
int op, branch;
|
||||
|
||||
insn_init(&insn, dat->data, MAX_INSN_SIZE, x86_64);
|
||||
insn_get_length(&insn);
|
||||
|
||||
if (!insn_complete(&insn)) {
|
||||
pr_debug("Failed to decode: %s\n", dat->asm_rep);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (insn.length != dat->expected_length) {
|
||||
pr_debug("Failed to decode length (%d vs expected %d): %s\n",
|
||||
insn.length, dat->expected_length, dat->asm_rep);
|
||||
return -1;
|
||||
}
|
||||
|
||||
op = get_op(dat->expected_op_str);
|
||||
branch = get_branch(dat->expected_branch_str);
|
||||
|
||||
if (intel_pt_get_insn(dat->data, MAX_INSN_SIZE, x86_64, &intel_pt_insn)) {
|
||||
pr_debug("Intel PT failed to decode: %s\n", dat->asm_rep);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((int)intel_pt_insn.op != op) {
|
||||
pr_debug("Failed to decode 'op' value (%d vs expected %d): %s\n",
|
||||
intel_pt_insn.op, op, dat->asm_rep);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((int)intel_pt_insn.branch != branch) {
|
||||
pr_debug("Failed to decode 'branch' value (%d vs expected %d): %s\n",
|
||||
intel_pt_insn.branch, branch, dat->asm_rep);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (intel_pt_insn.rel != dat->expected_rel) {
|
||||
pr_debug("Failed to decode 'rel' value (%#x vs expected %#x): %s\n",
|
||||
intel_pt_insn.rel, dat->expected_rel, dat->asm_rep);
|
||||
return -1;
|
||||
}
|
||||
|
||||
pr_debug("Decoded ok: %s\n", dat->asm_rep);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int test_data_set(struct test_data *dat_set, int x86_64)
|
||||
{
|
||||
struct test_data *dat;
|
||||
int ret = 0;
|
||||
|
||||
for (dat = dat_set; dat->expected_length; dat++) {
|
||||
if (test_data_item(dat, x86_64))
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* test__insn_x86 - test x86 instruction decoder - new instructions.
|
||||
*
|
||||
* This function implements a test that decodes a selection of instructions and
|
||||
* checks the results. The Intel PT function that further categorizes
|
||||
* instructions (i.e. intel_pt_get_insn()) is also checked.
|
||||
*
|
||||
* The instructions are originally in insn-x86-dat-src.c which has been
|
||||
* processed by scripts gen-insn-x86-dat.sh and gen-insn-x86-dat.awk to produce
|
||||
* insn-x86-dat-32.c and insn-x86-dat-64.c which are included into this program.
|
||||
* i.e. to add new instructions to the test, edit insn-x86-dat-src.c, run the
|
||||
* gen-insn-x86-dat.sh script, make perf, and then run the test.
|
||||
*
|
||||
* If the test passes %0 is returned, otherwise %-1 is returned. Use the
|
||||
* verbose (-v) option to see all the instructions and whether or not they
|
||||
* decoded successfuly.
|
||||
*/
|
||||
int test__insn_x86(void)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (test_data_set(test_data_32, 0))
|
||||
ret = -1;
|
||||
|
||||
if (test_data_set(test_data_64, 1))
|
||||
ret = -1;
|
||||
|
||||
return ret;
|
||||
}
|
@ -63,6 +63,7 @@ int test__fdarray__add(void);
|
||||
int test__kmod_path__parse(void);
|
||||
int test__thread_map(void);
|
||||
int test__llvm(void);
|
||||
int test__insn_x86(void);
|
||||
|
||||
#if defined(__x86_64__) || defined(__i386__) || defined(__arm__) || defined(__aarch64__)
|
||||
#ifdef HAVE_DWARF_UNWIND_SUPPORT
|
||||
|
@ -9,6 +9,7 @@ mkdir
|
||||
open
|
||||
openat
|
||||
quotactl
|
||||
read
|
||||
readlink
|
||||
rename
|
||||
rmdir
|
||||
@ -16,3 +17,4 @@ stat
|
||||
statfs
|
||||
symlink
|
||||
unlink
|
||||
write
|
||||
|
@ -225,17 +225,12 @@ void cpu_map__put(struct cpu_map *map)
|
||||
cpu_map__delete(map);
|
||||
}
|
||||
|
||||
int cpu_map__get_socket(struct cpu_map *map, int idx)
|
||||
int cpu_map__get_socket_id(int cpu)
|
||||
{
|
||||
FILE *fp;
|
||||
const char *mnt;
|
||||
char path[PATH_MAX];
|
||||
int cpu, ret;
|
||||
|
||||
if (idx > map->nr)
|
||||
return -1;
|
||||
|
||||
cpu = map->map[idx];
|
||||
int socket_id, ret;
|
||||
|
||||
mnt = sysfs__mountpoint();
|
||||
if (!mnt)
|
||||
@ -248,9 +243,22 @@ int cpu_map__get_socket(struct cpu_map *map, int idx)
|
||||
fp = fopen(path, "r");
|
||||
if (!fp)
|
||||
return -1;
|
||||
ret = fscanf(fp, "%d", &cpu);
|
||||
ret = fscanf(fp, "%d", &socket_id);
|
||||
fclose(fp);
|
||||
return ret == 1 ? cpu : -1;
|
||||
|
||||
return ret == 1 ? socket_id : -1;
|
||||
}
|
||||
|
||||
int cpu_map__get_socket(struct cpu_map *map, int idx)
|
||||
{
|
||||
int cpu;
|
||||
|
||||
if (idx > map->nr)
|
||||
return -1;
|
||||
|
||||
cpu = map->map[idx];
|
||||
|
||||
return cpu_map__get_socket_id(cpu);
|
||||
}
|
||||
|
||||
static int cmp_ids(const void *a, const void *b)
|
||||
@ -289,17 +297,12 @@ static int cpu_map__build_map(struct cpu_map *cpus, struct cpu_map **res,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cpu_map__get_core(struct cpu_map *map, int idx)
|
||||
int cpu_map__get_core_id(int cpu)
|
||||
{
|
||||
FILE *fp;
|
||||
const char *mnt;
|
||||
char path[PATH_MAX];
|
||||
int cpu, ret, s;
|
||||
|
||||
if (idx > map->nr)
|
||||
return -1;
|
||||
|
||||
cpu = map->map[idx];
|
||||
int core_id, ret;
|
||||
|
||||
mnt = sysfs__mountpoint();
|
||||
if (!mnt)
|
||||
@ -312,11 +315,23 @@ int cpu_map__get_core(struct cpu_map *map, int idx)
|
||||
fp = fopen(path, "r");
|
||||
if (!fp)
|
||||
return -1;
|
||||
ret = fscanf(fp, "%d", &cpu);
|
||||
ret = fscanf(fp, "%d", &core_id);
|
||||
fclose(fp);
|
||||
if (ret != 1)
|
||||
|
||||
return ret == 1 ? core_id : -1;
|
||||
}
|
||||
|
||||
int cpu_map__get_core(struct cpu_map *map, int idx)
|
||||
{
|
||||
int cpu, s;
|
||||
|
||||
if (idx > map->nr)
|
||||
return -1;
|
||||
|
||||
cpu = map->map[idx];
|
||||
|
||||
cpu = cpu_map__get_core_id(cpu);
|
||||
|
||||
s = cpu_map__get_socket(map, idx);
|
||||
if (s == -1)
|
||||
return -1;
|
||||
|
@ -18,7 +18,9 @@ struct cpu_map *cpu_map__new(const char *cpu_list);
|
||||
struct cpu_map *cpu_map__dummy_new(void);
|
||||
struct cpu_map *cpu_map__read(FILE *file);
|
||||
size_t cpu_map__fprintf(struct cpu_map *map, FILE *fp);
|
||||
int cpu_map__get_socket_id(int cpu);
|
||||
int cpu_map__get_socket(struct cpu_map *map, int idx);
|
||||
int cpu_map__get_core_id(int cpu);
|
||||
int cpu_map__get_core(struct cpu_map *map, int idx);
|
||||
int cpu_map__build_socket_map(struct cpu_map *cpus, struct cpu_map **sockp);
|
||||
int cpu_map__build_core_map(struct cpu_map *cpus, struct cpu_map **corep);
|
||||
|
@ -88,6 +88,9 @@ int write_padded(int fd, const void *bf, size_t count, size_t count_aligned)
|
||||
return err;
|
||||
}
|
||||
|
||||
#define string_size(str) \
|
||||
(PERF_ALIGN((strlen(str) + 1), NAME_ALIGN) + sizeof(u32))
|
||||
|
||||
static int do_write_string(int fd, const char *str)
|
||||
{
|
||||
u32 len, olen;
|
||||
@ -441,10 +444,13 @@ static int write_cmdline(int fd, struct perf_header *h __maybe_unused,
|
||||
"/sys/devices/system/cpu/cpu%d/topology/thread_siblings_list"
|
||||
|
||||
struct cpu_topo {
|
||||
u32 cpu_nr;
|
||||
u32 core_sib;
|
||||
u32 thread_sib;
|
||||
char **core_siblings;
|
||||
char **thread_siblings;
|
||||
int *core_id;
|
||||
int *phy_pkg_id;
|
||||
};
|
||||
|
||||
static int build_cpu_topo(struct cpu_topo *tp, int cpu)
|
||||
@ -507,6 +513,9 @@ try_threads:
|
||||
}
|
||||
ret = 0;
|
||||
done:
|
||||
tp->core_id[cpu] = cpu_map__get_core_id(cpu);
|
||||
tp->phy_pkg_id[cpu] = cpu_map__get_socket_id(cpu);
|
||||
|
||||
if(fp)
|
||||
fclose(fp);
|
||||
free(buf);
|
||||
@ -534,7 +543,7 @@ static struct cpu_topo *build_cpu_topology(void)
|
||||
struct cpu_topo *tp;
|
||||
void *addr;
|
||||
u32 nr, i;
|
||||
size_t sz;
|
||||
size_t sz, sz_id;
|
||||
long ncpus;
|
||||
int ret = -1;
|
||||
|
||||
@ -545,17 +554,22 @@ static struct cpu_topo *build_cpu_topology(void)
|
||||
nr = (u32)(ncpus & UINT_MAX);
|
||||
|
||||
sz = nr * sizeof(char *);
|
||||
sz_id = nr * sizeof(int);
|
||||
|
||||
addr = calloc(1, sizeof(*tp) + 2 * sz);
|
||||
addr = calloc(1, sizeof(*tp) + 2 * sz + 2 * sz_id);
|
||||
if (!addr)
|
||||
return NULL;
|
||||
|
||||
tp = addr;
|
||||
|
||||
tp->cpu_nr = nr;
|
||||
addr += sizeof(*tp);
|
||||
tp->core_siblings = addr;
|
||||
addr += sz;
|
||||
tp->thread_siblings = addr;
|
||||
addr += sz;
|
||||
tp->core_id = addr;
|
||||
addr += sz_id;
|
||||
tp->phy_pkg_id = addr;
|
||||
|
||||
for (i = 0; i < nr; i++) {
|
||||
ret = build_cpu_topo(tp, i);
|
||||
@ -598,6 +612,15 @@ static int write_cpu_topology(int fd, struct perf_header *h __maybe_unused,
|
||||
if (ret < 0)
|
||||
break;
|
||||
}
|
||||
|
||||
for (i = 0; i < tp->cpu_nr; i++) {
|
||||
ret = do_write(fd, &tp->core_id[i], sizeof(int));
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
ret = do_write(fd, &tp->phy_pkg_id[i], sizeof(int));
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
done:
|
||||
free_cpu_topo(tp);
|
||||
return ret;
|
||||
@ -938,6 +961,7 @@ static void print_cpu_topology(struct perf_header *ph, int fd __maybe_unused,
|
||||
{
|
||||
int nr, i;
|
||||
char *str;
|
||||
int cpu_nr = ph->env.nr_cpus_online;
|
||||
|
||||
nr = ph->env.nr_sibling_cores;
|
||||
str = ph->env.sibling_cores;
|
||||
@ -954,6 +978,13 @@ static void print_cpu_topology(struct perf_header *ph, int fd __maybe_unused,
|
||||
fprintf(fp, "# sibling threads : %s\n", str);
|
||||
str += strlen(str) + 1;
|
||||
}
|
||||
|
||||
if (ph->env.cpu != NULL) {
|
||||
for (i = 0; i < cpu_nr; i++)
|
||||
fprintf(fp, "# CPU %d: Core ID %d, Socket ID %d\n", i,
|
||||
ph->env.cpu[i].core_id, ph->env.cpu[i].socket_id);
|
||||
} else
|
||||
fprintf(fp, "# Core ID and Socket ID information is not available\n");
|
||||
}
|
||||
|
||||
static void free_event_desc(struct perf_evsel *events)
|
||||
@ -1582,7 +1613,7 @@ error:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int process_cpu_topology(struct perf_file_section *section __maybe_unused,
|
||||
static int process_cpu_topology(struct perf_file_section *section,
|
||||
struct perf_header *ph, int fd,
|
||||
void *data __maybe_unused)
|
||||
{
|
||||
@ -1590,15 +1621,22 @@ static int process_cpu_topology(struct perf_file_section *section __maybe_unused
|
||||
u32 nr, i;
|
||||
char *str;
|
||||
struct strbuf sb;
|
||||
int cpu_nr = ph->env.nr_cpus_online;
|
||||
u64 size = 0;
|
||||
|
||||
ph->env.cpu = calloc(cpu_nr, sizeof(*ph->env.cpu));
|
||||
if (!ph->env.cpu)
|
||||
return -1;
|
||||
|
||||
ret = readn(fd, &nr, sizeof(nr));
|
||||
if (ret != sizeof(nr))
|
||||
return -1;
|
||||
goto free_cpu;
|
||||
|
||||
if (ph->needs_swap)
|
||||
nr = bswap_32(nr);
|
||||
|
||||
ph->env.nr_sibling_cores = nr;
|
||||
size += sizeof(u32);
|
||||
strbuf_init(&sb, 128);
|
||||
|
||||
for (i = 0; i < nr; i++) {
|
||||
@ -1608,6 +1646,7 @@ static int process_cpu_topology(struct perf_file_section *section __maybe_unused
|
||||
|
||||
/* include a NULL character at the end */
|
||||
strbuf_add(&sb, str, strlen(str) + 1);
|
||||
size += string_size(str);
|
||||
free(str);
|
||||
}
|
||||
ph->env.sibling_cores = strbuf_detach(&sb, NULL);
|
||||
@ -1620,6 +1659,7 @@ static int process_cpu_topology(struct perf_file_section *section __maybe_unused
|
||||
nr = bswap_32(nr);
|
||||
|
||||
ph->env.nr_sibling_threads = nr;
|
||||
size += sizeof(u32);
|
||||
|
||||
for (i = 0; i < nr; i++) {
|
||||
str = do_read_string(fd, ph);
|
||||
@ -1628,13 +1668,57 @@ static int process_cpu_topology(struct perf_file_section *section __maybe_unused
|
||||
|
||||
/* include a NULL character at the end */
|
||||
strbuf_add(&sb, str, strlen(str) + 1);
|
||||
size += string_size(str);
|
||||
free(str);
|
||||
}
|
||||
ph->env.sibling_threads = strbuf_detach(&sb, NULL);
|
||||
|
||||
/*
|
||||
* The header may be from old perf,
|
||||
* which doesn't include core id and socket id information.
|
||||
*/
|
||||
if (section->size <= size) {
|
||||
zfree(&ph->env.cpu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < (u32)cpu_nr; i++) {
|
||||
ret = readn(fd, &nr, sizeof(nr));
|
||||
if (ret != sizeof(nr))
|
||||
goto free_cpu;
|
||||
|
||||
if (ph->needs_swap)
|
||||
nr = bswap_32(nr);
|
||||
|
||||
if (nr > (u32)cpu_nr) {
|
||||
pr_debug("core_id number is too big."
|
||||
"You may need to upgrade the perf tool.\n");
|
||||
goto free_cpu;
|
||||
}
|
||||
ph->env.cpu[i].core_id = nr;
|
||||
|
||||
ret = readn(fd, &nr, sizeof(nr));
|
||||
if (ret != sizeof(nr))
|
||||
goto free_cpu;
|
||||
|
||||
if (ph->needs_swap)
|
||||
nr = bswap_32(nr);
|
||||
|
||||
if (nr > (u32)cpu_nr) {
|
||||
pr_debug("socket_id number is too big."
|
||||
"You may need to upgrade the perf tool.\n");
|
||||
goto free_cpu;
|
||||
}
|
||||
|
||||
ph->env.cpu[i].socket_id = nr;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
strbuf_release(&sb);
|
||||
free_cpu:
|
||||
zfree(&ph->env.cpu);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -66,6 +66,11 @@ struct perf_header;
|
||||
int perf_file_header__read(struct perf_file_header *header,
|
||||
struct perf_header *ph, int fd);
|
||||
|
||||
struct cpu_topology_map {
|
||||
int socket_id;
|
||||
int core_id;
|
||||
};
|
||||
|
||||
struct perf_env {
|
||||
char *hostname;
|
||||
char *os_release;
|
||||
@ -89,6 +94,7 @@ struct perf_env {
|
||||
char *sibling_threads;
|
||||
char *numa_nodes;
|
||||
char *pmu_mappings;
|
||||
struct cpu_topology_map *cpu;
|
||||
};
|
||||
|
||||
struct perf_header {
|
||||
|
@ -7,6 +7,17 @@ $(OUTPUT)util/intel-pt-decoder/inat-tables.c: $(inat_tables_script) $(inat_table
|
||||
$(call rule_mkdir)
|
||||
@$(call echo-cmd,gen)$(AWK) -f $(inat_tables_script) $(inat_tables_maps) > $@ || rm -f $@
|
||||
|
||||
$(OUTPUT)util/intel-pt-decoder/intel-pt-insn-decoder.o: util/intel-pt-decoder/inat.c $(OUTPUT)util/intel-pt-decoder/inat-tables.c
|
||||
$(OUTPUT)util/intel-pt-decoder/intel-pt-insn-decoder.o: util/intel-pt-decoder/intel-pt-insn-decoder.c util/intel-pt-decoder/inat.c $(OUTPUT)util/intel-pt-decoder/inat-tables.c
|
||||
@(test -d ../../kernel -a -d ../../tools -a -d ../perf && (( \
|
||||
diff -B -I'^#include' util/intel-pt-decoder/insn.c ../../arch/x86/lib/insn.c >/dev/null && \
|
||||
diff -B -I'^#include' util/intel-pt-decoder/inat.c ../../arch/x86/lib/inat.c >/dev/null && \
|
||||
diff -B util/intel-pt-decoder/x86-opcode-map.txt ../../arch/x86/lib/x86-opcode-map.txt >/dev/null && \
|
||||
diff -B util/intel-pt-decoder/gen-insn-attr-x86.awk ../../arch/x86/tools/gen-insn-attr-x86.awk >/dev/null && \
|
||||
diff -B -I'^#include' util/intel-pt-decoder/insn.h ../../arch/x86/include/asm/insn.h >/dev/null && \
|
||||
diff -B -I'^#include' util/intel-pt-decoder/inat.h ../../arch/x86/include/asm/inat.h >/dev/null && \
|
||||
diff -B -I'^#include' util/intel-pt-decoder/inat_types.h ../../arch/x86/include/asm/inat_types.h >/dev/null) \
|
||||
|| echo "Warning: Intel PT: x86 instruction decoder differs from kernel" >&2 )) || true
|
||||
$(call rule_mkdir)
|
||||
$(call if_changed_dep,cc_o_c)
|
||||
|
||||
CFLAGS_intel-pt-insn-decoder.o += -I$(OUTPUT)util/intel-pt-decoder -Wno-override-init
|
||||
|
@ -353,8 +353,12 @@ AVXcode: 1
|
||||
17: vmovhps Mq,Vq (v1) | vmovhpd Mq,Vq (66),(v1)
|
||||
18: Grp16 (1A)
|
||||
19:
|
||||
1a: BNDCL Ev,Gv | BNDCU Ev,Gv | BNDMOV Gv,Ev | BNDLDX Gv,Ev,Gv
|
||||
1b: BNDCN Ev,Gv | BNDMOV Ev,Gv | BNDMK Gv,Ev | BNDSTX Ev,GV,Gv
|
||||
# Intel SDM opcode map does not list MPX instructions. For now using Gv for
|
||||
# bnd registers and Ev for everything else is OK because the instruction
|
||||
# decoder does not use the information except as an indication that there is
|
||||
# a ModR/M byte.
|
||||
1a: BNDCL Gv,Ev (F3) | BNDCU Gv,Ev (F2) | BNDMOV Gv,Ev (66) | BNDLDX Gv,Ev
|
||||
1b: BNDCN Gv,Ev (F2) | BNDMOV Ev,Gv (66) | BNDMK Gv,Ev (F3) | BNDSTX Ev,Gv
|
||||
1c:
|
||||
1d:
|
||||
1e:
|
||||
@ -732,6 +736,12 @@ bd: vfnmadd231ss/d Vx,Hx,Wx (66),(v),(v1)
|
||||
be: vfnmsub231ps/d Vx,Hx,Wx (66),(v)
|
||||
bf: vfnmsub231ss/d Vx,Hx,Wx (66),(v),(v1)
|
||||
# 0x0f 0x38 0xc0-0xff
|
||||
c8: sha1nexte Vdq,Wdq
|
||||
c9: sha1msg1 Vdq,Wdq
|
||||
ca: sha1msg2 Vdq,Wdq
|
||||
cb: sha256rnds2 Vdq,Wdq
|
||||
cc: sha256msg1 Vdq,Wdq
|
||||
cd: sha256msg2 Vdq,Wdq
|
||||
db: VAESIMC Vdq,Wdq (66),(v1)
|
||||
dc: VAESENC Vdq,Hdq,Wdq (66),(v1)
|
||||
dd: VAESENCLAST Vdq,Hdq,Wdq (66),(v1)
|
||||
@ -790,6 +800,7 @@ AVXcode: 3
|
||||
61: vpcmpestri Vdq,Wdq,Ib (66),(v1)
|
||||
62: vpcmpistrm Vdq,Wdq,Ib (66),(v1)
|
||||
63: vpcmpistri Vdq,Wdq,Ib (66),(v1)
|
||||
cc: sha1rnds4 Vdq,Wdq,Ib
|
||||
df: VAESKEYGEN Vdq,Wdq,Ib (66),(v1)
|
||||
f0: RORX Gy,Ey,Ib (F2),(v)
|
||||
EndTable
|
||||
@ -874,7 +885,7 @@ GrpTable: Grp7
|
||||
2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B)
|
||||
3: LIDT Ms
|
||||
4: SMSW Mw/Rv
|
||||
5:
|
||||
5: rdpkru (110),(11B) | wrpkru (111),(11B)
|
||||
6: LMSW Ew
|
||||
7: INVLPG Mb | SWAPGS (o64),(000),(11B) | RDTSCP (001),(11B)
|
||||
EndTable
|
||||
@ -888,6 +899,9 @@ EndTable
|
||||
|
||||
GrpTable: Grp9
|
||||
1: CMPXCHG8B/16B Mq/Mdq
|
||||
3: xrstors
|
||||
4: xsavec
|
||||
5: xsaves
|
||||
6: VMPTRLD Mq | VMCLEAR Mq (66) | VMXON Mq (F3) | RDRAND Rv (11B)
|
||||
7: VMPTRST Mq | VMPTRST Mq (F3) | RDSEED Rv (11B)
|
||||
EndTable
|
||||
@ -932,8 +946,8 @@ GrpTable: Grp15
|
||||
3: vstmxcsr Md (v1) | WRGSBASE Ry (F3),(11B)
|
||||
4: XSAVE
|
||||
5: XRSTOR | lfence (11B)
|
||||
6: XSAVEOPT | mfence (11B)
|
||||
7: clflush | sfence (11B)
|
||||
6: XSAVEOPT | clwb (66) | mfence (11B)
|
||||
7: clflush | clflushopt (66) | sfence (11B) | pcommit (66),(11B)
|
||||
EndTable
|
||||
|
||||
GrpTable: Grp16
|
||||
|
@ -1145,11 +1145,13 @@ static int intel_pt_sample(struct intel_pt_queue *ptq)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u64 intel_pt_switch_ip(struct machine *machine, u64 *ptss_ip)
|
||||
static u64 intel_pt_switch_ip(struct intel_pt *pt, u64 *ptss_ip)
|
||||
{
|
||||
struct machine *machine = pt->machine;
|
||||
struct map *map;
|
||||
struct symbol *sym, *start;
|
||||
u64 ip, switch_ip = 0;
|
||||
const char *ptss;
|
||||
|
||||
if (ptss_ip)
|
||||
*ptss_ip = 0;
|
||||
@ -1177,8 +1179,13 @@ static u64 intel_pt_switch_ip(struct machine *machine, u64 *ptss_ip)
|
||||
if (!switch_ip || !ptss_ip)
|
||||
return 0;
|
||||
|
||||
if (pt->have_sched_switch == 1)
|
||||
ptss = "perf_trace_sched_switch";
|
||||
else
|
||||
ptss = "__perf_event_task_sched_out";
|
||||
|
||||
for (sym = start; sym; sym = dso__next_symbol(sym)) {
|
||||
if (!strcmp(sym->name, "perf_trace_sched_switch")) {
|
||||
if (!strcmp(sym->name, ptss)) {
|
||||
ip = map->unmap_ip(map, sym->start);
|
||||
if (ip >= map->start && ip < map->end) {
|
||||
*ptss_ip = ip;
|
||||
@ -1198,11 +1205,11 @@ static int intel_pt_run_decoder(struct intel_pt_queue *ptq, u64 *timestamp)
|
||||
|
||||
if (!pt->kernel_start) {
|
||||
pt->kernel_start = machine__kernel_start(pt->machine);
|
||||
if (pt->per_cpu_mmaps && pt->have_sched_switch &&
|
||||
if (pt->per_cpu_mmaps &&
|
||||
(pt->have_sched_switch == 1 || pt->have_sched_switch == 3) &&
|
||||
!pt->timeless_decoding && intel_pt_tracing_kernel(pt) &&
|
||||
!pt->sampling_mode) {
|
||||
pt->switch_ip = intel_pt_switch_ip(pt->machine,
|
||||
&pt->ptss_ip);
|
||||
pt->switch_ip = intel_pt_switch_ip(pt, &pt->ptss_ip);
|
||||
if (pt->switch_ip) {
|
||||
intel_pt_log("switch_ip: %"PRIx64" ptss_ip: %"PRIx64"\n",
|
||||
pt->switch_ip, pt->ptss_ip);
|
||||
@ -1387,31 +1394,18 @@ static struct intel_pt_queue *intel_pt_cpu_to_ptq(struct intel_pt *pt, int cpu)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int intel_pt_process_switch(struct intel_pt *pt,
|
||||
struct perf_sample *sample)
|
||||
static int intel_pt_sync_switch(struct intel_pt *pt, int cpu, pid_t tid,
|
||||
u64 timestamp)
|
||||
{
|
||||
struct intel_pt_queue *ptq;
|
||||
struct perf_evsel *evsel;
|
||||
pid_t tid;
|
||||
int cpu, err;
|
||||
|
||||
evsel = perf_evlist__id2evsel(pt->session->evlist, sample->id);
|
||||
if (evsel != pt->switch_evsel)
|
||||
return 0;
|
||||
|
||||
tid = perf_evsel__intval(evsel, sample, "next_pid");
|
||||
cpu = sample->cpu;
|
||||
|
||||
intel_pt_log("sched_switch: cpu %d tid %d time %"PRIu64" tsc %#"PRIx64"\n",
|
||||
cpu, tid, sample->time, perf_time_to_tsc(sample->time,
|
||||
&pt->tc));
|
||||
int err;
|
||||
|
||||
if (!pt->sync_switch)
|
||||
goto out;
|
||||
return 1;
|
||||
|
||||
ptq = intel_pt_cpu_to_ptq(pt, cpu);
|
||||
if (!ptq)
|
||||
goto out;
|
||||
return 1;
|
||||
|
||||
switch (ptq->switch_state) {
|
||||
case INTEL_PT_SS_NOT_TRACING:
|
||||
@ -1424,7 +1418,7 @@ static int intel_pt_process_switch(struct intel_pt *pt,
|
||||
return 0;
|
||||
case INTEL_PT_SS_EXPECTING_SWITCH_EVENT:
|
||||
if (!ptq->on_heap) {
|
||||
ptq->timestamp = perf_time_to_tsc(sample->time,
|
||||
ptq->timestamp = perf_time_to_tsc(timestamp,
|
||||
&pt->tc);
|
||||
err = auxtrace_heap__add(&pt->heap, ptq->queue_nr,
|
||||
ptq->timestamp);
|
||||
@ -1441,10 +1435,76 @@ static int intel_pt_process_switch(struct intel_pt *pt,
|
||||
default:
|
||||
break;
|
||||
}
|
||||
out:
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int intel_pt_process_switch(struct intel_pt *pt,
|
||||
struct perf_sample *sample)
|
||||
{
|
||||
struct perf_evsel *evsel;
|
||||
pid_t tid;
|
||||
int cpu, ret;
|
||||
|
||||
evsel = perf_evlist__id2evsel(pt->session->evlist, sample->id);
|
||||
if (evsel != pt->switch_evsel)
|
||||
return 0;
|
||||
|
||||
tid = perf_evsel__intval(evsel, sample, "next_pid");
|
||||
cpu = sample->cpu;
|
||||
|
||||
intel_pt_log("sched_switch: cpu %d tid %d time %"PRIu64" tsc %#"PRIx64"\n",
|
||||
cpu, tid, sample->time, perf_time_to_tsc(sample->time,
|
||||
&pt->tc));
|
||||
|
||||
ret = intel_pt_sync_switch(pt, cpu, tid, sample->time);
|
||||
if (ret <= 0)
|
||||
return ret;
|
||||
|
||||
return machine__set_current_tid(pt->machine, cpu, -1, tid);
|
||||
}
|
||||
|
||||
static int intel_pt_context_switch(struct intel_pt *pt, union perf_event *event,
|
||||
struct perf_sample *sample)
|
||||
{
|
||||
bool out = event->header.misc & PERF_RECORD_MISC_SWITCH_OUT;
|
||||
pid_t pid, tid;
|
||||
int cpu, ret;
|
||||
|
||||
cpu = sample->cpu;
|
||||
|
||||
if (pt->have_sched_switch == 3) {
|
||||
if (!out)
|
||||
return 0;
|
||||
if (event->header.type != PERF_RECORD_SWITCH_CPU_WIDE) {
|
||||
pr_err("Expecting CPU-wide context switch event\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
pid = event->context_switch.next_prev_pid;
|
||||
tid = event->context_switch.next_prev_tid;
|
||||
} else {
|
||||
if (out)
|
||||
return 0;
|
||||
pid = sample->pid;
|
||||
tid = sample->tid;
|
||||
}
|
||||
|
||||
if (tid == -1) {
|
||||
pr_err("context_switch event has no tid\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
intel_pt_log("context_switch: cpu %d pid %d tid %d time %"PRIu64" tsc %#"PRIx64"\n",
|
||||
cpu, pid, tid, sample->time, perf_time_to_tsc(sample->time,
|
||||
&pt->tc));
|
||||
|
||||
ret = intel_pt_sync_switch(pt, cpu, tid, sample->time);
|
||||
if (ret <= 0)
|
||||
return ret;
|
||||
|
||||
return machine__set_current_tid(pt->machine, cpu, pid, tid);
|
||||
}
|
||||
|
||||
static int intel_pt_process_itrace_start(struct intel_pt *pt,
|
||||
union perf_event *event,
|
||||
struct perf_sample *sample)
|
||||
@ -1515,6 +1575,9 @@ static int intel_pt_process_event(struct perf_session *session,
|
||||
err = intel_pt_process_switch(pt, sample);
|
||||
else if (event->header.type == PERF_RECORD_ITRACE_START)
|
||||
err = intel_pt_process_itrace_start(pt, event, sample);
|
||||
else if (event->header.type == PERF_RECORD_SWITCH ||
|
||||
event->header.type == PERF_RECORD_SWITCH_CPU_WIDE)
|
||||
err = intel_pt_context_switch(pt, event, sample);
|
||||
|
||||
intel_pt_log("event %s (%u): cpu %d time %"PRIu64" tsc %#"PRIx64"\n",
|
||||
perf_event__name(event->header.type), event->header.type,
|
||||
@ -1777,6 +1840,18 @@ static struct perf_evsel *intel_pt_find_sched_switch(struct perf_evlist *evlist)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static bool intel_pt_find_switch(struct perf_evlist *evlist)
|
||||
{
|
||||
struct perf_evsel *evsel;
|
||||
|
||||
evlist__for_each(evlist, evsel) {
|
||||
if (evsel->attr.context_switch)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static const char * const intel_pt_info_fmts[] = {
|
||||
[INTEL_PT_PMU_TYPE] = " PMU Type %"PRId64"\n",
|
||||
[INTEL_PT_TIME_SHIFT] = " Time Shift %"PRIu64"\n",
|
||||
@ -1888,6 +1963,10 @@ int intel_pt_process_auxtrace_info(union perf_event *event,
|
||||
pr_err("%s: missing sched_switch event\n", __func__);
|
||||
goto err_delete_thread;
|
||||
}
|
||||
} else if (pt->have_sched_switch == 2 &&
|
||||
!intel_pt_find_switch(session->evlist)) {
|
||||
pr_err("%s: missing context_switch attribute flag\n", __func__);
|
||||
goto err_delete_thread;
|
||||
}
|
||||
|
||||
if (session->itrace_synth_opts && session->itrace_synth_opts->set) {
|
||||
|
@ -11,7 +11,7 @@
|
||||
#include "cache.h"
|
||||
#include "header.h"
|
||||
#include "debug.h"
|
||||
#include <api/fs/debugfs.h>
|
||||
#include <api/fs/tracing_path.h>
|
||||
#include "parse-events-bison.h"
|
||||
#define YY_EXTRA_TYPE int
|
||||
#include "parse-events-flex.h"
|
||||
|
@ -2180,9 +2180,9 @@ out:
|
||||
}
|
||||
|
||||
/* Show an event */
|
||||
static int show_perf_probe_event(const char *group, const char *event,
|
||||
struct perf_probe_event *pev,
|
||||
const char *module, bool use_stdout)
|
||||
int show_perf_probe_event(const char *group, const char *event,
|
||||
struct perf_probe_event *pev,
|
||||
const char *module, bool use_stdout)
|
||||
{
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
int ret;
|
||||
@ -2399,7 +2399,6 @@ static int __add_probe_trace_events(struct perf_probe_event *pev,
|
||||
{
|
||||
int i, fd, ret;
|
||||
struct probe_trace_event *tev = NULL;
|
||||
const char *event = NULL, *group = NULL;
|
||||
struct strlist *namelist;
|
||||
|
||||
fd = probe_file__open(PF_FL_RW | (pev->uprobes ? PF_FL_UPROBE : 0));
|
||||
@ -2415,7 +2414,6 @@ static int __add_probe_trace_events(struct perf_probe_event *pev,
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
pr_info("Added new event%s\n", (ntevs > 1) ? "s:" : ":");
|
||||
for (i = 0; i < ntevs; i++) {
|
||||
tev = &tevs[i];
|
||||
/* Skip if the symbol is out of .text or blacklisted */
|
||||
@ -2432,13 +2430,6 @@ static int __add_probe_trace_events(struct perf_probe_event *pev,
|
||||
if (ret < 0)
|
||||
break;
|
||||
|
||||
/* We use tev's name for showing new events */
|
||||
show_perf_probe_event(tev->group, tev->event, pev,
|
||||
tev->point.module, false);
|
||||
/* Save the last valid name */
|
||||
event = tev->event;
|
||||
group = tev->group;
|
||||
|
||||
/*
|
||||
* Probes after the first probe which comes from same
|
||||
* user input are always allowed to add suffix, because
|
||||
@ -2450,13 +2441,6 @@ static int __add_probe_trace_events(struct perf_probe_event *pev,
|
||||
if (ret == -EINVAL && pev->uprobes)
|
||||
warn_uprobe_event_compat(tev);
|
||||
|
||||
/* Note that it is possible to skip all events because of blacklist */
|
||||
if (ret >= 0 && event) {
|
||||
/* Show how to use the event. */
|
||||
pr_info("\nYou can now use it in all perf tools, such as:\n\n");
|
||||
pr_info("\tperf record -e %s:%s -aR sleep 1\n\n", group, event);
|
||||
}
|
||||
|
||||
strlist__delete(namelist);
|
||||
close_out:
|
||||
close(fd);
|
||||
@ -2759,62 +2743,70 @@ static int convert_to_probe_trace_events(struct perf_probe_event *pev,
|
||||
return find_probe_trace_events_from_map(pev, tevs);
|
||||
}
|
||||
|
||||
struct __event_package {
|
||||
struct perf_probe_event *pev;
|
||||
struct probe_trace_event *tevs;
|
||||
int ntevs;
|
||||
};
|
||||
|
||||
int add_perf_probe_events(struct perf_probe_event *pevs, int npevs)
|
||||
int convert_perf_probe_events(struct perf_probe_event *pevs, int npevs)
|
||||
{
|
||||
int i, j, ret;
|
||||
struct __event_package *pkgs;
|
||||
|
||||
ret = 0;
|
||||
pkgs = zalloc(sizeof(struct __event_package) * npevs);
|
||||
|
||||
if (pkgs == NULL)
|
||||
return -ENOMEM;
|
||||
int i, ret;
|
||||
|
||||
ret = init_symbol_maps(pevs->uprobes);
|
||||
if (ret < 0) {
|
||||
free(pkgs);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Loop 1: convert all events */
|
||||
for (i = 0; i < npevs; i++) {
|
||||
pkgs[i].pev = &pevs[i];
|
||||
/* Init kprobe blacklist if needed */
|
||||
if (!pkgs[i].pev->uprobes)
|
||||
if (!pevs[i].uprobes)
|
||||
kprobe_blacklist__init();
|
||||
/* Convert with or without debuginfo */
|
||||
ret = convert_to_probe_trace_events(pkgs[i].pev,
|
||||
&pkgs[i].tevs);
|
||||
ret = convert_to_probe_trace_events(&pevs[i], &pevs[i].tevs);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
pkgs[i].ntevs = ret;
|
||||
return ret;
|
||||
pevs[i].ntevs = ret;
|
||||
}
|
||||
/* This just release blacklist only if allocated */
|
||||
kprobe_blacklist__release();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int apply_perf_probe_events(struct perf_probe_event *pevs, int npevs)
|
||||
{
|
||||
int i, ret = 0;
|
||||
|
||||
/* Loop 2: add all events */
|
||||
for (i = 0; i < npevs; i++) {
|
||||
ret = __add_probe_trace_events(pkgs[i].pev, pkgs[i].tevs,
|
||||
pkgs[i].ntevs,
|
||||
ret = __add_probe_trace_events(&pevs[i], pevs[i].tevs,
|
||||
pevs[i].ntevs,
|
||||
probe_conf.force_add);
|
||||
if (ret < 0)
|
||||
break;
|
||||
}
|
||||
end:
|
||||
return ret;
|
||||
}
|
||||
|
||||
void cleanup_perf_probe_events(struct perf_probe_event *pevs, int npevs)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
/* Loop 3: cleanup and free trace events */
|
||||
for (i = 0; i < npevs; i++) {
|
||||
for (j = 0; j < pkgs[i].ntevs; j++)
|
||||
clear_probe_trace_event(&pkgs[i].tevs[j]);
|
||||
zfree(&pkgs[i].tevs);
|
||||
for (j = 0; j < pevs[i].ntevs; j++)
|
||||
clear_probe_trace_event(&pevs[i].tevs[j]);
|
||||
zfree(&pevs[i].tevs);
|
||||
pevs[i].ntevs = 0;
|
||||
}
|
||||
free(pkgs);
|
||||
|
||||
exit_symbol_maps();
|
||||
}
|
||||
|
||||
int add_perf_probe_events(struct perf_probe_event *pevs, int npevs)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = convert_perf_probe_events(pevs, npevs);
|
||||
if (ret == 0)
|
||||
ret = apply_perf_probe_events(pevs, npevs);
|
||||
|
||||
cleanup_perf_probe_events(pevs, npevs);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -2827,8 +2819,6 @@ int del_perf_probe_events(struct strfilter *filter)
|
||||
if (!str)
|
||||
return -EINVAL;
|
||||
|
||||
pr_debug("Delete filter: \'%s\'\n", str);
|
||||
|
||||
/* Get current event names */
|
||||
ret = probe_file__open_both(&kfd, &ufd, PF_FL_RW);
|
||||
if (ret < 0)
|
||||
@ -2843,9 +2833,6 @@ int del_perf_probe_events(struct strfilter *filter)
|
||||
ret = ret2;
|
||||
goto error;
|
||||
}
|
||||
if (ret == -ENOENT && ret2 == -ENOENT)
|
||||
pr_debug("\"%s\" does not hit any event.\n", str);
|
||||
/* Note that this is silently ignored */
|
||||
ret = 0;
|
||||
|
||||
error:
|
||||
|
@ -87,6 +87,8 @@ struct perf_probe_event {
|
||||
bool uprobes; /* Uprobe event flag */
|
||||
char *target; /* Target binary */
|
||||
struct perf_probe_arg *args; /* Arguments */
|
||||
struct probe_trace_event *tevs;
|
||||
int ntevs;
|
||||
};
|
||||
|
||||
/* Line range */
|
||||
@ -138,7 +140,14 @@ extern void line_range__clear(struct line_range *lr);
|
||||
extern int line_range__init(struct line_range *lr);
|
||||
|
||||
extern int add_perf_probe_events(struct perf_probe_event *pevs, int npevs);
|
||||
extern int convert_perf_probe_events(struct perf_probe_event *pevs, int npevs);
|
||||
extern int apply_perf_probe_events(struct perf_probe_event *pevs, int npevs);
|
||||
extern void cleanup_perf_probe_events(struct perf_probe_event *pevs, int npevs);
|
||||
extern int del_perf_probe_events(struct strfilter *filter);
|
||||
|
||||
extern int show_perf_probe_event(const char *group, const char *event,
|
||||
struct perf_probe_event *pev,
|
||||
const char *module, bool use_stdout);
|
||||
extern int show_perf_probe_events(struct strfilter *filter);
|
||||
extern int show_line_range(struct line_range *lr, const char *module,
|
||||
bool user);
|
||||
|
@ -267,7 +267,6 @@ static int __del_trace_probe_event(int fd, struct str_node *ent)
|
||||
goto error;
|
||||
}
|
||||
|
||||
pr_info("Removed event: %s\n", ent->s);
|
||||
return 0;
|
||||
error:
|
||||
pr_warning("Failed to delete event: %s\n",
|
||||
@ -275,7 +274,8 @@ error:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int probe_file__del_events(int fd, struct strfilter *filter)
|
||||
int probe_file__get_events(int fd, struct strfilter *filter,
|
||||
struct strlist *plist)
|
||||
{
|
||||
struct strlist *namelist;
|
||||
struct str_node *ent;
|
||||
@ -290,12 +290,43 @@ int probe_file__del_events(int fd, struct strfilter *filter)
|
||||
p = strchr(ent->s, ':');
|
||||
if ((p && strfilter__compare(filter, p + 1)) ||
|
||||
strfilter__compare(filter, ent->s)) {
|
||||
ret = __del_trace_probe_event(fd, ent);
|
||||
if (ret < 0)
|
||||
break;
|
||||
strlist__add(plist, ent->s);
|
||||
ret = 0;
|
||||
}
|
||||
}
|
||||
strlist__delete(namelist);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int probe_file__del_strlist(int fd, struct strlist *namelist)
|
||||
{
|
||||
int ret = 0;
|
||||
struct str_node *ent;
|
||||
|
||||
strlist__for_each(ent, namelist) {
|
||||
ret = __del_trace_probe_event(fd, ent);
|
||||
if (ret < 0)
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int probe_file__del_events(int fd, struct strfilter *filter)
|
||||
{
|
||||
struct strlist *namelist;
|
||||
int ret;
|
||||
|
||||
namelist = strlist__new(NULL, NULL);
|
||||
if (!namelist)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = probe_file__get_events(fd, filter, namelist);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = probe_file__del_strlist(fd, namelist);
|
||||
strlist__delete(namelist);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -14,5 +14,9 @@ struct strlist *probe_file__get_namelist(int fd);
|
||||
struct strlist *probe_file__get_rawlist(int fd);
|
||||
int probe_file__add_event(int fd, struct probe_trace_event *tev);
|
||||
int probe_file__del_events(int fd, struct strfilter *filter);
|
||||
int probe_file__get_events(int fd, struct strfilter *filter,
|
||||
struct strlist *plist);
|
||||
int probe_file__del_strlist(int fd, struct strlist *namelist);
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -221,6 +221,7 @@ static void define_event_symbols(struct event_format *event,
|
||||
break;
|
||||
case PRINT_BSTRING:
|
||||
case PRINT_DYNAMIC_ARRAY:
|
||||
case PRINT_DYNAMIC_ARRAY_LEN:
|
||||
case PRINT_STRING:
|
||||
case PRINT_BITMASK:
|
||||
break;
|
||||
|
@ -251,6 +251,7 @@ static void define_event_symbols(struct event_format *event,
|
||||
/* gcc warns for these? */
|
||||
case PRINT_BSTRING:
|
||||
case PRINT_DYNAMIC_ARRAY:
|
||||
case PRINT_DYNAMIC_ARRAY_LEN:
|
||||
case PRINT_FUNC:
|
||||
case PRINT_BITMASK:
|
||||
/* we should warn... */
|
||||
|
@ -185,6 +185,7 @@ static void perf_session_env__exit(struct perf_env *env)
|
||||
zfree(&env->sibling_threads);
|
||||
zfree(&env->numa_nodes);
|
||||
zfree(&env->pmu_mappings);
|
||||
zfree(&env->cpu);
|
||||
}
|
||||
|
||||
void perf_session__delete(struct perf_session *session)
|
||||
@ -1079,11 +1080,11 @@ static int machines__deliver_event(struct machines *machines,
|
||||
|
||||
switch (event->header.type) {
|
||||
case PERF_RECORD_SAMPLE:
|
||||
dump_sample(evsel, event, sample);
|
||||
if (evsel == NULL) {
|
||||
++evlist->stats.nr_unknown_id;
|
||||
return 0;
|
||||
}
|
||||
dump_sample(evsel, event, sample);
|
||||
if (machine == NULL) {
|
||||
++evlist->stats.nr_unprocessable_samples;
|
||||
return 0;
|
||||
|
@ -328,8 +328,8 @@ static char *get_srcfile(struct hist_entry *e)
|
||||
char *sf, *p;
|
||||
struct map *map = e->ms.map;
|
||||
|
||||
sf = get_srcline(map->dso, map__rip_2objdump(map, e->ip),
|
||||
e->ms.sym, true);
|
||||
sf = __get_srcline(map->dso, map__rip_2objdump(map, e->ip),
|
||||
e->ms.sym, false, true);
|
||||
if (!strcmp(sf, SRCLINE_UNKNOWN))
|
||||
return no_srcfile;
|
||||
p = strchr(sf, ':');
|
||||
|
@ -149,8 +149,11 @@ static void addr2line_cleanup(struct a2l_data *a2l)
|
||||
free(a2l);
|
||||
}
|
||||
|
||||
#define MAX_INLINE_NEST 1024
|
||||
|
||||
static int addr2line(const char *dso_name, u64 addr,
|
||||
char **file, unsigned int *line, struct dso *dso)
|
||||
char **file, unsigned int *line, struct dso *dso,
|
||||
bool unwind_inlines)
|
||||
{
|
||||
int ret = 0;
|
||||
struct a2l_data *a2l = dso->a2l;
|
||||
@ -170,6 +173,15 @@ static int addr2line(const char *dso_name, u64 addr,
|
||||
|
||||
bfd_map_over_sections(a2l->abfd, find_address_in_section, a2l);
|
||||
|
||||
if (a2l->found && unwind_inlines) {
|
||||
int cnt = 0;
|
||||
|
||||
while (bfd_find_inliner_info(a2l->abfd, &a2l->filename,
|
||||
&a2l->funcname, &a2l->line) &&
|
||||
cnt++ < MAX_INLINE_NEST)
|
||||
;
|
||||
}
|
||||
|
||||
if (a2l->found && a2l->filename) {
|
||||
*file = strdup(a2l->filename);
|
||||
*line = a2l->line;
|
||||
@ -197,7 +209,8 @@ void dso__free_a2l(struct dso *dso)
|
||||
|
||||
static int addr2line(const char *dso_name, u64 addr,
|
||||
char **file, unsigned int *line_nr,
|
||||
struct dso *dso __maybe_unused)
|
||||
struct dso *dso __maybe_unused,
|
||||
bool unwind_inlines __maybe_unused)
|
||||
{
|
||||
FILE *fp;
|
||||
char cmd[PATH_MAX];
|
||||
@ -254,8 +267,8 @@ void dso__free_a2l(struct dso *dso __maybe_unused)
|
||||
*/
|
||||
#define A2L_FAIL_LIMIT 123
|
||||
|
||||
char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
|
||||
bool show_sym)
|
||||
char *__get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
|
||||
bool show_sym, bool unwind_inlines)
|
||||
{
|
||||
char *file = NULL;
|
||||
unsigned line = 0;
|
||||
@ -276,7 +289,7 @@ char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
|
||||
if (!strncmp(dso_name, "/tmp/perf-", 10))
|
||||
goto out;
|
||||
|
||||
if (!addr2line(dso_name, addr, &file, &line, dso))
|
||||
if (!addr2line(dso_name, addr, &file, &line, dso, unwind_inlines))
|
||||
goto out;
|
||||
|
||||
if (asprintf(&srcline, "%s:%u",
|
||||
@ -310,3 +323,9 @@ void free_srcline(char *srcline)
|
||||
if (srcline && strcmp(srcline, SRCLINE_UNKNOWN) != 0)
|
||||
free(srcline);
|
||||
}
|
||||
|
||||
char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
|
||||
bool show_sym)
|
||||
{
|
||||
return __get_srcline(dso, addr, sym, show_sym, false);
|
||||
}
|
||||
|
@ -38,7 +38,7 @@
|
||||
|
||||
#include "../perf.h"
|
||||
#include "trace-event.h"
|
||||
#include <api/fs/debugfs.h>
|
||||
#include <api/fs/tracing_path.h>
|
||||
#include "evsel.h"
|
||||
#include "debug.h"
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include <fcntl.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <traceevent/event-parse.h>
|
||||
#include <api/fs/tracing_path.h>
|
||||
#include "trace-event.h"
|
||||
#include "machine.h"
|
||||
#include "util.h"
|
||||
|
@ -34,9 +34,6 @@ bool test_attr__enabled;
|
||||
bool perf_host = true;
|
||||
bool perf_guest = false;
|
||||
|
||||
char tracing_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing";
|
||||
char tracing_events_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing/events";
|
||||
|
||||
void event_attr_init(struct perf_event_attr *attr)
|
||||
{
|
||||
if (!perf_host)
|
||||
@ -390,73 +387,6 @@ void set_term_quiet_input(struct termios *old)
|
||||
tcsetattr(0, TCSANOW, &tc);
|
||||
}
|
||||
|
||||
static void set_tracing_events_path(const char *tracing, const char *mountpoint)
|
||||
{
|
||||
snprintf(tracing_path, sizeof(tracing_path), "%s/%s",
|
||||
mountpoint, tracing);
|
||||
snprintf(tracing_events_path, sizeof(tracing_events_path), "%s/%s%s",
|
||||
mountpoint, tracing, "events");
|
||||
}
|
||||
|
||||
static const char *__perf_tracefs_mount(const char *mountpoint)
|
||||
{
|
||||
const char *mnt;
|
||||
|
||||
mnt = tracefs_mount(mountpoint);
|
||||
if (!mnt)
|
||||
return NULL;
|
||||
|
||||
set_tracing_events_path("", mnt);
|
||||
|
||||
return mnt;
|
||||
}
|
||||
|
||||
static const char *__perf_debugfs_mount(const char *mountpoint)
|
||||
{
|
||||
const char *mnt;
|
||||
|
||||
mnt = debugfs_mount(mountpoint);
|
||||
if (!mnt)
|
||||
return NULL;
|
||||
|
||||
set_tracing_events_path("tracing/", mnt);
|
||||
|
||||
return mnt;
|
||||
}
|
||||
|
||||
const char *perf_debugfs_mount(const char *mountpoint)
|
||||
{
|
||||
const char *mnt;
|
||||
|
||||
mnt = __perf_tracefs_mount(mountpoint);
|
||||
if (mnt)
|
||||
return mnt;
|
||||
|
||||
mnt = __perf_debugfs_mount(mountpoint);
|
||||
|
||||
return mnt;
|
||||
}
|
||||
|
||||
void perf_debugfs_set_path(const char *mntpt)
|
||||
{
|
||||
set_tracing_events_path("tracing/", mntpt);
|
||||
}
|
||||
|
||||
char *get_tracing_file(const char *name)
|
||||
{
|
||||
char *file;
|
||||
|
||||
if (asprintf(&file, "%s/%s", tracing_path, name) < 0)
|
||||
return NULL;
|
||||
|
||||
return file;
|
||||
}
|
||||
|
||||
void put_tracing_file(char *file)
|
||||
{
|
||||
free(file);
|
||||
}
|
||||
|
||||
int parse_nsec_time(const char *str, u64 *ptime)
|
||||
{
|
||||
u64 time_sec, time_nsec;
|
||||
|
@ -83,12 +83,6 @@
|
||||
extern const char *graph_line;
|
||||
extern const char *graph_dotted_line;
|
||||
extern char buildid_dir[];
|
||||
extern char tracing_path[];
|
||||
extern char tracing_events_path[];
|
||||
extern void perf_debugfs_set_path(const char *mountpoint);
|
||||
const char *perf_debugfs_mount(const char *mountpoint);
|
||||
char *get_tracing_file(const char *name);
|
||||
void put_tracing_file(char *file);
|
||||
|
||||
/* On most systems <limits.h> would have given us this, but
|
||||
* not on some systems (e.g. GNU/Hurd).
|
||||
@ -321,6 +315,8 @@ struct symbol;
|
||||
extern bool srcline_full_filename;
|
||||
char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
|
||||
bool show_sym);
|
||||
char *__get_srcline(struct dso *dso, u64 addr, struct symbol *sym,
|
||||
bool show_sym, bool unwind_inlines);
|
||||
void free_srcline(char *srcline);
|
||||
|
||||
int filename__read_str(const char *filename, char **buf, size_t *sizep);
|
||||
|
Loading…
Reference in New Issue
Block a user