Cranelift: use regalloc2 constraints on caller side of ABI code. (#4892)

* Cranelift: use regalloc2 constraints on caller side of ABI code.

This PR updates the shared ABI code and backends to use register-operand
constraints rather than explicit pinned-vreg moves for register
arguments and return values.

The s390x backend was not updated, because it has its own implementation
of ABI code. Ideally we could converge back to the code shared by x64
and aarch64 (which didn't exist when s390x ported calls to ISLE, so the
current situation is underestandable, to be clear!). I'll leave this for
future work.

This PR exposed several places where regalloc2 needed to be a bit more
flexible with constraints; it requires regalloc2#74 to be merged and
pulled in.

* Update to regalloc2 0.3.3.

In addition to version bump, this required removing two asserts as
`SpillSlot`s no longer carry their class (so we can't assert that they
have the correct class).

* Review comments.

* Filetest updates.

* Add cargo-vet audit for regalloc2 0.3.2 -> 0.3.3 upgrade.

* Update to regalloc2 0.4.0.
This commit is contained in:
Chris Fallin
2022-09-20 18:17:04 -07:00
committed by GitHub
parent 8b245178a5
commit 05cbd667c7
63 changed files with 1476 additions and 1177 deletions

4
Cargo.lock generated
View File

@@ -2388,9 +2388,9 @@ dependencies = [
[[package]] [[package]]
name = "regalloc2" name = "regalloc2"
version = "0.3.2" version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d43a209257d978ef079f3d446331d0f1794f5e0fc19b306a199983857833a779" checksum = "91ffba626f895ce5b8b97614bafa3fd59623490fe82f0fa8046dba6664a37b51"
dependencies = [ dependencies = [
"fxhash", "fxhash",
"log", "log",

View File

@@ -25,7 +25,7 @@ serde = { version = "1.0.94", features = ["derive"], optional = true }
bincode = { version = "1.2.1", optional = true } bincode = { version = "1.2.1", optional = true }
gimli = { version = "0.26.0", default-features = false, features = ["write"], optional = true } gimli = { version = "0.26.0", default-features = false, features = ["write"], optional = true }
smallvec = { version = "1.6.1" } smallvec = { version = "1.6.1" }
regalloc2 = { version = "0.3.2", features = ["checker"] } regalloc2 = { version = "0.4.0", features = ["checker"] }
souper-ir = { version = "2.1.0", optional = true } souper-ir = { version = "2.1.0", optional = true }
sha2 = { version = "0.9.0", optional = true } sha2 = { version = "0.9.0", optional = true }
# It is a goal of the cranelift-codegen crate to have minimal external dependencies. # It is a goal of the cranelift-codegen crate to have minimal external dependencies.

View File

@@ -919,8 +919,8 @@ impl ABIMachineSpec for AArch64MachineDeps {
fn gen_call( fn gen_call(
dest: &CallDest, dest: &CallDest,
uses: SmallVec<[Reg; 8]>, uses: CallArgList,
defs: SmallVec<[Writable<Reg>; 8]>, defs: CallRetList,
clobbers: PRegSet, clobbers: PRegSet,
opcode: ir::Opcode, opcode: ir::Opcode,
tmp: Writable<Reg>, tmp: Writable<Reg>,
@@ -978,19 +978,32 @@ impl ABIMachineSpec for AArch64MachineDeps {
call_conv: isa::CallConv, call_conv: isa::CallConv,
dst: Reg, dst: Reg,
src: Reg, src: Reg,
tmp: Writable<Reg>,
_tmp2: Writable<Reg>,
size: usize, size: usize,
) -> SmallVec<[Self::I; 8]> { ) -> SmallVec<[Self::I; 8]> {
let mut insts = SmallVec::new(); let mut insts = SmallVec::new();
let arg0 = writable_xreg(0); let arg0 = writable_xreg(0);
let arg1 = writable_xreg(1); let arg1 = writable_xreg(1);
let arg2 = writable_xreg(2); let arg2 = writable_xreg(2);
insts.push(Inst::gen_move(arg0, dst, I64)); insts.extend(Inst::load_constant(tmp, size as u64).into_iter());
insts.push(Inst::gen_move(arg1, src, I64));
insts.extend(Inst::load_constant(arg2, size as u64).into_iter());
insts.push(Inst::Call { insts.push(Inst::Call {
info: Box::new(CallInfo { info: Box::new(CallInfo {
dest: ExternalName::LibCall(LibCall::Memcpy), dest: ExternalName::LibCall(LibCall::Memcpy),
uses: smallvec![arg0.to_reg(), arg1.to_reg(), arg2.to_reg()], uses: smallvec![
CallArgPair {
vreg: dst,
preg: arg0.to_reg()
},
CallArgPair {
vreg: src,
preg: arg1.to_reg()
},
CallArgPair {
vreg: tmp.to_reg(),
preg: arg2.to_reg()
}
],
defs: smallvec![], defs: smallvec![],
clobbers: Self::get_regs_clobbered_by_call(call_conv), clobbers: Self::get_regs_clobbered_by_call(call_conv),
opcode: Opcode::Call, opcode: Opcode::Call,

View File

@@ -78,8 +78,8 @@ impl BitOp {
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct CallInfo { pub struct CallInfo {
pub dest: ExternalName, pub dest: ExternalName,
pub uses: SmallVec<[Reg; 8]>, pub uses: CallArgList,
pub defs: SmallVec<[Writable<Reg>; 8]>, pub defs: CallRetList,
pub clobbers: PRegSet, pub clobbers: PRegSet,
pub opcode: Opcode, pub opcode: Opcode,
pub caller_callconv: CallConv, pub caller_callconv: CallConv,
@@ -91,8 +91,8 @@ pub struct CallInfo {
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct CallIndInfo { pub struct CallIndInfo {
pub rn: Reg, pub rn: Reg,
pub uses: SmallVec<[Reg; 8]>, pub uses: SmallVec<[CallArgPair; 8]>,
pub defs: SmallVec<[Writable<Reg>; 8]>, pub defs: SmallVec<[CallRetPair; 8]>,
pub clobbers: PRegSet, pub clobbers: PRegSet,
pub opcode: Opcode, pub opcode: Opcode,
pub caller_callconv: CallConv, pub caller_callconv: CallConv,
@@ -1027,14 +1027,22 @@ fn aarch64_get_operands<F: Fn(VReg) -> VReg>(inst: &Inst, collector: &mut Operan
} }
&Inst::Jump { .. } => {} &Inst::Jump { .. } => {}
&Inst::Call { ref info, .. } => { &Inst::Call { ref info, .. } => {
collector.reg_uses(&info.uses[..]); for u in &info.uses {
collector.reg_defs(&info.defs[..]); collector.reg_fixed_use(u.vreg, u.preg);
}
for d in &info.defs {
collector.reg_fixed_def(d.vreg, d.preg);
}
collector.reg_clobbers(info.clobbers); collector.reg_clobbers(info.clobbers);
} }
&Inst::CallInd { ref info, .. } => { &Inst::CallInd { ref info, .. } => {
collector.reg_use(info.rn); collector.reg_use(info.rn);
collector.reg_uses(&info.uses[..]); for u in &info.uses {
collector.reg_defs(&info.defs[..]); collector.reg_fixed_use(u.vreg, u.preg);
}
for d in &info.defs {
collector.reg_fixed_def(d.vreg, d.preg);
}
collector.reg_clobbers(info.clobbers); collector.reg_clobbers(info.clobbers);
} }
&Inst::CondBr { ref kind, .. } => match kind { &Inst::CondBr { ref kind, .. } => match kind {

View File

@@ -743,8 +743,8 @@ impl ABIMachineSpec for S390xMachineDeps {
fn gen_call( fn gen_call(
_dest: &CallDest, _dest: &CallDest,
_uses: SmallVec<[Reg; 8]>, _uses: CallArgList,
_defs: SmallVec<[Writable<Reg>; 8]>, _defs: CallRetList,
_clobbers: PRegSet, _clobbers: PRegSet,
_opcode: ir::Opcode, _opcode: ir::Opcode,
_tmp: Writable<Reg>, _tmp: Writable<Reg>,
@@ -758,6 +758,8 @@ impl ABIMachineSpec for S390xMachineDeps {
_call_conv: isa::CallConv, _call_conv: isa::CallConv,
_dst: Reg, _dst: Reg,
_src: Reg, _src: Reg,
_tmp1: Writable<Reg>,
_tmp2: Writable<Reg>,
_size: usize, _size: usize,
) -> SmallVec<[Self::I; 8]> { ) -> SmallVec<[Self::I; 8]> {
unimplemented!("StructArgs not implemented for S390X yet"); unimplemented!("StructArgs not implemented for S390X yet");

View File

@@ -429,7 +429,9 @@ impl ABIMachineSpec for X64ABIMachineSpec {
insts.push(Inst::CallKnown { insts.push(Inst::CallKnown {
dest: ExternalName::LibCall(LibCall::Probestack), dest: ExternalName::LibCall(LibCall::Probestack),
info: Box::new(CallInfo { info: Box::new(CallInfo {
uses: smallvec![regs::rax()], // No need to include arg here: we are post-regalloc
// so no constraints will be seen anyway.
uses: smallvec![],
defs: smallvec![], defs: smallvec![],
clobbers: PRegSet::empty(), clobbers: PRegSet::empty(),
opcode: Opcode::Call, opcode: Opcode::Call,
@@ -584,8 +586,8 @@ impl ABIMachineSpec for X64ABIMachineSpec {
/// Generate a call instruction/sequence. /// Generate a call instruction/sequence.
fn gen_call( fn gen_call(
dest: &CallDest, dest: &CallDest,
uses: SmallVec<[Reg; 8]>, uses: CallArgList,
defs: SmallVec<[Writable<Reg>; 8]>, defs: CallRetList,
clobbers: PRegSet, clobbers: PRegSet,
opcode: ir::Opcode, opcode: ir::Opcode,
tmp: Writable<Reg>, tmp: Writable<Reg>,
@@ -628,39 +630,47 @@ impl ABIMachineSpec for X64ABIMachineSpec {
call_conv: isa::CallConv, call_conv: isa::CallConv,
dst: Reg, dst: Reg,
src: Reg, src: Reg,
temp: Writable<Reg>,
temp2: Writable<Reg>,
size: usize, size: usize,
) -> SmallVec<[Self::I; 8]> { ) -> SmallVec<[Self::I; 8]> {
let mut insts = SmallVec::new(); let mut insts = SmallVec::new();
let arg0 = get_intreg_for_arg(&call_conv, 0, 0).unwrap(); let arg0 = get_intreg_for_arg(&call_conv, 0, 0).unwrap();
let arg1 = get_intreg_for_arg(&call_conv, 1, 1).unwrap(); let arg1 = get_intreg_for_arg(&call_conv, 1, 1).unwrap();
let arg2 = get_intreg_for_arg(&call_conv, 2, 2).unwrap(); let arg2 = get_intreg_for_arg(&call_conv, 2, 2).unwrap();
// We need a register to load the address of `memcpy()` below and we
// don't have a lowering context to allocate a temp here; so just use a
// register we know we are free to mutate as part of this sequence
// (because it is clobbered by the call as per the ABI anyway).
let memcpy_addr = get_intreg_for_arg(&call_conv, 3, 3).unwrap();
insts.push(Inst::gen_move(Writable::from_reg(arg0), dst, I64)); insts.push(Inst::gen_move(Writable::from_reg(arg0), dst, I64));
insts.push(Inst::gen_move(Writable::from_reg(arg1), src, I64)); insts.push(Inst::gen_move(Writable::from_reg(arg1), src, I64));
insts.extend( insts.extend(
Inst::gen_constant( Inst::gen_constant(ValueRegs::one(temp), size as u128, I64, |_| {
ValueRegs::one(Writable::from_reg(arg2)), panic!("tmp should not be needed")
size as u128, })
I64,
|_| panic!("tmp should not be needed"),
)
.into_iter(), .into_iter(),
); );
// We use an indirect call and a full LoadExtName because we do not have // We use an indirect call and a full LoadExtName because we do not have
// information about the libcall `RelocDistance` here, so we // information about the libcall `RelocDistance` here, so we
// conservatively use the more flexible calling sequence. // conservatively use the more flexible calling sequence.
insts.push(Inst::LoadExtName { insts.push(Inst::LoadExtName {
dst: Writable::from_reg(memcpy_addr), dst: temp2,
name: Box::new(ExternalName::LibCall(LibCall::Memcpy)), name: Box::new(ExternalName::LibCall(LibCall::Memcpy)),
offset: 0, offset: 0,
}); });
insts.push(Inst::call_unknown( insts.push(Inst::call_unknown(
RegMem::reg(memcpy_addr), RegMem::reg(temp2.to_reg()),
/* uses = */ smallvec![arg0, arg1, arg2], /* uses = */
smallvec![
CallArgPair {
vreg: dst,
preg: arg0
},
CallArgPair {
vreg: src,
preg: arg1
},
CallArgPair {
vreg: temp.to_reg(),
preg: arg2
},
],
/* defs = */ smallvec![], /* defs = */ smallvec![],
/* clobbers = */ Self::get_regs_clobbered_by_call(call_conv), /* clobbers = */ Self::get_regs_clobbered_by_call(call_conv),
Opcode::Call, Opcode::Call,

View File

@@ -1,7 +1,7 @@
//! This module defines x86_64-specific machine instruction types. //! This module defines x86_64-specific machine instruction types.
use crate::binemit::{Addend, CodeOffset, Reloc, StackMap}; use crate::binemit::{Addend, CodeOffset, Reloc, StackMap};
use crate::ir::{types, ExternalName, Opcode, RelSourceLoc, TrapCode, Type}; use crate::ir::{types, ExternalName, LibCall, Opcode, RelSourceLoc, TrapCode, Type};
use crate::isa::x64::abi::X64ABIMachineSpec; use crate::isa::x64::abi::X64ABIMachineSpec;
use crate::isa::x64::inst::regs::pretty_print_reg; use crate::isa::x64::inst::regs::pretty_print_reg;
use crate::isa::x64::settings as x64_settings; use crate::isa::x64::settings as x64_settings;
@@ -34,9 +34,9 @@ pub use super::lower::isle::generated_code::MInst as Inst;
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct CallInfo { pub struct CallInfo {
/// Register uses of this call. /// Register uses of this call.
pub uses: SmallVec<[Reg; 8]>, pub uses: CallArgList,
/// Register defs of this call. /// Register defs of this call.
pub defs: SmallVec<[Writable<Reg>; 8]>, pub defs: CallRetList,
/// Registers clobbered by this call, as per its calling convention. /// Registers clobbered by this call, as per its calling convention.
pub clobbers: PRegSet, pub clobbers: PRegSet,
/// The opcode of this call. /// The opcode of this call.
@@ -490,8 +490,8 @@ impl Inst {
pub(crate) fn call_known( pub(crate) fn call_known(
dest: ExternalName, dest: ExternalName,
uses: SmallVec<[Reg; 8]>, uses: CallArgList,
defs: SmallVec<[Writable<Reg>; 8]>, defs: CallRetList,
clobbers: PRegSet, clobbers: PRegSet,
opcode: Opcode, opcode: Opcode,
) -> Inst { ) -> Inst {
@@ -508,8 +508,8 @@ impl Inst {
pub(crate) fn call_unknown( pub(crate) fn call_unknown(
dest: RegMem, dest: RegMem,
uses: SmallVec<[Reg; 8]>, uses: CallArgList,
defs: SmallVec<[Writable<Reg>; 8]>, defs: CallRetList,
clobbers: PRegSet, clobbers: PRegSet,
opcode: Opcode, opcode: Opcode,
) -> Inst { ) -> Inst {
@@ -1446,7 +1446,9 @@ impl PrettyPrint for Inst {
format!("{} {}", ljustify("popq".to_string()), dst) format!("{} {}", ljustify("popq".to_string()), dst)
} }
Inst::CallKnown { dest, .. } => format!("{} {:?}", ljustify("call".to_string()), dest), Inst::CallKnown { dest, .. } => {
format!("{} {:?}", ljustify("call".to_string()), dest)
}
Inst::CallUnknown { dest, .. } => { Inst::CallUnknown { dest, .. } => {
let dest = dest.pretty_print(8, allocs); let dest = dest.pretty_print(8, allocs);
@@ -1981,23 +1983,28 @@ fn x64_get_operands<F: Fn(VReg) -> VReg>(inst: &Inst, collector: &mut OperandCol
collector.reg_early_def(*tmp); collector.reg_early_def(*tmp);
} }
Inst::CallKnown { ref info, .. } => { Inst::CallKnown { dest, ref info, .. } => {
for &u in &info.uses { // Probestack is special and is only inserted after
collector.reg_use(u); // regalloc, so we do not need to represent its ABI to the
// register allocator. Assert that we don't alter that
// arrangement.
debug_assert_ne!(*dest, ExternalName::LibCall(LibCall::Probestack));
for u in &info.uses {
collector.reg_fixed_use(u.vreg, u.preg);
} }
for &d in &info.defs { for d in &info.defs {
collector.reg_def(d); collector.reg_fixed_def(d.vreg, d.preg);
} }
collector.reg_clobbers(info.clobbers); collector.reg_clobbers(info.clobbers);
} }
Inst::CallUnknown { ref info, dest, .. } => { Inst::CallUnknown { ref info, dest, .. } => {
dest.get_operands(collector); dest.get_operands(collector);
for &u in &info.uses { for u in &info.uses {
collector.reg_use(u); collector.reg_fixed_use(u.vreg, u.preg);
} }
for &d in &info.defs { for d in &info.defs {
collector.reg_def(d); collector.reg_fixed_def(d.vreg, d.preg);
} }
collector.reg_clobbers(info.clobbers); collector.reg_clobbers(info.clobbers);
} }

View File

@@ -8,11 +8,12 @@ use crate::isa::x64::abi::*;
use crate::isa::x64::inst::args::*; use crate::isa::x64::inst::args::*;
use crate::isa::x64::inst::*; use crate::isa::x64::inst::*;
use crate::isa::{x64::settings as x64_settings, x64::X64Backend, CallConv}; use crate::isa::{x64::settings as x64_settings, x64::X64Backend, CallConv};
use crate::machinst::abi::SmallInstVec;
use crate::machinst::lower::*; use crate::machinst::lower::*;
use crate::machinst::*; use crate::machinst::*;
use crate::result::CodegenResult; use crate::result::CodegenResult;
use crate::settings::Flags; use crate::settings::Flags;
use smallvec::SmallVec; use smallvec::{smallvec, SmallVec};
use target_lexicon::Triple; use target_lexicon::Triple;
//============================================================================= //=============================================================================
@@ -168,16 +169,18 @@ fn emit_vm_call(
assert_eq!(inputs.len(), abi.num_args(ctx.sigs())); assert_eq!(inputs.len(), abi.num_args(ctx.sigs()));
for (i, input) in inputs.iter().enumerate() { for (i, input) in inputs.iter().enumerate() {
for inst in abi.gen_copy_regs_to_arg(ctx, i, ValueRegs::one(*input)) { for inst in abi.gen_arg(ctx, i, ValueRegs::one(*input)) {
ctx.emit(inst); ctx.emit(inst);
} }
} }
abi.emit_call(ctx); let mut retval_insts: SmallInstVec<_> = smallvec![];
for (i, output) in outputs.iter().enumerate() { for (i, output) in outputs.iter().enumerate() {
for inst in abi.gen_copy_retval_to_regs(ctx, i, ValueRegs::one(*output)) { retval_insts.extend(abi.gen_retval(ctx, i, ValueRegs::one(*output)).into_iter());
ctx.emit(inst);
} }
abi.emit_call(ctx);
for inst in retval_insts {
ctx.emit(inst);
} }
abi.emit_stack_post_adjust(ctx); abi.emit_stack_post_adjust(ctx);

View File

@@ -506,8 +506,8 @@ pub trait ABIMachineSpec {
/// temporary register to use to synthesize the called address, if needed. /// temporary register to use to synthesize the called address, if needed.
fn gen_call( fn gen_call(
dest: &CallDest, dest: &CallDest,
uses: SmallVec<[Reg; 8]>, uses: CallArgList,
defs: SmallVec<[Writable<Reg>; 8]>, defs: CallRetList,
clobbers: PRegSet, clobbers: PRegSet,
opcode: ir::Opcode, opcode: ir::Opcode,
tmp: Writable<Reg>, tmp: Writable<Reg>,
@@ -515,13 +515,16 @@ pub trait ABIMachineSpec {
callee_conv: isa::CallConv, callee_conv: isa::CallConv,
) -> SmallVec<[Self::I; 2]>; ) -> SmallVec<[Self::I; 2]>;
/// Generate a memcpy invocation. Used to set up struct args. May clobber /// Generate a memcpy invocation. Used to set up struct
/// caller-save registers; we only memcpy before we start to set up args for /// args. Takes `src`, `dst` as read-only inputs and requires two
/// a call. /// temporaries to generate the call (for the size immediate and
/// possibly for the address of `memcpy` itself).
fn gen_memcpy( fn gen_memcpy(
call_conv: isa::CallConv, call_conv: isa::CallConv,
dst: Reg, dst: Reg,
src: Reg, src: Reg,
tmp1: Writable<Reg>,
tmp2: Writable<Reg>,
size: usize, size: usize,
) -> SmallVec<[Self::I; 8]>; ) -> SmallVec<[Self::I; 8]>;
@@ -623,6 +626,9 @@ impl SigData {
/// Return all uses (i.e, function args), defs (i.e., return values /// Return all uses (i.e, function args), defs (i.e., return values
/// and caller-saved registers), and clobbers for the callsite. /// and caller-saved registers), and clobbers for the callsite.
///
/// FIXME: used only by s390x; remove once that backend moves to
/// `call_clobbers` and constraint-based calls.
pub fn call_uses_defs_clobbers<M: ABIMachineSpec>( pub fn call_uses_defs_clobbers<M: ABIMachineSpec>(
&self, &self,
) -> (SmallVec<[Reg; 8]>, SmallVec<[Writable<Reg>; 8]>, PRegSet) { ) -> (SmallVec<[Reg; 8]>, SmallVec<[Writable<Reg>; 8]>, PRegSet) {
@@ -682,6 +688,30 @@ impl SigData {
(uses, defs, clobbers) (uses, defs, clobbers)
} }
/// Return all clobbers for the callsite.
pub fn call_clobbers<M: ABIMachineSpec>(&self) -> PRegSet {
// Get clobbers: all caller-saves. These may include return value
// regs, which we will remove from the clobber set below.
let mut clobbers = M::get_regs_clobbered_by_call(self.call_conv);
// Remove retval regs from clobbers.
for ret in &self.rets {
if let &ABIArg::Slots { ref slots, .. } = ret {
for slot in slots {
match slot {
&ABIArgSlot::Reg { reg, .. } => {
log::trace!("call_clobbers: retval reg {:?}", reg);
clobbers.remove(PReg::from(reg));
}
_ => {}
}
}
}
}
clobbers
}
/// Get the number of arguments expected. /// Get the number of arguments expected.
pub fn num_args(&self) -> usize { pub fn num_args(&self) -> usize {
if self.stack_ret_arg.is_some() { if self.stack_ret_arg.is_some() {
@@ -1848,14 +1878,38 @@ impl<M: ABIMachineSpec> Callee<M> {
} }
} }
/// An input argument to a call instruction: the vreg that is used,
/// and the preg it is constrained to (per the ABI).
#[derive(Clone, Debug)]
pub struct CallArgPair {
/// The virtual register to use for the argument.
pub vreg: Reg,
/// The real register into which the arg goes.
pub preg: Reg,
}
/// An output return value from a call instruction: the vreg that is
/// defined, and the preg it is constrained to (per the ABI).
#[derive(Clone, Debug)]
pub struct CallRetPair {
/// The virtual register to define from this return value.
pub vreg: Writable<Reg>,
/// The real register from which the return value is read.
pub preg: Reg,
}
pub type CallArgList = SmallVec<[CallArgPair; 8]>;
pub type CallRetList = SmallVec<[CallRetPair; 8]>;
/// ABI object for a callsite. /// ABI object for a callsite.
pub struct Caller<M: ABIMachineSpec> { pub struct Caller<M: ABIMachineSpec> {
/// The called function's signature. /// The called function's signature.
sig: Sig, sig: Sig,
/// All uses for the callsite, i.e., function args. /// All register uses for the callsite, i.e., function args, with
uses: SmallVec<[Reg; 8]>, /// VReg and the physical register it is constrained to.
uses: CallArgList,
/// All defs for the callsite, i.e., return values. /// All defs for the callsite, i.e., return values.
defs: SmallVec<[Writable<Reg>; 8]>, defs: CallRetList,
/// Caller-save clobbers. /// Caller-save clobbers.
clobbers: PRegSet, clobbers: PRegSet,
/// Call destination. /// Call destination.
@@ -1890,11 +1944,11 @@ impl<M: ABIMachineSpec> Caller<M> {
flags: settings::Flags, flags: settings::Flags,
) -> CodegenResult<Caller<M>> { ) -> CodegenResult<Caller<M>> {
let sig = sigs.abi_sig_for_sig_ref(sig_ref); let sig = sigs.abi_sig_for_sig_ref(sig_ref);
let (uses, defs, clobbers) = sigs[sig].call_uses_defs_clobbers::<M>(); let clobbers = sigs[sig].call_clobbers::<M>();
Ok(Caller { Ok(Caller {
sig, sig,
uses, uses: smallvec![],
defs, defs: smallvec![],
clobbers, clobbers,
dest: CallDest::ExtName(extname.clone(), dist), dest: CallDest::ExtName(extname.clone(), dist),
opcode: ir::Opcode::Call, opcode: ir::Opcode::Call,
@@ -1915,11 +1969,11 @@ impl<M: ABIMachineSpec> Caller<M> {
flags: settings::Flags, flags: settings::Flags,
) -> CodegenResult<Caller<M>> { ) -> CodegenResult<Caller<M>> {
let sig = sigs.abi_sig_for_signature(sig); let sig = sigs.abi_sig_for_signature(sig);
let (uses, defs, clobbers) = sigs[sig].call_uses_defs_clobbers::<M>(); let clobbers = sigs[sig].call_clobbers::<M>();
Ok(Caller { Ok(Caller {
sig, sig,
uses, uses: smallvec![],
defs, defs: smallvec![],
clobbers, clobbers,
dest: CallDest::ExtName(extname.clone(), dist), dest: CallDest::ExtName(extname.clone(), dist),
opcode: ir::Opcode::Call, opcode: ir::Opcode::Call,
@@ -1940,11 +1994,11 @@ impl<M: ABIMachineSpec> Caller<M> {
flags: settings::Flags, flags: settings::Flags,
) -> CodegenResult<Caller<M>> { ) -> CodegenResult<Caller<M>> {
let sig = sigs.abi_sig_for_sig_ref(sig_ref); let sig = sigs.abi_sig_for_sig_ref(sig_ref);
let (uses, defs, clobbers) = sigs[sig].call_uses_defs_clobbers::<M>(); let clobbers = sigs[sig].call_clobbers::<M>();
Ok(Caller { Ok(Caller {
sig, sig,
uses, uses: smallvec![],
defs, defs: smallvec![],
clobbers, clobbers,
dest: CallDest::Reg(ptr), dest: CallDest::Reg(ptr),
opcode, opcode,
@@ -2018,8 +2072,16 @@ impl<M: ABIMachineSpec> Caller<M> {
// arg regs. // arg regs.
let memcpy_call_conv = let memcpy_call_conv =
isa::CallConv::for_libcall(&self.flags, ctx.sigs()[self.sig].call_conv); isa::CallConv::for_libcall(&self.flags, ctx.sigs()[self.sig].call_conv);
for insn in let tmp1 = ctx.alloc_tmp(M::word_type()).only_reg().unwrap();
M::gen_memcpy(memcpy_call_conv, dst_ptr.to_reg(), src_ptr, size as usize) let tmp2 = ctx.alloc_tmp(M::word_type()).only_reg().unwrap();
for insn in M::gen_memcpy(
memcpy_call_conv,
dst_ptr.to_reg(),
src_ptr,
tmp1,
tmp2,
size as usize,
)
.into_iter() .into_iter()
{ {
ctx.emit(insn); ctx.emit(insn);
@@ -2029,19 +2091,48 @@ impl<M: ABIMachineSpec> Caller<M> {
} }
} }
/// Generate a copy of an argument value from a source register, prior to /// Add a constraint for an argument value from a source register.
/// the call. For large arguments with associated stack buffer, this may /// For large arguments with associated stack buffer, this may
/// load the address of the buffer into the argument register, if required /// load the address of the buffer into the argument register, if
/// by the ABI. /// required by the ABI.
pub fn gen_copy_regs_to_arg( pub fn gen_arg(
&self, &mut self,
ctx: &Lower<M::I>, ctx: &mut Lower<M::I>,
idx: usize, idx: usize,
from_regs: ValueRegs<Reg>, from_regs: ValueRegs<Reg>,
) -> SmallInstVec<M::I> { ) -> SmallInstVec<M::I> {
let mut insts = smallvec![]; let mut insts = smallvec![];
let word_rc = M::word_reg_class(); let word_rc = M::word_reg_class();
let word_bits = M::word_bits() as usize; let word_bits = M::word_bits() as usize;
// How many temps do we need for extends? Allocate them ahead
// of time, since we can't do it while we're iterating over
// the sig and immutably borrowing `ctx`.
let needed_tmps = match &ctx.sigs()[self.sig].args[idx] {
&ABIArg::Slots { ref slots, .. } => slots
.iter()
.map(|slot| match slot {
&ABIArgSlot::Reg { extension, .. }
if extension != ir::ArgumentExtension::None =>
{
1
}
&ABIArgSlot::Reg { ty, .. } if ty.is_ref() => 1,
&ABIArgSlot::Reg { .. } => 0,
&ABIArgSlot::Stack { extension, .. }
if extension != ir::ArgumentExtension::None =>
{
1
}
&ABIArgSlot::Stack { .. } => 0,
})
.sum(),
_ => 0,
};
let mut temps: SmallVec<[Writable<Reg>; 16]> = (0..needed_tmps)
.map(|_| ctx.alloc_tmp(M::word_type()).only_reg().unwrap())
.collect();
match &ctx.sigs()[self.sig].args[idx] { match &ctx.sigs()[self.sig].args[idx] {
&ABIArg::Slots { ref slots, .. } => { &ABIArg::Slots { ref slots, .. } => {
assert_eq!(from_regs.len(), slots.len()); assert_eq!(from_regs.len(), slots.len());
@@ -2058,19 +2149,36 @@ impl<M: ABIMachineSpec> Caller<M> {
ir::ArgumentExtension::Sext => true, ir::ArgumentExtension::Sext => true,
_ => unreachable!(), _ => unreachable!(),
}; };
let extend_result =
temps.pop().expect("Must have allocated enough temps");
insts.push(M::gen_extend( insts.push(M::gen_extend(
Writable::from_reg(Reg::from(reg)), extend_result,
*from_reg, *from_reg,
signed, signed,
ty_bits(ty) as u8, ty_bits(ty) as u8,
word_bits as u8, word_bits as u8,
)); ));
self.uses.push(CallArgPair {
vreg: extend_result.to_reg(),
preg: reg.into(),
});
} else if ty.is_ref() {
// Reference-typed args need to be
// passed as a copy; the original vreg
// is constrained to the stack and
// this copy is in a reg.
let ref_copy =
temps.pop().expect("Must have allocated enough temps");
insts.push(M::gen_move(ref_copy, *from_reg, M::word_type()));
self.uses.push(CallArgPair {
vreg: ref_copy.to_reg(),
preg: reg.into(),
});
} else { } else {
insts.push(M::gen_move( self.uses.push(CallArgPair {
Writable::from_reg(Reg::from(reg)), vreg: *from_reg,
*from_reg, preg: reg.into(),
ty, });
));
} }
} }
&ABIArgSlot::Stack { &ABIArgSlot::Stack {
@@ -2079,8 +2187,8 @@ impl<M: ABIMachineSpec> Caller<M> {
extension, extension,
.. ..
} => { } => {
let mut ty = ty;
let ext = M::get_ext_mode(ctx.sigs()[self.sig].call_conv, extension); let ext = M::get_ext_mode(ctx.sigs()[self.sig].call_conv, extension);
let (data, ty) =
if ext != ir::ArgumentExtension::None && ty_bits(ty) < word_bits { if ext != ir::ArgumentExtension::None && ty_bits(ty) < word_bits {
assert_eq!(word_rc, from_reg.class()); assert_eq!(word_rc, from_reg.class());
let signed = match ext { let signed = match ext {
@@ -2088,22 +2196,23 @@ impl<M: ABIMachineSpec> Caller<M> {
ir::ArgumentExtension::Sext => true, ir::ArgumentExtension::Sext => true,
_ => unreachable!(), _ => unreachable!(),
}; };
// Extend in place in the source register. Our convention is to let extend_result =
// treat high bits as undefined for values in registers, so this temps.pop().expect("Must have allocated enough temps");
// is safe, even for an argument that is nominally read-only.
insts.push(M::gen_extend( insts.push(M::gen_extend(
Writable::from_reg(*from_reg), extend_result,
*from_reg, *from_reg,
signed, signed,
ty_bits(ty) as u8, ty_bits(ty) as u8,
word_bits as u8, word_bits as u8,
)); ));
// Store the extended version. // Store the extended version.
ty = M::word_type(); (extend_result.to_reg(), M::word_type())
} } else {
(*from_reg, ty)
};
insts.push(M::gen_store_stack( insts.push(M::gen_store_stack(
StackAMode::SPOffset(offset, ty), StackAMode::SPOffset(offset, ty),
*from_reg, data,
ty, ty,
)); ));
} }
@@ -2118,9 +2227,9 @@ impl<M: ABIMachineSpec> Caller<M> {
insts insts
} }
/// Emit a copy a return value into a destination register, after the call returns. /// Define a return value after the call returns.
pub fn gen_copy_retval_to_regs( pub fn gen_retval(
&self, &mut self,
ctx: &Lower<M::I>, ctx: &Lower<M::I>,
idx: usize, idx: usize,
into_regs: ValueRegs<Writable<Reg>>, into_regs: ValueRegs<Writable<Reg>>,
@@ -2133,8 +2242,11 @@ impl<M: ABIMachineSpec> Caller<M> {
match slot { match slot {
// Extension mode doesn't matter because we're copying out, not in, // Extension mode doesn't matter because we're copying out, not in,
// and we ignore high bits in our own registers by convention. // and we ignore high bits in our own registers by convention.
&ABIArgSlot::Reg { reg, ty, .. } => { &ABIArgSlot::Reg { reg, .. } => {
insts.push(M::gen_move(*into_reg, Reg::from(reg), ty)); self.defs.push(CallRetPair {
vreg: *into_reg,
preg: reg.into(),
});
} }
&ABIArgSlot::Stack { offset, ty, .. } => { &ABIArgSlot::Stack { offset, ty, .. } => {
let ret_area_base = ctx.sigs()[self.sig].sized_stack_arg_space; let ret_area_base = ctx.sigs()[self.sig].sized_stack_arg_space;
@@ -2171,10 +2283,6 @@ impl<M: ABIMachineSpec> Caller<M> {
/// This function should only be called once, as it is allowed to re-use /// This function should only be called once, as it is allowed to re-use
/// parts of the `Caller` object in emitting instructions. /// parts of the `Caller` object in emitting instructions.
pub fn emit_call(&mut self, ctx: &mut Lower<M::I>) { pub fn emit_call(&mut self, ctx: &mut Lower<M::I>) {
let (uses, defs) = (
mem::replace(&mut self.uses, Default::default()),
mem::replace(&mut self.defs, Default::default()),
);
let word_type = M::word_type(); let word_type = M::word_type();
if let Some(i) = ctx.sigs()[self.sig].stack_ret_arg { if let Some(i) = ctx.sigs()[self.sig].stack_ret_arg {
let rd = ctx.alloc_tmp(word_type).only_reg().unwrap(); let rd = ctx.alloc_tmp(word_type).only_reg().unwrap();
@@ -2184,10 +2292,16 @@ impl<M: ABIMachineSpec> Caller<M> {
rd, rd,
I8, I8,
)); ));
for inst in self.gen_copy_regs_to_arg(ctx, i, ValueRegs::one(rd.to_reg())) { for inst in self.gen_arg(ctx, i, ValueRegs::one(rd.to_reg())) {
ctx.emit(inst); ctx.emit(inst);
} }
} }
let (uses, defs) = (
mem::replace(&mut self.uses, Default::default()),
mem::replace(&mut self.defs, Default::default()),
);
let tmp = ctx.alloc_tmp(word_type).only_reg().unwrap(); let tmp = ctx.alloc_tmp(word_type).only_reg().unwrap();
for inst in M::gen_call( for inst in M::gen_call(
&self.dest, &self.dest,

View File

@@ -1208,21 +1208,32 @@ macro_rules! isle_prelude_method_helpers {
caller.emit_copy_regs_to_buffer(self.lower_ctx, i, *arg_regs); caller.emit_copy_regs_to_buffer(self.lower_ctx, i, *arg_regs);
} }
for (i, arg_regs) in arg_regs.iter().enumerate() { for (i, arg_regs) in arg_regs.iter().enumerate() {
for inst in caller.gen_copy_regs_to_arg(self.lower_ctx, i, *arg_regs) { for inst in caller.gen_arg(self.lower_ctx, i, *arg_regs) {
self.lower_ctx.emit(inst); self.lower_ctx.emit(inst);
} }
} }
caller.emit_call(self.lower_ctx); // Handle retvals prior to emitting call, so the
// constraints are on the call instruction; but buffer the
// instructions till after the call.
let mut outputs = InstOutput::new(); let mut outputs = InstOutput::new();
let mut retval_insts: crate::machinst::abi::SmallInstVec<_> = smallvec::smallvec![];
for i in 0..num_rets { for i in 0..num_rets {
let ret = self.lower_ctx.sigs()[abi].get_ret(i); let ret = self.lower_ctx.sigs()[abi].get_ret(i);
let retval_regs = self.abi_arg_slot_regs(&ret).unwrap(); let retval_regs = self.abi_arg_slot_regs(&ret).unwrap();
for inst in caller.gen_copy_retval_to_regs(self.lower_ctx, i, retval_regs.clone()) { retval_insts.extend(
self.lower_ctx.emit(inst); caller
} .gen_retval(self.lower_ctx, i, retval_regs.clone())
.into_iter(),
);
outputs.push(valueregs::non_writable_value_regs(retval_regs)); outputs.push(valueregs::non_writable_value_regs(retval_regs));
} }
caller.emit_call(self.lower_ctx);
for inst in retval_insts {
self.lower_ctx.emit(inst);
}
caller.emit_stack_post_adjust(self.lower_ctx); caller.emit_stack_post_adjust(self.lower_ctx);
outputs outputs

View File

@@ -1027,7 +1027,6 @@ impl<I: VCodeInst> VCode<I> {
// Spill from register to spillslot. // Spill from register to spillslot.
let to = to.as_stack().unwrap(); let to = to.as_stack().unwrap();
let from_rreg = RealReg::from(from); let from_rreg = RealReg::from(from);
debug_assert_eq!(from.class(), to.class());
let spill = self.abi.gen_spill(to, from_rreg); let spill = self.abi.gen_spill(to, from_rreg);
do_emit(&spill, &[], &mut disasm, &mut buffer, &mut state); do_emit(&spill, &[], &mut disasm, &mut buffer, &mut state);
} }
@@ -1035,7 +1034,6 @@ impl<I: VCodeInst> VCode<I> {
// Load from spillslot to register. // Load from spillslot to register.
let from = from.as_stack().unwrap(); let from = from.as_stack().unwrap();
let to_rreg = Writable::from_reg(RealReg::from(to)); let to_rreg = Writable::from_reg(RealReg::from(to));
debug_assert_eq!(from.class(), to.class());
let reload = self.abi.gen_reload(to_rreg, from); let reload = self.abi.gen_reload(to_rreg, from);
do_emit(&reload, &[], &mut disasm, &mut buffer, &mut state); do_emit(&reload, &[], &mut disasm, &mut buffer, &mut state);
} }

View File

@@ -69,9 +69,10 @@ block0(v0: i64, v1: i64, v2: i64):
} }
; block0: ; block0:
; add x0, x0, x2 ; mov x6, x0
; add x0, x0, x1 ; add x6, x6, x2
; ldr w0, [x0, #48] ; add x6, x6, x1
; ldr w0, [x6, #48]
; ret ; ret
function %f10(i64, i64, i64) -> i32 { function %f10(i64, i64, i64) -> i32 {
@@ -232,11 +233,11 @@ block0(v0: i64):
} }
; block0: ; block0:
; mov x6, x0 ; mov x8, x0
; ldp x7, x1, [x6] ; mov x6, x8
; mov x11, x7 ; ldp x0, x1, [x6]
; stp x11, x1, [x0] ; mov x7, x8
; mov x0, x7 ; stp x0, x1, [x7]
; ret ; ret
function %i128_imm_offset(i64) -> i128 { function %i128_imm_offset(i64) -> i128 {
@@ -247,11 +248,11 @@ block0(v0: i64):
} }
; block0: ; block0:
; mov x6, x0 ; mov x8, x0
; ldp x7, x1, [x6, #16] ; mov x6, x8
; mov x11, x7 ; ldp x0, x1, [x6, #16]
; stp x11, x1, [x0, #16] ; mov x7, x8
; mov x0, x7 ; stp x0, x1, [x7, #16]
; ret ; ret
function %i128_imm_offset_large(i64) -> i128 { function %i128_imm_offset_large(i64) -> i128 {
@@ -262,11 +263,11 @@ block0(v0: i64):
} }
; block0: ; block0:
; mov x6, x0 ; mov x8, x0
; ldp x7, x1, [x6, #504] ; mov x6, x8
; mov x11, x7 ; ldp x0, x1, [x6, #504]
; stp x11, x1, [x0, #504] ; mov x7, x8
; mov x0, x7 ; stp x0, x1, [x7, #504]
; ret ; ret
function %i128_imm_offset_negative_large(i64) -> i128 { function %i128_imm_offset_negative_large(i64) -> i128 {
@@ -277,11 +278,11 @@ block0(v0: i64):
} }
; block0: ; block0:
; mov x6, x0 ; mov x8, x0
; ldp x7, x1, [x6, #-512] ; mov x6, x8
; mov x11, x7 ; ldp x0, x1, [x6, #-512]
; stp x11, x1, [x0, #-512] ; mov x7, x8
; mov x0, x7 ; stp x0, x1, [x7, #-512]
; ret ; ret
function %i128_add_offset(i64) -> i128 { function %i128_add_offset(i64) -> i128 {
@@ -293,11 +294,11 @@ block0(v0: i64):
} }
; block0: ; block0:
; mov x6, x0 ; mov x8, x0
; ldp x7, x1, [x6, #32] ; mov x6, x8
; mov x11, x7 ; ldp x0, x1, [x6, #32]
; stp x11, x1, [x0, #32] ; mov x7, x8
; mov x0, x7 ; stp x0, x1, [x7, #32]
; ret ; ret
function %i128_32bit_sextend_simple(i32) -> i128 { function %i128_32bit_sextend_simple(i32) -> i128 {
@@ -327,13 +328,13 @@ block0(v0: i64, v1: i32):
} }
; block0: ; block0:
; mov x7, x0 ; mov x11, x0
; mov x7, x11
; add x7, x7, x1, SXTW ; add x7, x7, x1, SXTW
; ldp x9, x10, [x7, #24] ; ldp x0, x10, [x7, #24]
; add x0, x0, x1, SXTW ; mov x9, x11
; mov x14, x9 ; add x9, x9, x1, SXTW
; mov x1, x10 ; mov x1, x10
; stp x14, x1, [x0, #24] ; stp x0, x1, [x9, #24]
; mov x0, x9
; ret ; ret

View File

@@ -109,3 +109,4 @@ block0(v0: i64):
; blr x4 ; blr x4
; ldp fp, lr, [sp], #16 ; ldp fp, lr, [sp], #16
; ret ; ret

View File

@@ -79,7 +79,7 @@ block0(v0: i8):
; stp fp, lr, [sp, #-16]! ; stp fp, lr, [sp, #-16]!
; mov fp, sp ; mov fp, sp
; block0: ; block0:
; mov x15, x0 ; mov x8, x0
; sub sp, sp, #16 ; sub sp, sp, #16
; virtual_sp_offset_adjust 16 ; virtual_sp_offset_adjust 16
; movz x0, #42 ; movz x0, #42
@@ -90,9 +90,9 @@ block0(v0: i8):
; movz x5, #42 ; movz x5, #42
; movz x6, #42 ; movz x6, #42
; movz x7, #42 ; movz x7, #42
; strb w15, [sp] ; strb w8, [sp]
; ldr x14, 8 ; b 12 ; data TestCase(%g) + 0 ; ldr x8, 8 ; b 12 ; data TestCase(%g) + 0
; blr x14 ; blr x8
; add sp, sp, #16 ; add sp, sp, #16
; virtual_sp_offset_adjust -16 ; virtual_sp_offset_adjust -16
; ldp fp, lr, [sp], #16 ; ldp fp, lr, [sp], #16
@@ -105,7 +105,7 @@ block0(v0: i8):
} }
; block0: ; block0:
; mov x15, x0 ; mov x8, x0
; mov x13, x1 ; mov x13, x1
; movz x0, #42 ; movz x0, #42
; movz x1, #42 ; movz x1, #42
@@ -115,7 +115,8 @@ block0(v0: i8):
; movz x5, #42 ; movz x5, #42
; movz x6, #42 ; movz x6, #42
; movz x7, #42 ; movz x7, #42
; strb w15, [x13] ; mov x11, x8
; strb w11, [x13]
; ret ; ret
function %f8() { function %f8() {
@@ -140,26 +141,26 @@ block0:
; mov fp, sp ; mov fp, sp
; sub sp, sp, #48 ; sub sp, sp, #48
; block0: ; block0:
; ldr x8, 8 ; b 12 ; data TestCase(%g0) + 0 ; ldr x9, 8 ; b 12 ; data TestCase(%g0) + 0
; blr x8 ; blr x9
; str q0, [sp, #32] ; str q0, [sp, #32]
; ldr x9, 8 ; b 12 ; data TestCase(%g1) + 0 ; ldr x9, 8 ; b 12 ; data TestCase(%g1) + 0
; blr x9 ; blr x9
; str q0, [sp, #16] ; str q0, [sp, #16]
; ldr x10, 8 ; b 12 ; data TestCase(%g1) + 0 ; ldr x9, 8 ; b 12 ; data TestCase(%g1) + 0
; blr x10 ; blr x9
; str q0, [sp] ; str q0, [sp]
; ldr x12, 8 ; b 12 ; data TestCase(%g2) + 0 ; ldr x9, 8 ; b 12 ; data TestCase(%g2) + 0
; blr x12 ; blr x9
; ldr x10, 8 ; b 12 ; data TestCase(%g3) + 0
; ldr q0, [sp, #32] ; ldr q0, [sp, #32]
; ldr x14, 8 ; b 12 ; data TestCase(%g3) + 0 ; blr x10
; blr x14 ; ldr x11, 8 ; b 12 ; data TestCase(%g4) + 0
; ldr q0, [sp, #16] ; ldr q0, [sp, #16]
; ldr x0, 8 ; b 12 ; data TestCase(%g4) + 0 ; blr x11
; blr x0 ; ldr x12, 8 ; b 12 ; data TestCase(%g4) + 0
; ldr q0, [sp] ; ldr q0, [sp]
; ldr x2, 8 ; b 12 ; data TestCase(%g4) + 0 ; blr x12
; blr x2
; add sp, sp, #48 ; add sp, sp, #48
; ldp fp, lr, [sp], #16 ; ldp fp, lr, [sp], #16
; ret ; ret
@@ -184,26 +185,26 @@ block0:
; mov fp, sp ; mov fp, sp
; sub sp, sp, #48 ; sub sp, sp, #48
; block0: ; block0:
; ldr x8, 8 ; b 12 ; data TestCase(%g0) + 0 ; ldr x9, 8 ; b 12 ; data TestCase(%g0) + 0
; blr x8 ; blr x9
; str q0, [sp, #32] ; str q0, [sp, #32]
; ldr x9, 8 ; b 12 ; data TestCase(%g0) + 0 ; ldr x9, 8 ; b 12 ; data TestCase(%g0) + 0
; blr x9 ; blr x9
; str q0, [sp, #16] ; str q0, [sp, #16]
; ldr x10, 8 ; b 12 ; data TestCase(%g0) + 0 ; ldr x9, 8 ; b 12 ; data TestCase(%g0) + 0
; blr x10 ; blr x9
; str q0, [sp] ; str q0, [sp]
; ldr x12, 8 ; b 12 ; data TestCase(%g1) + 0 ; ldr x9, 8 ; b 12 ; data TestCase(%g1) + 0
; blr x12 ; blr x9
; ldr x10, 8 ; b 12 ; data TestCase(%g2) + 0
; ldr q0, [sp, #32] ; ldr q0, [sp, #32]
; ldr x14, 8 ; b 12 ; data TestCase(%g2) + 0 ; blr x10
; blr x14 ; ldr x11, 8 ; b 12 ; data TestCase(%g2) + 0
; ldr q0, [sp, #16] ; ldr q0, [sp, #16]
; ldr x0, 8 ; b 12 ; data TestCase(%g2) + 0 ; blr x11
; blr x0 ; ldr x12, 8 ; b 12 ; data TestCase(%g2) + 0
; ldr q0, [sp] ; ldr q0, [sp]
; ldr x2, 8 ; b 12 ; data TestCase(%g2) + 0 ; blr x12
; blr x2
; add sp, sp, #48 ; add sp, sp, #48
; ldp fp, lr, [sp], #16 ; ldp fp, lr, [sp], #16
; ret ; ret
@@ -232,26 +233,26 @@ block0:
; mov fp, sp ; mov fp, sp
; sub sp, sp, #48 ; sub sp, sp, #48
; block0: ; block0:
; ldr x8, 8 ; b 12 ; data TestCase(%g0) + 0 ; ldr x9, 8 ; b 12 ; data TestCase(%g0) + 0
; blr x8 ; blr x9
; str q0, [sp, #32] ; str q0, [sp, #32]
; ldr x9, 8 ; b 12 ; data TestCase(%g1) + 0 ; ldr x9, 8 ; b 12 ; data TestCase(%g1) + 0
; blr x9 ; blr x9
; str q0, [sp, #16] ; str q0, [sp, #16]
; ldr x10, 8 ; b 12 ; data TestCase(%g2) + 0 ; ldr x9, 8 ; b 12 ; data TestCase(%g2) + 0
; blr x10 ; blr x9
; str q0, [sp] ; str q0, [sp]
; ldr x12, 8 ; b 12 ; data TestCase(%g3) + 0 ; ldr x9, 8 ; b 12 ; data TestCase(%g3) + 0
; blr x12 ; blr x9
; ldr x10, 8 ; b 12 ; data TestCase(%g4) + 0
; ldr q0, [sp, #32] ; ldr q0, [sp, #32]
; ldr x14, 8 ; b 12 ; data TestCase(%g4) + 0 ; blr x10
; blr x14 ; ldr x11, 8 ; b 12 ; data TestCase(%g5) + 0
; ldr q0, [sp, #16] ; ldr q0, [sp, #16]
; ldr x0, 8 ; b 12 ; data TestCase(%g5) + 0 ; blr x11
; blr x0 ; ldr x12, 8 ; b 12 ; data TestCase(%g6) + 0
; ldr q0, [sp] ; ldr q0, [sp]
; ldr x2, 8 ; b 12 ; data TestCase(%g6) + 0 ; blr x12
; blr x2
; add sp, sp, #48 ; add sp, sp, #48
; ldp fp, lr, [sp], #16 ; ldp fp, lr, [sp], #16
; ret ; ret
@@ -279,12 +280,11 @@ block0(v0: i64):
; stp fp, lr, [sp, #-16]! ; stp fp, lr, [sp, #-16]!
; mov fp, sp ; mov fp, sp
; block0: ; block0:
; mov x7, x0 ; mov x1, x0
; movz x0, #42 ; movz x0, #42
; movz x2, #42 ; movz x2, #42
; mov x1, x7 ; ldr x7, 8 ; b 12 ; data TestCase(%f11) + 0
; ldr x9, 8 ; b 12 ; data TestCase(%f11) + 0 ; blr x7
; blr x9
; ldp fp, lr, [sp], #16 ; ldp fp, lr, [sp], #16
; ret ; ret
@@ -311,12 +311,11 @@ block0(v0: i64):
; stp fp, lr, [sp, #-16]! ; stp fp, lr, [sp, #-16]!
; mov fp, sp ; mov fp, sp
; block0: ; block0:
; mov x7, x0 ; mov x2, x0
; movz x3, #42 ; movz x3, #42
; movz x0, #42 ; movz x0, #42
; mov x2, x7 ; ldr x7, 8 ; b 12 ; data TestCase(%f12) + 0
; ldr x9, 8 ; b 12 ; data TestCase(%f12) + 0 ; blr x7
; blr x9
; ldp fp, lr, [sp], #16 ; ldp fp, lr, [sp], #16
; ret ; ret
@@ -343,12 +342,11 @@ block0(v0: i64):
; stp fp, lr, [sp, #-16]! ; stp fp, lr, [sp, #-16]!
; mov fp, sp ; mov fp, sp
; block0: ; block0:
; mov x7, x0 ; mov x1, x0
; movz x2, #42 ; movz x2, #42
; movz x0, #42 ; movz x0, #42
; mov x1, x7 ; ldr x7, 8 ; b 12 ; data TestCase(%f13) + 0
; ldr x9, 8 ; b 12 ; data TestCase(%f13) + 0 ; blr x7
; blr x9
; ldp fp, lr, [sp], #16 ; ldp fp, lr, [sp], #16
; ret ; ret
@@ -376,20 +374,19 @@ block0(v0: i128, v1: i64):
; stp fp, lr, [sp, #-16]! ; stp fp, lr, [sp, #-16]!
; mov fp, sp ; mov fp, sp
; block0: ; block0:
; mov x11, x2 ; mov x6, x2
; sub sp, sp, #16 ; sub sp, sp, #16
; virtual_sp_offset_adjust 16 ; virtual_sp_offset_adjust 16
; mov x10, x0 ; str x0, [sp]
; mov x12, x1 ; mov x4, x0
; mov x2, x10 ; str x1, [sp, #8]
; mov x3, x12 ; mov x5, x1
; mov x4, x10 ; ldr x12, 8 ; b 12 ; data TestCase(%f14) + 0
; mov x5, x12 ; mov x0, x4
; mov x6, x11 ; mov x2, x4
; str x10, [sp] ; mov x1, x5
; str x12, [sp, #8] ; mov x3, x5
; ldr x7, 8 ; b 12 ; data TestCase(%f14) + 0 ; blr x12
; blr x7
; add sp, sp, #16 ; add sp, sp, #16
; virtual_sp_offset_adjust -16 ; virtual_sp_offset_adjust -16
; ldp fp, lr, [sp], #16 ; ldp fp, lr, [sp], #16
@@ -419,20 +416,19 @@ block0(v0: i128, v1: i64):
; stp fp, lr, [sp, #-16]! ; stp fp, lr, [sp, #-16]!
; mov fp, sp ; mov fp, sp
; block0: ; block0:
; mov x11, x2 ; mov x6, x2
; sub sp, sp, #16 ; sub sp, sp, #16
; virtual_sp_offset_adjust 16 ; virtual_sp_offset_adjust 16
; mov x10, x0 ; str x0, [sp]
; mov x12, x1 ; mov x4, x0
; mov x2, x10 ; str x1, [sp, #8]
; mov x3, x12 ; mov x5, x1
; mov x4, x10 ; ldr x12, 8 ; b 12 ; data TestCase(%f15) + 0
; mov x5, x12 ; mov x0, x4
; mov x6, x11 ; mov x2, x4
; str x10, [sp] ; mov x1, x5
; str x12, [sp, #8] ; mov x3, x5
; ldr x7, 8 ; b 12 ; data TestCase(%f15) + 0 ; blr x12
; blr x7
; add sp, sp, #16 ; add sp, sp, #16
; virtual_sp_offset_adjust -16 ; virtual_sp_offset_adjust -16
; ldp fp, lr, [sp], #16 ; ldp fp, lr, [sp], #16
@@ -496,8 +492,8 @@ block0(v0: i64):
; str x24, [sp, #-16]! ; str x24, [sp, #-16]!
; block0: ; block0:
; mov x24, x8 ; mov x24, x8
; ldr x5, 8 ; b 12 ; data TestCase(%g) + 0 ; ldr x4, 8 ; b 12 ; data TestCase(%g) + 0
; blr x5 ; blr x4
; mov x8, x24 ; mov x8, x24
; ldr x24, [sp], #16 ; ldr x24, [sp], #16
; ldp fp, lr, [sp], #16 ; ldp fp, lr, [sp], #16

View File

@@ -918,8 +918,9 @@ block0(v0: f32x4, v1: f32x4, v2: f32x4):
} }
; block0: ; block0:
; fmla v2.4s, v2.4s, v0.4s, v1.4s ; mov v5.16b, v2.16b
; mov v0.16b, v2.16b ; fmla v5.4s, v5.4s, v0.4s, v1.4s
; mov v0.16b, v5.16b
; ret ; ret
function %f79(f32x2, f32x2, f32x2) -> f32x2 { function %f79(f32x2, f32x2, f32x2) -> f32x2 {
@@ -929,8 +930,9 @@ block0(v0: f32x2, v1: f32x2, v2: f32x2):
} }
; block0: ; block0:
; fmla v2.2s, v2.2s, v0.2s, v1.2s ; mov v5.16b, v2.16b
; mov v0.16b, v2.16b ; fmla v5.2s, v5.2s, v0.2s, v1.2s
; mov v0.16b, v5.16b
; ret ; ret
function %f80(f64x2, f64x2, f64x2) -> f64x2 { function %f80(f64x2, f64x2, f64x2) -> f64x2 {
@@ -940,8 +942,9 @@ block0(v0: f64x2, v1: f64x2, v2: f64x2):
} }
; block0: ; block0:
; fmla v2.2d, v2.2d, v0.2d, v1.2d ; mov v5.16b, v2.16b
; mov v0.16b, v2.16b ; fmla v5.2d, v5.2d, v0.2d, v1.2d
; mov v0.16b, v5.16b
; ret ; ret
function %f81(f32x2, f32x2) -> f32x2 { function %f81(f32x2, f32x2) -> f32x2 {

View File

@@ -67,15 +67,15 @@ block3(v7: r64, v8: r64):
; mov fp, sp ; mov fp, sp
; sub sp, sp, #32 ; sub sp, sp, #32
; block0: ; block0:
; str x1, [sp, #16]
; str x0, [sp, #8] ; str x0, [sp, #8]
; ldr x1, 8 ; b 12 ; data TestCase(%f) + 0 ; str x1, [sp, #16]
; blr x1 ; ldr x3, 8 ; b 12 ; data TestCase(%f) + 0
; mov x3, sp ; blr x3
; mov x2, sp
; ldr x9, [sp, #8] ; ldr x9, [sp, #8]
; str x9, [x3] ; str x9, [x2]
; and w4, w0, #1 ; and w3, w0, #1
; cbz x4, label1 ; b label3 ; cbz x3, label1 ; b label3
; block1: ; block1:
; b label2 ; b label2
; block2: ; block2:
@@ -89,8 +89,8 @@ block3(v7: r64, v8: r64):
; ldr x1, [sp, #16] ; ldr x1, [sp, #16]
; b label5 ; b label5
; block5: ; block5:
; mov x5, sp ; mov x4, sp
; ldr x2, [x5] ; ldr x2, [x4]
; add sp, sp, #32 ; add sp, sp, #32
; ldp fp, lr, [sp], #16 ; ldp fp, lr, [sp], #16
; ret ; ret

View File

@@ -9,8 +9,9 @@ block0(v0: i16x4, v1: i16x4):
} }
; block0: ; block0:
; mov v0.d[1], v0.d[1], v1.d[0] ; mov v4.16b, v0.16b
; sqxtn v0.8b, v0.8h ; mov v4.d[1], v4.d[1], v1.d[0]
; sqxtn v0.8b, v4.8h
; ret ; ret
function %snarrow_i16x8(i16x8, i16x8) -> i8x16 { function %snarrow_i16x8(i16x8, i16x8) -> i8x16 {
@@ -31,8 +32,9 @@ block0(v0: i32x2, v1: i32x2):
} }
; block0: ; block0:
; mov v0.d[1], v0.d[1], v1.d[0] ; mov v4.16b, v0.16b
; sqxtn v0.4h, v0.4s ; mov v4.d[1], v4.d[1], v1.d[0]
; sqxtn v0.4h, v4.4s
; ret ; ret
function %snarrow_i32x4(i32x4, i32x4) -> i16x8 { function %snarrow_i32x4(i32x4, i32x4) -> i16x8 {
@@ -64,8 +66,9 @@ block0(v0: i16x4, v1: i16x4):
} }
; block0: ; block0:
; mov v0.d[1], v0.d[1], v1.d[0] ; mov v4.16b, v0.16b
; sqxtun v0.8b, v0.8h ; mov v4.d[1], v4.d[1], v1.d[0]
; sqxtun v0.8b, v4.8h
; ret ; ret
function %unarrow_i16x8(i16x8, i16x8) -> i8x16 { function %unarrow_i16x8(i16x8, i16x8) -> i8x16 {
@@ -86,8 +89,9 @@ block0(v0: i32x2, v1: i32x2):
} }
; block0: ; block0:
; mov v0.d[1], v0.d[1], v1.d[0] ; mov v4.16b, v0.16b
; sqxtun v0.4h, v0.4s ; mov v4.d[1], v4.d[1], v1.d[0]
; sqxtun v0.4h, v4.4s
; ret ; ret
function %unarrow_i32x4(i32x4, i32x4) -> i16x8 { function %unarrow_i32x4(i32x4, i32x4) -> i16x8 {
@@ -119,8 +123,9 @@ block0(v0: i16x4, v1: i16x4):
} }
; block0: ; block0:
; mov v0.d[1], v0.d[1], v1.d[0] ; mov v4.16b, v0.16b
; uqxtn v0.8b, v0.8h ; mov v4.d[1], v4.d[1], v1.d[0]
; uqxtn v0.8b, v4.8h
; ret ; ret
function %uunarrow_i16x8(i16x8, i16x8) -> i8x16 { function %uunarrow_i16x8(i16x8, i16x8) -> i8x16 {
@@ -141,8 +146,9 @@ block0(v0: i32x2, v1: i32x2):
} }
; block0: ; block0:
; mov v0.d[1], v0.d[1], v1.d[0] ; mov v4.16b, v0.16b
; uqxtn v0.4h, v0.4s ; mov v4.d[1], v4.d[1], v1.d[0]
; uqxtn v0.4h, v4.4s
; ret ; ret
function %uunarrow_i32x4(i32x4, i32x4) -> i16x8 { function %uunarrow_i32x4(i32x4, i32x4) -> i16x8 {

View File

@@ -20,8 +20,9 @@ block0(v0: i32):
; block0: ; block0:
; mov x25, x0 ; mov x25, x0
; elf_tls_get_addr x0, userextname0 ; elf_tls_get_addr x0, userextname0
; mov x7, x25
; mov x1, x0 ; mov x1, x0
; mov x0, x25 ; mov x0, x7
; ldp d8, d9, [sp], #16 ; ldp d8, d9, [sp], #16
; ldp d10, d11, [sp], #16 ; ldp d10, d11, [sp], #16
; ldp d12, d13, [sp], #16 ; ldp d12, d13, [sp], #16

View File

@@ -41,12 +41,13 @@ block0(v0: i64, v1: i16, v2: i16, v3: i64):
; block0: ; block0:
; lgr %r9, %r4 ; lgr %r9, %r4
; sllk %r4, %r5, 3 ; sllk %r4, %r5, 3
; nill %r5, 65532 ; lgr %r2, %r5
; lrvr %r2, %r3 ; nill %r2, 65532
; lrvr %r5, %r3
; lgr %r3, %r9 ; lgr %r3, %r9
; lrvr %r3, %r3 ; lrvr %r3, %r3
; l %r0, 0(%r5) ; l %r0, 0(%r2)
; 0: rll %r1, %r0, 16(%r4) ; rxsbg %r1, %r2, 176, 64, 48 ; jglh 1f ; risbgn %r1, %r3, 48, 64, 48 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r4) ; rxsbg %r1, %r5, 176, 64, 48 ; jglh 1f ; risbgn %r1, %r3, 48, 64, 48 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r2) ; jglh 0b ; 1:
; rll %r2, %r0, 0(%r4) ; rll %r2, %r0, 0(%r4)
; lrvr %r2, %r2 ; lrvr %r2, %r2
; lmg %r9, %r15, 72(%r15) ; lmg %r9, %r15, 72(%r15)
@@ -62,10 +63,11 @@ block0(v0: i64, v1: i8, v2: i8, v3: i64):
; block0: ; block0:
; lgr %r11, %r4 ; lgr %r11, %r4
; sllk %r4, %r5, 3 ; sllk %r4, %r5, 3
; nill %r5, 65532 ; lgr %r2, %r5
; lcr %r2, %r4 ; nill %r2, 65532
; l %r0, 0(%r5) ; lcr %r5, %r4
; 0: rll %r1, %r0, 0(%r4) ; rxsbg %r1, %r3, 160, 40, 24 ; jglh 1f ; risbgn %r1, %r11, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1: ; l %r0, 0(%r2)
; 0: rll %r1, %r0, 0(%r4) ; rxsbg %r1, %r3, 160, 40, 24 ; jglh 1f ; risbgn %r1, %r11, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r2) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r4)
; lmg %r11, %r15, 88(%r15) ; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14

View File

@@ -31,13 +31,17 @@ block0(v0: i64, v1: i16, v2: i16, v3: i64):
return v4 return v4
} }
; stmg %r6, %r15, 48(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; lgr %r6, %r4
; sllk %r4, %r5, 3 ; sllk %r4, %r5, 3
; nill %r5, 65532 ; lgr %r2, %r5
; l %r0, 0(%r5) ; nill %r2, 65532
; 0: rll %r1, %r0, 0(%r4) ; rxsbg %r1, %r3, 160, 48, 16 ; jglh 1f ; risbgn %r1, %r2, 32, 48, 16 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1: ; l %r0, 0(%r2)
; lgr %r5, %r6
; 0: rll %r1, %r0, 0(%r4) ; rxsbg %r1, %r3, 160, 48, 16 ; jglh 1f ; risbgn %r1, %r5, 32, 48, 16 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r2) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r4)
; lmg %r6, %r15, 48(%r15)
; br %r14 ; br %r14
function %atomic_cas_i8(i64, i8, i8, i64) -> i8 { function %atomic_cas_i8(i64, i8, i8, i64) -> i8 {
@@ -50,10 +54,11 @@ block0(v0: i64, v1: i8, v2: i8, v3: i64):
; block0: ; block0:
; lgr %r11, %r4 ; lgr %r11, %r4
; sllk %r4, %r5, 3 ; sllk %r4, %r5, 3
; nill %r5, 65532 ; lgr %r2, %r5
; lcr %r2, %r4 ; nill %r2, 65532
; l %r0, 0(%r5) ; lcr %r5, %r4
; 0: rll %r1, %r0, 0(%r4) ; rxsbg %r1, %r3, 160, 40, 24 ; jglh 1f ; risbgn %r1, %r11, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1: ; l %r0, 0(%r2)
; 0: rll %r1, %r0, 0(%r4) ; rxsbg %r1, %r3, 160, 40, 24 ; jglh 1f ; risbgn %r1, %r11, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r2) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r4)
; lmg %r11, %r15, 88(%r15) ; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14

View File

@@ -32,12 +32,12 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r5, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rnsbg %r1, %r5, 32, 48, 16 ; xilf %r1, 4294901760 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 48, 16 ; xilf %r1, 4294901760 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r2)
; br %r14 ; br %r14
function %atomic_rmw_nand_i8(i64, i64, i8) -> i8 { function %atomic_rmw_nand_i8(i64, i64, i8) -> i8 {
@@ -46,14 +46,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r11, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lcr %r5, %r4 ; lcr %r2, %r11
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rnsbg %r1, %r2, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r11) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 { function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 {
@@ -89,13 +91,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lrvr %r5, %r2 ; lrvr %r4, %r4
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r4) ; rnsbg %r1, %r5, 48, 64, 48 ; xilf %r1, 65535 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r2) ; rnsbg %r1, %r4, 48, 64, 48 ; xilf %r1, 65535 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r3, %r0, 0(%r4) ; rll %r3, %r0, 0(%r2)
; lrvr %r2, %r3 ; lrvr %r2, %r3
; br %r14 ; br %r14
@@ -105,13 +107,15 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r11, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lcr %r5, %r4 ; lcr %r2, %r11
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rnsbg %r1, %r2, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r11) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14

View File

@@ -38,13 +38,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lrvr %r5, %r2 ; lrvr %r4, %r4
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r4) ; risbgn %r1, %r5, 48, 64, 48 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r2) ; risbgn %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r3, %r0, 0(%r4) ; rll %r3, %r0, 0(%r2)
; lrvr %r2, %r3 ; lrvr %r2, %r3
; br %r14 ; br %r14
@@ -54,14 +54,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r11, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lcr %r5, %r4 ; lcr %r2, %r11
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; risbgn %r1, %r2, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r11) ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_add_i64(i64, i64, i64) -> i64 { function %atomic_rmw_add_i64(i64, i64, i64) -> i64 {
@@ -95,13 +97,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; sllk %r5, %r2, 16 ; sllk %r4, %r4, 16
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r4) ; lrvr %r1, %r1 ; ar %r1, %r5 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; ar %r1, %r4 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r3, %r0, 0(%r4) ; rll %r3, %r0, 0(%r2)
; lrvr %r2, %r3 ; lrvr %r2, %r3
; br %r14 ; br %r14
@@ -111,14 +113,17 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; sllk %r2, %r3, 3 ; sllk %r11, %r3, 3
; nill %r3, 65532 ; lgr %r5, %r3
; sllk %r5, %r4, 24 ; nill %r5, 65532
; lcr %r4, %r2 ; sllk %r4, %r4, 24
; l %r0, 0(%r3) ; lcr %r2, %r11
; 0: rll %r1, %r0, 0(%r2) ; ar %r1, %r5 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; l %r0, 0(%r5)
; rll %r2, %r0, 8(%r2) ; 0: rll %r1, %r0, 0(%r11) ; ar %r1, %r4 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_sub_i64(i64, i64, i64) -> i64 { function %atomic_rmw_sub_i64(i64, i64, i64) -> i64 {
@@ -152,13 +157,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; sllk %r5, %r2, 16 ; sllk %r4, %r4, 16
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r4) ; lrvr %r1, %r1 ; sr %r1, %r5 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; sr %r1, %r4 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r3, %r0, 0(%r4) ; rll %r3, %r0, 0(%r2)
; lrvr %r2, %r3 ; lrvr %r2, %r3
; br %r14 ; br %r14
@@ -168,14 +173,17 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; sllk %r2, %r3, 3 ; sllk %r11, %r3, 3
; nill %r3, 65532 ; lgr %r5, %r3
; sllk %r5, %r4, 24 ; nill %r5, 65532
; lcr %r4, %r2 ; sllk %r4, %r4, 24
; l %r0, 0(%r3) ; lcr %r2, %r11
; 0: rll %r1, %r0, 0(%r2) ; sr %r1, %r5 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; l %r0, 0(%r5)
; rll %r2, %r0, 8(%r2) ; 0: rll %r1, %r0, 0(%r11) ; sr %r1, %r4 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_and_i64(i64, i64, i64) -> i64 { function %atomic_rmw_and_i64(i64, i64, i64) -> i64 {
@@ -209,13 +217,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lrvr %r5, %r2 ; lrvr %r4, %r4
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r4) ; rnsbg %r1, %r5, 48, 64, 48 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r2) ; rnsbg %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r3, %r0, 0(%r4) ; rll %r3, %r0, 0(%r2)
; lrvr %r2, %r3 ; lrvr %r2, %r3
; br %r14 ; br %r14
@@ -225,14 +233,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r11, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lcr %r5, %r4 ; lcr %r2, %r11
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rnsbg %r1, %r2, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r11) ; rnsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_or_i64(i64, i64, i64) -> i64 { function %atomic_rmw_or_i64(i64, i64, i64) -> i64 {
@@ -266,13 +276,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lrvr %r5, %r2 ; lrvr %r4, %r4
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r4) ; rosbg %r1, %r5, 48, 64, 48 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r2) ; rosbg %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r3, %r0, 0(%r4) ; rll %r3, %r0, 0(%r2)
; lrvr %r2, %r3 ; lrvr %r2, %r3
; br %r14 ; br %r14
@@ -282,14 +292,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r11, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lcr %r5, %r4 ; lcr %r2, %r11
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rosbg %r1, %r2, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r11) ; rosbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_xor_i64(i64, i64, i64) -> i64 { function %atomic_rmw_xor_i64(i64, i64, i64) -> i64 {
@@ -323,13 +335,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lrvr %r5, %r2 ; lrvr %r4, %r4
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r4) ; rxsbg %r1, %r5, 48, 64, 48 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r2) ; rxsbg %r1, %r4, 48, 64, 48 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r3, %r0, 0(%r4) ; rll %r3, %r0, 0(%r2)
; lrvr %r2, %r3 ; lrvr %r2, %r3
; br %r14 ; br %r14
@@ -339,14 +351,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r11, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lcr %r5, %r4 ; lcr %r2, %r11
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rxsbg %r1, %r2, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r11) ; rxsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 { function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 {
@@ -382,13 +396,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lrvr %r5, %r2 ; lrvr %r4, %r4
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r4) ; rnsbg %r1, %r5, 48, 64, 48 ; xilf %r1, 65535 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r2) ; rnsbg %r1, %r4, 48, 64, 48 ; xilf %r1, 65535 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r3, %r0, 0(%r4) ; rll %r3, %r0, 0(%r2)
; lrvr %r2, %r3 ; lrvr %r2, %r3
; br %r14 ; br %r14
@@ -398,14 +412,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r11, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lcr %r5, %r4 ; lcr %r2, %r11
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rnsbg %r1, %r2, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r11) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_smin_i64(i64, i64, i64) -> i64 { function %atomic_rmw_smin_i64(i64, i64, i64) -> i64 {
@@ -439,13 +455,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; sllk %r5, %r2, 16 ; sllk %r4, %r4, 16
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r4) ; lrvr %r1, %r1 ; cr %r5, %r1 ; jgnl 1f ; risbgn %r1, %r5, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; cr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r3, %r0, 0(%r4) ; rll %r3, %r0, 0(%r2)
; lrvr %r2, %r3 ; lrvr %r2, %r3
; br %r14 ; br %r14
@@ -455,14 +471,17 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; sllk %r2, %r3, 3 ; sllk %r11, %r3, 3
; nill %r3, 65532 ; lgr %r5, %r3
; sllk %r5, %r4, 24 ; nill %r5, 65532
; lcr %r4, %r2 ; sllk %r4, %r4, 24
; l %r0, 0(%r3) ; lcr %r2, %r11
; 0: rll %r1, %r0, 0(%r2) ; cr %r5, %r1 ; jgnl 1f ; risbgn %r1, %r5, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; l %r0, 0(%r5)
; rll %r2, %r0, 8(%r2) ; 0: rll %r1, %r0, 0(%r11) ; cr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_smax_i64(i64, i64, i64) -> i64 { function %atomic_rmw_smax_i64(i64, i64, i64) -> i64 {
@@ -496,13 +515,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; sllk %r5, %r2, 16 ; sllk %r4, %r4, 16
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r4) ; lrvr %r1, %r1 ; cr %r5, %r1 ; jgnh 1f ; risbgn %r1, %r5, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; cr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r3, %r0, 0(%r4) ; rll %r3, %r0, 0(%r2)
; lrvr %r2, %r3 ; lrvr %r2, %r3
; br %r14 ; br %r14
@@ -512,14 +531,17 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; sllk %r2, %r3, 3 ; sllk %r11, %r3, 3
; nill %r3, 65532 ; lgr %r5, %r3
; sllk %r5, %r4, 24 ; nill %r5, 65532
; lcr %r4, %r2 ; sllk %r4, %r4, 24
; l %r0, 0(%r3) ; lcr %r2, %r11
; 0: rll %r1, %r0, 0(%r2) ; cr %r5, %r1 ; jgnh 1f ; risbgn %r1, %r5, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; l %r0, 0(%r5)
; rll %r2, %r0, 8(%r2) ; 0: rll %r1, %r0, 0(%r11) ; cr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_umin_i64(i64, i64, i64) -> i64 { function %atomic_rmw_umin_i64(i64, i64, i64) -> i64 {
@@ -553,13 +575,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; sllk %r5, %r2, 16 ; sllk %r4, %r4, 16
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r4) ; lrvr %r1, %r1 ; clr %r5, %r1 ; jgnl 1f ; risbgn %r1, %r5, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; clr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r3, %r0, 0(%r4) ; rll %r3, %r0, 0(%r2)
; lrvr %r2, %r3 ; lrvr %r2, %r3
; br %r14 ; br %r14
@@ -569,14 +591,17 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; sllk %r2, %r3, 3 ; sllk %r11, %r3, 3
; nill %r3, 65532 ; lgr %r5, %r3
; sllk %r5, %r4, 24 ; nill %r5, 65532
; lcr %r4, %r2 ; sllk %r4, %r4, 24
; l %r0, 0(%r3) ; lcr %r2, %r11
; 0: rll %r1, %r0, 0(%r2) ; clr %r5, %r1 ; jgnl 1f ; risbgn %r1, %r5, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; l %r0, 0(%r5)
; rll %r2, %r0, 8(%r2) ; 0: rll %r1, %r0, 0(%r11) ; clr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_umax_i64(i64, i64, i64) -> i64 { function %atomic_rmw_umax_i64(i64, i64, i64) -> i64 {
@@ -610,13 +635,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; sllk %r5, %r2, 16 ; sllk %r4, %r4, 16
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 16(%r4) ; lrvr %r1, %r1 ; clr %r5, %r1 ; jgnh 1f ; risbgn %r1, %r5, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 16(%r2) ; lrvr %r1, %r1 ; clr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 48, 0 ; lrvr %r1, %r1 ; rll %r1, %r1, 16(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r3, %r0, 0(%r4) ; rll %r3, %r0, 0(%r2)
; lrvr %r2, %r3 ; lrvr %r2, %r3
; br %r14 ; br %r14
@@ -626,13 +651,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; sllk %r2, %r3, 3 ; sllk %r11, %r3, 3
; nill %r3, 65532 ; lgr %r5, %r3
; sllk %r5, %r4, 24 ; nill %r5, 65532
; lcr %r4, %r2 ; sllk %r4, %r4, 24
; l %r0, 0(%r3) ; lcr %r2, %r11
; 0: rll %r1, %r0, 0(%r2) ; clr %r5, %r1 ; jgnh 1f ; risbgn %r1, %r5, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; l %r0, 0(%r5)
; rll %r2, %r0, 8(%r2) ; 0: rll %r1, %r0, 0(%r11) ; clr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14

View File

@@ -36,12 +36,12 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r5, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; risbgn %r1, %r5, 32, 48, 16 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r2) ; risbgn %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r2)
; br %r14 ; br %r14
function %atomic_rmw_xchg_i8(i64, i64, i8) -> i8 { function %atomic_rmw_xchg_i8(i64, i64, i8) -> i8 {
@@ -50,14 +50,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r11, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lcr %r5, %r4 ; lcr %r2, %r11
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; risbgn %r1, %r2, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r11) ; risbgn %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_add_i64(i64, i64) -> i64 { function %atomic_rmw_add_i64(i64, i64) -> i64 {
@@ -87,13 +89,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r5, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; sllk %r5, %r5, 16 ; sllk %r4, %r4, 16
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; ar %r1, %r5 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r2) ; ar %r1, %r4 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r2)
; br %r14 ; br %r14
function %atomic_rmw_add_i8(i64, i64, i8) -> i8 { function %atomic_rmw_add_i8(i64, i64, i8) -> i8 {
@@ -102,14 +104,17 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; sllk %r2, %r3, 3 ; sllk %r11, %r3, 3
; nill %r3, 65532 ; lgr %r5, %r3
; sllk %r5, %r4, 24 ; nill %r5, 65532
; lcr %r4, %r2 ; sllk %r4, %r4, 24
; l %r0, 0(%r3) ; lcr %r2, %r11
; 0: rll %r1, %r0, 0(%r2) ; ar %r1, %r5 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; l %r0, 0(%r5)
; rll %r2, %r0, 8(%r2) ; 0: rll %r1, %r0, 0(%r11) ; ar %r1, %r4 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_sub_i64(i64, i64) -> i64 { function %atomic_rmw_sub_i64(i64, i64) -> i64 {
@@ -141,13 +146,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r5, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; sllk %r5, %r5, 16 ; sllk %r4, %r4, 16
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; sr %r1, %r5 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r2) ; sr %r1, %r4 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r2)
; br %r14 ; br %r14
function %atomic_rmw_sub_i8(i64, i64, i8) -> i8 { function %atomic_rmw_sub_i8(i64, i64, i8) -> i8 {
@@ -156,14 +161,17 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; sllk %r2, %r3, 3 ; sllk %r11, %r3, 3
; nill %r3, 65532 ; lgr %r5, %r3
; sllk %r5, %r4, 24 ; nill %r5, 65532
; lcr %r4, %r2 ; sllk %r4, %r4, 24
; l %r0, 0(%r3) ; lcr %r2, %r11
; 0: rll %r1, %r0, 0(%r2) ; sr %r1, %r5 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; l %r0, 0(%r5)
; rll %r2, %r0, 8(%r2) ; 0: rll %r1, %r0, 0(%r11) ; sr %r1, %r4 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_and_i64(i64, i64) -> i64 { function %atomic_rmw_and_i64(i64, i64) -> i64 {
@@ -193,12 +201,12 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r5, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rnsbg %r1, %r5, 32, 48, 16 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r2)
; br %r14 ; br %r14
function %atomic_rmw_and_i8(i64, i64, i8) -> i8 { function %atomic_rmw_and_i8(i64, i64, i8) -> i8 {
@@ -207,14 +215,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r11, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lcr %r5, %r4 ; lcr %r2, %r11
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rnsbg %r1, %r2, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r11) ; rnsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_or_i64(i64, i64) -> i64 { function %atomic_rmw_or_i64(i64, i64) -> i64 {
@@ -244,12 +254,12 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r5, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rosbg %r1, %r5, 32, 48, 16 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r2) ; rosbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r2)
; br %r14 ; br %r14
function %atomic_rmw_or_i8(i64, i64, i8) -> i8 { function %atomic_rmw_or_i8(i64, i64, i8) -> i8 {
@@ -258,14 +268,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r11, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lcr %r5, %r4 ; lcr %r2, %r11
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rosbg %r1, %r2, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r11) ; rosbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_xor_i64(i64, i64) -> i64 { function %atomic_rmw_xor_i64(i64, i64) -> i64 {
@@ -295,12 +307,12 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r5, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rxsbg %r1, %r5, 32, 48, 16 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r2) ; rxsbg %r1, %r4, 32, 48, 16 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r2)
; br %r14 ; br %r14
function %atomic_rmw_xor_i8(i64, i64, i8) -> i8 { function %atomic_rmw_xor_i8(i64, i64, i8) -> i8 {
@@ -309,14 +321,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r11, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lcr %r5, %r4 ; lcr %r2, %r11
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rxsbg %r1, %r2, 32, 40, 24 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r11) ; rxsbg %r1, %r4, 32, 40, 24 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 { function %atomic_rmw_nand_i64(i64, i64, i64) -> i64 {
@@ -350,12 +364,12 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r5, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rnsbg %r1, %r5, 32, 48, 16 ; xilf %r1, 4294901760 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r2) ; rnsbg %r1, %r4, 32, 48, 16 ; xilf %r1, 4294901760 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r2)
; br %r14 ; br %r14
function %atomic_rmw_nand_i8(i64, i64, i8) -> i8 { function %atomic_rmw_nand_i8(i64, i64, i8) -> i8 {
@@ -364,14 +378,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; lgr %r2, %r4 ; sllk %r11, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; lcr %r5, %r4 ; lcr %r2, %r11
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; rnsbg %r1, %r2, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r5) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r11) ; rnsbg %r1, %r4, 32, 40, 24 ; xilf %r1, 4278190080 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r4) ; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_smin_i64(i64, i64, i64) -> i64 { function %atomic_rmw_smin_i64(i64, i64, i64) -> i64 {
@@ -405,13 +421,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r5, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; sllk %r5, %r5, 16 ; sllk %r4, %r4, 16
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; cr %r5, %r1 ; jgnl 1f ; risbgn %r1, %r5, 32, 48, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 48, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r2)
; br %r14 ; br %r14
function %atomic_rmw_smin_i8(i64, i64, i8) -> i8 { function %atomic_rmw_smin_i8(i64, i64, i8) -> i8 {
@@ -420,14 +436,17 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; sllk %r2, %r3, 3 ; sllk %r11, %r3, 3
; nill %r3, 65532 ; lgr %r5, %r3
; sllk %r5, %r4, 24 ; nill %r5, 65532
; lcr %r4, %r2 ; sllk %r4, %r4, 24
; l %r0, 0(%r3) ; lcr %r2, %r11
; 0: rll %r1, %r0, 0(%r2) ; cr %r5, %r1 ; jgnl 1f ; risbgn %r1, %r5, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; l %r0, 0(%r5)
; rll %r2, %r0, 8(%r2) ; 0: rll %r1, %r0, 0(%r11) ; cr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_smax_i64(i64, i64, i64) -> i64 { function %atomic_rmw_smax_i64(i64, i64, i64) -> i64 {
@@ -461,13 +480,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r5, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; sllk %r5, %r5, 16 ; sllk %r4, %r4, 16
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; cr %r5, %r1 ; jgnh 1f ; risbgn %r1, %r5, 32, 48, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r2) ; cr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 48, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r2)
; br %r14 ; br %r14
function %atomic_rmw_smax_i8(i64, i64, i8) -> i8 { function %atomic_rmw_smax_i8(i64, i64, i8) -> i8 {
@@ -476,14 +495,17 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; sllk %r2, %r3, 3 ; sllk %r11, %r3, 3
; nill %r3, 65532 ; lgr %r5, %r3
; sllk %r5, %r4, 24 ; nill %r5, 65532
; lcr %r4, %r2 ; sllk %r4, %r4, 24
; l %r0, 0(%r3) ; lcr %r2, %r11
; 0: rll %r1, %r0, 0(%r2) ; cr %r5, %r1 ; jgnh 1f ; risbgn %r1, %r5, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; l %r0, 0(%r5)
; rll %r2, %r0, 8(%r2) ; 0: rll %r1, %r0, 0(%r11) ; cr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_umin_i64(i64, i64, i64) -> i64 { function %atomic_rmw_umin_i64(i64, i64, i64) -> i64 {
@@ -517,13 +539,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r5, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; sllk %r5, %r5, 16 ; sllk %r4, %r4, 16
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; clr %r5, %r1 ; jgnl 1f ; risbgn %r1, %r5, 32, 48, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 48, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r2)
; br %r14 ; br %r14
function %atomic_rmw_umin_i8(i64, i64, i8) -> i8 { function %atomic_rmw_umin_i8(i64, i64, i8) -> i8 {
@@ -532,14 +554,17 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; sllk %r2, %r3, 3 ; sllk %r11, %r3, 3
; nill %r3, 65532 ; lgr %r5, %r3
; sllk %r5, %r4, 24 ; nill %r5, 65532
; lcr %r4, %r2 ; sllk %r4, %r4, 24
; l %r0, 0(%r3) ; lcr %r2, %r11
; 0: rll %r1, %r0, 0(%r2) ; clr %r5, %r1 ; jgnl 1f ; risbgn %r1, %r5, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; l %r0, 0(%r5)
; rll %r2, %r0, 8(%r2) ; 0: rll %r1, %r0, 0(%r11) ; clr %r4, %r1 ; jgnl 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14
function %atomic_rmw_umax_i64(i64, i64, i64) -> i64 { function %atomic_rmw_umax_i64(i64, i64, i64) -> i64 {
@@ -573,13 +598,13 @@ block0(v0: i64, v1: i64, v2: i16):
} }
; block0: ; block0:
; lgr %r5, %r4 ; sllk %r2, %r3, 3
; sllk %r4, %r3, 3 ; lgr %r5, %r3
; nill %r3, 65532 ; nill %r5, 65532
; sllk %r5, %r5, 16 ; sllk %r4, %r4, 16
; l %r0, 0(%r3) ; l %r0, 0(%r5)
; 0: rll %r1, %r0, 0(%r4) ; clr %r5, %r1 ; jgnh 1f ; risbgn %r1, %r5, 32, 48, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; 0: rll %r1, %r0, 0(%r2) ; clr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 48, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 16(%r4) ; rll %r2, %r0, 16(%r2)
; br %r14 ; br %r14
function %atomic_rmw_umax_i8(i64, i64, i8) -> i8 { function %atomic_rmw_umax_i8(i64, i64, i8) -> i8 {
@@ -588,13 +613,16 @@ block0(v0: i64, v1: i64, v2: i8):
return v3 return v3
} }
; stmg %r11, %r15, 88(%r15)
; block0: ; block0:
; sllk %r2, %r3, 3 ; sllk %r11, %r3, 3
; nill %r3, 65532 ; lgr %r5, %r3
; sllk %r5, %r4, 24 ; nill %r5, 65532
; lcr %r4, %r2 ; sllk %r4, %r4, 24
; l %r0, 0(%r3) ; lcr %r2, %r11
; 0: rll %r1, %r0, 0(%r2) ; clr %r5, %r1 ; jgnh 1f ; risbgn %r1, %r5, 32, 40, 0 ; rll %r1, %r1, 0(%r4) ; cs %r0, %r1, 0(%r3) ; jglh 0b ; 1: ; l %r0, 0(%r5)
; rll %r2, %r0, 8(%r2) ; 0: rll %r1, %r0, 0(%r11) ; clr %r4, %r1 ; jgnh 1f ; risbgn %r1, %r4, 32, 40, 0 ; rll %r1, %r1, 0(%r2) ; cs %r0, %r1, 0(%r5) ; jglh 0b ; 1:
; rll %r2, %r0, 8(%r11)
; lmg %r11, %r15, 88(%r15)
; br %r14 ; br %r14

View File

@@ -347,9 +347,10 @@ block0(v0: i32):
} }
; block0: ; block0:
; oihl %r2, 1 ; lgr %r5, %r2
; lcgr %r3, %r2 ; oihl %r5, 1
; ngrk %r5, %r2, %r3 ; lcgr %r3, %r5
; ngr %r5, %r3
; flogr %r0, %r5 ; flogr %r0, %r5
; lhi %r4, 63 ; lhi %r4, 63
; srk %r2, %r4, %r0 ; srk %r2, %r4, %r0
@@ -362,9 +363,10 @@ block0(v0: i16):
} }
; block0: ; block0:
; oilh %r2, 1 ; lgr %r5, %r2
; lcgr %r3, %r2 ; oilh %r5, 1
; ngrk %r5, %r2, %r3 ; lcgr %r3, %r5
; ngr %r5, %r3
; flogr %r0, %r5 ; flogr %r0, %r5
; lhi %r4, 63 ; lhi %r4, 63
; srk %r2, %r4, %r0 ; srk %r2, %r4, %r0
@@ -377,9 +379,10 @@ block0(v0: i8):
} }
; block0: ; block0:
; oill %r2, 256 ; lgr %r5, %r2
; lcgr %r3, %r2 ; oill %r5, 256
; ngrk %r5, %r2, %r3 ; lcgr %r3, %r5
; ngr %r5, %r3
; flogr %r0, %r5 ; flogr %r0, %r5
; lhi %r4, 63 ; lhi %r4, 63
; srk %r2, %r4, %r0 ; srk %r2, %r4, %r0

View File

@@ -597,8 +597,9 @@ block0(v0: i32, v1: i32, v2: i32):
; block0: ; block0:
; nr %r3, %r2 ; nr %r3, %r2
; xilf %r2, 4294967295 ; lgr %r5, %r2
; nr %r4, %r2 ; xilf %r5, 4294967295
; nr %r4, %r5
; ork %r2, %r4, %r3 ; ork %r2, %r4, %r3
; br %r14 ; br %r14
@@ -610,8 +611,9 @@ block0(v0: i16, v1: i16, v2: i16):
; block0: ; block0:
; nr %r3, %r2 ; nr %r3, %r2
; xilf %r2, 4294967295 ; lgr %r5, %r2
; nr %r4, %r2 ; xilf %r5, 4294967295
; nr %r4, %r5
; ork %r2, %r4, %r3 ; ork %r2, %r4, %r3
; br %r14 ; br %r14
@@ -623,8 +625,9 @@ block0(v0: i8, v1: i8, v2: i8):
; block0: ; block0:
; nr %r3, %r2 ; nr %r3, %r2
; xilf %r2, 4294967295 ; lgr %r5, %r2
; nr %r4, %r2 ; xilf %r5, 4294967295
; nr %r4, %r5
; ork %r2, %r4, %r3 ; ork %r2, %r4, %r3
; br %r14 ; br %r14

View File

@@ -46,7 +46,8 @@ block0(v0: i32):
} }
; block0: ; block0:
; llgfr %r2, %r2 ; lgr %r5, %r2
; llgfr %r2, %r5
; br %r14 ; br %r14
function %call_uext(i32) -> i64 { function %call_uext(i32) -> i64 {
@@ -73,7 +74,8 @@ block0(v0: i32):
} }
; block0: ; block0:
; lgfr %r2, %r2 ; lgr %r5, %r2
; lgfr %r2, %r5
; br %r14 ; br %r14
function %call_colocated(i64) -> i64 { function %call_colocated(i64) -> i64 {

View File

@@ -153,13 +153,14 @@ block0(v0: i16, v1: i16):
} }
; block0: ; block0:
; lgr %r4, %r3
; llhr %r2, %r2 ; llhr %r2, %r2
; lcr %r4, %r3 ; lcr %r3, %r4
; nill %r3, 15
; nill %r4, 15 ; nill %r4, 15
; sllk %r4, %r2, 0(%r4) ; nill %r3, 15
; srlk %r5, %r2, 0(%r3) ; sllk %r3, %r2, 0(%r3)
; ork %r2, %r4, %r5 ; srlk %r4, %r2, 0(%r4)
; ork %r2, %r3, %r4
; br %r14 ; br %r14
function %rotr_i16_imm(i16) -> i16 { function %rotr_i16_imm(i16) -> i16 {
@@ -201,13 +202,14 @@ block0(v0: i8, v1: i8):
} }
; block0: ; block0:
; lgr %r4, %r3
; llcr %r2, %r2 ; llcr %r2, %r2
; lcr %r4, %r3 ; lcr %r3, %r4
; nill %r3, 7
; nill %r4, 7 ; nill %r4, 7
; sllk %r4, %r2, 0(%r4) ; nill %r3, 7
; srlk %r5, %r2, 0(%r3) ; sllk %r3, %r2, 0(%r3)
; ork %r2, %r4, %r5 ; srlk %r4, %r2, 0(%r4)
; ork %r2, %r3, %r4
; br %r14 ; br %r14
function %rotr_i8_imm(i8) -> i8 { function %rotr_i8_imm(i8) -> i8 {
@@ -578,8 +580,9 @@ block0(v0: i16, v1: i16):
; block0: ; block0:
; llhr %r2, %r2 ; llhr %r2, %r2
; nill %r3, 15 ; lgr %r4, %r3
; srlk %r2, %r2, 0(%r3) ; nill %r4, 15
; srlk %r2, %r2, 0(%r4)
; br %r14 ; br %r14
function %ushr_i16_imm(i16) -> i16 { function %ushr_i16_imm(i16) -> i16 {
@@ -616,8 +619,9 @@ block0(v0: i8, v1: i8):
; block0: ; block0:
; llcr %r2, %r2 ; llcr %r2, %r2
; nill %r3, 7 ; lgr %r4, %r3
; srlk %r2, %r2, 0(%r3) ; nill %r4, 7
; srlk %r2, %r2, 0(%r4)
; br %r14 ; br %r14
function %ushr_i8_imm(i8) -> i8 { function %ushr_i8_imm(i8) -> i8 {
@@ -950,8 +954,9 @@ block0(v0: i16, v1: i16):
; block0: ; block0:
; lhr %r2, %r2 ; lhr %r2, %r2
; nill %r3, 15 ; lgr %r4, %r3
; srak %r2, %r2, 0(%r3) ; nill %r4, 15
; srak %r2, %r2, 0(%r4)
; br %r14 ; br %r14
function %sshr_i16_imm(i16) -> i16 { function %sshr_i16_imm(i16) -> i16 {
@@ -988,8 +993,9 @@ block0(v0: i8, v1: i8):
; block0: ; block0:
; lbr %r2, %r2 ; lbr %r2, %r2
; nill %r3, 7 ; lgr %r4, %r3
; srak %r2, %r2, 0(%r3) ; nill %r4, 7
; srak %r2, %r2, 0(%r4)
; br %r14 ; br %r14
function %sshr_i8_imm(i8) -> i8 { function %sshr_i8_imm(i8) -> i8 {

View File

@@ -153,8 +153,9 @@ block0(v0: i64, v1: i32, v2: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; addl %esi, %edx, %esi ; movq %rsi, %r9
; movq -1(%rdi,%rsi,4), %rax ; addl %r9d, %edx, %r9d
; movq -1(%rdi,%r9,4), %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -11,8 +11,8 @@ block0(v0: b1, v1: i32, v2: i32):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; testb $1, %dil ; testb $1, %dil
; cmovnzl %esi, %edx, %edx
; movq %rdx, %rax ; movq %rdx, %rax
; cmovnzl %esi, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -147,8 +147,8 @@ block0(v0: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; shrq $63, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shrq $63, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -163,8 +163,8 @@ block0(v0: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; shrl $31, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shrl $31, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -179,8 +179,8 @@ block0(v0: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; shrq $63, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shrq $63, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -195,8 +195,8 @@ block0(v0: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; shrl $31, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shrl $31, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -211,9 +211,9 @@ block0(v0: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; notq %rdi, %rdi
; shrq $63, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; notq %rax, %rax
; shrq $63, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -228,9 +228,9 @@ block0(v0: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; notq %rdi, %rdi
; shrl $31, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; notq %rax, %rax
; shrl $31, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -245,9 +245,9 @@ block0(v0: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; notq %rdi, %rdi
; shrq $63, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; notq %rax, %rax
; shrq $63, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -262,9 +262,9 @@ block0(v0: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; notq %rdi, %rdi
; shrl $31, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; notq %rax, %rax
; shrl $31, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -10,8 +10,8 @@ block0(v0: i32, v1: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; addl %edi, %esi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; addl %eax, %esi, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -12,11 +12,10 @@ block0(v0: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdi, %rcx
; subq %rsp, $32, %rsp ; subq %rsp, $32, %rsp
; virtual_sp_offset_adjust 32 ; virtual_sp_offset_adjust 32
; movq %rdi, %rcx ; call *%rcx
; movq %rcx, %rdi
; call *%rdi
; addq %rsp, $32, %rsp ; addq %rsp, $32, %rsp
; virtual_sp_offset_adjust -32 ; virtual_sp_offset_adjust -32
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -36,20 +35,16 @@ block0(v0: i32, v1: f32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdi, %r10
; movdqa %xmm0, %xmm6 ; movdqa %xmm0, %xmm6
; subq %rsp, $32, %rsp ; subq %rsp, $32, %rsp
; virtual_sp_offset_adjust 32 ; virtual_sp_offset_adjust 32
; movq %r10, %rcx ; movq %rdi, %rcx
; movdqa %xmm6, %xmm1 ; movdqa %xmm6, %xmm1
; movq %r10, %rdi
; movdqa %xmm1, %xmm6
; call *%rdi ; call *%rdi
; addq %rsp, $32, %rsp ; addq %rsp, $32, %rsp
; virtual_sp_offset_adjust -32 ; virtual_sp_offset_adjust -32
; movq %rdi, %r10
; movdqa %xmm6, %xmm0 ; movdqa %xmm6, %xmm0
; call *%r10 ; call *%rdi
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -130,22 +125,19 @@ block0(
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdx, %r10 ; movq %rcx, %rax
; movq %rdx, %rcx
; movq %rsi, %rdx ; movq %rsi, %rdx
; movq %r8, %rsi ; movq %rdi, %rsi
; movq %r10, %r8 ; movq %rax, %rdi
; movq %r9, %rax
; movq %rcx, %r9
; movq 16(%rbp), %r11 ; movq 16(%rbp), %r11
; movq 24(%rbp), %r10 ; movq 24(%rbp), %r10
; movss 32(%rbp), %xmm9 ; movss 32(%rbp), %xmm9
; movsd 40(%rbp), %xmm8 ; movsd 40(%rbp), %xmm8
; subq %rsp, $144, %rsp ; subq %rsp, $144, %rsp
; virtual_sp_offset_adjust 144 ; virtual_sp_offset_adjust 144
; movq %rdi, %rcx ; movq %r8, 32(%rsp)
; movq %rsi, 32(%rsp) ; movq %r9, 40(%rsp)
; movq %rax, %rsi
; movq %rsi, 40(%rsp)
; movsd %xmm0, 48(%rsp) ; movsd %xmm0, 48(%rsp)
; movsd %xmm1, 56(%rsp) ; movsd %xmm1, 56(%rsp)
; movsd %xmm2, 64(%rsp) ; movsd %xmm2, 64(%rsp)
@@ -158,7 +150,10 @@ block0(
; movl %r10d, 120(%rsp) ; movl %r10d, 120(%rsp)
; movss %xmm9, 128(%rsp) ; movss %xmm9, 128(%rsp)
; movsd %xmm8, 136(%rsp) ; movsd %xmm8, 136(%rsp)
; call *%rdi ; movq %rdi, %r9
; movq %rcx, %r8
; movq %rsi, %rcx
; call *%rcx
; addq %rsp, $144, %rsp ; addq %rsp, $144, %rsp
; virtual_sp_offset_adjust -144 ; virtual_sp_offset_adjust -144
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -180,16 +175,15 @@ block0(v0: i64, v1:i64, v2:i64, v3:i64, v4:i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %r8, %r10 ; movq %rdx, %r11
; movq %rdx, %r8 ; movq %rcx, %r9
; movq %rcx, %rax ; movq %rsi, %rdx
; movq %rdi, %rcx
; subq %rsp, $48, %rsp ; subq %rsp, $48, %rsp
; virtual_sp_offset_adjust 48 ; virtual_sp_offset_adjust 48
; movq %rdi, %rcx ; movq %r8, 32(%rsp)
; movq %rsi, %rdx ; movq %r11, %r8
; movq %rax, %r9 ; call *%rcx
; movq %r10, 32(%rsp)
; call *%rdi
; addq %rsp, $48, %rsp ; addq %rsp, $48, %rsp
; virtual_sp_offset_adjust -48 ; virtual_sp_offset_adjust -48
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -206,24 +200,23 @@ block0(v0: i32, v1: f32, v2: i64, v3: f64, v4: i32, v5: i32, v6: i32, v7: f32, v
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rcx, %r10 ; movq %rsi, %r9
; movq %r8, %r9 ; movq %rdi, %rsi
; movdqa %xmm1, %xmm6 ; movdqa %xmm1, %xmm12
; movdqa %xmm3, %xmm8 ; movdqa %xmm0, %xmm1
; subq %rsp, $96, %rsp ; subq %rsp, $96, %rsp
; virtual_sp_offset_adjust 96 ; virtual_sp_offset_adjust 96
; movq %rdi, %rcx
; movdqa %xmm0, %xmm1
; movq %rsi, %r8
; movdqa %xmm6, %xmm3
; movl %edx, 32(%rsp) ; movl %edx, 32(%rsp)
; movl %r10d, 40(%rsp) ; movl %ecx, 40(%rsp)
; movl %r9d, 48(%rsp) ; movl %r8d, 48(%rsp)
; movss %xmm2, 56(%rsp) ; movss %xmm2, 56(%rsp)
; movsd %xmm8, 64(%rsp) ; movsd %xmm3, 64(%rsp)
; movss %xmm4, 72(%rsp) ; movss %xmm4, 72(%rsp)
; movsd %xmm5, 80(%rsp) ; movsd %xmm5, 80(%rsp)
; call *%rdi ; movq %rsi, %rcx
; movq %r9, %r8
; movdqa %xmm12, %xmm3
; call *%rcx
; addq %rsp, $96, %rsp ; addq %rsp, $96, %rsp
; virtual_sp_offset_adjust -96 ; virtual_sp_offset_adjust -96
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -240,8 +233,7 @@ block0(v0: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdi, %rcx ; call *%rdi
; call *%rcx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -256,8 +248,7 @@ block0(v0: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdi, %rcx ; call *%rdi
; call *%rcx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -301,8 +292,9 @@ block0:
; movq %rdi, %r13 ; movq %rdi, %r13
; movl $1, %edx ; movl $1, %edx
; call *%rdx ; call *%rdx
; movq %rdx, %r9
; movq %r13, %rdi ; movq %r13, %rdi
; movl %edx, 0(%rdi) ; movl %r9d, 0(%rdi)
; movq 0(%rsp), %r13 ; movq 0(%rsp), %r13
; addq %rsp, $16, %rsp ; addq %rsp, $16, %rsp
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -328,12 +320,13 @@ block0:
; virtual_sp_offset_adjust 16 ; virtual_sp_offset_adjust 16
; lea 0(%rsp), %rdi ; lea 0(%rsp), %rdi
; call *%r8 ; call *%r8
; movq 0(%rsp), %r11 ; movq %rdx, %rcx
; movq 0(%rsp), %rdx
; addq %rsp, $16, %rsp ; addq %rsp, $16, %rsp
; virtual_sp_offset_adjust -16 ; virtual_sp_offset_adjust -16
; movq %rbx, %rdi ; movq %rbx, %rdi
; movq %rdx, 0(%rdi) ; movq %rcx, 0(%rdi)
; movl %r11d, 8(%rdi) ; movl %edx, 8(%rdi)
; movq 0(%rsp), %rbx ; movq 0(%rsp), %rbx
; addq %rsp, $16, %rsp ; addq %rsp, $16, %rsp
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -356,10 +349,13 @@ block0:
; movq %rdi, %r12 ; movq %rdi, %r12
; movl $1, %r9d ; movl $1, %r9d
; call *%r9 ; call *%r9
; movq %rax, %r9
; movq %rdx, %r11
; movdqa %xmm1, %xmm10
; movq %r12, %rdi ; movq %r12, %rdi
; movq %rax, 0(%rdi) ; movq %r9, 0(%rdi)
; movl %edx, 8(%rdi) ; movl %r11d, 8(%rdi)
; movss %xmm1, 12(%rdi) ; movss %xmm10, 12(%rdi)
; movq 0(%rsp), %r12 ; movq 0(%rsp), %r12
; addq %rsp, $16, %rsp ; addq %rsp, $16, %rsp
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -377,16 +373,19 @@ block0(v0: f32, v1: i64, v2: i32, v3: f32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; subq %rsp, $16, %rsp ; subq %rsp, $16, %rsp
; movq %rbx, 0(%rsp) ; movq %r13, 0(%rsp)
; block0: ; block0:
; movq %rdx, %rbx ; movq %rdx, %r13
; movl $1, %eax ; movl $1, %eax
; call *%rax ; call *%rax
; movq %rbx, %rcx ; movq %rax, %rdi
; movq %rax, 0(%rcx) ; movq %rdx, %rcx
; movl %edx, 8(%rcx) ; movdqa %xmm1, %xmm14
; movss %xmm1, 12(%rcx) ; movq %r13, %rdx
; movq 0(%rsp), %rbx ; movq %rdi, 0(%rdx)
; movl %ecx, 8(%rdx)
; movss %xmm14, 12(%rdx)
; movq 0(%rsp), %r13
; addq %rsp, $16, %rsp ; addq %rsp, $16, %rsp
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp

View File

@@ -10,8 +10,8 @@ block0(v0: f32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; load_ext_name %CeilF32+0, %r8 ; load_ext_name %CeilF32+0, %rdx
; call *%r8 ; call *%rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -25,8 +25,8 @@ block0(v0: f64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; load_ext_name %CeilF64+0, %r8 ; load_ext_name %CeilF64+0, %rdx
; call *%r8 ; call *%rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -18,8 +18,8 @@ block0(v0: i64, v1: i64):
; setz %al ; setz %al
; andq %rax, $1, %rax ; andq %rax, $1, %rax
; cmpq %r11, %rdi ; cmpq %r11, %rdi
; cmovzq %rdi, %rsi, %rsi
; movq %rsi, %rdx ; movq %rsi, %rdx
; cmovzq %rdi, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -17,9 +17,8 @@ block0(v0: i8, v1: i8):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; xorl %r10d, %r10d, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; xorl %edx, %edx, %edx
; srem_seq %al, %dl, %sil, %al, %dl, tmp=(none) ; srem_seq %al, %dl, %sil, %al, %dl, tmp=(none)
; shrq $8, %rax, %rax ; shrq $8, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -36,9 +35,8 @@ block0(v0: i16, v1: i16):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; xorl %r10d, %r10d, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; xorl %edx, %edx, %edx
; srem_seq %ax, %dx, %si, %ax, %dx, tmp=(none) ; srem_seq %ax, %dx, %si, %ax, %dx, tmp=(none)
; movq %rdx, %rax ; movq %rdx, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -55,9 +53,8 @@ block0(v0: i32, v1: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; xorl %r10d, %r10d, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; xorl %edx, %edx, %edx
; srem_seq %eax, %edx, %esi, %eax, %edx, tmp=(none) ; srem_seq %eax, %edx, %esi, %eax, %edx, tmp=(none)
; movq %rdx, %rax ; movq %rdx, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -74,9 +71,8 @@ block0(v0: i64, v1: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; xorl %r10d, %r10d, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; xorl %edx, %edx, %edx
; srem_seq %rax, %rdx, %rsi, %rax, %rdx, tmp=(none) ; srem_seq %rax, %rdx, %rsi, %rax, %rdx, tmp=(none)
; movq %rdx, %rax ; movq %rdx, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp

View File

@@ -149,20 +149,25 @@ block0(v0: i64):
; pushq %rbp ; pushq %rbp
; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 } ; unwind PushFrameRegs { offset_upward_to_caller_sp: 16 }
; movq %rsp, %rbp ; movq %rsp, %rbp
; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 0 } ; unwind DefineNewFrame { offset_upward_to_caller_sp: 16, offset_downward_to_clobbers: 16 }
; subq %rsp, $16, %rsp
; movq %rsi, 0(%rsp)
; unwind SaveReg { clobber_offset: 0, reg: p6i }
; block0: ; block0:
; cvtsi2sd %rcx, %xmm2 ; cvtsi2sd %rcx, %xmm3
; subq %rsp, $48, %rsp ; subq %rsp, $48, %rsp
; virtual_sp_offset_adjust 48 ; virtual_sp_offset_adjust 48
; movq %rcx, 32(%rsp)
; movq %rcx, 40(%rsp)
; movq %rcx, %rdx ; movq %rcx, %rdx
; movq %rdx, %r8 ; load_ext_name %g+0, %rsi
; movdqa %xmm2, %xmm3 ; movq %rdx, %rcx
; movq %r8, 32(%rsp) ; movdqa %xmm3, %xmm2
; movq %r8, 40(%rsp) ; call *%rsi
; load_ext_name %g+0, %r8
; call *%r8
; addq %rsp, $48, %rsp ; addq %rsp, $48, %rsp
; virtual_sp_offset_adjust -48 ; virtual_sp_offset_adjust -48
; movq 0(%rsp), %rsi
; addq %rsp, $16, %rsp
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -190,10 +190,11 @@ block0(v0: i32x4):
; movdqa %xmm0, %xmm4 ; movdqa %xmm0, %xmm4
; pslld %xmm4, $16, %xmm4 ; pslld %xmm4, $16, %xmm4
; psrld %xmm4, $16, %xmm4 ; psrld %xmm4, $16, %xmm4
; psubd %xmm0, %xmm4, %xmm0 ; movdqa %xmm0, %xmm10
; psubd %xmm10, %xmm4, %xmm10
; cvtdq2ps %xmm4, %xmm9 ; cvtdq2ps %xmm4, %xmm9
; psrld %xmm0, $1, %xmm0 ; psrld %xmm10, $1, %xmm10
; cvtdq2ps %xmm0, %xmm0 ; cvtdq2ps %xmm10, %xmm0
; addps %xmm0, %xmm0, %xmm0 ; addps %xmm0, %xmm0, %xmm0
; addps %xmm0, %xmm9, %xmm0 ; addps %xmm0, %xmm9, %xmm0
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -434,14 +435,15 @@ block0(v0: f32x4):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; pxor %xmm3, %xmm3, %xmm3 ; pxor %xmm3, %xmm3, %xmm3
; maxps %xmm0, %xmm3, %xmm0 ; movdqa %xmm0, %xmm10
; maxps %xmm10, %xmm3, %xmm10
; pcmpeqd %xmm8, %xmm8, %xmm8 ; pcmpeqd %xmm8, %xmm8, %xmm8
; psrld %xmm8, $1, %xmm8 ; psrld %xmm8, $1, %xmm8
; cvtdq2ps %xmm8, %xmm14 ; cvtdq2ps %xmm8, %xmm14
; cvttps2dq %xmm0, %xmm13 ; cvttps2dq %xmm10, %xmm13
; subps %xmm0, %xmm14, %xmm0 ; subps %xmm10, %xmm14, %xmm10
; cmpps $2, %xmm14, %xmm0, %xmm14 ; cmpps $2, %xmm14, %xmm10, %xmm14
; cvttps2dq %xmm0, %xmm0 ; cvttps2dq %xmm10, %xmm0
; pxor %xmm0, %xmm14, %xmm0 ; pxor %xmm0, %xmm14, %xmm0
; pxor %xmm7, %xmm7, %xmm7 ; pxor %xmm7, %xmm7, %xmm7
; pmaxsd %xmm0, %xmm7, %xmm0 ; pmaxsd %xmm0, %xmm7, %xmm0
@@ -461,9 +463,10 @@ block0(v0: f32x4):
; block0: ; block0:
; movdqa %xmm0, %xmm5 ; movdqa %xmm0, %xmm5
; cmpps $0, %xmm5, %xmm0, %xmm5 ; cmpps $0, %xmm5, %xmm0, %xmm5
; andps %xmm0, %xmm5, %xmm0 ; movdqa %xmm0, %xmm6
; pxor %xmm5, %xmm0, %xmm5 ; andps %xmm6, %xmm5, %xmm6
; cvttps2dq %xmm0, %xmm9 ; pxor %xmm5, %xmm6, %xmm5
; cvttps2dq %xmm6, %xmm9
; movdqa %xmm9, %xmm0 ; movdqa %xmm9, %xmm0
; pand %xmm0, %xmm5, %xmm0 ; pand %xmm0, %xmm5, %xmm0
; psrad %xmm0, $31, %xmm0 ; psrad %xmm0, $31, %xmm0

View File

@@ -10,8 +10,8 @@ block0(v0: f32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; load_ext_name %FloorF32+0, %r8 ; load_ext_name %FloorF32+0, %rdx
; call *%r8 ; call *%rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -25,8 +25,8 @@ block0(v0: f64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; load_ext_name %FloorF64+0, %r8 ; load_ext_name %FloorF64+0, %rdx
; call *%r8 ; call *%rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -10,8 +10,8 @@ block0(v0: f32, v1: f32, v2: f32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; load_ext_name %FmaF32+0, %rsi ; load_ext_name %FmaF32+0, %r9
; call *%rsi ; call *%r9
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -25,8 +25,8 @@ block0(v0: f64, v1: f64, v2: f64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; load_ext_name %FmaF64+0, %rsi ; load_ext_name %FmaF64+0, %r9
; call *%rsi ; call *%r9
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -11,10 +11,10 @@ block0(v0: i128, v1: i128):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; addq %rdi, %rdx, %rdi
; adcq %rsi, %rcx, %rsi
; movq %rdi, %rax ; movq %rdi, %rax
; addq %rax, %rdx, %rax
; movq %rsi, %rdx ; movq %rsi, %rdx
; adcq %rdx, %rcx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -28,10 +28,10 @@ block0(v0: i128, v1: i128):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; subq %rdi, %rdx, %rdi
; sbbq %rsi, %rcx, %rsi
; movq %rdi, %rax ; movq %rdi, %rax
; subq %rax, %rdx, %rax
; movq %rsi, %rdx ; movq %rsi, %rdx
; sbbq %rdx, %rcx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -45,10 +45,10 @@ block0(v0: i128, v1: i128):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; andq %rdi, %rdx, %rdi
; andq %rsi, %rcx, %rsi
; movq %rdi, %rax ; movq %rdi, %rax
; andq %rax, %rdx, %rax
; movq %rsi, %rdx ; movq %rsi, %rdx
; andq %rdx, %rcx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -62,10 +62,10 @@ block0(v0: i128, v1: i128):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; orq %rdi, %rdx, %rdi
; orq %rsi, %rcx, %rsi
; movq %rdi, %rax ; movq %rdi, %rax
; orq %rax, %rdx, %rax
; movq %rsi, %rdx ; movq %rsi, %rdx
; orq %rdx, %rcx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -79,10 +79,10 @@ block0(v0: i128, v1: i128):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; xorq %rdi, %rdx, %rdi
; xorq %rsi, %rcx, %rsi
; movq %rdi, %rax ; movq %rdi, %rax
; xorq %rax, %rdx, %rax
; movq %rsi, %rdx ; movq %rsi, %rdx
; xorq %rdx, %rcx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -96,10 +96,10 @@ block0(v0: i128):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; notq %rdi, %rdi
; notq %rsi, %rsi
; movq %rdi, %rax ; movq %rdi, %rax
; notq %rax, %rax
; movq %rsi, %rdx ; movq %rsi, %rdx
; notq %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -115,11 +115,11 @@ block0(v0: i128, v1: i128):
; block0: ; block0:
; movq %rdi, %r8 ; movq %rdi, %r8
; imulq %r8, %rcx, %r8 ; imulq %r8, %rcx, %r8
; movq %rdi, %rax
; imulq %rsi, %rdx, %rsi ; imulq %rsi, %rdx, %rsi
; movq %r8, %r9 ; movq %r8, %r9
; addq %r9, %rsi, %r9 ; addq %r9, %rsi, %r9
; movq %r9, %r8 ; movq %r9, %r8
; movq %rdi, %rax
; mul %rax, %rdx, %rax, %rdx ; mul %rax, %rdx, %rax, %rdx
; movq %r8, %rdi ; movq %r8, %rdi
; addq %rdi, %rdx, %rdi ; addq %rdi, %rdx, %rdi
@@ -466,9 +466,9 @@ block0(v0: b1):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; andq %rdi, $1, %rdi
; xorq %rdx, %rdx, %rdx
; movq %rdi, %rax ; movq %rdi, %rax
; andq %rax, $1, %rax
; xorq %rdx, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -486,16 +486,17 @@ block0(v0: i128):
; shrq $1, %rdx, %rdx ; shrq $1, %rdx, %rdx
; movabsq $8608480567731124087, %r10 ; movabsq $8608480567731124087, %r10
; andq %rdx, %r10, %rdx ; andq %rdx, %r10, %rdx
; subq %rdi, %rdx, %rdi ; movq %rdi, %r11
; subq %r11, %rdx, %r11
; shrq $1, %rdx, %rdx ; shrq $1, %rdx, %rdx
; andq %rdx, %r10, %rdx ; andq %rdx, %r10, %rdx
; subq %rdi, %rdx, %rdi ; subq %r11, %rdx, %r11
; shrq $1, %rdx, %rdx ; shrq $1, %rdx, %rdx
; andq %rdx, %r10, %rdx ; andq %rdx, %r10, %rdx
; subq %rdi, %rdx, %rdi ; subq %r11, %rdx, %r11
; movq %rdi, %rax ; movq %r11, %rax
; shrq $4, %rax, %rax ; shrq $4, %rax, %rax
; addq %rax, %rdi, %rax ; addq %rax, %r11, %rax
; movabsq $1085102592571150095, %rcx ; movabsq $1085102592571150095, %rcx
; andq %rax, %rcx, %rax ; andq %rax, %rcx, %rax
; movabsq $72340172838076673, %r9 ; movabsq $72340172838076673, %r9
@@ -505,16 +506,17 @@ block0(v0: i128):
; shrq $1, %rcx, %rcx ; shrq $1, %rcx, %rcx
; movabsq $8608480567731124087, %r8 ; movabsq $8608480567731124087, %r8
; andq %rcx, %r8, %rcx ; andq %rcx, %r8, %rcx
; subq %rsi, %rcx, %rsi ; movq %rsi, %r9
; subq %r9, %rcx, %r9
; shrq $1, %rcx, %rcx ; shrq $1, %rcx, %rcx
; andq %rcx, %r8, %rcx ; andq %rcx, %r8, %rcx
; subq %rsi, %rcx, %rsi ; subq %r9, %rcx, %r9
; shrq $1, %rcx, %rcx ; shrq $1, %rcx, %rcx
; andq %rcx, %r8, %rcx ; andq %rcx, %r8, %rcx
; subq %rsi, %rcx, %rsi ; subq %r9, %rcx, %r9
; movq %rsi, %rcx ; movq %r9, %rcx
; shrq $4, %rcx, %rcx ; shrq $4, %rcx, %rcx
; addq %rcx, %rsi, %rcx ; addq %rcx, %r9, %rcx
; movabsq $1085102592571150095, %rsi ; movabsq $1085102592571150095, %rsi
; andq %rcx, %rsi, %rcx ; andq %rcx, %rsi, %rcx
; movabsq $72340172838076673, %rdx ; movabsq $72340172838076673, %rdx
@@ -538,10 +540,11 @@ block0(v0: i128):
; movabsq $6148914691236517205, %r8 ; movabsq $6148914691236517205, %r8
; movq %rsi, %r9 ; movq %rsi, %r9
; andq %r9, %r8, %r9 ; andq %r9, %r8, %r9
; shrq $1, %rsi, %rsi ; movq %rsi, %rax
; andq %rsi, %r8, %rsi ; shrq $1, %rax, %rax
; andq %rax, %r8, %rax
; shlq $1, %r9, %r9 ; shlq $1, %r9, %r9
; orq %r9, %rsi, %r9 ; orq %r9, %rax, %r9
; movabsq $3689348814741910323, %r11 ; movabsq $3689348814741910323, %r11
; movq %r9, %rsi ; movq %r9, %rsi
; andq %rsi, %r11, %rsi ; andq %rsi, %r11, %rsi
@@ -579,10 +582,11 @@ block0(v0: i128):
; movabsq $6148914691236517205, %rcx ; movabsq $6148914691236517205, %rcx
; movq %rdi, %rdx ; movq %rdi, %rdx
; andq %rdx, %rcx, %rdx ; andq %rdx, %rcx, %rdx
; shrq $1, %rdi, %rdi ; movq %rdi, %r11
; andq %rdi, %rcx, %rdi ; shrq $1, %r11, %r11
; andq %r11, %rcx, %r11
; shlq $1, %rdx, %rdx ; shlq $1, %rdx, %rdx
; orq %rdx, %rdi, %rdx ; orq %rdx, %r11, %rdx
; movabsq $3689348814741910323, %r9 ; movabsq $3689348814741910323, %r9
; movq %rdx, %r10 ; movq %rdx, %r10
; andq %r10, %r9, %r10 ; andq %r10, %r9, %r10
@@ -708,32 +712,42 @@ block0(v0: i128, v1: i128, v2: i64, v3: i128, v4: i128, v5: i128):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; subq %rsp, $16, %rsp ; subq %rsp, $32, %rsp
; movq %rbx, 0(%rsp) ; movq %rbx, 0(%rsp)
; movq %r13, 8(%rsp) ; movq %r12, 8(%rsp)
; movq %r13, 16(%rsp)
; block0: ; block0:
; movq %r9, %r13
; movq %rcx, %rax
; movq %r8, %rcx
; movq %rax, %r8
; movq 16(%rbp), %rbx ; movq 16(%rbp), %rbx
; movq 24(%rbp), %rax ; movq 24(%rbp), %rax
; movq 32(%rbp), %r10 ; movq 32(%rbp), %r9
; movq %r10, %r13 ; movq %r9, %r12
; movq 40(%rbp), %r11 ; movq 40(%rbp), %r10
; movq 48(%rbp), %r10 ; movq 48(%rbp), %r11
; addq %rdi, %rdx, %rdi ; movq %rdi, %r9
; movq %rcx, %rdx ; addq %r9, %rdx, %r9
; adcq %rsi, %rdx, %rsi ; movq %r8, %rdi
; movq %rsi, %r8
; adcq %r8, %rdi, %r8
; xorq %rdx, %rdx, %rdx ; xorq %rdx, %rdx, %rdx
; addq %r9, %r8, %r9 ; movq %rcx, %rsi
; movq %r13, %rdi
; addq %rdi, %rsi, %rdi
; adcq %rbx, %rdx, %rbx ; adcq %rbx, %rdx, %rbx
; addq %rax, %r11, %rax ; addq %rax, %r10, %rax
; movq %r13, %rdx ; movq %r12, %rdx
; adcq %rdx, %r10, %rdx ; adcq %rdx, %r11, %rdx
; addq %rdi, %r9, %rdi ; addq %r9, %rdi, %r9
; adcq %rsi, %rbx, %rsi ; adcq %r8, %rbx, %r8
; addq %rax, %rdi, %rax ; addq %rax, %r9, %rax
; adcq %rdx, %rsi, %rdx ; adcq %rdx, %r8, %rdx
; movq 0(%rsp), %rbx ; movq 0(%rsp), %rbx
; movq 8(%rsp), %r13 ; movq 8(%rsp), %r12
; addq %rsp, $16, %rsp ; movq 16(%rsp), %r13
; addq %rsp, $32, %rsp
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -746,37 +760,41 @@ block0(v0: i128):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; subq %rsp, $32, %rsp ; subq %rsp, $48, %rsp
; movq %rbx, 0(%rsp) ; movq %rbx, 0(%rsp)
; movq %r12, 8(%rsp) ; movq %r12, 8(%rsp)
; movq %r14, 16(%rsp) ; movq %r13, 16(%rsp)
; movq %r15, 24(%rsp) ; movq %r14, 24(%rsp)
; movq %r15, 32(%rsp)
; block0: ; block0:
; movq %rdx, %r12 ; movq %rdx, %r12
; movq %rdi, %rax ; movq %rdi, %rax
; movq %rsi, %rdx ; movq %rsi, %rdx
; movq %rdi, %r14 ; movq %rdi, %r14
; movq %rsi, %rbx ; movq %rsi, %rbx
; movq %rdi, %r13
; movq %rsi, %r15
; movq %rdi, %r11 ; movq %rdi, %r11
; movq %rsi, %r9
; movq %rdi, %r10 ; movq %rdi, %r10
; movq %rdi, %r8
; movq %rsi, %rcx ; movq %rsi, %rcx
; movq %r12, %r15 ; movq %rdi, %r8
; movq %r14, 0(%r15) ; movq %rsi, %r9
; movq %rbx, 8(%r15) ; movq %r12, %rdi
; movq %r11, 16(%r15) ; movq %r14, 0(%rdi)
; movq %r9, 24(%r15) ; movq %rbx, 8(%rdi)
; movq %r10, 32(%r15) ; movq %r13, 16(%rdi)
; movq %r8, 40(%r15) ; movq %r15, 24(%rdi)
; movq %rcx, 48(%r15) ; movq %r11, 32(%rdi)
; movq %rdi, 56(%r15) ; movq %r10, 40(%rdi)
; movq %rsi, 64(%r15) ; movq %rcx, 48(%rdi)
; movq %r8, 56(%rdi)
; movq %r9, 64(%rdi)
; movq 0(%rsp), %rbx ; movq 0(%rsp), %rbx
; movq 8(%rsp), %r12 ; movq 8(%rsp), %r12
; movq 16(%rsp), %r14 ; movq 16(%rsp), %r13
; movq 24(%rsp), %r15 ; movq 24(%rsp), %r14
; addq %rsp, $32, %rsp ; movq 32(%rsp), %r15
; addq %rsp, $48, %rsp
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -873,8 +891,8 @@ block0(v0: i8, v1: i128):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; shlb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shlb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -891,19 +909,21 @@ block0(v0: i128, v1: i128):
; movq %rdx, %rcx ; movq %rdx, %rcx
; movq %rdi, %rdx ; movq %rdi, %rdx
; shlq %cl, %rdx, %rdx ; shlq %cl, %rdx, %rdx
; shlq %cl, %rsi, %rsi ; movq %rsi, %r8
; movq %rcx, %rax ; shlq %cl, %r8, %r8
; movq %rcx, %rsi
; movl $64, %ecx ; movl $64, %ecx
; movq %rax, %r8 ; movq %rsi, %r9
; subq %rcx, %r8, %rcx ; subq %rcx, %r9, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %rsi
; shrq %cl, %rsi, %rsi
; xorq %rax, %rax, %rax ; xorq %rax, %rax, %rax
; testq $127, %r8 ; testq $127, %r9
; cmovzq %rax, %rdi, %rdi ; cmovzq %rax, %rsi, %rsi
; orq %rdi, %rsi, %rdi ; orq %rsi, %r8, %rsi
; testq $64, %r8 ; testq $64, %r9
; cmovzq %rdx, %rax, %rax ; cmovzq %rdx, %rax, %rax
; cmovzq %rdi, %rdx, %rdx ; cmovzq %rsi, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -918,21 +938,23 @@ block0(v0: i128, v1: i128):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdx, %rcx ; movq %rdx, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r10
; shrq %cl, %r10, %r10
; movq %rsi, %r8 ; movq %rsi, %r8
; shrq %cl, %r8, %r8 ; shrq %cl, %r8, %r8
; movl $64, %ecx ; movl $64, %ecx
; movq %rdx, %r9 ; movq %rdx, %r9
; subq %rcx, %r9, %rcx ; subq %rcx, %r9, %rcx
; shlq %cl, %rsi, %rsi ; movq %rsi, %rdi
; shlq %cl, %rdi, %rdi
; xorq %r11, %r11, %r11 ; xorq %r11, %r11, %r11
; testq $127, %r9 ; testq $127, %r9
; cmovzq %r11, %rsi, %rsi ; cmovzq %r11, %rdi, %rdi
; orq %rsi, %rdi, %rsi ; orq %rdi, %r10, %rdi
; xorq %rdx, %rdx, %rdx ; xorq %rdx, %rdx, %rdx
; testq $64, %r9 ; testq $64, %r9
; movq %r8, %rax ; movq %r8, %rax
; cmovzq %rsi, %rax, %rax ; cmovzq %rdi, %rax, %rax
; cmovzq %r8, %rdx, %rdx ; cmovzq %r8, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
@@ -948,25 +970,25 @@ block0(v0: i128, v1: i128):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdx, %rcx ; movq %rdx, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r8
; movq %rsi, %rdx ; shrq %cl, %r8, %r8
; sarq %cl, %rdx, %rdx ; movq %rsi, %rdi
; movq %rcx, %rax ; sarq %cl, %rdi, %rdi
; movl $64, %ecx ; movl $64, %ecx
; movq %rax, %r8 ; movq %rdx, %r9
; subq %rcx, %r8, %rcx ; subq %rcx, %r9, %rcx
; movq %rsi, %r11 ; movq %rsi, %r11
; shlq %cl, %r11, %r11 ; shlq %cl, %r11, %r11
; xorq %rax, %rax, %rax ; xorq %rax, %rax, %rax
; testq $127, %r8 ; testq $127, %r9
; cmovzq %rax, %r11, %r11 ; cmovzq %rax, %r11, %r11
; orq %rdi, %r11, %rdi ; orq %r8, %r11, %r8
; sarq $63, %rsi, %rsi
; testq $64, %r8
; movq %rdx, %rax
; cmovzq %rdi, %rax, %rax
; cmovzq %rdx, %rsi, %rsi
; movq %rsi, %rdx ; movq %rsi, %rdx
; sarq $63, %rdx, %rdx
; testq $64, %r9
; movq %rdi, %rax
; cmovzq %r8, %rax, %rax
; cmovzq %rdi, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -1000,19 +1022,20 @@ block0(v0: i128, v1: i128):
; movl $128, %ecx ; movl $128, %ecx
; movq %r10, %r8 ; movq %r10, %r8
; subq %rcx, %r8, %rcx ; subq %rcx, %r8, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r9
; shrq %cl, %r9, %r9
; movq %rsi, %r11 ; movq %rsi, %r11
; shrq %cl, %r11, %r11 ; shrq %cl, %r11, %r11
; movq %rcx, %r8 ; movq %rcx, %rdi
; movl $64, %ecx ; movl $64, %ecx
; subq %rcx, %r8, %rcx ; subq %rcx, %rdi, %rcx
; shlq %cl, %rsi, %rsi ; shlq %cl, %rsi, %rsi
; xorq %r10, %r10, %r10 ; xorq %r10, %r10, %r10
; testq $127, %r8 ; testq $127, %rdi
; cmovzq %r10, %rsi, %rsi ; cmovzq %r10, %rsi, %rsi
; orq %rsi, %rdi, %rsi ; orq %rsi, %r9, %rsi
; xorq %r10, %r10, %r10 ; xorq %r10, %r10, %r10
; testq $64, %r8 ; testq $64, %rdi
; movq %r11, %rdi ; movq %r11, %rdi
; cmovzq %rsi, %rdi, %rdi ; cmovzq %rsi, %rdi, %rdi
; cmovzq %r11, %r10, %r10 ; cmovzq %r11, %r10, %r10
@@ -1057,17 +1080,17 @@ block0(v0: i128, v1: i128):
; subq %rcx, %r8, %rcx ; subq %rcx, %r8, %rcx
; movq %rdi, %r11 ; movq %rdi, %r11
; shlq %cl, %r11, %r11 ; shlq %cl, %r11, %r11
; shlq %cl, %rsi, %rsi ; movq %rsi, %r9
; movq %rcx, %r8 ; shlq %cl, %r9, %r9
; movq %rcx, %rsi
; movl $64, %ecx ; movl $64, %ecx
; movq %r8, %r9 ; subq %rcx, %rsi, %rcx
; subq %rcx, %r9, %rcx
; shrq %cl, %rdi, %rdi ; shrq %cl, %rdi, %rdi
; xorq %r8, %r8, %r8 ; xorq %r8, %r8, %r8
; testq $127, %r9 ; testq $127, %rsi
; cmovzq %r8, %rdi, %rdi ; cmovzq %r8, %rdi, %rdi
; orq %rdi, %rsi, %rdi ; orq %rdi, %r9, %rdi
; testq $64, %r9 ; testq $64, %rsi
; cmovzq %r11, %r8, %r8 ; cmovzq %r11, %r8, %r8
; cmovzq %rdi, %r11, %r11 ; cmovzq %rdi, %r11, %r11
; orq %rax, %r8, %rax ; orq %rax, %r8, %rax

View File

@@ -20,19 +20,21 @@ block0(v0: i128, v1: i8):
; movzbq %dl, %rcx ; movzbq %dl, %rcx
; movq %rdi, %rdx ; movq %rdi, %rdx
; shlq %cl, %rdx, %rdx ; shlq %cl, %rdx, %rdx
; shlq %cl, %rsi, %rsi ; movq %rsi, %r8
; shlq %cl, %r8, %r8
; movq %rcx, %r11 ; movq %rcx, %r11
; movl $64, %ecx ; movl $64, %ecx
; movq %r11, %r8 ; movq %r11, %r9
; subq %rcx, %r8, %rcx ; subq %rcx, %r9, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %rsi
; shrq %cl, %rsi, %rsi
; xorq %rax, %rax, %rax ; xorq %rax, %rax, %rax
; testq $127, %r8 ; testq $127, %r9
; cmovzq %rax, %rdi, %rdi ; cmovzq %rax, %rsi, %rsi
; orq %rdi, %rsi, %rdi ; orq %rsi, %r8, %rsi
; testq $64, %r8 ; testq $64, %r9
; cmovzq %rdx, %rax, %rax ; cmovzq %rdx, %rax, %rax
; cmovzq %rdi, %rdx, %rdx ; cmovzq %rsi, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -54,14 +56,15 @@ block0(v0: i128, v1: i64):
; movl $64, %ecx ; movl $64, %ecx
; movq %r11, %r8 ; movq %r11, %r8
; subq %rcx, %r8, %rcx ; subq %rcx, %r8, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r11
; shrq %cl, %r11, %r11
; xorq %rax, %rax, %rax ; xorq %rax, %rax, %rax
; testq $127, %r8 ; testq $127, %r8
; cmovzq %rax, %rdi, %rdi ; cmovzq %rax, %r11, %r11
; orq %rdi, %rsi, %rdi ; orq %r11, %rsi, %r11
; testq $64, %r8 ; testq $64, %r8
; cmovzq %rdx, %rax, %rax ; cmovzq %rdx, %rax, %rax
; cmovzq %rdi, %rdx, %rdx ; cmovzq %r11, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -83,14 +86,15 @@ block0(v0: i128, v1: i32):
; movl $64, %ecx ; movl $64, %ecx
; movq %r11, %r8 ; movq %r11, %r8
; subq %rcx, %r8, %rcx ; subq %rcx, %r8, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r11
; shrq %cl, %r11, %r11
; xorq %rax, %rax, %rax ; xorq %rax, %rax, %rax
; testq $127, %r8 ; testq $127, %r8
; cmovzq %rax, %rdi, %rdi ; cmovzq %rax, %r11, %r11
; orq %rdi, %rsi, %rdi ; orq %r11, %rsi, %r11
; testq $64, %r8 ; testq $64, %r8
; cmovzq %rdx, %rax, %rax ; cmovzq %rdx, %rax, %rax
; cmovzq %rdi, %rdx, %rdx ; cmovzq %r11, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -112,14 +116,15 @@ block0(v0: i128, v1: i16):
; movl $64, %ecx ; movl $64, %ecx
; movq %r11, %r8 ; movq %r11, %r8
; subq %rcx, %r8, %rcx ; subq %rcx, %r8, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r11
; shrq %cl, %r11, %r11
; xorq %rax, %rax, %rax ; xorq %rax, %rax, %rax
; testq $127, %r8 ; testq $127, %r8
; cmovzq %rax, %rdi, %rdi ; cmovzq %rax, %r11, %r11
; orq %rdi, %rsi, %rdi ; orq %r11, %rsi, %r11
; testq $64, %r8 ; testq $64, %r8
; cmovzq %rdx, %rax, %rax ; cmovzq %rdx, %rax, %rax
; cmovzq %rdi, %rdx, %rdx ; cmovzq %r11, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -141,14 +146,15 @@ block0(v0: i128, v1: i8):
; movl $64, %ecx ; movl $64, %ecx
; movq %r11, %r8 ; movq %r11, %r8
; subq %rcx, %r8, %rcx ; subq %rcx, %r8, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r11
; shrq %cl, %r11, %r11
; xorq %rax, %rax, %rax ; xorq %rax, %rax, %rax
; testq $127, %r8 ; testq $127, %r8
; cmovzq %rax, %rdi, %rdi ; cmovzq %rax, %r11, %r11
; orq %rdi, %rsi, %rdi ; orq %r11, %rsi, %r11
; testq $64, %r8 ; testq $64, %r8
; cmovzq %rdx, %rax, %rax ; cmovzq %rdx, %rax, %rax
; cmovzq %rdi, %rdx, %rdx ; cmovzq %r11, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -163,8 +169,8 @@ block0(v0: i64, v1: i128):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shlq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shlq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -179,8 +185,8 @@ block0(v0: i32, v1: i128):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shll %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shll %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -196,8 +202,8 @@ block0(v0: i16, v1: i128):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; shlw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; shlw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -213,8 +219,8 @@ block0(v0: i8, v1: i128):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; shlb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shlb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -229,8 +235,8 @@ block0(v0: i64, v1: i64):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shlq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shlq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -245,8 +251,8 @@ block0(v0: i64, v1: i32):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shlq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shlq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -261,8 +267,8 @@ block0(v0: i64, v1: i16):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shlq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shlq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -277,8 +283,8 @@ block0(v0: i64, v1: i8):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shlq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shlq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -293,8 +299,8 @@ block0(v0: i32, v1: i64):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shll %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shll %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -309,8 +315,8 @@ block0(v0: i32, v1: i32):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shll %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shll %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -325,8 +331,8 @@ block0(v0: i32, v1: i16):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shll %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shll %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -341,8 +347,8 @@ block0(v0: i32, v1: i8):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shll %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shll %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -358,8 +364,8 @@ block0(v0: i16, v1: i64):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; shlw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; shlw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -375,8 +381,8 @@ block0(v0: i16, v1: i32):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; shlw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; shlw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -392,8 +398,8 @@ block0(v0: i16, v1: i16):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; shlw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; shlw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -409,8 +415,8 @@ block0(v0: i16, v1: i8):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; shlw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; shlw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -426,8 +432,8 @@ block0(v0: i8, v1: i64):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; shlb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shlb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -443,8 +449,8 @@ block0(v0: i8, v1: i32):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; shlb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shlb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -460,8 +466,8 @@ block0(v0: i8, v1: i16):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; shlb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shlb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -477,8 +483,8 @@ block0(v0: i8, v1: i8):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; shlb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shlb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -492,8 +498,8 @@ block0(v0: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; shlq $1, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shlq $1, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -507,8 +513,8 @@ block0(v0: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; shll $1, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shll $1, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -522,8 +528,8 @@ block0(v0: i16):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; shlw $1, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; shlw $1, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -537,8 +543,8 @@ block0(v0: i8):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; shlb $1, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shlb $1, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -11,8 +11,8 @@ block0(v0: i64, v1: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; addl %esi, 0(%rdi), %esi
; movq %rsi, %rax ; movq %rsi, %rax
; addl %eax, 0(%rdi), %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -27,8 +27,8 @@ block0(v0: i64, v1: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; addl %esi, 0(%rdi), %esi
; movq %rsi, %rax ; movq %rsi, %rax
; addl %eax, 0(%rdi), %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -43,8 +43,8 @@ block0(v0: i64, v1: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; addq %rsi, 0(%rdi), %rsi
; movq %rsi, %rax ; movq %rsi, %rax
; addq %rax, 0(%rdi), %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -56,14 +56,11 @@ block0(v0: i64, v1: i64):
return v3 return v3
} }
;; test narrow loads: 8-bit load should not merge because the `addl` is 32 bits
;; and would load 32 bits from memory, which may go beyond the end of the heap.
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; addq %rsi, 0(%rdi), %rsi
; movq %rsi, %rax ; movq %rsi, %rax
; addq %rax, 0(%rdi), %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -44,8 +44,9 @@ block0(v0: f64x2):
; cmppd $0, %xmm5, %xmm0, %xmm5 ; cmppd $0, %xmm5, %xmm0, %xmm5
; movupd const(0), %xmm6 ; movupd const(0), %xmm6
; andps %xmm5, %xmm6, %xmm5 ; andps %xmm5, %xmm6, %xmm5
; minpd %xmm0, %xmm5, %xmm0 ; movdqa %xmm0, %xmm9
; cvttpd2dq %xmm0, %xmm0 ; minpd %xmm9, %xmm5, %xmm9
; cvttpd2dq %xmm9, %xmm0
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -10,8 +10,8 @@ block0(v0: f32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; load_ext_name %NearestF32+0, %r8 ; load_ext_name %NearestF32+0, %rdx
; call *%r8 ; call *%rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -25,8 +25,8 @@ block0(v0: f64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; load_ext_name %NearestF64+0, %r8 ; load_ext_name %NearestF64+0, %rdx
; call *%r8 ; call *%rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -14,16 +14,17 @@ block0(v0: i64):
; shrq $1, %rax, %rax ; shrq $1, %rax, %rax
; movabsq $8608480567731124087, %r8 ; movabsq $8608480567731124087, %r8
; andq %rax, %r8, %rax ; andq %rax, %r8, %rax
; subq %rdi, %rax, %rdi ; movq %rdi, %r9
; subq %r9, %rax, %r9
; shrq $1, %rax, %rax ; shrq $1, %rax, %rax
; andq %rax, %r8, %rax ; andq %rax, %r8, %rax
; subq %rdi, %rax, %rdi ; subq %r9, %rax, %r9
; shrq $1, %rax, %rax ; shrq $1, %rax, %rax
; andq %rax, %r8, %rax ; andq %rax, %r8, %rax
; subq %rdi, %rax, %rdi ; subq %r9, %rax, %r9
; movq %rdi, %rax ; movq %r9, %rax
; shrq $4, %rax, %rax ; shrq $4, %rax, %rax
; addq %rax, %rdi, %rax ; addq %rax, %r9, %rax
; movabsq $1085102592571150095, %rsi ; movabsq $1085102592571150095, %rsi
; andq %rax, %rsi, %rax ; andq %rax, %rsi, %rax
; movabsq $72340172838076673, %rdx ; movabsq $72340172838076673, %rdx
@@ -80,16 +81,17 @@ block0(v0: i32):
; shrl $1, %eax, %eax ; shrl $1, %eax, %eax
; movl $2004318071, %r8d ; movl $2004318071, %r8d
; andl %eax, %r8d, %eax ; andl %eax, %r8d, %eax
; subl %edi, %eax, %edi ; movq %rdi, %r9
; subl %r9d, %eax, %r9d
; shrl $1, %eax, %eax ; shrl $1, %eax, %eax
; andl %eax, %r8d, %eax ; andl %eax, %r8d, %eax
; subl %edi, %eax, %edi ; subl %r9d, %eax, %r9d
; shrl $1, %eax, %eax ; shrl $1, %eax, %eax
; andl %eax, %r8d, %eax ; andl %eax, %r8d, %eax
; subl %edi, %eax, %edi ; subl %r9d, %eax, %r9d
; movq %rdi, %rax ; movq %r9, %rax
; shrl $4, %eax, %eax ; shrl $4, %eax, %eax
; addl %eax, %edi, %eax ; addl %eax, %r9d, %eax
; andl %eax, $252645135, %eax ; andl %eax, $252645135, %eax
; imull %eax, $16843009, %eax ; imull %eax, $16843009, %eax
; shrl $24, %eax, %eax ; shrl $24, %eax, %eax

View File

@@ -12,7 +12,6 @@ block0(v0: i8, v1: i8):
; block0: ; block0:
; movq %rdi, %rax ; movq %rdi, %rax
; cbw %al, %al ; cbw %al, %al
; movq %rax, %r11
; idiv %al, (none), %sil, %al, (none) ; idiv %al, (none), %sil, %al, (none)
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
@@ -29,7 +28,6 @@ block0(v0: i16, v1: i16):
; block0: ; block0:
; movq %rdi, %rax ; movq %rdi, %rax
; cwd %ax, %dx ; cwd %ax, %dx
; movq %rdx, %rcx
; idiv %ax, %dx, %si, %ax, %dx ; idiv %ax, %dx, %si, %ax, %dx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
@@ -46,7 +44,6 @@ block0(v0: i32, v1: i32):
; block0: ; block0:
; movq %rdi, %rax ; movq %rdi, %rax
; cdq %eax, %edx ; cdq %eax, %edx
; movq %rdx, %rcx
; idiv %eax, %edx, %esi, %eax, %edx ; idiv %eax, %edx, %esi, %eax, %edx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
@@ -63,7 +60,6 @@ block0(v0: i64, v1: i64):
; block0: ; block0:
; movq %rdi, %rax ; movq %rdi, %rax
; cqo %rax, %rdx ; cqo %rax, %rdx
; movq %rdx, %rcx
; idiv %rax, %rdx, %rsi, %rax, %rdx ; idiv %rax, %rdx, %rsi, %rax, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp

View File

@@ -14,10 +14,11 @@ block0(v0: i32, v1: i128, v2: i128):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; cmpl $42, %edi ; cmpl $42, %edi
; cmovzq %rsi, %rcx, %rcx
; cmovzq %rdx, %r8, %r8
; movq %rcx, %rax ; movq %rcx, %rax
; movq %r8, %rdx ; cmovzq %rsi, %rax, %rax
; movq %r8, %rcx
; cmovzq %rdx, %rcx, %rcx
; movq %rcx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -33,12 +34,12 @@ block0(v0: f32, v1: i128, v2: i128):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; ucomiss %xmm0, %xmm0 ; ucomiss %xmm0, %xmm0
; cmovnzq %rdx, %rdi, %rdi
; cmovpq %rdx, %rdi, %rdi
; cmovnzq %rcx, %rsi, %rsi
; cmovpq %rcx, %rsi, %rsi
; movq %rdi, %rax ; movq %rdi, %rax
; cmovnzq %rdx, %rax, %rax
; cmovpq %rdx, %rax, %rax
; movq %rsi, %rdx ; movq %rsi, %rdx
; cmovnzq %rcx, %rdx, %rdx
; cmovpq %rcx, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -159,8 +159,9 @@ block0(v0: b16x8, v1: i16x8, v2: i16x8):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; pblendvb %xmm2, %xmm1, %xmm2 ; movdqa %xmm2, %xmm6
; movdqa %xmm2, %xmm0 ; pblendvb %xmm6, %xmm1, %xmm6
; movdqa %xmm6, %xmm0
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -174,8 +175,9 @@ block0(v0: b32x4, v1: f32x4, v2: f32x4):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; blendvps %xmm2, %xmm1, %xmm2 ; movdqa %xmm2, %xmm6
; movdqa %xmm2, %xmm0 ; blendvps %xmm6, %xmm1, %xmm6
; movdqa %xmm6, %xmm0
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -189,8 +191,9 @@ block0(v0: b64x2, v1: f64x2, v2: f64x2):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; blendvpd %xmm2, %xmm1, %xmm2 ; movdqa %xmm2, %xmm6
; movdqa %xmm2, %xmm0 ; blendvpd %xmm6, %xmm1, %xmm6
; movdqa %xmm6, %xmm0
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -206,12 +209,13 @@ block0(v0: i32):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movdqu const(1), %xmm0 ; movdqu const(1), %xmm0
; andq %rdi, $7, %rdi ; movq %rdi, %r11
; movd %edi, %xmm6 ; andq %r11, $7, %r11
; movd %r11d, %xmm6
; psllw %xmm0, %xmm6, %xmm0 ; psllw %xmm0, %xmm6, %xmm0
; lea const(0), %rax ; lea const(0), %rdi
; shlq $4, %rdi, %rdi ; shlq $4, %r11, %r11
; movdqu 0(%rax,%rdi,1), %xmm14 ; movdqu 0(%rdi,%r11,1), %xmm14
; pand %xmm0, %xmm14, %xmm0 ; pand %xmm0, %xmm14, %xmm0
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
@@ -252,12 +256,13 @@ block0(v0: i32):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movdqu const(0), %xmm9 ; movdqu const(0), %xmm9
; andq %rdi, $7, %rdi ; movq %rdi, %r10
; andq %r10, $7, %r10
; movdqa %xmm9, %xmm0 ; movdqa %xmm9, %xmm0
; punpcklbw %xmm0, %xmm9, %xmm0 ; punpcklbw %xmm0, %xmm9, %xmm0
; punpckhbw %xmm9, %xmm9, %xmm9 ; punpckhbw %xmm9, %xmm9, %xmm9
; addl %edi, $8, %edi ; addl %r10d, $8, %r10d
; movd %edi, %xmm12 ; movd %r10d, %xmm12
; psraw %xmm0, %xmm12, %xmm0 ; psraw %xmm0, %xmm12, %xmm0
; psraw %xmm9, %xmm12, %xmm9 ; psraw %xmm9, %xmm12, %xmm9
; packsswb %xmm0, %xmm9, %xmm0 ; packsswb %xmm0, %xmm9, %xmm0
@@ -279,14 +284,14 @@ block0(v0: i8x16, v1: i32):
; movdqa %xmm0, %xmm14 ; movdqa %xmm0, %xmm14
; punpcklbw %xmm14, %xmm0, %xmm14 ; punpcklbw %xmm14, %xmm0, %xmm14
; movdqa %xmm14, %xmm13 ; movdqa %xmm14, %xmm13
; punpckhbw %xmm0, %xmm0, %xmm0 ; movdqa %xmm0, %xmm14
; movdqa %xmm0, %xmm6 ; punpckhbw %xmm14, %xmm0, %xmm14
; addl %r11d, $8, %r11d ; addl %r11d, $8, %r11d
; movd %r11d, %xmm14 ; movd %r11d, %xmm15
; movdqa %xmm13, %xmm0 ; movdqa %xmm13, %xmm0
; psraw %xmm0, %xmm14, %xmm0 ; psraw %xmm0, %xmm15, %xmm0
; psraw %xmm6, %xmm14, %xmm6 ; psraw %xmm14, %xmm15, %xmm14
; packsswb %xmm0, %xmm6, %xmm0 ; packsswb %xmm0, %xmm14, %xmm0
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -42,8 +42,9 @@ block0(v0: i64x2):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; pxor %xmm3, %xmm3, %xmm3 ; pxor %xmm3, %xmm3, %xmm3
; pcmpeqq %xmm0, %xmm3, %xmm0 ; movdqa %xmm0, %xmm5
; ptest %xmm0, %xmm0 ; pcmpeqq %xmm5, %xmm3, %xmm5
; ptest %xmm5, %xmm5
; setz %al ; setz %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp

View File

@@ -10,9 +10,8 @@ block0(v0: i8, v1: i8):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; xorl %r10d, %r10d, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; xorl %edx, %edx, %edx
; srem_seq %al, %dl, %sil, %al, %dl, tmp=(none) ; srem_seq %al, %dl, %sil, %al, %dl, tmp=(none)
; shrq $8, %rax, %rax ; shrq $8, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -28,9 +27,8 @@ block0(v0: i16, v1: i16):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; xorl %r10d, %r10d, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; xorl %edx, %edx, %edx
; srem_seq %ax, %dx, %si, %ax, %dx, tmp=(none) ; srem_seq %ax, %dx, %si, %ax, %dx, tmp=(none)
; movq %rdx, %rax ; movq %rdx, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -46,9 +44,8 @@ block0(v0: i32, v1: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; xorl %r10d, %r10d, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; xorl %edx, %edx, %edx
; srem_seq %eax, %edx, %esi, %eax, %edx, tmp=(none) ; srem_seq %eax, %edx, %esi, %eax, %edx, tmp=(none)
; movq %rdx, %rax ; movq %rdx, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -64,9 +61,8 @@ block0(v0: i64, v1: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; xorl %r10d, %r10d, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; xorl %edx, %edx, %edx
; srem_seq %rax, %rdx, %rsi, %rax, %rdx, tmp=(none) ; srem_seq %rax, %rdx, %rsi, %rax, %rdx, tmp=(none)
; movq %rdx, %rax ; movq %rdx, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp

View File

@@ -17,25 +17,26 @@ block0(v0: i128, v1: i8):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movzbq %dl, %rcx ; movzbq %dl, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r8
; movq %rsi, %rdx ; shrq %cl, %r8, %r8
; sarq %cl, %rdx, %rdx ; movq %rsi, %rdi
; sarq %cl, %rdi, %rdi
; movq %rcx, %rax ; movq %rcx, %rax
; movl $64, %ecx ; movl $64, %ecx
; movq %rax, %r8 ; movq %rax, %r9
; subq %rcx, %r8, %rcx ; subq %rcx, %r9, %rcx
; movq %rsi, %r11 ; movq %rsi, %r11
; shlq %cl, %r11, %r11 ; shlq %cl, %r11, %r11
; xorq %rax, %rax, %rax ; xorq %rax, %rax, %rax
; testq $127, %r8 ; testq $127, %r9
; cmovzq %rax, %r11, %r11 ; cmovzq %rax, %r11, %r11
; orq %rdi, %r11, %rdi ; orq %r8, %r11, %r8
; sarq $63, %rsi, %rsi
; testq $64, %r8
; movq %rdx, %rax
; cmovzq %rdi, %rax, %rax
; cmovzq %rdx, %rsi, %rsi
; movq %rsi, %rdx ; movq %rsi, %rdx
; sarq $63, %rdx, %rdx
; testq $64, %r9
; movq %rdi, %rax
; cmovzq %r8, %rax, %rax
; cmovzq %rdi, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -50,23 +51,25 @@ block0(v0: i128, v1: i64):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdx, %rcx ; movq %rdx, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r8
; shrq %cl, %r8, %r8
; movq %rsi, %r11 ; movq %rsi, %r11
; sarq %cl, %r11, %r11 ; sarq %cl, %r11, %r11
; movl $64, %ecx ; movl $64, %ecx
; subq %rcx, %rdx, %rcx ; movq %rdx, %r9
; subq %rcx, %r9, %rcx
; movq %rsi, %r10 ; movq %rsi, %r10
; shlq %cl, %r10, %r10 ; shlq %cl, %r10, %r10
; xorq %rax, %rax, %rax ; xorq %rdi, %rdi, %rdi
; testq $127, %rdx ; testq $127, %r9
; cmovzq %rax, %r10, %r10 ; cmovzq %rdi, %r10, %r10
; orq %rdi, %r10, %rdi ; orq %r8, %r10, %r8
; sarq $63, %rsi, %rsi
; testq $64, %rdx
; movq %r11, %rax
; cmovzq %rdi, %rax, %rax
; cmovzq %r11, %rsi, %rsi
; movq %rsi, %rdx ; movq %rsi, %rdx
; sarq $63, %rdx, %rdx
; testq $64, %r9
; movq %r11, %rax
; cmovzq %r8, %rax, %rax
; cmovzq %r11, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -81,23 +84,25 @@ block0(v0: i128, v1: i32):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdx, %rcx ; movq %rdx, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r8
; shrq %cl, %r8, %r8
; movq %rsi, %r11 ; movq %rsi, %r11
; sarq %cl, %r11, %r11 ; sarq %cl, %r11, %r11
; movl $64, %ecx ; movl $64, %ecx
; subq %rcx, %rdx, %rcx ; movq %rdx, %r9
; subq %rcx, %r9, %rcx
; movq %rsi, %r10 ; movq %rsi, %r10
; shlq %cl, %r10, %r10 ; shlq %cl, %r10, %r10
; xorq %rax, %rax, %rax ; xorq %rdi, %rdi, %rdi
; testq $127, %rdx ; testq $127, %r9
; cmovzq %rax, %r10, %r10 ; cmovzq %rdi, %r10, %r10
; orq %rdi, %r10, %rdi ; orq %r8, %r10, %r8
; sarq $63, %rsi, %rsi
; testq $64, %rdx
; movq %r11, %rax
; cmovzq %rdi, %rax, %rax
; cmovzq %r11, %rsi, %rsi
; movq %rsi, %rdx ; movq %rsi, %rdx
; sarq $63, %rdx, %rdx
; testq $64, %r9
; movq %r11, %rax
; cmovzq %r8, %rax, %rax
; cmovzq %r11, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -112,23 +117,25 @@ block0(v0: i128, v1: i16):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdx, %rcx ; movq %rdx, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r8
; shrq %cl, %r8, %r8
; movq %rsi, %r11 ; movq %rsi, %r11
; sarq %cl, %r11, %r11 ; sarq %cl, %r11, %r11
; movl $64, %ecx ; movl $64, %ecx
; subq %rcx, %rdx, %rcx ; movq %rdx, %r9
; subq %rcx, %r9, %rcx
; movq %rsi, %r10 ; movq %rsi, %r10
; shlq %cl, %r10, %r10 ; shlq %cl, %r10, %r10
; xorq %rax, %rax, %rax ; xorq %rdi, %rdi, %rdi
; testq $127, %rdx ; testq $127, %r9
; cmovzq %rax, %r10, %r10 ; cmovzq %rdi, %r10, %r10
; orq %rdi, %r10, %rdi ; orq %r8, %r10, %r8
; sarq $63, %rsi, %rsi
; testq $64, %rdx
; movq %r11, %rax
; cmovzq %rdi, %rax, %rax
; cmovzq %r11, %rsi, %rsi
; movq %rsi, %rdx ; movq %rsi, %rdx
; sarq $63, %rdx, %rdx
; testq $64, %r9
; movq %r11, %rax
; cmovzq %r8, %rax, %rax
; cmovzq %r11, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -143,23 +150,25 @@ block0(v0: i128, v1: i8):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdx, %rcx ; movq %rdx, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r8
; shrq %cl, %r8, %r8
; movq %rsi, %r11 ; movq %rsi, %r11
; sarq %cl, %r11, %r11 ; sarq %cl, %r11, %r11
; movl $64, %ecx ; movl $64, %ecx
; subq %rcx, %rdx, %rcx ; movq %rdx, %r9
; subq %rcx, %r9, %rcx
; movq %rsi, %r10 ; movq %rsi, %r10
; shlq %cl, %r10, %r10 ; shlq %cl, %r10, %r10
; xorq %rax, %rax, %rax ; xorq %rdi, %rdi, %rdi
; testq $127, %rdx ; testq $127, %r9
; cmovzq %rax, %r10, %r10 ; cmovzq %rdi, %r10, %r10
; orq %rdi, %r10, %rdi ; orq %r8, %r10, %r8
; sarq $63, %rsi, %rsi
; testq $64, %rdx
; movq %r11, %rax
; cmovzq %rdi, %rax, %rax
; cmovzq %r11, %rsi, %rsi
; movq %rsi, %rdx ; movq %rsi, %rdx
; sarq $63, %rdx, %rdx
; testq $64, %r9
; movq %r11, %rax
; cmovzq %r8, %rax, %rax
; cmovzq %r11, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -174,8 +183,8 @@ block0(v0: i64, v1: i128):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; sarq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; sarq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -190,8 +199,8 @@ block0(v0: i32, v1: i128):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; sarl %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; sarl %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -207,8 +216,8 @@ block0(v0: i16, v1: i128):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; sarw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; sarw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -224,8 +233,8 @@ block0(v0: i8, v1: i128):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; sarb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; sarb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -240,8 +249,8 @@ block0(v0: i64, v1: i64):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; sarq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; sarq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -256,8 +265,8 @@ block0(v0: i64, v1: i32):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; sarq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; sarq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -272,8 +281,8 @@ block0(v0: i64, v1: i16):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; sarq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; sarq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -288,8 +297,8 @@ block0(v0: i64, v1: i8):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; sarq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; sarq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -304,8 +313,8 @@ block0(v0: i32, v1: i64):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; sarl %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; sarl %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -320,8 +329,8 @@ block0(v0: i32, v1: i32):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; sarl %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; sarl %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -336,8 +345,8 @@ block0(v0: i32, v1: i16):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; sarl %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; sarl %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -352,8 +361,8 @@ block0(v0: i32, v1: i8):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; sarl %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; sarl %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -369,8 +378,8 @@ block0(v0: i16, v1: i64):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; sarw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; sarw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -386,8 +395,8 @@ block0(v0: i16, v1: i32):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; sarw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; sarw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -403,8 +412,8 @@ block0(v0: i16, v1: i16):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; sarw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; sarw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -420,8 +429,8 @@ block0(v0: i16, v1: i8):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; sarw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; sarw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -437,8 +446,8 @@ block0(v0: i8, v1: i64):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; sarb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; sarb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -454,8 +463,8 @@ block0(v0: i8, v1: i32):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; sarb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; sarb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -471,8 +480,8 @@ block0(v0: i8, v1: i16):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; sarb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; sarb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -488,13 +497,12 @@ block0(v0: i8, v1: i8):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; sarb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; sarb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
function %sshr_i64_const(i64) -> i64 { function %sshr_i64_const(i64) -> i64 {
block0(v0: i64): block0(v0: i64):
v1 = sshr_imm.i64 v0, 65 v1 = sshr_imm.i64 v0, 65
@@ -504,8 +512,8 @@ block0(v0: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; sarq $1, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; sarq $1, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -519,8 +527,8 @@ block0(v0: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; sarl $1, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; sarl $1, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -534,8 +542,8 @@ block0(v0: i16):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; sarw $1, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; sarw $1, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -549,8 +557,8 @@ block0(v0: i8):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; sarb $1, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; sarb $1, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -46,14 +46,13 @@ block0(v0: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdi, %r8 ; movq %rdi, %rsi
; subq %rsp, $64, %rsp ; subq %rsp, $64, %rsp
; virtual_sp_offset_adjust 64 ; virtual_sp_offset_adjust 64
; lea 0(%rsp), %rdi ; lea 0(%rsp), %rdi
; movq %r8, %rsi
; movl $64, %edx ; movl $64, %edx
; load_ext_name %Memcpy+0, %rcx ; load_ext_name %Memcpy+0, %rax
; call *%rcx ; call *%rax
; call User(userextname0) ; call User(userextname0)
; addq %rsp, $64, %rsp ; addq %rsp, $64, %rsp
; virtual_sp_offset_adjust -64 ; virtual_sp_offset_adjust -64
@@ -72,20 +71,20 @@ block0(v0: i64, v1: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; subq %rsp, $16, %rsp ; subq %rsp, $16, %rsp
; movq %r12, 0(%rsp) ; movq %r14, 0(%rsp)
; block0: ; block0:
; movq %rdi, %r12 ; movq %rdi, %r14
; subq %rsp, $64, %rsp ; subq %rsp, $64, %rsp
; virtual_sp_offset_adjust 64 ; virtual_sp_offset_adjust 64
; lea 0(%rsp), %rdi ; lea 0(%rsp), %rdi
; movl $64, %edx ; movl $64, %edx
; load_ext_name %Memcpy+0, %rcx ; load_ext_name %Memcpy+0, %rcx
; call *%rcx ; call *%rcx
; movq %r12, %rdi ; movq %r14, %rdi
; call User(userextname0) ; call User(userextname0)
; addq %rsp, $64, %rsp ; addq %rsp, $64, %rsp
; virtual_sp_offset_adjust -64 ; virtual_sp_offset_adjust -64
; movq 0(%rsp), %r12 ; movq 0(%rsp), %r14
; addq %rsp, $16, %rsp ; addq %rsp, $16, %rsp
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
@@ -122,28 +121,29 @@ block0(v0: i64, v1: i64, v2: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; subq %rsp, $16, %rsp ; subq %rsp, $16, %rsp
; movq %rbx, 0(%rsp) ; movq %r13, 0(%rsp)
; movq %r14, 8(%rsp) ; movq %r15, 8(%rsp)
; block0: ; block0:
; movq %rdx, %rbx ; movq %rdx, %r15
; movq %rdi, %r14 ; movq %rdi, %r13
; subq %rsp, $192, %rsp ; subq %rsp, $192, %rsp
; virtual_sp_offset_adjust 192 ; virtual_sp_offset_adjust 192
; lea 0(%rsp), %rdi ; lea 0(%rsp), %rdi
; movl $128, %edx ; movl $128, %edx
; load_ext_name %Memcpy+0, %rcx ; load_ext_name %Memcpy+0, %r8
; call *%rcx ; call *%r8
; lea 128(%rsp), %rdi ; lea 128(%rsp), %rdi
; movq %rbx, %rsi ; movq %r15, %rsi
; movl $64, %edx ; movl $64, %edx
; load_ext_name %Memcpy+0, %rcx ; load_ext_name %Memcpy+0, %r8
; call *%rcx ; movq %r15, %rsi
; movq %r14, %rdi ; call *%r8
; movq %r13, %rdi
; call User(userextname0) ; call User(userextname0)
; addq %rsp, $192, %rsp ; addq %rsp, $192, %rsp
; virtual_sp_offset_adjust -192 ; virtual_sp_offset_adjust -192
; movq 0(%rsp), %rbx ; movq 0(%rsp), %r13
; movq 8(%rsp), %r14 ; movq 8(%rsp), %r15
; addq %rsp, $16, %rsp ; addq %rsp, $16, %rsp
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp

View File

@@ -47,15 +47,10 @@ block0(v0: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; subq %rsp, $16, %rsp
; movq %r15, 0(%rsp)
; block0: ; block0:
; movq %rdi, %r15 ; movq %rdi, %rax
; load_ext_name %f4+0, %r8 ; load_ext_name %f4+0, %rdx
; call *%r8 ; call *%rdx
; movq %r15, %rax
; movq 0(%rsp), %r15
; addq %rsp, $16, %rsp
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -22,7 +22,8 @@ block0(v0: i64, v1: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; addq %rdi, %rsi, %rdi ; movq %rdi, %rcx
; addq %rcx, %rsi, %rcx
; jnb ; ud2 user0 ; ; jnb ; ud2 user0 ;
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp

View File

@@ -10,8 +10,8 @@ block0(v0: f32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; load_ext_name %TruncF32+0, %r8 ; load_ext_name %TruncF32+0, %rdx
; call *%r8 ; call *%rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -25,8 +25,8 @@ block0(v0: f64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; load_ext_name %TruncF64+0, %r8 ; load_ext_name %TruncF64+0, %rdx
; call *%r8 ; call *%rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -10,8 +10,7 @@ block0(v0: i8, v1: i8):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movzbl %dil, %r9d ; movzbl %dil, %eax
; movq %r9, %rax
; div %al, (none), %sil, %al, (none) ; div %al, (none), %sil, %al, (none)
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
@@ -26,9 +25,8 @@ block0(v0: i16, v1: i16):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movl $0, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; movl $0, %edx
; div %ax, %dx, %si, %ax, %dx ; div %ax, %dx, %si, %ax, %dx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
@@ -43,9 +41,8 @@ block0(v0: i32, v1: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movl $0, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; movl $0, %edx
; div %eax, %edx, %esi, %eax, %edx ; div %eax, %edx, %esi, %eax, %edx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
@@ -60,9 +57,8 @@ block0(v0: i64, v1: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movl $0, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; movl $0, %edx
; div %rax, %rdx, %rsi, %rax, %rdx ; div %rax, %rdx, %rsi, %rax, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp

View File

@@ -11,8 +11,8 @@ block0(v0: i32, v1: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; addl %edi, %esi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; addl %eax, %esi, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -13,8 +13,8 @@ block0(v1: i32, v2: i64):
; block0: ; block0:
; movl 0(%rsi), %r8d ; movl 0(%rsi), %r8d
; cmpl %edi, %r8d ; cmpl %edi, %r8d
; cmovnbl %r8d, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; cmovnbl %r8d, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -10,8 +10,7 @@ block0(v0: i8, v1: i8):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movzbl %dil, %r9d ; movzbl %dil, %eax
; movq %r9, %rax
; div %al, (none), %sil, %al, (none) ; div %al, (none), %sil, %al, (none)
; shrq $8, %rax, %rax ; shrq $8, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -27,9 +26,8 @@ block0(v0: i16, v1: i16):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movl $0, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; movl $0, %edx
; div %ax, %dx, %si, %ax, %dx ; div %ax, %dx, %si, %ax, %dx
; movq %rdx, %rax ; movq %rdx, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -45,9 +43,8 @@ block0(v0: i32, v1: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movl $0, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; movl $0, %edx
; div %eax, %edx, %esi, %eax, %edx ; div %eax, %edx, %esi, %eax, %edx
; movq %rdx, %rax ; movq %rdx, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
@@ -63,9 +60,8 @@ block0(v0: i64, v1: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movl $0, %r10d
; movq %rdi, %rax ; movq %rdi, %rax
; movq %r10, %rdx ; movl $0, %edx
; div %rax, %rdx, %rsi, %rax, %rdx ; div %rax, %rdx, %rsi, %rax, %rdx
; movq %rdx, %rax ; movq %rdx, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp

View File

@@ -16,22 +16,24 @@ block0(v0: i128, v1: i8):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movzbq %dl, %rcx ; movzbq %dl, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r10
; shrq %cl, %r10, %r10
; movq %rsi, %r8 ; movq %rsi, %r8
; shrq %cl, %r8, %r8 ; shrq %cl, %r8, %r8
; movq %rcx, %rax ; movq %rcx, %rdi
; movl $64, %ecx ; movl $64, %ecx
; movq %rax, %r9 ; movq %rdi, %r9
; subq %rcx, %r9, %rcx ; subq %rcx, %r9, %rcx
; shlq %cl, %rsi, %rsi ; movq %rsi, %rdi
; shlq %cl, %rdi, %rdi
; xorq %r11, %r11, %r11 ; xorq %r11, %r11, %r11
; testq $127, %r9 ; testq $127, %r9
; cmovzq %r11, %rsi, %rsi ; cmovzq %r11, %rdi, %rdi
; orq %rsi, %rdi, %rsi ; orq %rdi, %r10, %rdi
; xorq %rdx, %rdx, %rdx ; xorq %rdx, %rdx, %rdx
; testq $64, %r9 ; testq $64, %r9
; movq %r8, %rax ; movq %r8, %rax
; cmovzq %rsi, %rax, %rax ; cmovzq %rdi, %rax, %rax
; cmovzq %r8, %rdx, %rdx ; cmovzq %r8, %rdx, %rdx
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
@@ -47,7 +49,8 @@ block0(v0: i128, v1: i64):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdx, %rcx ; movq %rdx, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r9
; shrq %cl, %r9, %r9
; movq %rsi, %r11 ; movq %rsi, %r11
; shrq %cl, %r11, %r11 ; shrq %cl, %r11, %r11
; movl $64, %ecx ; movl $64, %ecx
@@ -57,7 +60,7 @@ block0(v0: i128, v1: i64):
; xorq %r10, %r10, %r10 ; xorq %r10, %r10, %r10
; testq $127, %r8 ; testq $127, %r8
; cmovzq %r10, %rsi, %rsi ; cmovzq %r10, %rsi, %rsi
; orq %rsi, %rdi, %rsi ; orq %rsi, %r9, %rsi
; xorq %rdx, %rdx, %rdx ; xorq %rdx, %rdx, %rdx
; testq $64, %r8 ; testq $64, %r8
; movq %r11, %rax ; movq %r11, %rax
@@ -77,7 +80,8 @@ block0(v0: i128, v1: i32):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdx, %rcx ; movq %rdx, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r9
; shrq %cl, %r9, %r9
; movq %rsi, %r11 ; movq %rsi, %r11
; shrq %cl, %r11, %r11 ; shrq %cl, %r11, %r11
; movl $64, %ecx ; movl $64, %ecx
@@ -87,7 +91,7 @@ block0(v0: i128, v1: i32):
; xorq %r10, %r10, %r10 ; xorq %r10, %r10, %r10
; testq $127, %r8 ; testq $127, %r8
; cmovzq %r10, %rsi, %rsi ; cmovzq %r10, %rsi, %rsi
; orq %rsi, %rdi, %rsi ; orq %rsi, %r9, %rsi
; xorq %rdx, %rdx, %rdx ; xorq %rdx, %rdx, %rdx
; testq $64, %r8 ; testq $64, %r8
; movq %r11, %rax ; movq %r11, %rax
@@ -107,7 +111,8 @@ block0(v0: i128, v1: i16):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdx, %rcx ; movq %rdx, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r9
; shrq %cl, %r9, %r9
; movq %rsi, %r11 ; movq %rsi, %r11
; shrq %cl, %r11, %r11 ; shrq %cl, %r11, %r11
; movl $64, %ecx ; movl $64, %ecx
@@ -117,7 +122,7 @@ block0(v0: i128, v1: i16):
; xorq %r10, %r10, %r10 ; xorq %r10, %r10, %r10
; testq $127, %r8 ; testq $127, %r8
; cmovzq %r10, %rsi, %rsi ; cmovzq %r10, %rsi, %rsi
; orq %rsi, %rdi, %rsi ; orq %rsi, %r9, %rsi
; xorq %rdx, %rdx, %rdx ; xorq %rdx, %rdx, %rdx
; testq $64, %r8 ; testq $64, %r8
; movq %r11, %rax ; movq %r11, %rax
@@ -137,7 +142,8 @@ block0(v0: i128, v1: i8):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rdx, %rcx ; movq %rdx, %rcx
; shrq %cl, %rdi, %rdi ; movq %rdi, %r9
; shrq %cl, %r9, %r9
; movq %rsi, %r11 ; movq %rsi, %r11
; shrq %cl, %r11, %r11 ; shrq %cl, %r11, %r11
; movl $64, %ecx ; movl $64, %ecx
@@ -147,7 +153,7 @@ block0(v0: i128, v1: i8):
; xorq %r10, %r10, %r10 ; xorq %r10, %r10, %r10
; testq $127, %r8 ; testq $127, %r8
; cmovzq %r10, %rsi, %rsi ; cmovzq %r10, %rsi, %rsi
; orq %rsi, %rdi, %rsi ; orq %rsi, %r9, %rsi
; xorq %rdx, %rdx, %rdx ; xorq %rdx, %rdx, %rdx
; testq $64, %r8 ; testq $64, %r8
; movq %r11, %rax ; movq %r11, %rax
@@ -167,8 +173,8 @@ block0(v0: i64, v1: i128):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shrq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shrq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -184,8 +190,8 @@ block0(v0: i32, v1: i64, v2: i64):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shrl %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shrl %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -201,8 +207,8 @@ block0(v0: i16, v1: i128):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; shrw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; shrw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -218,8 +224,8 @@ block0(v0: i8, v1: i128):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; shrb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shrb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -234,8 +240,8 @@ block0(v0: i64, v1: i64):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shrq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shrq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -250,8 +256,8 @@ block0(v0: i64, v1: i32):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shrq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shrq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -266,8 +272,8 @@ block0(v0: i64, v1: i16):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shrq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shrq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -282,8 +288,8 @@ block0(v0: i64, v1: i8):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shrq %cl, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shrq %cl, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -298,8 +304,8 @@ block0(v0: i32, v1: i64):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shrl %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shrl %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -314,8 +320,8 @@ block0(v0: i32, v1: i32):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shrl %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shrl %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -330,8 +336,8 @@ block0(v0: i32, v1: i16):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shrl %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shrl %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -346,8 +352,8 @@ block0(v0: i32, v1: i8):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; shrl %cl, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shrl %cl, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -363,8 +369,8 @@ block0(v0: i16, v1: i64):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; shrw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; shrw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -380,8 +386,8 @@ block0(v0: i16, v1: i32):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; shrw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; shrw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -397,8 +403,8 @@ block0(v0: i16, v1: i16):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; shrw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; shrw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -414,8 +420,8 @@ block0(v0: i16, v1: i8):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $15, %rcx ; andq %rcx, $15, %rcx
; shrw %cl, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; shrw %cl, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -431,8 +437,8 @@ block0(v0: i8, v1: i64):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; shrb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shrb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -448,8 +454,8 @@ block0(v0: i8, v1: i32):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; shrb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shrb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -465,8 +471,8 @@ block0(v0: i8, v1: i16):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; shrb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shrb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -482,14 +488,12 @@ block0(v0: i8, v1: i8):
; block0: ; block0:
; movq %rsi, %rcx ; movq %rsi, %rcx
; andq %rcx, $7, %rcx ; andq %rcx, $7, %rcx
; shrb %cl, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shrb %cl, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
function %ushr_i64_const(i64) -> i64 { function %ushr_i64_const(i64) -> i64 {
block0(v0: i64): block0(v0: i64):
v1 = ushr_imm.i64 v0, 65 v1 = ushr_imm.i64 v0, 65
@@ -499,8 +503,8 @@ block0(v0: i64):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; shrq $1, %rdi, %rdi
; movq %rdi, %rax ; movq %rdi, %rax
; shrq $1, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -514,8 +518,8 @@ block0(v0: i32):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; shrl $1, %edi, %edi
; movq %rdi, %rax ; movq %rdi, %rax
; shrl $1, %eax, %eax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -529,8 +533,8 @@ block0(v0: i16):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; shrw $1, %di, %di
; movq %rdi, %rax ; movq %rdi, %rax
; shrw $1, %ax, %ax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -544,8 +548,8 @@ block0(v0: i8):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; shrb $1, %dil, %dil
; movq %rdi, %rax ; movq %rdi, %rax
; shrb $1, %al, %al
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -13,10 +13,11 @@ block0(v0: f64x2):
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; xorpd %xmm3, %xmm3, %xmm3 ; xorpd %xmm3, %xmm3, %xmm3
; maxpd %xmm0, %xmm3, %xmm0 ; movdqa %xmm0, %xmm7
; movupd const(0), %xmm7 ; maxpd %xmm7, %xmm3, %xmm7
; minpd %xmm0, %xmm7, %xmm0 ; movupd const(0), %xmm8
; roundpd $3, %xmm0, %xmm0 ; minpd %xmm7, %xmm8, %xmm7
; roundpd $3, %xmm7, %xmm0
; movupd const(1), %xmm13 ; movupd const(1), %xmm13
; addpd %xmm0, %xmm13, %xmm0 ; addpd %xmm0, %xmm13, %xmm0
; shufps $136, %xmm0, %xmm3, %xmm0 ; shufps $136, %xmm0, %xmm3, %xmm0

View File

@@ -38,8 +38,9 @@ block0(v0: i16x8):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; packsswb %xmm0, %xmm0, %xmm0 ; movdqa %xmm0, %xmm3
; pmovmskb %xmm0, %eax ; packsswb %xmm3, %xmm0, %xmm3
; pmovmskb %xmm3, %eax
; shrq $8, %rax, %rax ; shrq $8, %rax, %rax
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp

View File

@@ -52,8 +52,9 @@ block0(v0: i8x16):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; palignr $8, %xmm0, %xmm0, %xmm0 ; movdqa %xmm0, %xmm3
; pmovsxbw %xmm0, %xmm0 ; palignr $8, %xmm3, %xmm0, %xmm3
; pmovsxbw %xmm3, %xmm0
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -67,8 +68,9 @@ block0(v0: i16x8):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; palignr $8, %xmm0, %xmm0, %xmm0 ; movdqa %xmm0, %xmm3
; pmovsxwd %xmm0, %xmm0 ; palignr $8, %xmm3, %xmm0, %xmm3
; pmovsxwd %xmm3, %xmm0
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -139,8 +141,9 @@ block0(v0: i8x16):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; palignr $8, %xmm0, %xmm0, %xmm0 ; movdqa %xmm0, %xmm3
; pmovzxbw %xmm0, %xmm0 ; palignr $8, %xmm3, %xmm0, %xmm3
; pmovzxbw %xmm3, %xmm0
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret
@@ -154,8 +157,9 @@ block0(v0: i16x8):
; pushq %rbp ; pushq %rbp
; movq %rsp, %rbp ; movq %rsp, %rbp
; block0: ; block0:
; palignr $8, %xmm0, %xmm0, %xmm0 ; movdqa %xmm0, %xmm3
; pmovzxwd %xmm0, %xmm0 ; palignr $8, %xmm3, %xmm0, %xmm3
; pmovzxwd %xmm3, %xmm0
; movq %rbp, %rsp ; movq %rbp, %rsp
; popq %rbp ; popq %rbp
; ret ; ret

View File

@@ -170,6 +170,12 @@ criteria = "safe-to-deploy"
delta = "0.3.1 -> 0.3.2" delta = "0.3.1 -> 0.3.2"
notes = "The Bytecode Alliance is the author of this crate." notes = "The Bytecode Alliance is the author of this crate."
[[audits.regalloc2]]
who = "Chris Fallin <chris@cfallin.org>"
criteria = "safe-to-deploy"
delta = "0.3.2 -> 0.4.0"
notes = "The Bytecode Alliance is the author of this crate."
[[audits.rustc-demangle]] [[audits.rustc-demangle]]
who = "Alex Crichton <alex@alexcrichton.com>" who = "Alex Crichton <alex@alexcrichton.com>"
criteria = "safe-to-deploy" criteria = "safe-to-deploy"