@@ -270,13 +270,18 @@ typedef enum S390Opcode {
270
270
VRIb_VGM = 0xe746 ,
271
271
VRIc_VREP = 0xe74d ,
272
272
273
+ VRRa_VLC = 0xe7de ,
274
+ VRRa_VLP = 0xe7df ,
273
275
VRRa_VLR = 0xe756 ,
274
276
VRRc_VA = 0xe7f3 ,
275
277
VRRc_VCEQ = 0xe7f8 , /* we leave the m5 cs field 0 */
276
278
VRRc_VCH = 0xe7fb , /* " */
277
279
VRRc_VCHL = 0xe7f9 , /* " */
278
280
VRRc_VN = 0xe768 ,
281
+ VRRc_VNC = 0xe769 ,
282
+ VRRc_VNO = 0xe76b ,
279
283
VRRc_VO = 0xe76a ,
284
+ VRRc_VOC = 0xe76f ,
280
285
VRRc_VS = 0xe7f7 ,
281
286
VRRc_VX = 0xe76d ,
282
287
VRRf_VLVGP = 0xe762 ,
@@ -2669,6 +2674,16 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc,
2669
2674
tcg_out_dupm_vec (s, type, vece, a0, a1, a2);
2670
2675
break ;
2671
2676
2677
+ case INDEX_op_abs_vec:
2678
+ tcg_out_insn (s, VRRa, VLP, a0, a1, vece);
2679
+ break ;
2680
+ case INDEX_op_neg_vec:
2681
+ tcg_out_insn (s, VRRa, VLC, a0, a1, vece);
2682
+ break ;
2683
+ case INDEX_op_not_vec:
2684
+ tcg_out_insn (s, VRRc, VNO, a0, a1, a1, 0 );
2685
+ break ;
2686
+
2672
2687
case INDEX_op_add_vec:
2673
2688
tcg_out_insn (s, VRRc, VA, a0, a1, a2, vece);
2674
2689
break ;
@@ -2678,9 +2693,15 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc,
2678
2693
case INDEX_op_and_vec:
2679
2694
tcg_out_insn (s, VRRc, VN, a0, a1, a2, 0 );
2680
2695
break ;
2696
+ case INDEX_op_andc_vec:
2697
+ tcg_out_insn (s, VRRc, VNC, a0, a1, a2, 0 );
2698
+ break ;
2681
2699
case INDEX_op_or_vec:
2682
2700
tcg_out_insn (s, VRRc, VO, a0, a1, a2, 0 );
2683
2701
break ;
2702
+ case INDEX_op_orc_vec:
2703
+ tcg_out_insn (s, VRRc, VOC, a0, a1, a2, 0 );
2704
+ break ;
2684
2705
case INDEX_op_xor_vec:
2685
2706
tcg_out_insn (s, VRRc, VX, a0, a1, a2, 0 );
2686
2707
break ;
@@ -2711,9 +2732,14 @@ static void tcg_out_vec_op(TCGContext *s, TCGOpcode opc,
2711
2732
int tcg_can_emit_vec_op (TCGOpcode opc, TCGType type, unsigned vece)
2712
2733
{
2713
2734
switch (opc) {
2735
+ case INDEX_op_abs_vec:
2714
2736
case INDEX_op_add_vec:
2715
2737
case INDEX_op_and_vec:
2738
+ case INDEX_op_andc_vec:
2739
+ case INDEX_op_neg_vec:
2740
+ case INDEX_op_not_vec:
2716
2741
case INDEX_op_or_vec:
2742
+ case INDEX_op_orc_vec:
2717
2743
case INDEX_op_sub_vec:
2718
2744
case INDEX_op_xor_vec:
2719
2745
return 1 ;
@@ -2943,10 +2969,16 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpcode op)
2943
2969
return C_O1_I1 (v, r);
2944
2970
case INDEX_op_dup_vec:
2945
2971
return C_O1_I1 (v, vr);
2972
+ case INDEX_op_abs_vec:
2973
+ case INDEX_op_neg_vec:
2974
+ case INDEX_op_not_vec:
2975
+ return C_O1_I1 (v, v);
2946
2976
case INDEX_op_add_vec:
2947
2977
case INDEX_op_sub_vec:
2948
2978
case INDEX_op_and_vec:
2979
+ case INDEX_op_andc_vec:
2949
2980
case INDEX_op_or_vec:
2981
+ case INDEX_op_orc_vec:
2950
2982
case INDEX_op_xor_vec:
2951
2983
case INDEX_op_cmp_vec:
2952
2984
return C_O1_I2 (v, v, v);
0 commit comments