summaryrefslogtreecommitdiffstats
path: root/meta/recipes-devtools/gcc/gcc-6.4/backport/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-devtools/gcc/gcc-6.4/backport/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch')
-rw-r--r--meta/recipes-devtools/gcc/gcc-6.4/backport/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch1004
1 files changed, 1004 insertions, 0 deletions
diff --git a/meta/recipes-devtools/gcc/gcc-6.4/backport/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch b/meta/recipes-devtools/gcc/gcc-6.4/backport/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch
new file mode 100644
index 0000000000..b50ac5cb02
--- /dev/null
+++ b/meta/recipes-devtools/gcc/gcc-6.4/backport/0012-i386-Add-TARGET_INDIRECT_BRANCH_REGISTER.patch
@@ -0,0 +1,1004 @@
1From 7ba192d11a43d24ce427a3dfce0ad0592bd52830 Mon Sep 17 00:00:00 2001
2From: hjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
3Date: Mon, 26 Feb 2018 17:00:46 +0000
4Subject: [PATCH 12/12] i386: Add TARGET_INDIRECT_BRANCH_REGISTER
5
6For
7
8---
9struct C {
10 virtual ~C();
11 virtual void f();
12};
13
14void
15f (C *p)
16{
17 p->f();
18 p->f();
19}
20---
21
22-mindirect-branch=thunk-extern -O2 on x86-64 GNU/Linux generates:
23
24_Z1fP1C:
25.LFB0:
26 .cfi_startproc
27 pushq %rbx
28 .cfi_def_cfa_offset 16
29 .cfi_offset 3, -16
30 movq (%rdi), %rax
31 movq %rdi, %rbx
32 jmp .LIND1
33.LIND0:
34 pushq 16(%rax)
35 jmp __x86_indirect_thunk
36.LIND1:
37 call .LIND0
38 movq (%rbx), %rax
39 movq %rbx, %rdi
40 popq %rbx
41 .cfi_def_cfa_offset 8
42 movq 16(%rax), %rax
43 jmp __x86_indirect_thunk_rax
44 .cfi_endproc
45
46x86-64 is supposed to have asynchronous unwind tables by default, but
47there is nothing that reflects the change in the (relative) frame
48address after .LIND0. That region really has to be moved outside of
49the .cfi_startproc/.cfi_endproc bracket.
50
51This patch adds TARGET_INDIRECT_BRANCH_REGISTER to force indirect
52branch via register whenever -mindirect-branch= is used. Now,
53-mindirect-branch=thunk-extern -O2 on x86-64 GNU/Linux generates:
54
55_Z1fP1C:
56.LFB0:
57 .cfi_startproc
58 pushq %rbx
59 .cfi_def_cfa_offset 16
60 .cfi_offset 3, -16
61 movq (%rdi), %rax
62 movq %rdi, %rbx
63 movq 16(%rax), %rax
64 call __x86_indirect_thunk_rax
65 movq (%rbx), %rax
66 movq %rbx, %rdi
67 popq %rbx
68 .cfi_def_cfa_offset 8
69 movq 16(%rax), %rax
70 jmp __x86_indirect_thunk_rax
71 .cfi_endproc
72
73so that "-mindirect-branch=thunk-extern" is equivalent to
74"-mindirect-branch=thunk-extern -mindirect-branch-register", which is
75used by Linux kernel.
76
77gcc/
78
79 Backport from mainline
80 PR target/84039
81 * config/i386/constraints.md (Bs): Replace
82 ix86_indirect_branch_register with
83 TARGET_INDIRECT_BRANCH_REGISTER.
84 (Bw): Likewise.
85 * config/i386/i386.md (indirect_jump): Likewise.
86 (tablejump): Likewise.
87 (*sibcall_memory): Likewise.
88 (*sibcall_value_memory): Likewise.
89 Peepholes of indirect call and jump via memory: Likewise.
90 (*sibcall_GOT_32): Disallowed for TARGET_INDIRECT_BRANCH_REGISTER.
91 (*sibcall_value_GOT_32): Likewise.
92 * config/i386/predicates.md (indirect_branch_operand): Likewise.
93 (GOT_memory_operand): Likewise.
94 (call_insn_operand): Likewise.
95 (sibcall_insn_operand): Likewise.
96 (GOT32_symbol_operand): Likewise.
97 * config/i386/i386.h (TARGET_INDIRECT_BRANCH_REGISTER): New.
98
99gcc/testsuite/
100
101 Backport from mainline
102 PR target/84039
103 * gcc.target/i386/indirect-thunk-1.c: Updated.
104 * gcc.target/i386/indirect-thunk-2.c: Likewise.
105 * gcc.target/i386/indirect-thunk-3.c: Likewise.
106 * gcc.target/i386/indirect-thunk-4.c: Likewise.
107 * gcc.target/i386/indirect-thunk-5.c: Likewise.
108 * gcc.target/i386/indirect-thunk-6.c: Likewise.
109 * gcc.target/i386/indirect-thunk-7.c: Likewise.
110 * gcc.target/i386/indirect-thunk-attr-1.c: Likewise.
111 * gcc.target/i386/indirect-thunk-attr-2.c: Likewise.
112 * gcc.target/i386/indirect-thunk-attr-3.c: Likewise.
113 * gcc.target/i386/indirect-thunk-attr-4.c: Likewise.
114 * gcc.target/i386/indirect-thunk-attr-5.c: Likewise.
115 * gcc.target/i386/indirect-thunk-attr-6.c: Likewise.
116 * gcc.target/i386/indirect-thunk-attr-7.c: Likewise.
117 * gcc.target/i386/indirect-thunk-bnd-1.c: Likewise.
118 * gcc.target/i386/indirect-thunk-bnd-2.c: Likewise.
119 * gcc.target/i386/indirect-thunk-bnd-3.c: Likewise.
120 * gcc.target/i386/indirect-thunk-bnd-4.c: Likewise.
121 * gcc.target/i386/indirect-thunk-extern-1.c: Likewise.
122 * gcc.target/i386/indirect-thunk-extern-2.c: Likewise.
123 * gcc.target/i386/indirect-thunk-extern-3.c: Likewise.
124 * gcc.target/i386/indirect-thunk-extern-4.c: Likewise.
125 * gcc.target/i386/indirect-thunk-extern-5.c: Likewise.
126 * gcc.target/i386/indirect-thunk-extern-6.c: Likewise.
127 * gcc.target/i386/indirect-thunk-extern-7.c: Likewise.
128 * gcc.target/i386/indirect-thunk-inline-1.c: Likewise.
129 * gcc.target/i386/indirect-thunk-inline-2.c: Likewise.
130 * gcc.target/i386/indirect-thunk-inline-3.c: Likewise.
131 * gcc.target/i386/indirect-thunk-inline-4.c: Likewise.
132 * gcc.target/i386/indirect-thunk-inline-5.c: Likewise.
133 * gcc.target/i386/indirect-thunk-inline-6.c: Likewise.
134 * gcc.target/i386/indirect-thunk-inline-7.c: Likewise.
135 * gcc.target/i386/ret-thunk-9.c: Likewise.
136 * gcc.target/i386/ret-thunk-10.c: Likewise.
137 * gcc.target/i386/ret-thunk-11.c: Likewise.
138 * gcc.target/i386/ret-thunk-12.c: Likewise.
139 * gcc.target/i386/ret-thunk-13.c: Likewise.
140 * gcc.target/i386/ret-thunk-14.c: Likewise.
141 * gcc.target/i386/ret-thunk-15.c: Likewise.
142
143Upstream-Status: Pending
144
145Signed-off-by: Juro Bystricky <juro.bystricky@intel.com>
146
147---
148 gcc/config/i386/constraints.md | 4 ++--
149 gcc/config/i386/i386.h | 5 ++++
150 gcc/config/i386/i386.md | 28 +++++++++++++---------
151 gcc/config/i386/predicates.md | 6 ++---
152 gcc/testsuite/gcc.target/i386/indirect-thunk-1.c | 5 ++--
153 gcc/testsuite/gcc.target/i386/indirect-thunk-2.c | 5 ++--
154 gcc/testsuite/gcc.target/i386/indirect-thunk-3.c | 5 ++--
155 gcc/testsuite/gcc.target/i386/indirect-thunk-4.c | 5 ++--
156 gcc/testsuite/gcc.target/i386/indirect-thunk-5.c | 6 +++--
157 gcc/testsuite/gcc.target/i386/indirect-thunk-6.c | 12 ++++++----
158 gcc/testsuite/gcc.target/i386/indirect-thunk-7.c | 5 ++--
159 .../gcc.target/i386/indirect-thunk-attr-1.c | 5 ++--
160 .../gcc.target/i386/indirect-thunk-attr-2.c | 5 ++--
161 .../gcc.target/i386/indirect-thunk-attr-3.c | 3 +--
162 .../gcc.target/i386/indirect-thunk-attr-4.c | 3 +--
163 .../gcc.target/i386/indirect-thunk-attr-5.c | 9 ++++---
164 .../gcc.target/i386/indirect-thunk-attr-6.c | 9 ++++---
165 .../gcc.target/i386/indirect-thunk-attr-7.c | 5 ++--
166 .../gcc.target/i386/indirect-thunk-bnd-1.c | 6 ++---
167 .../gcc.target/i386/indirect-thunk-bnd-2.c | 6 ++---
168 .../gcc.target/i386/indirect-thunk-bnd-3.c | 5 ++--
169 .../gcc.target/i386/indirect-thunk-bnd-4.c | 7 +++---
170 .../gcc.target/i386/indirect-thunk-extern-1.c | 5 ++--
171 .../gcc.target/i386/indirect-thunk-extern-2.c | 5 ++--
172 .../gcc.target/i386/indirect-thunk-extern-3.c | 9 ++++---
173 .../gcc.target/i386/indirect-thunk-extern-4.c | 6 ++---
174 .../gcc.target/i386/indirect-thunk-extern-5.c | 6 +++--
175 .../gcc.target/i386/indirect-thunk-extern-6.c | 8 +++----
176 .../gcc.target/i386/indirect-thunk-extern-7.c | 5 ++--
177 .../gcc.target/i386/indirect-thunk-inline-1.c | 2 +-
178 .../gcc.target/i386/indirect-thunk-inline-2.c | 2 +-
179 .../gcc.target/i386/indirect-thunk-inline-3.c | 2 +-
180 .../gcc.target/i386/indirect-thunk-inline-4.c | 2 +-
181 .../gcc.target/i386/indirect-thunk-inline-5.c | 3 ++-
182 .../gcc.target/i386/indirect-thunk-inline-6.c | 3 ++-
183 .../gcc.target/i386/indirect-thunk-inline-7.c | 4 ++--
184 gcc/testsuite/gcc.target/i386/ret-thunk-10.c | 9 +++----
185 gcc/testsuite/gcc.target/i386/ret-thunk-11.c | 9 +++----
186 gcc/testsuite/gcc.target/i386/ret-thunk-12.c | 8 +++----
187 gcc/testsuite/gcc.target/i386/ret-thunk-13.c | 5 ++--
188 gcc/testsuite/gcc.target/i386/ret-thunk-14.c | 7 +++---
189 gcc/testsuite/gcc.target/i386/ret-thunk-15.c | 7 +++---
190 gcc/testsuite/gcc.target/i386/ret-thunk-9.c | 13 ++++------
191 43 files changed, 128 insertions(+), 141 deletions(-)
192
193diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md
194index 9204c8e..ef684a9 100644
195--- a/gcc/config/i386/constraints.md
196+++ b/gcc/config/i386/constraints.md
197@@ -172,7 +172,7 @@
198
199 (define_constraint "Bs"
200 "@internal Sibcall memory operand."
201- (ior (and (not (match_test "ix86_indirect_branch_register"))
202+ (ior (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
203 (not (match_test "TARGET_X32"))
204 (match_operand 0 "sibcall_memory_operand"))
205 (and (match_test "TARGET_X32 && Pmode == DImode")
206@@ -180,7 +180,7 @@
207
208 (define_constraint "Bw"
209 "@internal Call memory operand."
210- (ior (and (not (match_test "ix86_indirect_branch_register"))
211+ (ior (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
212 (not (match_test "TARGET_X32"))
213 (match_operand 0 "memory_operand"))
214 (and (match_test "TARGET_X32 && Pmode == DImode")
215diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
216index b34bc11..1816d71 100644
217--- a/gcc/config/i386/i386.h
218+++ b/gcc/config/i386/i386.h
219@@ -2676,6 +2676,11 @@ extern void debug_dispatch_window (int);
220 #define TARGET_RECIP_VEC_DIV ((recip_mask & RECIP_MASK_VEC_DIV) != 0)
221 #define TARGET_RECIP_VEC_SQRT ((recip_mask & RECIP_MASK_VEC_SQRT) != 0)
222
223+
224+#define TARGET_INDIRECT_BRANCH_REGISTER \
225+ (ix86_indirect_branch_register \
226+ || cfun->machine->indirect_branch_type != indirect_branch_keep)
227+
228 #define IX86_HLE_ACQUIRE (1 << 16)
229 #define IX86_HLE_RELEASE (1 << 17)
230
231diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
232index 857466a..6a6dc26 100644
233--- a/gcc/config/i386/i386.md
234+++ b/gcc/config/i386/i386.md
235@@ -11805,7 +11805,7 @@
236 [(set (pc) (match_operand 0 "indirect_branch_operand"))]
237 ""
238 {
239- if (TARGET_X32 || ix86_indirect_branch_register)
240+ if (TARGET_X32 || TARGET_INDIRECT_BRANCH_REGISTER)
241 operands[0] = convert_memory_address (word_mode, operands[0]);
242 cfun->machine->has_local_indirect_jump = true;
243 })
244@@ -11859,7 +11859,7 @@
245 OPTAB_DIRECT);
246 }
247
248- if (TARGET_X32 || ix86_indirect_branch_register)
249+ if (TARGET_X32 || TARGET_INDIRECT_BRANCH_REGISTER)
250 operands[0] = convert_memory_address (word_mode, operands[0]);
251 cfun->machine->has_local_indirect_jump = true;
252 })
253@@ -12029,7 +12029,10 @@
254 (match_operand:SI 0 "register_no_elim_operand" "U")
255 (match_operand:SI 1 "GOT32_symbol_operand"))))
256 (match_operand 2))]
257- "!TARGET_MACHO && !TARGET_64BIT && SIBLING_CALL_P (insn)"
258+ "!TARGET_MACHO
259+ && !TARGET_64BIT
260+ && !TARGET_INDIRECT_BRANCH_REGISTER
261+ && SIBLING_CALL_P (insn)"
262 {
263 rtx fnaddr = gen_rtx_PLUS (Pmode, operands[0], operands[1]);
264 fnaddr = gen_const_mem (Pmode, fnaddr);
265@@ -12048,7 +12051,7 @@
266 [(call (mem:QI (match_operand:W 0 "memory_operand" "m"))
267 (match_operand 1))
268 (unspec [(const_int 0)] UNSPEC_PEEPSIB)]
269- "!TARGET_X32 && !ix86_indirect_branch_register"
270+ "!TARGET_X32 && !TARGET_INDIRECT_BRANCH_REGISTER"
271 "* return ix86_output_call_insn (insn, operands[0]);"
272 [(set_attr "type" "call")])
273
274@@ -12058,7 +12061,7 @@
275 (call (mem:QI (match_dup 0))
276 (match_operand 3))]
277 "!TARGET_X32
278- && !ix86_indirect_branch_register
279+ && !TARGET_INDIRECT_BRANCH_REGISTER
280 && SIBLING_CALL_P (peep2_next_insn (1))
281 && !reg_mentioned_p (operands[0],
282 CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))"
283@@ -12073,7 +12076,7 @@
284 (call (mem:QI (match_dup 0))
285 (match_operand 3))]
286 "!TARGET_X32
287- && !ix86_indirect_branch_register
288+ && !TARGET_INDIRECT_BRANCH_REGISTER
289 && SIBLING_CALL_P (peep2_next_insn (2))
290 && !reg_mentioned_p (operands[0],
291 CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))"
292@@ -12171,7 +12174,7 @@
293 (match_operand:W 1 "memory_operand"))
294 (set (pc) (match_dup 0))]
295 "!TARGET_X32
296- && !ix86_indirect_branch_register
297+ && !TARGET_INDIRECT_BRANCH_REGISTER
298 && peep2_reg_dead_p (2, operands[0])"
299 [(set (pc) (match_dup 1))])
300
301@@ -12229,7 +12232,10 @@
302 (match_operand:SI 1 "register_no_elim_operand" "U")
303 (match_operand:SI 2 "GOT32_symbol_operand"))))
304 (match_operand 3)))]
305- "!TARGET_MACHO && !TARGET_64BIT && SIBLING_CALL_P (insn)"
306+ "!TARGET_MACHO
307+ && !TARGET_64BIT
308+ && !TARGET_INDIRECT_BRANCH_REGISTER
309+ && SIBLING_CALL_P (insn)"
310 {
311 rtx fnaddr = gen_rtx_PLUS (Pmode, operands[1], operands[2]);
312 fnaddr = gen_const_mem (Pmode, fnaddr);
313@@ -12250,7 +12256,7 @@
314 (call (mem:QI (match_operand:W 1 "memory_operand" "m"))
315 (match_operand 2)))
316 (unspec [(const_int 0)] UNSPEC_PEEPSIB)]
317- "!TARGET_X32 && !ix86_indirect_branch_register"
318+ "!TARGET_X32 && !TARGET_INDIRECT_BRANCH_REGISTER"
319 "* return ix86_output_call_insn (insn, operands[1]);"
320 [(set_attr "type" "callv")])
321
322@@ -12261,7 +12267,7 @@
323 (call (mem:QI (match_dup 0))
324 (match_operand 3)))]
325 "!TARGET_X32
326- && !ix86_indirect_branch_register
327+ && !TARGET_INDIRECT_BRANCH_REGISTER
328 && SIBLING_CALL_P (peep2_next_insn (1))
329 && !reg_mentioned_p (operands[0],
330 CALL_INSN_FUNCTION_USAGE (peep2_next_insn (1)))"
331@@ -12278,7 +12284,7 @@
332 (call (mem:QI (match_dup 0))
333 (match_operand 3)))]
334 "!TARGET_X32
335- && !ix86_indirect_branch_register
336+ && !TARGET_INDIRECT_BRANCH_REGISTER
337 && SIBLING_CALL_P (peep2_next_insn (2))
338 && !reg_mentioned_p (operands[0],
339 CALL_INSN_FUNCTION_USAGE (peep2_next_insn (2)))"
340diff --git a/gcc/config/i386/predicates.md b/gcc/config/i386/predicates.md
341index d1f0a7d..5f8a98f 100644
342--- a/gcc/config/i386/predicates.md
343+++ b/gcc/config/i386/predicates.md
344@@ -593,7 +593,7 @@
345 ;; Test for a valid operand for indirect branch.
346 (define_predicate "indirect_branch_operand"
347 (ior (match_operand 0 "register_operand")
348- (and (not (match_test "ix86_indirect_branch_register"))
349+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
350 (not (match_test "TARGET_X32"))
351 (match_operand 0 "memory_operand"))))
352
353@@ -637,7 +637,7 @@
354 (ior (match_test "constant_call_address_operand
355 (op, mode == VOIDmode ? mode : Pmode)")
356 (match_operand 0 "call_register_no_elim_operand")
357- (and (not (match_test "ix86_indirect_branch_register"))
358+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
359 (ior (and (not (match_test "TARGET_X32"))
360 (match_operand 0 "memory_operand"))
361 (and (match_test "TARGET_X32 && Pmode == DImode")
362@@ -648,7 +648,7 @@
363 (ior (match_test "constant_call_address_operand
364 (op, mode == VOIDmode ? mode : Pmode)")
365 (match_operand 0 "register_no_elim_operand")
366- (and (not (match_test "ix86_indirect_branch_register"))
367+ (and (not (match_test "TARGET_INDIRECT_BRANCH_REGISTER"))
368 (ior (and (not (match_test "TARGET_X32"))
369 (match_operand 0 "sibcall_memory_operand"))
370 (and (match_test "TARGET_X32 && Pmode == DImode")
371diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
372index 60d0988..6e94d2c 100644
373--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
374+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c
375@@ -11,9 +11,8 @@ male_indirect_jump (long offset)
376 dispatch(offset);
377 }
378
379-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
380-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
381-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
382+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
383+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
384 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
385 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
386 /* { dg-final { scan-assembler {\tpause} } } */
387diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
388index aac7516..3c46707 100644
389--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
390+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c
391@@ -11,9 +11,8 @@ male_indirect_jump (long offset)
392 dispatch[offset](offset);
393 }
394
395-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
396-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
397-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
398+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
399+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
400 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
401 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
402 /* { dg-final { scan-assembler {\tpause} } } */
403diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
404index 9e24a38..2c7fb52 100644
405--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
406+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c
407@@ -12,9 +12,8 @@ male_indirect_jump (long offset)
408 return 0;
409 }
410
411-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
412-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
413-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
414+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
415+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
416 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
417 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
418 /* { dg-final { scan-assembler {\tpause} } } */
419diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
420index 127b5d9..0d3f895 100644
421--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
422+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c
423@@ -12,9 +12,8 @@ male_indirect_jump (long offset)
424 return 0;
425 }
426
427-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
428-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
429-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
430+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
431+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
432 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
433 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
434 /* { dg-final { scan-assembler {\tpause} } } */
435diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c
436index fcaa18d..fb26c00 100644
437--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c
438+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-5.c
439@@ -9,8 +9,10 @@ foo (void)
440 bar ();
441 }
442
443-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
444-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */
445+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */
446+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */
447+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */
448+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */
449 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
450 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
451 /* { dg-final { scan-assembler {\tpause} } } */
452diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c
453index e464928..aa03fbd 100644
454--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c
455+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-6.c
456@@ -10,9 +10,13 @@ foo (void)
457 return 0;
458 }
459
460-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
461-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */
462-/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
463-/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
464+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */
465+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */
466+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 { target x32 } } } */
467+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 { target x32 } } } */
468+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */
469+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */
470+/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
471+/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
472 /* { dg-final { scan-assembler {\tpause} } } */
473 /* { dg-final { scan-assembler {\tlfence} } } */
474diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
475index 17c2d0f..3c72036 100644
476--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
477+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-7.c
478@@ -35,9 +35,8 @@ bar (int i)
479 }
480 }
481
482-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */
483-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
484-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
485+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
486+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
487 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
488 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
489 /* { dg-final { scan-assembler {\tpause} } } */
490diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
491index 9194ccf..7106407 100644
492--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
493+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c
494@@ -14,9 +14,8 @@ male_indirect_jump (long offset)
495 dispatch(offset);
496 }
497
498-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
499-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
500-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
501+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
502+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
503 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
504 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
505 /* { dg-final { scan-assembler {\tpause} } } */
506diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
507index e51f261..27c7e5b 100644
508--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
509+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c
510@@ -12,9 +12,8 @@ male_indirect_jump (long offset)
511 dispatch[offset](offset);
512 }
513
514-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
515-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
516-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
517+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
518+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
519 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
520 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
521 /* { dg-final { scan-assembler {\tpause} } } */
522diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
523index 4aeec18..89a2bac 100644
524--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
525+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c
526@@ -14,10 +14,9 @@ male_indirect_jump (long offset)
527 return 0;
528 }
529
530-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
531+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
532 /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
533 /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
534 /* { dg-final { scan-assembler {\tpause} } } */
535 /* { dg-final { scan-assembler {\tlfence} } } */
536 /* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
537-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
538diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
539index ac0e599..3eb83c3 100644
540--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
541+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c
542@@ -13,10 +13,9 @@ male_indirect_jump (long offset)
543 return 0;
544 }
545
546-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
547+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
548 /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
549 /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
550 /* { dg-final { scan-assembler {\tpause} } } */
551 /* { dg-final { scan-assembler {\tlfence} } } */
552 /* { dg-final { scan-assembler-not "__x86_indirect_thunk" } } */
553-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
554diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
555index 573cf1e..0098dd1 100644
556--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
557+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c
558@@ -14,9 +14,8 @@ male_indirect_jump (long offset)
559 return 0;
560 }
561
562-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
563-/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
564-/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
565-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
566-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
567+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
568+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
569 /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
570+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
571+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
572diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
573index b2b37fc..ece8de1 100644
574--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
575+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c
576@@ -13,9 +13,8 @@ male_indirect_jump (long offset)
577 return 0;
578 }
579
580-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
581-/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
582-/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
583-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
584-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
585+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
586+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
587 /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
588+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
589+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
590diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
591index 4a43e19..d53fc88 100644
592--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
593+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-7.c
594@@ -36,9 +36,8 @@ bar (int i)
595 }
596 }
597
598-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */
599-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
600-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */
601+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
602+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
603 /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
604 /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
605 /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
606diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c
607index ac84ab6..73d16ba 100644
608--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c
609+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-1.c
610@@ -10,9 +10,9 @@ foo (void)
611 dispatch (buf);
612 }
613
614-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
615-/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */
616-/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */
617+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
618+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd_rax" { target lp64 } } } */
619+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_eax" { target ia32 } } } */
620 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
621 /* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */
622 /* { dg-final { scan-assembler "bnd ret" } } */
623diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c
624index ce655e8..856751a 100644
625--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c
626+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-2.c
627@@ -11,10 +11,8 @@ foo (void)
628 return 0;
629 }
630
631-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
632-/* { dg-final { scan-assembler "pushq\[ \t\]%rax" { target x32 } } } */
633-/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */
634-/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */
635+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
636+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_(r|e)ax" } } */
637 /* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */
638 /* { dg-final { scan-assembler "bnd ret" } } */
639 /* { dg-final { scan-assembler {\tpause} } } */
640diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c
641index d34485a..42312f6 100644
642--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c
643+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-3.c
644@@ -10,8 +10,9 @@ foo (void)
645 bar (buf);
646 }
647
648-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
649-/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd" } } */
650+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" } } */
651+/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk_bnd_rax" { target lp64 } } } */
652+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_eax" { target ia32 } } } */
653 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
654 /* { dg-final { scan-assembler "bnd call\[ \t\]*\.LIND" } } */
655 /* { dg-final { scan-assembler "bnd ret" } } */
656diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c
657index 0e19830..c8ca102 100644
658--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c
659+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-bnd-4.c
660@@ -11,10 +11,9 @@ foo (void)
661 return 0;
662 }
663
664-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
665-/* { dg-final { scan-assembler "bnd jmp\[ \t\]*__x86_indirect_thunk" } } */
666-/* { dg-final { scan-assembler "bnd jmp\[ \t\]*\.LIND" } } */
667-/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 2 } } */
668+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" } } */
669+/* { dg-final { scan-assembler "bnd call\[ \t\]*__x86_indirect_thunk_bnd_(r|e)ax" } } */
670+/* { dg-final { scan-assembler-times "bnd call\[ \t\]*\.LIND" 1 } } */
671 /* { dg-final { scan-assembler "bnd ret" } } */
672 /* { dg-final { scan-assembler {\tpause} } } */
673 /* { dg-final { scan-assembler {\tlfence} } } */
674diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
675index 579441f..c09dd0a 100644
676--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
677+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c
678@@ -11,9 +11,8 @@ male_indirect_jump (long offset)
679 dispatch(offset);
680 }
681
682-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
683-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
684-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
685+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
686+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
687 /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
688 /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
689 /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
690diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
691index c92e6f2..826425a 100644
692--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
693+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c
694@@ -11,9 +11,8 @@ male_indirect_jump (long offset)
695 dispatch[offset](offset);
696 }
697
698-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
699-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
700-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
701+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
702+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
703 /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
704 /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
705 /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
706diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
707index d9964c2..3856268 100644
708--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
709+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c
710@@ -12,9 +12,8 @@ male_indirect_jump (long offset)
711 return 0;
712 }
713
714-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
715-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
716-/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
717-/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
718-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
719+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
720+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
721 /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
722+/* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
723+/* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
724diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
725index d4dca4d..1ae49b1 100644
726--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
727+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c
728@@ -12,9 +12,7 @@ male_indirect_jump (long offset)
729 return 0;
730 }
731
732-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
733-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
734-/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
735-/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 { target { ! x32 } } } } */
736 /* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
737+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
738+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
739 /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
740diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c
741index 5c07e02..5328239 100644
742--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c
743+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-5.c
744@@ -9,8 +9,10 @@ foo (void)
745 bar ();
746 }
747
748-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
749-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */
750+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */
751+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */
752+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */
753+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */
754 /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
755 /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
756 /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
757diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c
758index 3eb4406..8ae4348 100644
759--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c
760+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-6.c
761@@ -10,8 +10,8 @@ foo (void)
762 return 0;
763 }
764
765-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
766-/* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 1 } } */
767-/* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 1 } } */
768-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" } } */
769+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */
770+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target x32 } } } */
771+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */
772+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { ! x32 } } } } */
773 /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
774diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
775index aece938..2b9a33e 100644
776--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
777+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-7.c
778@@ -35,9 +35,8 @@ bar (int i)
779 }
780 }
781
782-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */
783-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
784-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
785+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
786+/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
787 /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */
788 /* { dg-final { scan-assembler-not "jmp\[ \t\]*\.LIND" } } */
789 /* { dg-final { scan-assembler-not "call\[ \t\]*\.LIND" } } */
790diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
791index 3aba5e8..869d904 100644
792--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
793+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c
794@@ -11,7 +11,7 @@ male_indirect_jump (long offset)
795 dispatch(offset);
796 }
797
798-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
799+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
800 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
801 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
802 /* { dg-final { scan-assembler {\tpause} } } */
803diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
804index 0f0181d..c5c16ed 100644
805--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
806+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c
807@@ -11,7 +11,7 @@ male_indirect_jump (long offset)
808 dispatch[offset](offset);
809 }
810
811-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
812+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
813 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
814 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
815 /* { dg-final { scan-assembler {\tpause} } } */
816diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
817index 2eef6f3..4a63ebe 100644
818--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
819+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c
820@@ -12,7 +12,7 @@ male_indirect_jump (long offset)
821 return 0;
822 }
823
824-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
825+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
826 /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
827 /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
828 /* { dg-final { scan-assembler-times {\tpause} 1 } } */
829diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
830index e825a10..a395ffc 100644
831--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
832+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c
833@@ -12,7 +12,7 @@ male_indirect_jump (long offset)
834 return 0;
835 }
836
837-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?dispatch" { target { { ! x32 } && *-*-linux* } } } } */
838+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?dispatch" { target *-*-linux* } } } */
839 /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
840 /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
841 /* { dg-final { scan-assembler-times {\tpause} 1 } } */
842diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c
843index c6d77e1..21cbfd3 100644
844--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c
845+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-5.c
846@@ -9,7 +9,8 @@ foo (void)
847 bar ();
848 }
849
850-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
851+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */
852+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */
853 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
854 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
855 /* { dg-final { scan-assembler {\tpause} } } */
856diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c
857index 6454827..d1300f1 100644
858--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c
859+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-6.c
860@@ -10,7 +10,8 @@ foo (void)
861 return 0;
862 }
863
864-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" } } */
865+/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*bar@GOT" { target x32 } } } */
866+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar@GOT" { target { ! x32 } } } } */
867 /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 2 } } */
868 /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 2 } } */
869 /* { dg-final { scan-assembler-times {\tpause} 1 } } */
870diff --git a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
871index c67066c..ea00924 100644
872--- a/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
873+++ b/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-7.c
874@@ -35,8 +35,8 @@ bar (int i)
875 }
876 }
877
878-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target { { ! x32 } && *-*-linux* } } } } */
879-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
880+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*\.L\[0-9\]+\\(,%" { target *-*-linux* } } } */
881+/* { dg-final { scan-assembler-not "pushq\[ \t\]%(r|e)ax" } } */
882 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
883 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
884 /* { dg-final { scan-assembler {\tpause} } } */
885diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
886index e6fea84..af9023a 100644
887--- a/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
888+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-10.c
889@@ -15,9 +15,6 @@ foo (void)
890 /* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */
891 /* { dg-final { scan-assembler-times {\tpause} 2 } } */
892 /* { dg-final { scan-assembler-times {\tlfence} 2 } } */
893-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
894-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
895-/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */
896-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
897-/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */
898-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
899+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
900+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */
901+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
902diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
903index e239ec4..ba467c5 100644
904--- a/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
905+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-11.c
906@@ -15,9 +15,6 @@ foo (void)
907 /* { dg-final { scan-assembler-times {\tlfence} 1 } } */
908 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
909 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
910-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
911-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
912-/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */
913-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
914-/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */
915-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
916+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
917+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */
918+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
919diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
920index fa31813..43e57ca 100644
921--- a/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
922+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-12.c
923@@ -15,8 +15,6 @@ foo (void)
924 /* { dg-final { scan-assembler-times {\tlfence} 1 } } */
925 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
926 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
927-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
928-/* { dg-final { scan-assembler "__x86_indirect_thunk:" { target { ! x32 } } } } */
929-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
930-/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" { target { x32 } } } } */
931-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
932+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
933+/* { dg-final { scan-assembler "__x86_indirect_thunk_(r|e)ax:" } } */
934+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
935diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
936index fd5b41f..55f156c 100644
937--- a/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
938+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-13.c
939@@ -14,9 +14,8 @@ foo (void)
940 /* { dg-final { scan-assembler "jmp\[ \t\]*__x86_return_thunk" } } */
941 /* { dg-final { scan-assembler-times {\tpause} 2 } } */
942 /* { dg-final { scan-assembler-times {\tlfence} 2 } } */
943-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
944 /* { dg-final { scan-assembler-times "jmp\[ \t\]*\.LIND" 3 } } */
945 /* { dg-final { scan-assembler-times "call\[ \t\]*\.LIND" 3 } } */
946 /* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_indirect_thunk" } } */
947-/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
948-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
949+/* { dg-final { scan-assembler-not "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
950+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
951diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
952index d606373..1c79043 100644
953--- a/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
954+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-14.c
955@@ -16,7 +16,6 @@ foo (void)
956 /* { dg-final { scan-assembler-not "jmp\[ \t\]*__x86_return_thunk" } } */
957 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
958 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
959-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
960-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
961-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
962-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
963+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */
964+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
965+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
966diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
967index 75e45e2..58aba31 100644
968--- a/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
969+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-15.c
970@@ -16,7 +16,6 @@ foo (void)
971 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
972 /* { dg-final { scan-assembler-times {\tpause} 1 } } */
973 /* { dg-final { scan-assembler-times {\tlfence} 1 } } */
974-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
975-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
976-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target x32 } } } */
977-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
978+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */
979+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
980+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
981diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
982index d1db41c..d2df8b8 100644
983--- a/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
984+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-9.c
985@@ -14,11 +14,8 @@ foo (void)
986 /* { dg-final { scan-assembler "jmp\[ \t\]*\.LIND" } } */
987 /* { dg-final { scan-assembler "call\[ \t\]*\.LIND" } } */
988 /* { dg-final { scan-assembler "__x86_indirect_thunk:" } } */
989-/* { dg-final { scan-assembler-times {\tpause} 1 { target { ! x32 } } } } */
990-/* { dg-final { scan-assembler-times {\tlfence} 1 { target { ! x32 } } } } */
991-/* { dg-final { scan-assembler "push(?:l|q)\[ \t\]*_?bar" { target { { ! x32 } && *-*-linux* } } } } */
992-/* { dg-final { scan-assembler "jmp\[ \t\]*__x86_indirect_thunk" { target { ! x32 } } } } */
993-/* { dg-final { scan-assembler-times {\tpause} 2 { target { x32 } } } } */
994-/* { dg-final { scan-assembler-times {\tlfence} 2 { target { x32 } } } } */
995-/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" { target { x32 } } } } */
996-/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" { target x32 } } } */
997+/* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*_?bar" { target *-*-linux* } } } */
998+/* { dg-final { scan-assembler-times {\tpause} 2 } } */
999+/* { dg-final { scan-assembler-times {\tlfence} 2 } } */
1000+/* { dg-final { scan-assembler "call\[ \t\]*__x86_indirect_thunk_(r|e)ax" } } */
1001+/* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */
1002--
10032.7.4
1004