Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 38 additions & 38 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions crates/cranexpr-codegen/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ miette = "=7.6.0"
nanoid = "=0.5.0"
thiserror = "=2.0.19"

cranelift = "=0.133.1"
cranelift-jit = "=0.133.1"
cranelift-module = "=0.133.1"
cranelift-native = "=0.133.1"
cranelift = "=0.134.2"
cranelift-jit = "=0.134.2"
cranelift-module = "=0.134.2"
cranelift-native = "=0.134.2"

cranexpr-ast = { workspace = true }
cranexpr-parser = { workspace = true }
Expand Down
8 changes: 5 additions & 3 deletions crates/cranexpr-codegen/src/compiler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ fn build_entry_fn(
let expr_val = translate_expr_simd(fx, last_expr)?;

let dest_row_offset = fx.bcx.ins().imul(y_coord, dst_stride);
let dest_col_offset = fx.bcx.ins().imul_imm(x_coord, dst_type.bytes() as i64);
let dest_col_offset = fx.bcx.ins().imul_imm_s(x_coord, dst_type.bytes() as i64);
let dest_offset = fx.bcx.ins().iadd(dest_row_offset, dest_col_offset);
store_pixel_vec_f32x4(fx, dest_ptr, dest_offset, expr_val, dst_type);

Expand All @@ -411,7 +411,8 @@ fn build_entry_fn(

fx.bcx.ins().return_(&[]);
fx.bcx.seal_all_blocks();
fx.bcx.finalize();
let frontend_config = fx.module.target_config();
fx.bcx.finalize(frontend_config);
comments = fx.comments;
}

Expand Down Expand Up @@ -520,7 +521,8 @@ fn build_select_fn(
let scalar = fx.bcx.ins().extractlane(expr_val, 0);
fx.bcx.ins().return_(&[scalar]);
fx.bcx.seal_all_blocks();
fx.bcx.finalize();
let frontend_config = fx.module.target_config();
fx.bcx.finalize(frontend_config);
comments = fx.comments;
}

Expand Down
4 changes: 2 additions & 2 deletions crates/cranexpr-codegen/src/pointer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ impl Pointer {
if offset == 0 {
self.base
} else {
fx.bcx.ins().iadd_imm(self.base, offset)
fx.bcx.ins().iadd_imm_s(self.base, offset)
}
}

Expand All @@ -39,7 +39,7 @@ impl Pointer {
let base_offset: i64 = self.offset.into();
if let Some(new_offset) = base_offset.checked_add(extra_offset) {
let base_addr = self.base;
let addr = fx.bcx.ins().iadd_imm(base_addr, new_offset);
let addr = fx.bcx.ins().iadd_imm_s(base_addr, new_offset);
Self {
base: addr,
offset: Offset32::new(0),
Expand Down
24 changes: 12 additions & 12 deletions crates/cranexpr-codegen/src/translate_simd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ fn half_to_float_simd(fx: &mut FunctionCx<'_, '_>, h: Value) -> Value {

let mant_exp_mask = splat_i32(fx, 0x7fff);
let mant_exp = fx.bcx.ins().band(h, mant_exp_mask);
let shifted = fx.bcx.ins().ishl_imm(mant_exp, 13);
let shifted = fx.bcx.ins().ishl_imm_s(mant_exp, 13);
let as_f = fx.bcx.ins().bitcast(VEC_TYPE, no_flags, shifted);

let magic = splat_f32(fx, f32::from_bits(0x7780_0000));
Expand All @@ -358,7 +358,7 @@ fn half_to_float_simd(fx: &mut FunctionCx<'_, '_>, h: Value) -> Value {

let sign_mask = splat_i32(fx, 0x8000);
let sign = fx.bcx.ins().band(h, sign_mask);
let sign = fx.bcx.ins().ishl_imm(sign, 16);
let sign = fx.bcx.ins().ishl_imm_s(sign, 16);
let result = fx.bcx.ins().bor(merged, sign);
fx.bcx.ins().bitcast(VEC_TYPE, no_flags, result)
}
Expand Down Expand Up @@ -399,17 +399,17 @@ fn float_to_half_simd(fx: &mut FunctionCx<'_, '_>, f: Value) -> Value {
let sub_o = fx.bcx.ins().isub(sub_bits, denorm_magic_bits);

// Normalized: bias the exponent and round to nearest even.
let shifted13 = fx.bcx.ins().ushr_imm(abs, 13);
let shifted13 = fx.bcx.ins().ushr_imm_s(abs, 13);
let one = splat_i32(fx, 1);
let mant_odd = fx.bcx.ins().band(shifted13, one);
let bias = splat_i32(fx, i64::from(0xc800_0fff_u32 as i32));
let norm = fx.bcx.ins().iadd(abs, bias);
let norm = fx.bcx.ins().iadd(norm, mant_odd);
let norm_o = fx.bcx.ins().ushr_imm(norm, 13);
let norm_o = fx.bcx.ins().ushr_imm_s(norm, 13);

let o = fx.bcx.ins().bitselect(is_subnormal, sub_o, norm_o);
let o = fx.bcx.ins().bitselect(is_infnan, infnan_o, o);
let sign_h = fx.bcx.ins().ushr_imm(sign, 16);
let sign_h = fx.bcx.ins().ushr_imm_s(sign, 16);
fx.bcx.ins().bor(o, sign_h)
}

Expand All @@ -420,7 +420,7 @@ fn half_to_float_scalar(fx: &mut FunctionCx<'_, '_>, h: Value) -> Value {

let mant_exp_mask = fx.bcx.ins().iconst(types::I32, 0x7fff);
let mant_exp = fx.bcx.ins().band(h, mant_exp_mask);
let shifted = fx.bcx.ins().ishl_imm(mant_exp, 13);
let shifted = fx.bcx.ins().ishl_imm_s(mant_exp, 13);
let as_f = fx.bcx.ins().bitcast(types::F32, no_flags, shifted);

let magic = fx.bcx.ins().f32const(f32::from_bits(0x7780_0000));
Expand All @@ -438,7 +438,7 @@ fn half_to_float_scalar(fx: &mut FunctionCx<'_, '_>, h: Value) -> Value {

let sign_mask = fx.bcx.ins().iconst(types::I32, 0x8000);
let sign = fx.bcx.ins().band(h, sign_mask);
let sign = fx.bcx.ins().ishl_imm(sign, 16);
let sign = fx.bcx.ins().ishl_imm_s(sign, 16);
let result = fx.bcx.ins().bor(merged, sign);
fx.bcx.ins().bitcast(types::F32, no_flags, result)
}
Expand Down Expand Up @@ -564,7 +564,7 @@ fn sin_cos_simd(fx: &mut FunctionCx<'_, '_>, x: Value, mode: SinCos) -> Value {
let n_rounded = fx.bcx.ins().nearest(n_float);
let n_int = fx.bcx.ins().fcvt_to_sint_sat(types::I32X4, n_rounded);

let odd_n_sign = fx.bcx.ins().ishl_imm(n_int, 31);
let odd_n_sign = fx.bcx.ins().ishl_imm_s(n_int, 31);

let sign = match mode {
SinCos::Sin => {
Expand Down Expand Up @@ -693,7 +693,7 @@ fn exp_simd(fx: &mut FunctionCx<'_, '_>, x: Value) -> Value {
let bias = fx.bcx.ins().iconst(types::I32, 0x7f);
let bias_splat = fx.bcx.ins().splat(types::I32X4, bias);
let biased = fx.bcx.ins().iadd(q, bias_splat);
let emm0 = fx.bcx.ins().ishl_imm(biased, 23);
let emm0 = fx.bcx.ins().ishl_imm_s(biased, 23);
let scale = fx.bcx.ins().bitcast(VEC_TYPE, MemFlagsData::new(), emm0);
let r = fx.bcx.ins().fmul(y, scale);

Expand Down Expand Up @@ -735,7 +735,7 @@ fn log_simd(fx: &mut FunctionCx<'_, '_>, x: Value) -> Value {
.bitcast(types::I32X4, MemFlagsData::new(), d_scaled);
let exp_mask = fx.bcx.ins().iconst(types::I32, 0xff);
let exp_mask_splat = fx.bcx.ins().splat(types::I32X4, exp_mask);
let biased_exp = fx.bcx.ins().ushr_imm(d_scaled_bits, 23);
let biased_exp = fx.bcx.ins().ushr_imm_s(d_scaled_bits, 23);
let biased_exp = fx.bcx.ins().band(biased_exp, exp_mask_splat);
let bias = fx.bcx.ins().iconst(types::I32, 0x7f);
let bias_splat = fx.bcx.ins().splat(types::I32X4, bias);
Expand All @@ -748,7 +748,7 @@ fn log_simd(fx: &mut FunctionCx<'_, '_>, x: Value) -> Value {
let e = fx.bcx.ins().fcvt_from_sint(VEC_TYPE, e_int);

let d_bits = fx.bcx.ins().bitcast(types::I32X4, MemFlagsData::new(), d);
let e_shifted = fx.bcx.ins().ishl_imm(e_int, 23);
let e_shifted = fx.bcx.ins().ishl_imm_s(e_int, 23);
let m_bits = fx.bcx.ins().isub(d_bits, e_shifted);
let m = fx.bcx.ins().bitcast(VEC_TYPE, MemFlagsData::new(), m_bits);

Expand Down Expand Up @@ -1304,7 +1304,7 @@ pub(crate) fn codegen_pixel_offset(

// pixel_offset = y * stride + x * bytes_per_sample
let row_offset = fx.bcx.ins().imul(y, src_stride);
let col_offset = fx.bcx.ins().imul_imm(x, src_type.bytes() as i64);
let col_offset = fx.bcx.ins().imul_imm_s(x, src_type.bytes() as i64);
let pixel_offset = fx.bcx.ins().iadd(row_offset, col_offset);

(src_ptr, pixel_offset)
Expand Down
Loading
Loading