| (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; |
| }" |
| ) |