blob: 24f280dd29e7ef539aeea4d5df19c650a16cb51c [file] [log] [blame]
(define_insn_and_split "*movsi_aarch64"
[(set (match_operand:SI 0 "nonimmediate_operand")
(match_operand:SI 1 "aarch64_mov_operand"))]
"(register_operand (operands[0], SImode)
|| aarch64_reg_or_zero (operands[1], SImode))"
{@ [ cons: =0 , 1 ; attrs: type , arch , length ]
[ r , r ; mov_reg , * , 4 ] mov\t%w0, %w1
[ k , r ; mov_reg , * , 4 ] mov\t%w0, %w1
[ r , k ; mov_reg , * , 4 ] mov\t%w0, %w1
[ r , M ; mov_imm , * , 4 ] mov\t%w0, %1
[ r , n ; mov_imm , * , * ] #
[ r , Usv ; mov_imm , sve , 4 ] << aarch64_output_sve_cnt_immediate ("cnt", "%x0", operands[1]);
[ r , m ; load_4 , * , 4 ] ldr\t%w0, %1
[ w , m ; load_4 , fp , 4 ] ldr\t%s0, %1
[ m , rZ ; store_4 , * , 4 ] str\t%w1, %0
[ m , w ; store_4 , fp , 4 ] str\t%s1, %0
[ r , Usw ; load_4 , * , 8 ] adrp\t%x0, %A1\;ldr\t%w0, [%x0, %L1]
[ r , Usa ; adr , * , 4 ] adr\t%x0, %c1
[ r , Ush ; adr , * , 4 ] adrp\t%x0, %A1
[ w , rZ ; f_mcr , fp , 4 ] fmov\t%s0, %w1
[ r , w ; f_mrc , fp , 4 ] fmov\t%w0, %s1
[ w , w ; fmov , fp , 4 ] fmov\t%s0, %s1
[ w , Ds ; neon_move , simd , 4 ] << aarch64_output_scalar_simd_mov_immediate (operands[1], SImode);
}
"CONST_INT_P (operands[1]) && !aarch64_move_imm (INTVAL (operands[1]), SImode)
&& REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))"
[(const_int 0)]
"{
aarch64_expand_mov_immediate (operands[0], operands[1]);
DONE;
}"
)