@@ -283,6 +283,20 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
283283 ret_lane. write_cvalue ( fx, val) ;
284284 }
285285
286+ sym:: simd_insert_dyn => {
287+ intrinsic_args ! ( fx, args => ( base, idx, val) ; intrinsic) ;
288+
289+ if !base. layout ( ) . ty . is_simd ( ) {
290+ report_simd_type_validation_error ( fx, intrinsic, span, base. layout ( ) . ty ) ;
291+ return ;
292+ }
293+
294+ let idx = idx. load_scalar ( fx) ;
295+
296+ ret. write_cvalue ( fx, base) ;
297+ ret. write_lane_dyn ( fx, idx, val) ;
298+ }
299+
286300 sym:: simd_extract => {
287301 let ( v, idx) = match args {
288302 [ v, idx] => ( v, idx) ,
@@ -318,6 +332,20 @@ pub(super) fn codegen_simd_intrinsic_call<'tcx>(
318332 ret. write_cvalue ( fx, ret_lane) ;
319333 }
320334
335+ sym:: simd_extract_dyn => {
336+ intrinsic_args ! ( fx, args => ( v, idx) ; intrinsic) ;
337+
338+ if !v. layout ( ) . ty . is_simd ( ) {
339+ report_simd_type_validation_error ( fx, intrinsic, span, v. layout ( ) . ty ) ;
340+ return ;
341+ }
342+
343+ let idx = idx. load_scalar ( fx) ;
344+
345+ let ret_lane = v. value_lane_dyn ( fx, idx) ;
346+ ret. write_cvalue ( fx, ret_lane) ;
347+ }
348+
321349 sym:: simd_neg
322350 | sym:: simd_bswap
323351 | sym:: simd_bitreverse
0 commit comments