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