Skip to content

Commit f20d8b9

Browse files
authored
[SPARC][IAS] Add GNU extension for addc
Transform `addc imm, %rs, %rd` into `addc %rs, imm, %rd`. This is used in some GNU and Linux code. Reviewers: s-barannikov, rorth, jrtc27, brad0 Reviewed By: s-barannikov Pull Request: #94245
1 parent dcb71c0 commit f20d8b9

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

llvm/lib/Target/Sparc/SparcInstrAliases.td

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -560,11 +560,16 @@ def : InstAlias<"mov $simm13, %tbr", (WRTBRri G0, simm13Op:$simm13), 0>;
560560

561561
// End of Section A.3
562562

563-
// or imm, reg, rd -> or reg, imm, rd
564-
// Nonstandard GNU extension.
565-
let EmitPriority = 0 in
563+
564+
// Nonstandard GNU extensions.
565+
let EmitPriority = 0 in {
566+
// or imm, reg, rd -> or reg, imm, rd
566567
def : InstAlias<"or $simm13, $rs1, $rd", (ORri IntRegs:$rd, IntRegs:$rs1, simm13Op:$simm13)>;
567568

569+
// addc/addx imm, reg, rd -> or reg, imm, rd
570+
def : InstAlias<"addx $simm13, $rs1, $rd", (ADDCri IntRegs:$rd, IntRegs:$rs1, simm13Op:$simm13)>;
571+
}
572+
568573
// wr reg_or_imm, specialreg -> wr %g0, reg_or_imm, specialreg
569574
// (aka: omit the first arg when it's g0. This is not in the manual, but is
570575
// supported by gnu and solaris as)

llvm/test/MC/Sparc/sparcv9-instructions.s

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@
66
! V9: addx %g2, %g1, %g3 ! encoding: [0x86,0x40,0x80,0x01]
77
addc %g2, %g1, %g3
88

9+
! V8: error: invalid instruction mnemonic
10+
! V8-NEXT: addc %g2, 1, %g3
11+
! V9: addx %g2, 1, %g3 ! encoding: [0x86,0x40,0xa0,0x01]
12+
addc %g2, 1, %g3
13+
14+
! V8: error: invalid instruction mnemonic
15+
! V8-NEXT: addc 1, %g2, %g3
16+
! V9: addx %g2, 1, %g3 ! encoding: [0x86,0x40,0xa0,0x01]
17+
addc 1, %g2, %g3
18+
919
! V8: error: invalid instruction mnemonic
1020
! V8-NEXT: addccc %g1, %g2, %g3
1121
! V9: addxcc %g1, %g2, %g3 ! encoding: [0x86,0xc0,0x40,0x02]

0 commit comments

Comments
 (0)