Skip to content

Commit 2615ef9

Browse files
authored
Merge pull request #3702 from uweigand/isle-prep-s390x
s390x: Codegen fixes and preparation for ISLE migration
2 parents 0670d7b + c08a013 commit 2615ef9

8 files changed

Lines changed: 300 additions & 261 deletions

File tree

cranelift/codegen/src/isa/s390x/abi.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -501,8 +501,7 @@ impl ABIMachineSpec for S390xMachineDeps {
501501
insts.push(Inst::StoreMultiple64 {
502502
rt: gpr(first_clobbered_gpr as u8),
503503
rt2: gpr(15),
504-
addr_reg: stack_reg(),
505-
addr_off: SImm20::maybe_from_i64(offset).unwrap(),
504+
mem: MemArg::reg_plus_off(stack_reg(), offset, MemFlags::trusted()),
506505
});
507506
}
508507
if flags.unwind_info() {
@@ -606,8 +605,7 @@ impl ABIMachineSpec for S390xMachineDeps {
606605
insts.push(Inst::LoadMultiple64 {
607606
rt: writable_gpr(first_clobbered_gpr as u8),
608607
rt2: writable_gpr(15),
609-
addr_reg: stack_reg(),
610-
addr_off: SImm20::maybe_from_i64(offset).unwrap(),
608+
mem: MemArg::reg_plus_off(stack_reg(), offset, MemFlags::trusted()),
611609
});
612610
}
613611

cranelift/codegen/src/isa/s390x/inst/emit.rs

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1188,13 +1188,9 @@ impl MachInstEmit for Inst {
11881188
ShiftOp::AShR32 => 0xebdc, // SRAK (SRA ?)
11891189
ShiftOp::AShR64 => 0xeb0a, // SRAG
11901190
};
1191-
let shift_reg = match shift_reg {
1192-
Some(reg) => reg,
1193-
None => zero_reg(),
1194-
};
11951191
put(
11961192
sink,
1197-
&enc_rsy(opcode, rd.to_reg(), rn, shift_reg, shift_imm.bits()),
1193+
&enc_rsy(opcode, rd.to_reg(), rn, shift_reg, shift_imm.into()),
11981194
);
11991195
}
12001196

@@ -1574,25 +1570,35 @@ impl MachInstEmit for Inst {
15741570
}
15751571
}
15761572

1577-
&Inst::LoadMultiple64 {
1578-
rt,
1579-
rt2,
1580-
addr_reg,
1581-
addr_off,
1582-
} => {
1573+
&Inst::LoadMultiple64 { rt, rt2, ref mem } => {
15831574
let opcode = 0xeb04; // LMG
15841575
let rt = rt.to_reg();
15851576
let rt2 = rt2.to_reg();
1586-
put(sink, &enc_rsy(opcode, rt, rt2, addr_reg, addr_off.bits()));
1577+
mem_rs_emit(
1578+
rt,
1579+
rt2,
1580+
&mem,
1581+
None,
1582+
Some(opcode),
1583+
true,
1584+
sink,
1585+
emit_info,
1586+
state,
1587+
);
15871588
}
1588-
&Inst::StoreMultiple64 {
1589-
rt,
1590-
rt2,
1591-
addr_reg,
1592-
addr_off,
1593-
} => {
1589+
&Inst::StoreMultiple64 { rt, rt2, ref mem } => {
15941590
let opcode = 0xeb24; // STMG
1595-
put(sink, &enc_rsy(opcode, rt, rt2, addr_reg, addr_off.bits()));
1591+
mem_rs_emit(
1592+
rt,
1593+
rt2,
1594+
&mem,
1595+
None,
1596+
Some(opcode),
1597+
true,
1598+
sink,
1599+
emit_info,
1600+
state,
1601+
);
15961602
}
15971603

15981604
&Inst::LoadAddr { rd, ref mem } => {
@@ -1741,7 +1747,7 @@ impl MachInstEmit for Inst {
17411747
let opcode = 0xa75; // BRAS
17421748
let reg = writable_spilltmp_reg().to_reg();
17431749
put(sink, &enc_ri_b(opcode, reg, 8));
1744-
sink.put4(const_data.to_bits().swap_bytes());
1750+
sink.put4(const_data.swap_bytes());
17451751
let inst = Inst::FpuLoad32 {
17461752
rd,
17471753
mem: MemArg::reg(reg, MemFlags::trusted()),
@@ -1752,7 +1758,7 @@ impl MachInstEmit for Inst {
17521758
let opcode = 0xa75; // BRAS
17531759
let reg = writable_spilltmp_reg().to_reg();
17541760
put(sink, &enc_ri_b(opcode, reg, 12));
1755-
sink.put8(const_data.to_bits().swap_bytes());
1761+
sink.put8(const_data.swap_bytes());
17561762
let inst = Inst::FpuLoad64 {
17571763
rd,
17581764
mem: MemArg::reg(reg, MemFlags::trusted()),
@@ -2009,8 +2015,8 @@ impl MachInstEmit for Inst {
20092015
shift_op: ShiftOp::LShL64,
20102016
rd: rtmp2,
20112017
rn: ridx,
2012-
shift_imm: SImm20::maybe_from_i64(2).unwrap(),
2013-
shift_reg: None,
2018+
shift_imm: 2,
2019+
shift_reg: zero_reg(),
20142020
};
20152021
inst.emit(sink, emit_info, state);
20162022

0 commit comments

Comments
 (0)