diff --git a/Cargo.lock b/Cargo.lock index f9297eb..0179b92 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -220,9 +220,9 @@ checksum = "18f12cc9948ed9604230cdddc7c86e270f9401ccbe3c2e98a4378c5e7632212f" [[package]] name = "cranelift" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce1a521b51cb415f320ea1257bf6caaf08a112d048e7d875c855959918fc436" +checksum = "acb6f5299ee35492ba1a70a3c80e8b76291bac7503ebff4a8815958060d3b2af" dependencies = [ "cranelift-codegen", "cranelift-frontend", @@ -231,27 +231,27 @@ dependencies = [ [[package]] name = "cranelift-assembler-x64" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e06aeba2c965fc446d13c56a6ccb2631b78445d7544543dd9a25289977630914" +checksum = "8f0435c6939d6ef218bf0a3063094f2cc5c46f7a44a88f81cf932da8d3922ff8" dependencies = [ "cranelift-assembler-x64-meta", ] [[package]] name = "cranelift-assembler-x64-meta" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee2d2dde4ec1352715595b5cfa6fe2e5b8ebb9da3457b3ee8db0aa2808c069aa" +checksum = "aca52511cc21a2c9c927aef493d11c8087bdc5483249a3d93aee41e81b8bd4d1" dependencies = [ "cranelift-srcgen", ] [[package]] name = "cranelift-bforest" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03b4982ef9fa54ec9eee841e891e7ddc5434be1250e88de31572e000c888f30b" +checksum = "6867e99f068454b0c81c50b807af88aa80aaf383105e2be26675d81fc4278466" dependencies = [ "cranelift-entity", "wasmtime-internal-core", @@ -259,18 +259,18 @@ dependencies = [ [[package]] name = "cranelift-bitset" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "529143118c4eeb58c39ecb02319557d512be6c61348486422974ab8e3906b8a8" +checksum = "3cf66017aed971344230199ad35ca01c955cf824a0e65fed5240452d2a302445" dependencies = [ "wasmtime-internal-core", ] [[package]] name = "cranelift-codegen" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7780677247ad3577e3a6a3ebf43f39b325a11d6393db72b2c9968a910d4d13d" +checksum = "933b2e5237665bf9367a34ad2100eed70c94b2796586cb09d9ba11693e061667" dependencies = [ "bumpalo", "cranelift-assembler-x64", @@ -295,9 +295,9 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9645250416cbf92454fe61160e17e026e0ce405906a54500b114f923ddffc9" +checksum = "322e3ca0603683cc17f0c808559c0fb85ad52b0f20ace0478bdd4ba2fa1e9678" dependencies = [ "cranelift-assembler-x64-meta", "cranelift-codegen-shared", @@ -307,24 +307,24 @@ dependencies = [ [[package]] name = "cranelift-codegen-shared" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20ee8d222ff0fd3681791979afbf88586ac9f49010d3db96b3cbe4c96759aee3" +checksum = "287ab88211d049178dc8dda243e2db176919d8b29db605c0efc7c6d76ebea0f7" [[package]] name = "cranelift-control" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "591abe6f5312bd2c4220f1b3bead56c2ad00257c52668015ba013b85dcf2a17a" +checksum = "c11438f9becf9a1e1e061bf76a33241b941a07ed01a489e9dad5fa79dc3624e9" dependencies = [ "arbitrary", ] [[package]] name = "cranelift-entity" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5300c49cf940526fe771517b3b3eabd5d0ff164ee61698579cf403fe8d3af3c" +checksum = "584ecabe1462593a9cba9efbf9022e0987421ddb548989b455ab8bdd444b743c" dependencies = [ "cranelift-bitset", "wasmtime-internal-core", @@ -332,9 +332,9 @@ dependencies = [ [[package]] name = "cranelift-frontend" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da4adbf760207fdbbe130f1191cce01cdef66831a9f648b1f39ff2800d126d45" +checksum = "34249873145213a12106d5fd8a98a9dc9e90e16525e2337b2907874d1e7e9ee7" dependencies = [ "cranelift-codegen", "hashbrown 0.17.1", @@ -345,15 +345,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8315b21ff018226a42a60a4702c2dd75f6447cac26e9bca622e14c22088c2ff5" +checksum = "b6f1c1dc4d6b4bc4f0be12b08cee0e59f7610287827aa62590f8e9ec6f45dff4" [[package]] name = "cranelift-jit" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acac8da2c71d03c39756866a4bbf31f43d912f054cf9cbbaacc33bf80360366a" +checksum = "fc96ccb592b046be204bf2fbeb397761384e5da10cbf0c2095078af3eaaebe55" dependencies = [ "anyhow", "cranelift-codegen", @@ -372,9 +372,9 @@ dependencies = [ [[package]] name = "cranelift-module" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbbdbe0c3c6cd97359ac2f6744187e89a48e202674e24200afc653f6aa9b7c2" +checksum = "790e3fa73ee25bbb25eee937986051f8b6f6a2f5582477662f95e09d1e9f85f3" dependencies = [ "anyhow", "cranelift-codegen", @@ -383,9 +383,9 @@ dependencies = [ [[package]] name = "cranelift-native" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d506ef23a60715bde451b06620b14402166ded3b648454fccbf04f3e46a4aa70" +checksum = "31d9e4f6d9a3777b1ffa818000b4a6d7afd1b8787af71a9c58d94baef9076ced" dependencies = [ "cranelift-codegen", "libc", @@ -394,9 +394,9 @@ dependencies = [ [[package]] name = "cranelift-srcgen" -version = "0.133.1" +version = "0.134.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48ed47e602652e3410f9387fc0db70fefadcee4d78a78881421aabcab4e26b89" +checksum = "4155f8a1afdef96a0272c67804926eee4ef35f9708ab22ad6878d4c9543df596" [[package]] name = "cranexpr" @@ -770,9 +770,9 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "memmap2" -version = "0.2.3" +version = "0.9.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "723e3ebdcdc5c023db1df315364573789f8857c11b631a2fdfad7c00f5c046b4" +checksum = "d1219ed1b7f229ee7104d281dd01d6802fe28bb6e95d292942c4daacdeb798c0" dependencies = [ "libc", ] @@ -1364,9 +1364,9 @@ dependencies = [ [[package]] name = "wasmtime-internal-core" -version = "46.0.1" +version = "47.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fc28372e36eaf8cf70faa83b5779137f7e99c8d18569a125d1580e735cc9e4d" +checksum = "ea33e1f9685be82f90223bebcf2ffefb6b596ea3d82a3c42384527b9c6f5b447" dependencies = [ "hashbrown 0.17.1", "libm", @@ -1374,9 +1374,9 @@ dependencies = [ [[package]] name = "wasmtime-internal-jit-icache-coherence" -version = "46.0.1" +version = "47.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eba651d44ab0faad4c58106b3adb45068189fb65ef50f0c404b6d9e3bf81a357" +checksum = "fae6decb025ae6d12f3391b36deb62a6838d45b18864f796d84bced722ceac0d" dependencies = [ "cfg-if", "libc", diff --git a/crates/cranexpr-codegen/Cargo.toml b/crates/cranexpr-codegen/Cargo.toml index 0556acf..5dd9e15 100644 --- a/crates/cranexpr-codegen/Cargo.toml +++ b/crates/cranexpr-codegen/Cargo.toml @@ -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 } diff --git a/crates/cranexpr-codegen/src/compiler.rs b/crates/cranexpr-codegen/src/compiler.rs index 6893c8c..dbeb78f 100644 --- a/crates/cranexpr-codegen/src/compiler.rs +++ b/crates/cranexpr-codegen/src/compiler.rs @@ -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); @@ -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; } @@ -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; } diff --git a/crates/cranexpr-codegen/src/pointer.rs b/crates/cranexpr-codegen/src/pointer.rs index e3aaf24..5ecd456 100644 --- a/crates/cranexpr-codegen/src/pointer.rs +++ b/crates/cranexpr-codegen/src/pointer.rs @@ -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) } } @@ -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), diff --git a/crates/cranexpr-codegen/src/translate_simd.rs b/crates/cranexpr-codegen/src/translate_simd.rs index bb44d4e..4914c06 100644 --- a/crates/cranexpr-codegen/src/translate_simd.rs +++ b/crates/cranexpr-codegen/src/translate_simd.rs @@ -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)); @@ -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) } @@ -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) } @@ -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)); @@ -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) } @@ -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 => { @@ -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); @@ -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); @@ -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); @@ -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) diff --git a/devenv.lock b/devenv.lock index 1ba16a0..0332572 100644 --- a/devenv.lock +++ b/devenv.lock @@ -3,11 +3,11 @@ "devenv": { "locked": { "dir": "src/modules", - "lastModified": 1784142617, - "narHash": "sha256-mN/bY/kthTv86mIVH4trz6NJAfRglO2x4wImvTGkFZ8=", + "lastModified": 1785245184, + "narHash": "sha256-Hbm7NUvVAJGglMHYBy7XsSjh3r5FLNec0aI0hjv8xvc=", "owner": "cachix", "repo": "devenv", - "rev": "4ed83c00354d5a6b4cece8aa8c55028b4e4421e4", + "rev": "15ad4aa8c89d3a587f5982a5f3a84df156d45b75", "type": "github" }, "original": { @@ -22,11 +22,11 @@ "nixpkgs-src": "nixpkgs-src" }, "locked": { - "lastModified": 1783345554, - "narHash": "sha256-LZhOm4kqjHUnwP4CNHpaqqEVcumGNd1PvOEOad8LkS0=", + "lastModified": 1785104946, + "narHash": "sha256-VLSslwCjlsICjyaUfrS7lGMypmO03fzmDAqhD85Ae84=", "owner": "cachix", "repo": "devenv-nixpkgs", - "rev": "6004ea8c229fe9d41b21c6f4c76bf6c2e10771dd", + "rev": "c946ff36bf193309589932c371bd5ae6653c912e", "type": "github" }, "original": { @@ -39,11 +39,11 @@ "nixpkgs-src": { "flake": false, "locked": { - "lastModified": 1783279667, - "narHash": "sha256-/NAkDSsve+GNM0Bt6tleJdCGfsTlK89nPjkVOzZMo0s=", + "lastModified": 1784783405, + "narHash": "sha256-4IHyyLgLBdKefkljdKod4IMn023pQiDXAWJA187cmdY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f205b5574fd0cb7da5b702a2da51507b7f4fdd1b", + "rev": "7525d999cd850b9a488817abc89c75dc733acf17", "type": "github" }, "original": { @@ -67,11 +67,11 @@ ] }, "locked": { - "lastModified": 1784091390, - "narHash": "sha256-aILAwrBQPhKldL98N8lmsbfst3OPtbMM4vT2VXn40/Y=", + "lastModified": 1785216007, + "narHash": "sha256-KrGilCiFVxEQOaBD3TODhklZzE7uICQvqsBWgycIABA=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "a7887636a3959168bd1ba7ef24a8a70b168dcb56", + "rev": "8ec8a5a41f8d8244e672829c9cd705416139d3f0", "type": "github" }, "original": {