@@ -3932,14 +3932,10 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
3932
3932
break ;
3933
3933
3934
3934
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 );
3939
3936
break ;
3940
3937
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 );
3943
3939
break ;
3944
3940
case OP_XEXTRACT :
3945
3941
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)
4133
4129
}
4134
4130
case OP_CREATE_SCALAR_INT : {
4135
4131
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 );
4137
4133
arm_neon_ins_g (code , t , dreg , sreg1 , 0 );
4138
4134
break ;
4139
4135
}
@@ -4148,7 +4144,7 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
4148
4144
break ;
4149
4145
}
4150
4146
// 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 );
4152
4148
arm_neon_ins_e (code , t , NEON_TMP_REG , sreg1 , 0 , 0 );
4153
4149
arm_neon_mov (code , dreg , NEON_TMP_REG );
4154
4150
break ;
@@ -4183,17 +4179,17 @@ mono_arch_output_basic_block (MonoCompile *cfg, MonoBasicBlock *bb)
4183
4179
case OP_XLOWER : {
4184
4180
if (dreg == sreg1 ) {
4185
4181
// 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 );
4187
4183
arm_neon_ins_e (code , SIZE_8 , dreg , NEON_TMP_REG , 1 , 0 );
4188
4184
} else {
4189
- arm_neon_eor (code , VREG_FULL , dreg , dreg , dreg );
4185
+ arm_neon_movi_b (code , VREG_FULL , dreg , 0 );
4190
4186
arm_neon_mov_8b (code , dreg , sreg1 );
4191
4187
}
4192
4188
break ;
4193
4189
}
4194
4190
case OP_XUPPER :
4195
4191
// 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 );
4197
4193
arm_neon_ext_16b (code , dreg , sreg1 , NEON_TMP_REG , 8 );
4198
4194
break ;
4199
4195
0 commit comments