| (define_insn_and_split "*movsi_aarch64" |
| [(set (match_operand:SI 0 "nonimmediate_operand" "=r,k,r,r,r,r, r,w, m, m, r, r, r, w,r,w, w") |
| (match_operand:SI 1 "aarch64_mov_operand" " r,r,k,M,n,Usv,m,m,rZ,w,Usw,Usa,Ush,rZ,w,w,Ds"))] |
| "(register_operand (operands[0], SImode) |
| || aarch64_reg_or_zero (operands[1], SImode))" |
| "@ |
| mov\\t%w0, %w1 |
| mov\\t%w0, %w1 |
| mov\\t%w0, %w1 |
| mov\\t%w0, %1 |
| # |
| * return aarch64_output_sve_cnt_immediate (\"cnt\", \"%x0\", operands[1]); |
| ldr\\t%w0, %1 |
| ldr\\t%s0, %1 |
| str\\t%w1, %0 |
| str\\t%s1, %0 |
| adrp\\t%x0, %A1\;ldr\\t%w0, [%x0, %L1] |
| adr\\t%x0, %c1 |
| adrp\\t%x0, %A1 |
| fmov\\t%s0, %w1 |
| fmov\\t%w0, %s1 |
| fmov\\t%s0, %s1 |
| * return 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; |
| }" |
| [(set_attr "type" "mov_reg,mov_reg,mov_reg,mov_imm,mov_imm,mov_imm,load_4, |
| load_4,store_4,store_4,load_4,adr,adr,f_mcr,f_mrc,fmov,neon_move") |
| (set_attr "arch" "*,*,*,*,*,sve,*,fp,*,fp,*,*,*,fp,fp,fp,simd") |
| (set_attr "length" "4,4,4,4,*, 4,4, 4,4, 4,8,4,4, 4, 4, 4, 4") |
| ] |
| ) |