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 6bar: 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 126 127// CHECK: Disassembly of section adc: 128// CHECK-NEXT: adc: 129// CHECK-NEXT: 0: 66 81 d3 00 00 adcw $0, %bx 130// CHECK-NEXT: 5: 66 81 14 25 00 00 00 00 00 00 adcw $0, 0 131// CHECK-NEXT: f: 81 d3 00 00 00 00 adcl $0, %ebx 132// CHECK-NEXT: 15: 81 14 25 00 00 00 00 00 00 00 00 adcl $0, 0 133// CHECK-NEXT: 20: 48 81 d3 00 00 00 00 adcq $0, %rbx 134// CHECK-NEXT: 27: 48 81 14 25 00 00 00 00 00 00 00 00 adcq $0, 0 135 .section adc,"x" 136 adc $foo, %bx 137 adcw $foo, bar 138 adc $foo, %ebx 139 adcl $foo, bar 140 adc $foo, %rbx 141 adcq $foo, bar 142 143// CHECK: Disassembly of section sbb: 144// CHECK-NEXT: sbb: 145// CHECK-NEXT: 0: 66 81 db 00 00 sbbw $0, %bx 146// CHECK-NEXT: 5: 66 81 1c 25 00 00 00 00 00 00 sbbw $0, 0 147// CHECK-NEXT: f: 81 db 00 00 00 00 sbbl $0, %ebx 148// CHECK-NEXT: 15: 81 1c 25 00 00 00 00 00 00 00 00 sbbl $0, 0 149// CHECK-NEXT: 20: 48 81 db 00 00 00 00 sbbq $0, %rbx 150// CHECK-NEXT: 27: 48 81 1c 25 00 00 00 00 00 00 00 00 sbbq $0, 0 151 .section sbb,"x" 152 sbb $foo, %bx 153 sbbw $foo, bar 154 sbb $foo, %ebx 155 sbbl $foo, bar 156 sbb $foo, %rbx 157 sbbq $foo, bar 158