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