From: Quentin Colombet Date: Tue, 15 Dec 2015 00:09:23 +0000 (+0000) Subject: [X86] Add relaxtion logic for SBB instructions. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=e66016e439947b71345842624a45c31b07f1f2d4 [X86] Add relaxtion logic for SBB instructions. Prior to this patch, we would wrongly stick to the variant with imm8 encoding even when the relocation could not fit that size. rdar://problem/23785506 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255583 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp b/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp index 4136943a117..133bd0e1772 100644 --- a/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp +++ b/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp @@ -220,6 +220,14 @@ static unsigned getRelaxedOpcodeArith(unsigned Op) { case X86::SUB64ri8: return X86::SUB64ri32; case X86::SUB64mi8: return X86::SUB64mi32; + // SBB + case X86::SBB16ri8: return X86::SBB16ri; + case X86::SBB16mi8: return X86::SBB16mi; + case X86::SBB32ri8: return X86::SBB32ri; + case X86::SBB32mi8: return X86::SBB32mi; + case X86::SBB64ri8: return X86::SBB64ri32; + case X86::SBB64mi8: return X86::SBB64mi32; + // CMP case X86::CMP16ri8: return X86::CMP16ri; case X86::CMP16mi8: return X86::CMP16mi; diff --git a/test/MC/ELF/relax-arith.s b/test/MC/ELF/relax-arith.s index 0e0d0a52d79..56b7c399c44 100644 --- a/test/MC/ELF/relax-arith.s +++ b/test/MC/ELF/relax-arith.s @@ -139,3 +139,19 @@ bar: adcl $foo, bar adc $foo, %rbx adcq $foo, bar + +// CHECK: Disassembly of section sbb: +// CHECK-NEXT: sbb: +// CHECK-NEXT: 0: 66 81 db 00 00 sbbw $0, %bx +// CHECK-NEXT: 5: 66 81 1c 25 00 00 00 00 00 00 sbbw $0, 0 +// CHECK-NEXT: f: 81 db 00 00 00 00 sbbl $0, %ebx +// CHECK-NEXT: 15: 81 1c 25 00 00 00 00 00 00 00 00 sbbl $0, 0 +// CHECK-NEXT: 20: 48 81 db 00 00 00 00 sbbq $0, %rbx +// CHECK-NEXT: 27: 48 81 1c 25 00 00 00 00 00 00 00 00 sbbq $0, 0 + .section sbb,"x" + sbb $foo, %bx + sbbw $foo, bar + sbb $foo, %ebx + sbbl $foo, bar + sbb $foo, %rbx + sbbq $foo, bar