Revert r253160.
[oota-llvm.git] / test / MC / ELF / relax-arith.s
1 // RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-objdump -d - | FileCheck  %s
2
3 // Test that we correctly relax these instructions into versions that use
4 // 16 or 32 bit immediate values.
5
6 bar:
7 // CHECK:      Disassembly of section imul:
8 // CHECK-NEXT: imul:
9 // CHECK-NEXT:   0: 66 69 db 00 00                       imulw $0, %bx, %bx
10 // CHECK-NEXT:   5: 66 69 1c 25 00 00 00 00 00 00        imulw $0, 0, %bx
11 // CHECK-NEXT:   f: 69 db 00 00 00 00                    imull $0, %ebx, %ebx
12 // CHECK-NEXT:  15: 69 1c 25 00 00 00 00 00 00 00 00     imull $0, 0, %ebx
13 // CHECK-NEXT:  20: 48 69 db 00 00 00 00                 imulq $0, %rbx, %rbx
14 // CHECK-NEXT:  27: 48 69 1c 25 00 00 00 00 00 00 00 00  imulq $0, 0, %rbx
15         .section imul,"x"
16         imul $foo, %bx,  %bx
17         imul $foo, bar,  %bx
18         imul $foo, %ebx, %ebx
19         imul $foo, bar,  %ebx
20         imul $foo, %rbx, %rbx
21         imul $foo, bar,  %rbx
22
23 // CHECK:      Disassembly of section and:
24 // CHECK-NEXT: and:
25 // CHECK-NEXT:   0: 66 81 e3 00 00                       andw $0, %bx
26 // CHECK-NEXT:   5: 66 81 24 25 00 00 00 00 00 00        andw $0, 0
27 // CHECK-NEXT:   f: 81 e3 00 00 00 00                    andl $0, %ebx
28 // CHECK-NEXT:  15: 81 24 25 00 00 00 00 00 00 00 00     andl $0, 0
29 // CHECK-NEXT:  20: 48 81 e3 00 00 00 00                 andq $0, %rbx
30 // CHECK-NEXT:  27: 48 81 24 25 00 00 00 00 00 00 00 00  andq $0, 0
31         .section and,"x"
32         and  $foo, %bx
33         andw $foo, bar
34         and  $foo, %ebx
35         andl $foo, bar
36         and  $foo, %rbx
37         andq $foo, bar
38
39 // CHECK:      Disassembly of section or:
40 // CHECK-NEXT: or:
41 // CHECK-NEXT:   0: 66 81 cb 00 00                       orw $0, %bx
42 // CHECK-NEXT:   5: 66 81 0c 25 00 00 00 00 00 00        orw $0, 0
43 // CHECK-NEXT:   f: 81 cb 00 00 00 00                    orl $0, %ebx
44 // CHECK-NEXT:  15: 81 0c 25 00 00 00 00 00 00 00 00     orl $0, 0
45 // CHECK-NEXT:  20: 48 81 cb 00 00 00 00                 orq $0, %rbx
46 // CHECK-NEXT:  27: 48 81 0c 25 00 00 00 00 00 00 00 00  orq $0, 0
47         .section or,"x"
48         or  $foo, %bx
49         orw $foo, bar
50         or  $foo, %ebx
51         orl $foo, bar
52         or  $foo, %rbx
53         orq $foo, bar
54
55 // CHECK:      Disassembly of section xor:
56 // CHECK-NEXT: xor:
57 // CHECK-NEXT:   0: 66 81 f3 00 00                       xorw $0, %bx
58 // CHECK-NEXT:   5: 66 81 34 25 00 00 00 00 00 00        xorw $0, 0
59 // CHECK-NEXT:   f: 81 f3 00 00 00 00                    xorl $0, %ebx
60 // CHECK-NEXT:  15: 81 34 25 00 00 00 00 00 00 00 00     xorl $0, 0
61 // CHECK-NEXT:  20: 48 81 f3 00 00 00 00                 xorq $0, %rbx
62 // CHECK-NEXT:  27: 48 81 34 25 00 00 00 00 00 00 00 00  xorq $0, 0
63         .section xor,"x"
64         xor  $foo, %bx
65         xorw $foo, bar
66         xor  $foo, %ebx
67         xorl $foo, bar
68         xor  $foo, %rbx
69         xorq $foo, bar
70
71 // CHECK:      Disassembly of section add:
72 // CHECK-NEXT: add:
73 // CHECK-NEXT:   0: 66 81 c3 00 00                       addw $0, %bx
74 // CHECK-NEXT:   5: 66 81 04 25 00 00 00 00 00 00        addw $0, 0
75 // CHECK-NEXT:   f: 81 c3 00 00 00 00                    addl $0, %ebx
76 // CHECK-NEXT:  15: 81 04 25 00 00 00 00 00 00 00 00     addl $0, 0
77 // CHECK-NEXT:  20: 48 81 c3 00 00 00 00                 addq $0, %rbx
78 // CHECK-NEXT:  27: 48 81 04 25 00 00 00 00 00 00 00 00  addq $0, 0
79         .section add,"x"
80         add  $foo, %bx
81         addw $foo, bar
82         add  $foo, %ebx
83         addl $foo, bar
84         add  $foo, %rbx
85         addq $foo, bar
86
87 // CHECK:      Disassembly of section sub:
88 // CHECK-NEXT: sub:
89 // CHECK-NEXT:   0: 66 81 eb 00 00                       subw $0, %bx
90 // CHECK-NEXT:   5: 66 81 2c 25 00 00 00 00 00 00        subw $0, 0
91 // CHECK-NEXT:   f: 81 eb 00 00 00 00                    subl $0, %ebx
92 // CHECK-NEXT:  15: 81 2c 25 00 00 00 00 00 00 00 00     subl $0, 0
93 // CHECK-NEXT:  20: 48 81 eb 00 00 00 00                 subq $0, %rbx
94 // CHECK-NEXT:  27: 48 81 2c 25 00 00 00 00 00 00 00 00  subq $0, 0
95         .section sub,"x"
96         sub  $foo, %bx
97         subw $foo, bar
98         sub  $foo, %ebx
99         subl $foo, bar
100         sub  $foo, %rbx
101         subq $foo, bar
102
103 // CHECK:      Disassembly of section cmp:
104 // CHECK-NEXT: cmp:
105 // CHECK-NEXT:   0: 66 81 fb 00 00                       cmpw $0, %bx
106 // CHECK-NEXT:   5: 66 81 3c 25 00 00 00 00 00 00        cmpw $0, 0
107 // CHECK-NEXT:   f: 81 fb 00 00 00 00                    cmpl $0, %ebx
108 // CHECK-NEXT:  15: 81 3c 25 00 00 00 00 00 00 00 00     cmpl $0, 0
109 // CHECK-NEXT:  20: 48 81 fb 00 00 00 00                 cmpq $0, %rbx
110 // CHECK-NEXT:  27: 48 81 3c 25 00 00 00 00 00 00 00 00  cmpq $0, 0
111         .section cmp,"x"
112         cmp  $foo, %bx
113         cmpw $foo, bar
114         cmp  $foo, %ebx
115         cmpl $foo, bar
116         cmp  $foo, %rbx
117         cmpq $foo, bar
118
119 // CHECK:      Disassembly of section push:
120 // CHECK-NEXT: push:
121 // CHECK-NEXT:   0: 66 68 00 00                          pushw $0
122 // CHECK-NEXT:   4: 68 00 00 00 00                       pushq $0
123         .section push,"x"
124         pushw $foo
125         push  $foo