Skip to content

Commit 529b6ad

Browse files
authored
Winch: Refactor unop to remove size parameter (bytecodealliance#10032)
1 parent 980a136 commit 529b6ad

File tree

2 files changed

+55
-79
lines changed

2 files changed

+55
-79
lines changed

winch/codegen/src/codegen/context.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -329,13 +329,13 @@ impl<'a> CodeGenContext<'a, Emission> {
329329
/// Prepares arguments for emitting a unary operation.
330330
///
331331
/// The `emit` function returns the `TypedReg` to put on the value stack.
332-
pub fn unop<F, M>(&mut self, masm: &mut M, size: OperandSize, emit: &mut F) -> Result<()>
332+
pub fn unop<F, M>(&mut self, masm: &mut M, emit: &mut F) -> Result<()>
333333
where
334-
F: FnMut(&mut M, Reg, OperandSize) -> Result<TypedReg>,
334+
F: FnMut(&mut M, Reg) -> Result<TypedReg>,
335335
M: MacroAssembler,
336336
{
337337
let typed_reg = self.pop_to_reg(masm, None)?;
338-
let dst = emit(masm, typed_reg.reg, size)?;
338+
let dst = emit(masm, typed_reg.reg)?;
339339
self.stack.push(dst.into());
340340

341341
Ok(())

winch/codegen/src/visitor.rs

Lines changed: 52 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -472,35 +472,31 @@ where
472472
}
473473

474474
fn visit_f32_abs(&mut self) -> Self::Output {
475-
self.context
476-
.unop(self.masm, OperandSize::S32, &mut |masm, reg, size| {
477-
masm.float_abs(writable!(reg), size)?;
478-
Ok(TypedReg::f32(reg))
479-
})
475+
self.context.unop(self.masm, &mut |masm, reg| {
476+
masm.float_abs(writable!(reg), OperandSize::S32)?;
477+
Ok(TypedReg::f32(reg))
478+
})
480479
}
481480

482481
fn visit_f64_abs(&mut self) -> Self::Output {
483-
self.context
484-
.unop(self.masm, OperandSize::S64, &mut |masm, reg, size| {
485-
masm.float_abs(writable!(reg), size)?;
486-
Ok(TypedReg::f64(reg))
487-
})
482+
self.context.unop(self.masm, &mut |masm, reg| {
483+
masm.float_abs(writable!(reg), OperandSize::S64)?;
484+
Ok(TypedReg::f64(reg))
485+
})
488486
}
489487

490488
fn visit_f32_neg(&mut self) -> Self::Output {
491-
self.context
492-
.unop(self.masm, OperandSize::S32, &mut |masm, reg, size| {
493-
masm.float_neg(writable!(reg), size)?;
494-
Ok(TypedReg::f32(reg))
495-
})
489+
self.context.unop(self.masm, &mut |masm, reg| {
490+
masm.float_neg(writable!(reg), OperandSize::S32)?;
491+
Ok(TypedReg::f32(reg))
492+
})
496493
}
497494

498495
fn visit_f64_neg(&mut self) -> Self::Output {
499-
self.context
500-
.unop(self.masm, OperandSize::S64, &mut |masm, reg, size| {
501-
masm.float_neg(writable!(reg), size)?;
502-
Ok(TypedReg::f64(reg))
503-
})
496+
self.context.unop(self.masm, &mut |masm, reg| {
497+
masm.float_neg(writable!(reg), OperandSize::S64)?;
498+
Ok(TypedReg::f64(reg))
499+
})
504500
}
505501

506502
fn visit_f32_floor(&mut self) -> Self::Output {
@@ -608,19 +604,17 @@ where
608604
}
609605

610606
fn visit_f32_sqrt(&mut self) -> Self::Output {
611-
self.context
612-
.unop(self.masm, OperandSize::S32, &mut |masm, reg, size| {
613-
masm.float_sqrt(writable!(reg), reg, size)?;
614-
Ok(TypedReg::f32(reg))
615-
})
607+
self.context.unop(self.masm, &mut |masm, reg| {
608+
masm.float_sqrt(writable!(reg), reg, OperandSize::S32)?;
609+
Ok(TypedReg::f32(reg))
610+
})
616611
}
617612

618613
fn visit_f64_sqrt(&mut self) -> Self::Output {
619-
self.context
620-
.unop(self.masm, OperandSize::S64, &mut |masm, reg, size| {
621-
masm.float_sqrt(writable!(reg), reg, size)?;
622-
Ok(TypedReg::f64(reg))
623-
})
614+
self.context.unop(self.masm, &mut |masm, reg| {
615+
masm.float_sqrt(writable!(reg), reg, OperandSize::S64)?;
616+
Ok(TypedReg::f64(reg))
617+
})
624618
}
625619

626620
fn visit_f32_eq(&mut self) -> Self::Output {
@@ -830,19 +824,17 @@ where
830824
}
831825

832826
fn visit_f32_demote_f64(&mut self) -> Self::Output {
833-
self.context
834-
.unop(self.masm, OperandSize::S64, &mut |masm, reg, _size| {
835-
masm.demote(writable!(reg), reg)?;
836-
Ok(TypedReg::f32(reg))
837-
})
827+
self.context.unop(self.masm, &mut |masm, reg| {
828+
masm.demote(writable!(reg), reg)?;
829+
Ok(TypedReg::f32(reg))
830+
})
838831
}
839832

840833
fn visit_f64_promote_f32(&mut self) -> Self::Output {
841-
self.context
842-
.unop(self.masm, OperandSize::S32, &mut |masm, reg, _size| {
843-
masm.promote(writable!(reg), reg)?;
844-
Ok(TypedReg::f64(reg))
845-
})
834+
self.context.unop(self.masm, &mut |masm, reg| {
835+
masm.promote(writable!(reg), reg)?;
836+
Ok(TypedReg::f64(reg))
837+
})
846838
}
847839

848840
fn visit_i32_add(&mut self) -> Self::Output {
@@ -1026,53 +1018,53 @@ where
10261018
fn visit_i32_eqz(&mut self) -> Self::Output {
10271019
use OperandSize::*;
10281020

1029-
self.context.unop(self.masm, S32, &mut |masm, reg, size| {
1030-
masm.cmp_with_set(writable!(reg.into()), RegImm::i32(0), IntCmpKind::Eq, size)?;
1021+
self.context.unop(self.masm, &mut |masm, reg| {
1022+
masm.cmp_with_set(writable!(reg.into()), RegImm::i32(0), IntCmpKind::Eq, S32)?;
10311023
Ok(TypedReg::i32(reg))
10321024
})
10331025
}
10341026

10351027
fn visit_i64_eqz(&mut self) -> Self::Output {
10361028
use OperandSize::*;
10371029

1038-
self.context.unop(self.masm, S64, &mut |masm, reg, size| {
1039-
masm.cmp_with_set(writable!(reg.into()), RegImm::i64(0), IntCmpKind::Eq, size)?;
1030+
self.context.unop(self.masm, &mut |masm, reg| {
1031+
masm.cmp_with_set(writable!(reg.into()), RegImm::i64(0), IntCmpKind::Eq, S64)?;
10401032
Ok(TypedReg::i32(reg)) // Return value for `i64.eqz` is an `i32`.
10411033
})
10421034
}
10431035

10441036
fn visit_i32_clz(&mut self) -> Self::Output {
10451037
use OperandSize::*;
10461038

1047-
self.context.unop(self.masm, S32, &mut |masm, reg, size| {
1048-
masm.clz(writable!(reg), reg, size)?;
1039+
self.context.unop(self.masm, &mut |masm, reg| {
1040+
masm.clz(writable!(reg), reg, S32)?;
10491041
Ok(TypedReg::i32(reg))
10501042
})
10511043
}
10521044

10531045
fn visit_i64_clz(&mut self) -> Self::Output {
10541046
use OperandSize::*;
10551047

1056-
self.context.unop(self.masm, S64, &mut |masm, reg, size| {
1057-
masm.clz(writable!(reg), reg, size)?;
1048+
self.context.unop(self.masm, &mut |masm, reg| {
1049+
masm.clz(writable!(reg), reg, S64)?;
10581050
Ok(TypedReg::i64(reg))
10591051
})
10601052
}
10611053

10621054
fn visit_i32_ctz(&mut self) -> Self::Output {
10631055
use OperandSize::*;
10641056

1065-
self.context.unop(self.masm, S32, &mut |masm, reg, size| {
1066-
masm.ctz(writable!(reg), reg, size)?;
1057+
self.context.unop(self.masm, &mut |masm, reg| {
1058+
masm.ctz(writable!(reg), reg, S32)?;
10671059
Ok(TypedReg::i32(reg))
10681060
})
10691061
}
10701062

10711063
fn visit_i64_ctz(&mut self) -> Self::Output {
10721064
use OperandSize::*;
10731065

1074-
self.context.unop(self.masm, S64, &mut |masm, reg, size| {
1075-
masm.ctz(writable!(reg), reg, size)?;
1066+
self.context.unop(self.masm, &mut |masm, reg| {
1067+
masm.ctz(writable!(reg), reg, S64)?;
10761068
Ok(TypedReg::i64(reg))
10771069
})
10781070
}
@@ -1200,72 +1192,56 @@ where
12001192
}
12011193

12021194
fn visit_i32_wrap_i64(&mut self) -> Self::Output {
1203-
use OperandSize::*;
1204-
1205-
self.context.unop(self.masm, S64, &mut |masm, reg, _size| {
1195+
self.context.unop(self.masm, &mut |masm, reg| {
12061196
masm.wrap(writable!(reg), reg)?;
12071197
Ok(TypedReg::i32(reg))
12081198
})
12091199
}
12101200

12111201
fn visit_i64_extend_i32_s(&mut self) -> Self::Output {
1212-
use OperandSize::*;
1213-
1214-
self.context.unop(self.masm, S32, &mut |masm, reg, _size| {
1202+
self.context.unop(self.masm, &mut |masm, reg| {
12151203
masm.extend(writable!(reg), reg, ExtendKind::I64Extend32S)?;
12161204
Ok(TypedReg::i64(reg))
12171205
})
12181206
}
12191207

12201208
fn visit_i64_extend_i32_u(&mut self) -> Self::Output {
1221-
use OperandSize::*;
1222-
1223-
self.context.unop(self.masm, S32, &mut |masm, reg, _size| {
1209+
self.context.unop(self.masm, &mut |masm, reg| {
12241210
masm.extend(writable!(reg), reg, ExtendKind::I64Extend32U)?;
12251211
Ok(TypedReg::i64(reg))
12261212
})
12271213
}
12281214

12291215
fn visit_i32_extend8_s(&mut self) -> Self::Output {
1230-
use OperandSize::*;
1231-
1232-
self.context.unop(self.masm, S32, &mut |masm, reg, _size| {
1216+
self.context.unop(self.masm, &mut |masm, reg| {
12331217
masm.extend(writable!(reg), reg, ExtendKind::I32Extend8S)?;
12341218
Ok(TypedReg::i32(reg))
12351219
})
12361220
}
12371221

12381222
fn visit_i32_extend16_s(&mut self) -> Self::Output {
1239-
use OperandSize::*;
1240-
1241-
self.context.unop(self.masm, S32, &mut |masm, reg, _size| {
1223+
self.context.unop(self.masm, &mut |masm, reg| {
12421224
masm.extend(writable!(reg), reg, ExtendKind::I32Extend16S)?;
12431225
Ok(TypedReg::i32(reg))
12441226
})
12451227
}
12461228

12471229
fn visit_i64_extend8_s(&mut self) -> Self::Output {
1248-
use OperandSize::*;
1249-
1250-
self.context.unop(self.masm, S64, &mut |masm, reg, _size| {
1230+
self.context.unop(self.masm, &mut |masm, reg| {
12511231
masm.extend(writable!(reg), reg, ExtendKind::I64Extend8S)?;
12521232
Ok(TypedReg::i64(reg))
12531233
})
12541234
}
12551235

12561236
fn visit_i64_extend16_s(&mut self) -> Self::Output {
1257-
use OperandSize::*;
1258-
1259-
self.context.unop(self.masm, S64, &mut |masm, reg, _size| {
1237+
self.context.unop(self.masm, &mut |masm, reg| {
12601238
masm.extend(writable!(reg), reg, ExtendKind::I64Extend16S)?;
12611239
Ok(TypedReg::i64(reg))
12621240
})
12631241
}
12641242

12651243
fn visit_i64_extend32_s(&mut self) -> Self::Output {
1266-
use OperandSize::*;
1267-
1268-
self.context.unop(self.masm, S64, &mut |masm, reg, _size| {
1244+
self.context.unop(self.masm, &mut |masm, reg| {
12691245
masm.extend(writable!(reg), reg, ExtendKind::I64Extend32S)?;
12701246
Ok(TypedReg::i64(reg))
12711247
})

0 commit comments

Comments
 (0)