Lines Matching refs:SIMD128
1 …ls -wasm-keep-registers -mattr=+unimplemented-simd128 | FileCheck %s --check-prefixes CHECK,SIMD128
2 …ep-registers -mattr=+unimplemented-simd128 -fast-isel | FileCheck %s --check-prefixes CHECK,SIMD128
4 ; Test that SIMD128 intrinsics lower as expected. These intrinsics are
15 ; SIMD128-NEXT: .functype swizzle_v16i8 (v128, v128) -> (v128){{$}}
16 ; SIMD128-NEXT: v8x16.swizzle $push[[R:[0-9]+]]=, $0, $1{{$}}
17 ; SIMD128-NEXT: return $pop[[R]]{{$}}
25 ; SIMD128-NEXT: .functype add_sat_s_v16i8 (v128, v128) -> (v128){{$}}
26 ; SIMD128-NEXT: i8x16.add_saturate_s $push[[R:[0-9]+]]=, $0, $1{{$}}
27 ; SIMD128-NEXT: return $pop[[R]]{{$}}
35 ; SIMD128-NEXT: .functype add_sat_u_v16i8 (v128, v128) -> (v128){{$}}
36 ; SIMD128-NEXT: i8x16.add_saturate_u $push[[R:[0-9]+]]=, $0, $1{{$}}
37 ; SIMD128-NEXT: return $pop[[R]]{{$}}
45 ; SIMD128-NEXT: .functype sub_sat_s_v16i8 (v128, v128) -> (v128){{$}}
46 ; SIMD128-NEXT: i8x16.sub_saturate_s $push[[R:[0-9]+]]=, $0, $1{{$}}
47 ; SIMD128-NEXT: return $pop[[R]]{{$}}
57 ; SIMD128-NEXT: .functype sub_sat_u_v16i8 (v128, v128) -> (v128){{$}}
58 ; SIMD128-NEXT: i8x16.sub_saturate_u $push[[R:[0-9]+]]=, $0, $1{{$}}
59 ; SIMD128-NEXT: return $pop[[R]]{{$}}
69 ; SIMD128-NEXT: .functype avgr_u_v16i8 (v128, v128) -> (v128){{$}}
70 ; SIMD128-NEXT: i8x16.avgr_u $push[[R:[0-9]+]]=, $0, $1{{$}}
71 ; SIMD128-NEXT: return $pop[[R]]{{$}}
79 ; SIMD128-NEXT: .functype popcnt_v16i8 (v128) -> (v128){{$}}
80 ; SIMD128-NEXT: i8x16.popcnt $push[[R:[0-9]+]]=, $0{{$}}
81 ; SIMD128-NEXT: return $pop[[R]]{{$}}
89 ; SIMD128-NEXT: .functype any_v16i8 (v128) -> (i32){{$}}
90 ; SIMD128-NEXT: i8x16.any_true $push[[R:[0-9]+]]=, $0{{$}}
91 ; SIMD128-NEXT: return $pop[[R]]{{$}}
99 ; SIMD128-NEXT: .functype all_v16i8 (v128) -> (i32){{$}}
100 ; SIMD128-NEXT: i8x16.all_true $push[[R:[0-9]+]]=, $0{{$}}
101 ; SIMD128-NEXT: return $pop[[R]]{{$}}
109 ; SIMD128-NEXT: .functype bitmask_v16i8 (v128) -> (i32){{$}}
110 ; SIMD128-NEXT: i8x16.bitmask $push[[R:[0-9]+]]=, $0{{$}}
111 ; SIMD128-NEXT: return $pop[[R]]{{$}}
119 ; SIMD128-NEXT: .functype bitselect_v16i8 (v128, v128, v128) -> (v128){{$}}
120 ; SIMD128-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
121 ; SIMD128-NEXT: return $pop[[R]]{{$}}
131 ; SIMD128-NEXT: .functype signselect_v16i8 (v128, v128, v128) -> (v128){{$}}
132 ; SIMD128-NEXT: i8x16.signselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
133 ; SIMD128-NEXT: return $pop[[R]]{{$}}
143 ; SIMD128-NEXT: .functype narrow_signed_v16i8 (v128, v128) -> (v128){{$}}
144 ; SIMD128-NEXT: i8x16.narrow_i16x8_s $push[[R:[0-9]+]]=, $0, $1{{$}}
145 ; SIMD128-NEXT: return $pop[[R]]{{$}}
155 ; SIMD128-NEXT: .functype narrow_unsigned_v16i8 (v128, v128) -> (v128){{$}}
156 ; SIMD128-NEXT: i8x16.narrow_i16x8_u $push[[R:[0-9]+]]=, $0, $1{{$}}
157 ; SIMD128-NEXT: return $pop[[R]]{{$}}
167 ; NO-SIMD128-NOT: v8x16
168 ; SIMD128-NEXT: .functype shuffle_v16i8 (v128, v128) -> (v128){{$}}
169 ; SIMD128-NEXT: v8x16.shuffle $push[[R:[0-9]+]]=, $0, $1,
170 ; SIMD128-SAME: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0{{$}}
171 ; SIMD128-NEXT: return $pop[[R]]{{$}}
183 ; NO-SIMD128-NOT: v8x16
184 ; SIMD128-NEXT: .functype shuffle_undef_v16i8 (v128, v128) -> (v128){{$}}
185 ; SIMD128-NEXT: v8x16.shuffle $push[[R:[0-9]+]]=, $0, $1,
186 ; SIMD128-SAME: 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2{{$}}
187 ; SIMD128-NEXT: return $pop[[R]]{{$}}
200 ; SIMD128-NEXT: .functype add_sat_s_v8i16 (v128, v128) -> (v128){{$}}
201 ; SIMD128-NEXT: i16x8.add_saturate_s $push[[R:[0-9]+]]=, $0, $1{{$}}
202 ; SIMD128-NEXT: return $pop[[R]]{{$}}
210 ; SIMD128-NEXT: .functype add_sat_u_v8i16 (v128, v128) -> (v128){{$}}
211 ; SIMD128-NEXT: i16x8.add_saturate_u $push[[R:[0-9]+]]=, $0, $1{{$}}
212 ; SIMD128-NEXT: return $pop[[R]]{{$}}
220 ; SIMD128-NEXT: .functype sub_sat_s_v8i16 (v128, v128) -> (v128){{$}}
221 ; SIMD128-NEXT: i16x8.sub_saturate_s $push[[R:[0-9]+]]=, $0, $1{{$}}
222 ; SIMD128-NEXT: return $pop[[R]]{{$}}
232 ; SIMD128-NEXT: .functype sub_sat_u_v8i16 (v128, v128) -> (v128){{$}}
233 ; SIMD128-NEXT: i16x8.sub_saturate_u $push[[R:[0-9]+]]=, $0, $1{{$}}
234 ; SIMD128-NEXT: return $pop[[R]]{{$}}
244 ; SIMD128-NEXT: .functype avgr_u_v8i16 (v128, v128) -> (v128){{$}}
245 ; SIMD128-NEXT: i16x8.avgr_u $push[[R:[0-9]+]]=, $0, $1{{$}}
246 ; SIMD128-NEXT: return $pop[[R]]{{$}}
254 ; SIMD128-NEXT: .functype q15mulr_sat_s_v8i16 (v128, v128) -> (v128){{$}}
255 ; SIMD128-NEXT: i16x8.q15mulr_sat_s $push[[R:[0-9]+]]=, $0, $1{{$}}
256 ; SIMD128-NEXT: return $pop[[R]]{{$}}
265 ; SIMD128-NEXT: .functype extmul_low_s_v8i16 (v128, v128) -> (v128){{$}}
266 ; SIMD128-NEXT: i16x8.extmul_low_i8x16_s $push[[R:[0-9]+]]=, $0, $1{{$}}
267 ; SIMD128-NEXT: return $pop[[R]]{{$}}
277 ; SIMD128-NEXT: .functype extmul_high_s_v8i16 (v128, v128) -> (v128){{$}}
278 ; SIMD128-NEXT: i16x8.extmul_high_i8x16_s $push[[R:[0-9]+]]=, $0, $1{{$}}
279 ; SIMD128-NEXT: return $pop[[R]]{{$}}
289 ; SIMD128-NEXT: .functype extmul_low_u_v8i16 (v128, v128) -> (v128){{$}}
290 ; SIMD128-NEXT: i16x8.extmul_low_i8x16_u $push[[R:[0-9]+]]=, $0, $1{{$}}
291 ; SIMD128-NEXT: return $pop[[R]]{{$}}
301 ; SIMD128-NEXT: .functype extmul_high_u_v8i16 (v128, v128) -> (v128){{$}}
302 ; SIMD128-NEXT: i16x8.extmul_high_i8x16_u $push[[R:[0-9]+]]=, $0, $1{{$}}
303 ; SIMD128-NEXT: return $pop[[R]]{{$}}
313 ; SIMD128-NEXT: .functype any_v8i16 (v128) -> (i32){{$}}
314 ; SIMD128-NEXT: i16x8.any_true $push[[R:[0-9]+]]=, $0{{$}}
315 ; SIMD128-NEXT: return $pop[[R]]{{$}}
323 ; SIMD128-NEXT: .functype all_v8i16 (v128) -> (i32){{$}}
324 ; SIMD128-NEXT: i16x8.all_true $push[[R:[0-9]+]]=, $0{{$}}
325 ; SIMD128-NEXT: return $pop[[R]]{{$}}
333 ; SIMD128-NEXT: .functype bitmask_v8i16 (v128) -> (i32){{$}}
334 ; SIMD128-NEXT: i16x8.bitmask $push[[R:[0-9]+]]=, $0{{$}}
335 ; SIMD128-NEXT: return $pop[[R]]{{$}}
343 ; SIMD128-NEXT: .functype bitselect_v8i16 (v128, v128, v128) -> (v128){{$}}
344 ; SIMD128-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
345 ; SIMD128-NEXT: return $pop[[R]]{{$}}
355 ; SIMD128-NEXT: .functype signselect_v8i16 (v128, v128, v128) -> (v128){{$}}
356 ; SIMD128-NEXT: i16x8.signselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
357 ; SIMD128-NEXT: return $pop[[R]]{{$}}
367 ; SIMD128-NEXT: .functype narrow_signed_v8i16 (v128, v128) -> (v128){{$}}
368 ; SIMD128-NEXT: i16x8.narrow_i32x4_s $push[[R:[0-9]+]]=, $0, $1{{$}}
369 ; SIMD128-NEXT: return $pop[[R]]{{$}}
379 ; SIMD128-NEXT: .functype narrow_unsigned_v8i16 (v128, v128) -> (v128){{$}}
380 ; SIMD128-NEXT: i16x8.narrow_i32x4_u $push[[R:[0-9]+]]=, $0, $1{{$}}
381 ; SIMD128-NEXT: return $pop[[R]]{{$}}
394 ; SIMD128-NEXT: .functype dot (v128, v128) -> (v128){{$}}
395 ; SIMD128-NEXT: i32x4.dot_i16x8_s $push[[R:[0-9]+]]=, $0, $1{{$}}
396 ; SIMD128-NEXT: return $pop[[R]]{{$}}
405 ; SIMD128-NEXT: .functype extmul_low_s_v4i32 (v128, v128) -> (v128){{$}}
406 ; SIMD128-NEXT: i32x4.extmul_low_i16x8_s $push[[R:[0-9]+]]=, $0, $1{{$}}
407 ; SIMD128-NEXT: return $pop[[R]]{{$}}
417 ; SIMD128-NEXT: .functype extmul_high_s_v4i32 (v128, v128) -> (v128){{$}}
418 ; SIMD128-NEXT: i32x4.extmul_high_i16x8_s $push[[R:[0-9]+]]=, $0, $1{{$}}
419 ; SIMD128-NEXT: return $pop[[R]]{{$}}
429 ; SIMD128-NEXT: .functype extmul_low_u_v4i32 (v128, v128) -> (v128){{$}}
430 ; SIMD128-NEXT: i32x4.extmul_low_i16x8_u $push[[R:[0-9]+]]=, $0, $1{{$}}
431 ; SIMD128-NEXT: return $pop[[R]]{{$}}
441 ; SIMD128-NEXT: .functype extmul_high_u_v4i32 (v128, v128) -> (v128){{$}}
442 ; SIMD128-NEXT: i32x4.extmul_high_i16x8_u $push[[R:[0-9]+]]=, $0, $1{{$}}
443 ; SIMD128-NEXT: return $pop[[R]]{{$}}
453 ; SIMD128-NEXT: .functype any_v4i32 (v128) -> (i32){{$}}
454 ; SIMD128-NEXT: i32x4.any_true $push[[R:[0-9]+]]=, $0{{$}}
455 ; SIMD128-NEXT: return $pop[[R]]{{$}}
463 ; SIMD128-NEXT: .functype all_v4i32 (v128) -> (i32){{$}}
464 ; SIMD128-NEXT: i32x4.all_true $push[[R:[0-9]+]]=, $0{{$}}
465 ; SIMD128-NEXT: return $pop[[R]]{{$}}
473 ; SIMD128-NEXT: .functype bitmask_v4i32 (v128) -> (i32){{$}}
474 ; SIMD128-NEXT: i32x4.bitmask $push[[R:[0-9]+]]=, $0{{$}}
475 ; SIMD128-NEXT: return $pop[[R]]{{$}}
483 ; SIMD128-NEXT: .functype bitselect_v4i32 (v128, v128, v128) -> (v128){{$}}
484 ; SIMD128-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
485 ; SIMD128-NEXT: return $pop[[R]]{{$}}
495 ; SIMD128-NEXT: .functype signselect_v4i32 (v128, v128, v128) -> (v128){{$}}
496 ; SIMD128-NEXT: i32x4.signselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
497 ; SIMD128-NEXT: return $pop[[R]]{{$}}
507 ; NO-SIMD128-NOT: f32x4
508 ; SIMD128-NEXT: .functype trunc_sat_s_v4i32 (v128) -> (v128){{$}}
509 ; SIMD128-NEXT: i32x4.trunc_sat_f32x4_s $push[[R:[0-9]+]]=, $0
510 ; SIMD128-NEXT: return $pop[[R]]
518 ; NO-SIMD128-NOT: f32x4
519 ; SIMD128-NEXT: .functype trunc_sat_u_v4i32 (v128) -> (v128){{$}}
520 ; SIMD128-NEXT: i32x4.trunc_sat_f32x4_u $push[[R:[0-9]+]]=, $0
521 ; SIMD128-NEXT: return $pop[[R]]
532 ; SIMD128-NEXT: .functype eq_v2i64 (v128, v128) -> (v128){{$}}
533 ; SIMD128-NEXT: i64x2.eq $push[[R:[0-9]+]]=, $0, $1{{$}}
534 ; SIMD128-NEXT: return $pop[[R]]{{$}}
542 ; SIMD128-NEXT: .functype widen_low_s_v2i64 (v128) -> (v128){{$}}
543 ; SIMD128-NEXT: i64x2.widen_low_i32x4_s $push[[R:[0-9]+]]=, $0{{$}}
544 ; SIMD128-NEXT: return $pop[[R]]{{$}}
552 ; SIMD128-NEXT: .functype widen_high_s_v2i64 (v128) -> (v128){{$}}
553 ; SIMD128-NEXT: i64x2.widen_high_i32x4_s $push[[R:[0-9]+]]=, $0{{$}}
554 ; SIMD128-NEXT: return $pop[[R]]{{$}}
562 ; SIMD128-NEXT: .functype widen_low_u_v2i64 (v128) -> (v128){{$}}
563 ; SIMD128-NEXT: i64x2.widen_low_i32x4_u $push[[R:[0-9]+]]=, $0{{$}}
564 ; SIMD128-NEXT: return $pop[[R]]{{$}}
572 ; SIMD128-NEXT: .functype widen_high_u_v2i64 (v128) -> (v128){{$}}
573 ; SIMD128-NEXT: i64x2.widen_high_i32x4_u $push[[R:[0-9]+]]=, $0{{$}}
574 ; SIMD128-NEXT: return $pop[[R]]{{$}}
582 ; SIMD128-NEXT: .functype extmul_low_s_v2i64 (v128, v128) -> (v128){{$}}
583 ; SIMD128-NEXT: i64x2.extmul_low_i32x4_s $push[[R:[0-9]+]]=, $0, $1{{$}}
584 ; SIMD128-NEXT: return $pop[[R]]{{$}}
594 ; SIMD128-NEXT: .functype extmul_high_s_v2i64 (v128, v128) -> (v128){{$}}
595 ; SIMD128-NEXT: i64x2.extmul_high_i32x4_s $push[[R:[0-9]+]]=, $0, $1{{$}}
596 ; SIMD128-NEXT: return $pop[[R]]{{$}}
606 ; SIMD128-NEXT: .functype extmul_low_u_v2i64 (v128, v128) -> (v128){{$}}
607 ; SIMD128-NEXT: i64x2.extmul_low_i32x4_u $push[[R:[0-9]+]]=, $0, $1{{$}}
608 ; SIMD128-NEXT: return $pop[[R]]{{$}}
618 ; SIMD128-NEXT: .functype extmul_high_u_v2i64 (v128, v128) -> (v128){{$}}
619 ; SIMD128-NEXT: i64x2.extmul_high_i32x4_u $push[[R:[0-9]+]]=, $0, $1{{$}}
620 ; SIMD128-NEXT: return $pop[[R]]{{$}}
630 ; SIMD128-NEXT: .functype any_v2i64 (v128) -> (i32){{$}}
631 ; SIMD128-NEXT: i64x2.any_true $push[[R:[0-9]+]]=, $0{{$}}
632 ; SIMD128-NEXT: return $pop[[R]]{{$}}
640 ; SIMD128-NEXT: .functype all_v2i64 (v128) -> (i32){{$}}
641 ; SIMD128-NEXT: i64x2.all_true $push[[R:[0-9]+]]=, $0{{$}}
642 ; SIMD128-NEXT: return $pop[[R]]{{$}}
650 ; SIMD128-NEXT: .functype bitmask_v2i64 (v128) -> (i32){{$}}
651 ; SIMD128-NEXT: i64x2.bitmask $push[[R:[0-9]+]]=, $0{{$}}
652 ; SIMD128-NEXT: return $pop[[R]]{{$}}
660 ; SIMD128-NEXT: .functype bitselect_v2i64 (v128, v128, v128) -> (v128){{$}}
661 ; SIMD128-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
662 ; SIMD128-NEXT: return $pop[[R]]{{$}}
672 ; SIMD128-NEXT: .functype signselect_v2i64 (v128, v128, v128) -> (v128){{$}}
673 ; SIMD128-NEXT: i64x2.signselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
674 ; SIMD128-NEXT: return $pop[[R]]{{$}}
687 ; SIMD128-NEXT: .functype bitselect_v4f32 (v128, v128, v128) -> (v128){{$}}
688 ; SIMD128-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
689 ; SIMD128-NEXT: return $pop[[R]]{{$}}
699 ; SIMD128-NEXT: .functype pmin_v4f32 (v128, v128) -> (v128){{$}}
700 ; SIMD128-NEXT: f32x4.pmin $push[[R:[0-9]+]]=, $0, $1{{$}}
701 ; SIMD128-NEXT: return $pop[[R]]{{$}}
709 ; SIMD128-NEXT: .functype pmax_v4f32 (v128, v128) -> (v128){{$}}
710 ; SIMD128-NEXT: f32x4.pmax $push[[R:[0-9]+]]=, $0, $1{{$}}
711 ; SIMD128-NEXT: return $pop[[R]]{{$}}
719 ; SIMD128-NEXT: .functype ceil_v4f32 (v128) -> (v128){{$}}
720 ; SIMD128-NEXT: f32x4.ceil $push[[R:[0-9]+]]=, $0{{$}}
721 ; SIMD128-NEXT: return $pop[[R]]{{$}}
729 ; SIMD128-NEXT: .functype floor_v4f32 (v128) -> (v128){{$}}
730 ; SIMD128-NEXT: f32x4.floor $push[[R:[0-9]+]]=, $0{{$}}
731 ; SIMD128-NEXT: return $pop[[R]]{{$}}
739 ; SIMD128-NEXT: .functype trunc_v4f32 (v128) -> (v128){{$}}
740 ; SIMD128-NEXT: f32x4.trunc $push[[R:[0-9]+]]=, $0{{$}}
741 ; SIMD128-NEXT: return $pop[[R]]{{$}}
749 ; SIMD128-NEXT: .functype nearest_v4f32 (v128) -> (v128){{$}}
750 ; SIMD128-NEXT: f32x4.nearest $push[[R:[0-9]+]]=, $0{{$}}
751 ; SIMD128-NEXT: return $pop[[R]]{{$}}
759 ; SIMD128-NEXT: .functype qfma_v4f32 (v128, v128, v128) -> (v128){{$}}
760 ; SIMD128-NEXT: f32x4.qfma $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
761 ; SIMD128-NEXT: return $pop[[R]]{{$}}
771 ; SIMD128-NEXT: .functype qfms_v4f32 (v128, v128, v128) -> (v128){{$}}
772 ; SIMD128-NEXT: f32x4.qfms $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
773 ; SIMD128-NEXT: return $pop[[R]]{{$}}
786 ; SIMD128-NEXT: .functype bitselect_v2f64 (v128, v128, v128) -> (v128){{$}}
787 ; SIMD128-NEXT: v128.bitselect $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
788 ; SIMD128-NEXT: return $pop[[R]]{{$}}
798 ; SIMD128-NEXT: .functype pmin_v2f64 (v128, v128) -> (v128){{$}}
799 ; SIMD128-NEXT: f64x2.pmin $push[[R:[0-9]+]]=, $0, $1{{$}}
800 ; SIMD128-NEXT: return $pop[[R]]{{$}}
808 ; SIMD128-NEXT: .functype pmax_v2f64 (v128, v128) -> (v128){{$}}
809 ; SIMD128-NEXT: f64x2.pmax $push[[R:[0-9]+]]=, $0, $1{{$}}
810 ; SIMD128-NEXT: return $pop[[R]]{{$}}
818 ; SIMD128-NEXT: .functype ceil_v2f64 (v128) -> (v128){{$}}
819 ; SIMD128-NEXT: f64x2.ceil $push[[R:[0-9]+]]=, $0{{$}}
820 ; SIMD128-NEXT: return $pop[[R]]{{$}}
828 ; SIMD128-NEXT: .functype floor_v2f64 (v128) -> (v128){{$}}
829 ; SIMD128-NEXT: f64x2.floor $push[[R:[0-9]+]]=, $0{{$}}
830 ; SIMD128-NEXT: return $pop[[R]]{{$}}
838 ; SIMD128-NEXT: .functype trunc_v2f64 (v128) -> (v128){{$}}
839 ; SIMD128-NEXT: f64x2.trunc $push[[R:[0-9]+]]=, $0{{$}}
840 ; SIMD128-NEXT: return $pop[[R]]{{$}}
848 ; SIMD128-NEXT: .functype nearest_v2f64 (v128) -> (v128){{$}}
849 ; SIMD128-NEXT: f64x2.nearest $push[[R:[0-9]+]]=, $0{{$}}
850 ; SIMD128-NEXT: return $pop[[R]]{{$}}
858 ; SIMD128-NEXT: .functype qfma_v2f64 (v128, v128, v128) -> (v128){{$}}
859 ; SIMD128-NEXT: f64x2.qfma $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
860 ; SIMD128-NEXT: return $pop[[R]]{{$}}
870 ; SIMD128-NEXT: .functype qfms_v2f64 (v128, v128, v128) -> (v128){{$}}
871 ; SIMD128-NEXT: f64x2.qfms $push[[R:[0-9]+]]=, $0, $1, $2{{$}}
872 ; SIMD128-NEXT: return $pop[[R]]{{$}}