Skip to content

Commit 1274bca

Browse files
authored
1 parent 0bd0765 commit 1274bca

File tree

7 files changed

+337
-7
lines changed

7 files changed

+337
-7
lines changed

llvm/lib/Target/X86/X86InstrAVX10.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1767,9 +1767,9 @@ multiclass vmovrs_p<bits<8> opc, string OpStr, X86VectorVTInfo _> {
17671767
}
17681768

17691769
multiclass vmovrs_p_vl<bits<8> opc, string OpStr, AVX512VLVectorVTInfo _Vec> {
1770-
let Predicates = [HasMOVRS, HasAVX10_2_512] in
1770+
let Predicates = [HasMOVRS, HasAVX10_2_512, In64BitMode] in
17711771
defm Z : vmovrs_p<opc, OpStr, _Vec.info512>, EVEX_V512;
1772-
let Predicates = [HasMOVRS, HasAVX10_2] in {
1772+
let Predicates = [HasMOVRS, HasAVX10_2, In64BitMode] in {
17731773
defm Z128 : vmovrs_p<opc, OpStr, _Vec.info128>, EVEX_V128;
17741774
defm Z256 : vmovrs_p<opc, OpStr, _Vec.info256>, EVEX_V256;
17751775
}

llvm/lib/Target/X86/X86InstrMisc.td

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1733,7 +1733,7 @@ def CLDEMOTE : I<0x1C, MRM0m, (outs), (ins i8mem:$src), "cldemote\t$src",
17331733
//
17341734

17351735
let SchedRW = [WriteLoad] in {
1736-
let Predicates = [HasMOVRS, NoEGPR] in {
1736+
let Predicates = [HasMOVRS, NoEGPR, In64BitMode] in {
17371737
def MOVRS8rm : I<0x8A, MRMSrcMem, (outs GR8 :$dst), (ins i8mem :$src),
17381738
"movrs{b}\t{$src, $dst|$dst, $src}",
17391739
[(set GR8:$dst, (int_x86_movrsqi addr:$src))]>, T8;
@@ -1746,8 +1746,25 @@ def MOVRS32rm : I<0x8B, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
17461746
def MOVRS64rm : RI<0x8B, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src),
17471747
"movrs{q}\t{$src, $dst|$dst, $src}",
17481748
[(set GR64:$dst, (int_x86_movrsdi addr:$src))]>, T8;
1749+
}
1750+
1751+
let Predicates = [HasMOVRS] in
17491752
def PREFETCHRST2 : I<0x18, MRM4m, (outs), (ins i8mem:$src),
17501753
"prefetchrst2\t$src",
17511754
[(int_x86_prefetchrs addr:$src)]>, TB;
1755+
1756+
let Predicates = [HasMOVRS, HasEGPR, In64BitMode] in {
1757+
def MOVRS8rm_EVEX : I<0x8A, MRMSrcMem, (outs GR8 :$dst), (ins i8mem :$src),
1758+
"movrs{b}\t{$src, $dst|$dst, $src}",
1759+
[(set GR8:$dst, (int_x86_movrsqi addr:$src))]>, EVEX, NoCD8, T_MAP4;
1760+
def MOVRS16rm_EVEX : I<0x8B, MRMSrcMem, (outs GR16:$dst), (ins i16mem:$src),
1761+
"movrs{w}\t{$src, $dst|$dst, $src}",
1762+
[(set GR16:$dst, (int_x86_movrshi addr:$src))]>, EVEX, NoCD8, PD, T_MAP4;
1763+
def MOVRS32rm_EVEX : I<0x8B, MRMSrcMem, (outs GR32:$dst), (ins i32mem:$src),
1764+
"movrs{l}\t{$src, $dst|$dst, $src}",
1765+
[(set GR32:$dst, (int_x86_movrssi addr:$src))]>, EVEX, NoCD8, T_MAP4;
1766+
def MOVRS64rm_EVEX : I<0x8B, MRMSrcMem, (outs GR64:$dst), (ins i64mem:$src),
1767+
"movrs{q}\t{$src, $dst|$dst, $src}",
1768+
[(set GR64:$dst, (int_x86_movrsdi addr:$src))]>, EVEX, NoCD8, T_MAP4, REX_W;
1769+
}
17521770
}
1753-
}

llvm/test/CodeGen/X86/movrs-builtins.ll

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
22
; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown --show-mc-encoding -mattr=+movrs | FileCheck %s
3+
; RUN: llc < %s -verify-machineinstrs -mtriple=x86_64-unknown-unknown --show-mc-encoding -mattr=+movrs,+egpr | FileCheck %s --check-prefix=EGPR
34

45
define i8 @test_movrs_si8(ptr %__A) {
56
; CHECK-LABEL: test_movrs_si8:
67
; CHECK: # %bb.0: # %entry
78
; CHECK-NEXT: movrsb (%rdi), %al # encoding: [0x0f,0x38,0x8a,0x07]
89
; CHECK-NEXT: retq # encoding: [0xc3]
10+
;
11+
; EGPR-LABEL: test_movrs_si8:
12+
; EGPR: # %bb.0: # %entry
13+
; EGPR-NEXT: movrsb (%rdi), %al # EVEX TO LEGACY Compression encoding: [0x0f,0x38,0x8a,0x07]
14+
; EGPR-NEXT: retq # encoding: [0xc3]
915
entry:
1016
%0 = call i8 @llvm.x86.movrsqi(ptr %__A)
1117
ret i8 %0
@@ -17,6 +23,11 @@ define i16 @test_movrs_si16(ptr %__A) {
1723
; CHECK: # %bb.0: # %entry
1824
; CHECK-NEXT: movrsw (%rdi), %ax # encoding: [0x66,0x0f,0x38,0x8b,0x07]
1925
; CHECK-NEXT: retq # encoding: [0xc3]
26+
;
27+
; EGPR-LABEL: test_movrs_si16:
28+
; EGPR: # %bb.0: # %entry
29+
; EGPR-NEXT: movrsw (%rdi), %ax # EVEX TO LEGACY Compression encoding: [0x66,0x0f,0x38,0x8b,0x07]
30+
; EGPR-NEXT: retq # encoding: [0xc3]
2031
entry:
2132
%0 = call i16 @llvm.x86.movrshi(ptr %__A)
2233
ret i16 %0
@@ -28,6 +39,11 @@ define i32 @test_movrs_si32(ptr %__A) {
2839
; CHECK: # %bb.0: # %entry
2940
; CHECK-NEXT: movrsl (%rdi), %eax # encoding: [0x0f,0x38,0x8b,0x07]
3041
; CHECK-NEXT: retq # encoding: [0xc3]
42+
;
43+
; EGPR-LABEL: test_movrs_si32:
44+
; EGPR: # %bb.0: # %entry
45+
; EGPR-NEXT: movrsl (%rdi), %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x38,0x8b,0x07]
46+
; EGPR-NEXT: retq # encoding: [0xc3]
3147
entry:
3248
%0 = call i32 @llvm.x86.movrssi(ptr %__A)
3349
ret i32 %0
@@ -39,6 +55,11 @@ define i64 @test_movrs_si64(ptr %__A) {
3955
; CHECK: # %bb.0: # %entry
4056
; CHECK-NEXT: movrsq (%rdi), %rax # encoding: [0x48,0x0f,0x38,0x8b,0x07]
4157
; CHECK-NEXT: retq # encoding: [0xc3]
58+
;
59+
; EGPR-LABEL: test_movrs_si64:
60+
; EGPR: # %bb.0: # %entry
61+
; EGPR-NEXT: movrsq (%rdi), %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x38,0x8b,0x07]
62+
; EGPR-NEXT: retq # encoding: [0xc3]
4263
entry:
4364
%0 = call i64 @llvm.x86.movrsdi(ptr %__A)
4465
ret i64 %0

llvm/test/MC/Disassembler/X86/movrs.txt

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,100 @@
9595

9696
# ATT: movrsq -128(%rdx), %rbx
9797
# INTEL: movrs rbx, qword ptr [rdx - 128]
98-
0x48,0x0f,0x38,0x8b,0x5a,0x80
98+
0x48,0x0f,0x38,0x8b,0x5a,0x80
99+
100+
# ATT: movrsb 268435456(%rbp,%r14,8), %r16b
101+
# INTEL: movrs r16b, byte ptr [rbp + 8*r14 + 268435456]
102+
0x62,0xa4,0x7c,0x08,0x8a,0x84,0xf5,0x00,0x00,0x00,0x10
103+
104+
# ATT: movrsb 291(%r17,%rax,4), %bl
105+
# INTEL: movrs bl, byte ptr [r17 + 4*rax + 291]
106+
0x62,0xfc,0x7c,0x08,0x8a,0x9c,0x81,0x23,0x01,0x00,0x00
107+
108+
# ATT: movrsb (%rip), %bl
109+
# INTEL: movrs bl, byte ptr [rip]
110+
0x62,0xf4,0x7c,0x08,0x8a,0x1d,0x00,0x00,0x00,0x00
111+
112+
# ATT: movrsb -32(,%rbp,2), %r18b
113+
# INTEL: movrs r18b, byte ptr [2*rbp - 32]
114+
0x62,0xe4,0x7c,0x08,0x8a,0x14,0x6d,0xe0,0xff,0xff,0xff
115+
116+
# ATT: movrsb 127(%r19), %bl
117+
# INTEL: movrs bl, byte ptr [r19 + 127]
118+
0x62,0xfc,0x7c,0x08,0x8a,0x5b,0x7f
119+
120+
# ATT: movrsb -128(%r20,%riz), %bl
121+
# INTEL: movrs bl, byte ptr [r20 + riz - 128]
122+
0x62,0xfc,0x7c,0x08,0x8a,0x5c,0x24,0x80
123+
124+
# ATT: movrsw 268435456(%rbp,%r14,8), %r16w
125+
# INTEL: movrs r16w, word ptr [rbp + 8*r14 + 268435456]
126+
0x62,0xa4,0x7d,0x08,0x8b,0x84,0xf5,0x00,0x00,0x00,0x10
127+
128+
# ATT: movrsw 291(%r17,%rax,4), %bx
129+
# INTEL: movrs bx, word ptr [r17 + 4*rax + 291]
130+
0x62,0xfc,0x7d,0x08,0x8b,0x9c,0x81,0x23,0x01,0x00,0x00
131+
132+
# ATT: movrsw (%rip), %bx
133+
# INTEL: movrs bx, word ptr [rip]
134+
0x62,0xf4,0x7d,0x08,0x8b,0x1d,0x00,0x00,0x00,0x00
135+
136+
# ATT: movrsw -32(,%rbp,2), %r18w
137+
# INTEL: movrs r18w, word ptr [2*rbp - 32]
138+
0x62,0xe4,0x7d,0x08,0x8b,0x14,0x6d,0xe0,0xff,0xff,0xff
139+
140+
# ATT: movrsw 127(%r19), %bx
141+
# INTEL: movrs bx, word ptr [r19 + 127]
142+
0x62,0xfc,0x7d,0x08,0x8b,0x5b,0x7f
143+
144+
# ATT: movrsw -128(%r20,%riz), %bx
145+
# INTEL: movrs bx, word ptr [r20 + riz - 128]
146+
0x62,0xfc,0x7d,0x08,0x8b,0x5c,0x24,0x80
147+
148+
# ATT: movrsl 268435456(%rbp,%r14,8), %r16d
149+
# INTEL: movrs r16d, dword ptr [rbp + 8*r14 + 268435456]
150+
0x62,0xa4,0x7c,0x08,0x8b,0x84,0xf5,0x00,0x00,0x00,0x10
151+
152+
# ATT: movrsl 291(%r17,%rax,4), %ebx
153+
# INTEL: movrs ebx, dword ptr [r17 + 4*rax + 291]
154+
0x62,0xfc,0x7c,0x08,0x8b,0x9c,0x81,0x23,0x01,0x00,0x00
155+
156+
# ATT: movrsl (%rip), %ebx
157+
# INTEL: movrs ebx, dword ptr [rip]
158+
0x62,0xf4,0x7c,0x08,0x8b,0x1d,0x00,0x00,0x00,0x00
159+
160+
# ATT: movrsl -32(,%rbp,2), %r18d
161+
# INTEL: movrs r18d, dword ptr [2*rbp - 32]
162+
0x62,0xe4,0x7c,0x08,0x8b,0x14,0x6d,0xe0,0xff,0xff,0xff
163+
164+
# ATT: movrsl 127(%r19), %ebx
165+
# INTEL: movrs ebx, dword ptr [r19 + 127]
166+
0x62,0xfc,0x7c,0x08,0x8b,0x5b,0x7f
167+
168+
# ATT: movrsl -128(%r20,%riz), %ebx
169+
# INTEL: movrs ebx, dword ptr [r20 + riz - 128]
170+
0x62,0xfc,0x7c,0x08,0x8b,0x5c,0x24,0x80
171+
172+
# ATT: movrsq 268435456(%rbp,%r14,8), %r16
173+
# INTEL: movrs r16, qword ptr [rbp + 8*r14 + 268435456]
174+
0x62,0xa4,0xfc,0x08,0x8b,0x84,0xf5,0x00,0x00,0x00,0x10
175+
176+
# ATT: movrsq 291(%r17,%rax,4), %rbx
177+
# INTEL: movrs rbx, qword ptr [r17 + 4*rax + 291]
178+
0x62,0xfc,0xfc,0x08,0x8b,0x9c,0x81,0x23,0x01,0x00,0x00
179+
180+
# ATT: movrsq (%rip), %rbx
181+
# INTEL: movrs rbx, qword ptr [rip]
182+
0x62,0xf4,0xfc,0x08,0x8b,0x1d,0x00,0x00,0x00,0x00
183+
184+
# ATT: movrsq -32(,%rbp,2), %r18
185+
# INTEL: movrs r18, qword ptr [2*rbp - 32]
186+
0x62,0xe4,0xfc,0x08,0x8b,0x14,0x6d,0xe0,0xff,0xff,0xff
187+
188+
# ATT: movrsq 127(%r19), %rbx
189+
# INTEL: movrs rbx, qword ptr [r19 + 127]
190+
0x62,0xfc,0xfc,0x08,0x8b,0x5b,0x7f
191+
192+
# ATT: movrsq -128(%r20,%riz), %rbx
193+
# INTEL: movrs rbx, qword ptr [r20 + riz - 128]
194+
0x62,0xfc,0xfc,0x08,0x8b,0x5c,0x24,0x80

llvm/test/MC/X86/movrs-att-64.s

Lines changed: 97 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,100 @@
9494

9595
// CHECK: movrsq -128(%rdx), %rbx
9696
// CHECK: encoding: [0x48,0x0f,0x38,0x8b,0x5a,0x80]
97-
movrs -128(%rdx), %rbx
97+
movrs -128(%rdx), %rbx
98+
99+
// CHECK: movrsb 268435456(%rbp,%r14,8), %r16b
100+
// CHECK: encoding: [0x62,0xa4,0x7c,0x08,0x8a,0x84,0xf5,0x00,0x00,0x00,0x10]
101+
movrs 268435456(%rbp,%r14,8), %r16b
102+
103+
// CHECK: movrsb 291(%r17,%rax,4), %bl
104+
// CHECK: encoding: [0x62,0xfc,0x7c,0x08,0x8a,0x9c,0x81,0x23,0x01,0x00,0x00]
105+
movrs 291(%r17,%rax,4), %bl
106+
107+
// CHECK: {evex} movrsb (%rip), %bl
108+
// CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x8a,0x1d,0x00,0x00,0x00,0x00]
109+
{evex} movrs (%rip), %bl
110+
111+
// CHECK: movrsb -32(,%rbp,2), %r18b
112+
// CHECK: encoding: [0x62,0xe4,0x7c,0x08,0x8a,0x14,0x6d,0xe0,0xff,0xff,0xff]
113+
movrs -32(,%rbp,2), %r18b
114+
115+
// CHECK: movrsb 127(%r19), %bl
116+
// CHECK: encoding: [0x62,0xfc,0x7c,0x08,0x8a,0x5b,0x7f]
117+
movrs 127(%r19), %bl
118+
119+
// CHECK: movrsb -128(%r20), %bl
120+
// CHECK: encoding: [0x62,0xfc,0x7c,0x08,0x8a,0x5c,0x24,0x80]
121+
movrs -128(%r20), %bl
122+
123+
// CHECK: movrsw 268435456(%rbp,%r14,8), %r16w
124+
// CHECK: encoding: [0x62,0xa4,0x7d,0x08,0x8b,0x84,0xf5,0x00,0x00,0x00,0x10]
125+
movrs 268435456(%rbp,%r14,8), %r16w
126+
127+
// CHECK: movrsw 291(%r17,%rax,4), %bx
128+
// CHECK: encoding: [0x62,0xfc,0x7d,0x08,0x8b,0x9c,0x81,0x23,0x01,0x00,0x00]
129+
movrs 291(%r17,%rax,4), %bx
130+
131+
// CHECK: {evex} movrsw (%rip), %bx
132+
// CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x8b,0x1d,0x00,0x00,0x00,0x00]
133+
{evex} movrs (%rip), %bx
134+
135+
// CHECK: movrsw -32(,%rbp,2), %r18w
136+
// CHECK: encoding: [0x62,0xe4,0x7d,0x08,0x8b,0x14,0x6d,0xe0,0xff,0xff,0xff]
137+
movrs -32(,%rbp,2), %r18w
138+
139+
// CHECK: movrsw 127(%r19), %bx
140+
// CHECK: encoding: [0x62,0xfc,0x7d,0x08,0x8b,0x5b,0x7f]
141+
movrs 127(%r19), %bx
142+
143+
// CHECK: movrsw -128(%r20), %bx
144+
// CHECK: encoding: [0x62,0xfc,0x7d,0x08,0x8b,0x5c,0x24,0x80]
145+
movrs -128(%r20), %bx
146+
147+
// CHECK: movrsl 268435456(%rbp,%r14,8), %r16d
148+
// CHECK: encoding: [0x62,0xa4,0x7c,0x08,0x8b,0x84,0xf5,0x00,0x00,0x00,0x10]
149+
movrs 268435456(%rbp,%r14,8), %r16d
150+
151+
// CHECK: movrsl 291(%r17,%rax,4), %ebx
152+
// CHECK: encoding: [0x62,0xfc,0x7c,0x08,0x8b,0x9c,0x81,0x23,0x01,0x00,0x00]
153+
movrs 291(%r17,%rax,4), %ebx
154+
155+
// CHECK: {evex} movrsl (%rip), %ebx
156+
// CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x8b,0x1d,0x00,0x00,0x00,0x00]
157+
{evex} movrs (%rip), %ebx
158+
159+
// CHECK: movrsl -32(,%rbp,2), %r18d
160+
// CHECK: encoding: [0x62,0xe4,0x7c,0x08,0x8b,0x14,0x6d,0xe0,0xff,0xff,0xff]
161+
movrs -32(,%rbp,2), %r18d
162+
163+
// CHECK: movrsl 127(%r19), %ebx
164+
// CHECK: encoding: [0x62,0xfc,0x7c,0x08,0x8b,0x5b,0x7f]
165+
movrs 127(%r19), %ebx
166+
167+
// CHECK: movrsl -128(%r20), %ebx
168+
// CHECK: encoding: [0x62,0xfc,0x7c,0x08,0x8b,0x5c,0x24,0x80]
169+
movrs -128(%r20), %ebx
170+
171+
// CHECK: movrsq 268435456(%rbp,%r14,8), %r16
172+
// CHECK: encoding: [0x62,0xa4,0xfc,0x08,0x8b,0x84,0xf5,0x00,0x00,0x00,0x10]
173+
movrs 268435456(%rbp,%r14,8), %r16
174+
175+
// CHECK: movrsq 291(%r17,%rax,4), %rbx
176+
// CHECK: encoding: [0x62,0xfc,0xfc,0x08,0x8b,0x9c,0x81,0x23,0x01,0x00,0x00]
177+
movrs 291(%r17,%rax,4), %rbx
178+
179+
// CHECK: {evex} movrsq (%rip), %rbx
180+
// CHECK: encoding: [0x62,0xf4,0xfc,0x08,0x8b,0x1d,0x00,0x00,0x00,0x00]
181+
{evex} movrs (%rip), %rbx
182+
183+
// CHECK: movrsq -32(,%rbp,2), %r18
184+
// CHECK: encoding: [0x62,0xe4,0xfc,0x08,0x8b,0x14,0x6d,0xe0,0xff,0xff,0xff]
185+
movrs -32(,%rbp,2), %r18
186+
187+
// CHECK: movrsq 127(%r19), %rbx
188+
// CHECK: encoding: [0x62,0xfc,0xfc,0x08,0x8b,0x5b,0x7f]
189+
movrs 127(%r19), %rbx
190+
191+
// CHECK: movrsq -128(%r20), %rbx
192+
// CHECK: encoding: [0x62,0xfc,0xfc,0x08,0x8b,0x5c,0x24,0x80]
193+
movrs -128(%r20), %rbx

0 commit comments

Comments
 (0)