Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+3762 -294
+19 -5
arch/x86/lib/x86-opcode-map.txt
··· 353 353 17: vmovhps Mq,Vq (v1) | vmovhpd Mq,Vq (66),(v1) 354 354 18: Grp16 (1A) 355 355 19: 356 - 1a: BNDCL Ev,Gv | BNDCU Ev,Gv | BNDMOV Gv,Ev | BNDLDX Gv,Ev,Gv 357 - 1b: BNDCN Ev,Gv | BNDMOV Ev,Gv | BNDMK Gv,Ev | BNDSTX Ev,GV,Gv 356 + # Intel SDM opcode map does not list MPX instructions. For now using Gv for 357 + # bnd registers and Ev for everything else is OK because the instruction 358 + # decoder does not use the information except as an indication that there is 359 + # a ModR/M byte. 360 + 1a: BNDCL Gv,Ev (F3) | BNDCU Gv,Ev (F2) | BNDMOV Gv,Ev (66) | BNDLDX Gv,Ev 361 + 1b: BNDCN Gv,Ev (F2) | BNDMOV Ev,Gv (66) | BNDMK Gv,Ev (F3) | BNDSTX Ev,Gv 358 362 1c: 359 363 1d: 360 364 1e: ··· 736 732 be: vfnmsub231ps/d Vx,Hx,Wx (66),(v) 737 733 bf: vfnmsub231ss/d Vx,Hx,Wx (66),(v),(v1) 738 734 # 0x0f 0x38 0xc0-0xff 735 + c8: sha1nexte Vdq,Wdq 736 + c9: sha1msg1 Vdq,Wdq 737 + ca: sha1msg2 Vdq,Wdq 738 + cb: sha256rnds2 Vdq,Wdq 739 + cc: sha256msg1 Vdq,Wdq 740 + cd: sha256msg2 Vdq,Wdq 739 741 db: VAESIMC Vdq,Wdq (66),(v1) 740 742 dc: VAESENC Vdq,Hdq,Wdq (66),(v1) 741 743 dd: VAESENCLAST Vdq,Hdq,Wdq (66),(v1) ··· 800 790 61: vpcmpestri Vdq,Wdq,Ib (66),(v1) 801 791 62: vpcmpistrm Vdq,Wdq,Ib (66),(v1) 802 792 63: vpcmpistri Vdq,Wdq,Ib (66),(v1) 793 + cc: sha1rnds4 Vdq,Wdq,Ib 803 794 df: VAESKEYGEN Vdq,Wdq,Ib (66),(v1) 804 795 f0: RORX Gy,Ey,Ib (F2),(v) 805 796 EndTable ··· 885 874 2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B) 886 875 3: LIDT Ms 887 876 4: SMSW Mw/Rv 888 - 5: 877 + 5: rdpkru (110),(11B) | wrpkru (111),(11B) 889 878 6: LMSW Ew 890 879 7: INVLPG Mb | SWAPGS (o64),(000),(11B) | RDTSCP (001),(11B) 891 880 EndTable ··· 899 888 900 889 GrpTable: Grp9 901 890 1: CMPXCHG8B/16B Mq/Mdq 891 + 3: xrstors 892 + 4: xsavec 893 + 5: xsaves 902 894 6: VMPTRLD Mq | VMCLEAR Mq (66) | VMXON Mq (F3) | RDRAND Rv (11B) 903 895 7: VMPTRST Mq | VMPTRST Mq (F3) | RDSEED Rv (11B) 904 896 EndTable ··· 946 932 3: vstmxcsr Md (v1) | WRGSBASE Ry (F3),(11B) 947 933 4: XSAVE 948 934 5: XRSTOR | lfence (11B) 949 - 6: XSAVEOPT | mfence (11B) 950 - 7: clflush | sfence (11B) 935 + 6: XSAVEOPT | clwb (66) | mfence (11B) 936 + 7: clflush | clflushopt (66) | sfence (11B) | pcommit (66),(11B) 951 937 EndTable 952 938 953 939 GrpTable: Grp16
+231
tools/include/linux/filter.h
··· 1 + /* 2 + * Linux Socket Filter Data Structures 3 + */ 4 + #ifndef __TOOLS_LINUX_FILTER_H 5 + #define __TOOLS_LINUX_FILTER_H 6 + 7 + #include <linux/bpf.h> 8 + 9 + /* ArgX, context and stack frame pointer register positions. Note, 10 + * Arg1, Arg2, Arg3, etc are used as argument mappings of function 11 + * calls in BPF_CALL instruction. 12 + */ 13 + #define BPF_REG_ARG1 BPF_REG_1 14 + #define BPF_REG_ARG2 BPF_REG_2 15 + #define BPF_REG_ARG3 BPF_REG_3 16 + #define BPF_REG_ARG4 BPF_REG_4 17 + #define BPF_REG_ARG5 BPF_REG_5 18 + #define BPF_REG_CTX BPF_REG_6 19 + #define BPF_REG_FP BPF_REG_10 20 + 21 + /* Additional register mappings for converted user programs. */ 22 + #define BPF_REG_A BPF_REG_0 23 + #define BPF_REG_X BPF_REG_7 24 + #define BPF_REG_TMP BPF_REG_8 25 + 26 + /* BPF program can access up to 512 bytes of stack space. */ 27 + #define MAX_BPF_STACK 512 28 + 29 + /* Helper macros for filter block array initializers. */ 30 + 31 + /* ALU ops on registers, bpf_add|sub|...: dst_reg += src_reg */ 32 + 33 + #define BPF_ALU64_REG(OP, DST, SRC) \ 34 + ((struct bpf_insn) { \ 35 + .code = BPF_ALU64 | BPF_OP(OP) | BPF_X, \ 36 + .dst_reg = DST, \ 37 + .src_reg = SRC, \ 38 + .off = 0, \ 39 + .imm = 0 }) 40 + 41 + #define BPF_ALU32_REG(OP, DST, SRC) \ 42 + ((struct bpf_insn) { \ 43 + .code = BPF_ALU | BPF_OP(OP) | BPF_X, \ 44 + .dst_reg = DST, \ 45 + .src_reg = SRC, \ 46 + .off = 0, \ 47 + .imm = 0 }) 48 + 49 + /* ALU ops on immediates, bpf_add|sub|...: dst_reg += imm32 */ 50 + 51 + #define BPF_ALU64_IMM(OP, DST, IMM) \ 52 + ((struct bpf_insn) { \ 53 + .code = BPF_ALU64 | BPF_OP(OP) | BPF_K, \ 54 + .dst_reg = DST, \ 55 + .src_reg = 0, \ 56 + .off = 0, \ 57 + .imm = IMM }) 58 + 59 + #define BPF_ALU32_IMM(OP, DST, IMM) \ 60 + ((struct bpf_insn) { \ 61 + .code = BPF_ALU | BPF_OP(OP) | BPF_K, \ 62 + .dst_reg = DST, \ 63 + .src_reg = 0, \ 64 + .off = 0, \ 65 + .imm = IMM }) 66 + 67 + /* Endianess conversion, cpu_to_{l,b}e(), {l,b}e_to_cpu() */ 68 + 69 + #define BPF_ENDIAN(TYPE, DST, LEN) \ 70 + ((struct bpf_insn) { \ 71 + .code = BPF_ALU | BPF_END | BPF_SRC(TYPE), \ 72 + .dst_reg = DST, \ 73 + .src_reg = 0, \ 74 + .off = 0, \ 75 + .imm = LEN }) 76 + 77 + /* Short form of mov, dst_reg = src_reg */ 78 + 79 + #define BPF_MOV64_REG(DST, SRC) \ 80 + ((struct bpf_insn) { \ 81 + .code = BPF_ALU64 | BPF_MOV | BPF_X, \ 82 + .dst_reg = DST, \ 83 + .src_reg = SRC, \ 84 + .off = 0, \ 85 + .imm = 0 }) 86 + 87 + #define BPF_MOV32_REG(DST, SRC) \ 88 + ((struct bpf_insn) { \ 89 + .code = BPF_ALU | BPF_MOV | BPF_X, \ 90 + .dst_reg = DST, \ 91 + .src_reg = SRC, \ 92 + .off = 0, \ 93 + .imm = 0 }) 94 + 95 + /* Short form of mov, dst_reg = imm32 */ 96 + 97 + #define BPF_MOV64_IMM(DST, IMM) \ 98 + ((struct bpf_insn) { \ 99 + .code = BPF_ALU64 | BPF_MOV | BPF_K, \ 100 + .dst_reg = DST, \ 101 + .src_reg = 0, \ 102 + .off = 0, \ 103 + .imm = IMM }) 104 + 105 + #define BPF_MOV32_IMM(DST, IMM) \ 106 + ((struct bpf_insn) { \ 107 + .code = BPF_ALU | BPF_MOV | BPF_K, \ 108 + .dst_reg = DST, \ 109 + .src_reg = 0, \ 110 + .off = 0, \ 111 + .imm = IMM }) 112 + 113 + /* Short form of mov based on type, BPF_X: dst_reg = src_reg, BPF_K: dst_reg = imm32 */ 114 + 115 + #define BPF_MOV64_RAW(TYPE, DST, SRC, IMM) \ 116 + ((struct bpf_insn) { \ 117 + .code = BPF_ALU64 | BPF_MOV | BPF_SRC(TYPE), \ 118 + .dst_reg = DST, \ 119 + .src_reg = SRC, \ 120 + .off = 0, \ 121 + .imm = IMM }) 122 + 123 + #define BPF_MOV32_RAW(TYPE, DST, SRC, IMM) \ 124 + ((struct bpf_insn) { \ 125 + .code = BPF_ALU | BPF_MOV | BPF_SRC(TYPE), \ 126 + .dst_reg = DST, \ 127 + .src_reg = SRC, \ 128 + .off = 0, \ 129 + .imm = IMM }) 130 + 131 + /* Direct packet access, R0 = *(uint *) (skb->data + imm32) */ 132 + 133 + #define BPF_LD_ABS(SIZE, IMM) \ 134 + ((struct bpf_insn) { \ 135 + .code = BPF_LD | BPF_SIZE(SIZE) | BPF_ABS, \ 136 + .dst_reg = 0, \ 137 + .src_reg = 0, \ 138 + .off = 0, \ 139 + .imm = IMM }) 140 + 141 + /* Indirect packet access, R0 = *(uint *) (skb->data + src_reg + imm32) */ 142 + 143 + #define BPF_LD_IND(SIZE, SRC, IMM) \ 144 + ((struct bpf_insn) { \ 145 + .code = BPF_LD | BPF_SIZE(SIZE) | BPF_IND, \ 146 + .dst_reg = 0, \ 147 + .src_reg = SRC, \ 148 + .off = 0, \ 149 + .imm = IMM }) 150 + 151 + /* Memory load, dst_reg = *(uint *) (src_reg + off16) */ 152 + 153 + #define BPF_LDX_MEM(SIZE, DST, SRC, OFF) \ 154 + ((struct bpf_insn) { \ 155 + .code = BPF_LDX | BPF_SIZE(SIZE) | BPF_MEM, \ 156 + .dst_reg = DST, \ 157 + .src_reg = SRC, \ 158 + .off = OFF, \ 159 + .imm = 0 }) 160 + 161 + /* Memory store, *(uint *) (dst_reg + off16) = src_reg */ 162 + 163 + #define BPF_STX_MEM(SIZE, DST, SRC, OFF) \ 164 + ((struct bpf_insn) { \ 165 + .code = BPF_STX | BPF_SIZE(SIZE) | BPF_MEM, \ 166 + .dst_reg = DST, \ 167 + .src_reg = SRC, \ 168 + .off = OFF, \ 169 + .imm = 0 }) 170 + 171 + /* Memory store, *(uint *) (dst_reg + off16) = imm32 */ 172 + 173 + #define BPF_ST_MEM(SIZE, DST, OFF, IMM) \ 174 + ((struct bpf_insn) { \ 175 + .code = BPF_ST | BPF_SIZE(SIZE) | BPF_MEM, \ 176 + .dst_reg = DST, \ 177 + .src_reg = 0, \ 178 + .off = OFF, \ 179 + .imm = IMM }) 180 + 181 + /* Conditional jumps against registers, if (dst_reg 'op' src_reg) goto pc + off16 */ 182 + 183 + #define BPF_JMP_REG(OP, DST, SRC, OFF) \ 184 + ((struct bpf_insn) { \ 185 + .code = BPF_JMP | BPF_OP(OP) | BPF_X, \ 186 + .dst_reg = DST, \ 187 + .src_reg = SRC, \ 188 + .off = OFF, \ 189 + .imm = 0 }) 190 + 191 + /* Conditional jumps against immediates, if (dst_reg 'op' imm32) goto pc + off16 */ 192 + 193 + #define BPF_JMP_IMM(OP, DST, IMM, OFF) \ 194 + ((struct bpf_insn) { \ 195 + .code = BPF_JMP | BPF_OP(OP) | BPF_K, \ 196 + .dst_reg = DST, \ 197 + .src_reg = 0, \ 198 + .off = OFF, \ 199 + .imm = IMM }) 200 + 201 + /* Function call */ 202 + 203 + #define BPF_EMIT_CALL(FUNC) \ 204 + ((struct bpf_insn) { \ 205 + .code = BPF_JMP | BPF_CALL, \ 206 + .dst_reg = 0, \ 207 + .src_reg = 0, \ 208 + .off = 0, \ 209 + .imm = ((FUNC) - BPF_FUNC_unspec) }) 210 + 211 + /* Raw code statement block */ 212 + 213 + #define BPF_RAW_INSN(CODE, DST, SRC, OFF, IMM) \ 214 + ((struct bpf_insn) { \ 215 + .code = CODE, \ 216 + .dst_reg = DST, \ 217 + .src_reg = SRC, \ 218 + .off = OFF, \ 219 + .imm = IMM }) 220 + 221 + /* Program exit */ 222 + 223 + #define BPF_EXIT_INSN() \ 224 + ((struct bpf_insn) { \ 225 + .code = BPF_JMP | BPF_EXIT, \ 226 + .dst_reg = 0, \ 227 + .src_reg = 0, \ 228 + .off = 0, \ 229 + .imm = 0 }) 230 + 231 + #endif /* __TOOLS_LINUX_FILTER_H */
+1
tools/lib/api/fs/Build
··· 1 1 libapi-y += fs.o 2 + libapi-y += tracing_path.o 2 3 libapi-y += debugfs.o 3 4 libapi-y += findfs.o 4 5 libapi-y += tracefs.o
-52
tools/lib/api/fs/debugfs.c
··· 75 75 out: 76 76 return debugfs_mountpoint; 77 77 } 78 - 79 - int debugfs__strerror_open(int err, char *buf, size_t size, const char *filename) 80 - { 81 - char sbuf[128]; 82 - 83 - switch (err) { 84 - case ENOENT: 85 - if (debugfs_found) { 86 - snprintf(buf, size, 87 - "Error:\tFile %s/%s not found.\n" 88 - "Hint:\tPerhaps this kernel misses some CONFIG_ setting to enable this feature?.\n", 89 - debugfs_mountpoint, filename); 90 - break; 91 - } 92 - snprintf(buf, size, "%s", 93 - "Error:\tUnable to find debugfs\n" 94 - "Hint:\tWas your kernel compiled with debugfs support?\n" 95 - "Hint:\tIs the debugfs filesystem mounted?\n" 96 - "Hint:\tTry 'sudo mount -t debugfs nodev /sys/kernel/debug'"); 97 - break; 98 - case EACCES: { 99 - const char *mountpoint = debugfs_mountpoint; 100 - 101 - if (!access(debugfs_mountpoint, R_OK) && strncmp(filename, "tracing/", 8) == 0) { 102 - const char *tracefs_mntpoint = tracefs_find_mountpoint(); 103 - 104 - if (tracefs_mntpoint) 105 - mountpoint = tracefs_mntpoint; 106 - } 107 - 108 - snprintf(buf, size, 109 - "Error:\tNo permissions to read %s/%s\n" 110 - "Hint:\tTry 'sudo mount -o remount,mode=755 %s'\n", 111 - debugfs_mountpoint, filename, mountpoint); 112 - } 113 - break; 114 - default: 115 - snprintf(buf, size, "%s", strerror_r(err, sbuf, sizeof(sbuf))); 116 - break; 117 - } 118 - 119 - return 0; 120 - } 121 - 122 - int debugfs__strerror_open_tp(int err, char *buf, size_t size, const char *sys, const char *name) 123 - { 124 - char path[PATH_MAX]; 125 - 126 - snprintf(path, PATH_MAX, "tracing/events/%s/%s", sys, name ?: "*"); 127 - 128 - return debugfs__strerror_open(err, buf, size, path); 129 - }
+107 -10
tools/lib/api/fs/fs.c
··· 1 - /* TODO merge/factor in debugfs.c here */ 2 - 3 1 #include <ctype.h> 4 2 #include <errno.h> 5 3 #include <stdbool.h> ··· 9 11 #include <sys/stat.h> 10 12 #include <fcntl.h> 11 13 #include <unistd.h> 14 + #include <sys/mount.h> 12 15 13 16 #include "debugfs.h" 14 17 #include "fs.h" 18 + 19 + #define _STR(x) #x 20 + #define STR(x) _STR(x) 21 + 22 + #ifndef SYSFS_MAGIC 23 + #define SYSFS_MAGIC 0x62656572 24 + #endif 25 + 26 + #ifndef PROC_SUPER_MAGIC 27 + #define PROC_SUPER_MAGIC 0x9fa0 28 + #endif 29 + 30 + #ifndef DEBUGFS_MAGIC 31 + #define DEBUGFS_MAGIC 0x64626720 32 + #endif 33 + 34 + #ifndef TRACEFS_MAGIC 35 + #define TRACEFS_MAGIC 0x74726163 36 + #endif 15 37 16 38 static const char * const sysfs__fs_known_mountpoints[] = { 17 39 "/sys", ··· 40 22 41 23 static const char * const procfs__known_mountpoints[] = { 42 24 "/proc", 25 + 0, 26 + }; 27 + 28 + #ifndef DEBUGFS_DEFAULT_PATH 29 + #define DEBUGFS_DEFAULT_PATH "/sys/kernel/debug" 30 + #endif 31 + 32 + static const char * const debugfs__known_mountpoints[] = { 33 + DEBUGFS_DEFAULT_PATH, 34 + "/debug", 35 + 0, 36 + }; 37 + 38 + 39 + #ifndef TRACEFS_DEFAULT_PATH 40 + #define TRACEFS_DEFAULT_PATH "/sys/kernel/tracing" 41 + #endif 42 + 43 + static const char * const tracefs__known_mountpoints[] = { 44 + TRACEFS_DEFAULT_PATH, 45 + "/sys/kernel/debug/tracing", 46 + "/tracing", 47 + "/trace", 43 48 0, 44 49 }; 45 50 ··· 75 34 }; 76 35 77 36 enum { 78 - FS__SYSFS = 0, 79 - FS__PROCFS = 1, 37 + FS__SYSFS = 0, 38 + FS__PROCFS = 1, 39 + FS__DEBUGFS = 2, 40 + FS__TRACEFS = 3, 80 41 }; 42 + 43 + #ifndef TRACEFS_MAGIC 44 + #define TRACEFS_MAGIC 0x74726163 45 + #endif 81 46 82 47 static struct fs fs__entries[] = { 83 48 [FS__SYSFS] = { ··· 95 48 .name = "proc", 96 49 .mounts = procfs__known_mountpoints, 97 50 .magic = PROC_SUPER_MAGIC, 51 + }, 52 + [FS__DEBUGFS] = { 53 + .name = "debugfs", 54 + .mounts = debugfs__known_mountpoints, 55 + .magic = DEBUGFS_MAGIC, 56 + }, 57 + [FS__TRACEFS] = { 58 + .name = "tracefs", 59 + .mounts = tracefs__known_mountpoints, 60 + .magic = TRACEFS_MAGIC, 98 61 }, 99 62 }; 100 63 ··· 216 159 return fs__get_mountpoint(fs); 217 160 } 218 161 219 - #define FS__MOUNTPOINT(name, idx) \ 220 - const char *name##__mountpoint(void) \ 221 - { \ 222 - return fs__mountpoint(idx); \ 162 + static const char *mount_overload(struct fs *fs) 163 + { 164 + size_t name_len = strlen(fs->name); 165 + /* "PERF_" + name + "_ENVIRONMENT" + '\0' */ 166 + char upper_name[5 + name_len + 12 + 1]; 167 + 168 + snprintf(upper_name, name_len, "PERF_%s_ENVIRONMENT", fs->name); 169 + mem_toupper(upper_name, name_len); 170 + 171 + return getenv(upper_name) ?: *fs->mounts; 223 172 } 224 173 225 - FS__MOUNTPOINT(sysfs, FS__SYSFS); 226 - FS__MOUNTPOINT(procfs, FS__PROCFS); 174 + static const char *fs__mount(int idx) 175 + { 176 + struct fs *fs = &fs__entries[idx]; 177 + const char *mountpoint; 178 + 179 + if (fs__mountpoint(idx)) 180 + return (const char *)fs->path; 181 + 182 + mountpoint = mount_overload(fs); 183 + 184 + if (mount(NULL, mountpoint, fs->name, 0, NULL) < 0) 185 + return NULL; 186 + 187 + return fs__check_mounts(fs) ? fs->path : NULL; 188 + } 189 + 190 + #define FS(name, idx) \ 191 + const char *name##__mountpoint(void) \ 192 + { \ 193 + return fs__mountpoint(idx); \ 194 + } \ 195 + \ 196 + const char *name##__mount(void) \ 197 + { \ 198 + return fs__mount(idx); \ 199 + } \ 200 + \ 201 + bool name##__configured(void) \ 202 + { \ 203 + return name##__mountpoint() != NULL; \ 204 + } 205 + 206 + FS(sysfs, FS__SYSFS); 207 + FS(procfs, FS__PROCFS); 208 + FS(debugfs, FS__DEBUGFS); 209 + FS(tracefs, FS__TRACEFS); 227 210 228 211 int filename__read_int(const char *filename, int *value) 229 212 {
+19 -7
tools/lib/api/fs/fs.h
··· 1 1 #ifndef __API_FS__ 2 2 #define __API_FS__ 3 3 4 - #ifndef SYSFS_MAGIC 5 - #define SYSFS_MAGIC 0x62656572 4 + #include <stdbool.h> 5 + 6 + /* 7 + * On most systems <limits.h> would have given us this, but not on some systems 8 + * (e.g. GNU/Hurd). 9 + */ 10 + #ifndef PATH_MAX 11 + #define PATH_MAX 4096 6 12 #endif 7 13 8 - #ifndef PROC_SUPER_MAGIC 9 - #define PROC_SUPER_MAGIC 0x9fa0 10 - #endif 14 + #define FS(name) \ 15 + const char *name##__mountpoint(void); \ 16 + const char *name##__mount(void); \ 17 + bool name##__configured(void); \ 11 18 12 - const char *sysfs__mountpoint(void); 13 - const char *procfs__mountpoint(void); 19 + FS(sysfs) 20 + FS(procfs) 21 + FS(debugfs) 22 + FS(tracefs) 23 + 24 + #undef FS 25 + 14 26 15 27 int filename__read_int(const char *filename, int *value); 16 28 int sysctl__read_int(const char *sysctl, int *value);
+137
tools/lib/api/fs/tracing_path.c
··· 1 + #ifndef _GNU_SOURCE 2 + # define _GNU_SOURCE 3 + #endif 4 + 5 + #include <stdio.h> 6 + #include <stdlib.h> 7 + #include <string.h> 8 + #include <errno.h> 9 + #include <unistd.h> 10 + #include "debugfs.h" 11 + #include "tracefs.h" 12 + 13 + #include "tracing_path.h" 14 + 15 + 16 + char tracing_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing"; 17 + char tracing_events_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing/events"; 18 + 19 + 20 + static void __tracing_path_set(const char *tracing, const char *mountpoint) 21 + { 22 + snprintf(tracing_path, sizeof(tracing_path), "%s/%s", 23 + mountpoint, tracing); 24 + snprintf(tracing_events_path, sizeof(tracing_events_path), "%s/%s%s", 25 + mountpoint, tracing, "events"); 26 + } 27 + 28 + static const char *tracing_path_tracefs_mount(void) 29 + { 30 + const char *mnt; 31 + 32 + mnt = tracefs_mount(NULL); 33 + if (!mnt) 34 + return NULL; 35 + 36 + __tracing_path_set("", mnt); 37 + 38 + return mnt; 39 + } 40 + 41 + static const char *tracing_path_debugfs_mount(void) 42 + { 43 + const char *mnt; 44 + 45 + mnt = debugfs_mount(NULL); 46 + if (!mnt) 47 + return NULL; 48 + 49 + __tracing_path_set("tracing/", mnt); 50 + 51 + return mnt; 52 + } 53 + 54 + const char *tracing_path_mount(void) 55 + { 56 + const char *mnt; 57 + 58 + mnt = tracing_path_tracefs_mount(); 59 + if (mnt) 60 + return mnt; 61 + 62 + mnt = tracing_path_debugfs_mount(); 63 + 64 + return mnt; 65 + } 66 + 67 + void tracing_path_set(const char *mntpt) 68 + { 69 + __tracing_path_set("tracing/", mntpt); 70 + } 71 + 72 + char *get_tracing_file(const char *name) 73 + { 74 + char *file; 75 + 76 + if (asprintf(&file, "%s/%s", tracing_path, name) < 0) 77 + return NULL; 78 + 79 + return file; 80 + } 81 + 82 + void put_tracing_file(char *file) 83 + { 84 + free(file); 85 + } 86 + 87 + static int strerror_open(int err, char *buf, size_t size, const char *filename) 88 + { 89 + char sbuf[128]; 90 + 91 + switch (err) { 92 + case ENOENT: 93 + if (debugfs_configured()) { 94 + snprintf(buf, size, 95 + "Error:\tFile %s/%s not found.\n" 96 + "Hint:\tPerhaps this kernel misses some CONFIG_ setting to enable this feature?.\n", 97 + debugfs_mountpoint, filename); 98 + break; 99 + } 100 + snprintf(buf, size, "%s", 101 + "Error:\tUnable to find debugfs\n" 102 + "Hint:\tWas your kernel compiled with debugfs support?\n" 103 + "Hint:\tIs the debugfs filesystem mounted?\n" 104 + "Hint:\tTry 'sudo mount -t debugfs nodev /sys/kernel/debug'"); 105 + break; 106 + case EACCES: { 107 + const char *mountpoint = debugfs_mountpoint; 108 + 109 + if (!access(debugfs_mountpoint, R_OK) && strncmp(filename, "tracing/", 8) == 0) { 110 + const char *tracefs_mntpoint = tracefs_find_mountpoint(); 111 + 112 + if (tracefs_mntpoint) 113 + mountpoint = tracefs_mntpoint; 114 + } 115 + 116 + snprintf(buf, size, 117 + "Error:\tNo permissions to read %s/%s\n" 118 + "Hint:\tTry 'sudo mount -o remount,mode=755 %s'\n", 119 + debugfs_mountpoint, filename, mountpoint); 120 + } 121 + break; 122 + default: 123 + snprintf(buf, size, "%s", strerror_r(err, sbuf, sizeof(sbuf))); 124 + break; 125 + } 126 + 127 + return 0; 128 + } 129 + 130 + int tracing_path__strerror_open_tp(int err, char *buf, size_t size, const char *sys, const char *name) 131 + { 132 + char path[PATH_MAX]; 133 + 134 + snprintf(path, PATH_MAX, "tracing/events/%s/%s", sys, name ?: "*"); 135 + 136 + return strerror_open(err, buf, size, path); 137 + }
+16
tools/lib/api/fs/tracing_path.h
··· 1 + #ifndef __API_FS_TRACING_PATH_H 2 + #define __API_FS_TRACING_PATH_H 3 + 4 + #include <linux/types.h> 5 + 6 + extern char tracing_path[]; 7 + extern char tracing_events_path[]; 8 + 9 + void tracing_path_set(const char *mountpoint); 10 + const char *tracing_path_mount(void); 11 + 12 + char *get_tracing_file(const char *name); 13 + void put_tracing_file(char *file); 14 + 15 + int tracing_path__strerror_open_tp(int err, char *buf, size_t size, const char *sys, const char *name); 16 + #endif /* __API_FS_TRACING_PATH_H */
+54 -2
tools/lib/traceevent/event-parse.c
··· 848 848 free(arg->bitmask.bitmask); 849 849 break; 850 850 case PRINT_DYNAMIC_ARRAY: 851 + case PRINT_DYNAMIC_ARRAY_LEN: 851 852 free(arg->dynarray.index); 852 853 break; 853 854 case PRINT_OP: ··· 2730 2729 } 2731 2730 2732 2731 static enum event_type 2732 + process_dynamic_array_len(struct event_format *event, struct print_arg *arg, 2733 + char **tok) 2734 + { 2735 + struct format_field *field; 2736 + enum event_type type; 2737 + char *token; 2738 + 2739 + if (read_expect_type(EVENT_ITEM, &token) < 0) 2740 + goto out_free; 2741 + 2742 + arg->type = PRINT_DYNAMIC_ARRAY_LEN; 2743 + 2744 + /* Find the field */ 2745 + field = pevent_find_field(event, token); 2746 + if (!field) 2747 + goto out_free; 2748 + 2749 + arg->dynarray.field = field; 2750 + arg->dynarray.index = 0; 2751 + 2752 + if (read_expected(EVENT_DELIM, ")") < 0) 2753 + goto out_err; 2754 + 2755 + type = read_token(&token); 2756 + *tok = token; 2757 + 2758 + return type; 2759 + 2760 + out_free: 2761 + free_token(token); 2762 + out_err: 2763 + *tok = NULL; 2764 + return EVENT_ERROR; 2765 + } 2766 + 2767 + static enum event_type 2733 2768 process_paren(struct event_format *event, struct print_arg *arg, char **tok) 2734 2769 { 2735 2770 struct print_arg *item_arg; ··· 3011 2974 if (strcmp(token, "__get_dynamic_array") == 0) { 3012 2975 free_token(token); 3013 2976 return process_dynamic_array(event, arg, tok); 2977 + } 2978 + if (strcmp(token, "__get_dynamic_array_len") == 0) { 2979 + free_token(token); 2980 + return process_dynamic_array_len(event, arg, tok); 3014 2981 } 3015 2982 3016 2983 func = find_func_handler(event->pevent, token); ··· 3696 3655 goto out_warning_op; 3697 3656 } 3698 3657 break; 3658 + case PRINT_DYNAMIC_ARRAY_LEN: 3659 + offset = pevent_read_number(pevent, 3660 + data + arg->dynarray.field->offset, 3661 + arg->dynarray.field->size); 3662 + /* 3663 + * The total allocated length of the dynamic array is 3664 + * stored in the top half of the field, and the offset 3665 + * is in the bottom half of the 32 bit field. 3666 + */ 3667 + val = (unsigned long long)(offset >> 16); 3668 + break; 3699 3669 case PRINT_DYNAMIC_ARRAY: 3700 3670 /* Without [], we pass the address to the dynamic data */ 3701 3671 offset = pevent_read_number(pevent, 3702 3672 data + arg->dynarray.field->offset, 3703 3673 arg->dynarray.field->size); 3704 3674 /* 3705 - * The actual length of the dynamic array is stored 3706 - * in the top half of the field, and the offset 3675 + * The total allocated length of the dynamic array is 3676 + * stored in the top half of the field, and the offset 3707 3677 * is in the bottom half of the 32 bit field. 3708 3678 */ 3709 3679 offset &= 0xffff;
+1
tools/lib/traceevent/event-parse.h
··· 294 294 PRINT_OP, 295 295 PRINT_FUNC, 296 296 PRINT_BITMASK, 297 + PRINT_DYNAMIC_ARRAY_LEN, 297 298 }; 298 299 299 300 struct print_arg {
+1
tools/perf/MANIFEST
··· 41 41 tools/include/linux/atomic.h 42 42 tools/include/linux/bitops.h 43 43 tools/include/linux/compiler.h 44 + tools/include/linux/filter.h 44 45 tools/include/linux/hash.h 45 46 tools/include/linux/kernel.h 46 47 tools/include/linux/list.h
+47 -8
tools/perf/arch/x86/util/intel-pt.c
··· 624 624 * threads. 625 625 */ 626 626 if (have_timing_info && !cpu_map__empty(cpus)) { 627 - err = intel_pt_track_switches(evlist); 628 - if (err == -EPERM) 629 - pr_debug2("Unable to select sched:sched_switch\n"); 630 - else if (err) 631 - return err; 632 - else 633 - ptr->have_sched_switch = 1; 627 + if (perf_can_record_switch_events()) { 628 + bool cpu_wide = !target__none(&opts->target) && 629 + !target__has_task(&opts->target); 630 + 631 + if (!cpu_wide && perf_can_record_cpu_wide()) { 632 + struct perf_evsel *switch_evsel; 633 + 634 + err = parse_events(evlist, "dummy:u", NULL); 635 + if (err) 636 + return err; 637 + 638 + switch_evsel = perf_evlist__last(evlist); 639 + 640 + switch_evsel->attr.freq = 0; 641 + switch_evsel->attr.sample_period = 1; 642 + switch_evsel->attr.context_switch = 1; 643 + 644 + switch_evsel->system_wide = true; 645 + switch_evsel->no_aux_samples = true; 646 + switch_evsel->immediate = true; 647 + 648 + perf_evsel__set_sample_bit(switch_evsel, TID); 649 + perf_evsel__set_sample_bit(switch_evsel, TIME); 650 + perf_evsel__set_sample_bit(switch_evsel, CPU); 651 + 652 + opts->record_switch_events = false; 653 + ptr->have_sched_switch = 3; 654 + } else { 655 + opts->record_switch_events = true; 656 + if (cpu_wide) 657 + ptr->have_sched_switch = 3; 658 + else 659 + ptr->have_sched_switch = 2; 660 + } 661 + } else { 662 + err = intel_pt_track_switches(evlist); 663 + if (err == -EPERM) 664 + pr_debug2("Unable to select sched:sched_switch\n"); 665 + else if (err) 666 + return err; 667 + else 668 + ptr->have_sched_switch = 1; 669 + } 634 670 } 635 671 636 672 if (intel_pt_evsel) { ··· 699 663 tracking_evsel->attr.sample_period = 1; 700 664 701 665 /* In per-cpu case, always need the time of mmap events etc */ 702 - if (!cpu_map__empty(cpus)) 666 + if (!cpu_map__empty(cpus)) { 703 667 perf_evsel__set_sample_bit(tracking_evsel, TIME); 668 + /* And the CPU for switch events */ 669 + perf_evsel__set_sample_bit(tracking_evsel, CPU); 670 + } 704 671 } 705 672 706 673 /*
+108 -2
tools/perf/builtin-probe.c
··· 41 41 #include "util/parse-options.h" 42 42 #include "util/probe-finder.h" 43 43 #include "util/probe-event.h" 44 + #include "util/probe-file.h" 44 45 45 46 #define DEFAULT_VAR_FILTER "!__k???tab_* & !__crc_*" 46 47 #define DEFAULT_FUNC_FILTER "!_*" ··· 312 311 pr_err("\n"); 313 312 } 314 313 314 + static int perf_add_probe_events(struct perf_probe_event *pevs, int npevs) 315 + { 316 + int ret; 317 + int i, k; 318 + const char *event = NULL, *group = NULL; 319 + 320 + ret = convert_perf_probe_events(pevs, npevs); 321 + if (ret < 0) 322 + goto out_cleanup; 323 + 324 + ret = apply_perf_probe_events(pevs, npevs); 325 + if (ret < 0) 326 + goto out_cleanup; 327 + 328 + for (i = k = 0; i < npevs; i++) 329 + k += pevs[i].ntevs; 330 + 331 + pr_info("Added new event%s\n", (k > 1) ? "s:" : ":"); 332 + for (i = 0; i < npevs; i++) { 333 + struct perf_probe_event *pev = &pevs[i]; 334 + 335 + for (k = 0; k < pev->ntevs; k++) { 336 + struct probe_trace_event *tev = &pev->tevs[k]; 337 + 338 + /* We use tev's name for showing new events */ 339 + show_perf_probe_event(tev->group, tev->event, pev, 340 + tev->point.module, false); 341 + 342 + /* Save the last valid name */ 343 + event = tev->event; 344 + group = tev->group; 345 + } 346 + } 347 + 348 + /* Note that it is possible to skip all events because of blacklist */ 349 + if (event) { 350 + /* Show how to use the event. */ 351 + pr_info("\nYou can now use it in all perf tools, such as:\n\n"); 352 + pr_info("\tperf record -e %s:%s -aR sleep 1\n\n", group, event); 353 + } 354 + 355 + out_cleanup: 356 + cleanup_perf_probe_events(pevs, npevs); 357 + return ret; 358 + } 359 + 360 + static int perf_del_probe_events(struct strfilter *filter) 361 + { 362 + int ret, ret2, ufd = -1, kfd = -1; 363 + char *str = strfilter__string(filter); 364 + struct strlist *klist = NULL, *ulist = NULL; 365 + struct str_node *ent; 366 + 367 + if (!str) 368 + return -EINVAL; 369 + 370 + pr_debug("Delete filter: \'%s\'\n", str); 371 + 372 + /* Get current event names */ 373 + ret = probe_file__open_both(&kfd, &ufd, PF_FL_RW); 374 + if (ret < 0) 375 + goto out; 376 + 377 + klist = strlist__new(NULL, NULL); 378 + if (!klist) 379 + return -ENOMEM; 380 + 381 + ret = probe_file__get_events(kfd, filter, klist); 382 + if (ret == 0) { 383 + strlist__for_each(ent, klist) 384 + pr_info("Removed event: %s\n", ent->s); 385 + 386 + ret = probe_file__del_strlist(kfd, klist); 387 + if (ret < 0) 388 + goto error; 389 + } 390 + 391 + ret2 = probe_file__get_events(ufd, filter, ulist); 392 + if (ret2 == 0) { 393 + strlist__for_each(ent, ulist) 394 + pr_info("Removed event: %s\n", ent->s); 395 + 396 + ret2 = probe_file__del_strlist(ufd, ulist); 397 + if (ret2 < 0) 398 + goto error; 399 + } 400 + 401 + if (ret == -ENOENT && ret2 == -ENOENT) 402 + pr_debug("\"%s\" does not hit any event.\n", str); 403 + /* Note that this is silently ignored */ 404 + ret = 0; 405 + 406 + error: 407 + if (kfd >= 0) 408 + close(kfd); 409 + if (ufd >= 0) 410 + close(ufd); 411 + out: 412 + strlist__delete(klist); 413 + strlist__delete(ulist); 414 + free(str); 415 + 416 + return ret; 417 + } 418 + 315 419 static int 316 420 __cmd_probe(int argc, const char **argv, const char *prefix __maybe_unused) 317 421 { ··· 589 483 return ret; 590 484 #endif 591 485 case 'd': 592 - ret = del_perf_probe_events(params.filter); 486 + ret = perf_del_probe_events(params.filter); 593 487 if (ret < 0) { 594 488 pr_err_with_code(" Error: Failed to delete events.", ret); 595 489 return ret; ··· 602 496 usage_with_options(probe_usage, options); 603 497 } 604 498 605 - ret = add_perf_probe_events(params.events, params.nevents); 499 + ret = perf_add_probe_events(params.events, params.nevents); 606 500 if (ret < 0) { 607 501 pr_err_with_code(" Error: Failed to add events.", ret); 608 502 return ret;
+1 -1
tools/perf/builtin-stat.c
··· 215 215 216 216 evlist__for_each(evsel_list, counter) { 217 217 if (read_counter(counter)) 218 - pr_warning("failed to read counter %s\n", counter->name); 218 + pr_debug("failed to read counter %s\n", counter->name); 219 219 220 220 if (perf_stat_process_counter(&stat_config, counter)) 221 221 pr_warning("failed to process counter %s\n", counter->name);
+3 -2
tools/perf/builtin-trace.c
··· 17 17 */ 18 18 19 19 #include <traceevent/event-parse.h> 20 + #include <api/fs/tracing_path.h> 20 21 #include "builtin.h" 21 22 #include "util/color.h" 22 23 #include "util/debug.h" ··· 2687 2686 char errbuf[BUFSIZ]; 2688 2687 2689 2688 out_error_sched_stat_runtime: 2690 - debugfs__strerror_open_tp(errno, errbuf, sizeof(errbuf), "sched", "sched_stat_runtime"); 2689 + tracing_path__strerror_open_tp(errno, errbuf, sizeof(errbuf), "sched", "sched_stat_runtime"); 2691 2690 goto out_error; 2692 2691 2693 2692 out_error_raw_syscalls: 2694 - debugfs__strerror_open_tp(errno, errbuf, sizeof(errbuf), "raw_syscalls", "sys_(enter|exit)"); 2693 + tracing_path__strerror_open_tp(errno, errbuf, sizeof(errbuf), "raw_syscalls", "sys_(enter|exit)"); 2695 2694 goto out_error; 2696 2695 2697 2696 out_error_mmap:
+7 -5
tools/perf/perf.c
··· 15 15 #include "util/parse-events.h" 16 16 #include "util/parse-options.h" 17 17 #include "util/debug.h" 18 - #include <api/fs/debugfs.h> 18 + #include <api/fs/tracing_path.h> 19 19 #include <pthread.h> 20 20 21 21 const char perf_usage_string[] = ··· 214 214 fprintf(stderr, "No directory given for --debugfs-dir.\n"); 215 215 usage(perf_usage_string); 216 216 } 217 - perf_debugfs_set_path((*argv)[1]); 217 + tracing_path_set((*argv)[1]); 218 218 if (envchanged) 219 219 *envchanged = 1; 220 220 (*argv)++; ··· 230 230 (*argv)++; 231 231 (*argc)--; 232 232 } else if (!prefixcmp(cmd, CMD_DEBUGFS_DIR)) { 233 - perf_debugfs_set_path(cmd + strlen(CMD_DEBUGFS_DIR)); 233 + tracing_path_set(cmd + strlen(CMD_DEBUGFS_DIR)); 234 234 fprintf(stderr, "dir: %s\n", tracing_path); 235 235 if (envchanged) 236 236 *envchanged = 1; ··· 517 517 cmd = perf_extract_argv0_path(argv[0]); 518 518 if (!cmd) 519 519 cmd = "perf-help"; 520 - /* get debugfs mount point from /proc/mounts */ 521 - perf_debugfs_mount(NULL); 520 + 521 + /* get debugfs/tracefs mount point from /proc/mounts */ 522 + tracing_path_mount(); 523 + 522 524 /* 523 525 * "perf-xxxx" is the same as "perf xxxx", but we obviously: 524 526 *
+3
tools/perf/tests/Build
··· 35 35 perf-y += llvm.o 36 36 37 37 perf-$(CONFIG_X86) += perf-time-to-tsc.o 38 + ifdef CONFIG_AUXTRACE 39 + perf-$(CONFIG_X86) += insn-x86.o 40 + endif 38 41 39 42 ifeq ($(ARCH),$(filter $(ARCH),x86 arm arm64)) 40 43 perf-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
+8
tools/perf/tests/builtin-test.c
··· 178 178 .desc = "Test LLVM searching and compiling", 179 179 .func = test__llvm, 180 180 }, 181 + #ifdef HAVE_AUXTRACE_SUPPORT 182 + #if defined(__x86_64__) || defined(__i386__) 183 + { 184 + .desc = "Test x86 instruction decoder - new instructions", 185 + .func = test__insn_x86, 186 + }, 187 + #endif 188 + #endif 181 189 { 182 190 .func = NULL, 183 191 },
+75
tools/perf/tests/gen-insn-x86-dat.awk
··· 1 + #!/bin/awk -f 2 + # gen-insn-x86-dat.awk: script to convert data for the insn-x86 test 3 + # Copyright (c) 2015, Intel Corporation. 4 + # 5 + # This program is free software; you can redistribute it and/or modify it 6 + # under the terms and conditions of the GNU General Public License, 7 + # version 2, as published by the Free Software Foundation. 8 + # 9 + # This program is distributed in the hope it will be useful, but WITHOUT 10 + # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 + # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 + # more details. 13 + 14 + BEGIN { 15 + print "/*" 16 + print " * Generated by gen-insn-x86-dat.sh and gen-insn-x86-dat.awk" 17 + print " * from insn-x86-dat-src.c for inclusion by insn-x86.c" 18 + print " * Do not change this code." 19 + print "*/\n" 20 + op = "" 21 + branch = "" 22 + rel = 0 23 + going = 0 24 + } 25 + 26 + / Start here / { 27 + going = 1 28 + } 29 + 30 + / Stop here / { 31 + going = 0 32 + } 33 + 34 + /^\s*[0-9a-fA-F]+\:/ { 35 + if (going) { 36 + colon_pos = index($0, ":") 37 + useful_line = substr($0, colon_pos + 1) 38 + first_pos = match(useful_line, "[0-9a-fA-F]") 39 + useful_line = substr(useful_line, first_pos) 40 + gsub("\t", "\\t", useful_line) 41 + printf "{{" 42 + len = 0 43 + for (i = 2; i <= NF; i++) { 44 + if (match($i, "^[0-9a-fA-F][0-9a-fA-F]$")) { 45 + printf "0x%s, ", $i 46 + len += 1 47 + } else { 48 + break 49 + } 50 + } 51 + printf "}, %d, %s, \"%s\", \"%s\",", len, rel, op, branch 52 + printf "\n\"%s\",},\n", useful_line 53 + op = "" 54 + branch = "" 55 + rel = 0 56 + } 57 + } 58 + 59 + / Expecting: / { 60 + expecting_str = " Expecting: " 61 + expecting_len = length(expecting_str) 62 + expecting_pos = index($0, expecting_str) 63 + useful_line = substr($0, expecting_pos + expecting_len) 64 + for (i = 1; i <= NF; i++) { 65 + if ($i == "Expecting:") { 66 + i++ 67 + op = $i 68 + i++ 69 + branch = $i 70 + i++ 71 + rel = $i 72 + break 73 + } 74 + } 75 + }
+43
tools/perf/tests/gen-insn-x86-dat.sh
··· 1 + #!/bin/sh 2 + # gen-insn-x86-dat: generate data for the insn-x86 test 3 + # Copyright (c) 2015, Intel Corporation. 4 + # 5 + # This program is free software; you can redistribute it and/or modify it 6 + # under the terms and conditions of the GNU General Public License, 7 + # version 2, as published by the Free Software Foundation. 8 + # 9 + # This program is distributed in the hope it will be useful, but WITHOUT 10 + # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 + # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 12 + # more details. 13 + 14 + set -e 15 + 16 + if [ "$(uname -m)" != "x86_64" ]; then 17 + echo "ERROR: This script only works on x86_64" 18 + exit 1 19 + fi 20 + 21 + cd $(dirname $0) 22 + 23 + trap 'echo "Might need a more recent version of binutils"' EXIT 24 + 25 + echo "Compiling insn-x86-dat-src.c to 64-bit object" 26 + 27 + gcc -g -c insn-x86-dat-src.c 28 + 29 + objdump -dSw insn-x86-dat-src.o | awk -f gen-insn-x86-dat.awk > insn-x86-dat-64.c 30 + 31 + rm -f insn-x86-dat-src.o 32 + 33 + echo "Compiling insn-x86-dat-src.c to 32-bit object" 34 + 35 + gcc -g -c -m32 insn-x86-dat-src.c 36 + 37 + objdump -dSw insn-x86-dat-src.o | awk -f gen-insn-x86-dat.awk > insn-x86-dat-32.c 38 + 39 + rm -f insn-x86-dat-src.o 40 + 41 + trap - EXIT 42 + 43 + echo "Done (use git diff to see the changes)"
+658
tools/perf/tests/insn-x86-dat-32.c
··· 1 + /* 2 + * Generated by gen-insn-x86-dat.sh and gen-insn-x86-dat.awk 3 + * from insn-x86-dat-src.c for inclusion by insn-x86.c 4 + * Do not change this code. 5 + */ 6 + 7 + {{0x0f, 0x31, }, 2, 0, "", "", 8 + "0f 31 \trdtsc ",}, 9 + {{0xf3, 0x0f, 0x1b, 0x00, }, 4, 0, "", "", 10 + "f3 0f 1b 00 \tbndmk (%eax),%bnd0",}, 11 + {{0xf3, 0x0f, 0x1b, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 12 + "f3 0f 1b 05 78 56 34 12 \tbndmk 0x12345678,%bnd0",}, 13 + {{0xf3, 0x0f, 0x1b, 0x18, }, 4, 0, "", "", 14 + "f3 0f 1b 18 \tbndmk (%eax),%bnd3",}, 15 + {{0xf3, 0x0f, 0x1b, 0x04, 0x01, }, 5, 0, "", "", 16 + "f3 0f 1b 04 01 \tbndmk (%ecx,%eax,1),%bnd0",}, 17 + {{0xf3, 0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 18 + "f3 0f 1b 04 05 78 56 34 12 \tbndmk 0x12345678(,%eax,1),%bnd0",}, 19 + {{0xf3, 0x0f, 0x1b, 0x04, 0x08, }, 5, 0, "", "", 20 + "f3 0f 1b 04 08 \tbndmk (%eax,%ecx,1),%bnd0",}, 21 + {{0xf3, 0x0f, 0x1b, 0x04, 0xc8, }, 5, 0, "", "", 22 + "f3 0f 1b 04 c8 \tbndmk (%eax,%ecx,8),%bnd0",}, 23 + {{0xf3, 0x0f, 0x1b, 0x40, 0x12, }, 5, 0, "", "", 24 + "f3 0f 1b 40 12 \tbndmk 0x12(%eax),%bnd0",}, 25 + {{0xf3, 0x0f, 0x1b, 0x45, 0x12, }, 5, 0, "", "", 26 + "f3 0f 1b 45 12 \tbndmk 0x12(%ebp),%bnd0",}, 27 + {{0xf3, 0x0f, 0x1b, 0x44, 0x01, 0x12, }, 6, 0, "", "", 28 + "f3 0f 1b 44 01 12 \tbndmk 0x12(%ecx,%eax,1),%bnd0",}, 29 + {{0xf3, 0x0f, 0x1b, 0x44, 0x05, 0x12, }, 6, 0, "", "", 30 + "f3 0f 1b 44 05 12 \tbndmk 0x12(%ebp,%eax,1),%bnd0",}, 31 + {{0xf3, 0x0f, 0x1b, 0x44, 0x08, 0x12, }, 6, 0, "", "", 32 + "f3 0f 1b 44 08 12 \tbndmk 0x12(%eax,%ecx,1),%bnd0",}, 33 + {{0xf3, 0x0f, 0x1b, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 34 + "f3 0f 1b 44 c8 12 \tbndmk 0x12(%eax,%ecx,8),%bnd0",}, 35 + {{0xf3, 0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 36 + "f3 0f 1b 80 78 56 34 12 \tbndmk 0x12345678(%eax),%bnd0",}, 37 + {{0xf3, 0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 38 + "f3 0f 1b 85 78 56 34 12 \tbndmk 0x12345678(%ebp),%bnd0",}, 39 + {{0xf3, 0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 40 + "f3 0f 1b 84 01 78 56 34 12 \tbndmk 0x12345678(%ecx,%eax,1),%bnd0",}, 41 + {{0xf3, 0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 42 + "f3 0f 1b 84 05 78 56 34 12 \tbndmk 0x12345678(%ebp,%eax,1),%bnd0",}, 43 + {{0xf3, 0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 44 + "f3 0f 1b 84 08 78 56 34 12 \tbndmk 0x12345678(%eax,%ecx,1),%bnd0",}, 45 + {{0xf3, 0x0f, 0x1b, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 46 + "f3 0f 1b 84 c8 78 56 34 12 \tbndmk 0x12345678(%eax,%ecx,8),%bnd0",}, 47 + {{0xf3, 0x0f, 0x1a, 0x00, }, 4, 0, "", "", 48 + "f3 0f 1a 00 \tbndcl (%eax),%bnd0",}, 49 + {{0xf3, 0x0f, 0x1a, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 50 + "f3 0f 1a 05 78 56 34 12 \tbndcl 0x12345678,%bnd0",}, 51 + {{0xf3, 0x0f, 0x1a, 0x18, }, 4, 0, "", "", 52 + "f3 0f 1a 18 \tbndcl (%eax),%bnd3",}, 53 + {{0xf3, 0x0f, 0x1a, 0x04, 0x01, }, 5, 0, "", "", 54 + "f3 0f 1a 04 01 \tbndcl (%ecx,%eax,1),%bnd0",}, 55 + {{0xf3, 0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 56 + "f3 0f 1a 04 05 78 56 34 12 \tbndcl 0x12345678(,%eax,1),%bnd0",}, 57 + {{0xf3, 0x0f, 0x1a, 0x04, 0x08, }, 5, 0, "", "", 58 + "f3 0f 1a 04 08 \tbndcl (%eax,%ecx,1),%bnd0",}, 59 + {{0xf3, 0x0f, 0x1a, 0x04, 0xc8, }, 5, 0, "", "", 60 + "f3 0f 1a 04 c8 \tbndcl (%eax,%ecx,8),%bnd0",}, 61 + {{0xf3, 0x0f, 0x1a, 0x40, 0x12, }, 5, 0, "", "", 62 + "f3 0f 1a 40 12 \tbndcl 0x12(%eax),%bnd0",}, 63 + {{0xf3, 0x0f, 0x1a, 0x45, 0x12, }, 5, 0, "", "", 64 + "f3 0f 1a 45 12 \tbndcl 0x12(%ebp),%bnd0",}, 65 + {{0xf3, 0x0f, 0x1a, 0x44, 0x01, 0x12, }, 6, 0, "", "", 66 + "f3 0f 1a 44 01 12 \tbndcl 0x12(%ecx,%eax,1),%bnd0",}, 67 + {{0xf3, 0x0f, 0x1a, 0x44, 0x05, 0x12, }, 6, 0, "", "", 68 + "f3 0f 1a 44 05 12 \tbndcl 0x12(%ebp,%eax,1),%bnd0",}, 69 + {{0xf3, 0x0f, 0x1a, 0x44, 0x08, 0x12, }, 6, 0, "", "", 70 + "f3 0f 1a 44 08 12 \tbndcl 0x12(%eax,%ecx,1),%bnd0",}, 71 + {{0xf3, 0x0f, 0x1a, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 72 + "f3 0f 1a 44 c8 12 \tbndcl 0x12(%eax,%ecx,8),%bnd0",}, 73 + {{0xf3, 0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 74 + "f3 0f 1a 80 78 56 34 12 \tbndcl 0x12345678(%eax),%bnd0",}, 75 + {{0xf3, 0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 76 + "f3 0f 1a 85 78 56 34 12 \tbndcl 0x12345678(%ebp),%bnd0",}, 77 + {{0xf3, 0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 78 + "f3 0f 1a 84 01 78 56 34 12 \tbndcl 0x12345678(%ecx,%eax,1),%bnd0",}, 79 + {{0xf3, 0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 80 + "f3 0f 1a 84 05 78 56 34 12 \tbndcl 0x12345678(%ebp,%eax,1),%bnd0",}, 81 + {{0xf3, 0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 82 + "f3 0f 1a 84 08 78 56 34 12 \tbndcl 0x12345678(%eax,%ecx,1),%bnd0",}, 83 + {{0xf3, 0x0f, 0x1a, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 84 + "f3 0f 1a 84 c8 78 56 34 12 \tbndcl 0x12345678(%eax,%ecx,8),%bnd0",}, 85 + {{0xf3, 0x0f, 0x1a, 0xc0, }, 4, 0, "", "", 86 + "f3 0f 1a c0 \tbndcl %eax,%bnd0",}, 87 + {{0xf2, 0x0f, 0x1a, 0x00, }, 4, 0, "", "", 88 + "f2 0f 1a 00 \tbndcu (%eax),%bnd0",}, 89 + {{0xf2, 0x0f, 0x1a, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 90 + "f2 0f 1a 05 78 56 34 12 \tbndcu 0x12345678,%bnd0",}, 91 + {{0xf2, 0x0f, 0x1a, 0x18, }, 4, 0, "", "", 92 + "f2 0f 1a 18 \tbndcu (%eax),%bnd3",}, 93 + {{0xf2, 0x0f, 0x1a, 0x04, 0x01, }, 5, 0, "", "", 94 + "f2 0f 1a 04 01 \tbndcu (%ecx,%eax,1),%bnd0",}, 95 + {{0xf2, 0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 96 + "f2 0f 1a 04 05 78 56 34 12 \tbndcu 0x12345678(,%eax,1),%bnd0",}, 97 + {{0xf2, 0x0f, 0x1a, 0x04, 0x08, }, 5, 0, "", "", 98 + "f2 0f 1a 04 08 \tbndcu (%eax,%ecx,1),%bnd0",}, 99 + {{0xf2, 0x0f, 0x1a, 0x04, 0xc8, }, 5, 0, "", "", 100 + "f2 0f 1a 04 c8 \tbndcu (%eax,%ecx,8),%bnd0",}, 101 + {{0xf2, 0x0f, 0x1a, 0x40, 0x12, }, 5, 0, "", "", 102 + "f2 0f 1a 40 12 \tbndcu 0x12(%eax),%bnd0",}, 103 + {{0xf2, 0x0f, 0x1a, 0x45, 0x12, }, 5, 0, "", "", 104 + "f2 0f 1a 45 12 \tbndcu 0x12(%ebp),%bnd0",}, 105 + {{0xf2, 0x0f, 0x1a, 0x44, 0x01, 0x12, }, 6, 0, "", "", 106 + "f2 0f 1a 44 01 12 \tbndcu 0x12(%ecx,%eax,1),%bnd0",}, 107 + {{0xf2, 0x0f, 0x1a, 0x44, 0x05, 0x12, }, 6, 0, "", "", 108 + "f2 0f 1a 44 05 12 \tbndcu 0x12(%ebp,%eax,1),%bnd0",}, 109 + {{0xf2, 0x0f, 0x1a, 0x44, 0x08, 0x12, }, 6, 0, "", "", 110 + "f2 0f 1a 44 08 12 \tbndcu 0x12(%eax,%ecx,1),%bnd0",}, 111 + {{0xf2, 0x0f, 0x1a, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 112 + "f2 0f 1a 44 c8 12 \tbndcu 0x12(%eax,%ecx,8),%bnd0",}, 113 + {{0xf2, 0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 114 + "f2 0f 1a 80 78 56 34 12 \tbndcu 0x12345678(%eax),%bnd0",}, 115 + {{0xf2, 0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 116 + "f2 0f 1a 85 78 56 34 12 \tbndcu 0x12345678(%ebp),%bnd0",}, 117 + {{0xf2, 0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 118 + "f2 0f 1a 84 01 78 56 34 12 \tbndcu 0x12345678(%ecx,%eax,1),%bnd0",}, 119 + {{0xf2, 0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 120 + "f2 0f 1a 84 05 78 56 34 12 \tbndcu 0x12345678(%ebp,%eax,1),%bnd0",}, 121 + {{0xf2, 0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 122 + "f2 0f 1a 84 08 78 56 34 12 \tbndcu 0x12345678(%eax,%ecx,1),%bnd0",}, 123 + {{0xf2, 0x0f, 0x1a, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 124 + "f2 0f 1a 84 c8 78 56 34 12 \tbndcu 0x12345678(%eax,%ecx,8),%bnd0",}, 125 + {{0xf2, 0x0f, 0x1a, 0xc0, }, 4, 0, "", "", 126 + "f2 0f 1a c0 \tbndcu %eax,%bnd0",}, 127 + {{0xf2, 0x0f, 0x1b, 0x00, }, 4, 0, "", "", 128 + "f2 0f 1b 00 \tbndcn (%eax),%bnd0",}, 129 + {{0xf2, 0x0f, 0x1b, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 130 + "f2 0f 1b 05 78 56 34 12 \tbndcn 0x12345678,%bnd0",}, 131 + {{0xf2, 0x0f, 0x1b, 0x18, }, 4, 0, "", "", 132 + "f2 0f 1b 18 \tbndcn (%eax),%bnd3",}, 133 + {{0xf2, 0x0f, 0x1b, 0x04, 0x01, }, 5, 0, "", "", 134 + "f2 0f 1b 04 01 \tbndcn (%ecx,%eax,1),%bnd0",}, 135 + {{0xf2, 0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 136 + "f2 0f 1b 04 05 78 56 34 12 \tbndcn 0x12345678(,%eax,1),%bnd0",}, 137 + {{0xf2, 0x0f, 0x1b, 0x04, 0x08, }, 5, 0, "", "", 138 + "f2 0f 1b 04 08 \tbndcn (%eax,%ecx,1),%bnd0",}, 139 + {{0xf2, 0x0f, 0x1b, 0x04, 0xc8, }, 5, 0, "", "", 140 + "f2 0f 1b 04 c8 \tbndcn (%eax,%ecx,8),%bnd0",}, 141 + {{0xf2, 0x0f, 0x1b, 0x40, 0x12, }, 5, 0, "", "", 142 + "f2 0f 1b 40 12 \tbndcn 0x12(%eax),%bnd0",}, 143 + {{0xf2, 0x0f, 0x1b, 0x45, 0x12, }, 5, 0, "", "", 144 + "f2 0f 1b 45 12 \tbndcn 0x12(%ebp),%bnd0",}, 145 + {{0xf2, 0x0f, 0x1b, 0x44, 0x01, 0x12, }, 6, 0, "", "", 146 + "f2 0f 1b 44 01 12 \tbndcn 0x12(%ecx,%eax,1),%bnd0",}, 147 + {{0xf2, 0x0f, 0x1b, 0x44, 0x05, 0x12, }, 6, 0, "", "", 148 + "f2 0f 1b 44 05 12 \tbndcn 0x12(%ebp,%eax,1),%bnd0",}, 149 + {{0xf2, 0x0f, 0x1b, 0x44, 0x08, 0x12, }, 6, 0, "", "", 150 + "f2 0f 1b 44 08 12 \tbndcn 0x12(%eax,%ecx,1),%bnd0",}, 151 + {{0xf2, 0x0f, 0x1b, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 152 + "f2 0f 1b 44 c8 12 \tbndcn 0x12(%eax,%ecx,8),%bnd0",}, 153 + {{0xf2, 0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 154 + "f2 0f 1b 80 78 56 34 12 \tbndcn 0x12345678(%eax),%bnd0",}, 155 + {{0xf2, 0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 156 + "f2 0f 1b 85 78 56 34 12 \tbndcn 0x12345678(%ebp),%bnd0",}, 157 + {{0xf2, 0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 158 + "f2 0f 1b 84 01 78 56 34 12 \tbndcn 0x12345678(%ecx,%eax,1),%bnd0",}, 159 + {{0xf2, 0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 160 + "f2 0f 1b 84 05 78 56 34 12 \tbndcn 0x12345678(%ebp,%eax,1),%bnd0",}, 161 + {{0xf2, 0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 162 + "f2 0f 1b 84 08 78 56 34 12 \tbndcn 0x12345678(%eax,%ecx,1),%bnd0",}, 163 + {{0xf2, 0x0f, 0x1b, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 164 + "f2 0f 1b 84 c8 78 56 34 12 \tbndcn 0x12345678(%eax,%ecx,8),%bnd0",}, 165 + {{0xf2, 0x0f, 0x1b, 0xc0, }, 4, 0, "", "", 166 + "f2 0f 1b c0 \tbndcn %eax,%bnd0",}, 167 + {{0x66, 0x0f, 0x1a, 0x00, }, 4, 0, "", "", 168 + "66 0f 1a 00 \tbndmov (%eax),%bnd0",}, 169 + {{0x66, 0x0f, 0x1a, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 170 + "66 0f 1a 05 78 56 34 12 \tbndmov 0x12345678,%bnd0",}, 171 + {{0x66, 0x0f, 0x1a, 0x18, }, 4, 0, "", "", 172 + "66 0f 1a 18 \tbndmov (%eax),%bnd3",}, 173 + {{0x66, 0x0f, 0x1a, 0x04, 0x01, }, 5, 0, "", "", 174 + "66 0f 1a 04 01 \tbndmov (%ecx,%eax,1),%bnd0",}, 175 + {{0x66, 0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 176 + "66 0f 1a 04 05 78 56 34 12 \tbndmov 0x12345678(,%eax,1),%bnd0",}, 177 + {{0x66, 0x0f, 0x1a, 0x04, 0x08, }, 5, 0, "", "", 178 + "66 0f 1a 04 08 \tbndmov (%eax,%ecx,1),%bnd0",}, 179 + {{0x66, 0x0f, 0x1a, 0x04, 0xc8, }, 5, 0, "", "", 180 + "66 0f 1a 04 c8 \tbndmov (%eax,%ecx,8),%bnd0",}, 181 + {{0x66, 0x0f, 0x1a, 0x40, 0x12, }, 5, 0, "", "", 182 + "66 0f 1a 40 12 \tbndmov 0x12(%eax),%bnd0",}, 183 + {{0x66, 0x0f, 0x1a, 0x45, 0x12, }, 5, 0, "", "", 184 + "66 0f 1a 45 12 \tbndmov 0x12(%ebp),%bnd0",}, 185 + {{0x66, 0x0f, 0x1a, 0x44, 0x01, 0x12, }, 6, 0, "", "", 186 + "66 0f 1a 44 01 12 \tbndmov 0x12(%ecx,%eax,1),%bnd0",}, 187 + {{0x66, 0x0f, 0x1a, 0x44, 0x05, 0x12, }, 6, 0, "", "", 188 + "66 0f 1a 44 05 12 \tbndmov 0x12(%ebp,%eax,1),%bnd0",}, 189 + {{0x66, 0x0f, 0x1a, 0x44, 0x08, 0x12, }, 6, 0, "", "", 190 + "66 0f 1a 44 08 12 \tbndmov 0x12(%eax,%ecx,1),%bnd0",}, 191 + {{0x66, 0x0f, 0x1a, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 192 + "66 0f 1a 44 c8 12 \tbndmov 0x12(%eax,%ecx,8),%bnd0",}, 193 + {{0x66, 0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 194 + "66 0f 1a 80 78 56 34 12 \tbndmov 0x12345678(%eax),%bnd0",}, 195 + {{0x66, 0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 196 + "66 0f 1a 85 78 56 34 12 \tbndmov 0x12345678(%ebp),%bnd0",}, 197 + {{0x66, 0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 198 + "66 0f 1a 84 01 78 56 34 12 \tbndmov 0x12345678(%ecx,%eax,1),%bnd0",}, 199 + {{0x66, 0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 200 + "66 0f 1a 84 05 78 56 34 12 \tbndmov 0x12345678(%ebp,%eax,1),%bnd0",}, 201 + {{0x66, 0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 202 + "66 0f 1a 84 08 78 56 34 12 \tbndmov 0x12345678(%eax,%ecx,1),%bnd0",}, 203 + {{0x66, 0x0f, 0x1a, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 204 + "66 0f 1a 84 c8 78 56 34 12 \tbndmov 0x12345678(%eax,%ecx,8),%bnd0",}, 205 + {{0x66, 0x0f, 0x1b, 0x00, }, 4, 0, "", "", 206 + "66 0f 1b 00 \tbndmov %bnd0,(%eax)",}, 207 + {{0x66, 0x0f, 0x1b, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 208 + "66 0f 1b 05 78 56 34 12 \tbndmov %bnd0,0x12345678",}, 209 + {{0x66, 0x0f, 0x1b, 0x18, }, 4, 0, "", "", 210 + "66 0f 1b 18 \tbndmov %bnd3,(%eax)",}, 211 + {{0x66, 0x0f, 0x1b, 0x04, 0x01, }, 5, 0, "", "", 212 + "66 0f 1b 04 01 \tbndmov %bnd0,(%ecx,%eax,1)",}, 213 + {{0x66, 0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 214 + "66 0f 1b 04 05 78 56 34 12 \tbndmov %bnd0,0x12345678(,%eax,1)",}, 215 + {{0x66, 0x0f, 0x1b, 0x04, 0x08, }, 5, 0, "", "", 216 + "66 0f 1b 04 08 \tbndmov %bnd0,(%eax,%ecx,1)",}, 217 + {{0x66, 0x0f, 0x1b, 0x04, 0xc8, }, 5, 0, "", "", 218 + "66 0f 1b 04 c8 \tbndmov %bnd0,(%eax,%ecx,8)",}, 219 + {{0x66, 0x0f, 0x1b, 0x40, 0x12, }, 5, 0, "", "", 220 + "66 0f 1b 40 12 \tbndmov %bnd0,0x12(%eax)",}, 221 + {{0x66, 0x0f, 0x1b, 0x45, 0x12, }, 5, 0, "", "", 222 + "66 0f 1b 45 12 \tbndmov %bnd0,0x12(%ebp)",}, 223 + {{0x66, 0x0f, 0x1b, 0x44, 0x01, 0x12, }, 6, 0, "", "", 224 + "66 0f 1b 44 01 12 \tbndmov %bnd0,0x12(%ecx,%eax,1)",}, 225 + {{0x66, 0x0f, 0x1b, 0x44, 0x05, 0x12, }, 6, 0, "", "", 226 + "66 0f 1b 44 05 12 \tbndmov %bnd0,0x12(%ebp,%eax,1)",}, 227 + {{0x66, 0x0f, 0x1b, 0x44, 0x08, 0x12, }, 6, 0, "", "", 228 + "66 0f 1b 44 08 12 \tbndmov %bnd0,0x12(%eax,%ecx,1)",}, 229 + {{0x66, 0x0f, 0x1b, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 230 + "66 0f 1b 44 c8 12 \tbndmov %bnd0,0x12(%eax,%ecx,8)",}, 231 + {{0x66, 0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 232 + "66 0f 1b 80 78 56 34 12 \tbndmov %bnd0,0x12345678(%eax)",}, 233 + {{0x66, 0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 234 + "66 0f 1b 85 78 56 34 12 \tbndmov %bnd0,0x12345678(%ebp)",}, 235 + {{0x66, 0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 236 + "66 0f 1b 84 01 78 56 34 12 \tbndmov %bnd0,0x12345678(%ecx,%eax,1)",}, 237 + {{0x66, 0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 238 + "66 0f 1b 84 05 78 56 34 12 \tbndmov %bnd0,0x12345678(%ebp,%eax,1)",}, 239 + {{0x66, 0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 240 + "66 0f 1b 84 08 78 56 34 12 \tbndmov %bnd0,0x12345678(%eax,%ecx,1)",}, 241 + {{0x66, 0x0f, 0x1b, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 242 + "66 0f 1b 84 c8 78 56 34 12 \tbndmov %bnd0,0x12345678(%eax,%ecx,8)",}, 243 + {{0x66, 0x0f, 0x1a, 0xc8, }, 4, 0, "", "", 244 + "66 0f 1a c8 \tbndmov %bnd0,%bnd1",}, 245 + {{0x66, 0x0f, 0x1a, 0xc1, }, 4, 0, "", "", 246 + "66 0f 1a c1 \tbndmov %bnd1,%bnd0",}, 247 + {{0x0f, 0x1a, 0x00, }, 3, 0, "", "", 248 + "0f 1a 00 \tbndldx (%eax),%bnd0",}, 249 + {{0x0f, 0x1a, 0x05, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 250 + "0f 1a 05 78 56 34 12 \tbndldx 0x12345678,%bnd0",}, 251 + {{0x0f, 0x1a, 0x18, }, 3, 0, "", "", 252 + "0f 1a 18 \tbndldx (%eax),%bnd3",}, 253 + {{0x0f, 0x1a, 0x04, 0x01, }, 4, 0, "", "", 254 + "0f 1a 04 01 \tbndldx (%ecx,%eax,1),%bnd0",}, 255 + {{0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 256 + "0f 1a 04 05 78 56 34 12 \tbndldx 0x12345678(,%eax,1),%bnd0",}, 257 + {{0x0f, 0x1a, 0x04, 0x08, }, 4, 0, "", "", 258 + "0f 1a 04 08 \tbndldx (%eax,%ecx,1),%bnd0",}, 259 + {{0x0f, 0x1a, 0x40, 0x12, }, 4, 0, "", "", 260 + "0f 1a 40 12 \tbndldx 0x12(%eax),%bnd0",}, 261 + {{0x0f, 0x1a, 0x45, 0x12, }, 4, 0, "", "", 262 + "0f 1a 45 12 \tbndldx 0x12(%ebp),%bnd0",}, 263 + {{0x0f, 0x1a, 0x44, 0x01, 0x12, }, 5, 0, "", "", 264 + "0f 1a 44 01 12 \tbndldx 0x12(%ecx,%eax,1),%bnd0",}, 265 + {{0x0f, 0x1a, 0x44, 0x05, 0x12, }, 5, 0, "", "", 266 + "0f 1a 44 05 12 \tbndldx 0x12(%ebp,%eax,1),%bnd0",}, 267 + {{0x0f, 0x1a, 0x44, 0x08, 0x12, }, 5, 0, "", "", 268 + "0f 1a 44 08 12 \tbndldx 0x12(%eax,%ecx,1),%bnd0",}, 269 + {{0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 270 + "0f 1a 80 78 56 34 12 \tbndldx 0x12345678(%eax),%bnd0",}, 271 + {{0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 272 + "0f 1a 85 78 56 34 12 \tbndldx 0x12345678(%ebp),%bnd0",}, 273 + {{0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 274 + "0f 1a 84 01 78 56 34 12 \tbndldx 0x12345678(%ecx,%eax,1),%bnd0",}, 275 + {{0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 276 + "0f 1a 84 05 78 56 34 12 \tbndldx 0x12345678(%ebp,%eax,1),%bnd0",}, 277 + {{0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 278 + "0f 1a 84 08 78 56 34 12 \tbndldx 0x12345678(%eax,%ecx,1),%bnd0",}, 279 + {{0x0f, 0x1b, 0x00, }, 3, 0, "", "", 280 + "0f 1b 00 \tbndstx %bnd0,(%eax)",}, 281 + {{0x0f, 0x1b, 0x05, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 282 + "0f 1b 05 78 56 34 12 \tbndstx %bnd0,0x12345678",}, 283 + {{0x0f, 0x1b, 0x18, }, 3, 0, "", "", 284 + "0f 1b 18 \tbndstx %bnd3,(%eax)",}, 285 + {{0x0f, 0x1b, 0x04, 0x01, }, 4, 0, "", "", 286 + "0f 1b 04 01 \tbndstx %bnd0,(%ecx,%eax,1)",}, 287 + {{0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 288 + "0f 1b 04 05 78 56 34 12 \tbndstx %bnd0,0x12345678(,%eax,1)",}, 289 + {{0x0f, 0x1b, 0x04, 0x08, }, 4, 0, "", "", 290 + "0f 1b 04 08 \tbndstx %bnd0,(%eax,%ecx,1)",}, 291 + {{0x0f, 0x1b, 0x40, 0x12, }, 4, 0, "", "", 292 + "0f 1b 40 12 \tbndstx %bnd0,0x12(%eax)",}, 293 + {{0x0f, 0x1b, 0x45, 0x12, }, 4, 0, "", "", 294 + "0f 1b 45 12 \tbndstx %bnd0,0x12(%ebp)",}, 295 + {{0x0f, 0x1b, 0x44, 0x01, 0x12, }, 5, 0, "", "", 296 + "0f 1b 44 01 12 \tbndstx %bnd0,0x12(%ecx,%eax,1)",}, 297 + {{0x0f, 0x1b, 0x44, 0x05, 0x12, }, 5, 0, "", "", 298 + "0f 1b 44 05 12 \tbndstx %bnd0,0x12(%ebp,%eax,1)",}, 299 + {{0x0f, 0x1b, 0x44, 0x08, 0x12, }, 5, 0, "", "", 300 + "0f 1b 44 08 12 \tbndstx %bnd0,0x12(%eax,%ecx,1)",}, 301 + {{0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 302 + "0f 1b 80 78 56 34 12 \tbndstx %bnd0,0x12345678(%eax)",}, 303 + {{0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 304 + "0f 1b 85 78 56 34 12 \tbndstx %bnd0,0x12345678(%ebp)",}, 305 + {{0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 306 + "0f 1b 84 01 78 56 34 12 \tbndstx %bnd0,0x12345678(%ecx,%eax,1)",}, 307 + {{0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 308 + "0f 1b 84 05 78 56 34 12 \tbndstx %bnd0,0x12345678(%ebp,%eax,1)",}, 309 + {{0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 310 + "0f 1b 84 08 78 56 34 12 \tbndstx %bnd0,0x12345678(%eax,%ecx,1)",}, 311 + {{0xf2, 0xe8, 0xfc, 0xff, 0xff, 0xff, }, 6, 0xfffffffc, "call", "unconditional", 312 + "f2 e8 fc ff ff ff \tbnd call 3c3 <main+0x3c3>",}, 313 + {{0xf2, 0xff, 0x10, }, 3, 0, "call", "indirect", 314 + "f2 ff 10 \tbnd call *(%eax)",}, 315 + {{0xf2, 0xc3, }, 2, 0, "ret", "indirect", 316 + "f2 c3 \tbnd ret ",}, 317 + {{0xf2, 0xe9, 0xfc, 0xff, 0xff, 0xff, }, 6, 0xfffffffc, "jmp", "unconditional", 318 + "f2 e9 fc ff ff ff \tbnd jmp 3ce <main+0x3ce>",}, 319 + {{0xf2, 0xe9, 0xfc, 0xff, 0xff, 0xff, }, 6, 0xfffffffc, "jmp", "unconditional", 320 + "f2 e9 fc ff ff ff \tbnd jmp 3d4 <main+0x3d4>",}, 321 + {{0xf2, 0xff, 0x21, }, 3, 0, "jmp", "indirect", 322 + "f2 ff 21 \tbnd jmp *(%ecx)",}, 323 + {{0xf2, 0x0f, 0x85, 0xfc, 0xff, 0xff, 0xff, }, 7, 0xfffffffc, "jcc", "conditional", 324 + "f2 0f 85 fc ff ff ff \tbnd jne 3de <main+0x3de>",}, 325 + {{0x0f, 0x3a, 0xcc, 0xc1, 0x00, }, 5, 0, "", "", 326 + "0f 3a cc c1 00 \tsha1rnds4 $0x0,%xmm1,%xmm0",}, 327 + {{0x0f, 0x3a, 0xcc, 0xd7, 0x91, }, 5, 0, "", "", 328 + "0f 3a cc d7 91 \tsha1rnds4 $0x91,%xmm7,%xmm2",}, 329 + {{0x0f, 0x3a, 0xcc, 0x00, 0x91, }, 5, 0, "", "", 330 + "0f 3a cc 00 91 \tsha1rnds4 $0x91,(%eax),%xmm0",}, 331 + {{0x0f, 0x3a, 0xcc, 0x05, 0x78, 0x56, 0x34, 0x12, 0x91, }, 9, 0, "", "", 332 + "0f 3a cc 05 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678,%xmm0",}, 333 + {{0x0f, 0x3a, 0xcc, 0x18, 0x91, }, 5, 0, "", "", 334 + "0f 3a cc 18 91 \tsha1rnds4 $0x91,(%eax),%xmm3",}, 335 + {{0x0f, 0x3a, 0xcc, 0x04, 0x01, 0x91, }, 6, 0, "", "", 336 + "0f 3a cc 04 01 91 \tsha1rnds4 $0x91,(%ecx,%eax,1),%xmm0",}, 337 + {{0x0f, 0x3a, 0xcc, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "", 338 + "0f 3a cc 04 05 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(,%eax,1),%xmm0",}, 339 + {{0x0f, 0x3a, 0xcc, 0x04, 0x08, 0x91, }, 6, 0, "", "", 340 + "0f 3a cc 04 08 91 \tsha1rnds4 $0x91,(%eax,%ecx,1),%xmm0",}, 341 + {{0x0f, 0x3a, 0xcc, 0x04, 0xc8, 0x91, }, 6, 0, "", "", 342 + "0f 3a cc 04 c8 91 \tsha1rnds4 $0x91,(%eax,%ecx,8),%xmm0",}, 343 + {{0x0f, 0x3a, 0xcc, 0x40, 0x12, 0x91, }, 6, 0, "", "", 344 + "0f 3a cc 40 12 91 \tsha1rnds4 $0x91,0x12(%eax),%xmm0",}, 345 + {{0x0f, 0x3a, 0xcc, 0x45, 0x12, 0x91, }, 6, 0, "", "", 346 + "0f 3a cc 45 12 91 \tsha1rnds4 $0x91,0x12(%ebp),%xmm0",}, 347 + {{0x0f, 0x3a, 0xcc, 0x44, 0x01, 0x12, 0x91, }, 7, 0, "", "", 348 + "0f 3a cc 44 01 12 91 \tsha1rnds4 $0x91,0x12(%ecx,%eax,1),%xmm0",}, 349 + {{0x0f, 0x3a, 0xcc, 0x44, 0x05, 0x12, 0x91, }, 7, 0, "", "", 350 + "0f 3a cc 44 05 12 91 \tsha1rnds4 $0x91,0x12(%ebp,%eax,1),%xmm0",}, 351 + {{0x0f, 0x3a, 0xcc, 0x44, 0x08, 0x12, 0x91, }, 7, 0, "", "", 352 + "0f 3a cc 44 08 12 91 \tsha1rnds4 $0x91,0x12(%eax,%ecx,1),%xmm0",}, 353 + {{0x0f, 0x3a, 0xcc, 0x44, 0xc8, 0x12, 0x91, }, 7, 0, "", "", 354 + "0f 3a cc 44 c8 12 91 \tsha1rnds4 $0x91,0x12(%eax,%ecx,8),%xmm0",}, 355 + {{0x0f, 0x3a, 0xcc, 0x80, 0x78, 0x56, 0x34, 0x12, 0x91, }, 9, 0, "", "", 356 + "0f 3a cc 80 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%eax),%xmm0",}, 357 + {{0x0f, 0x3a, 0xcc, 0x85, 0x78, 0x56, 0x34, 0x12, 0x91, }, 9, 0, "", "", 358 + "0f 3a cc 85 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%ebp),%xmm0",}, 359 + {{0x0f, 0x3a, 0xcc, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "", 360 + "0f 3a cc 84 01 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%ecx,%eax,1),%xmm0",}, 361 + {{0x0f, 0x3a, 0xcc, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "", 362 + "0f 3a cc 84 05 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%ebp,%eax,1),%xmm0",}, 363 + {{0x0f, 0x3a, 0xcc, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "", 364 + "0f 3a cc 84 08 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%eax,%ecx,1),%xmm0",}, 365 + {{0x0f, 0x3a, 0xcc, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "", 366 + "0f 3a cc 84 c8 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%eax,%ecx,8),%xmm0",}, 367 + {{0x0f, 0x38, 0xc8, 0xc1, }, 4, 0, "", "", 368 + "0f 38 c8 c1 \tsha1nexte %xmm1,%xmm0",}, 369 + {{0x0f, 0x38, 0xc8, 0xd7, }, 4, 0, "", "", 370 + "0f 38 c8 d7 \tsha1nexte %xmm7,%xmm2",}, 371 + {{0x0f, 0x38, 0xc8, 0x00, }, 4, 0, "", "", 372 + "0f 38 c8 00 \tsha1nexte (%eax),%xmm0",}, 373 + {{0x0f, 0x38, 0xc8, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 374 + "0f 38 c8 05 78 56 34 12 \tsha1nexte 0x12345678,%xmm0",}, 375 + {{0x0f, 0x38, 0xc8, 0x18, }, 4, 0, "", "", 376 + "0f 38 c8 18 \tsha1nexte (%eax),%xmm3",}, 377 + {{0x0f, 0x38, 0xc8, 0x04, 0x01, }, 5, 0, "", "", 378 + "0f 38 c8 04 01 \tsha1nexte (%ecx,%eax,1),%xmm0",}, 379 + {{0x0f, 0x38, 0xc8, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 380 + "0f 38 c8 04 05 78 56 34 12 \tsha1nexte 0x12345678(,%eax,1),%xmm0",}, 381 + {{0x0f, 0x38, 0xc8, 0x04, 0x08, }, 5, 0, "", "", 382 + "0f 38 c8 04 08 \tsha1nexte (%eax,%ecx,1),%xmm0",}, 383 + {{0x0f, 0x38, 0xc8, 0x04, 0xc8, }, 5, 0, "", "", 384 + "0f 38 c8 04 c8 \tsha1nexte (%eax,%ecx,8),%xmm0",}, 385 + {{0x0f, 0x38, 0xc8, 0x40, 0x12, }, 5, 0, "", "", 386 + "0f 38 c8 40 12 \tsha1nexte 0x12(%eax),%xmm0",}, 387 + {{0x0f, 0x38, 0xc8, 0x45, 0x12, }, 5, 0, "", "", 388 + "0f 38 c8 45 12 \tsha1nexte 0x12(%ebp),%xmm0",}, 389 + {{0x0f, 0x38, 0xc8, 0x44, 0x01, 0x12, }, 6, 0, "", "", 390 + "0f 38 c8 44 01 12 \tsha1nexte 0x12(%ecx,%eax,1),%xmm0",}, 391 + {{0x0f, 0x38, 0xc8, 0x44, 0x05, 0x12, }, 6, 0, "", "", 392 + "0f 38 c8 44 05 12 \tsha1nexte 0x12(%ebp,%eax,1),%xmm0",}, 393 + {{0x0f, 0x38, 0xc8, 0x44, 0x08, 0x12, }, 6, 0, "", "", 394 + "0f 38 c8 44 08 12 \tsha1nexte 0x12(%eax,%ecx,1),%xmm0",}, 395 + {{0x0f, 0x38, 0xc8, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 396 + "0f 38 c8 44 c8 12 \tsha1nexte 0x12(%eax,%ecx,8),%xmm0",}, 397 + {{0x0f, 0x38, 0xc8, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 398 + "0f 38 c8 80 78 56 34 12 \tsha1nexte 0x12345678(%eax),%xmm0",}, 399 + {{0x0f, 0x38, 0xc8, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 400 + "0f 38 c8 85 78 56 34 12 \tsha1nexte 0x12345678(%ebp),%xmm0",}, 401 + {{0x0f, 0x38, 0xc8, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 402 + "0f 38 c8 84 01 78 56 34 12 \tsha1nexte 0x12345678(%ecx,%eax,1),%xmm0",}, 403 + {{0x0f, 0x38, 0xc8, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 404 + "0f 38 c8 84 05 78 56 34 12 \tsha1nexte 0x12345678(%ebp,%eax,1),%xmm0",}, 405 + {{0x0f, 0x38, 0xc8, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 406 + "0f 38 c8 84 08 78 56 34 12 \tsha1nexte 0x12345678(%eax,%ecx,1),%xmm0",}, 407 + {{0x0f, 0x38, 0xc8, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 408 + "0f 38 c8 84 c8 78 56 34 12 \tsha1nexte 0x12345678(%eax,%ecx,8),%xmm0",}, 409 + {{0x0f, 0x38, 0xc9, 0xc1, }, 4, 0, "", "", 410 + "0f 38 c9 c1 \tsha1msg1 %xmm1,%xmm0",}, 411 + {{0x0f, 0x38, 0xc9, 0xd7, }, 4, 0, "", "", 412 + "0f 38 c9 d7 \tsha1msg1 %xmm7,%xmm2",}, 413 + {{0x0f, 0x38, 0xc9, 0x00, }, 4, 0, "", "", 414 + "0f 38 c9 00 \tsha1msg1 (%eax),%xmm0",}, 415 + {{0x0f, 0x38, 0xc9, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 416 + "0f 38 c9 05 78 56 34 12 \tsha1msg1 0x12345678,%xmm0",}, 417 + {{0x0f, 0x38, 0xc9, 0x18, }, 4, 0, "", "", 418 + "0f 38 c9 18 \tsha1msg1 (%eax),%xmm3",}, 419 + {{0x0f, 0x38, 0xc9, 0x04, 0x01, }, 5, 0, "", "", 420 + "0f 38 c9 04 01 \tsha1msg1 (%ecx,%eax,1),%xmm0",}, 421 + {{0x0f, 0x38, 0xc9, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 422 + "0f 38 c9 04 05 78 56 34 12 \tsha1msg1 0x12345678(,%eax,1),%xmm0",}, 423 + {{0x0f, 0x38, 0xc9, 0x04, 0x08, }, 5, 0, "", "", 424 + "0f 38 c9 04 08 \tsha1msg1 (%eax,%ecx,1),%xmm0",}, 425 + {{0x0f, 0x38, 0xc9, 0x04, 0xc8, }, 5, 0, "", "", 426 + "0f 38 c9 04 c8 \tsha1msg1 (%eax,%ecx,8),%xmm0",}, 427 + {{0x0f, 0x38, 0xc9, 0x40, 0x12, }, 5, 0, "", "", 428 + "0f 38 c9 40 12 \tsha1msg1 0x12(%eax),%xmm0",}, 429 + {{0x0f, 0x38, 0xc9, 0x45, 0x12, }, 5, 0, "", "", 430 + "0f 38 c9 45 12 \tsha1msg1 0x12(%ebp),%xmm0",}, 431 + {{0x0f, 0x38, 0xc9, 0x44, 0x01, 0x12, }, 6, 0, "", "", 432 + "0f 38 c9 44 01 12 \tsha1msg1 0x12(%ecx,%eax,1),%xmm0",}, 433 + {{0x0f, 0x38, 0xc9, 0x44, 0x05, 0x12, }, 6, 0, "", "", 434 + "0f 38 c9 44 05 12 \tsha1msg1 0x12(%ebp,%eax,1),%xmm0",}, 435 + {{0x0f, 0x38, 0xc9, 0x44, 0x08, 0x12, }, 6, 0, "", "", 436 + "0f 38 c9 44 08 12 \tsha1msg1 0x12(%eax,%ecx,1),%xmm0",}, 437 + {{0x0f, 0x38, 0xc9, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 438 + "0f 38 c9 44 c8 12 \tsha1msg1 0x12(%eax,%ecx,8),%xmm0",}, 439 + {{0x0f, 0x38, 0xc9, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 440 + "0f 38 c9 80 78 56 34 12 \tsha1msg1 0x12345678(%eax),%xmm0",}, 441 + {{0x0f, 0x38, 0xc9, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 442 + "0f 38 c9 85 78 56 34 12 \tsha1msg1 0x12345678(%ebp),%xmm0",}, 443 + {{0x0f, 0x38, 0xc9, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 444 + "0f 38 c9 84 01 78 56 34 12 \tsha1msg1 0x12345678(%ecx,%eax,1),%xmm0",}, 445 + {{0x0f, 0x38, 0xc9, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 446 + "0f 38 c9 84 05 78 56 34 12 \tsha1msg1 0x12345678(%ebp,%eax,1),%xmm0",}, 447 + {{0x0f, 0x38, 0xc9, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 448 + "0f 38 c9 84 08 78 56 34 12 \tsha1msg1 0x12345678(%eax,%ecx,1),%xmm0",}, 449 + {{0x0f, 0x38, 0xc9, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 450 + "0f 38 c9 84 c8 78 56 34 12 \tsha1msg1 0x12345678(%eax,%ecx,8),%xmm0",}, 451 + {{0x0f, 0x38, 0xca, 0xc1, }, 4, 0, "", "", 452 + "0f 38 ca c1 \tsha1msg2 %xmm1,%xmm0",}, 453 + {{0x0f, 0x38, 0xca, 0xd7, }, 4, 0, "", "", 454 + "0f 38 ca d7 \tsha1msg2 %xmm7,%xmm2",}, 455 + {{0x0f, 0x38, 0xca, 0x00, }, 4, 0, "", "", 456 + "0f 38 ca 00 \tsha1msg2 (%eax),%xmm0",}, 457 + {{0x0f, 0x38, 0xca, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 458 + "0f 38 ca 05 78 56 34 12 \tsha1msg2 0x12345678,%xmm0",}, 459 + {{0x0f, 0x38, 0xca, 0x18, }, 4, 0, "", "", 460 + "0f 38 ca 18 \tsha1msg2 (%eax),%xmm3",}, 461 + {{0x0f, 0x38, 0xca, 0x04, 0x01, }, 5, 0, "", "", 462 + "0f 38 ca 04 01 \tsha1msg2 (%ecx,%eax,1),%xmm0",}, 463 + {{0x0f, 0x38, 0xca, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 464 + "0f 38 ca 04 05 78 56 34 12 \tsha1msg2 0x12345678(,%eax,1),%xmm0",}, 465 + {{0x0f, 0x38, 0xca, 0x04, 0x08, }, 5, 0, "", "", 466 + "0f 38 ca 04 08 \tsha1msg2 (%eax,%ecx,1),%xmm0",}, 467 + {{0x0f, 0x38, 0xca, 0x04, 0xc8, }, 5, 0, "", "", 468 + "0f 38 ca 04 c8 \tsha1msg2 (%eax,%ecx,8),%xmm0",}, 469 + {{0x0f, 0x38, 0xca, 0x40, 0x12, }, 5, 0, "", "", 470 + "0f 38 ca 40 12 \tsha1msg2 0x12(%eax),%xmm0",}, 471 + {{0x0f, 0x38, 0xca, 0x45, 0x12, }, 5, 0, "", "", 472 + "0f 38 ca 45 12 \tsha1msg2 0x12(%ebp),%xmm0",}, 473 + {{0x0f, 0x38, 0xca, 0x44, 0x01, 0x12, }, 6, 0, "", "", 474 + "0f 38 ca 44 01 12 \tsha1msg2 0x12(%ecx,%eax,1),%xmm0",}, 475 + {{0x0f, 0x38, 0xca, 0x44, 0x05, 0x12, }, 6, 0, "", "", 476 + "0f 38 ca 44 05 12 \tsha1msg2 0x12(%ebp,%eax,1),%xmm0",}, 477 + {{0x0f, 0x38, 0xca, 0x44, 0x08, 0x12, }, 6, 0, "", "", 478 + "0f 38 ca 44 08 12 \tsha1msg2 0x12(%eax,%ecx,1),%xmm0",}, 479 + {{0x0f, 0x38, 0xca, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 480 + "0f 38 ca 44 c8 12 \tsha1msg2 0x12(%eax,%ecx,8),%xmm0",}, 481 + {{0x0f, 0x38, 0xca, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 482 + "0f 38 ca 80 78 56 34 12 \tsha1msg2 0x12345678(%eax),%xmm0",}, 483 + {{0x0f, 0x38, 0xca, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 484 + "0f 38 ca 85 78 56 34 12 \tsha1msg2 0x12345678(%ebp),%xmm0",}, 485 + {{0x0f, 0x38, 0xca, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 486 + "0f 38 ca 84 01 78 56 34 12 \tsha1msg2 0x12345678(%ecx,%eax,1),%xmm0",}, 487 + {{0x0f, 0x38, 0xca, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 488 + "0f 38 ca 84 05 78 56 34 12 \tsha1msg2 0x12345678(%ebp,%eax,1),%xmm0",}, 489 + {{0x0f, 0x38, 0xca, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 490 + "0f 38 ca 84 08 78 56 34 12 \tsha1msg2 0x12345678(%eax,%ecx,1),%xmm0",}, 491 + {{0x0f, 0x38, 0xca, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 492 + "0f 38 ca 84 c8 78 56 34 12 \tsha1msg2 0x12345678(%eax,%ecx,8),%xmm0",}, 493 + {{0x0f, 0x38, 0xcb, 0xcc, }, 4, 0, "", "", 494 + "0f 38 cb cc \tsha256rnds2 %xmm0,%xmm4,%xmm1",}, 495 + {{0x0f, 0x38, 0xcb, 0xd7, }, 4, 0, "", "", 496 + "0f 38 cb d7 \tsha256rnds2 %xmm0,%xmm7,%xmm2",}, 497 + {{0x0f, 0x38, 0xcb, 0x08, }, 4, 0, "", "", 498 + "0f 38 cb 08 \tsha256rnds2 %xmm0,(%eax),%xmm1",}, 499 + {{0x0f, 0x38, 0xcb, 0x0d, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 500 + "0f 38 cb 0d 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678,%xmm1",}, 501 + {{0x0f, 0x38, 0xcb, 0x18, }, 4, 0, "", "", 502 + "0f 38 cb 18 \tsha256rnds2 %xmm0,(%eax),%xmm3",}, 503 + {{0x0f, 0x38, 0xcb, 0x0c, 0x01, }, 5, 0, "", "", 504 + "0f 38 cb 0c 01 \tsha256rnds2 %xmm0,(%ecx,%eax,1),%xmm1",}, 505 + {{0x0f, 0x38, 0xcb, 0x0c, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 506 + "0f 38 cb 0c 05 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(,%eax,1),%xmm1",}, 507 + {{0x0f, 0x38, 0xcb, 0x0c, 0x08, }, 5, 0, "", "", 508 + "0f 38 cb 0c 08 \tsha256rnds2 %xmm0,(%eax,%ecx,1),%xmm1",}, 509 + {{0x0f, 0x38, 0xcb, 0x0c, 0xc8, }, 5, 0, "", "", 510 + "0f 38 cb 0c c8 \tsha256rnds2 %xmm0,(%eax,%ecx,8),%xmm1",}, 511 + {{0x0f, 0x38, 0xcb, 0x48, 0x12, }, 5, 0, "", "", 512 + "0f 38 cb 48 12 \tsha256rnds2 %xmm0,0x12(%eax),%xmm1",}, 513 + {{0x0f, 0x38, 0xcb, 0x4d, 0x12, }, 5, 0, "", "", 514 + "0f 38 cb 4d 12 \tsha256rnds2 %xmm0,0x12(%ebp),%xmm1",}, 515 + {{0x0f, 0x38, 0xcb, 0x4c, 0x01, 0x12, }, 6, 0, "", "", 516 + "0f 38 cb 4c 01 12 \tsha256rnds2 %xmm0,0x12(%ecx,%eax,1),%xmm1",}, 517 + {{0x0f, 0x38, 0xcb, 0x4c, 0x05, 0x12, }, 6, 0, "", "", 518 + "0f 38 cb 4c 05 12 \tsha256rnds2 %xmm0,0x12(%ebp,%eax,1),%xmm1",}, 519 + {{0x0f, 0x38, 0xcb, 0x4c, 0x08, 0x12, }, 6, 0, "", "", 520 + "0f 38 cb 4c 08 12 \tsha256rnds2 %xmm0,0x12(%eax,%ecx,1),%xmm1",}, 521 + {{0x0f, 0x38, 0xcb, 0x4c, 0xc8, 0x12, }, 6, 0, "", "", 522 + "0f 38 cb 4c c8 12 \tsha256rnds2 %xmm0,0x12(%eax,%ecx,8),%xmm1",}, 523 + {{0x0f, 0x38, 0xcb, 0x88, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 524 + "0f 38 cb 88 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%eax),%xmm1",}, 525 + {{0x0f, 0x38, 0xcb, 0x8d, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 526 + "0f 38 cb 8d 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%ebp),%xmm1",}, 527 + {{0x0f, 0x38, 0xcb, 0x8c, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 528 + "0f 38 cb 8c 01 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%ecx,%eax,1),%xmm1",}, 529 + {{0x0f, 0x38, 0xcb, 0x8c, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 530 + "0f 38 cb 8c 05 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%ebp,%eax,1),%xmm1",}, 531 + {{0x0f, 0x38, 0xcb, 0x8c, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 532 + "0f 38 cb 8c 08 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%eax,%ecx,1),%xmm1",}, 533 + {{0x0f, 0x38, 0xcb, 0x8c, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 534 + "0f 38 cb 8c c8 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%eax,%ecx,8),%xmm1",}, 535 + {{0x0f, 0x38, 0xcc, 0xc1, }, 4, 0, "", "", 536 + "0f 38 cc c1 \tsha256msg1 %xmm1,%xmm0",}, 537 + {{0x0f, 0x38, 0xcc, 0xd7, }, 4, 0, "", "", 538 + "0f 38 cc d7 \tsha256msg1 %xmm7,%xmm2",}, 539 + {{0x0f, 0x38, 0xcc, 0x00, }, 4, 0, "", "", 540 + "0f 38 cc 00 \tsha256msg1 (%eax),%xmm0",}, 541 + {{0x0f, 0x38, 0xcc, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 542 + "0f 38 cc 05 78 56 34 12 \tsha256msg1 0x12345678,%xmm0",}, 543 + {{0x0f, 0x38, 0xcc, 0x18, }, 4, 0, "", "", 544 + "0f 38 cc 18 \tsha256msg1 (%eax),%xmm3",}, 545 + {{0x0f, 0x38, 0xcc, 0x04, 0x01, }, 5, 0, "", "", 546 + "0f 38 cc 04 01 \tsha256msg1 (%ecx,%eax,1),%xmm0",}, 547 + {{0x0f, 0x38, 0xcc, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 548 + "0f 38 cc 04 05 78 56 34 12 \tsha256msg1 0x12345678(,%eax,1),%xmm0",}, 549 + {{0x0f, 0x38, 0xcc, 0x04, 0x08, }, 5, 0, "", "", 550 + "0f 38 cc 04 08 \tsha256msg1 (%eax,%ecx,1),%xmm0",}, 551 + {{0x0f, 0x38, 0xcc, 0x04, 0xc8, }, 5, 0, "", "", 552 + "0f 38 cc 04 c8 \tsha256msg1 (%eax,%ecx,8),%xmm0",}, 553 + {{0x0f, 0x38, 0xcc, 0x40, 0x12, }, 5, 0, "", "", 554 + "0f 38 cc 40 12 \tsha256msg1 0x12(%eax),%xmm0",}, 555 + {{0x0f, 0x38, 0xcc, 0x45, 0x12, }, 5, 0, "", "", 556 + "0f 38 cc 45 12 \tsha256msg1 0x12(%ebp),%xmm0",}, 557 + {{0x0f, 0x38, 0xcc, 0x44, 0x01, 0x12, }, 6, 0, "", "", 558 + "0f 38 cc 44 01 12 \tsha256msg1 0x12(%ecx,%eax,1),%xmm0",}, 559 + {{0x0f, 0x38, 0xcc, 0x44, 0x05, 0x12, }, 6, 0, "", "", 560 + "0f 38 cc 44 05 12 \tsha256msg1 0x12(%ebp,%eax,1),%xmm0",}, 561 + {{0x0f, 0x38, 0xcc, 0x44, 0x08, 0x12, }, 6, 0, "", "", 562 + "0f 38 cc 44 08 12 \tsha256msg1 0x12(%eax,%ecx,1),%xmm0",}, 563 + {{0x0f, 0x38, 0xcc, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 564 + "0f 38 cc 44 c8 12 \tsha256msg1 0x12(%eax,%ecx,8),%xmm0",}, 565 + {{0x0f, 0x38, 0xcc, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 566 + "0f 38 cc 80 78 56 34 12 \tsha256msg1 0x12345678(%eax),%xmm0",}, 567 + {{0x0f, 0x38, 0xcc, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 568 + "0f 38 cc 85 78 56 34 12 \tsha256msg1 0x12345678(%ebp),%xmm0",}, 569 + {{0x0f, 0x38, 0xcc, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 570 + "0f 38 cc 84 01 78 56 34 12 \tsha256msg1 0x12345678(%ecx,%eax,1),%xmm0",}, 571 + {{0x0f, 0x38, 0xcc, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 572 + "0f 38 cc 84 05 78 56 34 12 \tsha256msg1 0x12345678(%ebp,%eax,1),%xmm0",}, 573 + {{0x0f, 0x38, 0xcc, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 574 + "0f 38 cc 84 08 78 56 34 12 \tsha256msg1 0x12345678(%eax,%ecx,1),%xmm0",}, 575 + {{0x0f, 0x38, 0xcc, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 576 + "0f 38 cc 84 c8 78 56 34 12 \tsha256msg1 0x12345678(%eax,%ecx,8),%xmm0",}, 577 + {{0x0f, 0x38, 0xcd, 0xc1, }, 4, 0, "", "", 578 + "0f 38 cd c1 \tsha256msg2 %xmm1,%xmm0",}, 579 + {{0x0f, 0x38, 0xcd, 0xd7, }, 4, 0, "", "", 580 + "0f 38 cd d7 \tsha256msg2 %xmm7,%xmm2",}, 581 + {{0x0f, 0x38, 0xcd, 0x00, }, 4, 0, "", "", 582 + "0f 38 cd 00 \tsha256msg2 (%eax),%xmm0",}, 583 + {{0x0f, 0x38, 0xcd, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 584 + "0f 38 cd 05 78 56 34 12 \tsha256msg2 0x12345678,%xmm0",}, 585 + {{0x0f, 0x38, 0xcd, 0x18, }, 4, 0, "", "", 586 + "0f 38 cd 18 \tsha256msg2 (%eax),%xmm3",}, 587 + {{0x0f, 0x38, 0xcd, 0x04, 0x01, }, 5, 0, "", "", 588 + "0f 38 cd 04 01 \tsha256msg2 (%ecx,%eax,1),%xmm0",}, 589 + {{0x0f, 0x38, 0xcd, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 590 + "0f 38 cd 04 05 78 56 34 12 \tsha256msg2 0x12345678(,%eax,1),%xmm0",}, 591 + {{0x0f, 0x38, 0xcd, 0x04, 0x08, }, 5, 0, "", "", 592 + "0f 38 cd 04 08 \tsha256msg2 (%eax,%ecx,1),%xmm0",}, 593 + {{0x0f, 0x38, 0xcd, 0x04, 0xc8, }, 5, 0, "", "", 594 + "0f 38 cd 04 c8 \tsha256msg2 (%eax,%ecx,8),%xmm0",}, 595 + {{0x0f, 0x38, 0xcd, 0x40, 0x12, }, 5, 0, "", "", 596 + "0f 38 cd 40 12 \tsha256msg2 0x12(%eax),%xmm0",}, 597 + {{0x0f, 0x38, 0xcd, 0x45, 0x12, }, 5, 0, "", "", 598 + "0f 38 cd 45 12 \tsha256msg2 0x12(%ebp),%xmm0",}, 599 + {{0x0f, 0x38, 0xcd, 0x44, 0x01, 0x12, }, 6, 0, "", "", 600 + "0f 38 cd 44 01 12 \tsha256msg2 0x12(%ecx,%eax,1),%xmm0",}, 601 + {{0x0f, 0x38, 0xcd, 0x44, 0x05, 0x12, }, 6, 0, "", "", 602 + "0f 38 cd 44 05 12 \tsha256msg2 0x12(%ebp,%eax,1),%xmm0",}, 603 + {{0x0f, 0x38, 0xcd, 0x44, 0x08, 0x12, }, 6, 0, "", "", 604 + "0f 38 cd 44 08 12 \tsha256msg2 0x12(%eax,%ecx,1),%xmm0",}, 605 + {{0x0f, 0x38, 0xcd, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 606 + "0f 38 cd 44 c8 12 \tsha256msg2 0x12(%eax,%ecx,8),%xmm0",}, 607 + {{0x0f, 0x38, 0xcd, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 608 + "0f 38 cd 80 78 56 34 12 \tsha256msg2 0x12345678(%eax),%xmm0",}, 609 + {{0x0f, 0x38, 0xcd, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 610 + "0f 38 cd 85 78 56 34 12 \tsha256msg2 0x12345678(%ebp),%xmm0",}, 611 + {{0x0f, 0x38, 0xcd, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 612 + "0f 38 cd 84 01 78 56 34 12 \tsha256msg2 0x12345678(%ecx,%eax,1),%xmm0",}, 613 + {{0x0f, 0x38, 0xcd, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 614 + "0f 38 cd 84 05 78 56 34 12 \tsha256msg2 0x12345678(%ebp,%eax,1),%xmm0",}, 615 + {{0x0f, 0x38, 0xcd, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 616 + "0f 38 cd 84 08 78 56 34 12 \tsha256msg2 0x12345678(%eax,%ecx,1),%xmm0",}, 617 + {{0x0f, 0x38, 0xcd, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 618 + "0f 38 cd 84 c8 78 56 34 12 \tsha256msg2 0x12345678(%eax,%ecx,8),%xmm0",}, 619 + {{0x66, 0x0f, 0xae, 0x38, }, 4, 0, "", "", 620 + "66 0f ae 38 \tclflushopt (%eax)",}, 621 + {{0x66, 0x0f, 0xae, 0x3d, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 622 + "66 0f ae 3d 78 56 34 12 \tclflushopt 0x12345678",}, 623 + {{0x66, 0x0f, 0xae, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 624 + "66 0f ae bc c8 78 56 34 12 \tclflushopt 0x12345678(%eax,%ecx,8)",}, 625 + {{0x0f, 0xae, 0x38, }, 3, 0, "", "", 626 + "0f ae 38 \tclflush (%eax)",}, 627 + {{0x0f, 0xae, 0xf8, }, 3, 0, "", "", 628 + "0f ae f8 \tsfence ",}, 629 + {{0x66, 0x0f, 0xae, 0x30, }, 4, 0, "", "", 630 + "66 0f ae 30 \tclwb (%eax)",}, 631 + {{0x66, 0x0f, 0xae, 0x35, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 632 + "66 0f ae 35 78 56 34 12 \tclwb 0x12345678",}, 633 + {{0x66, 0x0f, 0xae, 0xb4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 634 + "66 0f ae b4 c8 78 56 34 12 \tclwb 0x12345678(%eax,%ecx,8)",}, 635 + {{0x0f, 0xae, 0x30, }, 3, 0, "", "", 636 + "0f ae 30 \txsaveopt (%eax)",}, 637 + {{0x0f, 0xae, 0xf0, }, 3, 0, "", "", 638 + "0f ae f0 \tmfence ",}, 639 + {{0x0f, 0xc7, 0x20, }, 3, 0, "", "", 640 + "0f c7 20 \txsavec (%eax)",}, 641 + {{0x0f, 0xc7, 0x25, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 642 + "0f c7 25 78 56 34 12 \txsavec 0x12345678",}, 643 + {{0x0f, 0xc7, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 644 + "0f c7 a4 c8 78 56 34 12 \txsavec 0x12345678(%eax,%ecx,8)",}, 645 + {{0x0f, 0xc7, 0x28, }, 3, 0, "", "", 646 + "0f c7 28 \txsaves (%eax)",}, 647 + {{0x0f, 0xc7, 0x2d, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 648 + "0f c7 2d 78 56 34 12 \txsaves 0x12345678",}, 649 + {{0x0f, 0xc7, 0xac, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 650 + "0f c7 ac c8 78 56 34 12 \txsaves 0x12345678(%eax,%ecx,8)",}, 651 + {{0x0f, 0xc7, 0x18, }, 3, 0, "", "", 652 + "0f c7 18 \txrstors (%eax)",}, 653 + {{0x0f, 0xc7, 0x1d, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 654 + "0f c7 1d 78 56 34 12 \txrstors 0x12345678",}, 655 + {{0x0f, 0xc7, 0x9c, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 656 + "0f c7 9c c8 78 56 34 12 \txrstors 0x12345678(%eax,%ecx,8)",}, 657 + {{0x66, 0x0f, 0xae, 0xf8, }, 4, 0, "", "", 658 + "66 0f ae f8 \tpcommit ",},
+768
tools/perf/tests/insn-x86-dat-64.c
··· 1 + /* 2 + * Generated by gen-insn-x86-dat.sh and gen-insn-x86-dat.awk 3 + * from insn-x86-dat-src.c for inclusion by insn-x86.c 4 + * Do not change this code. 5 + */ 6 + 7 + {{0x0f, 0x31, }, 2, 0, "", "", 8 + "0f 31 \trdtsc ",}, 9 + {{0xf3, 0x0f, 0x1b, 0x00, }, 4, 0, "", "", 10 + "f3 0f 1b 00 \tbndmk (%rax),%bnd0",}, 11 + {{0xf3, 0x41, 0x0f, 0x1b, 0x00, }, 5, 0, "", "", 12 + "f3 41 0f 1b 00 \tbndmk (%r8),%bnd0",}, 13 + {{0xf3, 0x0f, 0x1b, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 14 + "f3 0f 1b 04 25 78 56 34 12 \tbndmk 0x12345678,%bnd0",}, 15 + {{0xf3, 0x0f, 0x1b, 0x18, }, 4, 0, "", "", 16 + "f3 0f 1b 18 \tbndmk (%rax),%bnd3",}, 17 + {{0xf3, 0x0f, 0x1b, 0x04, 0x01, }, 5, 0, "", "", 18 + "f3 0f 1b 04 01 \tbndmk (%rcx,%rax,1),%bnd0",}, 19 + {{0xf3, 0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 20 + "f3 0f 1b 04 05 78 56 34 12 \tbndmk 0x12345678(,%rax,1),%bnd0",}, 21 + {{0xf3, 0x0f, 0x1b, 0x04, 0x08, }, 5, 0, "", "", 22 + "f3 0f 1b 04 08 \tbndmk (%rax,%rcx,1),%bnd0",}, 23 + {{0xf3, 0x0f, 0x1b, 0x04, 0xc8, }, 5, 0, "", "", 24 + "f3 0f 1b 04 c8 \tbndmk (%rax,%rcx,8),%bnd0",}, 25 + {{0xf3, 0x0f, 0x1b, 0x40, 0x12, }, 5, 0, "", "", 26 + "f3 0f 1b 40 12 \tbndmk 0x12(%rax),%bnd0",}, 27 + {{0xf3, 0x0f, 0x1b, 0x45, 0x12, }, 5, 0, "", "", 28 + "f3 0f 1b 45 12 \tbndmk 0x12(%rbp),%bnd0",}, 29 + {{0xf3, 0x0f, 0x1b, 0x44, 0x01, 0x12, }, 6, 0, "", "", 30 + "f3 0f 1b 44 01 12 \tbndmk 0x12(%rcx,%rax,1),%bnd0",}, 31 + {{0xf3, 0x0f, 0x1b, 0x44, 0x05, 0x12, }, 6, 0, "", "", 32 + "f3 0f 1b 44 05 12 \tbndmk 0x12(%rbp,%rax,1),%bnd0",}, 33 + {{0xf3, 0x0f, 0x1b, 0x44, 0x08, 0x12, }, 6, 0, "", "", 34 + "f3 0f 1b 44 08 12 \tbndmk 0x12(%rax,%rcx,1),%bnd0",}, 35 + {{0xf3, 0x0f, 0x1b, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 36 + "f3 0f 1b 44 c8 12 \tbndmk 0x12(%rax,%rcx,8),%bnd0",}, 37 + {{0xf3, 0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 38 + "f3 0f 1b 80 78 56 34 12 \tbndmk 0x12345678(%rax),%bnd0",}, 39 + {{0xf3, 0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 40 + "f3 0f 1b 85 78 56 34 12 \tbndmk 0x12345678(%rbp),%bnd0",}, 41 + {{0xf3, 0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 42 + "f3 0f 1b 84 01 78 56 34 12 \tbndmk 0x12345678(%rcx,%rax,1),%bnd0",}, 43 + {{0xf3, 0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 44 + "f3 0f 1b 84 05 78 56 34 12 \tbndmk 0x12345678(%rbp,%rax,1),%bnd0",}, 45 + {{0xf3, 0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 46 + "f3 0f 1b 84 08 78 56 34 12 \tbndmk 0x12345678(%rax,%rcx,1),%bnd0",}, 47 + {{0xf3, 0x0f, 0x1b, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 48 + "f3 0f 1b 84 c8 78 56 34 12 \tbndmk 0x12345678(%rax,%rcx,8),%bnd0",}, 49 + {{0xf3, 0x0f, 0x1a, 0x00, }, 4, 0, "", "", 50 + "f3 0f 1a 00 \tbndcl (%rax),%bnd0",}, 51 + {{0xf3, 0x41, 0x0f, 0x1a, 0x00, }, 5, 0, "", "", 52 + "f3 41 0f 1a 00 \tbndcl (%r8),%bnd0",}, 53 + {{0xf3, 0x0f, 0x1a, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 54 + "f3 0f 1a 04 25 78 56 34 12 \tbndcl 0x12345678,%bnd0",}, 55 + {{0xf3, 0x0f, 0x1a, 0x18, }, 4, 0, "", "", 56 + "f3 0f 1a 18 \tbndcl (%rax),%bnd3",}, 57 + {{0xf3, 0x0f, 0x1a, 0x04, 0x01, }, 5, 0, "", "", 58 + "f3 0f 1a 04 01 \tbndcl (%rcx,%rax,1),%bnd0",}, 59 + {{0xf3, 0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 60 + "f3 0f 1a 04 05 78 56 34 12 \tbndcl 0x12345678(,%rax,1),%bnd0",}, 61 + {{0xf3, 0x0f, 0x1a, 0x04, 0x08, }, 5, 0, "", "", 62 + "f3 0f 1a 04 08 \tbndcl (%rax,%rcx,1),%bnd0",}, 63 + {{0xf3, 0x0f, 0x1a, 0x04, 0xc8, }, 5, 0, "", "", 64 + "f3 0f 1a 04 c8 \tbndcl (%rax,%rcx,8),%bnd0",}, 65 + {{0xf3, 0x0f, 0x1a, 0x40, 0x12, }, 5, 0, "", "", 66 + "f3 0f 1a 40 12 \tbndcl 0x12(%rax),%bnd0",}, 67 + {{0xf3, 0x0f, 0x1a, 0x45, 0x12, }, 5, 0, "", "", 68 + "f3 0f 1a 45 12 \tbndcl 0x12(%rbp),%bnd0",}, 69 + {{0xf3, 0x0f, 0x1a, 0x44, 0x01, 0x12, }, 6, 0, "", "", 70 + "f3 0f 1a 44 01 12 \tbndcl 0x12(%rcx,%rax,1),%bnd0",}, 71 + {{0xf3, 0x0f, 0x1a, 0x44, 0x05, 0x12, }, 6, 0, "", "", 72 + "f3 0f 1a 44 05 12 \tbndcl 0x12(%rbp,%rax,1),%bnd0",}, 73 + {{0xf3, 0x0f, 0x1a, 0x44, 0x08, 0x12, }, 6, 0, "", "", 74 + "f3 0f 1a 44 08 12 \tbndcl 0x12(%rax,%rcx,1),%bnd0",}, 75 + {{0xf3, 0x0f, 0x1a, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 76 + "f3 0f 1a 44 c8 12 \tbndcl 0x12(%rax,%rcx,8),%bnd0",}, 77 + {{0xf3, 0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 78 + "f3 0f 1a 80 78 56 34 12 \tbndcl 0x12345678(%rax),%bnd0",}, 79 + {{0xf3, 0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 80 + "f3 0f 1a 85 78 56 34 12 \tbndcl 0x12345678(%rbp),%bnd0",}, 81 + {{0xf3, 0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 82 + "f3 0f 1a 84 01 78 56 34 12 \tbndcl 0x12345678(%rcx,%rax,1),%bnd0",}, 83 + {{0xf3, 0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 84 + "f3 0f 1a 84 05 78 56 34 12 \tbndcl 0x12345678(%rbp,%rax,1),%bnd0",}, 85 + {{0xf3, 0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 86 + "f3 0f 1a 84 08 78 56 34 12 \tbndcl 0x12345678(%rax,%rcx,1),%bnd0",}, 87 + {{0xf3, 0x0f, 0x1a, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 88 + "f3 0f 1a 84 c8 78 56 34 12 \tbndcl 0x12345678(%rax,%rcx,8),%bnd0",}, 89 + {{0xf3, 0x0f, 0x1a, 0xc0, }, 4, 0, "", "", 90 + "f3 0f 1a c0 \tbndcl %rax,%bnd0",}, 91 + {{0xf2, 0x0f, 0x1a, 0x00, }, 4, 0, "", "", 92 + "f2 0f 1a 00 \tbndcu (%rax),%bnd0",}, 93 + {{0xf2, 0x41, 0x0f, 0x1a, 0x00, }, 5, 0, "", "", 94 + "f2 41 0f 1a 00 \tbndcu (%r8),%bnd0",}, 95 + {{0xf2, 0x0f, 0x1a, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 96 + "f2 0f 1a 04 25 78 56 34 12 \tbndcu 0x12345678,%bnd0",}, 97 + {{0xf2, 0x0f, 0x1a, 0x18, }, 4, 0, "", "", 98 + "f2 0f 1a 18 \tbndcu (%rax),%bnd3",}, 99 + {{0xf2, 0x0f, 0x1a, 0x04, 0x01, }, 5, 0, "", "", 100 + "f2 0f 1a 04 01 \tbndcu (%rcx,%rax,1),%bnd0",}, 101 + {{0xf2, 0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 102 + "f2 0f 1a 04 05 78 56 34 12 \tbndcu 0x12345678(,%rax,1),%bnd0",}, 103 + {{0xf2, 0x0f, 0x1a, 0x04, 0x08, }, 5, 0, "", "", 104 + "f2 0f 1a 04 08 \tbndcu (%rax,%rcx,1),%bnd0",}, 105 + {{0xf2, 0x0f, 0x1a, 0x04, 0xc8, }, 5, 0, "", "", 106 + "f2 0f 1a 04 c8 \tbndcu (%rax,%rcx,8),%bnd0",}, 107 + {{0xf2, 0x0f, 0x1a, 0x40, 0x12, }, 5, 0, "", "", 108 + "f2 0f 1a 40 12 \tbndcu 0x12(%rax),%bnd0",}, 109 + {{0xf2, 0x0f, 0x1a, 0x45, 0x12, }, 5, 0, "", "", 110 + "f2 0f 1a 45 12 \tbndcu 0x12(%rbp),%bnd0",}, 111 + {{0xf2, 0x0f, 0x1a, 0x44, 0x01, 0x12, }, 6, 0, "", "", 112 + "f2 0f 1a 44 01 12 \tbndcu 0x12(%rcx,%rax,1),%bnd0",}, 113 + {{0xf2, 0x0f, 0x1a, 0x44, 0x05, 0x12, }, 6, 0, "", "", 114 + "f2 0f 1a 44 05 12 \tbndcu 0x12(%rbp,%rax,1),%bnd0",}, 115 + {{0xf2, 0x0f, 0x1a, 0x44, 0x08, 0x12, }, 6, 0, "", "", 116 + "f2 0f 1a 44 08 12 \tbndcu 0x12(%rax,%rcx,1),%bnd0",}, 117 + {{0xf2, 0x0f, 0x1a, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 118 + "f2 0f 1a 44 c8 12 \tbndcu 0x12(%rax,%rcx,8),%bnd0",}, 119 + {{0xf2, 0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 120 + "f2 0f 1a 80 78 56 34 12 \tbndcu 0x12345678(%rax),%bnd0",}, 121 + {{0xf2, 0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 122 + "f2 0f 1a 85 78 56 34 12 \tbndcu 0x12345678(%rbp),%bnd0",}, 123 + {{0xf2, 0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 124 + "f2 0f 1a 84 01 78 56 34 12 \tbndcu 0x12345678(%rcx,%rax,1),%bnd0",}, 125 + {{0xf2, 0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 126 + "f2 0f 1a 84 05 78 56 34 12 \tbndcu 0x12345678(%rbp,%rax,1),%bnd0",}, 127 + {{0xf2, 0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 128 + "f2 0f 1a 84 08 78 56 34 12 \tbndcu 0x12345678(%rax,%rcx,1),%bnd0",}, 129 + {{0xf2, 0x0f, 0x1a, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 130 + "f2 0f 1a 84 c8 78 56 34 12 \tbndcu 0x12345678(%rax,%rcx,8),%bnd0",}, 131 + {{0xf2, 0x0f, 0x1a, 0xc0, }, 4, 0, "", "", 132 + "f2 0f 1a c0 \tbndcu %rax,%bnd0",}, 133 + {{0xf2, 0x0f, 0x1b, 0x00, }, 4, 0, "", "", 134 + "f2 0f 1b 00 \tbndcn (%rax),%bnd0",}, 135 + {{0xf2, 0x41, 0x0f, 0x1b, 0x00, }, 5, 0, "", "", 136 + "f2 41 0f 1b 00 \tbndcn (%r8),%bnd0",}, 137 + {{0xf2, 0x0f, 0x1b, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 138 + "f2 0f 1b 04 25 78 56 34 12 \tbndcn 0x12345678,%bnd0",}, 139 + {{0xf2, 0x0f, 0x1b, 0x18, }, 4, 0, "", "", 140 + "f2 0f 1b 18 \tbndcn (%rax),%bnd3",}, 141 + {{0xf2, 0x0f, 0x1b, 0x04, 0x01, }, 5, 0, "", "", 142 + "f2 0f 1b 04 01 \tbndcn (%rcx,%rax,1),%bnd0",}, 143 + {{0xf2, 0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 144 + "f2 0f 1b 04 05 78 56 34 12 \tbndcn 0x12345678(,%rax,1),%bnd0",}, 145 + {{0xf2, 0x0f, 0x1b, 0x04, 0x08, }, 5, 0, "", "", 146 + "f2 0f 1b 04 08 \tbndcn (%rax,%rcx,1),%bnd0",}, 147 + {{0xf2, 0x0f, 0x1b, 0x04, 0xc8, }, 5, 0, "", "", 148 + "f2 0f 1b 04 c8 \tbndcn (%rax,%rcx,8),%bnd0",}, 149 + {{0xf2, 0x0f, 0x1b, 0x40, 0x12, }, 5, 0, "", "", 150 + "f2 0f 1b 40 12 \tbndcn 0x12(%rax),%bnd0",}, 151 + {{0xf2, 0x0f, 0x1b, 0x45, 0x12, }, 5, 0, "", "", 152 + "f2 0f 1b 45 12 \tbndcn 0x12(%rbp),%bnd0",}, 153 + {{0xf2, 0x0f, 0x1b, 0x44, 0x01, 0x12, }, 6, 0, "", "", 154 + "f2 0f 1b 44 01 12 \tbndcn 0x12(%rcx,%rax,1),%bnd0",}, 155 + {{0xf2, 0x0f, 0x1b, 0x44, 0x05, 0x12, }, 6, 0, "", "", 156 + "f2 0f 1b 44 05 12 \tbndcn 0x12(%rbp,%rax,1),%bnd0",}, 157 + {{0xf2, 0x0f, 0x1b, 0x44, 0x08, 0x12, }, 6, 0, "", "", 158 + "f2 0f 1b 44 08 12 \tbndcn 0x12(%rax,%rcx,1),%bnd0",}, 159 + {{0xf2, 0x0f, 0x1b, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 160 + "f2 0f 1b 44 c8 12 \tbndcn 0x12(%rax,%rcx,8),%bnd0",}, 161 + {{0xf2, 0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 162 + "f2 0f 1b 80 78 56 34 12 \tbndcn 0x12345678(%rax),%bnd0",}, 163 + {{0xf2, 0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 164 + "f2 0f 1b 85 78 56 34 12 \tbndcn 0x12345678(%rbp),%bnd0",}, 165 + {{0xf2, 0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 166 + "f2 0f 1b 84 01 78 56 34 12 \tbndcn 0x12345678(%rcx,%rax,1),%bnd0",}, 167 + {{0xf2, 0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 168 + "f2 0f 1b 84 05 78 56 34 12 \tbndcn 0x12345678(%rbp,%rax,1),%bnd0",}, 169 + {{0xf2, 0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 170 + "f2 0f 1b 84 08 78 56 34 12 \tbndcn 0x12345678(%rax,%rcx,1),%bnd0",}, 171 + {{0xf2, 0x0f, 0x1b, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 172 + "f2 0f 1b 84 c8 78 56 34 12 \tbndcn 0x12345678(%rax,%rcx,8),%bnd0",}, 173 + {{0xf2, 0x0f, 0x1b, 0xc0, }, 4, 0, "", "", 174 + "f2 0f 1b c0 \tbndcn %rax,%bnd0",}, 175 + {{0x66, 0x0f, 0x1a, 0x00, }, 4, 0, "", "", 176 + "66 0f 1a 00 \tbndmov (%rax),%bnd0",}, 177 + {{0x66, 0x41, 0x0f, 0x1a, 0x00, }, 5, 0, "", "", 178 + "66 41 0f 1a 00 \tbndmov (%r8),%bnd0",}, 179 + {{0x66, 0x0f, 0x1a, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 180 + "66 0f 1a 04 25 78 56 34 12 \tbndmov 0x12345678,%bnd0",}, 181 + {{0x66, 0x0f, 0x1a, 0x18, }, 4, 0, "", "", 182 + "66 0f 1a 18 \tbndmov (%rax),%bnd3",}, 183 + {{0x66, 0x0f, 0x1a, 0x04, 0x01, }, 5, 0, "", "", 184 + "66 0f 1a 04 01 \tbndmov (%rcx,%rax,1),%bnd0",}, 185 + {{0x66, 0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 186 + "66 0f 1a 04 05 78 56 34 12 \tbndmov 0x12345678(,%rax,1),%bnd0",}, 187 + {{0x66, 0x0f, 0x1a, 0x04, 0x08, }, 5, 0, "", "", 188 + "66 0f 1a 04 08 \tbndmov (%rax,%rcx,1),%bnd0",}, 189 + {{0x66, 0x0f, 0x1a, 0x04, 0xc8, }, 5, 0, "", "", 190 + "66 0f 1a 04 c8 \tbndmov (%rax,%rcx,8),%bnd0",}, 191 + {{0x66, 0x0f, 0x1a, 0x40, 0x12, }, 5, 0, "", "", 192 + "66 0f 1a 40 12 \tbndmov 0x12(%rax),%bnd0",}, 193 + {{0x66, 0x0f, 0x1a, 0x45, 0x12, }, 5, 0, "", "", 194 + "66 0f 1a 45 12 \tbndmov 0x12(%rbp),%bnd0",}, 195 + {{0x66, 0x0f, 0x1a, 0x44, 0x01, 0x12, }, 6, 0, "", "", 196 + "66 0f 1a 44 01 12 \tbndmov 0x12(%rcx,%rax,1),%bnd0",}, 197 + {{0x66, 0x0f, 0x1a, 0x44, 0x05, 0x12, }, 6, 0, "", "", 198 + "66 0f 1a 44 05 12 \tbndmov 0x12(%rbp,%rax,1),%bnd0",}, 199 + {{0x66, 0x0f, 0x1a, 0x44, 0x08, 0x12, }, 6, 0, "", "", 200 + "66 0f 1a 44 08 12 \tbndmov 0x12(%rax,%rcx,1),%bnd0",}, 201 + {{0x66, 0x0f, 0x1a, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 202 + "66 0f 1a 44 c8 12 \tbndmov 0x12(%rax,%rcx,8),%bnd0",}, 203 + {{0x66, 0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 204 + "66 0f 1a 80 78 56 34 12 \tbndmov 0x12345678(%rax),%bnd0",}, 205 + {{0x66, 0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 206 + "66 0f 1a 85 78 56 34 12 \tbndmov 0x12345678(%rbp),%bnd0",}, 207 + {{0x66, 0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 208 + "66 0f 1a 84 01 78 56 34 12 \tbndmov 0x12345678(%rcx,%rax,1),%bnd0",}, 209 + {{0x66, 0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 210 + "66 0f 1a 84 05 78 56 34 12 \tbndmov 0x12345678(%rbp,%rax,1),%bnd0",}, 211 + {{0x66, 0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 212 + "66 0f 1a 84 08 78 56 34 12 \tbndmov 0x12345678(%rax,%rcx,1),%bnd0",}, 213 + {{0x66, 0x0f, 0x1a, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 214 + "66 0f 1a 84 c8 78 56 34 12 \tbndmov 0x12345678(%rax,%rcx,8),%bnd0",}, 215 + {{0x66, 0x0f, 0x1b, 0x00, }, 4, 0, "", "", 216 + "66 0f 1b 00 \tbndmov %bnd0,(%rax)",}, 217 + {{0x66, 0x41, 0x0f, 0x1b, 0x00, }, 5, 0, "", "", 218 + "66 41 0f 1b 00 \tbndmov %bnd0,(%r8)",}, 219 + {{0x66, 0x0f, 0x1b, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 220 + "66 0f 1b 04 25 78 56 34 12 \tbndmov %bnd0,0x12345678",}, 221 + {{0x66, 0x0f, 0x1b, 0x18, }, 4, 0, "", "", 222 + "66 0f 1b 18 \tbndmov %bnd3,(%rax)",}, 223 + {{0x66, 0x0f, 0x1b, 0x04, 0x01, }, 5, 0, "", "", 224 + "66 0f 1b 04 01 \tbndmov %bnd0,(%rcx,%rax,1)",}, 225 + {{0x66, 0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 226 + "66 0f 1b 04 05 78 56 34 12 \tbndmov %bnd0,0x12345678(,%rax,1)",}, 227 + {{0x66, 0x0f, 0x1b, 0x04, 0x08, }, 5, 0, "", "", 228 + "66 0f 1b 04 08 \tbndmov %bnd0,(%rax,%rcx,1)",}, 229 + {{0x66, 0x0f, 0x1b, 0x04, 0xc8, }, 5, 0, "", "", 230 + "66 0f 1b 04 c8 \tbndmov %bnd0,(%rax,%rcx,8)",}, 231 + {{0x66, 0x0f, 0x1b, 0x40, 0x12, }, 5, 0, "", "", 232 + "66 0f 1b 40 12 \tbndmov %bnd0,0x12(%rax)",}, 233 + {{0x66, 0x0f, 0x1b, 0x45, 0x12, }, 5, 0, "", "", 234 + "66 0f 1b 45 12 \tbndmov %bnd0,0x12(%rbp)",}, 235 + {{0x66, 0x0f, 0x1b, 0x44, 0x01, 0x12, }, 6, 0, "", "", 236 + "66 0f 1b 44 01 12 \tbndmov %bnd0,0x12(%rcx,%rax,1)",}, 237 + {{0x66, 0x0f, 0x1b, 0x44, 0x05, 0x12, }, 6, 0, "", "", 238 + "66 0f 1b 44 05 12 \tbndmov %bnd0,0x12(%rbp,%rax,1)",}, 239 + {{0x66, 0x0f, 0x1b, 0x44, 0x08, 0x12, }, 6, 0, "", "", 240 + "66 0f 1b 44 08 12 \tbndmov %bnd0,0x12(%rax,%rcx,1)",}, 241 + {{0x66, 0x0f, 0x1b, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 242 + "66 0f 1b 44 c8 12 \tbndmov %bnd0,0x12(%rax,%rcx,8)",}, 243 + {{0x66, 0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 244 + "66 0f 1b 80 78 56 34 12 \tbndmov %bnd0,0x12345678(%rax)",}, 245 + {{0x66, 0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 246 + "66 0f 1b 85 78 56 34 12 \tbndmov %bnd0,0x12345678(%rbp)",}, 247 + {{0x66, 0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 248 + "66 0f 1b 84 01 78 56 34 12 \tbndmov %bnd0,0x12345678(%rcx,%rax,1)",}, 249 + {{0x66, 0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 250 + "66 0f 1b 84 05 78 56 34 12 \tbndmov %bnd0,0x12345678(%rbp,%rax,1)",}, 251 + {{0x66, 0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 252 + "66 0f 1b 84 08 78 56 34 12 \tbndmov %bnd0,0x12345678(%rax,%rcx,1)",}, 253 + {{0x66, 0x0f, 0x1b, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 254 + "66 0f 1b 84 c8 78 56 34 12 \tbndmov %bnd0,0x12345678(%rax,%rcx,8)",}, 255 + {{0x66, 0x0f, 0x1a, 0xc8, }, 4, 0, "", "", 256 + "66 0f 1a c8 \tbndmov %bnd0,%bnd1",}, 257 + {{0x66, 0x0f, 0x1a, 0xc1, }, 4, 0, "", "", 258 + "66 0f 1a c1 \tbndmov %bnd1,%bnd0",}, 259 + {{0x0f, 0x1a, 0x00, }, 3, 0, "", "", 260 + "0f 1a 00 \tbndldx (%rax),%bnd0",}, 261 + {{0x41, 0x0f, 0x1a, 0x00, }, 4, 0, "", "", 262 + "41 0f 1a 00 \tbndldx (%r8),%bnd0",}, 263 + {{0x0f, 0x1a, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 264 + "0f 1a 04 25 78 56 34 12 \tbndldx 0x12345678,%bnd0",}, 265 + {{0x0f, 0x1a, 0x18, }, 3, 0, "", "", 266 + "0f 1a 18 \tbndldx (%rax),%bnd3",}, 267 + {{0x0f, 0x1a, 0x04, 0x01, }, 4, 0, "", "", 268 + "0f 1a 04 01 \tbndldx (%rcx,%rax,1),%bnd0",}, 269 + {{0x0f, 0x1a, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 270 + "0f 1a 04 05 78 56 34 12 \tbndldx 0x12345678(,%rax,1),%bnd0",}, 271 + {{0x0f, 0x1a, 0x04, 0x08, }, 4, 0, "", "", 272 + "0f 1a 04 08 \tbndldx (%rax,%rcx,1),%bnd0",}, 273 + {{0x0f, 0x1a, 0x40, 0x12, }, 4, 0, "", "", 274 + "0f 1a 40 12 \tbndldx 0x12(%rax),%bnd0",}, 275 + {{0x0f, 0x1a, 0x45, 0x12, }, 4, 0, "", "", 276 + "0f 1a 45 12 \tbndldx 0x12(%rbp),%bnd0",}, 277 + {{0x0f, 0x1a, 0x44, 0x01, 0x12, }, 5, 0, "", "", 278 + "0f 1a 44 01 12 \tbndldx 0x12(%rcx,%rax,1),%bnd0",}, 279 + {{0x0f, 0x1a, 0x44, 0x05, 0x12, }, 5, 0, "", "", 280 + "0f 1a 44 05 12 \tbndldx 0x12(%rbp,%rax,1),%bnd0",}, 281 + {{0x0f, 0x1a, 0x44, 0x08, 0x12, }, 5, 0, "", "", 282 + "0f 1a 44 08 12 \tbndldx 0x12(%rax,%rcx,1),%bnd0",}, 283 + {{0x0f, 0x1a, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 284 + "0f 1a 80 78 56 34 12 \tbndldx 0x12345678(%rax),%bnd0",}, 285 + {{0x0f, 0x1a, 0x85, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 286 + "0f 1a 85 78 56 34 12 \tbndldx 0x12345678(%rbp),%bnd0",}, 287 + {{0x0f, 0x1a, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 288 + "0f 1a 84 01 78 56 34 12 \tbndldx 0x12345678(%rcx,%rax,1),%bnd0",}, 289 + {{0x0f, 0x1a, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 290 + "0f 1a 84 05 78 56 34 12 \tbndldx 0x12345678(%rbp,%rax,1),%bnd0",}, 291 + {{0x0f, 0x1a, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 292 + "0f 1a 84 08 78 56 34 12 \tbndldx 0x12345678(%rax,%rcx,1),%bnd0",}, 293 + {{0x0f, 0x1b, 0x00, }, 3, 0, "", "", 294 + "0f 1b 00 \tbndstx %bnd0,(%rax)",}, 295 + {{0x41, 0x0f, 0x1b, 0x00, }, 4, 0, "", "", 296 + "41 0f 1b 00 \tbndstx %bnd0,(%r8)",}, 297 + {{0x0f, 0x1b, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 298 + "0f 1b 04 25 78 56 34 12 \tbndstx %bnd0,0x12345678",}, 299 + {{0x0f, 0x1b, 0x18, }, 3, 0, "", "", 300 + "0f 1b 18 \tbndstx %bnd3,(%rax)",}, 301 + {{0x0f, 0x1b, 0x04, 0x01, }, 4, 0, "", "", 302 + "0f 1b 04 01 \tbndstx %bnd0,(%rcx,%rax,1)",}, 303 + {{0x0f, 0x1b, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 304 + "0f 1b 04 05 78 56 34 12 \tbndstx %bnd0,0x12345678(,%rax,1)",}, 305 + {{0x0f, 0x1b, 0x04, 0x08, }, 4, 0, "", "", 306 + "0f 1b 04 08 \tbndstx %bnd0,(%rax,%rcx,1)",}, 307 + {{0x0f, 0x1b, 0x40, 0x12, }, 4, 0, "", "", 308 + "0f 1b 40 12 \tbndstx %bnd0,0x12(%rax)",}, 309 + {{0x0f, 0x1b, 0x45, 0x12, }, 4, 0, "", "", 310 + "0f 1b 45 12 \tbndstx %bnd0,0x12(%rbp)",}, 311 + {{0x0f, 0x1b, 0x44, 0x01, 0x12, }, 5, 0, "", "", 312 + "0f 1b 44 01 12 \tbndstx %bnd0,0x12(%rcx,%rax,1)",}, 313 + {{0x0f, 0x1b, 0x44, 0x05, 0x12, }, 5, 0, "", "", 314 + "0f 1b 44 05 12 \tbndstx %bnd0,0x12(%rbp,%rax,1)",}, 315 + {{0x0f, 0x1b, 0x44, 0x08, 0x12, }, 5, 0, "", "", 316 + "0f 1b 44 08 12 \tbndstx %bnd0,0x12(%rax,%rcx,1)",}, 317 + {{0x0f, 0x1b, 0x80, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 318 + "0f 1b 80 78 56 34 12 \tbndstx %bnd0,0x12345678(%rax)",}, 319 + {{0x0f, 0x1b, 0x85, 0x78, 0x56, 0x34, 0x12, }, 7, 0, "", "", 320 + "0f 1b 85 78 56 34 12 \tbndstx %bnd0,0x12345678(%rbp)",}, 321 + {{0x0f, 0x1b, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 322 + "0f 1b 84 01 78 56 34 12 \tbndstx %bnd0,0x12345678(%rcx,%rax,1)",}, 323 + {{0x0f, 0x1b, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 324 + "0f 1b 84 05 78 56 34 12 \tbndstx %bnd0,0x12345678(%rbp,%rax,1)",}, 325 + {{0x0f, 0x1b, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 326 + "0f 1b 84 08 78 56 34 12 \tbndstx %bnd0,0x12345678(%rax,%rcx,1)",}, 327 + {{0xf2, 0xe8, 0x00, 0x00, 0x00, 0x00, }, 6, 0, "call", "unconditional", 328 + "f2 e8 00 00 00 00 \tbnd callq 3f6 <main+0x3f6>",}, 329 + {{0x67, 0xf2, 0xff, 0x10, }, 4, 0, "call", "indirect", 330 + "67 f2 ff 10 \tbnd callq *(%eax)",}, 331 + {{0xf2, 0xc3, }, 2, 0, "ret", "indirect", 332 + "f2 c3 \tbnd retq ",}, 333 + {{0xf2, 0xe9, 0x00, 0x00, 0x00, 0x00, }, 6, 0, "jmp", "unconditional", 334 + "f2 e9 00 00 00 00 \tbnd jmpq 402 <main+0x402>",}, 335 + {{0xf2, 0xe9, 0x00, 0x00, 0x00, 0x00, }, 6, 0, "jmp", "unconditional", 336 + "f2 e9 00 00 00 00 \tbnd jmpq 408 <main+0x408>",}, 337 + {{0x67, 0xf2, 0xff, 0x21, }, 4, 0, "jmp", "indirect", 338 + "67 f2 ff 21 \tbnd jmpq *(%ecx)",}, 339 + {{0xf2, 0x0f, 0x85, 0x00, 0x00, 0x00, 0x00, }, 7, 0, "jcc", "conditional", 340 + "f2 0f 85 00 00 00 00 \tbnd jne 413 <main+0x413>",}, 341 + {{0x0f, 0x3a, 0xcc, 0xc1, 0x00, }, 5, 0, "", "", 342 + "0f 3a cc c1 00 \tsha1rnds4 $0x0,%xmm1,%xmm0",}, 343 + {{0x0f, 0x3a, 0xcc, 0xd7, 0x91, }, 5, 0, "", "", 344 + "0f 3a cc d7 91 \tsha1rnds4 $0x91,%xmm7,%xmm2",}, 345 + {{0x41, 0x0f, 0x3a, 0xcc, 0xc0, 0x91, }, 6, 0, "", "", 346 + "41 0f 3a cc c0 91 \tsha1rnds4 $0x91,%xmm8,%xmm0",}, 347 + {{0x44, 0x0f, 0x3a, 0xcc, 0xc7, 0x91, }, 6, 0, "", "", 348 + "44 0f 3a cc c7 91 \tsha1rnds4 $0x91,%xmm7,%xmm8",}, 349 + {{0x45, 0x0f, 0x3a, 0xcc, 0xc7, 0x91, }, 6, 0, "", "", 350 + "45 0f 3a cc c7 91 \tsha1rnds4 $0x91,%xmm15,%xmm8",}, 351 + {{0x0f, 0x3a, 0xcc, 0x00, 0x91, }, 5, 0, "", "", 352 + "0f 3a cc 00 91 \tsha1rnds4 $0x91,(%rax),%xmm0",}, 353 + {{0x41, 0x0f, 0x3a, 0xcc, 0x00, 0x91, }, 6, 0, "", "", 354 + "41 0f 3a cc 00 91 \tsha1rnds4 $0x91,(%r8),%xmm0",}, 355 + {{0x0f, 0x3a, 0xcc, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "", 356 + "0f 3a cc 04 25 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678,%xmm0",}, 357 + {{0x0f, 0x3a, 0xcc, 0x18, 0x91, }, 5, 0, "", "", 358 + "0f 3a cc 18 91 \tsha1rnds4 $0x91,(%rax),%xmm3",}, 359 + {{0x0f, 0x3a, 0xcc, 0x04, 0x01, 0x91, }, 6, 0, "", "", 360 + "0f 3a cc 04 01 91 \tsha1rnds4 $0x91,(%rcx,%rax,1),%xmm0",}, 361 + {{0x0f, 0x3a, 0xcc, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "", 362 + "0f 3a cc 04 05 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(,%rax,1),%xmm0",}, 363 + {{0x0f, 0x3a, 0xcc, 0x04, 0x08, 0x91, }, 6, 0, "", "", 364 + "0f 3a cc 04 08 91 \tsha1rnds4 $0x91,(%rax,%rcx,1),%xmm0",}, 365 + {{0x0f, 0x3a, 0xcc, 0x04, 0xc8, 0x91, }, 6, 0, "", "", 366 + "0f 3a cc 04 c8 91 \tsha1rnds4 $0x91,(%rax,%rcx,8),%xmm0",}, 367 + {{0x0f, 0x3a, 0xcc, 0x40, 0x12, 0x91, }, 6, 0, "", "", 368 + "0f 3a cc 40 12 91 \tsha1rnds4 $0x91,0x12(%rax),%xmm0",}, 369 + {{0x0f, 0x3a, 0xcc, 0x45, 0x12, 0x91, }, 6, 0, "", "", 370 + "0f 3a cc 45 12 91 \tsha1rnds4 $0x91,0x12(%rbp),%xmm0",}, 371 + {{0x0f, 0x3a, 0xcc, 0x44, 0x01, 0x12, 0x91, }, 7, 0, "", "", 372 + "0f 3a cc 44 01 12 91 \tsha1rnds4 $0x91,0x12(%rcx,%rax,1),%xmm0",}, 373 + {{0x0f, 0x3a, 0xcc, 0x44, 0x05, 0x12, 0x91, }, 7, 0, "", "", 374 + "0f 3a cc 44 05 12 91 \tsha1rnds4 $0x91,0x12(%rbp,%rax,1),%xmm0",}, 375 + {{0x0f, 0x3a, 0xcc, 0x44, 0x08, 0x12, 0x91, }, 7, 0, "", "", 376 + "0f 3a cc 44 08 12 91 \tsha1rnds4 $0x91,0x12(%rax,%rcx,1),%xmm0",}, 377 + {{0x0f, 0x3a, 0xcc, 0x44, 0xc8, 0x12, 0x91, }, 7, 0, "", "", 378 + "0f 3a cc 44 c8 12 91 \tsha1rnds4 $0x91,0x12(%rax,%rcx,8),%xmm0",}, 379 + {{0x0f, 0x3a, 0xcc, 0x80, 0x78, 0x56, 0x34, 0x12, 0x91, }, 9, 0, "", "", 380 + "0f 3a cc 80 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rax),%xmm0",}, 381 + {{0x0f, 0x3a, 0xcc, 0x85, 0x78, 0x56, 0x34, 0x12, 0x91, }, 9, 0, "", "", 382 + "0f 3a cc 85 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rbp),%xmm0",}, 383 + {{0x0f, 0x3a, 0xcc, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "", 384 + "0f 3a cc 84 01 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rcx,%rax,1),%xmm0",}, 385 + {{0x0f, 0x3a, 0xcc, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "", 386 + "0f 3a cc 84 05 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rbp,%rax,1),%xmm0",}, 387 + {{0x0f, 0x3a, 0xcc, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "", 388 + "0f 3a cc 84 08 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rax,%rcx,1),%xmm0",}, 389 + {{0x0f, 0x3a, 0xcc, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, 0x91, }, 10, 0, "", "", 390 + "0f 3a cc 84 c8 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rax,%rcx,8),%xmm0",}, 391 + {{0x44, 0x0f, 0x3a, 0xcc, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, 0x91, }, 11, 0, "", "", 392 + "44 0f 3a cc bc c8 78 56 34 12 91 \tsha1rnds4 $0x91,0x12345678(%rax,%rcx,8),%xmm15",}, 393 + {{0x0f, 0x38, 0xc8, 0xc1, }, 4, 0, "", "", 394 + "0f 38 c8 c1 \tsha1nexte %xmm1,%xmm0",}, 395 + {{0x0f, 0x38, 0xc8, 0xd7, }, 4, 0, "", "", 396 + "0f 38 c8 d7 \tsha1nexte %xmm7,%xmm2",}, 397 + {{0x41, 0x0f, 0x38, 0xc8, 0xc0, }, 5, 0, "", "", 398 + "41 0f 38 c8 c0 \tsha1nexte %xmm8,%xmm0",}, 399 + {{0x44, 0x0f, 0x38, 0xc8, 0xc7, }, 5, 0, "", "", 400 + "44 0f 38 c8 c7 \tsha1nexte %xmm7,%xmm8",}, 401 + {{0x45, 0x0f, 0x38, 0xc8, 0xc7, }, 5, 0, "", "", 402 + "45 0f 38 c8 c7 \tsha1nexte %xmm15,%xmm8",}, 403 + {{0x0f, 0x38, 0xc8, 0x00, }, 4, 0, "", "", 404 + "0f 38 c8 00 \tsha1nexte (%rax),%xmm0",}, 405 + {{0x41, 0x0f, 0x38, 0xc8, 0x00, }, 5, 0, "", "", 406 + "41 0f 38 c8 00 \tsha1nexte (%r8),%xmm0",}, 407 + {{0x0f, 0x38, 0xc8, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 408 + "0f 38 c8 04 25 78 56 34 12 \tsha1nexte 0x12345678,%xmm0",}, 409 + {{0x0f, 0x38, 0xc8, 0x18, }, 4, 0, "", "", 410 + "0f 38 c8 18 \tsha1nexte (%rax),%xmm3",}, 411 + {{0x0f, 0x38, 0xc8, 0x04, 0x01, }, 5, 0, "", "", 412 + "0f 38 c8 04 01 \tsha1nexte (%rcx,%rax,1),%xmm0",}, 413 + {{0x0f, 0x38, 0xc8, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 414 + "0f 38 c8 04 05 78 56 34 12 \tsha1nexte 0x12345678(,%rax,1),%xmm0",}, 415 + {{0x0f, 0x38, 0xc8, 0x04, 0x08, }, 5, 0, "", "", 416 + "0f 38 c8 04 08 \tsha1nexte (%rax,%rcx,1),%xmm0",}, 417 + {{0x0f, 0x38, 0xc8, 0x04, 0xc8, }, 5, 0, "", "", 418 + "0f 38 c8 04 c8 \tsha1nexte (%rax,%rcx,8),%xmm0",}, 419 + {{0x0f, 0x38, 0xc8, 0x40, 0x12, }, 5, 0, "", "", 420 + "0f 38 c8 40 12 \tsha1nexte 0x12(%rax),%xmm0",}, 421 + {{0x0f, 0x38, 0xc8, 0x45, 0x12, }, 5, 0, "", "", 422 + "0f 38 c8 45 12 \tsha1nexte 0x12(%rbp),%xmm0",}, 423 + {{0x0f, 0x38, 0xc8, 0x44, 0x01, 0x12, }, 6, 0, "", "", 424 + "0f 38 c8 44 01 12 \tsha1nexte 0x12(%rcx,%rax,1),%xmm0",}, 425 + {{0x0f, 0x38, 0xc8, 0x44, 0x05, 0x12, }, 6, 0, "", "", 426 + "0f 38 c8 44 05 12 \tsha1nexte 0x12(%rbp,%rax,1),%xmm0",}, 427 + {{0x0f, 0x38, 0xc8, 0x44, 0x08, 0x12, }, 6, 0, "", "", 428 + "0f 38 c8 44 08 12 \tsha1nexte 0x12(%rax,%rcx,1),%xmm0",}, 429 + {{0x0f, 0x38, 0xc8, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 430 + "0f 38 c8 44 c8 12 \tsha1nexte 0x12(%rax,%rcx,8),%xmm0",}, 431 + {{0x0f, 0x38, 0xc8, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 432 + "0f 38 c8 80 78 56 34 12 \tsha1nexte 0x12345678(%rax),%xmm0",}, 433 + {{0x0f, 0x38, 0xc8, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 434 + "0f 38 c8 85 78 56 34 12 \tsha1nexte 0x12345678(%rbp),%xmm0",}, 435 + {{0x0f, 0x38, 0xc8, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 436 + "0f 38 c8 84 01 78 56 34 12 \tsha1nexte 0x12345678(%rcx,%rax,1),%xmm0",}, 437 + {{0x0f, 0x38, 0xc8, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 438 + "0f 38 c8 84 05 78 56 34 12 \tsha1nexte 0x12345678(%rbp,%rax,1),%xmm0",}, 439 + {{0x0f, 0x38, 0xc8, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 440 + "0f 38 c8 84 08 78 56 34 12 \tsha1nexte 0x12345678(%rax,%rcx,1),%xmm0",}, 441 + {{0x0f, 0x38, 0xc8, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 442 + "0f 38 c8 84 c8 78 56 34 12 \tsha1nexte 0x12345678(%rax,%rcx,8),%xmm0",}, 443 + {{0x44, 0x0f, 0x38, 0xc8, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "", 444 + "44 0f 38 c8 bc c8 78 56 34 12 \tsha1nexte 0x12345678(%rax,%rcx,8),%xmm15",}, 445 + {{0x0f, 0x38, 0xc9, 0xc1, }, 4, 0, "", "", 446 + "0f 38 c9 c1 \tsha1msg1 %xmm1,%xmm0",}, 447 + {{0x0f, 0x38, 0xc9, 0xd7, }, 4, 0, "", "", 448 + "0f 38 c9 d7 \tsha1msg1 %xmm7,%xmm2",}, 449 + {{0x41, 0x0f, 0x38, 0xc9, 0xc0, }, 5, 0, "", "", 450 + "41 0f 38 c9 c0 \tsha1msg1 %xmm8,%xmm0",}, 451 + {{0x44, 0x0f, 0x38, 0xc9, 0xc7, }, 5, 0, "", "", 452 + "44 0f 38 c9 c7 \tsha1msg1 %xmm7,%xmm8",}, 453 + {{0x45, 0x0f, 0x38, 0xc9, 0xc7, }, 5, 0, "", "", 454 + "45 0f 38 c9 c7 \tsha1msg1 %xmm15,%xmm8",}, 455 + {{0x0f, 0x38, 0xc9, 0x00, }, 4, 0, "", "", 456 + "0f 38 c9 00 \tsha1msg1 (%rax),%xmm0",}, 457 + {{0x41, 0x0f, 0x38, 0xc9, 0x00, }, 5, 0, "", "", 458 + "41 0f 38 c9 00 \tsha1msg1 (%r8),%xmm0",}, 459 + {{0x0f, 0x38, 0xc9, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 460 + "0f 38 c9 04 25 78 56 34 12 \tsha1msg1 0x12345678,%xmm0",}, 461 + {{0x0f, 0x38, 0xc9, 0x18, }, 4, 0, "", "", 462 + "0f 38 c9 18 \tsha1msg1 (%rax),%xmm3",}, 463 + {{0x0f, 0x38, 0xc9, 0x04, 0x01, }, 5, 0, "", "", 464 + "0f 38 c9 04 01 \tsha1msg1 (%rcx,%rax,1),%xmm0",}, 465 + {{0x0f, 0x38, 0xc9, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 466 + "0f 38 c9 04 05 78 56 34 12 \tsha1msg1 0x12345678(,%rax,1),%xmm0",}, 467 + {{0x0f, 0x38, 0xc9, 0x04, 0x08, }, 5, 0, "", "", 468 + "0f 38 c9 04 08 \tsha1msg1 (%rax,%rcx,1),%xmm0",}, 469 + {{0x0f, 0x38, 0xc9, 0x04, 0xc8, }, 5, 0, "", "", 470 + "0f 38 c9 04 c8 \tsha1msg1 (%rax,%rcx,8),%xmm0",}, 471 + {{0x0f, 0x38, 0xc9, 0x40, 0x12, }, 5, 0, "", "", 472 + "0f 38 c9 40 12 \tsha1msg1 0x12(%rax),%xmm0",}, 473 + {{0x0f, 0x38, 0xc9, 0x45, 0x12, }, 5, 0, "", "", 474 + "0f 38 c9 45 12 \tsha1msg1 0x12(%rbp),%xmm0",}, 475 + {{0x0f, 0x38, 0xc9, 0x44, 0x01, 0x12, }, 6, 0, "", "", 476 + "0f 38 c9 44 01 12 \tsha1msg1 0x12(%rcx,%rax,1),%xmm0",}, 477 + {{0x0f, 0x38, 0xc9, 0x44, 0x05, 0x12, }, 6, 0, "", "", 478 + "0f 38 c9 44 05 12 \tsha1msg1 0x12(%rbp,%rax,1),%xmm0",}, 479 + {{0x0f, 0x38, 0xc9, 0x44, 0x08, 0x12, }, 6, 0, "", "", 480 + "0f 38 c9 44 08 12 \tsha1msg1 0x12(%rax,%rcx,1),%xmm0",}, 481 + {{0x0f, 0x38, 0xc9, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 482 + "0f 38 c9 44 c8 12 \tsha1msg1 0x12(%rax,%rcx,8),%xmm0",}, 483 + {{0x0f, 0x38, 0xc9, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 484 + "0f 38 c9 80 78 56 34 12 \tsha1msg1 0x12345678(%rax),%xmm0",}, 485 + {{0x0f, 0x38, 0xc9, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 486 + "0f 38 c9 85 78 56 34 12 \tsha1msg1 0x12345678(%rbp),%xmm0",}, 487 + {{0x0f, 0x38, 0xc9, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 488 + "0f 38 c9 84 01 78 56 34 12 \tsha1msg1 0x12345678(%rcx,%rax,1),%xmm0",}, 489 + {{0x0f, 0x38, 0xc9, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 490 + "0f 38 c9 84 05 78 56 34 12 \tsha1msg1 0x12345678(%rbp,%rax,1),%xmm0",}, 491 + {{0x0f, 0x38, 0xc9, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 492 + "0f 38 c9 84 08 78 56 34 12 \tsha1msg1 0x12345678(%rax,%rcx,1),%xmm0",}, 493 + {{0x0f, 0x38, 0xc9, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 494 + "0f 38 c9 84 c8 78 56 34 12 \tsha1msg1 0x12345678(%rax,%rcx,8),%xmm0",}, 495 + {{0x44, 0x0f, 0x38, 0xc9, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "", 496 + "44 0f 38 c9 bc c8 78 56 34 12 \tsha1msg1 0x12345678(%rax,%rcx,8),%xmm15",}, 497 + {{0x0f, 0x38, 0xca, 0xc1, }, 4, 0, "", "", 498 + "0f 38 ca c1 \tsha1msg2 %xmm1,%xmm0",}, 499 + {{0x0f, 0x38, 0xca, 0xd7, }, 4, 0, "", "", 500 + "0f 38 ca d7 \tsha1msg2 %xmm7,%xmm2",}, 501 + {{0x41, 0x0f, 0x38, 0xca, 0xc0, }, 5, 0, "", "", 502 + "41 0f 38 ca c0 \tsha1msg2 %xmm8,%xmm0",}, 503 + {{0x44, 0x0f, 0x38, 0xca, 0xc7, }, 5, 0, "", "", 504 + "44 0f 38 ca c7 \tsha1msg2 %xmm7,%xmm8",}, 505 + {{0x45, 0x0f, 0x38, 0xca, 0xc7, }, 5, 0, "", "", 506 + "45 0f 38 ca c7 \tsha1msg2 %xmm15,%xmm8",}, 507 + {{0x0f, 0x38, 0xca, 0x00, }, 4, 0, "", "", 508 + "0f 38 ca 00 \tsha1msg2 (%rax),%xmm0",}, 509 + {{0x41, 0x0f, 0x38, 0xca, 0x00, }, 5, 0, "", "", 510 + "41 0f 38 ca 00 \tsha1msg2 (%r8),%xmm0",}, 511 + {{0x0f, 0x38, 0xca, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 512 + "0f 38 ca 04 25 78 56 34 12 \tsha1msg2 0x12345678,%xmm0",}, 513 + {{0x0f, 0x38, 0xca, 0x18, }, 4, 0, "", "", 514 + "0f 38 ca 18 \tsha1msg2 (%rax),%xmm3",}, 515 + {{0x0f, 0x38, 0xca, 0x04, 0x01, }, 5, 0, "", "", 516 + "0f 38 ca 04 01 \tsha1msg2 (%rcx,%rax,1),%xmm0",}, 517 + {{0x0f, 0x38, 0xca, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 518 + "0f 38 ca 04 05 78 56 34 12 \tsha1msg2 0x12345678(,%rax,1),%xmm0",}, 519 + {{0x0f, 0x38, 0xca, 0x04, 0x08, }, 5, 0, "", "", 520 + "0f 38 ca 04 08 \tsha1msg2 (%rax,%rcx,1),%xmm0",}, 521 + {{0x0f, 0x38, 0xca, 0x04, 0xc8, }, 5, 0, "", "", 522 + "0f 38 ca 04 c8 \tsha1msg2 (%rax,%rcx,8),%xmm0",}, 523 + {{0x0f, 0x38, 0xca, 0x40, 0x12, }, 5, 0, "", "", 524 + "0f 38 ca 40 12 \tsha1msg2 0x12(%rax),%xmm0",}, 525 + {{0x0f, 0x38, 0xca, 0x45, 0x12, }, 5, 0, "", "", 526 + "0f 38 ca 45 12 \tsha1msg2 0x12(%rbp),%xmm0",}, 527 + {{0x0f, 0x38, 0xca, 0x44, 0x01, 0x12, }, 6, 0, "", "", 528 + "0f 38 ca 44 01 12 \tsha1msg2 0x12(%rcx,%rax,1),%xmm0",}, 529 + {{0x0f, 0x38, 0xca, 0x44, 0x05, 0x12, }, 6, 0, "", "", 530 + "0f 38 ca 44 05 12 \tsha1msg2 0x12(%rbp,%rax,1),%xmm0",}, 531 + {{0x0f, 0x38, 0xca, 0x44, 0x08, 0x12, }, 6, 0, "", "", 532 + "0f 38 ca 44 08 12 \tsha1msg2 0x12(%rax,%rcx,1),%xmm0",}, 533 + {{0x0f, 0x38, 0xca, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 534 + "0f 38 ca 44 c8 12 \tsha1msg2 0x12(%rax,%rcx,8),%xmm0",}, 535 + {{0x0f, 0x38, 0xca, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 536 + "0f 38 ca 80 78 56 34 12 \tsha1msg2 0x12345678(%rax),%xmm0",}, 537 + {{0x0f, 0x38, 0xca, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 538 + "0f 38 ca 85 78 56 34 12 \tsha1msg2 0x12345678(%rbp),%xmm0",}, 539 + {{0x0f, 0x38, 0xca, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 540 + "0f 38 ca 84 01 78 56 34 12 \tsha1msg2 0x12345678(%rcx,%rax,1),%xmm0",}, 541 + {{0x0f, 0x38, 0xca, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 542 + "0f 38 ca 84 05 78 56 34 12 \tsha1msg2 0x12345678(%rbp,%rax,1),%xmm0",}, 543 + {{0x0f, 0x38, 0xca, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 544 + "0f 38 ca 84 08 78 56 34 12 \tsha1msg2 0x12345678(%rax,%rcx,1),%xmm0",}, 545 + {{0x0f, 0x38, 0xca, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 546 + "0f 38 ca 84 c8 78 56 34 12 \tsha1msg2 0x12345678(%rax,%rcx,8),%xmm0",}, 547 + {{0x44, 0x0f, 0x38, 0xca, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "", 548 + "44 0f 38 ca bc c8 78 56 34 12 \tsha1msg2 0x12345678(%rax,%rcx,8),%xmm15",}, 549 + {{0x0f, 0x38, 0xcb, 0xcc, }, 4, 0, "", "", 550 + "0f 38 cb cc \tsha256rnds2 %xmm0,%xmm4,%xmm1",}, 551 + {{0x0f, 0x38, 0xcb, 0xd7, }, 4, 0, "", "", 552 + "0f 38 cb d7 \tsha256rnds2 %xmm0,%xmm7,%xmm2",}, 553 + {{0x41, 0x0f, 0x38, 0xcb, 0xc8, }, 5, 0, "", "", 554 + "41 0f 38 cb c8 \tsha256rnds2 %xmm0,%xmm8,%xmm1",}, 555 + {{0x44, 0x0f, 0x38, 0xcb, 0xc7, }, 5, 0, "", "", 556 + "44 0f 38 cb c7 \tsha256rnds2 %xmm0,%xmm7,%xmm8",}, 557 + {{0x45, 0x0f, 0x38, 0xcb, 0xc7, }, 5, 0, "", "", 558 + "45 0f 38 cb c7 \tsha256rnds2 %xmm0,%xmm15,%xmm8",}, 559 + {{0x0f, 0x38, 0xcb, 0x08, }, 4, 0, "", "", 560 + "0f 38 cb 08 \tsha256rnds2 %xmm0,(%rax),%xmm1",}, 561 + {{0x41, 0x0f, 0x38, 0xcb, 0x08, }, 5, 0, "", "", 562 + "41 0f 38 cb 08 \tsha256rnds2 %xmm0,(%r8),%xmm1",}, 563 + {{0x0f, 0x38, 0xcb, 0x0c, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 564 + "0f 38 cb 0c 25 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678,%xmm1",}, 565 + {{0x0f, 0x38, 0xcb, 0x18, }, 4, 0, "", "", 566 + "0f 38 cb 18 \tsha256rnds2 %xmm0,(%rax),%xmm3",}, 567 + {{0x0f, 0x38, 0xcb, 0x0c, 0x01, }, 5, 0, "", "", 568 + "0f 38 cb 0c 01 \tsha256rnds2 %xmm0,(%rcx,%rax,1),%xmm1",}, 569 + {{0x0f, 0x38, 0xcb, 0x0c, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 570 + "0f 38 cb 0c 05 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(,%rax,1),%xmm1",}, 571 + {{0x0f, 0x38, 0xcb, 0x0c, 0x08, }, 5, 0, "", "", 572 + "0f 38 cb 0c 08 \tsha256rnds2 %xmm0,(%rax,%rcx,1),%xmm1",}, 573 + {{0x0f, 0x38, 0xcb, 0x0c, 0xc8, }, 5, 0, "", "", 574 + "0f 38 cb 0c c8 \tsha256rnds2 %xmm0,(%rax,%rcx,8),%xmm1",}, 575 + {{0x0f, 0x38, 0xcb, 0x48, 0x12, }, 5, 0, "", "", 576 + "0f 38 cb 48 12 \tsha256rnds2 %xmm0,0x12(%rax),%xmm1",}, 577 + {{0x0f, 0x38, 0xcb, 0x4d, 0x12, }, 5, 0, "", "", 578 + "0f 38 cb 4d 12 \tsha256rnds2 %xmm0,0x12(%rbp),%xmm1",}, 579 + {{0x0f, 0x38, 0xcb, 0x4c, 0x01, 0x12, }, 6, 0, "", "", 580 + "0f 38 cb 4c 01 12 \tsha256rnds2 %xmm0,0x12(%rcx,%rax,1),%xmm1",}, 581 + {{0x0f, 0x38, 0xcb, 0x4c, 0x05, 0x12, }, 6, 0, "", "", 582 + "0f 38 cb 4c 05 12 \tsha256rnds2 %xmm0,0x12(%rbp,%rax,1),%xmm1",}, 583 + {{0x0f, 0x38, 0xcb, 0x4c, 0x08, 0x12, }, 6, 0, "", "", 584 + "0f 38 cb 4c 08 12 \tsha256rnds2 %xmm0,0x12(%rax,%rcx,1),%xmm1",}, 585 + {{0x0f, 0x38, 0xcb, 0x4c, 0xc8, 0x12, }, 6, 0, "", "", 586 + "0f 38 cb 4c c8 12 \tsha256rnds2 %xmm0,0x12(%rax,%rcx,8),%xmm1",}, 587 + {{0x0f, 0x38, 0xcb, 0x88, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 588 + "0f 38 cb 88 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rax),%xmm1",}, 589 + {{0x0f, 0x38, 0xcb, 0x8d, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 590 + "0f 38 cb 8d 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rbp),%xmm1",}, 591 + {{0x0f, 0x38, 0xcb, 0x8c, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 592 + "0f 38 cb 8c 01 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rcx,%rax,1),%xmm1",}, 593 + {{0x0f, 0x38, 0xcb, 0x8c, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 594 + "0f 38 cb 8c 05 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rbp,%rax,1),%xmm1",}, 595 + {{0x0f, 0x38, 0xcb, 0x8c, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 596 + "0f 38 cb 8c 08 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rax,%rcx,1),%xmm1",}, 597 + {{0x0f, 0x38, 0xcb, 0x8c, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 598 + "0f 38 cb 8c c8 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rax,%rcx,8),%xmm1",}, 599 + {{0x44, 0x0f, 0x38, 0xcb, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "", 600 + "44 0f 38 cb bc c8 78 56 34 12 \tsha256rnds2 %xmm0,0x12345678(%rax,%rcx,8),%xmm15",}, 601 + {{0x0f, 0x38, 0xcc, 0xc1, }, 4, 0, "", "", 602 + "0f 38 cc c1 \tsha256msg1 %xmm1,%xmm0",}, 603 + {{0x0f, 0x38, 0xcc, 0xd7, }, 4, 0, "", "", 604 + "0f 38 cc d7 \tsha256msg1 %xmm7,%xmm2",}, 605 + {{0x41, 0x0f, 0x38, 0xcc, 0xc0, }, 5, 0, "", "", 606 + "41 0f 38 cc c0 \tsha256msg1 %xmm8,%xmm0",}, 607 + {{0x44, 0x0f, 0x38, 0xcc, 0xc7, }, 5, 0, "", "", 608 + "44 0f 38 cc c7 \tsha256msg1 %xmm7,%xmm8",}, 609 + {{0x45, 0x0f, 0x38, 0xcc, 0xc7, }, 5, 0, "", "", 610 + "45 0f 38 cc c7 \tsha256msg1 %xmm15,%xmm8",}, 611 + {{0x0f, 0x38, 0xcc, 0x00, }, 4, 0, "", "", 612 + "0f 38 cc 00 \tsha256msg1 (%rax),%xmm0",}, 613 + {{0x41, 0x0f, 0x38, 0xcc, 0x00, }, 5, 0, "", "", 614 + "41 0f 38 cc 00 \tsha256msg1 (%r8),%xmm0",}, 615 + {{0x0f, 0x38, 0xcc, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 616 + "0f 38 cc 04 25 78 56 34 12 \tsha256msg1 0x12345678,%xmm0",}, 617 + {{0x0f, 0x38, 0xcc, 0x18, }, 4, 0, "", "", 618 + "0f 38 cc 18 \tsha256msg1 (%rax),%xmm3",}, 619 + {{0x0f, 0x38, 0xcc, 0x04, 0x01, }, 5, 0, "", "", 620 + "0f 38 cc 04 01 \tsha256msg1 (%rcx,%rax,1),%xmm0",}, 621 + {{0x0f, 0x38, 0xcc, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 622 + "0f 38 cc 04 05 78 56 34 12 \tsha256msg1 0x12345678(,%rax,1),%xmm0",}, 623 + {{0x0f, 0x38, 0xcc, 0x04, 0x08, }, 5, 0, "", "", 624 + "0f 38 cc 04 08 \tsha256msg1 (%rax,%rcx,1),%xmm0",}, 625 + {{0x0f, 0x38, 0xcc, 0x04, 0xc8, }, 5, 0, "", "", 626 + "0f 38 cc 04 c8 \tsha256msg1 (%rax,%rcx,8),%xmm0",}, 627 + {{0x0f, 0x38, 0xcc, 0x40, 0x12, }, 5, 0, "", "", 628 + "0f 38 cc 40 12 \tsha256msg1 0x12(%rax),%xmm0",}, 629 + {{0x0f, 0x38, 0xcc, 0x45, 0x12, }, 5, 0, "", "", 630 + "0f 38 cc 45 12 \tsha256msg1 0x12(%rbp),%xmm0",}, 631 + {{0x0f, 0x38, 0xcc, 0x44, 0x01, 0x12, }, 6, 0, "", "", 632 + "0f 38 cc 44 01 12 \tsha256msg1 0x12(%rcx,%rax,1),%xmm0",}, 633 + {{0x0f, 0x38, 0xcc, 0x44, 0x05, 0x12, }, 6, 0, "", "", 634 + "0f 38 cc 44 05 12 \tsha256msg1 0x12(%rbp,%rax,1),%xmm0",}, 635 + {{0x0f, 0x38, 0xcc, 0x44, 0x08, 0x12, }, 6, 0, "", "", 636 + "0f 38 cc 44 08 12 \tsha256msg1 0x12(%rax,%rcx,1),%xmm0",}, 637 + {{0x0f, 0x38, 0xcc, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 638 + "0f 38 cc 44 c8 12 \tsha256msg1 0x12(%rax,%rcx,8),%xmm0",}, 639 + {{0x0f, 0x38, 0xcc, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 640 + "0f 38 cc 80 78 56 34 12 \tsha256msg1 0x12345678(%rax),%xmm0",}, 641 + {{0x0f, 0x38, 0xcc, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 642 + "0f 38 cc 85 78 56 34 12 \tsha256msg1 0x12345678(%rbp),%xmm0",}, 643 + {{0x0f, 0x38, 0xcc, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 644 + "0f 38 cc 84 01 78 56 34 12 \tsha256msg1 0x12345678(%rcx,%rax,1),%xmm0",}, 645 + {{0x0f, 0x38, 0xcc, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 646 + "0f 38 cc 84 05 78 56 34 12 \tsha256msg1 0x12345678(%rbp,%rax,1),%xmm0",}, 647 + {{0x0f, 0x38, 0xcc, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 648 + "0f 38 cc 84 08 78 56 34 12 \tsha256msg1 0x12345678(%rax,%rcx,1),%xmm0",}, 649 + {{0x0f, 0x38, 0xcc, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 650 + "0f 38 cc 84 c8 78 56 34 12 \tsha256msg1 0x12345678(%rax,%rcx,8),%xmm0",}, 651 + {{0x44, 0x0f, 0x38, 0xcc, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "", 652 + "44 0f 38 cc bc c8 78 56 34 12 \tsha256msg1 0x12345678(%rax,%rcx,8),%xmm15",}, 653 + {{0x0f, 0x38, 0xcd, 0xc1, }, 4, 0, "", "", 654 + "0f 38 cd c1 \tsha256msg2 %xmm1,%xmm0",}, 655 + {{0x0f, 0x38, 0xcd, 0xd7, }, 4, 0, "", "", 656 + "0f 38 cd d7 \tsha256msg2 %xmm7,%xmm2",}, 657 + {{0x41, 0x0f, 0x38, 0xcd, 0xc0, }, 5, 0, "", "", 658 + "41 0f 38 cd c0 \tsha256msg2 %xmm8,%xmm0",}, 659 + {{0x44, 0x0f, 0x38, 0xcd, 0xc7, }, 5, 0, "", "", 660 + "44 0f 38 cd c7 \tsha256msg2 %xmm7,%xmm8",}, 661 + {{0x45, 0x0f, 0x38, 0xcd, 0xc7, }, 5, 0, "", "", 662 + "45 0f 38 cd c7 \tsha256msg2 %xmm15,%xmm8",}, 663 + {{0x0f, 0x38, 0xcd, 0x00, }, 4, 0, "", "", 664 + "0f 38 cd 00 \tsha256msg2 (%rax),%xmm0",}, 665 + {{0x41, 0x0f, 0x38, 0xcd, 0x00, }, 5, 0, "", "", 666 + "41 0f 38 cd 00 \tsha256msg2 (%r8),%xmm0",}, 667 + {{0x0f, 0x38, 0xcd, 0x04, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 668 + "0f 38 cd 04 25 78 56 34 12 \tsha256msg2 0x12345678,%xmm0",}, 669 + {{0x0f, 0x38, 0xcd, 0x18, }, 4, 0, "", "", 670 + "0f 38 cd 18 \tsha256msg2 (%rax),%xmm3",}, 671 + {{0x0f, 0x38, 0xcd, 0x04, 0x01, }, 5, 0, "", "", 672 + "0f 38 cd 04 01 \tsha256msg2 (%rcx,%rax,1),%xmm0",}, 673 + {{0x0f, 0x38, 0xcd, 0x04, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 674 + "0f 38 cd 04 05 78 56 34 12 \tsha256msg2 0x12345678(,%rax,1),%xmm0",}, 675 + {{0x0f, 0x38, 0xcd, 0x04, 0x08, }, 5, 0, "", "", 676 + "0f 38 cd 04 08 \tsha256msg2 (%rax,%rcx,1),%xmm0",}, 677 + {{0x0f, 0x38, 0xcd, 0x04, 0xc8, }, 5, 0, "", "", 678 + "0f 38 cd 04 c8 \tsha256msg2 (%rax,%rcx,8),%xmm0",}, 679 + {{0x0f, 0x38, 0xcd, 0x40, 0x12, }, 5, 0, "", "", 680 + "0f 38 cd 40 12 \tsha256msg2 0x12(%rax),%xmm0",}, 681 + {{0x0f, 0x38, 0xcd, 0x45, 0x12, }, 5, 0, "", "", 682 + "0f 38 cd 45 12 \tsha256msg2 0x12(%rbp),%xmm0",}, 683 + {{0x0f, 0x38, 0xcd, 0x44, 0x01, 0x12, }, 6, 0, "", "", 684 + "0f 38 cd 44 01 12 \tsha256msg2 0x12(%rcx,%rax,1),%xmm0",}, 685 + {{0x0f, 0x38, 0xcd, 0x44, 0x05, 0x12, }, 6, 0, "", "", 686 + "0f 38 cd 44 05 12 \tsha256msg2 0x12(%rbp,%rax,1),%xmm0",}, 687 + {{0x0f, 0x38, 0xcd, 0x44, 0x08, 0x12, }, 6, 0, "", "", 688 + "0f 38 cd 44 08 12 \tsha256msg2 0x12(%rax,%rcx,1),%xmm0",}, 689 + {{0x0f, 0x38, 0xcd, 0x44, 0xc8, 0x12, }, 6, 0, "", "", 690 + "0f 38 cd 44 c8 12 \tsha256msg2 0x12(%rax,%rcx,8),%xmm0",}, 691 + {{0x0f, 0x38, 0xcd, 0x80, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 692 + "0f 38 cd 80 78 56 34 12 \tsha256msg2 0x12345678(%rax),%xmm0",}, 693 + {{0x0f, 0x38, 0xcd, 0x85, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 694 + "0f 38 cd 85 78 56 34 12 \tsha256msg2 0x12345678(%rbp),%xmm0",}, 695 + {{0x0f, 0x38, 0xcd, 0x84, 0x01, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 696 + "0f 38 cd 84 01 78 56 34 12 \tsha256msg2 0x12345678(%rcx,%rax,1),%xmm0",}, 697 + {{0x0f, 0x38, 0xcd, 0x84, 0x05, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 698 + "0f 38 cd 84 05 78 56 34 12 \tsha256msg2 0x12345678(%rbp,%rax,1),%xmm0",}, 699 + {{0x0f, 0x38, 0xcd, 0x84, 0x08, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 700 + "0f 38 cd 84 08 78 56 34 12 \tsha256msg2 0x12345678(%rax,%rcx,1),%xmm0",}, 701 + {{0x0f, 0x38, 0xcd, 0x84, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 702 + "0f 38 cd 84 c8 78 56 34 12 \tsha256msg2 0x12345678(%rax,%rcx,8),%xmm0",}, 703 + {{0x44, 0x0f, 0x38, 0xcd, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "", 704 + "44 0f 38 cd bc c8 78 56 34 12 \tsha256msg2 0x12345678(%rax,%rcx,8),%xmm15",}, 705 + {{0x66, 0x0f, 0xae, 0x38, }, 4, 0, "", "", 706 + "66 0f ae 38 \tclflushopt (%rax)",}, 707 + {{0x66, 0x41, 0x0f, 0xae, 0x38, }, 5, 0, "", "", 708 + "66 41 0f ae 38 \tclflushopt (%r8)",}, 709 + {{0x66, 0x0f, 0xae, 0x3c, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 710 + "66 0f ae 3c 25 78 56 34 12 \tclflushopt 0x12345678",}, 711 + {{0x66, 0x0f, 0xae, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 712 + "66 0f ae bc c8 78 56 34 12 \tclflushopt 0x12345678(%rax,%rcx,8)",}, 713 + {{0x66, 0x41, 0x0f, 0xae, 0xbc, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "", 714 + "66 41 0f ae bc c8 78 56 34 12 \tclflushopt 0x12345678(%r8,%rcx,8)",}, 715 + {{0x0f, 0xae, 0x38, }, 3, 0, "", "", 716 + "0f ae 38 \tclflush (%rax)",}, 717 + {{0x41, 0x0f, 0xae, 0x38, }, 4, 0, "", "", 718 + "41 0f ae 38 \tclflush (%r8)",}, 719 + {{0x0f, 0xae, 0xf8, }, 3, 0, "", "", 720 + "0f ae f8 \tsfence ",}, 721 + {{0x66, 0x0f, 0xae, 0x30, }, 4, 0, "", "", 722 + "66 0f ae 30 \tclwb (%rax)",}, 723 + {{0x66, 0x41, 0x0f, 0xae, 0x30, }, 5, 0, "", "", 724 + "66 41 0f ae 30 \tclwb (%r8)",}, 725 + {{0x66, 0x0f, 0xae, 0x34, 0x25, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 726 + "66 0f ae 34 25 78 56 34 12 \tclwb 0x12345678",}, 727 + {{0x66, 0x0f, 0xae, 0xb4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 728 + "66 0f ae b4 c8 78 56 34 12 \tclwb 0x12345678(%rax,%rcx,8)",}, 729 + {{0x66, 0x41, 0x0f, 0xae, 0xb4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 10, 0, "", "", 730 + "66 41 0f ae b4 c8 78 56 34 12 \tclwb 0x12345678(%r8,%rcx,8)",}, 731 + {{0x0f, 0xae, 0x30, }, 3, 0, "", "", 732 + "0f ae 30 \txsaveopt (%rax)",}, 733 + {{0x41, 0x0f, 0xae, 0x30, }, 4, 0, "", "", 734 + "41 0f ae 30 \txsaveopt (%r8)",}, 735 + {{0x0f, 0xae, 0xf0, }, 3, 0, "", "", 736 + "0f ae f0 \tmfence ",}, 737 + {{0x0f, 0xc7, 0x20, }, 3, 0, "", "", 738 + "0f c7 20 \txsavec (%rax)",}, 739 + {{0x41, 0x0f, 0xc7, 0x20, }, 4, 0, "", "", 740 + "41 0f c7 20 \txsavec (%r8)",}, 741 + {{0x0f, 0xc7, 0x24, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 742 + "0f c7 24 25 78 56 34 12 \txsavec 0x12345678",}, 743 + {{0x0f, 0xc7, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 744 + "0f c7 a4 c8 78 56 34 12 \txsavec 0x12345678(%rax,%rcx,8)",}, 745 + {{0x41, 0x0f, 0xc7, 0xa4, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 746 + "41 0f c7 a4 c8 78 56 34 12 \txsavec 0x12345678(%r8,%rcx,8)",}, 747 + {{0x0f, 0xc7, 0x28, }, 3, 0, "", "", 748 + "0f c7 28 \txsaves (%rax)",}, 749 + {{0x41, 0x0f, 0xc7, 0x28, }, 4, 0, "", "", 750 + "41 0f c7 28 \txsaves (%r8)",}, 751 + {{0x0f, 0xc7, 0x2c, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 752 + "0f c7 2c 25 78 56 34 12 \txsaves 0x12345678",}, 753 + {{0x0f, 0xc7, 0xac, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 754 + "0f c7 ac c8 78 56 34 12 \txsaves 0x12345678(%rax,%rcx,8)",}, 755 + {{0x41, 0x0f, 0xc7, 0xac, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 756 + "41 0f c7 ac c8 78 56 34 12 \txsaves 0x12345678(%r8,%rcx,8)",}, 757 + {{0x0f, 0xc7, 0x18, }, 3, 0, "", "", 758 + "0f c7 18 \txrstors (%rax)",}, 759 + {{0x41, 0x0f, 0xc7, 0x18, }, 4, 0, "", "", 760 + "41 0f c7 18 \txrstors (%r8)",}, 761 + {{0x0f, 0xc7, 0x1c, 0x25, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 762 + "0f c7 1c 25 78 56 34 12 \txrstors 0x12345678",}, 763 + {{0x0f, 0xc7, 0x9c, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 8, 0, "", "", 764 + "0f c7 9c c8 78 56 34 12 \txrstors 0x12345678(%rax,%rcx,8)",}, 765 + {{0x41, 0x0f, 0xc7, 0x9c, 0xc8, 0x78, 0x56, 0x34, 0x12, }, 9, 0, "", "", 766 + "41 0f c7 9c c8 78 56 34 12 \txrstors 0x12345678(%r8,%rcx,8)",}, 767 + {{0x66, 0x0f, 0xae, 0xf8, }, 4, 0, "", "", 768 + "66 0f ae f8 \tpcommit ",},
+877
tools/perf/tests/insn-x86-dat-src.c
··· 1 + /* 2 + * This file contains instructions for testing by the test titled: 3 + * 4 + * "Test x86 instruction decoder - new instructions" 5 + * 6 + * Note that the 'Expecting' comment lines are consumed by the 7 + * gen-insn-x86-dat.awk script and have the format: 8 + * 9 + * Expecting: <op> <branch> <rel> 10 + * 11 + * If this file is changed, remember to run the gen-insn-x86-dat.sh 12 + * script and commit the result. 13 + * 14 + * Refer to insn-x86.c for more details. 15 + */ 16 + 17 + int main(void) 18 + { 19 + /* Following line is a marker for the awk script - do not change */ 20 + asm volatile("rdtsc"); /* Start here */ 21 + 22 + #ifdef __x86_64__ 23 + 24 + /* bndmk m64, bnd */ 25 + 26 + asm volatile("bndmk (%rax), %bnd0"); 27 + asm volatile("bndmk (%r8), %bnd0"); 28 + asm volatile("bndmk (0x12345678), %bnd0"); 29 + asm volatile("bndmk (%rax), %bnd3"); 30 + asm volatile("bndmk (%rcx,%rax,1), %bnd0"); 31 + asm volatile("bndmk 0x12345678(,%rax,1), %bnd0"); 32 + asm volatile("bndmk (%rax,%rcx,1), %bnd0"); 33 + asm volatile("bndmk (%rax,%rcx,8), %bnd0"); 34 + asm volatile("bndmk 0x12(%rax), %bnd0"); 35 + asm volatile("bndmk 0x12(%rbp), %bnd0"); 36 + asm volatile("bndmk 0x12(%rcx,%rax,1), %bnd0"); 37 + asm volatile("bndmk 0x12(%rbp,%rax,1), %bnd0"); 38 + asm volatile("bndmk 0x12(%rax,%rcx,1), %bnd0"); 39 + asm volatile("bndmk 0x12(%rax,%rcx,8), %bnd0"); 40 + asm volatile("bndmk 0x12345678(%rax), %bnd0"); 41 + asm volatile("bndmk 0x12345678(%rbp), %bnd0"); 42 + asm volatile("bndmk 0x12345678(%rcx,%rax,1), %bnd0"); 43 + asm volatile("bndmk 0x12345678(%rbp,%rax,1), %bnd0"); 44 + asm volatile("bndmk 0x12345678(%rax,%rcx,1), %bnd0"); 45 + asm volatile("bndmk 0x12345678(%rax,%rcx,8), %bnd0"); 46 + 47 + /* bndcl r/m64, bnd */ 48 + 49 + asm volatile("bndcl (%rax), %bnd0"); 50 + asm volatile("bndcl (%r8), %bnd0"); 51 + asm volatile("bndcl (0x12345678), %bnd0"); 52 + asm volatile("bndcl (%rax), %bnd3"); 53 + asm volatile("bndcl (%rcx,%rax,1), %bnd0"); 54 + asm volatile("bndcl 0x12345678(,%rax,1), %bnd0"); 55 + asm volatile("bndcl (%rax,%rcx,1), %bnd0"); 56 + asm volatile("bndcl (%rax,%rcx,8), %bnd0"); 57 + asm volatile("bndcl 0x12(%rax), %bnd0"); 58 + asm volatile("bndcl 0x12(%rbp), %bnd0"); 59 + asm volatile("bndcl 0x12(%rcx,%rax,1), %bnd0"); 60 + asm volatile("bndcl 0x12(%rbp,%rax,1), %bnd0"); 61 + asm volatile("bndcl 0x12(%rax,%rcx,1), %bnd0"); 62 + asm volatile("bndcl 0x12(%rax,%rcx,8), %bnd0"); 63 + asm volatile("bndcl 0x12345678(%rax), %bnd0"); 64 + asm volatile("bndcl 0x12345678(%rbp), %bnd0"); 65 + asm volatile("bndcl 0x12345678(%rcx,%rax,1), %bnd0"); 66 + asm volatile("bndcl 0x12345678(%rbp,%rax,1), %bnd0"); 67 + asm volatile("bndcl 0x12345678(%rax,%rcx,1), %bnd0"); 68 + asm volatile("bndcl 0x12345678(%rax,%rcx,8), %bnd0"); 69 + asm volatile("bndcl %rax, %bnd0"); 70 + 71 + /* bndcu r/m64, bnd */ 72 + 73 + asm volatile("bndcu (%rax), %bnd0"); 74 + asm volatile("bndcu (%r8), %bnd0"); 75 + asm volatile("bndcu (0x12345678), %bnd0"); 76 + asm volatile("bndcu (%rax), %bnd3"); 77 + asm volatile("bndcu (%rcx,%rax,1), %bnd0"); 78 + asm volatile("bndcu 0x12345678(,%rax,1), %bnd0"); 79 + asm volatile("bndcu (%rax,%rcx,1), %bnd0"); 80 + asm volatile("bndcu (%rax,%rcx,8), %bnd0"); 81 + asm volatile("bndcu 0x12(%rax), %bnd0"); 82 + asm volatile("bndcu 0x12(%rbp), %bnd0"); 83 + asm volatile("bndcu 0x12(%rcx,%rax,1), %bnd0"); 84 + asm volatile("bndcu 0x12(%rbp,%rax,1), %bnd0"); 85 + asm volatile("bndcu 0x12(%rax,%rcx,1), %bnd0"); 86 + asm volatile("bndcu 0x12(%rax,%rcx,8), %bnd0"); 87 + asm volatile("bndcu 0x12345678(%rax), %bnd0"); 88 + asm volatile("bndcu 0x12345678(%rbp), %bnd0"); 89 + asm volatile("bndcu 0x12345678(%rcx,%rax,1), %bnd0"); 90 + asm volatile("bndcu 0x12345678(%rbp,%rax,1), %bnd0"); 91 + asm volatile("bndcu 0x12345678(%rax,%rcx,1), %bnd0"); 92 + asm volatile("bndcu 0x12345678(%rax,%rcx,8), %bnd0"); 93 + asm volatile("bndcu %rax, %bnd0"); 94 + 95 + /* bndcn r/m64, bnd */ 96 + 97 + asm volatile("bndcn (%rax), %bnd0"); 98 + asm volatile("bndcn (%r8), %bnd0"); 99 + asm volatile("bndcn (0x12345678), %bnd0"); 100 + asm volatile("bndcn (%rax), %bnd3"); 101 + asm volatile("bndcn (%rcx,%rax,1), %bnd0"); 102 + asm volatile("bndcn 0x12345678(,%rax,1), %bnd0"); 103 + asm volatile("bndcn (%rax,%rcx,1), %bnd0"); 104 + asm volatile("bndcn (%rax,%rcx,8), %bnd0"); 105 + asm volatile("bndcn 0x12(%rax), %bnd0"); 106 + asm volatile("bndcn 0x12(%rbp), %bnd0"); 107 + asm volatile("bndcn 0x12(%rcx,%rax,1), %bnd0"); 108 + asm volatile("bndcn 0x12(%rbp,%rax,1), %bnd0"); 109 + asm volatile("bndcn 0x12(%rax,%rcx,1), %bnd0"); 110 + asm volatile("bndcn 0x12(%rax,%rcx,8), %bnd0"); 111 + asm volatile("bndcn 0x12345678(%rax), %bnd0"); 112 + asm volatile("bndcn 0x12345678(%rbp), %bnd0"); 113 + asm volatile("bndcn 0x12345678(%rcx,%rax,1), %bnd0"); 114 + asm volatile("bndcn 0x12345678(%rbp,%rax,1), %bnd0"); 115 + asm volatile("bndcn 0x12345678(%rax,%rcx,1), %bnd0"); 116 + asm volatile("bndcn 0x12345678(%rax,%rcx,8), %bnd0"); 117 + asm volatile("bndcn %rax, %bnd0"); 118 + 119 + /* bndmov m128, bnd */ 120 + 121 + asm volatile("bndmov (%rax), %bnd0"); 122 + asm volatile("bndmov (%r8), %bnd0"); 123 + asm volatile("bndmov (0x12345678), %bnd0"); 124 + asm volatile("bndmov (%rax), %bnd3"); 125 + asm volatile("bndmov (%rcx,%rax,1), %bnd0"); 126 + asm volatile("bndmov 0x12345678(,%rax,1), %bnd0"); 127 + asm volatile("bndmov (%rax,%rcx,1), %bnd0"); 128 + asm volatile("bndmov (%rax,%rcx,8), %bnd0"); 129 + asm volatile("bndmov 0x12(%rax), %bnd0"); 130 + asm volatile("bndmov 0x12(%rbp), %bnd0"); 131 + asm volatile("bndmov 0x12(%rcx,%rax,1), %bnd0"); 132 + asm volatile("bndmov 0x12(%rbp,%rax,1), %bnd0"); 133 + asm volatile("bndmov 0x12(%rax,%rcx,1), %bnd0"); 134 + asm volatile("bndmov 0x12(%rax,%rcx,8), %bnd0"); 135 + asm volatile("bndmov 0x12345678(%rax), %bnd0"); 136 + asm volatile("bndmov 0x12345678(%rbp), %bnd0"); 137 + asm volatile("bndmov 0x12345678(%rcx,%rax,1), %bnd0"); 138 + asm volatile("bndmov 0x12345678(%rbp,%rax,1), %bnd0"); 139 + asm volatile("bndmov 0x12345678(%rax,%rcx,1), %bnd0"); 140 + asm volatile("bndmov 0x12345678(%rax,%rcx,8), %bnd0"); 141 + 142 + /* bndmov bnd, m128 */ 143 + 144 + asm volatile("bndmov %bnd0, (%rax)"); 145 + asm volatile("bndmov %bnd0, (%r8)"); 146 + asm volatile("bndmov %bnd0, (0x12345678)"); 147 + asm volatile("bndmov %bnd3, (%rax)"); 148 + asm volatile("bndmov %bnd0, (%rcx,%rax,1)"); 149 + asm volatile("bndmov %bnd0, 0x12345678(,%rax,1)"); 150 + asm volatile("bndmov %bnd0, (%rax,%rcx,1)"); 151 + asm volatile("bndmov %bnd0, (%rax,%rcx,8)"); 152 + asm volatile("bndmov %bnd0, 0x12(%rax)"); 153 + asm volatile("bndmov %bnd0, 0x12(%rbp)"); 154 + asm volatile("bndmov %bnd0, 0x12(%rcx,%rax,1)"); 155 + asm volatile("bndmov %bnd0, 0x12(%rbp,%rax,1)"); 156 + asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,1)"); 157 + asm volatile("bndmov %bnd0, 0x12(%rax,%rcx,8)"); 158 + asm volatile("bndmov %bnd0, 0x12345678(%rax)"); 159 + asm volatile("bndmov %bnd0, 0x12345678(%rbp)"); 160 + asm volatile("bndmov %bnd0, 0x12345678(%rcx,%rax,1)"); 161 + asm volatile("bndmov %bnd0, 0x12345678(%rbp,%rax,1)"); 162 + asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,1)"); 163 + asm volatile("bndmov %bnd0, 0x12345678(%rax,%rcx,8)"); 164 + 165 + /* bndmov bnd2, bnd1 */ 166 + 167 + asm volatile("bndmov %bnd0, %bnd1"); 168 + asm volatile("bndmov %bnd1, %bnd0"); 169 + 170 + /* bndldx mib, bnd */ 171 + 172 + asm volatile("bndldx (%rax), %bnd0"); 173 + asm volatile("bndldx (%r8), %bnd0"); 174 + asm volatile("bndldx (0x12345678), %bnd0"); 175 + asm volatile("bndldx (%rax), %bnd3"); 176 + asm volatile("bndldx (%rcx,%rax,1), %bnd0"); 177 + asm volatile("bndldx 0x12345678(,%rax,1), %bnd0"); 178 + asm volatile("bndldx (%rax,%rcx,1), %bnd0"); 179 + asm volatile("bndldx 0x12(%rax), %bnd0"); 180 + asm volatile("bndldx 0x12(%rbp), %bnd0"); 181 + asm volatile("bndldx 0x12(%rcx,%rax,1), %bnd0"); 182 + asm volatile("bndldx 0x12(%rbp,%rax,1), %bnd0"); 183 + asm volatile("bndldx 0x12(%rax,%rcx,1), %bnd0"); 184 + asm volatile("bndldx 0x12345678(%rax), %bnd0"); 185 + asm volatile("bndldx 0x12345678(%rbp), %bnd0"); 186 + asm volatile("bndldx 0x12345678(%rcx,%rax,1), %bnd0"); 187 + asm volatile("bndldx 0x12345678(%rbp,%rax,1), %bnd0"); 188 + asm volatile("bndldx 0x12345678(%rax,%rcx,1), %bnd0"); 189 + 190 + /* bndstx bnd, mib */ 191 + 192 + asm volatile("bndstx %bnd0, (%rax)"); 193 + asm volatile("bndstx %bnd0, (%r8)"); 194 + asm volatile("bndstx %bnd0, (0x12345678)"); 195 + asm volatile("bndstx %bnd3, (%rax)"); 196 + asm volatile("bndstx %bnd0, (%rcx,%rax,1)"); 197 + asm volatile("bndstx %bnd0, 0x12345678(,%rax,1)"); 198 + asm volatile("bndstx %bnd0, (%rax,%rcx,1)"); 199 + asm volatile("bndstx %bnd0, 0x12(%rax)"); 200 + asm volatile("bndstx %bnd0, 0x12(%rbp)"); 201 + asm volatile("bndstx %bnd0, 0x12(%rcx,%rax,1)"); 202 + asm volatile("bndstx %bnd0, 0x12(%rbp,%rax,1)"); 203 + asm volatile("bndstx %bnd0, 0x12(%rax,%rcx,1)"); 204 + asm volatile("bndstx %bnd0, 0x12345678(%rax)"); 205 + asm volatile("bndstx %bnd0, 0x12345678(%rbp)"); 206 + asm volatile("bndstx %bnd0, 0x12345678(%rcx,%rax,1)"); 207 + asm volatile("bndstx %bnd0, 0x12345678(%rbp,%rax,1)"); 208 + asm volatile("bndstx %bnd0, 0x12345678(%rax,%rcx,1)"); 209 + 210 + /* bnd prefix on call, ret, jmp and all jcc */ 211 + 212 + asm volatile("bnd call label1"); /* Expecting: call unconditional 0 */ 213 + asm volatile("bnd call *(%eax)"); /* Expecting: call indirect 0 */ 214 + asm volatile("bnd ret"); /* Expecting: ret indirect 0 */ 215 + asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0 */ 216 + asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0 */ 217 + asm volatile("bnd jmp *(%ecx)"); /* Expecting: jmp indirect 0 */ 218 + asm volatile("bnd jne label1"); /* Expecting: jcc conditional 0 */ 219 + 220 + /* sha1rnds4 imm8, xmm2/m128, xmm1 */ 221 + 222 + asm volatile("sha1rnds4 $0x0, %xmm1, %xmm0"); 223 + asm volatile("sha1rnds4 $0x91, %xmm7, %xmm2"); 224 + asm volatile("sha1rnds4 $0x91, %xmm8, %xmm0"); 225 + asm volatile("sha1rnds4 $0x91, %xmm7, %xmm8"); 226 + asm volatile("sha1rnds4 $0x91, %xmm15, %xmm8"); 227 + asm volatile("sha1rnds4 $0x91, (%rax), %xmm0"); 228 + asm volatile("sha1rnds4 $0x91, (%r8), %xmm0"); 229 + asm volatile("sha1rnds4 $0x91, (0x12345678), %xmm0"); 230 + asm volatile("sha1rnds4 $0x91, (%rax), %xmm3"); 231 + asm volatile("sha1rnds4 $0x91, (%rcx,%rax,1), %xmm0"); 232 + asm volatile("sha1rnds4 $0x91, 0x12345678(,%rax,1), %xmm0"); 233 + asm volatile("sha1rnds4 $0x91, (%rax,%rcx,1), %xmm0"); 234 + asm volatile("sha1rnds4 $0x91, (%rax,%rcx,8), %xmm0"); 235 + asm volatile("sha1rnds4 $0x91, 0x12(%rax), %xmm0"); 236 + asm volatile("sha1rnds4 $0x91, 0x12(%rbp), %xmm0"); 237 + asm volatile("sha1rnds4 $0x91, 0x12(%rcx,%rax,1), %xmm0"); 238 + asm volatile("sha1rnds4 $0x91, 0x12(%rbp,%rax,1), %xmm0"); 239 + asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,1), %xmm0"); 240 + asm volatile("sha1rnds4 $0x91, 0x12(%rax,%rcx,8), %xmm0"); 241 + asm volatile("sha1rnds4 $0x91, 0x12345678(%rax), %xmm0"); 242 + asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp), %xmm0"); 243 + asm volatile("sha1rnds4 $0x91, 0x12345678(%rcx,%rax,1), %xmm0"); 244 + asm volatile("sha1rnds4 $0x91, 0x12345678(%rbp,%rax,1), %xmm0"); 245 + asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,1), %xmm0"); 246 + asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm0"); 247 + asm volatile("sha1rnds4 $0x91, 0x12345678(%rax,%rcx,8), %xmm15"); 248 + 249 + /* sha1nexte xmm2/m128, xmm1 */ 250 + 251 + asm volatile("sha1nexte %xmm1, %xmm0"); 252 + asm volatile("sha1nexte %xmm7, %xmm2"); 253 + asm volatile("sha1nexte %xmm8, %xmm0"); 254 + asm volatile("sha1nexte %xmm7, %xmm8"); 255 + asm volatile("sha1nexte %xmm15, %xmm8"); 256 + asm volatile("sha1nexte (%rax), %xmm0"); 257 + asm volatile("sha1nexte (%r8), %xmm0"); 258 + asm volatile("sha1nexte (0x12345678), %xmm0"); 259 + asm volatile("sha1nexte (%rax), %xmm3"); 260 + asm volatile("sha1nexte (%rcx,%rax,1), %xmm0"); 261 + asm volatile("sha1nexte 0x12345678(,%rax,1), %xmm0"); 262 + asm volatile("sha1nexte (%rax,%rcx,1), %xmm0"); 263 + asm volatile("sha1nexte (%rax,%rcx,8), %xmm0"); 264 + asm volatile("sha1nexte 0x12(%rax), %xmm0"); 265 + asm volatile("sha1nexte 0x12(%rbp), %xmm0"); 266 + asm volatile("sha1nexte 0x12(%rcx,%rax,1), %xmm0"); 267 + asm volatile("sha1nexte 0x12(%rbp,%rax,1), %xmm0"); 268 + asm volatile("sha1nexte 0x12(%rax,%rcx,1), %xmm0"); 269 + asm volatile("sha1nexte 0x12(%rax,%rcx,8), %xmm0"); 270 + asm volatile("sha1nexte 0x12345678(%rax), %xmm0"); 271 + asm volatile("sha1nexte 0x12345678(%rbp), %xmm0"); 272 + asm volatile("sha1nexte 0x12345678(%rcx,%rax,1), %xmm0"); 273 + asm volatile("sha1nexte 0x12345678(%rbp,%rax,1), %xmm0"); 274 + asm volatile("sha1nexte 0x12345678(%rax,%rcx,1), %xmm0"); 275 + asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm0"); 276 + asm volatile("sha1nexte 0x12345678(%rax,%rcx,8), %xmm15"); 277 + 278 + /* sha1msg1 xmm2/m128, xmm1 */ 279 + 280 + asm volatile("sha1msg1 %xmm1, %xmm0"); 281 + asm volatile("sha1msg1 %xmm7, %xmm2"); 282 + asm volatile("sha1msg1 %xmm8, %xmm0"); 283 + asm volatile("sha1msg1 %xmm7, %xmm8"); 284 + asm volatile("sha1msg1 %xmm15, %xmm8"); 285 + asm volatile("sha1msg1 (%rax), %xmm0"); 286 + asm volatile("sha1msg1 (%r8), %xmm0"); 287 + asm volatile("sha1msg1 (0x12345678), %xmm0"); 288 + asm volatile("sha1msg1 (%rax), %xmm3"); 289 + asm volatile("sha1msg1 (%rcx,%rax,1), %xmm0"); 290 + asm volatile("sha1msg1 0x12345678(,%rax,1), %xmm0"); 291 + asm volatile("sha1msg1 (%rax,%rcx,1), %xmm0"); 292 + asm volatile("sha1msg1 (%rax,%rcx,8), %xmm0"); 293 + asm volatile("sha1msg1 0x12(%rax), %xmm0"); 294 + asm volatile("sha1msg1 0x12(%rbp), %xmm0"); 295 + asm volatile("sha1msg1 0x12(%rcx,%rax,1), %xmm0"); 296 + asm volatile("sha1msg1 0x12(%rbp,%rax,1), %xmm0"); 297 + asm volatile("sha1msg1 0x12(%rax,%rcx,1), %xmm0"); 298 + asm volatile("sha1msg1 0x12(%rax,%rcx,8), %xmm0"); 299 + asm volatile("sha1msg1 0x12345678(%rax), %xmm0"); 300 + asm volatile("sha1msg1 0x12345678(%rbp), %xmm0"); 301 + asm volatile("sha1msg1 0x12345678(%rcx,%rax,1), %xmm0"); 302 + asm volatile("sha1msg1 0x12345678(%rbp,%rax,1), %xmm0"); 303 + asm volatile("sha1msg1 0x12345678(%rax,%rcx,1), %xmm0"); 304 + asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm0"); 305 + asm volatile("sha1msg1 0x12345678(%rax,%rcx,8), %xmm15"); 306 + 307 + /* sha1msg2 xmm2/m128, xmm1 */ 308 + 309 + asm volatile("sha1msg2 %xmm1, %xmm0"); 310 + asm volatile("sha1msg2 %xmm7, %xmm2"); 311 + asm volatile("sha1msg2 %xmm8, %xmm0"); 312 + asm volatile("sha1msg2 %xmm7, %xmm8"); 313 + asm volatile("sha1msg2 %xmm15, %xmm8"); 314 + asm volatile("sha1msg2 (%rax), %xmm0"); 315 + asm volatile("sha1msg2 (%r8), %xmm0"); 316 + asm volatile("sha1msg2 (0x12345678), %xmm0"); 317 + asm volatile("sha1msg2 (%rax), %xmm3"); 318 + asm volatile("sha1msg2 (%rcx,%rax,1), %xmm0"); 319 + asm volatile("sha1msg2 0x12345678(,%rax,1), %xmm0"); 320 + asm volatile("sha1msg2 (%rax,%rcx,1), %xmm0"); 321 + asm volatile("sha1msg2 (%rax,%rcx,8), %xmm0"); 322 + asm volatile("sha1msg2 0x12(%rax), %xmm0"); 323 + asm volatile("sha1msg2 0x12(%rbp), %xmm0"); 324 + asm volatile("sha1msg2 0x12(%rcx,%rax,1), %xmm0"); 325 + asm volatile("sha1msg2 0x12(%rbp,%rax,1), %xmm0"); 326 + asm volatile("sha1msg2 0x12(%rax,%rcx,1), %xmm0"); 327 + asm volatile("sha1msg2 0x12(%rax,%rcx,8), %xmm0"); 328 + asm volatile("sha1msg2 0x12345678(%rax), %xmm0"); 329 + asm volatile("sha1msg2 0x12345678(%rbp), %xmm0"); 330 + asm volatile("sha1msg2 0x12345678(%rcx,%rax,1), %xmm0"); 331 + asm volatile("sha1msg2 0x12345678(%rbp,%rax,1), %xmm0"); 332 + asm volatile("sha1msg2 0x12345678(%rax,%rcx,1), %xmm0"); 333 + asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm0"); 334 + asm volatile("sha1msg2 0x12345678(%rax,%rcx,8), %xmm15"); 335 + 336 + /* sha256rnds2 <XMM0>, xmm2/m128, xmm1 */ 337 + /* Note sha256rnds2 has an implicit operand 'xmm0' */ 338 + 339 + asm volatile("sha256rnds2 %xmm4, %xmm1"); 340 + asm volatile("sha256rnds2 %xmm7, %xmm2"); 341 + asm volatile("sha256rnds2 %xmm8, %xmm1"); 342 + asm volatile("sha256rnds2 %xmm7, %xmm8"); 343 + asm volatile("sha256rnds2 %xmm15, %xmm8"); 344 + asm volatile("sha256rnds2 (%rax), %xmm1"); 345 + asm volatile("sha256rnds2 (%r8), %xmm1"); 346 + asm volatile("sha256rnds2 (0x12345678), %xmm1"); 347 + asm volatile("sha256rnds2 (%rax), %xmm3"); 348 + asm volatile("sha256rnds2 (%rcx,%rax,1), %xmm1"); 349 + asm volatile("sha256rnds2 0x12345678(,%rax,1), %xmm1"); 350 + asm volatile("sha256rnds2 (%rax,%rcx,1), %xmm1"); 351 + asm volatile("sha256rnds2 (%rax,%rcx,8), %xmm1"); 352 + asm volatile("sha256rnds2 0x12(%rax), %xmm1"); 353 + asm volatile("sha256rnds2 0x12(%rbp), %xmm1"); 354 + asm volatile("sha256rnds2 0x12(%rcx,%rax,1), %xmm1"); 355 + asm volatile("sha256rnds2 0x12(%rbp,%rax,1), %xmm1"); 356 + asm volatile("sha256rnds2 0x12(%rax,%rcx,1), %xmm1"); 357 + asm volatile("sha256rnds2 0x12(%rax,%rcx,8), %xmm1"); 358 + asm volatile("sha256rnds2 0x12345678(%rax), %xmm1"); 359 + asm volatile("sha256rnds2 0x12345678(%rbp), %xmm1"); 360 + asm volatile("sha256rnds2 0x12345678(%rcx,%rax,1), %xmm1"); 361 + asm volatile("sha256rnds2 0x12345678(%rbp,%rax,1), %xmm1"); 362 + asm volatile("sha256rnds2 0x12345678(%rax,%rcx,1), %xmm1"); 363 + asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm1"); 364 + asm volatile("sha256rnds2 0x12345678(%rax,%rcx,8), %xmm15"); 365 + 366 + /* sha256msg1 xmm2/m128, xmm1 */ 367 + 368 + asm volatile("sha256msg1 %xmm1, %xmm0"); 369 + asm volatile("sha256msg1 %xmm7, %xmm2"); 370 + asm volatile("sha256msg1 %xmm8, %xmm0"); 371 + asm volatile("sha256msg1 %xmm7, %xmm8"); 372 + asm volatile("sha256msg1 %xmm15, %xmm8"); 373 + asm volatile("sha256msg1 (%rax), %xmm0"); 374 + asm volatile("sha256msg1 (%r8), %xmm0"); 375 + asm volatile("sha256msg1 (0x12345678), %xmm0"); 376 + asm volatile("sha256msg1 (%rax), %xmm3"); 377 + asm volatile("sha256msg1 (%rcx,%rax,1), %xmm0"); 378 + asm volatile("sha256msg1 0x12345678(,%rax,1), %xmm0"); 379 + asm volatile("sha256msg1 (%rax,%rcx,1), %xmm0"); 380 + asm volatile("sha256msg1 (%rax,%rcx,8), %xmm0"); 381 + asm volatile("sha256msg1 0x12(%rax), %xmm0"); 382 + asm volatile("sha256msg1 0x12(%rbp), %xmm0"); 383 + asm volatile("sha256msg1 0x12(%rcx,%rax,1), %xmm0"); 384 + asm volatile("sha256msg1 0x12(%rbp,%rax,1), %xmm0"); 385 + asm volatile("sha256msg1 0x12(%rax,%rcx,1), %xmm0"); 386 + asm volatile("sha256msg1 0x12(%rax,%rcx,8), %xmm0"); 387 + asm volatile("sha256msg1 0x12345678(%rax), %xmm0"); 388 + asm volatile("sha256msg1 0x12345678(%rbp), %xmm0"); 389 + asm volatile("sha256msg1 0x12345678(%rcx,%rax,1), %xmm0"); 390 + asm volatile("sha256msg1 0x12345678(%rbp,%rax,1), %xmm0"); 391 + asm volatile("sha256msg1 0x12345678(%rax,%rcx,1), %xmm0"); 392 + asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm0"); 393 + asm volatile("sha256msg1 0x12345678(%rax,%rcx,8), %xmm15"); 394 + 395 + /* sha256msg2 xmm2/m128, xmm1 */ 396 + 397 + asm volatile("sha256msg2 %xmm1, %xmm0"); 398 + asm volatile("sha256msg2 %xmm7, %xmm2"); 399 + asm volatile("sha256msg2 %xmm8, %xmm0"); 400 + asm volatile("sha256msg2 %xmm7, %xmm8"); 401 + asm volatile("sha256msg2 %xmm15, %xmm8"); 402 + asm volatile("sha256msg2 (%rax), %xmm0"); 403 + asm volatile("sha256msg2 (%r8), %xmm0"); 404 + asm volatile("sha256msg2 (0x12345678), %xmm0"); 405 + asm volatile("sha256msg2 (%rax), %xmm3"); 406 + asm volatile("sha256msg2 (%rcx,%rax,1), %xmm0"); 407 + asm volatile("sha256msg2 0x12345678(,%rax,1), %xmm0"); 408 + asm volatile("sha256msg2 (%rax,%rcx,1), %xmm0"); 409 + asm volatile("sha256msg2 (%rax,%rcx,8), %xmm0"); 410 + asm volatile("sha256msg2 0x12(%rax), %xmm0"); 411 + asm volatile("sha256msg2 0x12(%rbp), %xmm0"); 412 + asm volatile("sha256msg2 0x12(%rcx,%rax,1), %xmm0"); 413 + asm volatile("sha256msg2 0x12(%rbp,%rax,1), %xmm0"); 414 + asm volatile("sha256msg2 0x12(%rax,%rcx,1), %xmm0"); 415 + asm volatile("sha256msg2 0x12(%rax,%rcx,8), %xmm0"); 416 + asm volatile("sha256msg2 0x12345678(%rax), %xmm0"); 417 + asm volatile("sha256msg2 0x12345678(%rbp), %xmm0"); 418 + asm volatile("sha256msg2 0x12345678(%rcx,%rax,1), %xmm0"); 419 + asm volatile("sha256msg2 0x12345678(%rbp,%rax,1), %xmm0"); 420 + asm volatile("sha256msg2 0x12345678(%rax,%rcx,1), %xmm0"); 421 + asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm0"); 422 + asm volatile("sha256msg2 0x12345678(%rax,%rcx,8), %xmm15"); 423 + 424 + /* clflushopt m8 */ 425 + 426 + asm volatile("clflushopt (%rax)"); 427 + asm volatile("clflushopt (%r8)"); 428 + asm volatile("clflushopt (0x12345678)"); 429 + asm volatile("clflushopt 0x12345678(%rax,%rcx,8)"); 430 + asm volatile("clflushopt 0x12345678(%r8,%rcx,8)"); 431 + /* Also check instructions in the same group encoding as clflushopt */ 432 + asm volatile("clflush (%rax)"); 433 + asm volatile("clflush (%r8)"); 434 + asm volatile("sfence"); 435 + 436 + /* clwb m8 */ 437 + 438 + asm volatile("clwb (%rax)"); 439 + asm volatile("clwb (%r8)"); 440 + asm volatile("clwb (0x12345678)"); 441 + asm volatile("clwb 0x12345678(%rax,%rcx,8)"); 442 + asm volatile("clwb 0x12345678(%r8,%rcx,8)"); 443 + /* Also check instructions in the same group encoding as clwb */ 444 + asm volatile("xsaveopt (%rax)"); 445 + asm volatile("xsaveopt (%r8)"); 446 + asm volatile("mfence"); 447 + 448 + /* xsavec mem */ 449 + 450 + asm volatile("xsavec (%rax)"); 451 + asm volatile("xsavec (%r8)"); 452 + asm volatile("xsavec (0x12345678)"); 453 + asm volatile("xsavec 0x12345678(%rax,%rcx,8)"); 454 + asm volatile("xsavec 0x12345678(%r8,%rcx,8)"); 455 + 456 + /* xsaves mem */ 457 + 458 + asm volatile("xsaves (%rax)"); 459 + asm volatile("xsaves (%r8)"); 460 + asm volatile("xsaves (0x12345678)"); 461 + asm volatile("xsaves 0x12345678(%rax,%rcx,8)"); 462 + asm volatile("xsaves 0x12345678(%r8,%rcx,8)"); 463 + 464 + /* xrstors mem */ 465 + 466 + asm volatile("xrstors (%rax)"); 467 + asm volatile("xrstors (%r8)"); 468 + asm volatile("xrstors (0x12345678)"); 469 + asm volatile("xrstors 0x12345678(%rax,%rcx,8)"); 470 + asm volatile("xrstors 0x12345678(%r8,%rcx,8)"); 471 + 472 + #else /* #ifdef __x86_64__ */ 473 + 474 + /* bndmk m32, bnd */ 475 + 476 + asm volatile("bndmk (%eax), %bnd0"); 477 + asm volatile("bndmk (0x12345678), %bnd0"); 478 + asm volatile("bndmk (%eax), %bnd3"); 479 + asm volatile("bndmk (%ecx,%eax,1), %bnd0"); 480 + asm volatile("bndmk 0x12345678(,%eax,1), %bnd0"); 481 + asm volatile("bndmk (%eax,%ecx,1), %bnd0"); 482 + asm volatile("bndmk (%eax,%ecx,8), %bnd0"); 483 + asm volatile("bndmk 0x12(%eax), %bnd0"); 484 + asm volatile("bndmk 0x12(%ebp), %bnd0"); 485 + asm volatile("bndmk 0x12(%ecx,%eax,1), %bnd0"); 486 + asm volatile("bndmk 0x12(%ebp,%eax,1), %bnd0"); 487 + asm volatile("bndmk 0x12(%eax,%ecx,1), %bnd0"); 488 + asm volatile("bndmk 0x12(%eax,%ecx,8), %bnd0"); 489 + asm volatile("bndmk 0x12345678(%eax), %bnd0"); 490 + asm volatile("bndmk 0x12345678(%ebp), %bnd0"); 491 + asm volatile("bndmk 0x12345678(%ecx,%eax,1), %bnd0"); 492 + asm volatile("bndmk 0x12345678(%ebp,%eax,1), %bnd0"); 493 + asm volatile("bndmk 0x12345678(%eax,%ecx,1), %bnd0"); 494 + asm volatile("bndmk 0x12345678(%eax,%ecx,8), %bnd0"); 495 + 496 + /* bndcl r/m32, bnd */ 497 + 498 + asm volatile("bndcl (%eax), %bnd0"); 499 + asm volatile("bndcl (0x12345678), %bnd0"); 500 + asm volatile("bndcl (%eax), %bnd3"); 501 + asm volatile("bndcl (%ecx,%eax,1), %bnd0"); 502 + asm volatile("bndcl 0x12345678(,%eax,1), %bnd0"); 503 + asm volatile("bndcl (%eax,%ecx,1), %bnd0"); 504 + asm volatile("bndcl (%eax,%ecx,8), %bnd0"); 505 + asm volatile("bndcl 0x12(%eax), %bnd0"); 506 + asm volatile("bndcl 0x12(%ebp), %bnd0"); 507 + asm volatile("bndcl 0x12(%ecx,%eax,1), %bnd0"); 508 + asm volatile("bndcl 0x12(%ebp,%eax,1), %bnd0"); 509 + asm volatile("bndcl 0x12(%eax,%ecx,1), %bnd0"); 510 + asm volatile("bndcl 0x12(%eax,%ecx,8), %bnd0"); 511 + asm volatile("bndcl 0x12345678(%eax), %bnd0"); 512 + asm volatile("bndcl 0x12345678(%ebp), %bnd0"); 513 + asm volatile("bndcl 0x12345678(%ecx,%eax,1), %bnd0"); 514 + asm volatile("bndcl 0x12345678(%ebp,%eax,1), %bnd0"); 515 + asm volatile("bndcl 0x12345678(%eax,%ecx,1), %bnd0"); 516 + asm volatile("bndcl 0x12345678(%eax,%ecx,8), %bnd0"); 517 + asm volatile("bndcl %eax, %bnd0"); 518 + 519 + /* bndcu r/m32, bnd */ 520 + 521 + asm volatile("bndcu (%eax), %bnd0"); 522 + asm volatile("bndcu (0x12345678), %bnd0"); 523 + asm volatile("bndcu (%eax), %bnd3"); 524 + asm volatile("bndcu (%ecx,%eax,1), %bnd0"); 525 + asm volatile("bndcu 0x12345678(,%eax,1), %bnd0"); 526 + asm volatile("bndcu (%eax,%ecx,1), %bnd0"); 527 + asm volatile("bndcu (%eax,%ecx,8), %bnd0"); 528 + asm volatile("bndcu 0x12(%eax), %bnd0"); 529 + asm volatile("bndcu 0x12(%ebp), %bnd0"); 530 + asm volatile("bndcu 0x12(%ecx,%eax,1), %bnd0"); 531 + asm volatile("bndcu 0x12(%ebp,%eax,1), %bnd0"); 532 + asm volatile("bndcu 0x12(%eax,%ecx,1), %bnd0"); 533 + asm volatile("bndcu 0x12(%eax,%ecx,8), %bnd0"); 534 + asm volatile("bndcu 0x12345678(%eax), %bnd0"); 535 + asm volatile("bndcu 0x12345678(%ebp), %bnd0"); 536 + asm volatile("bndcu 0x12345678(%ecx,%eax,1), %bnd0"); 537 + asm volatile("bndcu 0x12345678(%ebp,%eax,1), %bnd0"); 538 + asm volatile("bndcu 0x12345678(%eax,%ecx,1), %bnd0"); 539 + asm volatile("bndcu 0x12345678(%eax,%ecx,8), %bnd0"); 540 + asm volatile("bndcu %eax, %bnd0"); 541 + 542 + /* bndcn r/m32, bnd */ 543 + 544 + asm volatile("bndcn (%eax), %bnd0"); 545 + asm volatile("bndcn (0x12345678), %bnd0"); 546 + asm volatile("bndcn (%eax), %bnd3"); 547 + asm volatile("bndcn (%ecx,%eax,1), %bnd0"); 548 + asm volatile("bndcn 0x12345678(,%eax,1), %bnd0"); 549 + asm volatile("bndcn (%eax,%ecx,1), %bnd0"); 550 + asm volatile("bndcn (%eax,%ecx,8), %bnd0"); 551 + asm volatile("bndcn 0x12(%eax), %bnd0"); 552 + asm volatile("bndcn 0x12(%ebp), %bnd0"); 553 + asm volatile("bndcn 0x12(%ecx,%eax,1), %bnd0"); 554 + asm volatile("bndcn 0x12(%ebp,%eax,1), %bnd0"); 555 + asm volatile("bndcn 0x12(%eax,%ecx,1), %bnd0"); 556 + asm volatile("bndcn 0x12(%eax,%ecx,8), %bnd0"); 557 + asm volatile("bndcn 0x12345678(%eax), %bnd0"); 558 + asm volatile("bndcn 0x12345678(%ebp), %bnd0"); 559 + asm volatile("bndcn 0x12345678(%ecx,%eax,1), %bnd0"); 560 + asm volatile("bndcn 0x12345678(%ebp,%eax,1), %bnd0"); 561 + asm volatile("bndcn 0x12345678(%eax,%ecx,1), %bnd0"); 562 + asm volatile("bndcn 0x12345678(%eax,%ecx,8), %bnd0"); 563 + asm volatile("bndcn %eax, %bnd0"); 564 + 565 + /* bndmov m64, bnd */ 566 + 567 + asm volatile("bndmov (%eax), %bnd0"); 568 + asm volatile("bndmov (0x12345678), %bnd0"); 569 + asm volatile("bndmov (%eax), %bnd3"); 570 + asm volatile("bndmov (%ecx,%eax,1), %bnd0"); 571 + asm volatile("bndmov 0x12345678(,%eax,1), %bnd0"); 572 + asm volatile("bndmov (%eax,%ecx,1), %bnd0"); 573 + asm volatile("bndmov (%eax,%ecx,8), %bnd0"); 574 + asm volatile("bndmov 0x12(%eax), %bnd0"); 575 + asm volatile("bndmov 0x12(%ebp), %bnd0"); 576 + asm volatile("bndmov 0x12(%ecx,%eax,1), %bnd0"); 577 + asm volatile("bndmov 0x12(%ebp,%eax,1), %bnd0"); 578 + asm volatile("bndmov 0x12(%eax,%ecx,1), %bnd0"); 579 + asm volatile("bndmov 0x12(%eax,%ecx,8), %bnd0"); 580 + asm volatile("bndmov 0x12345678(%eax), %bnd0"); 581 + asm volatile("bndmov 0x12345678(%ebp), %bnd0"); 582 + asm volatile("bndmov 0x12345678(%ecx,%eax,1), %bnd0"); 583 + asm volatile("bndmov 0x12345678(%ebp,%eax,1), %bnd0"); 584 + asm volatile("bndmov 0x12345678(%eax,%ecx,1), %bnd0"); 585 + asm volatile("bndmov 0x12345678(%eax,%ecx,8), %bnd0"); 586 + 587 + /* bndmov bnd, m64 */ 588 + 589 + asm volatile("bndmov %bnd0, (%eax)"); 590 + asm volatile("bndmov %bnd0, (0x12345678)"); 591 + asm volatile("bndmov %bnd3, (%eax)"); 592 + asm volatile("bndmov %bnd0, (%ecx,%eax,1)"); 593 + asm volatile("bndmov %bnd0, 0x12345678(,%eax,1)"); 594 + asm volatile("bndmov %bnd0, (%eax,%ecx,1)"); 595 + asm volatile("bndmov %bnd0, (%eax,%ecx,8)"); 596 + asm volatile("bndmov %bnd0, 0x12(%eax)"); 597 + asm volatile("bndmov %bnd0, 0x12(%ebp)"); 598 + asm volatile("bndmov %bnd0, 0x12(%ecx,%eax,1)"); 599 + asm volatile("bndmov %bnd0, 0x12(%ebp,%eax,1)"); 600 + asm volatile("bndmov %bnd0, 0x12(%eax,%ecx,1)"); 601 + asm volatile("bndmov %bnd0, 0x12(%eax,%ecx,8)"); 602 + asm volatile("bndmov %bnd0, 0x12345678(%eax)"); 603 + asm volatile("bndmov %bnd0, 0x12345678(%ebp)"); 604 + asm volatile("bndmov %bnd0, 0x12345678(%ecx,%eax,1)"); 605 + asm volatile("bndmov %bnd0, 0x12345678(%ebp,%eax,1)"); 606 + asm volatile("bndmov %bnd0, 0x12345678(%eax,%ecx,1)"); 607 + asm volatile("bndmov %bnd0, 0x12345678(%eax,%ecx,8)"); 608 + 609 + /* bndmov bnd2, bnd1 */ 610 + 611 + asm volatile("bndmov %bnd0, %bnd1"); 612 + asm volatile("bndmov %bnd1, %bnd0"); 613 + 614 + /* bndldx mib, bnd */ 615 + 616 + asm volatile("bndldx (%eax), %bnd0"); 617 + asm volatile("bndldx (0x12345678), %bnd0"); 618 + asm volatile("bndldx (%eax), %bnd3"); 619 + asm volatile("bndldx (%ecx,%eax,1), %bnd0"); 620 + asm volatile("bndldx 0x12345678(,%eax,1), %bnd0"); 621 + asm volatile("bndldx (%eax,%ecx,1), %bnd0"); 622 + asm volatile("bndldx 0x12(%eax), %bnd0"); 623 + asm volatile("bndldx 0x12(%ebp), %bnd0"); 624 + asm volatile("bndldx 0x12(%ecx,%eax,1), %bnd0"); 625 + asm volatile("bndldx 0x12(%ebp,%eax,1), %bnd0"); 626 + asm volatile("bndldx 0x12(%eax,%ecx,1), %bnd0"); 627 + asm volatile("bndldx 0x12345678(%eax), %bnd0"); 628 + asm volatile("bndldx 0x12345678(%ebp), %bnd0"); 629 + asm volatile("bndldx 0x12345678(%ecx,%eax,1), %bnd0"); 630 + asm volatile("bndldx 0x12345678(%ebp,%eax,1), %bnd0"); 631 + asm volatile("bndldx 0x12345678(%eax,%ecx,1), %bnd0"); 632 + 633 + /* bndstx bnd, mib */ 634 + 635 + asm volatile("bndstx %bnd0, (%eax)"); 636 + asm volatile("bndstx %bnd0, (0x12345678)"); 637 + asm volatile("bndstx %bnd3, (%eax)"); 638 + asm volatile("bndstx %bnd0, (%ecx,%eax,1)"); 639 + asm volatile("bndstx %bnd0, 0x12345678(,%eax,1)"); 640 + asm volatile("bndstx %bnd0, (%eax,%ecx,1)"); 641 + asm volatile("bndstx %bnd0, 0x12(%eax)"); 642 + asm volatile("bndstx %bnd0, 0x12(%ebp)"); 643 + asm volatile("bndstx %bnd0, 0x12(%ecx,%eax,1)"); 644 + asm volatile("bndstx %bnd0, 0x12(%ebp,%eax,1)"); 645 + asm volatile("bndstx %bnd0, 0x12(%eax,%ecx,1)"); 646 + asm volatile("bndstx %bnd0, 0x12345678(%eax)"); 647 + asm volatile("bndstx %bnd0, 0x12345678(%ebp)"); 648 + asm volatile("bndstx %bnd0, 0x12345678(%ecx,%eax,1)"); 649 + asm volatile("bndstx %bnd0, 0x12345678(%ebp,%eax,1)"); 650 + asm volatile("bndstx %bnd0, 0x12345678(%eax,%ecx,1)"); 651 + 652 + /* bnd prefix on call, ret, jmp and all jcc */ 653 + 654 + asm volatile("bnd call label1"); /* Expecting: call unconditional 0xfffffffc */ 655 + asm volatile("bnd call *(%eax)"); /* Expecting: call indirect 0 */ 656 + asm volatile("bnd ret"); /* Expecting: ret indirect 0 */ 657 + asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0xfffffffc */ 658 + asm volatile("bnd jmp label1"); /* Expecting: jmp unconditional 0xfffffffc */ 659 + asm volatile("bnd jmp *(%ecx)"); /* Expecting: jmp indirect 0 */ 660 + asm volatile("bnd jne label1"); /* Expecting: jcc conditional 0xfffffffc */ 661 + 662 + /* sha1rnds4 imm8, xmm2/m128, xmm1 */ 663 + 664 + asm volatile("sha1rnds4 $0x0, %xmm1, %xmm0"); 665 + asm volatile("sha1rnds4 $0x91, %xmm7, %xmm2"); 666 + asm volatile("sha1rnds4 $0x91, (%eax), %xmm0"); 667 + asm volatile("sha1rnds4 $0x91, (0x12345678), %xmm0"); 668 + asm volatile("sha1rnds4 $0x91, (%eax), %xmm3"); 669 + asm volatile("sha1rnds4 $0x91, (%ecx,%eax,1), %xmm0"); 670 + asm volatile("sha1rnds4 $0x91, 0x12345678(,%eax,1), %xmm0"); 671 + asm volatile("sha1rnds4 $0x91, (%eax,%ecx,1), %xmm0"); 672 + asm volatile("sha1rnds4 $0x91, (%eax,%ecx,8), %xmm0"); 673 + asm volatile("sha1rnds4 $0x91, 0x12(%eax), %xmm0"); 674 + asm volatile("sha1rnds4 $0x91, 0x12(%ebp), %xmm0"); 675 + asm volatile("sha1rnds4 $0x91, 0x12(%ecx,%eax,1), %xmm0"); 676 + asm volatile("sha1rnds4 $0x91, 0x12(%ebp,%eax,1), %xmm0"); 677 + asm volatile("sha1rnds4 $0x91, 0x12(%eax,%ecx,1), %xmm0"); 678 + asm volatile("sha1rnds4 $0x91, 0x12(%eax,%ecx,8), %xmm0"); 679 + asm volatile("sha1rnds4 $0x91, 0x12345678(%eax), %xmm0"); 680 + asm volatile("sha1rnds4 $0x91, 0x12345678(%ebp), %xmm0"); 681 + asm volatile("sha1rnds4 $0x91, 0x12345678(%ecx,%eax,1), %xmm0"); 682 + asm volatile("sha1rnds4 $0x91, 0x12345678(%ebp,%eax,1), %xmm0"); 683 + asm volatile("sha1rnds4 $0x91, 0x12345678(%eax,%ecx,1), %xmm0"); 684 + asm volatile("sha1rnds4 $0x91, 0x12345678(%eax,%ecx,8), %xmm0"); 685 + 686 + /* sha1nexte xmm2/m128, xmm1 */ 687 + 688 + asm volatile("sha1nexte %xmm1, %xmm0"); 689 + asm volatile("sha1nexte %xmm7, %xmm2"); 690 + asm volatile("sha1nexte (%eax), %xmm0"); 691 + asm volatile("sha1nexte (0x12345678), %xmm0"); 692 + asm volatile("sha1nexte (%eax), %xmm3"); 693 + asm volatile("sha1nexte (%ecx,%eax,1), %xmm0"); 694 + asm volatile("sha1nexte 0x12345678(,%eax,1), %xmm0"); 695 + asm volatile("sha1nexte (%eax,%ecx,1), %xmm0"); 696 + asm volatile("sha1nexte (%eax,%ecx,8), %xmm0"); 697 + asm volatile("sha1nexte 0x12(%eax), %xmm0"); 698 + asm volatile("sha1nexte 0x12(%ebp), %xmm0"); 699 + asm volatile("sha1nexte 0x12(%ecx,%eax,1), %xmm0"); 700 + asm volatile("sha1nexte 0x12(%ebp,%eax,1), %xmm0"); 701 + asm volatile("sha1nexte 0x12(%eax,%ecx,1), %xmm0"); 702 + asm volatile("sha1nexte 0x12(%eax,%ecx,8), %xmm0"); 703 + asm volatile("sha1nexte 0x12345678(%eax), %xmm0"); 704 + asm volatile("sha1nexte 0x12345678(%ebp), %xmm0"); 705 + asm volatile("sha1nexte 0x12345678(%ecx,%eax,1), %xmm0"); 706 + asm volatile("sha1nexte 0x12345678(%ebp,%eax,1), %xmm0"); 707 + asm volatile("sha1nexte 0x12345678(%eax,%ecx,1), %xmm0"); 708 + asm volatile("sha1nexte 0x12345678(%eax,%ecx,8), %xmm0"); 709 + 710 + /* sha1msg1 xmm2/m128, xmm1 */ 711 + 712 + asm volatile("sha1msg1 %xmm1, %xmm0"); 713 + asm volatile("sha1msg1 %xmm7, %xmm2"); 714 + asm volatile("sha1msg1 (%eax), %xmm0"); 715 + asm volatile("sha1msg1 (0x12345678), %xmm0"); 716 + asm volatile("sha1msg1 (%eax), %xmm3"); 717 + asm volatile("sha1msg1 (%ecx,%eax,1), %xmm0"); 718 + asm volatile("sha1msg1 0x12345678(,%eax,1), %xmm0"); 719 + asm volatile("sha1msg1 (%eax,%ecx,1), %xmm0"); 720 + asm volatile("sha1msg1 (%eax,%ecx,8), %xmm0"); 721 + asm volatile("sha1msg1 0x12(%eax), %xmm0"); 722 + asm volatile("sha1msg1 0x12(%ebp), %xmm0"); 723 + asm volatile("sha1msg1 0x12(%ecx,%eax,1), %xmm0"); 724 + asm volatile("sha1msg1 0x12(%ebp,%eax,1), %xmm0"); 725 + asm volatile("sha1msg1 0x12(%eax,%ecx,1), %xmm0"); 726 + asm volatile("sha1msg1 0x12(%eax,%ecx,8), %xmm0"); 727 + asm volatile("sha1msg1 0x12345678(%eax), %xmm0"); 728 + asm volatile("sha1msg1 0x12345678(%ebp), %xmm0"); 729 + asm volatile("sha1msg1 0x12345678(%ecx,%eax,1), %xmm0"); 730 + asm volatile("sha1msg1 0x12345678(%ebp,%eax,1), %xmm0"); 731 + asm volatile("sha1msg1 0x12345678(%eax,%ecx,1), %xmm0"); 732 + asm volatile("sha1msg1 0x12345678(%eax,%ecx,8), %xmm0"); 733 + 734 + /* sha1msg2 xmm2/m128, xmm1 */ 735 + 736 + asm volatile("sha1msg2 %xmm1, %xmm0"); 737 + asm volatile("sha1msg2 %xmm7, %xmm2"); 738 + asm volatile("sha1msg2 (%eax), %xmm0"); 739 + asm volatile("sha1msg2 (0x12345678), %xmm0"); 740 + asm volatile("sha1msg2 (%eax), %xmm3"); 741 + asm volatile("sha1msg2 (%ecx,%eax,1), %xmm0"); 742 + asm volatile("sha1msg2 0x12345678(,%eax,1), %xmm0"); 743 + asm volatile("sha1msg2 (%eax,%ecx,1), %xmm0"); 744 + asm volatile("sha1msg2 (%eax,%ecx,8), %xmm0"); 745 + asm volatile("sha1msg2 0x12(%eax), %xmm0"); 746 + asm volatile("sha1msg2 0x12(%ebp), %xmm0"); 747 + asm volatile("sha1msg2 0x12(%ecx,%eax,1), %xmm0"); 748 + asm volatile("sha1msg2 0x12(%ebp,%eax,1), %xmm0"); 749 + asm volatile("sha1msg2 0x12(%eax,%ecx,1), %xmm0"); 750 + asm volatile("sha1msg2 0x12(%eax,%ecx,8), %xmm0"); 751 + asm volatile("sha1msg2 0x12345678(%eax), %xmm0"); 752 + asm volatile("sha1msg2 0x12345678(%ebp), %xmm0"); 753 + asm volatile("sha1msg2 0x12345678(%ecx,%eax,1), %xmm0"); 754 + asm volatile("sha1msg2 0x12345678(%ebp,%eax,1), %xmm0"); 755 + asm volatile("sha1msg2 0x12345678(%eax,%ecx,1), %xmm0"); 756 + asm volatile("sha1msg2 0x12345678(%eax,%ecx,8), %xmm0"); 757 + 758 + /* sha256rnds2 <XMM0>, xmm2/m128, xmm1 */ 759 + /* Note sha256rnds2 has an implicit operand 'xmm0' */ 760 + 761 + asm volatile("sha256rnds2 %xmm4, %xmm1"); 762 + asm volatile("sha256rnds2 %xmm7, %xmm2"); 763 + asm volatile("sha256rnds2 (%eax), %xmm1"); 764 + asm volatile("sha256rnds2 (0x12345678), %xmm1"); 765 + asm volatile("sha256rnds2 (%eax), %xmm3"); 766 + asm volatile("sha256rnds2 (%ecx,%eax,1), %xmm1"); 767 + asm volatile("sha256rnds2 0x12345678(,%eax,1), %xmm1"); 768 + asm volatile("sha256rnds2 (%eax,%ecx,1), %xmm1"); 769 + asm volatile("sha256rnds2 (%eax,%ecx,8), %xmm1"); 770 + asm volatile("sha256rnds2 0x12(%eax), %xmm1"); 771 + asm volatile("sha256rnds2 0x12(%ebp), %xmm1"); 772 + asm volatile("sha256rnds2 0x12(%ecx,%eax,1), %xmm1"); 773 + asm volatile("sha256rnds2 0x12(%ebp,%eax,1), %xmm1"); 774 + asm volatile("sha256rnds2 0x12(%eax,%ecx,1), %xmm1"); 775 + asm volatile("sha256rnds2 0x12(%eax,%ecx,8), %xmm1"); 776 + asm volatile("sha256rnds2 0x12345678(%eax), %xmm1"); 777 + asm volatile("sha256rnds2 0x12345678(%ebp), %xmm1"); 778 + asm volatile("sha256rnds2 0x12345678(%ecx,%eax,1), %xmm1"); 779 + asm volatile("sha256rnds2 0x12345678(%ebp,%eax,1), %xmm1"); 780 + asm volatile("sha256rnds2 0x12345678(%eax,%ecx,1), %xmm1"); 781 + asm volatile("sha256rnds2 0x12345678(%eax,%ecx,8), %xmm1"); 782 + 783 + /* sha256msg1 xmm2/m128, xmm1 */ 784 + 785 + asm volatile("sha256msg1 %xmm1, %xmm0"); 786 + asm volatile("sha256msg1 %xmm7, %xmm2"); 787 + asm volatile("sha256msg1 (%eax), %xmm0"); 788 + asm volatile("sha256msg1 (0x12345678), %xmm0"); 789 + asm volatile("sha256msg1 (%eax), %xmm3"); 790 + asm volatile("sha256msg1 (%ecx,%eax,1), %xmm0"); 791 + asm volatile("sha256msg1 0x12345678(,%eax,1), %xmm0"); 792 + asm volatile("sha256msg1 (%eax,%ecx,1), %xmm0"); 793 + asm volatile("sha256msg1 (%eax,%ecx,8), %xmm0"); 794 + asm volatile("sha256msg1 0x12(%eax), %xmm0"); 795 + asm volatile("sha256msg1 0x12(%ebp), %xmm0"); 796 + asm volatile("sha256msg1 0x12(%ecx,%eax,1), %xmm0"); 797 + asm volatile("sha256msg1 0x12(%ebp,%eax,1), %xmm0"); 798 + asm volatile("sha256msg1 0x12(%eax,%ecx,1), %xmm0"); 799 + asm volatile("sha256msg1 0x12(%eax,%ecx,8), %xmm0"); 800 + asm volatile("sha256msg1 0x12345678(%eax), %xmm0"); 801 + asm volatile("sha256msg1 0x12345678(%ebp), %xmm0"); 802 + asm volatile("sha256msg1 0x12345678(%ecx,%eax,1), %xmm0"); 803 + asm volatile("sha256msg1 0x12345678(%ebp,%eax,1), %xmm0"); 804 + asm volatile("sha256msg1 0x12345678(%eax,%ecx,1), %xmm0"); 805 + asm volatile("sha256msg1 0x12345678(%eax,%ecx,8), %xmm0"); 806 + 807 + /* sha256msg2 xmm2/m128, xmm1 */ 808 + 809 + asm volatile("sha256msg2 %xmm1, %xmm0"); 810 + asm volatile("sha256msg2 %xmm7, %xmm2"); 811 + asm volatile("sha256msg2 (%eax), %xmm0"); 812 + asm volatile("sha256msg2 (0x12345678), %xmm0"); 813 + asm volatile("sha256msg2 (%eax), %xmm3"); 814 + asm volatile("sha256msg2 (%ecx,%eax,1), %xmm0"); 815 + asm volatile("sha256msg2 0x12345678(,%eax,1), %xmm0"); 816 + asm volatile("sha256msg2 (%eax,%ecx,1), %xmm0"); 817 + asm volatile("sha256msg2 (%eax,%ecx,8), %xmm0"); 818 + asm volatile("sha256msg2 0x12(%eax), %xmm0"); 819 + asm volatile("sha256msg2 0x12(%ebp), %xmm0"); 820 + asm volatile("sha256msg2 0x12(%ecx,%eax,1), %xmm0"); 821 + asm volatile("sha256msg2 0x12(%ebp,%eax,1), %xmm0"); 822 + asm volatile("sha256msg2 0x12(%eax,%ecx,1), %xmm0"); 823 + asm volatile("sha256msg2 0x12(%eax,%ecx,8), %xmm0"); 824 + asm volatile("sha256msg2 0x12345678(%eax), %xmm0"); 825 + asm volatile("sha256msg2 0x12345678(%ebp), %xmm0"); 826 + asm volatile("sha256msg2 0x12345678(%ecx,%eax,1), %xmm0"); 827 + asm volatile("sha256msg2 0x12345678(%ebp,%eax,1), %xmm0"); 828 + asm volatile("sha256msg2 0x12345678(%eax,%ecx,1), %xmm0"); 829 + asm volatile("sha256msg2 0x12345678(%eax,%ecx,8), %xmm0"); 830 + 831 + /* clflushopt m8 */ 832 + 833 + asm volatile("clflushopt (%eax)"); 834 + asm volatile("clflushopt (0x12345678)"); 835 + asm volatile("clflushopt 0x12345678(%eax,%ecx,8)"); 836 + /* Also check instructions in the same group encoding as clflushopt */ 837 + asm volatile("clflush (%eax)"); 838 + asm volatile("sfence"); 839 + 840 + /* clwb m8 */ 841 + 842 + asm volatile("clwb (%eax)"); 843 + asm volatile("clwb (0x12345678)"); 844 + asm volatile("clwb 0x12345678(%eax,%ecx,8)"); 845 + /* Also check instructions in the same group encoding as clwb */ 846 + asm volatile("xsaveopt (%eax)"); 847 + asm volatile("mfence"); 848 + 849 + /* xsavec mem */ 850 + 851 + asm volatile("xsavec (%eax)"); 852 + asm volatile("xsavec (0x12345678)"); 853 + asm volatile("xsavec 0x12345678(%eax,%ecx,8)"); 854 + 855 + /* xsaves mem */ 856 + 857 + asm volatile("xsaves (%eax)"); 858 + asm volatile("xsaves (0x12345678)"); 859 + asm volatile("xsaves 0x12345678(%eax,%ecx,8)"); 860 + 861 + /* xrstors mem */ 862 + 863 + asm volatile("xrstors (%eax)"); 864 + asm volatile("xrstors (0x12345678)"); 865 + asm volatile("xrstors 0x12345678(%eax,%ecx,8)"); 866 + 867 + #endif /* #ifndef __x86_64__ */ 868 + 869 + /* pcommit */ 870 + 871 + asm volatile("pcommit"); 872 + 873 + /* Following line is a marker for the awk script - do not change */ 874 + asm volatile("rdtsc"); /* Stop here */ 875 + 876 + return 0; 877 + }
+184
tools/perf/tests/insn-x86.c
··· 1 + #include <linux/types.h> 2 + 3 + #include "debug.h" 4 + #include "tests.h" 5 + 6 + #include "intel-pt-decoder/insn.h" 7 + #include "intel-pt-decoder/intel-pt-insn-decoder.h" 8 + 9 + struct test_data { 10 + u8 data[MAX_INSN_SIZE]; 11 + int expected_length; 12 + int expected_rel; 13 + const char *expected_op_str; 14 + const char *expected_branch_str; 15 + const char *asm_rep; 16 + }; 17 + 18 + struct test_data test_data_32[] = { 19 + #include "insn-x86-dat-32.c" 20 + {{0x0f, 0x01, 0xee}, 3, 0, NULL, NULL, "0f 01 ee \trdpkru"}, 21 + {{0x0f, 0x01, 0xef}, 3, 0, NULL, NULL, "0f 01 ef \twrpkru"}, 22 + {{0}, 0, 0, NULL, NULL, NULL}, 23 + }; 24 + 25 + struct test_data test_data_64[] = { 26 + #include "insn-x86-dat-64.c" 27 + {{0x0f, 0x01, 0xee}, 3, 0, NULL, NULL, "0f 01 ee \trdpkru"}, 28 + {{0x0f, 0x01, 0xef}, 3, 0, NULL, NULL, "0f 01 ef \twrpkru"}, 29 + {{0}, 0, 0, NULL, NULL, NULL}, 30 + }; 31 + 32 + static int get_op(const char *op_str) 33 + { 34 + struct val_data { 35 + const char *name; 36 + int val; 37 + } vals[] = { 38 + {"other", INTEL_PT_OP_OTHER}, 39 + {"call", INTEL_PT_OP_CALL}, 40 + {"ret", INTEL_PT_OP_RET}, 41 + {"jcc", INTEL_PT_OP_JCC}, 42 + {"jmp", INTEL_PT_OP_JMP}, 43 + {"loop", INTEL_PT_OP_LOOP}, 44 + {"iret", INTEL_PT_OP_IRET}, 45 + {"int", INTEL_PT_OP_INT}, 46 + {"syscall", INTEL_PT_OP_SYSCALL}, 47 + {"sysret", INTEL_PT_OP_SYSRET}, 48 + {NULL, 0}, 49 + }; 50 + struct val_data *val; 51 + 52 + if (!op_str || !strlen(op_str)) 53 + return 0; 54 + 55 + for (val = vals; val->name; val++) { 56 + if (!strcmp(val->name, op_str)) 57 + return val->val; 58 + } 59 + 60 + pr_debug("Failed to get op\n"); 61 + 62 + return -1; 63 + } 64 + 65 + static int get_branch(const char *branch_str) 66 + { 67 + struct val_data { 68 + const char *name; 69 + int val; 70 + } vals[] = { 71 + {"no_branch", INTEL_PT_BR_NO_BRANCH}, 72 + {"indirect", INTEL_PT_BR_INDIRECT}, 73 + {"conditional", INTEL_PT_BR_CONDITIONAL}, 74 + {"unconditional", INTEL_PT_BR_UNCONDITIONAL}, 75 + {NULL, 0}, 76 + }; 77 + struct val_data *val; 78 + 79 + if (!branch_str || !strlen(branch_str)) 80 + return 0; 81 + 82 + for (val = vals; val->name; val++) { 83 + if (!strcmp(val->name, branch_str)) 84 + return val->val; 85 + } 86 + 87 + pr_debug("Failed to get branch\n"); 88 + 89 + return -1; 90 + } 91 + 92 + static int test_data_item(struct test_data *dat, int x86_64) 93 + { 94 + struct intel_pt_insn intel_pt_insn; 95 + struct insn insn; 96 + int op, branch; 97 + 98 + insn_init(&insn, dat->data, MAX_INSN_SIZE, x86_64); 99 + insn_get_length(&insn); 100 + 101 + if (!insn_complete(&insn)) { 102 + pr_debug("Failed to decode: %s\n", dat->asm_rep); 103 + return -1; 104 + } 105 + 106 + if (insn.length != dat->expected_length) { 107 + pr_debug("Failed to decode length (%d vs expected %d): %s\n", 108 + insn.length, dat->expected_length, dat->asm_rep); 109 + return -1; 110 + } 111 + 112 + op = get_op(dat->expected_op_str); 113 + branch = get_branch(dat->expected_branch_str); 114 + 115 + if (intel_pt_get_insn(dat->data, MAX_INSN_SIZE, x86_64, &intel_pt_insn)) { 116 + pr_debug("Intel PT failed to decode: %s\n", dat->asm_rep); 117 + return -1; 118 + } 119 + 120 + if ((int)intel_pt_insn.op != op) { 121 + pr_debug("Failed to decode 'op' value (%d vs expected %d): %s\n", 122 + intel_pt_insn.op, op, dat->asm_rep); 123 + return -1; 124 + } 125 + 126 + if ((int)intel_pt_insn.branch != branch) { 127 + pr_debug("Failed to decode 'branch' value (%d vs expected %d): %s\n", 128 + intel_pt_insn.branch, branch, dat->asm_rep); 129 + return -1; 130 + } 131 + 132 + if (intel_pt_insn.rel != dat->expected_rel) { 133 + pr_debug("Failed to decode 'rel' value (%#x vs expected %#x): %s\n", 134 + intel_pt_insn.rel, dat->expected_rel, dat->asm_rep); 135 + return -1; 136 + } 137 + 138 + pr_debug("Decoded ok: %s\n", dat->asm_rep); 139 + 140 + return 0; 141 + } 142 + 143 + static int test_data_set(struct test_data *dat_set, int x86_64) 144 + { 145 + struct test_data *dat; 146 + int ret = 0; 147 + 148 + for (dat = dat_set; dat->expected_length; dat++) { 149 + if (test_data_item(dat, x86_64)) 150 + ret = -1; 151 + } 152 + 153 + return ret; 154 + } 155 + 156 + /** 157 + * test__insn_x86 - test x86 instruction decoder - new instructions. 158 + * 159 + * This function implements a test that decodes a selection of instructions and 160 + * checks the results. The Intel PT function that further categorizes 161 + * instructions (i.e. intel_pt_get_insn()) is also checked. 162 + * 163 + * The instructions are originally in insn-x86-dat-src.c which has been 164 + * processed by scripts gen-insn-x86-dat.sh and gen-insn-x86-dat.awk to produce 165 + * insn-x86-dat-32.c and insn-x86-dat-64.c which are included into this program. 166 + * i.e. to add new instructions to the test, edit insn-x86-dat-src.c, run the 167 + * gen-insn-x86-dat.sh script, make perf, and then run the test. 168 + * 169 + * If the test passes %0 is returned, otherwise %-1 is returned. Use the 170 + * verbose (-v) option to see all the instructions and whether or not they 171 + * decoded successfuly. 172 + */ 173 + int test__insn_x86(void) 174 + { 175 + int ret = 0; 176 + 177 + if (test_data_set(test_data_32, 0)) 178 + ret = -1; 179 + 180 + if (test_data_set(test_data_64, 1)) 181 + ret = -1; 182 + 183 + return ret; 184 + }
+1
tools/perf/tests/tests.h
··· 63 63 int test__kmod_path__parse(void); 64 64 int test__thread_map(void); 65 65 int test__llvm(void); 66 + int test__insn_x86(void); 66 67 67 68 #if defined(__x86_64__) || defined(__i386__) || defined(__arm__) || defined(__aarch64__) 68 69 #ifdef HAVE_DWARF_UNWIND_SUPPORT
+2
tools/perf/trace/strace/groups/file
··· 9 9 open 10 10 openat 11 11 quotactl 12 + read 12 13 readlink 13 14 rename 14 15 rmdir ··· 17 16 statfs 18 17 symlink 19 18 unlink 19 + write
+33 -18
tools/perf/util/cpumap.c
··· 225 225 cpu_map__delete(map); 226 226 } 227 227 228 - int cpu_map__get_socket(struct cpu_map *map, int idx) 228 + int cpu_map__get_socket_id(int cpu) 229 229 { 230 230 FILE *fp; 231 231 const char *mnt; 232 232 char path[PATH_MAX]; 233 - int cpu, ret; 234 - 235 - if (idx > map->nr) 236 - return -1; 237 - 238 - cpu = map->map[idx]; 233 + int socket_id, ret; 239 234 240 235 mnt = sysfs__mountpoint(); 241 236 if (!mnt) ··· 243 248 fp = fopen(path, "r"); 244 249 if (!fp) 245 250 return -1; 246 - ret = fscanf(fp, "%d", &cpu); 251 + ret = fscanf(fp, "%d", &socket_id); 247 252 fclose(fp); 248 - return ret == 1 ? cpu : -1; 253 + 254 + return ret == 1 ? socket_id : -1; 255 + } 256 + 257 + int cpu_map__get_socket(struct cpu_map *map, int idx) 258 + { 259 + int cpu; 260 + 261 + if (idx > map->nr) 262 + return -1; 263 + 264 + cpu = map->map[idx]; 265 + 266 + return cpu_map__get_socket_id(cpu); 249 267 } 250 268 251 269 static int cmp_ids(const void *a, const void *b) ··· 297 289 return 0; 298 290 } 299 291 300 - int cpu_map__get_core(struct cpu_map *map, int idx) 292 + int cpu_map__get_core_id(int cpu) 301 293 { 302 294 FILE *fp; 303 295 const char *mnt; 304 296 char path[PATH_MAX]; 305 - int cpu, ret, s; 306 - 307 - if (idx > map->nr) 308 - return -1; 309 - 310 - cpu = map->map[idx]; 297 + int core_id, ret; 311 298 312 299 mnt = sysfs__mountpoint(); 313 300 if (!mnt) ··· 315 312 fp = fopen(path, "r"); 316 313 if (!fp) 317 314 return -1; 318 - ret = fscanf(fp, "%d", &cpu); 315 + ret = fscanf(fp, "%d", &core_id); 319 316 fclose(fp); 320 - if (ret != 1) 317 + 318 + return ret == 1 ? core_id : -1; 319 + } 320 + 321 + int cpu_map__get_core(struct cpu_map *map, int idx) 322 + { 323 + int cpu, s; 324 + 325 + if (idx > map->nr) 321 326 return -1; 327 + 328 + cpu = map->map[idx]; 329 + 330 + cpu = cpu_map__get_core_id(cpu); 322 331 323 332 s = cpu_map__get_socket(map, idx); 324 333 if (s == -1)
+2
tools/perf/util/cpumap.h
··· 18 18 struct cpu_map *cpu_map__dummy_new(void); 19 19 struct cpu_map *cpu_map__read(FILE *file); 20 20 size_t cpu_map__fprintf(struct cpu_map *map, FILE *fp); 21 + int cpu_map__get_socket_id(int cpu); 21 22 int cpu_map__get_socket(struct cpu_map *map, int idx); 23 + int cpu_map__get_core_id(int cpu); 22 24 int cpu_map__get_core(struct cpu_map *map, int idx); 23 25 int cpu_map__build_socket_map(struct cpu_map *cpus, struct cpu_map **sockp); 24 26 int cpu_map__build_core_map(struct cpu_map *cpus, struct cpu_map **corep);
+89 -5
tools/perf/util/header.c
··· 88 88 return err; 89 89 } 90 90 91 + #define string_size(str) \ 92 + (PERF_ALIGN((strlen(str) + 1), NAME_ALIGN) + sizeof(u32)) 93 + 91 94 static int do_write_string(int fd, const char *str) 92 95 { 93 96 u32 len, olen; ··· 444 441 "/sys/devices/system/cpu/cpu%d/topology/thread_siblings_list" 445 442 446 443 struct cpu_topo { 444 + u32 cpu_nr; 447 445 u32 core_sib; 448 446 u32 thread_sib; 449 447 char **core_siblings; 450 448 char **thread_siblings; 449 + int *core_id; 450 + int *phy_pkg_id; 451 451 }; 452 452 453 453 static int build_cpu_topo(struct cpu_topo *tp, int cpu) ··· 513 507 } 514 508 ret = 0; 515 509 done: 510 + tp->core_id[cpu] = cpu_map__get_core_id(cpu); 511 + tp->phy_pkg_id[cpu] = cpu_map__get_socket_id(cpu); 512 + 516 513 if(fp) 517 514 fclose(fp); 518 515 free(buf); ··· 543 534 struct cpu_topo *tp; 544 535 void *addr; 545 536 u32 nr, i; 546 - size_t sz; 537 + size_t sz, sz_id; 547 538 long ncpus; 548 539 int ret = -1; 549 540 ··· 554 545 nr = (u32)(ncpus & UINT_MAX); 555 546 556 547 sz = nr * sizeof(char *); 548 + sz_id = nr * sizeof(int); 557 549 558 - addr = calloc(1, sizeof(*tp) + 2 * sz); 550 + addr = calloc(1, sizeof(*tp) + 2 * sz + 2 * sz_id); 559 551 if (!addr) 560 552 return NULL; 561 553 562 554 tp = addr; 563 - 555 + tp->cpu_nr = nr; 564 556 addr += sizeof(*tp); 565 557 tp->core_siblings = addr; 566 558 addr += sz; 567 559 tp->thread_siblings = addr; 560 + addr += sz; 561 + tp->core_id = addr; 562 + addr += sz_id; 563 + tp->phy_pkg_id = addr; 568 564 569 565 for (i = 0; i < nr; i++) { 570 566 ret = build_cpu_topo(tp, i); ··· 611 597 ret = do_write_string(fd, tp->thread_siblings[i]); 612 598 if (ret < 0) 613 599 break; 600 + } 601 + 602 + for (i = 0; i < tp->cpu_nr; i++) { 603 + ret = do_write(fd, &tp->core_id[i], sizeof(int)); 604 + if (ret < 0) 605 + return ret; 606 + ret = do_write(fd, &tp->phy_pkg_id[i], sizeof(int)); 607 + if (ret < 0) 608 + return ret; 614 609 } 615 610 done: 616 611 free_cpu_topo(tp); ··· 961 938 { 962 939 int nr, i; 963 940 char *str; 941 + int cpu_nr = ph->env.nr_cpus_online; 964 942 965 943 nr = ph->env.nr_sibling_cores; 966 944 str = ph->env.sibling_cores; ··· 978 954 fprintf(fp, "# sibling threads : %s\n", str); 979 955 str += strlen(str) + 1; 980 956 } 957 + 958 + if (ph->env.cpu != NULL) { 959 + for (i = 0; i < cpu_nr; i++) 960 + fprintf(fp, "# CPU %d: Core ID %d, Socket ID %d\n", i, 961 + ph->env.cpu[i].core_id, ph->env.cpu[i].socket_id); 962 + } else 963 + fprintf(fp, "# Core ID and Socket ID information is not available\n"); 981 964 } 982 965 983 966 static void free_event_desc(struct perf_evsel *events) ··· 1613 1582 return -1; 1614 1583 } 1615 1584 1616 - static int process_cpu_topology(struct perf_file_section *section __maybe_unused, 1585 + static int process_cpu_topology(struct perf_file_section *section, 1617 1586 struct perf_header *ph, int fd, 1618 1587 void *data __maybe_unused) 1619 1588 { ··· 1621 1590 u32 nr, i; 1622 1591 char *str; 1623 1592 struct strbuf sb; 1593 + int cpu_nr = ph->env.nr_cpus_online; 1594 + u64 size = 0; 1595 + 1596 + ph->env.cpu = calloc(cpu_nr, sizeof(*ph->env.cpu)); 1597 + if (!ph->env.cpu) 1598 + return -1; 1624 1599 1625 1600 ret = readn(fd, &nr, sizeof(nr)); 1626 1601 if (ret != sizeof(nr)) 1627 - return -1; 1602 + goto free_cpu; 1628 1603 1629 1604 if (ph->needs_swap) 1630 1605 nr = bswap_32(nr); 1631 1606 1632 1607 ph->env.nr_sibling_cores = nr; 1608 + size += sizeof(u32); 1633 1609 strbuf_init(&sb, 128); 1634 1610 1635 1611 for (i = 0; i < nr; i++) { ··· 1646 1608 1647 1609 /* include a NULL character at the end */ 1648 1610 strbuf_add(&sb, str, strlen(str) + 1); 1611 + size += string_size(str); 1649 1612 free(str); 1650 1613 } 1651 1614 ph->env.sibling_cores = strbuf_detach(&sb, NULL); ··· 1659 1620 nr = bswap_32(nr); 1660 1621 1661 1622 ph->env.nr_sibling_threads = nr; 1623 + size += sizeof(u32); 1662 1624 1663 1625 for (i = 0; i < nr; i++) { 1664 1626 str = do_read_string(fd, ph); ··· 1668 1628 1669 1629 /* include a NULL character at the end */ 1670 1630 strbuf_add(&sb, str, strlen(str) + 1); 1631 + size += string_size(str); 1671 1632 free(str); 1672 1633 } 1673 1634 ph->env.sibling_threads = strbuf_detach(&sb, NULL); 1635 + 1636 + /* 1637 + * The header may be from old perf, 1638 + * which doesn't include core id and socket id information. 1639 + */ 1640 + if (section->size <= size) { 1641 + zfree(&ph->env.cpu); 1642 + return 0; 1643 + } 1644 + 1645 + for (i = 0; i < (u32)cpu_nr; i++) { 1646 + ret = readn(fd, &nr, sizeof(nr)); 1647 + if (ret != sizeof(nr)) 1648 + goto free_cpu; 1649 + 1650 + if (ph->needs_swap) 1651 + nr = bswap_32(nr); 1652 + 1653 + if (nr > (u32)cpu_nr) { 1654 + pr_debug("core_id number is too big." 1655 + "You may need to upgrade the perf tool.\n"); 1656 + goto free_cpu; 1657 + } 1658 + ph->env.cpu[i].core_id = nr; 1659 + 1660 + ret = readn(fd, &nr, sizeof(nr)); 1661 + if (ret != sizeof(nr)) 1662 + goto free_cpu; 1663 + 1664 + if (ph->needs_swap) 1665 + nr = bswap_32(nr); 1666 + 1667 + if (nr > (u32)cpu_nr) { 1668 + pr_debug("socket_id number is too big." 1669 + "You may need to upgrade the perf tool.\n"); 1670 + goto free_cpu; 1671 + } 1672 + 1673 + ph->env.cpu[i].socket_id = nr; 1674 + } 1675 + 1674 1676 return 0; 1675 1677 1676 1678 error: 1677 1679 strbuf_release(&sb); 1680 + free_cpu: 1681 + zfree(&ph->env.cpu); 1678 1682 return -1; 1679 1683 } 1680 1684
+6
tools/perf/util/header.h
··· 66 66 int perf_file_header__read(struct perf_file_header *header, 67 67 struct perf_header *ph, int fd); 68 68 69 + struct cpu_topology_map { 70 + int socket_id; 71 + int core_id; 72 + }; 73 + 69 74 struct perf_env { 70 75 char *hostname; 71 76 char *os_release; ··· 94 89 char *sibling_threads; 95 90 char *numa_nodes; 96 91 char *pmu_mappings; 92 + struct cpu_topology_map *cpu; 97 93 }; 98 94 99 95 struct perf_header {
+12 -1
tools/perf/util/intel-pt-decoder/Build
··· 7 7 $(call rule_mkdir) 8 8 @$(call echo-cmd,gen)$(AWK) -f $(inat_tables_script) $(inat_tables_maps) > $@ || rm -f $@ 9 9 10 - $(OUTPUT)util/intel-pt-decoder/intel-pt-insn-decoder.o: util/intel-pt-decoder/inat.c $(OUTPUT)util/intel-pt-decoder/inat-tables.c 10 + $(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 11 + @(test -d ../../kernel -a -d ../../tools -a -d ../perf && (( \ 12 + diff -B -I'^#include' util/intel-pt-decoder/insn.c ../../arch/x86/lib/insn.c >/dev/null && \ 13 + diff -B -I'^#include' util/intel-pt-decoder/inat.c ../../arch/x86/lib/inat.c >/dev/null && \ 14 + diff -B util/intel-pt-decoder/x86-opcode-map.txt ../../arch/x86/lib/x86-opcode-map.txt >/dev/null && \ 15 + diff -B util/intel-pt-decoder/gen-insn-attr-x86.awk ../../arch/x86/tools/gen-insn-attr-x86.awk >/dev/null && \ 16 + diff -B -I'^#include' util/intel-pt-decoder/insn.h ../../arch/x86/include/asm/insn.h >/dev/null && \ 17 + diff -B -I'^#include' util/intel-pt-decoder/inat.h ../../arch/x86/include/asm/inat.h >/dev/null && \ 18 + diff -B -I'^#include' util/intel-pt-decoder/inat_types.h ../../arch/x86/include/asm/inat_types.h >/dev/null) \ 19 + || echo "Warning: Intel PT: x86 instruction decoder differs from kernel" >&2 )) || true 20 + $(call rule_mkdir) 21 + $(call if_changed_dep,cc_o_c) 11 22 12 23 CFLAGS_intel-pt-insn-decoder.o += -I$(OUTPUT)util/intel-pt-decoder -Wno-override-init
+19 -5
tools/perf/util/intel-pt-decoder/x86-opcode-map.txt
··· 353 353 17: vmovhps Mq,Vq (v1) | vmovhpd Mq,Vq (66),(v1) 354 354 18: Grp16 (1A) 355 355 19: 356 - 1a: BNDCL Ev,Gv | BNDCU Ev,Gv | BNDMOV Gv,Ev | BNDLDX Gv,Ev,Gv 357 - 1b: BNDCN Ev,Gv | BNDMOV Ev,Gv | BNDMK Gv,Ev | BNDSTX Ev,GV,Gv 356 + # Intel SDM opcode map does not list MPX instructions. For now using Gv for 357 + # bnd registers and Ev for everything else is OK because the instruction 358 + # decoder does not use the information except as an indication that there is 359 + # a ModR/M byte. 360 + 1a: BNDCL Gv,Ev (F3) | BNDCU Gv,Ev (F2) | BNDMOV Gv,Ev (66) | BNDLDX Gv,Ev 361 + 1b: BNDCN Gv,Ev (F2) | BNDMOV Ev,Gv (66) | BNDMK Gv,Ev (F3) | BNDSTX Ev,Gv 358 362 1c: 359 363 1d: 360 364 1e: ··· 736 732 be: vfnmsub231ps/d Vx,Hx,Wx (66),(v) 737 733 bf: vfnmsub231ss/d Vx,Hx,Wx (66),(v),(v1) 738 734 # 0x0f 0x38 0xc0-0xff 735 + c8: sha1nexte Vdq,Wdq 736 + c9: sha1msg1 Vdq,Wdq 737 + ca: sha1msg2 Vdq,Wdq 738 + cb: sha256rnds2 Vdq,Wdq 739 + cc: sha256msg1 Vdq,Wdq 740 + cd: sha256msg2 Vdq,Wdq 739 741 db: VAESIMC Vdq,Wdq (66),(v1) 740 742 dc: VAESENC Vdq,Hdq,Wdq (66),(v1) 741 743 dd: VAESENCLAST Vdq,Hdq,Wdq (66),(v1) ··· 800 790 61: vpcmpestri Vdq,Wdq,Ib (66),(v1) 801 791 62: vpcmpistrm Vdq,Wdq,Ib (66),(v1) 802 792 63: vpcmpistri Vdq,Wdq,Ib (66),(v1) 793 + cc: sha1rnds4 Vdq,Wdq,Ib 803 794 df: VAESKEYGEN Vdq,Wdq,Ib (66),(v1) 804 795 f0: RORX Gy,Ey,Ib (F2),(v) 805 796 EndTable ··· 885 874 2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B) 886 875 3: LIDT Ms 887 876 4: SMSW Mw/Rv 888 - 5: 877 + 5: rdpkru (110),(11B) | wrpkru (111),(11B) 889 878 6: LMSW Ew 890 879 7: INVLPG Mb | SWAPGS (o64),(000),(11B) | RDTSCP (001),(11B) 891 880 EndTable ··· 899 888 900 889 GrpTable: Grp9 901 890 1: CMPXCHG8B/16B Mq/Mdq 891 + 3: xrstors 892 + 4: xsavec 893 + 5: xsaves 902 894 6: VMPTRLD Mq | VMCLEAR Mq (66) | VMXON Mq (F3) | RDRAND Rv (11B) 903 895 7: VMPTRST Mq | VMPTRST Mq (F3) | RDSEED Rv (11B) 904 896 EndTable ··· 946 932 3: vstmxcsr Md (v1) | WRGSBASE Ry (F3),(11B) 947 933 4: XSAVE 948 934 5: XRSTOR | lfence (11B) 949 - 6: XSAVEOPT | mfence (11B) 950 - 7: clflush | sfence (11B) 935 + 6: XSAVEOPT | clwb (66) | mfence (11B) 936 + 7: clflush | clflushopt (66) | sfence (11B) | pcommit (66),(11B) 951 937 EndTable 952 938 953 939 GrpTable: Grp16
+104 -25
tools/perf/util/intel-pt.c
··· 1145 1145 return 0; 1146 1146 } 1147 1147 1148 - static u64 intel_pt_switch_ip(struct machine *machine, u64 *ptss_ip) 1148 + static u64 intel_pt_switch_ip(struct intel_pt *pt, u64 *ptss_ip) 1149 1149 { 1150 + struct machine *machine = pt->machine; 1150 1151 struct map *map; 1151 1152 struct symbol *sym, *start; 1152 1153 u64 ip, switch_ip = 0; 1154 + const char *ptss; 1153 1155 1154 1156 if (ptss_ip) 1155 1157 *ptss_ip = 0; ··· 1179 1177 if (!switch_ip || !ptss_ip) 1180 1178 return 0; 1181 1179 1180 + if (pt->have_sched_switch == 1) 1181 + ptss = "perf_trace_sched_switch"; 1182 + else 1183 + ptss = "__perf_event_task_sched_out"; 1184 + 1182 1185 for (sym = start; sym; sym = dso__next_symbol(sym)) { 1183 - if (!strcmp(sym->name, "perf_trace_sched_switch")) { 1186 + if (!strcmp(sym->name, ptss)) { 1184 1187 ip = map->unmap_ip(map, sym->start); 1185 1188 if (ip >= map->start && ip < map->end) { 1186 1189 *ptss_ip = ip; ··· 1205 1198 1206 1199 if (!pt->kernel_start) { 1207 1200 pt->kernel_start = machine__kernel_start(pt->machine); 1208 - if (pt->per_cpu_mmaps && pt->have_sched_switch && 1201 + if (pt->per_cpu_mmaps && 1202 + (pt->have_sched_switch == 1 || pt->have_sched_switch == 3) && 1209 1203 !pt->timeless_decoding && intel_pt_tracing_kernel(pt) && 1210 1204 !pt->sampling_mode) { 1211 - pt->switch_ip = intel_pt_switch_ip(pt->machine, 1212 - &pt->ptss_ip); 1205 + pt->switch_ip = intel_pt_switch_ip(pt, &pt->ptss_ip); 1213 1206 if (pt->switch_ip) { 1214 1207 intel_pt_log("switch_ip: %"PRIx64" ptss_ip: %"PRIx64"\n", 1215 1208 pt->switch_ip, pt->ptss_ip); ··· 1394 1387 return NULL; 1395 1388 } 1396 1389 1397 - static int intel_pt_process_switch(struct intel_pt *pt, 1398 - struct perf_sample *sample) 1390 + static int intel_pt_sync_switch(struct intel_pt *pt, int cpu, pid_t tid, 1391 + u64 timestamp) 1399 1392 { 1400 1393 struct intel_pt_queue *ptq; 1401 - struct perf_evsel *evsel; 1402 - pid_t tid; 1403 - int cpu, err; 1404 - 1405 - evsel = perf_evlist__id2evsel(pt->session->evlist, sample->id); 1406 - if (evsel != pt->switch_evsel) 1407 - return 0; 1408 - 1409 - tid = perf_evsel__intval(evsel, sample, "next_pid"); 1410 - cpu = sample->cpu; 1411 - 1412 - intel_pt_log("sched_switch: cpu %d tid %d time %"PRIu64" tsc %#"PRIx64"\n", 1413 - cpu, tid, sample->time, perf_time_to_tsc(sample->time, 1414 - &pt->tc)); 1394 + int err; 1415 1395 1416 1396 if (!pt->sync_switch) 1417 - goto out; 1397 + return 1; 1418 1398 1419 1399 ptq = intel_pt_cpu_to_ptq(pt, cpu); 1420 1400 if (!ptq) 1421 - goto out; 1401 + return 1; 1422 1402 1423 1403 switch (ptq->switch_state) { 1424 1404 case INTEL_PT_SS_NOT_TRACING: ··· 1418 1424 return 0; 1419 1425 case INTEL_PT_SS_EXPECTING_SWITCH_EVENT: 1420 1426 if (!ptq->on_heap) { 1421 - ptq->timestamp = perf_time_to_tsc(sample->time, 1427 + ptq->timestamp = perf_time_to_tsc(timestamp, 1422 1428 &pt->tc); 1423 1429 err = auxtrace_heap__add(&pt->heap, ptq->queue_nr, 1424 1430 ptq->timestamp); ··· 1435 1441 default: 1436 1442 break; 1437 1443 } 1438 - out: 1444 + 1445 + return 1; 1446 + } 1447 + 1448 + static int intel_pt_process_switch(struct intel_pt *pt, 1449 + struct perf_sample *sample) 1450 + { 1451 + struct perf_evsel *evsel; 1452 + pid_t tid; 1453 + int cpu, ret; 1454 + 1455 + evsel = perf_evlist__id2evsel(pt->session->evlist, sample->id); 1456 + if (evsel != pt->switch_evsel) 1457 + return 0; 1458 + 1459 + tid = perf_evsel__intval(evsel, sample, "next_pid"); 1460 + cpu = sample->cpu; 1461 + 1462 + intel_pt_log("sched_switch: cpu %d tid %d time %"PRIu64" tsc %#"PRIx64"\n", 1463 + cpu, tid, sample->time, perf_time_to_tsc(sample->time, 1464 + &pt->tc)); 1465 + 1466 + ret = intel_pt_sync_switch(pt, cpu, tid, sample->time); 1467 + if (ret <= 0) 1468 + return ret; 1469 + 1439 1470 return machine__set_current_tid(pt->machine, cpu, -1, tid); 1471 + } 1472 + 1473 + static int intel_pt_context_switch(struct intel_pt *pt, union perf_event *event, 1474 + struct perf_sample *sample) 1475 + { 1476 + bool out = event->header.misc & PERF_RECORD_MISC_SWITCH_OUT; 1477 + pid_t pid, tid; 1478 + int cpu, ret; 1479 + 1480 + cpu = sample->cpu; 1481 + 1482 + if (pt->have_sched_switch == 3) { 1483 + if (!out) 1484 + return 0; 1485 + if (event->header.type != PERF_RECORD_SWITCH_CPU_WIDE) { 1486 + pr_err("Expecting CPU-wide context switch event\n"); 1487 + return -EINVAL; 1488 + } 1489 + pid = event->context_switch.next_prev_pid; 1490 + tid = event->context_switch.next_prev_tid; 1491 + } else { 1492 + if (out) 1493 + return 0; 1494 + pid = sample->pid; 1495 + tid = sample->tid; 1496 + } 1497 + 1498 + if (tid == -1) { 1499 + pr_err("context_switch event has no tid\n"); 1500 + return -EINVAL; 1501 + } 1502 + 1503 + intel_pt_log("context_switch: cpu %d pid %d tid %d time %"PRIu64" tsc %#"PRIx64"\n", 1504 + cpu, pid, tid, sample->time, perf_time_to_tsc(sample->time, 1505 + &pt->tc)); 1506 + 1507 + ret = intel_pt_sync_switch(pt, cpu, tid, sample->time); 1508 + if (ret <= 0) 1509 + return ret; 1510 + 1511 + return machine__set_current_tid(pt->machine, cpu, pid, tid); 1440 1512 } 1441 1513 1442 1514 static int intel_pt_process_itrace_start(struct intel_pt *pt, ··· 1575 1515 err = intel_pt_process_switch(pt, sample); 1576 1516 else if (event->header.type == PERF_RECORD_ITRACE_START) 1577 1517 err = intel_pt_process_itrace_start(pt, event, sample); 1518 + else if (event->header.type == PERF_RECORD_SWITCH || 1519 + event->header.type == PERF_RECORD_SWITCH_CPU_WIDE) 1520 + err = intel_pt_context_switch(pt, event, sample); 1578 1521 1579 1522 intel_pt_log("event %s (%u): cpu %d time %"PRIu64" tsc %#"PRIx64"\n", 1580 1523 perf_event__name(event->header.type), event->header.type, ··· 1840 1777 return NULL; 1841 1778 } 1842 1779 1780 + static bool intel_pt_find_switch(struct perf_evlist *evlist) 1781 + { 1782 + struct perf_evsel *evsel; 1783 + 1784 + evlist__for_each(evlist, evsel) { 1785 + if (evsel->attr.context_switch) 1786 + return true; 1787 + } 1788 + 1789 + return false; 1790 + } 1791 + 1843 1792 static const char * const intel_pt_info_fmts[] = { 1844 1793 [INTEL_PT_PMU_TYPE] = " PMU Type %"PRId64"\n", 1845 1794 [INTEL_PT_TIME_SHIFT] = " Time Shift %"PRIu64"\n", ··· 1963 1888 pr_err("%s: missing sched_switch event\n", __func__); 1964 1889 goto err_delete_thread; 1965 1890 } 1891 + } else if (pt->have_sched_switch == 2 && 1892 + !intel_pt_find_switch(session->evlist)) { 1893 + pr_err("%s: missing context_switch attribute flag\n", __func__); 1894 + goto err_delete_thread; 1966 1895 } 1967 1896 1968 1897 if (session->itrace_synth_opts && session->itrace_synth_opts->set) {
+1 -1
tools/perf/util/parse-events.c
··· 11 11 #include "cache.h" 12 12 #include "header.h" 13 13 #include "debug.h" 14 - #include <api/fs/debugfs.h> 14 + #include <api/fs/tracing_path.h> 15 15 #include "parse-events-bison.h" 16 16 #define YY_EXTRA_TYPE int 17 17 #include "parse-events-flex.h"
+42 -55
tools/perf/util/probe-event.c
··· 2180 2180 } 2181 2181 2182 2182 /* Show an event */ 2183 - static int show_perf_probe_event(const char *group, const char *event, 2184 - struct perf_probe_event *pev, 2185 - const char *module, bool use_stdout) 2183 + int show_perf_probe_event(const char *group, const char *event, 2184 + struct perf_probe_event *pev, 2185 + const char *module, bool use_stdout) 2186 2186 { 2187 2187 struct strbuf buf = STRBUF_INIT; 2188 2188 int ret; ··· 2399 2399 { 2400 2400 int i, fd, ret; 2401 2401 struct probe_trace_event *tev = NULL; 2402 - const char *event = NULL, *group = NULL; 2403 2402 struct strlist *namelist; 2404 2403 2405 2404 fd = probe_file__open(PF_FL_RW | (pev->uprobes ? PF_FL_UPROBE : 0)); ··· 2414 2415 } 2415 2416 2416 2417 ret = 0; 2417 - pr_info("Added new event%s\n", (ntevs > 1) ? "s:" : ":"); 2418 2418 for (i = 0; i < ntevs; i++) { 2419 2419 tev = &tevs[i]; 2420 2420 /* Skip if the symbol is out of .text or blacklisted */ ··· 2430 2432 if (ret < 0) 2431 2433 break; 2432 2434 2433 - /* We use tev's name for showing new events */ 2434 - show_perf_probe_event(tev->group, tev->event, pev, 2435 - tev->point.module, false); 2436 - /* Save the last valid name */ 2437 - event = tev->event; 2438 - group = tev->group; 2439 - 2440 2435 /* 2441 2436 * Probes after the first probe which comes from same 2442 2437 * user input are always allowed to add suffix, because ··· 2440 2449 } 2441 2450 if (ret == -EINVAL && pev->uprobes) 2442 2451 warn_uprobe_event_compat(tev); 2443 - 2444 - /* Note that it is possible to skip all events because of blacklist */ 2445 - if (ret >= 0 && event) { 2446 - /* Show how to use the event. */ 2447 - pr_info("\nYou can now use it in all perf tools, such as:\n\n"); 2448 - pr_info("\tperf record -e %s:%s -aR sleep 1\n\n", group, event); 2449 - } 2450 2452 2451 2453 strlist__delete(namelist); 2452 2454 close_out: ··· 2743 2759 return find_probe_trace_events_from_map(pev, tevs); 2744 2760 } 2745 2761 2746 - struct __event_package { 2747 - struct perf_probe_event *pev; 2748 - struct probe_trace_event *tevs; 2749 - int ntevs; 2750 - }; 2751 - 2752 - int add_perf_probe_events(struct perf_probe_event *pevs, int npevs) 2762 + int convert_perf_probe_events(struct perf_probe_event *pevs, int npevs) 2753 2763 { 2754 - int i, j, ret; 2755 - struct __event_package *pkgs; 2756 - 2757 - ret = 0; 2758 - pkgs = zalloc(sizeof(struct __event_package) * npevs); 2759 - 2760 - if (pkgs == NULL) 2761 - return -ENOMEM; 2764 + int i, ret; 2762 2765 2763 2766 ret = init_symbol_maps(pevs->uprobes); 2764 - if (ret < 0) { 2765 - free(pkgs); 2767 + if (ret < 0) 2766 2768 return ret; 2767 - } 2768 2769 2769 2770 /* Loop 1: convert all events */ 2770 2771 for (i = 0; i < npevs; i++) { 2771 - pkgs[i].pev = &pevs[i]; 2772 2772 /* Init kprobe blacklist if needed */ 2773 - if (!pkgs[i].pev->uprobes) 2773 + if (!pevs[i].uprobes) 2774 2774 kprobe_blacklist__init(); 2775 2775 /* Convert with or without debuginfo */ 2776 - ret = convert_to_probe_trace_events(pkgs[i].pev, 2777 - &pkgs[i].tevs); 2776 + ret = convert_to_probe_trace_events(&pevs[i], &pevs[i].tevs); 2778 2777 if (ret < 0) 2779 - goto end; 2780 - pkgs[i].ntevs = ret; 2778 + return ret; 2779 + pevs[i].ntevs = ret; 2781 2780 } 2782 2781 /* This just release blacklist only if allocated */ 2783 2782 kprobe_blacklist__release(); 2784 2783 2784 + return 0; 2785 + } 2786 + 2787 + int apply_perf_probe_events(struct perf_probe_event *pevs, int npevs) 2788 + { 2789 + int i, ret = 0; 2790 + 2785 2791 /* Loop 2: add all events */ 2786 2792 for (i = 0; i < npevs; i++) { 2787 - ret = __add_probe_trace_events(pkgs[i].pev, pkgs[i].tevs, 2788 - pkgs[i].ntevs, 2793 + ret = __add_probe_trace_events(&pevs[i], pevs[i].tevs, 2794 + pevs[i].ntevs, 2789 2795 probe_conf.force_add); 2790 2796 if (ret < 0) 2791 2797 break; 2792 2798 } 2793 - end: 2799 + return ret; 2800 + } 2801 + 2802 + void cleanup_perf_probe_events(struct perf_probe_event *pevs, int npevs) 2803 + { 2804 + int i, j; 2805 + 2794 2806 /* Loop 3: cleanup and free trace events */ 2795 2807 for (i = 0; i < npevs; i++) { 2796 - for (j = 0; j < pkgs[i].ntevs; j++) 2797 - clear_probe_trace_event(&pkgs[i].tevs[j]); 2798 - zfree(&pkgs[i].tevs); 2808 + for (j = 0; j < pevs[i].ntevs; j++) 2809 + clear_probe_trace_event(&pevs[i].tevs[j]); 2810 + zfree(&pevs[i].tevs); 2811 + pevs[i].ntevs = 0; 2799 2812 } 2800 - free(pkgs); 2813 + 2801 2814 exit_symbol_maps(); 2815 + } 2816 + 2817 + int add_perf_probe_events(struct perf_probe_event *pevs, int npevs) 2818 + { 2819 + int ret; 2820 + 2821 + ret = convert_perf_probe_events(pevs, npevs); 2822 + if (ret == 0) 2823 + ret = apply_perf_probe_events(pevs, npevs); 2824 + 2825 + cleanup_perf_probe_events(pevs, npevs); 2802 2826 2803 2827 return ret; 2804 2828 } ··· 2818 2826 2819 2827 if (!str) 2820 2828 return -EINVAL; 2821 - 2822 - pr_debug("Delete filter: \'%s\'\n", str); 2823 2829 2824 2830 /* Get current event names */ 2825 2831 ret = probe_file__open_both(&kfd, &ufd, PF_FL_RW); ··· 2833 2843 ret = ret2; 2834 2844 goto error; 2835 2845 } 2836 - if (ret == -ENOENT && ret2 == -ENOENT) 2837 - pr_debug("\"%s\" does not hit any event.\n", str); 2838 - /* Note that this is silently ignored */ 2839 2846 ret = 0; 2840 2847 2841 2848 error:
+9
tools/perf/util/probe-event.h
··· 87 87 bool uprobes; /* Uprobe event flag */ 88 88 char *target; /* Target binary */ 89 89 struct perf_probe_arg *args; /* Arguments */ 90 + struct probe_trace_event *tevs; 91 + int ntevs; 90 92 }; 91 93 92 94 /* Line range */ ··· 140 138 extern int line_range__init(struct line_range *lr); 141 139 142 140 extern int add_perf_probe_events(struct perf_probe_event *pevs, int npevs); 141 + extern int convert_perf_probe_events(struct perf_probe_event *pevs, int npevs); 142 + extern int apply_perf_probe_events(struct perf_probe_event *pevs, int npevs); 143 + extern void cleanup_perf_probe_events(struct perf_probe_event *pevs, int npevs); 143 144 extern int del_perf_probe_events(struct strfilter *filter); 145 + 146 + extern int show_perf_probe_event(const char *group, const char *event, 147 + struct perf_probe_event *pev, 148 + const char *module, bool use_stdout); 144 149 extern int show_perf_probe_events(struct strfilter *filter); 145 150 extern int show_line_range(struct line_range *lr, const char *module, 146 151 bool user);
+36 -5
tools/perf/util/probe-file.c
··· 267 267 goto error; 268 268 } 269 269 270 - pr_info("Removed event: %s\n", ent->s); 271 270 return 0; 272 271 error: 273 272 pr_warning("Failed to delete event: %s\n", ··· 274 275 return ret; 275 276 } 276 277 277 - int probe_file__del_events(int fd, struct strfilter *filter) 278 + int probe_file__get_events(int fd, struct strfilter *filter, 279 + struct strlist *plist) 278 280 { 279 281 struct strlist *namelist; 280 282 struct str_node *ent; ··· 290 290 p = strchr(ent->s, ':'); 291 291 if ((p && strfilter__compare(filter, p + 1)) || 292 292 strfilter__compare(filter, ent->s)) { 293 - ret = __del_trace_probe_event(fd, ent); 294 - if (ret < 0) 295 - break; 293 + strlist__add(plist, ent->s); 294 + ret = 0; 296 295 } 297 296 } 297 + strlist__delete(namelist); 298 + 299 + return ret; 300 + } 301 + 302 + int probe_file__del_strlist(int fd, struct strlist *namelist) 303 + { 304 + int ret = 0; 305 + struct str_node *ent; 306 + 307 + strlist__for_each(ent, namelist) { 308 + ret = __del_trace_probe_event(fd, ent); 309 + if (ret < 0) 310 + break; 311 + } 312 + return ret; 313 + } 314 + 315 + int probe_file__del_events(int fd, struct strfilter *filter) 316 + { 317 + struct strlist *namelist; 318 + int ret; 319 + 320 + namelist = strlist__new(NULL, NULL); 321 + if (!namelist) 322 + return -ENOMEM; 323 + 324 + ret = probe_file__get_events(fd, filter, namelist); 325 + if (ret < 0) 326 + return ret; 327 + 328 + ret = probe_file__del_strlist(fd, namelist); 298 329 strlist__delete(namelist); 299 330 300 331 return ret;
+4
tools/perf/util/probe-file.h
··· 14 14 struct strlist *probe_file__get_rawlist(int fd); 15 15 int probe_file__add_event(int fd, struct probe_trace_event *tev); 16 16 int probe_file__del_events(int fd, struct strfilter *filter); 17 + int probe_file__get_events(int fd, struct strfilter *filter, 18 + struct strlist *plist); 19 + int probe_file__del_strlist(int fd, struct strlist *namelist); 20 + 17 21 18 22 #endif
+1
tools/perf/util/scripting-engines/trace-event-perl.c
··· 221 221 break; 222 222 case PRINT_BSTRING: 223 223 case PRINT_DYNAMIC_ARRAY: 224 + case PRINT_DYNAMIC_ARRAY_LEN: 224 225 case PRINT_STRING: 225 226 case PRINT_BITMASK: 226 227 break;
+1
tools/perf/util/scripting-engines/trace-event-python.c
··· 251 251 /* gcc warns for these? */ 252 252 case PRINT_BSTRING: 253 253 case PRINT_DYNAMIC_ARRAY: 254 + case PRINT_DYNAMIC_ARRAY_LEN: 254 255 case PRINT_FUNC: 255 256 case PRINT_BITMASK: 256 257 /* we should warn... */
+2 -1
tools/perf/util/session.c
··· 185 185 zfree(&env->sibling_threads); 186 186 zfree(&env->numa_nodes); 187 187 zfree(&env->pmu_mappings); 188 + zfree(&env->cpu); 188 189 } 189 190 190 191 void perf_session__delete(struct perf_session *session) ··· 1080 1079 1081 1080 switch (event->header.type) { 1082 1081 case PERF_RECORD_SAMPLE: 1083 - dump_sample(evsel, event, sample); 1084 1082 if (evsel == NULL) { 1085 1083 ++evlist->stats.nr_unknown_id; 1086 1084 return 0; 1087 1085 } 1086 + dump_sample(evsel, event, sample); 1088 1087 if (machine == NULL) { 1089 1088 ++evlist->stats.nr_unprocessable_samples; 1090 1089 return 0;
+2 -2
tools/perf/util/sort.c
··· 328 328 char *sf, *p; 329 329 struct map *map = e->ms.map; 330 330 331 - sf = get_srcline(map->dso, map__rip_2objdump(map, e->ip), 332 - e->ms.sym, true); 331 + sf = __get_srcline(map->dso, map__rip_2objdump(map, e->ip), 332 + e->ms.sym, false, true); 333 333 if (!strcmp(sf, SRCLINE_UNKNOWN)) 334 334 return no_srcfile; 335 335 p = strchr(sf, ':');
+24 -5
tools/perf/util/srcline.c
··· 149 149 free(a2l); 150 150 } 151 151 152 + #define MAX_INLINE_NEST 1024 153 + 152 154 static int addr2line(const char *dso_name, u64 addr, 153 - char **file, unsigned int *line, struct dso *dso) 155 + char **file, unsigned int *line, struct dso *dso, 156 + bool unwind_inlines) 154 157 { 155 158 int ret = 0; 156 159 struct a2l_data *a2l = dso->a2l; ··· 172 169 a2l->found = false; 173 170 174 171 bfd_map_over_sections(a2l->abfd, find_address_in_section, a2l); 172 + 173 + if (a2l->found && unwind_inlines) { 174 + int cnt = 0; 175 + 176 + while (bfd_find_inliner_info(a2l->abfd, &a2l->filename, 177 + &a2l->funcname, &a2l->line) && 178 + cnt++ < MAX_INLINE_NEST) 179 + ; 180 + } 175 181 176 182 if (a2l->found && a2l->filename) { 177 183 *file = strdup(a2l->filename); ··· 209 197 210 198 static int addr2line(const char *dso_name, u64 addr, 211 199 char **file, unsigned int *line_nr, 212 - struct dso *dso __maybe_unused) 200 + struct dso *dso __maybe_unused, 201 + bool unwind_inlines __maybe_unused) 213 202 { 214 203 FILE *fp; 215 204 char cmd[PATH_MAX]; ··· 267 254 */ 268 255 #define A2L_FAIL_LIMIT 123 269 256 270 - char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym, 271 - bool show_sym) 257 + char *__get_srcline(struct dso *dso, u64 addr, struct symbol *sym, 258 + bool show_sym, bool unwind_inlines) 272 259 { 273 260 char *file = NULL; 274 261 unsigned line = 0; ··· 289 276 if (!strncmp(dso_name, "/tmp/perf-", 10)) 290 277 goto out; 291 278 292 - if (!addr2line(dso_name, addr, &file, &line, dso)) 279 + if (!addr2line(dso_name, addr, &file, &line, dso, unwind_inlines)) 293 280 goto out; 294 281 295 282 if (asprintf(&srcline, "%s:%u", ··· 322 309 { 323 310 if (srcline && strcmp(srcline, SRCLINE_UNKNOWN) != 0) 324 311 free(srcline); 312 + } 313 + 314 + char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym, 315 + bool show_sym) 316 + { 317 + return __get_srcline(dso, addr, sym, show_sym, false); 325 318 }
+1 -1
tools/perf/util/trace-event-info.c
··· 38 38 39 39 #include "../perf.h" 40 40 #include "trace-event.h" 41 - #include <api/fs/debugfs.h> 41 + #include <api/fs/tracing_path.h> 42 42 #include "evsel.h" 43 43 #include "debug.h" 44 44
+1
tools/perf/util/trace-event.c
··· 8 8 #include <fcntl.h> 9 9 #include <linux/kernel.h> 10 10 #include <traceevent/event-parse.h> 11 + #include <api/fs/tracing_path.h> 11 12 #include "trace-event.h" 12 13 #include "machine.h" 13 14 #include "util.h"
-70
tools/perf/util/util.c
··· 34 34 bool perf_host = true; 35 35 bool perf_guest = false; 36 36 37 - char tracing_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing"; 38 - char tracing_events_path[PATH_MAX + 1] = "/sys/kernel/debug/tracing/events"; 39 - 40 37 void event_attr_init(struct perf_event_attr *attr) 41 38 { 42 39 if (!perf_host) ··· 385 388 tc.c_cc[VMIN] = 0; 386 389 tc.c_cc[VTIME] = 0; 387 390 tcsetattr(0, TCSANOW, &tc); 388 - } 389 - 390 - static void set_tracing_events_path(const char *tracing, const char *mountpoint) 391 - { 392 - snprintf(tracing_path, sizeof(tracing_path), "%s/%s", 393 - mountpoint, tracing); 394 - snprintf(tracing_events_path, sizeof(tracing_events_path), "%s/%s%s", 395 - mountpoint, tracing, "events"); 396 - } 397 - 398 - static const char *__perf_tracefs_mount(const char *mountpoint) 399 - { 400 - const char *mnt; 401 - 402 - mnt = tracefs_mount(mountpoint); 403 - if (!mnt) 404 - return NULL; 405 - 406 - set_tracing_events_path("", mnt); 407 - 408 - return mnt; 409 - } 410 - 411 - static const char *__perf_debugfs_mount(const char *mountpoint) 412 - { 413 - const char *mnt; 414 - 415 - mnt = debugfs_mount(mountpoint); 416 - if (!mnt) 417 - return NULL; 418 - 419 - set_tracing_events_path("tracing/", mnt); 420 - 421 - return mnt; 422 - } 423 - 424 - const char *perf_debugfs_mount(const char *mountpoint) 425 - { 426 - const char *mnt; 427 - 428 - mnt = __perf_tracefs_mount(mountpoint); 429 - if (mnt) 430 - return mnt; 431 - 432 - mnt = __perf_debugfs_mount(mountpoint); 433 - 434 - return mnt; 435 - } 436 - 437 - void perf_debugfs_set_path(const char *mntpt) 438 - { 439 - set_tracing_events_path("tracing/", mntpt); 440 - } 441 - 442 - char *get_tracing_file(const char *name) 443 - { 444 - char *file; 445 - 446 - if (asprintf(&file, "%s/%s", tracing_path, name) < 0) 447 - return NULL; 448 - 449 - return file; 450 - } 451 - 452 - void put_tracing_file(char *file) 453 - { 454 - free(file); 455 391 } 456 392 457 393 int parse_nsec_time(const char *str, u64 *ptime)
+2 -6
tools/perf/util/util.h
··· 83 83 extern const char *graph_line; 84 84 extern const char *graph_dotted_line; 85 85 extern char buildid_dir[]; 86 - extern char tracing_path[]; 87 - extern char tracing_events_path[]; 88 - extern void perf_debugfs_set_path(const char *mountpoint); 89 - const char *perf_debugfs_mount(const char *mountpoint); 90 - char *get_tracing_file(const char *name); 91 - void put_tracing_file(char *file); 92 86 93 87 /* On most systems <limits.h> would have given us this, but 94 88 * not on some systems (e.g. GNU/Hurd). ··· 315 321 extern bool srcline_full_filename; 316 322 char *get_srcline(struct dso *dso, u64 addr, struct symbol *sym, 317 323 bool show_sym); 324 + char *__get_srcline(struct dso *dso, u64 addr, struct symbol *sym, 325 + bool show_sym, bool unwind_inlines); 318 326 void free_srcline(char *srcline); 319 327 320 328 int filename__read_str(const char *filename, char **buf, size_t *sizep);