summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp8
-rw-r--r--llvm/test/MC/ELF/relax-arith.s16
2 files changed, 24 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
index 4136943a117..133bd0e1772 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp
+++ b/llvm/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/llvm/test/MC/ELF/relax-arith.s b/llvm/test/MC/ELF/relax-arith.s
index 0e0d0a52d79..56b7c399c44 100644
--- a/llvm/test/MC/ELF/relax-arith.s
+++ b/llvm/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
OpenPOWER on IntegriCloud