Skip to content

Commit 2794c2d

Browse files
committed
[cc] aarch64: SP fixes
1 parent 662da12 commit 2794c2d

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

cc/arch/aarch64/codegen.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1175,7 +1175,7 @@ impl Aarch64CodeGen {
11751175
src1: fp,
11761176
src2: lr,
11771177
addr: MemAddr::PreIndex {
1178-
base: Reg::X29, // sp
1178+
base: Reg::SP,
11791179
offset: -total_frame,
11801180
},
11811181
});
@@ -1198,7 +1198,7 @@ impl Aarch64CodeGen {
11981198
// Set up frame pointer: mov x29, sp
11991199
self.push_lir(Aarch64Inst::Mov {
12001200
size: OperandSize::B64,
1201-
src: GpOperand::Reg(Reg::X29), // sp
1201+
src: GpOperand::Reg(Reg::SP),
12021202
dst: fp,
12031203
});
12041204
if self.emit_debug {
@@ -1218,7 +1218,7 @@ impl Aarch64CodeGen {
12181218
src1: callee_saved[i],
12191219
src2: callee_saved[i + 1],
12201220
addr: MemAddr::BaseOffset {
1221-
base: Reg::X29, // sp
1221+
base: Reg::X29, // fp
12221222
offset,
12231223
},
12241224
});
@@ -1240,7 +1240,7 @@ impl Aarch64CodeGen {
12401240
size: OperandSize::B64,
12411241
src: callee_saved[i],
12421242
addr: MemAddr::BaseOffset {
1243-
base: Reg::X29, // sp
1243+
base: Reg::X29, // fp
12441244
offset,
12451245
},
12461246
});
@@ -1262,7 +1262,7 @@ impl Aarch64CodeGen {
12621262
src1: fp,
12631263
src2: lr,
12641264
addr: MemAddr::PreIndex {
1265-
base: Reg::X29, // sp
1265+
base: Reg::SP,
12661266
offset: -16,
12671267
},
12681268
});
@@ -1274,7 +1274,7 @@ impl Aarch64CodeGen {
12741274
// mov x29, sp
12751275
self.push_lir(Aarch64Inst::Mov {
12761276
size: OperandSize::B64,
1277-
src: GpOperand::Reg(Reg::X29), // sp
1277+
src: GpOperand::Reg(Reg::SP),
12781278
dst: fp,
12791279
});
12801280
if self.emit_debug {
@@ -1306,7 +1306,7 @@ impl Aarch64CodeGen {
13061306
size: OperandSize::B64,
13071307
src: Reg::X8,
13081308
addr: MemAddr::BaseOffset {
1309-
base: Reg::X29, // sp
1309+
base: Reg::X29, // fp
13101310
offset: total_frame + offset,
13111311
},
13121312
});
@@ -1332,7 +1332,7 @@ impl Aarch64CodeGen {
13321332
size: OperandSize::B64,
13331333
src: arg_regs[i],
13341334
addr: MemAddr::BaseOffset {
1335-
base: Reg::X29, // sp
1335+
base: Reg::X29, // fp
13361336
offset: total_frame + offset,
13371337
},
13381338
});

cc/arch/aarch64/lir.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1601,18 +1601,19 @@ mod tests {
16011601
fn test_stp_ldp() {
16021602
let target = linux_target();
16031603

1604+
// Test stp with SP as base (valid prologue pattern)
16041605
let mut out = String::new();
16051606
let inst = Aarch64Inst::Stp {
16061607
size: OperandSize::B64,
16071608
src1: Reg::X29,
16081609
src2: Reg::X30,
16091610
addr: MemAddr::PreIndex {
1610-
base: Reg::X29,
1611+
base: Reg::SP,
16111612
offset: -16,
16121613
},
16131614
};
16141615
inst.emit(&target, &mut out);
1615-
assert!(out.contains("stp x29, x30, [x29, #-16]!"));
1616+
assert!(out.contains("stp x29, x30, [sp, #-16]!"));
16161617
}
16171618

16181619
#[test]

0 commit comments

Comments
 (0)