131 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 avoid relaxing these instructions and instead generate versions4// that use 8-bit immediate values.5 6bar:7// CHECK: Disassembly of section imul:8// CHECK-EMPTY:9// CHECK-NEXT: <imul>:10// CHECK-NEXT: 0: 66 6b db 80 imulw $-128, %bx, %bx11// CHECK-NEXT: 4: 66 6b 1c 25 00 00 00 00 7f imulw $127, 0, %bx12// CHECK-NEXT: d: 6b db 00 imull $0, %ebx, %ebx13// CHECK-NEXT: 10: 6b 1c 25 00 00 00 00 01 imull $1, 0, %ebx14// CHECK-NEXT: 18: 48 6b db ff imulq $-1, %rbx, %rbx15// CHECK-NEXT: 1c: 48 6b 1c 25 00 00 00 00 2a imulq $42, 0, %rbx16 .section imul,"x"17 imul $-128, %bx, %bx18 imul $127, bar, %bx19 imul $0, %ebx, %ebx20 imul $1, bar, %ebx21 imul $-1, %rbx, %rbx22 imul $42, bar, %rbx23 24 25// CHECK: <and>:26// CHECK-NEXT: 0: 66 83 e3 7f andw $127, %bx27// CHECK-NEXT: 4: 66 83 24 25 00 00 00 00 00 andw $0, 028// CHECK-NEXT: d: 83 e3 01 andl $1, %ebx29// CHECK-NEXT: 10: 83 24 25 00 00 00 00 ff andl $-1, 030// CHECK-NEXT: 18: 48 83 e3 2a andq $42, %rbx31// CHECK-NEXT: 1c: 48 83 24 25 00 00 00 00 80 andq $-128, 032 .section and,"x"33 and $127, %bx34 andw $0, bar35 and $1, %ebx36 andl $-1, bar37 and $42, %rbx38 andq $-128, bar39 40// CHECK: <or>:41// CHECK-NEXT: 0: 66 83 cb 00 orw $0, %bx42// CHECK-NEXT: 4: 66 83 0c 25 00 00 00 00 01 orw $1, 043// CHECK-NEXT: d: 83 cb ff orl $-1, %ebx44// CHECK-NEXT: 10: 83 0c 25 00 00 00 00 2a orl $42, 045// CHECK-NEXT: 18: 48 83 cb 80 orq $-128, %rbx46// CHECK-NEXT: 1c: 48 83 0c 25 00 00 00 00 7f orq $127, 047 .section or,"x"48 or $0, %bx49 orw $1, bar50 or $-1, %ebx51 orl $42, bar52 or $-128, %rbx53 orq $127, bar54 55// CHECK: <xor>:56// CHECK-NEXT: 0: 66 83 f3 01 xorw $1, %bx57// CHECK-NEXT: 4: 66 83 34 25 00 00 00 00 ff xorw $-1, 058// CHECK-NEXT: d: 83 f3 2a xorl $42, %ebx59// CHECK-NEXT: 10: 83 34 25 00 00 00 00 80 xorl $-128, 060// CHECK-NEXT: 18: 48 83 f3 7f xorq $127, %rbx61// CHECK-NEXT: 1c: 48 83 34 25 00 00 00 00 00 xorq $0, 062 .section xor,"x"63 xor $1, %bx64 xorw $-1, bar65 xor $42, %ebx66 xorl $-128, bar67 xor $127, %rbx68 xorq $0, bar69 70// CHECK: <add>:71// CHECK-NEXT: 0: 66 83 c3 ff addw $-1, %bx72// CHECK-NEXT: 4: 66 83 04 25 00 00 00 00 2a addw $42, 073// CHECK-NEXT: d: 83 c3 80 addl $-128, %ebx74// CHECK-NEXT: 10: 83 04 25 00 00 00 00 7f addl $127, 075// CHECK-NEXT: 18: 48 83 c3 00 addq $0, %rbx76// CHECK-NEXT: 1c: 48 83 04 25 00 00 00 00 01 addq $1, 077 .section add,"x"78 add $-1, %bx79 addw $42, bar80 add $-128, %ebx81 addl $127, bar82 add $0, %rbx83 addq $1, bar84 85// CHECK: Disassembly of section sub:86// CHECK-EMPTY:87// CHECK-NEXT: <sub>:88// CHECK-NEXT: 0: 66 83 eb 2a subw $42, %bx89// CHECK-NEXT: 4: 66 83 2c 25 00 00 00 00 80 subw $-128, 090// CHECK-NEXT: d: 83 eb 7f subl $127, %ebx91// CHECK-NEXT: 10: 83 2c 25 00 00 00 00 00 subl $0, 092// CHECK-NEXT: 18: 48 83 eb 01 subq $1, %rbx93// CHECK-NEXT: 1c: 48 83 2c 25 00 00 00 00 ff subq $-1, 094 .section sub,"x"95 sub $42, %bx96 subw $-128, bar97 sub $127, %ebx98 subl $0, bar99 sub $1, %rbx100 subq $-1, bar101 102// CHECK: Disassembly of section cmp:103// CHECK-EMPTY:104// CHECK-NEXT: <cmp>:105// CHECK-NEXT: 0: 66 83 fb 80 cmpw $-128, %bx106// CHECK-NEXT: 4: 66 83 3c 25 00 00 00 00 7f cmpw $127, 0107// CHECK-NEXT: d: 83 fb 00 cmpl $0, %ebx108// CHECK-NEXT: 10: 83 3c 25 00 00 00 00 01 cmpl $1, 0109// CHECK-NEXT: 18: 48 83 fb ff cmpq $-1, %rbx110// CHECK-NEXT: 1c: 48 83 3c 25 00 00 00 00 2a cmpq $42, 0111 .section cmp,"x"112 cmp $-128, %bx113 cmpw $127, bar114 cmp $0, %ebx115 cmpl $1, bar116 cmp $-1, %rbx117 cmpq $42, bar118 119// CHECK: Disassembly of section push:120// CHECK-EMPTY:121// CHECK-NEXT: <push>:122// CHECK-NEXT: 0: 66 6a 80 pushw $-128123// CHECK-NEXT: 3: 66 6a 7f pushw $127124// CHECK-NEXT: 6: 6a 80 pushq $-128125// CHECK-NEXT: 8: 6a 7f pushq $127126 .section push,"x"127 pushw $-128128 pushw $127129 push $-128130 push $127131