blob: 2dc6e8b43667a913aba2d2c2d27bb1212dc5720d [file] [log] [blame]
Jia Liub22310f2012-02-18 12:03:15 +00001//===-- X86InstrSVM.td - SVM Instruction Set Extension -----*- tablegen -*-===//
2//
Craig Topper57d3aae2012-02-18 08:34:12 +00003// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Jia Liub22310f2012-02-18 12:03:15 +00007//
Craig Topper57d3aae2012-02-18 08:34:12 +00008//===----------------------------------------------------------------------===//
9//
10// This file describes the instructions that make up the AMD SVM instruction
11// set.
12//
13//===----------------------------------------------------------------------===//
14
15//===----------------------------------------------------------------------===//
16// SVM instructions
17
Simon Pilgrim6b7cd862017-12-07 14:35:17 +000018let SchedRW = [WriteSystem] in {
Craig Topper57d3aae2012-02-18 08:34:12 +000019// 0F 01 D9
Simon Pilgrim0cd0fbd2018-04-12 12:09:24 +000020def VMMCALL : I<0x01, MRM_D9, (outs), (ins), "vmmcall", []>, TB;
Craig Topper57d3aae2012-02-18 08:34:12 +000021
22// 0F 01 DC
Simon Pilgrim0cd0fbd2018-04-12 12:09:24 +000023def STGI : I<0x01, MRM_DC, (outs), (ins), "stgi", []>, TB;
Craig Topper57d3aae2012-02-18 08:34:12 +000024
25// 0F 01 DD
Simon Pilgrim0cd0fbd2018-04-12 12:09:24 +000026def CLGI : I<0x01, MRM_DD, (outs), (ins), "clgi", []>, TB;
Craig Topper57d3aae2012-02-18 08:34:12 +000027
28// 0F 01 DE
29let Uses = [EAX] in
Simon Pilgrim0cd0fbd2018-04-12 12:09:24 +000030def SKINIT : I<0x01, MRM_DE, (outs), (ins), "skinit\t{%eax|eax}", []>, TB;
Craig Topper57d3aae2012-02-18 08:34:12 +000031
32// 0F 01 D8
33let Uses = [EAX] in
Simon Pilgrim0cd0fbd2018-04-12 12:09:24 +000034def VMRUN32 : I<0x01, MRM_D8, (outs), (ins), "vmrun\t{%eax|eax}", []>, TB,
35 Requires<[Not64BitMode]>;
Craig Topper57d3aae2012-02-18 08:34:12 +000036let Uses = [RAX] in
Simon Pilgrim0cd0fbd2018-04-12 12:09:24 +000037def VMRUN64 : I<0x01, MRM_D8, (outs), (ins), "vmrun\t{%rax|rax}", []>, TB,
38 Requires<[In64BitMode]>;
Craig Topper57d3aae2012-02-18 08:34:12 +000039
40// 0F 01 DA
41let Uses = [EAX] in
Simon Pilgrim0cd0fbd2018-04-12 12:09:24 +000042def VMLOAD32 : I<0x01, MRM_DA, (outs), (ins), "vmload\t{%eax|eax}", []>, TB,
43 Requires<[Not64BitMode]>;
Craig Topper57d3aae2012-02-18 08:34:12 +000044let Uses = [RAX] in
Simon Pilgrim0cd0fbd2018-04-12 12:09:24 +000045def VMLOAD64 : I<0x01, MRM_DA, (outs), (ins), "vmload\t{%rax|rax}", []>, TB,
46 Requires<[In64BitMode]>;
Craig Topper57d3aae2012-02-18 08:34:12 +000047
48// 0F 01 DB
49let Uses = [EAX] in
Simon Pilgrim0cd0fbd2018-04-12 12:09:24 +000050def VMSAVE32 : I<0x01, MRM_DB, (outs), (ins), "vmsave\t{%eax|eax}", []>, TB,
51 Requires<[Not64BitMode]>;
Craig Topper57d3aae2012-02-18 08:34:12 +000052let Uses = [RAX] in
Simon Pilgrim0cd0fbd2018-04-12 12:09:24 +000053def VMSAVE64 : I<0x01, MRM_DB, (outs), (ins), "vmsave\t{%rax|rax}", []>, TB,
54 Requires<[In64BitMode]>;
Craig Topper57d3aae2012-02-18 08:34:12 +000055
56// 0F 01 DF
57let Uses = [EAX, ECX] in
58def INVLPGA32 : I<0x01, MRM_DF, (outs), (ins),
Simon Pilgrim0cd0fbd2018-04-12 12:09:24 +000059 "invlpga\t{%eax, %ecx|eax, ecx}", []>, TB, Requires<[Not64BitMode]>;
Craig Topper57d3aae2012-02-18 08:34:12 +000060let Uses = [RAX, ECX] in
61def INVLPGA64 : I<0x01, MRM_DF, (outs), (ins),
Simon Pilgrim0cd0fbd2018-04-12 12:09:24 +000062 "invlpga\t{%rax, %ecx|rax, ecx}", []>, TB, Requires<[In64BitMode]>;
Simon Pilgrim41640092017-11-27 14:39:50 +000063} // SchedRW