From 441401f9d69146da1f10b7043d9e863161448991 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Tue, 25 Oct 2022 19:03:48 +0200 Subject: [PATCH] Fix zero init sequence for i128 in cranelift-frontend (#5115) iconst.i128 is no longer allowed, so we have to use iconst.i64 + uextend instead. --- cranelift/frontend/src/ssa.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cranelift/frontend/src/ssa.rs b/cranelift/frontend/src/ssa.rs index 64331a9168..0f2b88e740 100644 --- a/cranelift/frontend/src/ssa.rs +++ b/cranelift/frontend/src/ssa.rs @@ -15,7 +15,7 @@ use cranelift_codegen::cursor::{Cursor, FuncCursor}; use cranelift_codegen::entity::{EntityList, EntitySet, ListPool, SecondaryMap}; use cranelift_codegen::ir::immediates::{Ieee32, Ieee64}; use cranelift_codegen::ir::instructions::BranchInfo; -use cranelift_codegen::ir::types::{F32, F64}; +use cranelift_codegen::ir::types::{F32, F64, I128, I64}; use cranelift_codegen::ir::{ Block, Function, Inst, InstBuilder, InstructionData, JumpTableData, Type, Value, }; @@ -140,7 +140,10 @@ enum Call { /// Emit instructions to produce a zero value in the given type. fn emit_zero(ty: Type, mut cur: FuncCursor) -> Value { - if ty.is_int() { + if ty == I128 { + let zero = cur.ins().iconst(I64, 0); + cur.ins().uextend(I128, zero) + } else if ty.is_int() { cur.ins().iconst(ty, 0) } else if ty == F32 { cur.ins().f32const(Ieee32::with_bits(0))