@@ -3932,14 +3932,10 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
39323932 break ;
39333933
39343934 case OP_XZERO :
3935- if (ins -> klass && mono_class_value_size (ins -> klass , NULL ) == 8 )
3936- arm_neon_eor_8b (code , dreg , dreg , dreg );
3937- else
3938- arm_neon_eor_16b (code , dreg , dreg , dreg );
3935+ arm_neon_movi_b (code , get_vector_size_macro (ins ), dreg , 0 );
39393936 break ;
39403937 case OP_XONES :
3941- arm_neon_eor_16b (code , dreg , dreg , dreg );
3942- arm_neon_not_16b (code , dreg , dreg );
3938+ arm_neon_movi_b (code , get_vector_size_macro (ins ), dreg , 0xff );
39433939 break ;
39443940 case OP_XEXTRACT :
39453941 code = emit_xextract (code , (ins -> inst_c1 == 8 ) ? VREG_LOW : VREG_FULL , GTMREG_TO_INT (ins -> inst_c0 ), dreg , sreg1 );
@@ -4133,7 +4129,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
41334129 }
41344130 case OP_CREATE_SCALAR_INT : {
41354131 const int t = get_type_size_macro (ins -> inst_c1 );
4136- arm_neon_eor_16b (code , dreg , dreg , dreg );
4132+ arm_neon_movi_b (code , VREG_FULL , dreg , 0 );
41374133 arm_neon_ins_g (code , t , dreg , sreg1 , 0 );
41384134 break ;
41394135 }
@@ -4148,7 +4144,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
41484144 break ;
41494145 }
41504146 // Use a temp register for zero op, as sreg1 and dreg share the same register here
4151- arm_neon_eor_16b (code , NEON_TMP_REG , NEON_TMP_REG , NEON_TMP_REG );
4147+ arm_neon_movi_b (code , VREG_FULL , NEON_TMP_REG , 0 );
41524148 arm_neon_ins_e (code , t , NEON_TMP_REG , sreg1 , 0 , 0 );
41534149 arm_neon_mov (code , dreg , NEON_TMP_REG );
41544150 break ;
@@ -4183,17 +4179,17 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
41834179 case OP_XLOWER : {
41844180 if (dreg == sreg1 ) {
41854181 // clean the upper half
4186- arm_neon_eor (code , VREG_FULL , NEON_TMP_REG , NEON_TMP_REG , NEON_TMP_REG );
4182+ arm_neon_movi_b (code , VREG_FULL , NEON_TMP_REG , 0 );
41874183 arm_neon_ins_e (code , SIZE_8 , dreg , NEON_TMP_REG , 1 , 0 );
41884184 } else {
4189- arm_neon_eor (code , VREG_FULL , dreg , dreg , dreg );
4185+ arm_neon_movi_b (code , VREG_FULL , dreg , 0 );
41904186 arm_neon_mov_8b (code , dreg , sreg1 );
41914187 }
41924188 break ;
41934189 }
41944190 case OP_XUPPER :
41954191 // shift in 64 zeros from the left
4196- arm_neon_eor (code , VREG_FULL , NEON_TMP_REG , NEON_TMP_REG , NEON_TMP_REG );
4192+ arm_neon_movi_b (code , VREG_FULL , NEON_TMP_REG , 0 );
41974193 arm_neon_ext_16b (code , dreg , sreg1 , NEON_TMP_REG , 8 );
41984194 break ;
41994195
0 commit comments