xref: /llvm-project/llvm/test/CodeGen/X86/isel-phi.ll (revision c5abcb0521dd81bfd8b736c5d03177cc3a2d0fe3)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=i686-linux-gnu -verify-machineinstrs < %s -o - | FileCheck %s --check-prefixes=X86
3; RUN: llc -mtriple=i686-linux-gnu -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s -o - | FileCheck %s --check-prefixes=X86
4; TODO: enable when x87 is supported
5; llc -mtriple=i686-linux-gnu -global-isel -global-isel-abort=1 -verify-machineinstrs < %s -o - | FileCheck %s --check-prefixes=X86,GLOBAL-X86
6; RUN: llc -mtriple=x86_64-linux-gnu -verify-machineinstrs < %s -o - | FileCheck %s --check-prefixes=X64,DAG-X64
7; RUN: llc -mtriple=x86_64-linux-gnu -fast-isel -fast-isel-abort=1 -verify-machineinstrs < %s -o - | FileCheck %s --check-prefixes=X64,DAG-X64
8; RUN: llc -mtriple=x86_64-linux-gnu -global-isel -global-isel-abort=1 -verify-machineinstrs < %s -o - | FileCheck %s --check-prefixes=X64,GLOBAL-X64
9
10define i1 @test_i1(i1 %a, i1 %b, i1 %c, i1 %pred0, i1 %pred1) {
11; X86-LABEL: test_i1:
12; X86:       # %bb.0: # %entry
13; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)
14; X86-NEXT:    je .LBB0_1
15; X86-NEXT:  # %bb.2: # %cond
16; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)
17; X86-NEXT:    je .LBB0_4
18; X86-NEXT:  # %bb.3:
19; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
20; X86-NEXT:    retl
21; X86-NEXT:  .LBB0_1:
22; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
23; X86-NEXT:    retl
24; X86-NEXT:  .LBB0_4: # %cond.false
25; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
26; X86-NEXT:    retl
27;
28; X64-LABEL: test_i1:
29; X64:       # %bb.0: # %entry
30; X64-NEXT:    testb $1, %cl
31; X64-NEXT:    je .LBB0_1
32; X64-NEXT:  # %bb.2: # %cond
33; X64-NEXT:    movl %esi, %eax
34; X64-NEXT:    testb $1, %r8b
35; X64-NEXT:    jne .LBB0_4
36; X64-NEXT:  # %bb.3: # %cond.false
37; X64-NEXT:    movl %edx, %eax
38; X64-NEXT:  .LBB0_4: # %cond.end
39; X64-NEXT:    # kill: def $al killed $al killed $eax
40; X64-NEXT:    retq
41; X64-NEXT:  .LBB0_1:
42; X64-NEXT:    movl %edi, %eax
43; X64-NEXT:    # kill: def $al killed $al killed $eax
44; X64-NEXT:    retq
45entry:
46  br i1 %pred0, label %cond, label %cond.end
47
48cond:
49  br i1 %pred1, label %cond.true, label %cond.false
50
51cond.true:
52  br label %cond.end
53
54cond.false:
55  br label %cond.end
56
57cond.end:
58  %res = phi i1 [ %a, %entry ], [ %b, %cond.true ], [ %c, %cond.false ]
59  ret i1 %res
60}
61
62define i8 @test_i8(i8 %f, i8 %t, i1 %pred) {
63; X86-LABEL: test_i8:
64; X86:       # %bb.0: # %entry
65; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)
66; X86-NEXT:    je .LBB1_2
67; X86-NEXT:  # %bb.1:
68; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
69; X86-NEXT:    retl
70; X86-NEXT:  .LBB1_2: # %cond.false
71; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
72; X86-NEXT:    retl
73;
74; X64-LABEL: test_i8:
75; X64:       # %bb.0: # %entry
76; X64-NEXT:    testb $1, %dl
77; X64-NEXT:    je .LBB1_2
78; X64-NEXT:  # %bb.1:
79; X64-NEXT:    movl %edi, %eax
80; X64-NEXT:    # kill: def $al killed $al killed $eax
81; X64-NEXT:    retq
82; X64-NEXT:  .LBB1_2: # %cond.false
83; X64-NEXT:    movl %esi, %eax
84; X64-NEXT:    # kill: def $al killed $al killed $eax
85; X64-NEXT:    retq
86entry:
87  br i1 %pred, label %cond.true, label %cond.false
88
89cond.true:                                        ; preds = %entry
90  br label %cond.end
91
92cond.false:                                       ; preds = %entry
93  br label %cond.end
94
95cond.end:                                         ; preds = %cond.false, %cond.true
96  %cond = phi i8 [ %f, %cond.true ], [ %t, %cond.false ]
97  ret i8 %cond
98}
99
100define i16 @test_i16(i16 %f, i16 %t, i1 %pred) {
101; X86-LABEL: test_i16:
102; X86:       # %bb.0: # %entry
103; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)
104; X86-NEXT:    je .LBB2_2
105; X86-NEXT:  # %bb.1:
106; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
107; X86-NEXT:    retl
108; X86-NEXT:  .LBB2_2: # %cond.false
109; X86-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
110; X86-NEXT:    retl
111;
112; X64-LABEL: test_i16:
113; X64:       # %bb.0: # %entry
114; X64-NEXT:    testb $1, %dl
115; X64-NEXT:    je .LBB2_2
116; X64-NEXT:  # %bb.1:
117; X64-NEXT:    movl %edi, %eax
118; X64-NEXT:    # kill: def $ax killed $ax killed $eax
119; X64-NEXT:    retq
120; X64-NEXT:  .LBB2_2: # %cond.false
121; X64-NEXT:    movl %esi, %eax
122; X64-NEXT:    # kill: def $ax killed $ax killed $eax
123; X64-NEXT:    retq
124entry:
125  br i1 %pred, label %cond.true, label %cond.false
126
127cond.true:                                        ; preds = %entry
128  br label %cond.end
129
130cond.false:                                       ; preds = %entry
131  br label %cond.end
132
133cond.end:                                         ; preds = %cond.false, %cond.true
134  %cond = phi i16 [ %f, %cond.true ], [ %t, %cond.false ]
135  ret i16 %cond
136}
137
138define i32 @test_i32(i32 %f, i32 %t, i1 %pred) {
139; X86-LABEL: test_i32:
140; X86:       # %bb.0: # %entry
141; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)
142; X86-NEXT:    je .LBB3_2
143; X86-NEXT:  # %bb.1:
144; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
145; X86-NEXT:    retl
146; X86-NEXT:  .LBB3_2: # %cond.false
147; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
148; X86-NEXT:    retl
149;
150; X64-LABEL: test_i32:
151; X64:       # %bb.0: # %entry
152; X64-NEXT:    movl %edi, %eax
153; X64-NEXT:    testb $1, %dl
154; X64-NEXT:    jne .LBB3_2
155; X64-NEXT:  # %bb.1: # %cond.false
156; X64-NEXT:    movl %esi, %eax
157; X64-NEXT:  .LBB3_2: # %cond.end
158; X64-NEXT:    retq
159entry:
160  br i1 %pred, label %cond.true, label %cond.false
161
162cond.true:                                        ; preds = %entry
163  br label %cond.end
164
165cond.false:                                       ; preds = %entry
166  br label %cond.end
167
168cond.end:                                         ; preds = %cond.false, %cond.true
169  %cond = phi i32 [ %f, %cond.true ], [ %t, %cond.false ]
170  ret i32 %cond
171}
172
173define i64 @test_i64(i64 %f, i64 %t, i1 %pred) {
174; X86-LABEL: test_i64:
175; X86:       # %bb.0: # %entry
176; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)
177; X86-NEXT:    je .LBB4_2
178; X86-NEXT:  # %bb.1:
179; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
180; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
181; X86-NEXT:    retl
182; X86-NEXT:  .LBB4_2: # %cond.false
183; X86-NEXT:    movl {{[0-9]+}}(%esp), %edx
184; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
185; X86-NEXT:    retl
186;
187; X64-LABEL: test_i64:
188; X64:       # %bb.0: # %entry
189; X64-NEXT:    movq %rdi, %rax
190; X64-NEXT:    testb $1, %dl
191; X64-NEXT:    jne .LBB4_2
192; X64-NEXT:  # %bb.1: # %cond.false
193; X64-NEXT:    movq %rsi, %rax
194; X64-NEXT:  .LBB4_2: # %cond.end
195; X64-NEXT:    retq
196entry:
197  br i1 %pred, label %cond.true, label %cond.false
198
199cond.true:                                        ; preds = %entry
200  br label %cond.end
201
202cond.false:                                       ; preds = %entry
203  br label %cond.end
204
205cond.end:                                         ; preds = %cond.false, %cond.true
206  %cond = phi i64 [ %f, %cond.true ], [ %t, %cond.false ]
207  ret i64 %cond
208}
209
210define float @test_float(float %f, float %t, i1 %pred) {
211; X86-LABEL: test_float:
212; X86:       # %bb.0: # %entry
213; X86-NEXT:    flds {{[0-9]+}}(%esp)
214; X86-NEXT:    flds {{[0-9]+}}(%esp)
215; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)
216; X86-NEXT:    jne .LBB5_2
217; X86-NEXT:  # %bb.1: # %cond.false
218; X86-NEXT:    fstp %st(0)
219; X86-NEXT:    fldz
220; X86-NEXT:    fxch %st(1)
221; X86-NEXT:  .LBB5_2: # %cond.end
222; X86-NEXT:    fstp %st(1)
223; X86-NEXT:    retl
224;
225; X64-LABEL: test_float:
226; X64:       # %bb.0: # %entry
227; X64-NEXT:    testb $1, %dil
228; X64-NEXT:    jne .LBB5_2
229; X64-NEXT:  # %bb.1: # %cond.false
230; X64-NEXT:    movaps %xmm1, %xmm0
231; X64-NEXT:  .LBB5_2: # %cond.end
232; X64-NEXT:    retq
233entry:
234  br i1 %pred, label %cond.true, label %cond.false
235
236cond.true:                                        ; preds = %entry
237  br label %cond.end
238
239cond.false:                                       ; preds = %entry
240  br label %cond.end
241
242cond.end:                                         ; preds = %cond.false, %cond.true
243  %cond = phi float [ %f, %cond.true ], [ %t, %cond.false ]
244  ret float %cond
245}
246
247define double @test_double(i32 %a, double %f, double %t, i1 %pred) {
248; X86-LABEL: test_double:
249; X86:       # %bb.0: # %entry
250; X86-NEXT:    fldl {{[0-9]+}}(%esp)
251; X86-NEXT:    fldl {{[0-9]+}}(%esp)
252; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)
253; X86-NEXT:    jne .LBB6_2
254; X86-NEXT:  # %bb.1: # %cond.false
255; X86-NEXT:    fstp %st(0)
256; X86-NEXT:    fldz
257; X86-NEXT:    fxch %st(1)
258; X86-NEXT:  .LBB6_2: # %cond.end
259; X86-NEXT:    fstp %st(1)
260; X86-NEXT:    retl
261;
262; X64-LABEL: test_double:
263; X64:       # %bb.0: # %entry
264; X64-NEXT:    testb $1, %sil
265; X64-NEXT:    jne .LBB6_2
266; X64-NEXT:  # %bb.1: # %cond.false
267; X64-NEXT:    movaps %xmm1, %xmm0
268; X64-NEXT:  .LBB6_2: # %cond.end
269; X64-NEXT:    retq
270entry:
271  br i1 %pred, label %cond.true, label %cond.false
272
273cond.true:                                        ; preds = %entry
274  br label %cond.end
275
276cond.false:                                       ; preds = %entry
277  br label %cond.end
278
279cond.end:                                         ; preds = %cond.false, %cond.true
280  %cond = phi double [ %f, %cond.true ], [ %t, %cond.false ]
281  ret double %cond
282}
283
284define ptr @test_ptr(ptr %a, ptr %b, ptr %c, ptr %d, ptr %e, ptr %f, ptr %g, i1 %pred0, i1 %pred1, i1 %pred2) {
285; X86-LABEL: test_ptr:
286; X86:       # %bb.0: # %entry
287; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
288; X86-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
289; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)
290; X86-NEXT:    je .LBB7_6
291; X86-NEXT:  # %bb.1: # %cond.true
292; X86-NEXT:    testb $1, %cl
293; X86-NEXT:    je .LBB7_3
294; X86-NEXT:  # %bb.2:
295; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
296; X86-NEXT:    retl
297; X86-NEXT:  .LBB7_6: # %cond.false
298; X86-NEXT:    testb $1, %cl
299; X86-NEXT:    je .LBB7_10
300; X86-NEXT:  # %bb.7: # %cond.false.true
301; X86-NEXT:    testb $1, %al
302; X86-NEXT:    je .LBB7_9
303; X86-NEXT:  # %bb.8:
304; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
305; X86-NEXT:    retl
306; X86-NEXT:  .LBB7_3: # %cond.true.false
307; X86-NEXT:    testb $1, %al
308; X86-NEXT:    je .LBB7_5
309; X86-NEXT:  # %bb.4:
310; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
311; X86-NEXT:    retl
312; X86-NEXT:  .LBB7_10: # %cond.false.false
313; X86-NEXT:    testb $1, %al
314; X86-NEXT:    je .LBB7_12
315; X86-NEXT:  # %bb.11:
316; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
317; X86-NEXT:    retl
318; X86-NEXT:  .LBB7_9: # %cond.false.true.false
319; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
320; X86-NEXT:    retl
321; X86-NEXT:  .LBB7_5: # %cond.true.false.false
322; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
323; X86-NEXT:    retl
324; X86-NEXT:  .LBB7_12: # %cond.false.false.false
325; X86-NEXT:    movl {{[0-9]+}}(%esp), %eax
326; X86-NEXT:    retl
327;
328; DAG-X64-LABEL: test_ptr:
329; DAG-X64:       # %bb.0: # %entry
330; DAG-X64-NEXT:    movq %rdi, %rax
331; DAG-X64-NEXT:    movzbl {{[0-9]+}}(%rsp), %edi
332; DAG-X64-NEXT:    movzbl {{[0-9]+}}(%rsp), %r10d
333; DAG-X64-NEXT:    testb $1, {{[0-9]+}}(%rsp)
334; DAG-X64-NEXT:    je .LBB7_4
335; DAG-X64-NEXT:  # %bb.1: # %cond.true
336; DAG-X64-NEXT:    testb $1, %r10b
337; DAG-X64-NEXT:    jne .LBB7_9
338; DAG-X64-NEXT:  # %bb.2: # %cond.true.false
339; DAG-X64-NEXT:    testb $1, %dil
340; DAG-X64-NEXT:    movq %rsi, %rax
341; DAG-X64-NEXT:    jne .LBB7_9
342; DAG-X64-NEXT:  # %bb.3: # %cond.true.false.false
343; DAG-X64-NEXT:    movq %rdx, %rax
344; DAG-X64-NEXT:    retq
345; DAG-X64-NEXT:  .LBB7_4: # %cond.false
346; DAG-X64-NEXT:    testb $1, %r10b
347; DAG-X64-NEXT:    je .LBB7_7
348; DAG-X64-NEXT:  # %bb.5: # %cond.false.true
349; DAG-X64-NEXT:    testb $1, %dil
350; DAG-X64-NEXT:    movq %rcx, %rax
351; DAG-X64-NEXT:    jne .LBB7_9
352; DAG-X64-NEXT:  # %bb.6: # %cond.false.true.false
353; DAG-X64-NEXT:    movq %r8, %rax
354; DAG-X64-NEXT:    retq
355; DAG-X64-NEXT:  .LBB7_7: # %cond.false.false
356; DAG-X64-NEXT:    testb $1, %dil
357; DAG-X64-NEXT:    movq %r9, %rax
358; DAG-X64-NEXT:    jne .LBB7_9
359; DAG-X64-NEXT:  # %bb.8: # %cond.false.false.false
360; DAG-X64-NEXT:    movq {{[0-9]+}}(%rsp), %rax
361; DAG-X64-NEXT:  .LBB7_9: # %cond.end
362; DAG-X64-NEXT:    retq
363;
364; GLOBAL-X64-LABEL: test_ptr:
365; GLOBAL-X64:       # %bb.0: # %entry
366; GLOBAL-X64-NEXT:    movq %rdi, %rax
367; GLOBAL-X64-NEXT:    movl {{[0-9]+}}(%rsp), %r11d
368; GLOBAL-X64-NEXT:    movl {{[0-9]+}}(%rsp), %r10d
369; GLOBAL-X64-NEXT:    movl {{[0-9]+}}(%rsp), %edi
370; GLOBAL-X64-NEXT:    testb $1, %r11b
371; GLOBAL-X64-NEXT:    je .LBB7_4
372; GLOBAL-X64-NEXT:  # %bb.1: # %cond.true
373; GLOBAL-X64-NEXT:    testb $1, %r10b
374; GLOBAL-X64-NEXT:    jne .LBB7_9
375; GLOBAL-X64-NEXT:  # %bb.2: # %cond.true.false
376; GLOBAL-X64-NEXT:    testb $1, %dil
377; GLOBAL-X64-NEXT:    movq %rsi, %rax
378; GLOBAL-X64-NEXT:    jne .LBB7_9
379; GLOBAL-X64-NEXT:  # %bb.3: # %cond.true.false.false
380; GLOBAL-X64-NEXT:    movq %rdx, %rax
381; GLOBAL-X64-NEXT:    retq
382; GLOBAL-X64-NEXT:  .LBB7_4: # %cond.false
383; GLOBAL-X64-NEXT:    testb $1, %r10b
384; GLOBAL-X64-NEXT:    je .LBB7_7
385; GLOBAL-X64-NEXT:  # %bb.5: # %cond.false.true
386; GLOBAL-X64-NEXT:    testb $1, %dil
387; GLOBAL-X64-NEXT:    movq %rcx, %rax
388; GLOBAL-X64-NEXT:    jne .LBB7_9
389; GLOBAL-X64-NEXT:  # %bb.6: # %cond.false.true.false
390; GLOBAL-X64-NEXT:    movq %r8, %rax
391; GLOBAL-X64-NEXT:    retq
392; GLOBAL-X64-NEXT:  .LBB7_7: # %cond.false.false
393; GLOBAL-X64-NEXT:    testb $1, %dil
394; GLOBAL-X64-NEXT:    movq %r9, %rax
395; GLOBAL-X64-NEXT:    jne .LBB7_9
396; GLOBAL-X64-NEXT:  # %bb.8: # %cond.false.false.false
397; GLOBAL-X64-NEXT:    movq {{[0-9]+}}(%rsp), %rax
398; GLOBAL-X64-NEXT:  .LBB7_9: # %cond.end
399; GLOBAL-X64-NEXT:    retq
400entry:
401  br i1 %pred0, label %cond.true, label %cond.false
402
403cond.true:
404  br i1 %pred1, label %cond.end, label %cond.true.false
405
406cond.true.false:
407  br i1 %pred2, label %cond.true.false.true, label %cond.true.false.false
408
409cond.true.false.true:
410  br label %cond.end
411
412cond.true.false.false:
413  br label %cond.end
414
415cond.false:
416  br i1 %pred1, label %cond.false.true, label %cond.false.false
417
418cond.false.true:
419  br i1 %pred2, label %cond.false.true.true, label %cond.false.true.false
420
421cond.false.true.true:
422  br label %cond.end
423
424cond.false.true.false:
425  br label %cond.end
426
427cond.false.false:
428  br i1 %pred2, label %cond.false.false.true, label %cond.false.false.false
429
430cond.false.false.true:
431  br label %cond.end
432
433cond.false.false.false:
434  br label %cond.end
435
436cond.end:
437  %res = phi ptr [ %a, %cond.true ], [ %b, %cond.true.false.true ], [ %c, %cond.true.false.false ], [ %d, %cond.false.true.true ], [ %e, %cond.false.true.false ], [ %f, %cond.false.false.true ], [ %g, %cond.false.false.false ]
438  ret ptr %res
439}
440
441define x86_fp80 @test_fp80(x86_fp80 %f, x86_fp80 %t, i1 %pred) {
442; X86-LABEL: test_fp80:
443; X86:       # %bb.0: # %entry
444; X86-NEXT:    fldt {{[0-9]+}}(%esp)
445; X86-NEXT:    fldt {{[0-9]+}}(%esp)
446; X86-NEXT:    testb $1, {{[0-9]+}}(%esp)
447; X86-NEXT:    jne .LBB8_2
448; X86-NEXT:  # %bb.1: # %cond.false
449; X86-NEXT:    fstp %st(0)
450; X86-NEXT:    fldz
451; X86-NEXT:    fxch %st(1)
452; X86-NEXT:  .LBB8_2: # %cond.end
453; X86-NEXT:    fstp %st(1)
454; X86-NEXT:    retl
455;
456; DAG-X64-LABEL: test_fp80:
457; DAG-X64:       # %bb.0: # %entry
458; DAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
459; DAG-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
460; DAG-X64-NEXT:    testb $1, %dil
461; DAG-X64-NEXT:    jne .LBB8_2
462; DAG-X64-NEXT:  # %bb.1: # %cond.false
463; DAG-X64-NEXT:    fstp %st(0)
464; DAG-X64-NEXT:    fldz
465; DAG-X64-NEXT:    fxch %st(1)
466; DAG-X64-NEXT:  .LBB8_2: # %cond.end
467; DAG-X64-NEXT:    fstp %st(1)
468; DAG-X64-NEXT:    retq
469;
470; GLOBAL-X64-LABEL: test_fp80:
471; GLOBAL-X64:       # %bb.0: # %entry
472; GLOBAL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
473; GLOBAL-X64-NEXT:    fldt {{[0-9]+}}(%rsp)
474; GLOBAL-X64-NEXT:    testb $1, %dil
475; GLOBAL-X64-NEXT:    jne .LBB8_2
476; GLOBAL-X64-NEXT:  # %bb.1: # %cond.false
477; GLOBAL-X64-NEXT:    fstp %st(1)
478; GLOBAL-X64-NEXT:    fldz
479; GLOBAL-X64-NEXT:  .LBB8_2: # %cond.end
480; GLOBAL-X64-NEXT:    fstp %st(0)
481; GLOBAL-X64-NEXT:    retq
482entry:
483  br i1 %pred, label %cond.true, label %cond.false
484
485cond.true:                                        ; preds = %entry
486  br label %cond.end
487
488cond.false:                                       ; preds = %entry
489  br label %cond.end
490
491cond.end:                                         ; preds = %cond.false, %cond.true
492  %cond = phi x86_fp80 [ %f, %cond.true ], [ %t, %cond.false ]
493  ret x86_fp80 %cond
494}
495