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 correctly relax these instructions into versions that use 4*9880d681SAndroid Build Coastguard Worker// 16 or 32 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 69 db 00 00 imulw $0, %bx, %bx 10*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 5: 66 69 1c 25 00 00 00 00 00 00 imulw $0, 0, %bx 11*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: f: 69 db 00 00 00 00 imull $0, %ebx, %ebx 12*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 15: 69 1c 25 00 00 00 00 00 00 00 00 imull $0, 0, %ebx 13*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 20: 48 69 db 00 00 00 00 imulq $0, %rbx, %rbx 14*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 27: 48 69 1c 25 00 00 00 00 00 00 00 00 imulq $0, 0, %rbx 15*9880d681SAndroid Build Coastguard Worker .section imul,"x" 16*9880d681SAndroid Build Coastguard Worker imul $foo, %bx, %bx 17*9880d681SAndroid Build Coastguard Worker imul $foo, bar, %bx 18*9880d681SAndroid Build Coastguard Worker imul $foo, %ebx, %ebx 19*9880d681SAndroid Build Coastguard Worker imul $foo, bar, %ebx 20*9880d681SAndroid Build Coastguard Worker imul $foo, %rbx, %rbx 21*9880d681SAndroid Build Coastguard Worker imul $foo, bar, %rbx 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker// CHECK: Disassembly of section and: 24*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: and: 25*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 0: 66 81 e3 00 00 andw $0, %bx 26*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 5: 66 81 24 25 00 00 00 00 00 00 andw $0, 0 27*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: f: 81 e3 00 00 00 00 andl $0, %ebx 28*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 15: 81 24 25 00 00 00 00 00 00 00 00 andl $0, 0 29*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 20: 48 81 e3 00 00 00 00 andq $0, %rbx 30*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 27: 48 81 24 25 00 00 00 00 00 00 00 00 andq $0, 0 31*9880d681SAndroid Build Coastguard Worker .section and,"x" 32*9880d681SAndroid Build Coastguard Worker and $foo, %bx 33*9880d681SAndroid Build Coastguard Worker andw $foo, bar 34*9880d681SAndroid Build Coastguard Worker and $foo, %ebx 35*9880d681SAndroid Build Coastguard Worker andl $foo, bar 36*9880d681SAndroid Build Coastguard Worker and $foo, %rbx 37*9880d681SAndroid Build Coastguard Worker andq $foo, bar 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker// CHECK: Disassembly of section or: 40*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: or: 41*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 0: 66 81 cb 00 00 orw $0, %bx 42*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 5: 66 81 0c 25 00 00 00 00 00 00 orw $0, 0 43*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: f: 81 cb 00 00 00 00 orl $0, %ebx 44*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 15: 81 0c 25 00 00 00 00 00 00 00 00 orl $0, 0 45*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 20: 48 81 cb 00 00 00 00 orq $0, %rbx 46*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 27: 48 81 0c 25 00 00 00 00 00 00 00 00 orq $0, 0 47*9880d681SAndroid Build Coastguard Worker .section or,"x" 48*9880d681SAndroid Build Coastguard Worker or $foo, %bx 49*9880d681SAndroid Build Coastguard Worker orw $foo, bar 50*9880d681SAndroid Build Coastguard Worker or $foo, %ebx 51*9880d681SAndroid Build Coastguard Worker orl $foo, bar 52*9880d681SAndroid Build Coastguard Worker or $foo, %rbx 53*9880d681SAndroid Build Coastguard Worker orq $foo, bar 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker// CHECK: Disassembly of section xor: 56*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: xor: 57*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 0: 66 81 f3 00 00 xorw $0, %bx 58*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 5: 66 81 34 25 00 00 00 00 00 00 xorw $0, 0 59*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: f: 81 f3 00 00 00 00 xorl $0, %ebx 60*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 15: 81 34 25 00 00 00 00 00 00 00 00 xorl $0, 0 61*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 20: 48 81 f3 00 00 00 00 xorq $0, %rbx 62*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 27: 48 81 34 25 00 00 00 00 00 00 00 00 xorq $0, 0 63*9880d681SAndroid Build Coastguard Worker .section xor,"x" 64*9880d681SAndroid Build Coastguard Worker xor $foo, %bx 65*9880d681SAndroid Build Coastguard Worker xorw $foo, bar 66*9880d681SAndroid Build Coastguard Worker xor $foo, %ebx 67*9880d681SAndroid Build Coastguard Worker xorl $foo, bar 68*9880d681SAndroid Build Coastguard Worker xor $foo, %rbx 69*9880d681SAndroid Build Coastguard Worker xorq $foo, bar 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker// CHECK: Disassembly of section add: 72*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: add: 73*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 0: 66 81 c3 00 00 addw $0, %bx 74*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 5: 66 81 04 25 00 00 00 00 00 00 addw $0, 0 75*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: f: 81 c3 00 00 00 00 addl $0, %ebx 76*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 15: 81 04 25 00 00 00 00 00 00 00 00 addl $0, 0 77*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 20: 48 81 c3 00 00 00 00 addq $0, %rbx 78*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 27: 48 81 04 25 00 00 00 00 00 00 00 00 addq $0, 0 79*9880d681SAndroid Build Coastguard Worker .section add,"x" 80*9880d681SAndroid Build Coastguard Worker add $foo, %bx 81*9880d681SAndroid Build Coastguard Worker addw $foo, bar 82*9880d681SAndroid Build Coastguard Worker add $foo, %ebx 83*9880d681SAndroid Build Coastguard Worker addl $foo, bar 84*9880d681SAndroid Build Coastguard Worker add $foo, %rbx 85*9880d681SAndroid Build Coastguard Worker addq $foo, bar 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Worker// CHECK: Disassembly of section sub: 88*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: sub: 89*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 0: 66 81 eb 00 00 subw $0, %bx 90*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 5: 66 81 2c 25 00 00 00 00 00 00 subw $0, 0 91*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: f: 81 eb 00 00 00 00 subl $0, %ebx 92*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 15: 81 2c 25 00 00 00 00 00 00 00 00 subl $0, 0 93*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 20: 48 81 eb 00 00 00 00 subq $0, %rbx 94*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 27: 48 81 2c 25 00 00 00 00 00 00 00 00 subq $0, 0 95*9880d681SAndroid Build Coastguard Worker .section sub,"x" 96*9880d681SAndroid Build Coastguard Worker sub $foo, %bx 97*9880d681SAndroid Build Coastguard Worker subw $foo, bar 98*9880d681SAndroid Build Coastguard Worker sub $foo, %ebx 99*9880d681SAndroid Build Coastguard Worker subl $foo, bar 100*9880d681SAndroid Build Coastguard Worker sub $foo, %rbx 101*9880d681SAndroid Build Coastguard Worker subq $foo, bar 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Worker// CHECK: Disassembly of section cmp: 104*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: cmp: 105*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 0: 66 81 fb 00 00 cmpw $0, %bx 106*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 5: 66 81 3c 25 00 00 00 00 00 00 cmpw $0, 0 107*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: f: 81 fb 00 00 00 00 cmpl $0, %ebx 108*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 15: 81 3c 25 00 00 00 00 00 00 00 00 cmpl $0, 0 109*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 20: 48 81 fb 00 00 00 00 cmpq $0, %rbx 110*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 27: 48 81 3c 25 00 00 00 00 00 00 00 00 cmpq $0, 0 111*9880d681SAndroid Build Coastguard Worker .section cmp,"x" 112*9880d681SAndroid Build Coastguard Worker cmp $foo, %bx 113*9880d681SAndroid Build Coastguard Worker cmpw $foo, bar 114*9880d681SAndroid Build Coastguard Worker cmp $foo, %ebx 115*9880d681SAndroid Build Coastguard Worker cmpl $foo, bar 116*9880d681SAndroid Build Coastguard Worker cmp $foo, %rbx 117*9880d681SAndroid Build Coastguard Worker cmpq $foo, bar 118*9880d681SAndroid Build Coastguard Worker 119*9880d681SAndroid Build Coastguard Worker// CHECK: Disassembly of section push: 120*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: push: 121*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 0: 66 68 00 00 pushw $0 122*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 4: 68 00 00 00 00 pushq $0 123*9880d681SAndroid Build Coastguard Worker .section push,"x" 124*9880d681SAndroid Build Coastguard Worker pushw $foo 125*9880d681SAndroid Build Coastguard Worker push $foo 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker// CHECK: Disassembly of section adc: 128*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: adc: 129*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 0: 66 81 d3 00 00 adcw $0, %bx 130*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 5: 66 81 14 25 00 00 00 00 00 00 adcw $0, 0 131*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: f: 81 d3 00 00 00 00 adcl $0, %ebx 132*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 15: 81 14 25 00 00 00 00 00 00 00 00 adcl $0, 0 133*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 20: 48 81 d3 00 00 00 00 adcq $0, %rbx 134*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 27: 48 81 14 25 00 00 00 00 00 00 00 00 adcq $0, 0 135*9880d681SAndroid Build Coastguard Worker .section adc,"x" 136*9880d681SAndroid Build Coastguard Worker adc $foo, %bx 137*9880d681SAndroid Build Coastguard Worker adcw $foo, bar 138*9880d681SAndroid Build Coastguard Worker adc $foo, %ebx 139*9880d681SAndroid Build Coastguard Worker adcl $foo, bar 140*9880d681SAndroid Build Coastguard Worker adc $foo, %rbx 141*9880d681SAndroid Build Coastguard Worker adcq $foo, bar 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Worker// CHECK: Disassembly of section sbb: 144*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: sbb: 145*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 0: 66 81 db 00 00 sbbw $0, %bx 146*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 5: 66 81 1c 25 00 00 00 00 00 00 sbbw $0, 0 147*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: f: 81 db 00 00 00 00 sbbl $0, %ebx 148*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 15: 81 1c 25 00 00 00 00 00 00 00 00 sbbl $0, 0 149*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 20: 48 81 db 00 00 00 00 sbbq $0, %rbx 150*9880d681SAndroid Build Coastguard Worker// CHECK-NEXT: 27: 48 81 1c 25 00 00 00 00 00 00 00 00 sbbq $0, 0 151*9880d681SAndroid Build Coastguard Worker .section sbb,"x" 152*9880d681SAndroid Build Coastguard Worker sbb $foo, %bx 153*9880d681SAndroid Build Coastguard Worker sbbw $foo, bar 154*9880d681SAndroid Build Coastguard Worker sbb $foo, %ebx 155*9880d681SAndroid Build Coastguard Worker sbbl $foo, bar 156*9880d681SAndroid Build Coastguard Worker sbb $foo, %rbx 157*9880d681SAndroid Build Coastguard Worker sbbq $foo, bar 158