166 lines · plain
1// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-objdump --no-print-imm-hex -d - | FileCheck %s2 3// Test that we correctly relax these instructions into versions that use4// 16 or 32 bit immediate values.5 6bar:7// CHECK: Disassembly of section imul:8// CHECK-EMPTY:9// CHECK-NEXT: <imul>:10// CHECK-NEXT: 0: 66 69 db 00 00 imulw $0, %bx, %bx11// CHECK-NEXT: 5: 66 69 1c 25 00 00 00 00 00 00 imulw $0, 0, %bx12// CHECK-NEXT: f: 69 db 00 00 00 00 imull $0, %ebx, %ebx13// CHECK-NEXT: 15: 69 1c 25 00 00 00 00 00 00 00 00 imull $0, 0, %ebx14// CHECK-NEXT: 20: 48 69 db 00 00 00 00 imulq $0, %rbx, %rbx15// CHECK-NEXT: 27: 48 69 1c 25 00 00 00 00 00 00 00 00 imulq $0, 0, %rbx16 .section imul,"x"17 imul $foo, %bx, %bx18 imul $foo, bar, %bx19 imul $foo, %ebx, %ebx20 imul $foo, bar, %ebx21 imul $foo, %rbx, %rbx22 imul $foo, bar, %rbx23 24// CHECK: Disassembly of section and:25// CHECK-EMPTY:26// CHECK-NEXT: <and>:27// CHECK-NEXT: 0: 66 81 e3 00 00 andw $0, %bx28// CHECK-NEXT: 5: 66 81 24 25 00 00 00 00 00 00 andw $0, 029// CHECK-NEXT: f: 81 e3 00 00 00 00 andl $0, %ebx30// CHECK-NEXT: 15: 81 24 25 00 00 00 00 00 00 00 00 andl $0, 031// CHECK-NEXT: 20: 48 81 e3 00 00 00 00 andq $0, %rbx32// CHECK-NEXT: 27: 48 81 24 25 00 00 00 00 00 00 00 00 andq $0, 033 .section and,"x"34 and $foo, %bx35 andw $foo, bar36 and $foo, %ebx37 andl $foo, bar38 and $foo, %rbx39 andq $foo, bar40 41// CHECK: <or>:42// CHECK-NEXT: 0: 66 81 cb 00 00 orw $0, %bx43// CHECK-NEXT: 5: 66 81 0c 25 00 00 00 00 00 00 orw $0, 044// CHECK-NEXT: f: 81 cb 00 00 00 00 orl $0, %ebx45// CHECK-NEXT: 15: 81 0c 25 00 00 00 00 00 00 00 00 orl $0, 046// CHECK-NEXT: 20: 48 81 cb 00 00 00 00 orq $0, %rbx47// CHECK-NEXT: 27: 48 81 0c 25 00 00 00 00 00 00 00 00 orq $0, 048 .section or,"x"49 or $foo, %bx50 orw $foo, bar51 or $foo, %ebx52 orl $foo, bar53 or $foo, %rbx54 orq $foo, bar55 56// CHECK: Disassembly of section xor:57// CHECK-EMPTY:58// CHECK-NEXT: <xor>:59// CHECK-NEXT: 0: 66 81 f3 00 00 xorw $0, %bx60// CHECK-NEXT: 5: 66 81 34 25 00 00 00 00 00 00 xorw $0, 061// CHECK-NEXT: f: 81 f3 00 00 00 00 xorl $0, %ebx62// CHECK-NEXT: 15: 81 34 25 00 00 00 00 00 00 00 00 xorl $0, 063// CHECK-NEXT: 20: 48 81 f3 00 00 00 00 xorq $0, %rbx64// CHECK-NEXT: 27: 48 81 34 25 00 00 00 00 00 00 00 00 xorq $0, 065 .section xor,"x"66 xor $foo, %bx67 xorw $foo, bar68 xor $foo, %ebx69 xorl $foo, bar70 xor $foo, %rbx71 xorq $foo, bar72 73// CHECK: Disassembly of section add:74// CHECK-EMPTY:75// CHECK-NEXT: <add>:76// CHECK-NEXT: 0: 66 81 c3 00 00 addw $0, %bx77// CHECK-NEXT: 5: 66 81 04 25 00 00 00 00 00 00 addw $0, 078// CHECK-NEXT: f: 81 c3 00 00 00 00 addl $0, %ebx79// CHECK-NEXT: 15: 81 04 25 00 00 00 00 00 00 00 00 addl $0, 080// CHECK-NEXT: 20: 48 81 c3 00 00 00 00 addq $0, %rbx81// CHECK-NEXT: 27: 48 81 04 25 00 00 00 00 00 00 00 00 addq $0, 082 .section add,"x"83 add $foo, %bx84 addw $foo, bar85 add $foo, %ebx86 addl $foo, bar87 add $foo, %rbx88 addq $foo, bar89 90// CHECK: Disassembly of section sub:91// CHECK-EMPTY:92// CHECK-NEXT: <sub>:93// CHECK-NEXT: 0: 66 81 eb 00 00 subw $0, %bx94// CHECK-NEXT: 5: 66 81 2c 25 00 00 00 00 00 00 subw $0, 095// CHECK-NEXT: f: 81 eb 00 00 00 00 subl $0, %ebx96// CHECK-NEXT: 15: 81 2c 25 00 00 00 00 00 00 00 00 subl $0, 097// CHECK-NEXT: 20: 48 81 eb 00 00 00 00 subq $0, %rbx98// CHECK-NEXT: 27: 48 81 2c 25 00 00 00 00 00 00 00 00 subq $0, 099 .section sub,"x"100 sub $foo, %bx101 subw $foo, bar102 sub $foo, %ebx103 subl $foo, bar104 sub $foo, %rbx105 subq $foo, bar106 107// CHECK: Disassembly of section cmp:108// CHECK-EMPTY:109// CHECK-NEXT: <cmp>:110// CHECK-NEXT: 0: 66 81 fb 00 00 cmpw $0, %bx111// CHECK-NEXT: 5: 66 81 3c 25 00 00 00 00 00 00 cmpw $0, 0112// CHECK-NEXT: f: 81 fb 00 00 00 00 cmpl $0, %ebx113// CHECK-NEXT: 15: 81 3c 25 00 00 00 00 00 00 00 00 cmpl $0, 0114// CHECK-NEXT: 20: 48 81 fb 00 00 00 00 cmpq $0, %rbx115// CHECK-NEXT: 27: 48 81 3c 25 00 00 00 00 00 00 00 00 cmpq $0, 0116 .section cmp,"x"117 cmp $foo, %bx118 cmpw $foo, bar119 cmp $foo, %ebx120 cmpl $foo, bar121 cmp $foo, %rbx122 cmpq $foo, bar123 124// CHECK: Disassembly of section push:125// CHECK-EMPTY:126// CHECK-NEXT: <push>:127// CHECK-NEXT: 0: 66 68 00 00 pushw $0128// CHECK-NEXT: 4: 68 00 00 00 00 pushq $0129 .section push,"x"130 pushw $foo131 push $foo132 133// CHECK: Disassembly of section adc:134// CHECK-EMPTY:135// CHECK-NEXT: <adc>:136// CHECK-NEXT: 0: 66 81 d3 00 00 adcw $0, %bx137// CHECK-NEXT: 5: 66 81 14 25 00 00 00 00 00 00 adcw $0, 0138// CHECK-NEXT: f: 81 d3 00 00 00 00 adcl $0, %ebx139// CHECK-NEXT: 15: 81 14 25 00 00 00 00 00 00 00 00 adcl $0, 0140// CHECK-NEXT: 20: 48 81 d3 00 00 00 00 adcq $0, %rbx141// CHECK-NEXT: 27: 48 81 14 25 00 00 00 00 00 00 00 00 adcq $0, 0142 .section adc,"x"143 adc $foo, %bx144 adcw $foo, bar145 adc $foo, %ebx146 adcl $foo, bar147 adc $foo, %rbx148 adcq $foo, bar149 150// CHECK: Disassembly of section sbb:151// CHECK-EMPTY:152// CHECK-NEXT: <sbb>:153// CHECK-NEXT: 0: 66 81 db 00 00 sbbw $0, %bx154// CHECK-NEXT: 5: 66 81 1c 25 00 00 00 00 00 00 sbbw $0, 0155// CHECK-NEXT: f: 81 db 00 00 00 00 sbbl $0, %ebx156// CHECK-NEXT: 15: 81 1c 25 00 00 00 00 00 00 00 00 sbbl $0, 0157// CHECK-NEXT: 20: 48 81 db 00 00 00 00 sbbq $0, %rbx158// CHECK-NEXT: 27: 48 81 1c 25 00 00 00 00 00 00 00 00 sbbq $0, 0159 .section sbb,"x"160 sbb $foo, %bx161 sbbw $foo, bar162 sbb $foo, %ebx163 sbbl $foo, bar164 sbb $foo, %rbx165 sbbq $foo, bar166