Skip to content

Commit 76bfc66

Browse files
author
Marina Yatsina
committed
[x86] Accept 'retn' as an alias to 'ret[lqw]'\'ret' (At&t\Intel)
Implement 'retn' simply by aliasing it to the relevant 'ret' instruction Commit on behalf of coby Differential Revision: https://reviews.llvm.org/D24346 llvm-svn: 282601
1 parent e17e055 commit 76bfc66

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

llvm/lib/Target/X86/X86InstrInfo.td

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2630,6 +2630,12 @@ def : MnemonicAlias<"ret", "retw", "att">, Requires<[In16BitMode]>;
26302630
def : MnemonicAlias<"ret", "retl", "att">, Requires<[In32BitMode]>;
26312631
def : MnemonicAlias<"ret", "retq", "att">, Requires<[In64BitMode]>;
26322632

2633+
// Apply 'ret' behavior to 'retn'
2634+
def : MnemonicAlias<"retn", "retw", "att">, Requires<[In16BitMode]>;
2635+
def : MnemonicAlias<"retn", "retl", "att">, Requires<[In32BitMode]>;
2636+
def : MnemonicAlias<"retn", "retq", "att">, Requires<[In64BitMode]>;
2637+
def : MnemonicAlias<"retn", "ret", "intel">;
2638+
26332639
def : MnemonicAlias<"sal", "shl", "intel">;
26342640
def : MnemonicAlias<"salb", "shlb", "att">;
26352641
def : MnemonicAlias<"salw", "shlw", "att">;

llvm/test/MC/X86/ret.s

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,22 @@
5757
// ERR32: error: instruction requires: 64-bit mode
5858
// ERR16: error: instruction requires: 64-bit mode
5959

60+
retn
61+
// 64: retq
62+
// 64: encoding: [0xc3]
63+
// 32: retl
64+
// 32: encoding: [0xc3]
65+
// 16: retw
66+
// 16: encoding: [0xc3]
67+
68+
retn $0
69+
// 64: retq $0
70+
// 64: encoding: [0xc2,0x00,0x00]
71+
// 32: retl $0
72+
// 32: encoding: [0xc2,0x00,0x00]
73+
// 16: retw $0
74+
// 16: encoding: [0xc2,0x00,0x00]
75+
6076
lret
6177
// 64: lretl
6278
// 64: encoding: [0xcb]

0 commit comments

Comments
 (0)