;; Instruction types and attributes
;; -------------------------------------------------------------------
-;; Main data types used by the insntructions
-
-(define_attr "mode" "unknown,none,QI,HI,SI,DI,TI,SF,DF,TF"
- (const_string "unknown"))
-
-(define_attr "mode2" "unknown,none,QI,HI,SI,DI,TI,SF,DF,TF"
- (const_string "unknown"))
-
; The "type" attribute is is included here from AArch32 backend to be able
; to share pipeline descriptions.
(include "../arm/types.md")
return \"<tbz>\\t%<w>0, %1, %l2\";
"
[(set_attr "type" "branch")
- (set_attr "mode" "<MODE>")
(set (attr "length")
(if_then_else (and (ge (minus (match_dup 2) (pc)) (const_int -32768))
(lt (minus (match_dup 2) (pc)) (const_int 32764)))
return \"<tbz>\\t%<w>0, <sizem1>, %l1\";
"
[(set_attr "type" "branch")
- (set_attr "mode" "<MODE>")
(set (attr "length")
(if_then_else (and (ge (minus (match_dup 1) (pc)) (const_int -32768))
(lt (minus (match_dup 1) (pc)) (const_int 32764)))
}
[(set_attr "type" "mov_reg,mov_imm,mov_imm,load1,load1,store1,store1,\
neon_from_gp<q>,neon_from_gp<q>, neon_dup")
- (set_attr "simd" "*,*,yes,*,*,*,*,yes,yes,yes")
- (set_attr "mode" "<MODE>")]
+ (set_attr "simd" "*,*,yes,*,*,*,*,yes,yes,yes")]
)
(define_expand "mov<mode>"
fmov\\t%s0, %s1"
[(set_attr "type" "mov_reg,mov_reg,mov_reg,mov_imm,load1,load1,store1,store1,\
adr,adr,fmov,fmov,fmov")
- (set_attr "mode" "SI")
(set_attr "fp" "*,*,*,*,*,yes,*,yes,*,*,yes,yes,yes")]
)
movi\\t%d0, %1"
[(set_attr "type" "mov_reg,mov_reg,mov_reg,mov_imm,load1,load1,store1,store1,\
adr,adr,fmov,fmov,fmov,fmov")
- (set_attr "mode" "DI")
(set_attr "fp" "*,*,*,*,*,yes,*,yes,*,*,yes,yes,yes,*")
(set_attr "simd" "*,*,*,*,*,*,*,*,*,*,*,*,*,yes")]
)
"UINTVAL (operands[1]) < GET_MODE_BITSIZE (<MODE>mode)
&& UINTVAL (operands[1]) % 16 == 0"
"movk\\t%<w>0, %X2, lsl %1"
- [(set_attr "type" "mov_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "mov_imm")]
)
(define_expand "movti"
str\\t%q1, %0"
[(set_attr "type" "multiple,f_mcr,f_mrc,neon_logic_q, \
load2,store2,store2,f_loadd,f_stored")
- (set_attr "mode" "DI,DI,DI,TI,DI,DI,DI,TI,TI")
(set_attr "length" "8,8,8,4,4,4,4,4,4")
(set_attr "simd" "*,*,*,yes,*,*,*,*,*")
(set_attr "fp" "*,*,*,*,*,*,*,yes,yes")]
str\\t%w1, %0
mov\\t%w0, %w1"
[(set_attr "type" "f_mcr,f_mrc,fmov,fconsts,\
- f_loads,f_stores,f_loads,f_stores,fmov")
- (set_attr "mode" "SF")]
+ f_loads,f_stores,f_loads,f_stores,fmov")]
)
(define_insn "*movdf_aarch64"
str\\t%x1, %0
mov\\t%x0, %x1"
[(set_attr "type" "f_mcr,f_mrc,fmov,fconstd,\
- f_loadd,f_stored,f_loadd,f_stored,mov_reg")
- (set_attr "mode" "DF")]
+ f_loadd,f_stored,f_loadd,f_stored,mov_reg")]
)
(define_expand "movtf"
stp\\t%1, %H1, %0"
[(set_attr "type" "logic_reg,multiple,f_mcr,f_mrc,fconstd,fconstd,\
f_loadd,f_stored,neon_load1_2reg,neon_store1_2reg")
- (set_attr "mode" "DF,DF,DF,DF,DF,DF,TF,TF,DF,DF")
(set_attr "length" "4,8,8,8,4,4,4,4,4,4")
(set_attr "fp" "*,*,yes,yes,*,yes,yes,yes,*,*")
(set_attr "simd" "yes,*,*,*,yes,*,*,*,*,*")]
XEXP (operands[1], 0),
GET_MODE_SIZE (<MODE>mode)))"
"ldp\\t%<w>0, %<w>2, %1"
- [(set_attr "type" "load2")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "load2")]
)
;; Operands 0 and 2 are tied together by the final condition; so we allow
XEXP (operands[0], 0),
GET_MODE_SIZE (<MODE>mode)))"
"stp\\t%<w>1, %<w>3, %0"
- [(set_attr "type" "store2")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "store2")]
)
;; Operands 1 and 3 are tied together by the final condition; so we allow
XEXP (operands[1], 0),
GET_MODE_SIZE (<MODE>mode)))"
"ldp\\t%<w>0, %<w>2, %1"
- [(set_attr "type" "neon_load1_2reg<q>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "neon_load1_2reg<q>")]
)
;; Operands 0 and 2 are tied together by the final condition; so we allow
XEXP (operands[0], 0),
GET_MODE_SIZE (<MODE>mode)))"
"stp\\t%<w>1, %<w>3, %0"
- [(set_attr "type" "neon_store1_2reg<q>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "neon_store1_2reg<q>")]
)
;; Load pair with writeback. This is primarily used in function epilogues
(match_operand:P 5 "const_int_operand" "n"))))])]
"INTVAL (operands[5]) == INTVAL (operands[4]) + GET_MODE_SIZE (<GPI:MODE>mode)"
"ldp\\t%<w>2, %<w>3, [%1], %4"
- [(set_attr "type" "load2")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "load2")]
)
;; Store pair with writeback. This is primarily used in function prologues
(match_operand:GPI 3 "register_operand" "r"))])]
"INTVAL (operands[5]) == INTVAL (operands[4]) + GET_MODE_SIZE (<GPI:MODE>mode)"
"stp\\t%<w>2, %<w>3, [%0, %4]!"
- [(set_attr "type" "store2")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "store2")]
)
;; -------------------------------------------------------------------
"@
sxtw\t%0, %w1
ldrsw\t%0, %1"
- [(set_attr "type" "extend,load1")
- (set_attr "mode" "DI")]
+ [(set_attr "type" "extend,load1")]
)
(define_insn "*zero_extendsidi2_aarch64"
"@
uxtw\t%0, %w1
ldr\t%w0, %1"
- [(set_attr "type" "extend,load1")
- (set_attr "mode" "DI")]
+ [(set_attr "type" "extend,load1")]
)
(define_expand "<ANY_EXTEND:optab><SHORT:mode><GPI:mode>2"
"@
sxt<SHORT:size>\t%<GPI:w>0, %w1
ldrs<SHORT:size>\t%<GPI:w>0, %1"
- [(set_attr "type" "extend,load1")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "extend,load1")]
)
(define_insn "*zero_extend<SHORT:mode><GPI:mode>2_aarch64"
uxt<SHORT:size>\t%<GPI:w>0, %w1
ldr<SHORT:size>\t%w0, %1
ldr\t%<SHORT:size>0, %1"
- [(set_attr "type" "extend,load1,load1")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "extend,load1,load1")]
)
(define_expand "<optab>qihi2"
"@
<su>xtb\t%w0, %w1
<ldrxt>b\t%w0, %1"
- [(set_attr "type" "extend,load1")
- (set_attr "mode" "HI")]
+ [(set_attr "type" "extend,load1")]
)
;; -------------------------------------------------------------------
add\\t%w0, %w1, %2
add\\t%w0, %w1, %w2
sub\\t%w0, %w1, #%n2"
- [(set_attr "type" "alu_imm,alu_reg,alu_imm")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_imm,alu_reg,alu_imm")]
)
;; zero_extend version of above
add\\t%w0, %w1, %2
add\\t%w0, %w1, %w2
sub\\t%w0, %w1, #%n2"
- [(set_attr "type" "alu_imm,alu_reg,alu_imm")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_imm,alu_reg,alu_imm")]
)
(define_insn "*adddi3_aarch64"
sub\\t%x0, %x1, #%n2
add\\t%d0, %d1, %d2"
[(set_attr "type" "alu_imm,alu_reg,alu_imm,alu_reg")
- (set_attr "mode" "DI")
(set_attr "simd" "*,*,*,yes")]
)
adds\\t%<w>0, %<w>1, %<w>2
adds\\t%<w>0, %<w>1, %<w>2
subs\\t%<w>0, %<w>1, #%n2"
- [(set_attr "type" "alus_reg,alus_imm,alus_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alus_reg,alus_imm,alus_imm")]
)
;; zero_extend version of above
adds\\t%w0, %w1, %w2
adds\\t%w0, %w1, %w2
subs\\t%w0, %w1, #%n2"
- [(set_attr "type" "alus_reg,alus_imm,alus_imm")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alus_reg,alus_imm,alus_imm")]
)
(define_insn "*adds_mul_imm_<mode>"
(match_dup 3)))]
""
"adds\\t%<w>0, %<w>3, %<w>1, lsl %p2"
- [(set_attr "type" "alus_shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alus_shift_imm")]
)
(define_insn "*subs_mul_imm_<mode>"
(mult:GPI (match_dup 2) (match_dup 3))))]
""
"subs\\t%<w>0, %<w>1, %<w>2, lsl %p3"
- [(set_attr "type" "alus_shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alus_shift_imm")]
)
(define_insn "*adds_<optab><ALLX:mode>_<GPI:mode>"
(plus:GPI (ANY_EXTEND:GPI (match_dup 1)) (match_dup 2)))]
""
"adds\\t%<GPI:w>0, %<GPI:w>2, %<GPI:w>1, <su>xt<ALLX:size>"
- [(set_attr "type" "alus_ext")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "alus_ext")]
)
(define_insn "*subs_<optab><ALLX:mode>_<GPI:mode>"
(minus:GPI (match_dup 1) (ANY_EXTEND:GPI (match_dup 2))))]
""
"subs\\t%<GPI:w>0, %<GPI:w>1, %<GPI:w>2, <su>xt<ALLX:size>"
- [(set_attr "type" "alus_ext")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "alus_ext")]
)
(define_insn "*adds_<optab><mode>_multp2"
(match_dup 4)))]
"aarch64_is_extend_from_extract (<MODE>mode, operands[2], operands[3])"
"adds\\t%<w>0, %<w>4, %<w>1, <su>xt%e3 %p2"
- [(set_attr "type" "alus_ext")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alus_ext")]
)
(define_insn "*subs_<optab><mode>_multp2"
(const_int 0))))]
"aarch64_is_extend_from_extract (<MODE>mode, operands[2], operands[3])"
"subs\\t%<w>0, %<w>4, %<w>1, <su>xt%e3 %p2"
- [(set_attr "type" "alus_ext")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alus_ext")]
)
(define_insn "*add<mode>3nr_compare0"
cmn\\t%<w>0, %<w>1
cmn\\t%<w>0, %<w>1
cmp\\t%<w>0, #%n1"
- [(set_attr "type" "alus_reg,alus_imm,alus_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alus_reg,alus_imm,alus_imm")]
)
(define_insn "*compare_neg<mode>"
(match_operand:GPI 1 "register_operand" "r")))]
""
"cmn\\t%<w>1, %<w>0"
- [(set_attr "type" "alus_reg")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alus_reg")]
)
(define_insn "*add_<shift>_<mode>"
(match_operand:GPI 3 "register_operand" "r")))]
""
"add\\t%<w>0, %<w>3, %<w>1, <shift> %2"
- [(set_attr "type" "alu_shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alu_shift_imm")]
)
;; zero_extend version of above
(match_operand:SI 3 "register_operand" "r"))))]
""
"add\\t%w0, %w3, %w1, <shift> %2"
- [(set_attr "type" "alu_shift_imm")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_shift_imm")]
)
(define_insn "*add_mul_imm_<mode>"
(match_operand:GPI 3 "register_operand" "r")))]
""
"add\\t%<w>0, %<w>3, %<w>1, lsl %p2"
- [(set_attr "type" "alu_shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alu_shift_imm")]
)
(define_insn "*add_<optab><ALLX:mode>_<GPI:mode>"
(match_operand:GPI 2 "register_operand" "r")))]
""
"add\\t%<GPI:w>0, %<GPI:w>2, %<GPI:w>1, <su>xt<ALLX:size>"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "alu_ext")]
)
;; zero_extend version of above
(match_operand:GPI 2 "register_operand" "r"))))]
""
"add\\t%w0, %w2, %w1, <su>xt<SHORT:size>"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_ext")]
)
(define_insn "*add_<optab><ALLX:mode>_shft_<GPI:mode>"
(match_operand:GPI 3 "register_operand" "r")))]
""
"add\\t%<GPI:w>0, %<GPI:w>3, %<GPI:w>1, <su>xt<ALLX:size> %2"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "alu_ext")]
)
;; zero_extend version of above
(match_operand:SI 3 "register_operand" "r"))))]
""
"add\\t%w0, %w3, %w1, <su>xt<SHORT:size> %2"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_ext")]
)
(define_insn "*add_<optab><ALLX:mode>_mult_<GPI:mode>"
(match_operand:GPI 3 "register_operand" "r")))]
""
"add\\t%<GPI:w>0, %<GPI:w>3, %<GPI:w>1, <su>xt<ALLX:size> %p2"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "alu_ext")]
)
;; zero_extend version of above
(match_operand:SI 3 "register_operand" "r"))))]
""
"add\\t%w0, %w3, %w1, <su>xt<SHORT:size> %p2"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_ext")]
)
(define_insn "*add_<optab><mode>_multp2"
(match_operand:GPI 4 "register_operand" "r")))]
"aarch64_is_extend_from_extract (<MODE>mode, operands[2], operands[3])"
"add\\t%<w>0, %<w>4, %<w>1, <su>xt%e3 %p2"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alu_ext")]
)
;; zero_extend version of above
(match_operand:SI 4 "register_operand" "r"))))]
"aarch64_is_extend_from_extract (SImode, operands[2], operands[3])"
"add\\t%w0, %w4, %w1, <su>xt%e3 %p2"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_ext")]
)
(define_insn "*add<mode>3_carryin"
(match_operand:GPI 2 "register_operand" "r"))))]
""
"adc\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "adc_reg")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "adc_reg")]
)
;; zero_extend version of above
(match_operand:SI 2 "register_operand" "r")))))]
""
"adc\\t%w0, %w1, %w2"
- [(set_attr "type" "adc_reg")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "adc_reg")]
)
(define_insn "*add<mode>3_carryin_alt1"
(geu:GPI (reg:CC CC_REGNUM) (const_int 0))))]
""
"adc\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "adc_reg")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "adc_reg")]
)
;; zero_extend version of above
(geu:SI (reg:CC CC_REGNUM) (const_int 0)))))]
""
"adc\\t%w0, %w1, %w2"
- [(set_attr "type" "adc_reg")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "adc_reg")]
)
(define_insn "*add<mode>3_carryin_alt2"
(match_operand:GPI 2 "register_operand" "r")))]
""
"adc\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "adc_reg")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "adc_reg")]
)
;; zero_extend version of above
(match_operand:SI 2 "register_operand" "r"))))]
""
"adc\\t%w0, %w1, %w2"
- [(set_attr "type" "adc_reg")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "adc_reg")]
)
(define_insn "*add<mode>3_carryin_alt3"
(match_operand:GPI 1 "register_operand" "r")))]
""
"adc\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "adc_reg")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "adc_reg")]
)
;; zero_extend version of above
(match_operand:SI 1 "register_operand" "r"))))]
""
"adc\\t%w0, %w1, %w2"
- [(set_attr "type" "adc_reg")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "adc_reg")]
)
(define_insn "*add_uxt<mode>_multp2"
operands[3] = GEN_INT (aarch64_uxt_size (exact_log2 (INTVAL (operands[2])),
INTVAL (operands[3])));
return \"add\t%<w>0, %<w>4, %<w>1, uxt%e3 %p2\";"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alu_ext")]
)
;; zero_extend version of above
operands[3] = GEN_INT (aarch64_uxt_size (exact_log2 (INTVAL (operands[2])),
INTVAL (operands[3])));
return \"add\t%w0, %w4, %w1, uxt%e3 %p2\";"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_ext")]
)
(define_insn "subsi3"
(match_operand:SI 2 "register_operand" "r")))]
""
"sub\\t%w0, %w1, %w2"
- [(set_attr "type" "alu_reg")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_reg")]
)
;; zero_extend version of above
(match_operand:SI 2 "register_operand" "r"))))]
""
"sub\\t%w0, %w1, %w2"
- [(set_attr "type" "alu_reg")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_reg")]
)
(define_insn "subdi3"
sub\\t%x0, %x1, %x2
sub\\t%d0, %d1, %d2"
[(set_attr "type" "alu_reg, neon_sub")
- (set_attr "mode" "DI")
(set_attr "simd" "*,yes")]
)
(minus:GPI (match_dup 1) (match_dup 2)))]
""
"subs\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "alus_reg")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alus_reg")]
)
;; zero_extend version of above
(zero_extend:DI (minus:SI (match_dup 1) (match_dup 2))))]
""
"subs\\t%w0, %w1, %w2"
- [(set_attr "type" "alus_reg")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alus_reg")]
)
(define_insn "*sub_<shift>_<mode>"
(match_operand:QI 2 "aarch64_shift_imm_<mode>" "n"))))]
""
"sub\\t%<w>0, %<w>3, %<w>1, <shift> %2"
- [(set_attr "type" "alu_shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alu_shift_imm")]
)
;; zero_extend version of above
(match_operand:QI 2 "aarch64_shift_imm_si" "n")))))]
""
"sub\\t%w0, %w3, %w1, <shift> %2"
- [(set_attr "type" "alu_shift_imm")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_shift_imm")]
)
(define_insn "*sub_mul_imm_<mode>"
(match_operand:QI 2 "aarch64_pwr_2_<mode>" "n"))))]
""
"sub\\t%<w>0, %<w>3, %<w>1, lsl %p2"
- [(set_attr "type" "alu_shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alu_shift_imm")]
)
;; zero_extend version of above
(match_operand:QI 2 "aarch64_pwr_2_si" "n")))))]
""
"sub\\t%w0, %w3, %w1, lsl %p2"
- [(set_attr "type" "alu_shift_imm")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_shift_imm")]
)
(define_insn "*sub_<optab><ALLX:mode>_<GPI:mode>"
(match_operand:ALLX 2 "register_operand" "r"))))]
""
"sub\\t%<GPI:w>0, %<GPI:w>1, %<GPI:w>2, <su>xt<ALLX:size>"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "alu_ext")]
)
;; zero_extend version of above
(match_operand:SHORT 2 "register_operand" "r")))))]
""
"sub\\t%w0, %w1, %w2, <su>xt<SHORT:size>"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_ext")]
)
(define_insn "*sub_<optab><ALLX:mode>_shft_<GPI:mode>"
(match_operand 3 "aarch64_imm3" "Ui3"))))]
""
"sub\\t%<GPI:w>0, %<GPI:w>1, %<GPI:w>2, <su>xt<ALLX:size> %3"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "alu_ext")]
)
;; zero_extend version of above
(match_operand 3 "aarch64_imm3" "Ui3")))))]
""
"sub\\t%w0, %w1, %w2, <su>xt<SHORT:size> %3"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_ext")]
)
(define_insn "*sub_<optab><mode>_multp2"
(const_int 0))))]
"aarch64_is_extend_from_extract (<MODE>mode, operands[2], operands[3])"
"sub\\t%<w>0, %<w>4, %<w>1, <su>xt%e3 %p2"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alu_ext")]
)
;; zero_extend version of above
(const_int 0)))))]
"aarch64_is_extend_from_extract (SImode, operands[2], operands[3])"
"sub\\t%w0, %w4, %w1, <su>xt%e3 %p2"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_ext")]
)
(define_insn "*sub<mode>3_carryin"
(match_operand:GPI 2 "register_operand" "r")))]
""
"sbc\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "adc_reg")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "adc_reg")]
)
;; zero_extend version of the above
(match_operand:SI 2 "register_operand" "r"))))]
""
"sbc\\t%w0, %w1, %w2"
- [(set_attr "type" "adc_reg")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "adc_reg")]
)
(define_insn "*sub_uxt<mode>_multp2"
operands[3] = GEN_INT (aarch64_uxt_size (exact_log2 (INTVAL (operands[2])),
INTVAL (operands[3])));
return \"sub\t%<w>0, %<w>4, %<w>1, uxt%e3 %p2\";"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alu_ext")]
)
;; zero_extend version of above
operands[3] = GEN_INT (aarch64_uxt_size (exact_log2 (INTVAL (operands[2])),
INTVAL (operands[3])));
return \"sub\t%w0, %w4, %w1, uxt%e3 %p2\";"
- [(set_attr "type" "alu_ext")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_ext")]
)
(define_insn_and_split "absdi2"
GEN_INT (63)))));
DONE;
}
- [(set_attr "type" "alu_reg")
- (set_attr "mode" "DI")]
+ [(set_attr "type" "alu_reg")]
)
(define_insn "neg<mode>2"
neg\\t%<w>0, %<w>1
neg\\t%<rtn>0<vas>, %<rtn>1<vas>"
[(set_attr "type" "alu_reg, neon_neg<q>")
- (set_attr "simd" "*,yes")
- (set_attr "mode" "<MODE>")]
+ (set_attr "simd" "*,yes")]
)
;; zero_extend version of above
(zero_extend:DI (neg:SI (match_operand:SI 1 "register_operand" "r"))))]
""
"neg\\t%w0, %w1"
- [(set_attr "type" "alu_reg")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_reg")]
)
(define_insn "*ngc<mode>"
(match_operand:GPI 1 "register_operand" "r")))]
""
"ngc\\t%<w>0, %<w>1"
- [(set_attr "type" "adc_reg")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "adc_reg")]
)
(define_insn "*ngcsi_uxtw"
(match_operand:SI 1 "register_operand" "r"))))]
""
"ngc\\t%w0, %w1"
- [(set_attr "type" "adc_reg")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "adc_reg")]
)
(define_insn "*neg<mode>2_compare0"
(neg:GPI (match_dup 1)))]
""
"negs\\t%<w>0, %<w>1"
- [(set_attr "type" "alus_reg")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alus_reg")]
)
;; zero_extend version of above
(zero_extend:DI (neg:SI (match_dup 1))))]
""
"negs\\t%w0, %w1"
- [(set_attr "type" "alus_reg")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alus_reg")]
)
(define_insn "*neg_<shift><mode>3_compare0"
(neg:GPI (ASHIFT:GPI (match_dup 1) (match_dup 2))))]
""
"negs\\t%<w>0, %<w>1, <shift> %2"
- [(set_attr "type" "alus_shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alus_shift_imm")]
)
(define_insn "*neg_<shift>_<mode>2"
(match_operand:QI 2 "aarch64_shift_imm_<mode>" "n"))))]
""
"neg\\t%<w>0, %<w>1, <shift> %2"
- [(set_attr "type" "alu_shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alu_shift_imm")]
)
;; zero_extend version of above
(match_operand:QI 2 "aarch64_shift_imm_si" "n")))))]
""
"neg\\t%w0, %w1, <shift> %2"
- [(set_attr "type" "alu_shift_imm")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_shift_imm")]
)
(define_insn "*neg_mul_imm_<mode>2"
(match_operand:QI 2 "aarch64_pwr_2_<mode>" "n"))))]
""
"neg\\t%<w>0, %<w>1, lsl %p2"
- [(set_attr "type" "alu_shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alu_shift_imm")]
)
;; zero_extend version of above
(match_operand:QI 2 "aarch64_pwr_2_si" "n")))))]
""
"neg\\t%w0, %w1, lsl %p2"
- [(set_attr "type" "alu_shift_imm")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "alu_shift_imm")]
)
(define_insn "mul<mode>3"
(match_operand:GPI 2 "register_operand" "r")))]
""
"mul\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "mul")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "mul")]
)
;; zero_extend version of above
(match_operand:SI 2 "register_operand" "r"))))]
""
"mul\\t%w0, %w1, %w2"
- [(set_attr "type" "mul")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "mul")]
)
(define_insn "*madd<mode>"
(match_operand:GPI 3 "register_operand" "r")))]
""
"madd\\t%<w>0, %<w>1, %<w>2, %<w>3"
- [(set_attr "type" "mla")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "mla")]
)
;; zero_extend version of above
(match_operand:SI 3 "register_operand" "r"))))]
""
"madd\\t%w0, %w1, %w2, %w3"
- [(set_attr "type" "mla")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "mla")]
)
(define_insn "*msub<mode>"
""
"msub\\t%<w>0, %<w>1, %<w>2, %<w>3"
- [(set_attr "type" "mla")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "mla")]
)
;; zero_extend version of above
""
"msub\\t%w0, %w1, %w2, %w3"
- [(set_attr "type" "mla")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "mla")]
)
(define_insn "*mul<mode>_neg"
""
"mneg\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "mul")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "mul")]
)
;; zero_extend version of above
""
"mneg\\t%w0, %w1, %w2"
- [(set_attr "type" "mul")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "mul")]
)
(define_insn "<su_optab>mulsidi3"
(ANY_EXTEND:DI (match_operand:SI 2 "register_operand" "r"))))]
""
"<su>mull\\t%0, %w1, %w2"
- [(set_attr "type" "<su>mull")
- (set_attr "mode" "DI")]
+ [(set_attr "type" "<su>mull")]
)
(define_insn "<su_optab>maddsidi4"
(match_operand:DI 3 "register_operand" "r")))]
""
"<su>maddl\\t%0, %w1, %w2, %3"
- [(set_attr "type" "<su>mlal")
- (set_attr "mode" "DI")]
+ [(set_attr "type" "<su>mlal")]
)
(define_insn "<su_optab>msubsidi4"
(match_operand:SI 2 "register_operand" "r")))))]
""
"<su>msubl\\t%0, %w1, %w2, %3"
- [(set_attr "type" "<su>mlal")
- (set_attr "mode" "DI")]
+ [(set_attr "type" "<su>mlal")]
)
(define_insn "*<su_optab>mulsidi_neg"
(ANY_EXTEND:DI (match_operand:SI 2 "register_operand" "r"))))]
""
"<su>mnegl\\t%0, %w1, %w2"
- [(set_attr "type" "<su>mull")
- (set_attr "mode" "DI")]
+ [(set_attr "type" "<su>mull")]
)
(define_insn "<su>muldi3_highpart"
(const_int 64))))]
""
"<su>mulh\\t%0, %1, %2"
- [(set_attr "type" "<su>mull")
- (set_attr "mode" "DI")]
+ [(set_attr "type" "<su>mull")]
)
(define_insn "<su_optab>div<mode>3"
(match_operand:GPI 2 "register_operand" "r")))]
""
"<su>div\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "<su>div")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "<su>div")]
)
;; zero_extend version of above
(match_operand:SI 2 "register_operand" "r"))))]
""
"<su>div\\t%w0, %w1, %w2"
- [(set_attr "type" "<su>div")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "<su>div")]
)
;; -------------------------------------------------------------------
cmp\\t%<w>0, %<w>1
cmp\\t%<w>0, %<w>1
cmn\\t%<w>0, #%n1"
- [(set_attr "type" "alus_reg,alus_imm,alus_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alus_reg,alus_imm,alus_imm")]
)
(define_insn "*cmp<mode>"
"@
fcmp\\t%<s>0, #0.0
fcmp\\t%<s>0, %<s>1"
- [(set_attr "type" "fcmp<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fcmp<s>")]
)
(define_insn "*cmpe<mode>"
"@
fcmpe\\t%<s>0, #0.0
fcmpe\\t%<s>0, %<s>1"
- [(set_attr "type" "fcmp<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fcmp<s>")]
)
(define_insn "*cmp_swp_<shift>_reg<mode>"
(match_operand:GPI 2 "aarch64_reg_or_zero" "rZ")))]
""
"cmp\\t%<w>2, %<w>0, <shift> %1"
- [(set_attr "type" "alus_shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alus_shift_imm")]
)
(define_insn "*cmp_swp_<optab><ALLX:mode>_reg<GPI:mode>"
(match_operand:GPI 1 "register_operand" "r")))]
""
"cmp\\t%<GPI:w>1, %<GPI:w>0, <su>xt<ALLX:size>"
- [(set_attr "type" "alus_ext")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "alus_ext")]
)
(define_insn "*cmp_swp_<optab><ALLX:mode>_shft_<GPI:mode>"
(match_operand:GPI 2 "register_operand" "r")))]
""
"cmp\\t%<GPI:w>2, %<GPI:w>0, <su>xt<ALLX:size> %1"
- [(set_attr "type" "alus_ext")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "alus_ext")]
)
;; -------------------------------------------------------------------
[(match_operand 2 "cc_register" "") (const_int 0)]))]
""
"cset\\t%<w>0, %m1"
- [(set_attr "type" "csel")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "csel")]
)
;; zero_extend version of the above
[(match_operand 2 "cc_register" "") (const_int 0)])))]
""
"cset\\t%w0, %m1"
- [(set_attr "type" "csel")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "csel")]
)
(define_insn "cstore<mode>_neg"
[(match_operand 2 "cc_register" "") (const_int 0)])))]
""
"csetm\\t%<w>0, %m1"
- [(set_attr "type" "csel")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "csel")]
)
;; zero_extend version of the above
[(match_operand 2 "cc_register" "") (const_int 0)]))))]
""
"csetm\\t%w0, %m1"
- [(set_attr "type" "csel")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "csel")]
)
(define_expand "cmov<mode>6"
csinc\\t%<w>0, %<w>4, <w>zr, %M1
mov\\t%<w>0, -1
mov\\t%<w>0, 1"
- [(set_attr "type" "csel")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "csel")]
)
;; zero_extend version of above
csinc\\t%w0, %w4, wzr, %M1
mov\\t%w0, -1
mov\\t%w0, 1"
- [(set_attr "type" "csel")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "csel")]
)
(define_insn "*cmov<mode>_insn"
(match_operand:GPF 4 "register_operand" "w")))]
"TARGET_FLOAT"
"fcsel\\t%<s>0, %<s>3, %<s>4, %m1"
- [(set_attr "type" "fcsel")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fcsel")]
)
(define_expand "mov<mode>cc"
(match_operand:GPI 1 "register_operand" "r")))]
""
"csinc\\t%<w>0, %<w>1, %<w>1, %M2"
- [(set_attr "type" "csel")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "csel")]
+)
(define_insn "csinc3<mode>_insn"
[(set (match_operand:GPI 0 "register_operand" "=r")
(match_operand:GPI 4 "aarch64_reg_or_zero" "rZ")))]
""
"csinc\\t%<w>0, %<w>4, %<w>3, %M1"
- [(set_attr "type" "csel")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "csel")]
)
(define_insn "*csinv3<mode>_insn"
(match_operand:GPI 4 "aarch64_reg_or_zero" "rZ")))]
""
"csinv\\t%<w>0, %<w>4, %<w>3, %M1"
- [(set_attr "type" "csel")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "csel")]
+)
(define_insn "*csneg3<mode>_insn"
[(set (match_operand:GPI 0 "register_operand" "=r")
(match_operand:GPI 4 "aarch64_reg_or_zero" "rZ")))]
""
"csneg\\t%<w>0, %<w>4, %<w>3, %M1"
- [(set_attr "type" "csel")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "csel")]
+)
;; -------------------------------------------------------------------
;; Logical operations
(match_operand:GPI 2 "aarch64_logical_operand" "r,<lconst>")))]
""
"<logical>\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "logic_reg,logic_imm")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "logic_reg,logic_imm")]
+)
;; zero_extend version of above
(define_insn "*<optab>si3_uxtw"
(match_operand:SI 2 "aarch64_logical_operand" "r,K"))))]
""
"<logical>\\t%w0, %w1, %w2"
- [(set_attr "type" "logic_reg,logic_imm")
- (set_attr "mode" "SI")])
+ [(set_attr "type" "logic_reg,logic_imm")]
+)
(define_insn "*and<mode>3_compare0"
[(set (reg:CC_NZ CC_REGNUM)
(and:GPI (match_dup 1) (match_dup 2)))]
""
"ands\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "logics_reg,logics_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "logics_reg,logics_imm")]
)
;; zero_extend version of above
(zero_extend:DI (and:SI (match_dup 1) (match_dup 2))))]
""
"ands\\t%w0, %w1, %w2"
- [(set_attr "type" "logics_reg,logics_imm")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "logics_reg,logics_imm")]
)
(define_insn "*and_<SHIFT:optab><mode>3_compare0"
(and:GPI (SHIFT:GPI (match_dup 1) (match_dup 2)) (match_dup 3)))]
""
"ands\\t%<w>0, %<w>3, %<w>1, <SHIFT:shift> %2"
- [(set_attr "type" "logics_shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "logics_shift_imm")]
)
;; zero_extend version of above
(match_dup 3))))]
""
"ands\\t%w0, %w3, %w1, <SHIFT:shift> %2"
- [(set_attr "type" "logics_shift_imm")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "logics_shift_imm")]
)
(define_insn "*<LOGICAL:optab>_<SHIFT:optab><mode>3"
(match_operand:GPI 3 "register_operand" "r")))]
""
"<LOGICAL:logical>\\t%<w>0, %<w>3, %<w>1, <SHIFT:shift> %2"
- [(set_attr "type" "logic_shift_imm")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "logic_shift_imm")]
+)
;; zero_extend version of above
(define_insn "*<LOGICAL:optab>_<SHIFT:optab>si3_uxtw"
(match_operand:SI 3 "register_operand" "r"))))]
""
"<LOGICAL:logical>\\t%w0, %w3, %w1, <SHIFT:shift> %2"
- [(set_attr "type" "logic_shift_imm")
- (set_attr "mode" "SI")])
+ [(set_attr "type" "logic_shift_imm")]
+)
(define_insn "one_cmpl<mode>2"
[(set (match_operand:GPI 0 "register_operand" "=r")
(not:GPI (match_operand:GPI 1 "register_operand" "r")))]
""
"mvn\\t%<w>0, %<w>1"
- [(set_attr "type" "logic_reg")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "logic_reg")]
+)
(define_insn "*one_cmpl_<optab><mode>2"
[(set (match_operand:GPI 0 "register_operand" "=r")
(match_operand:QI 2 "aarch64_shift_imm_<mode>" "n"))))]
""
"mvn\\t%<w>0, %<w>1, <shift> %2"
- [(set_attr "type" "logic_shift_imm")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "logic_shift_imm")]
+)
(define_insn "*<LOGICAL:optab>_one_cmpl<mode>3"
[(set (match_operand:GPI 0 "register_operand" "=r")
(match_operand:GPI 2 "register_operand" "r")))]
""
"<LOGICAL:nlogical>\\t%<w>0, %<w>2, %<w>1"
- [(set_attr "type" "logic_reg")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "logic_reg")]
+)
(define_insn "*and_one_cmpl<mode>3_compare0"
[(set (reg:CC_NZ CC_REGNUM)
(and:GPI (not:GPI (match_dup 1)) (match_dup 2)))]
""
"bics\\t%<w>0, %<w>2, %<w>1"
- [(set_attr "type" "logics_reg")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "logics_reg")]
+)
;; zero_extend version of above
(define_insn "*and_one_cmplsi3_compare0_uxtw"
(zero_extend:DI (and:SI (not:SI (match_dup 1)) (match_dup 2))))]
""
"bics\\t%w0, %w2, %w1"
- [(set_attr "type" "logics_reg")
- (set_attr "mode" "SI")])
+ [(set_attr "type" "logics_reg")]
+)
(define_insn "*<LOGICAL:optab>_one_cmpl_<SHIFT:optab><mode>3"
[(set (match_operand:GPI 0 "register_operand" "=r")
(match_operand:GPI 3 "register_operand" "r")))]
""
"<LOGICAL:nlogical>\\t%<w>0, %<w>3, %<w>1, <SHIFT:shift> %2"
- [(set_attr "type" "logics_shift_imm")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "logics_shift_imm")]
+)
(define_insn "*and_one_cmpl_<SHIFT:optab><mode>3_compare0"
[(set (reg:CC_NZ CC_REGNUM)
(match_dup 1) (match_dup 2))) (match_dup 3)))]
""
"bics\\t%<w>0, %<w>3, %<w>1, <SHIFT:shift> %2"
- [(set_attr "type" "logics_shift_imm")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "logics_shift_imm")]
+)
;; zero_extend version of above
(define_insn "*and_one_cmpl_<SHIFT:optab>si3_compare0_uxtw"
(SHIFT:SI (match_dup 1) (match_dup 2))) (match_dup 3))))]
""
"bics\\t%w0, %w3, %w1, <SHIFT:shift> %2"
- [(set_attr "type" "logics_shift_imm")
- (set_attr "mode" "SI")])
+ [(set_attr "type" "logics_shift_imm")]
+)
(define_insn "clz<mode>2"
[(set (match_operand:GPI 0 "register_operand" "=r")
(clz:GPI (match_operand:GPI 1 "register_operand" "r")))]
""
"clz\\t%<w>0, %<w>1"
- [(set_attr "type" "clz")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "clz")]
+)
(define_expand "ffs<mode>2"
[(match_operand:GPI 0 "register_operand")
(unspec:GPI [(match_operand:GPI 1 "register_operand" "r")] UNSPEC_CLS))]
""
"cls\\t%<w>0, %<w>1"
- [(set_attr "type" "clz")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "clz")]
+)
(define_insn "rbit<mode>2"
[(set (match_operand:GPI 0 "register_operand" "=r")
(unspec:GPI [(match_operand:GPI 1 "register_operand" "r")] UNSPEC_RBIT))]
""
"rbit\\t%<w>0, %<w>1"
- [(set_attr "type" "rbit")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "rbit")]
+)
(define_expand "ctz<mode>2"
[(match_operand:GPI 0 "register_operand")
(const_int 0)))]
""
"tst\\t%<w>0, %<w>1"
- [(set_attr "type" "logics_reg")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "logics_reg")]
+)
(define_insn "*and_<SHIFT:optab><mode>3nr_compare0"
[(set (reg:CC_NZ CC_REGNUM)
(const_int 0)))]
""
"tst\\t%<w>2, %<w>0, <SHIFT:shift> %1"
- [(set_attr "type" "logics_shift_imm")
- (set_attr "mode" "<MODE>")])
+ [(set_attr "type" "logics_shift_imm")]
+)
;; -------------------------------------------------------------------
;; Shifts
ushl\t%<rtn>0<vas>, %<rtn>1<vas>, %<rtn>2<vas>
lsl\t%<w>0, %<w>1, %<w>2"
[(set_attr "simd" "yes,yes,no")
- (set_attr "type" "neon_shift_imm<q>, neon_shift_reg<q>,shift_reg")
- (set_attr "mode" "*,*,<MODE>")]
+ (set_attr "type" "neon_shift_imm<q>, neon_shift_reg<q>,shift_reg")]
)
;; Logical right shift using SISD or Integer instruction
#
lsr\t%<w>0, %<w>1, %<w>2"
[(set_attr "simd" "yes,yes,no")
- (set_attr "type" "neon_shift_imm<q>,neon_shift_reg<q>,shift_reg")
- (set_attr "mode" "*,*,<MODE>")]
+ (set_attr "type" "neon_shift_imm<q>,neon_shift_reg<q>,shift_reg")]
)
(define_split
#
asr\t%<w>0, %<w>1, %<w>2"
[(set_attr "simd" "yes,yes,no")
- (set_attr "type" "neon_shift_imm<q>,neon_shift_reg<q>,shift_reg")
- (set_attr "mode" "*,*,<MODE>")]
+ (set_attr "type" "neon_shift_imm<q>,neon_shift_reg<q>,shift_reg")]
)
(define_split
(match_operand:QI 2 "aarch64_reg_or_shift_imm_<mode>" "rUs<cmode>")))]
""
"ror\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "shift_reg")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "shift_reg")]
)
;; zero_extend version of above
(match_operand:QI 2 "aarch64_reg_or_shift_imm_si" "rUss"))))]
""
"<shift>\\t%w0, %w1, %w2"
- [(set_attr "type" "shift_reg")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "shift_reg")]
)
(define_insn "*ashl<mode>3_insn"
(match_operand:QI 2 "aarch64_reg_or_shift_imm_si" "rUss")))]
""
"lsl\\t%<w>0, %<w>1, %<w>2"
- [(set_attr "type" "shift_reg")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "shift_reg")]
)
(define_insn "*<optab><mode>3_insn"
operands[3] = GEN_INT (<sizen> - UINTVAL (operands[2]));
return "<bfshift>\t%w0, %w1, %2, %3";
}
- [(set_attr "type" "bfm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "bfm")]
)
(define_insn "*extr<mode>5_insn"
"UINTVAL (operands[3]) < GET_MODE_BITSIZE (<MODE>mode) &&
(UINTVAL (operands[3]) + UINTVAL (operands[4]) == GET_MODE_BITSIZE (<MODE>mode))"
"extr\\t%<w>0, %<w>1, %<w>2, %4"
- [(set_attr "type" "shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "shift_imm")]
)
;; zero_extend version of the above
"UINTVAL (operands[3]) < 32 &&
(UINTVAL (operands[3]) + UINTVAL (operands[4]) == 32)"
"extr\\t%w0, %w1, %w2, %4"
- [(set_attr "type" "shift_imm")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "shift_imm")]
)
(define_insn "*ror<mode>3_insn"
operands[3] = GEN_INT (<sizen> - UINTVAL (operands[2]));
return "ror\\t%<w>0, %<w>1, %3";
}
- [(set_attr "type" "shift_imm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "shift_imm")]
)
;; zero_extend version of the above
operands[3] = GEN_INT (32 - UINTVAL (operands[2]));
return "ror\\t%w0, %w1, %3";
}
- [(set_attr "type" "shift_imm")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "shift_imm")]
)
(define_insn "*<ANY_EXTEND:optab><GPI:mode>_ashl<SHORT:mode>"
operands[3] = GEN_INT (<SHORT:sizen> - UINTVAL (operands[2]));
return "<su>bfiz\t%<GPI:w>0, %<GPI:w>1, %2, %3";
}
- [(set_attr "type" "bfm")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "bfm")]
)
(define_insn "*zero_extend<GPI:mode>_lshr<SHORT:mode>"
operands[3] = GEN_INT (<SHORT:sizen> - UINTVAL (operands[2]));
return "ubfx\t%<GPI:w>0, %<GPI:w>1, %2, %3";
}
- [(set_attr "type" "bfm")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "bfm")]
)
(define_insn "*extend<GPI:mode>_ashr<SHORT:mode>"
operands[3] = GEN_INT (<SHORT:sizen> - UINTVAL (operands[2]));
return "sbfx\\t%<GPI:w>0, %<GPI:w>1, %2, %3";
}
- [(set_attr "type" "bfm")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "bfm")]
)
;; -------------------------------------------------------------------
(match_operand 3 "const_int_operand" "n")))]
""
"<su>bfx\\t%<w>0, %<w>1, %3, %2"
- [(set_attr "type" "bfm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "bfm")]
)
;; Bitfield Insert (insv)
|| (UINTVAL (operands[2]) + UINTVAL (operands[1])
> GET_MODE_BITSIZE (<MODE>mode)))"
"bfi\\t%<w>0, %<w>3, %2, %1"
- [(set_attr "type" "bfm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "bfm")]
)
(define_insn "*extr_insv_lower_reg<mode>"
|| (UINTVAL (operands[3]) + UINTVAL (operands[1])
> GET_MODE_BITSIZE (<MODE>mode)))"
"bfxil\\t%<w>0, %<w>2, %3, %1"
- [(set_attr "type" "bfm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "bfm")]
)
(define_insn "*<optab><ALLX:mode>_shft_<GPI:mode>"
: GEN_INT (<GPI:sizen> - UINTVAL (operands[2]));
return "<su>bfiz\t%<GPI:w>0, %<GPI:w>1, %2, %3";
}
- [(set_attr "type" "bfm")
- (set_attr "mode" "<GPI:MODE>")]
+ [(set_attr "type" "bfm")]
)
;; XXX We should match (any_extend (ashift)) here, like (and (ashift)) below
"exact_log2 ((INTVAL (operands[3]) >> INTVAL (operands[2])) + 1) >= 0
&& (INTVAL (operands[3]) & ((1 << INTVAL (operands[2])) - 1)) == 0"
"ubfiz\\t%<w>0, %<w>1, %2, %P3"
- [(set_attr "type" "bfm")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "bfm")]
)
(define_insn "bswap<mode>2"
(bswap:GPI (match_operand:GPI 1 "register_operand" "r")))]
""
"rev\\t%<w>0, %<w>1"
- [(set_attr "type" "rev")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "rev")]
)
(define_insn "bswaphi2"
(bswap:HI (match_operand:HI 1 "register_operand" "r")))]
""
"rev16\\t%w0, %w1"
- [(set_attr "type" "rev")
- (set_attr "mode" "HI")]
+ [(set_attr "type" "rev")]
)
;; zero_extend version of above
(zero_extend:DI (bswap:SI (match_operand:SI 1 "register_operand" "r"))))]
""
"rev\\t%w0, %w1"
- [(set_attr "type" "rev")
- (set_attr "mode" "SI")]
+ [(set_attr "type" "rev")]
)
;; -------------------------------------------------------------------
FRINT))]
"TARGET_FLOAT"
"frint<frint_suffix>\\t%<s>0, %<s>1"
- [(set_attr "type" "f_rint<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "f_rint<s>")]
)
;; frcvt floating-point round to integer and convert standard patterns.
FCVT)))]
"TARGET_FLOAT"
"fcvt<frint_suffix><su>\\t%<GPI:w>0, %<GPF:s>1"
- [(set_attr "type" "f_cvtf2i")
- (set_attr "mode" "<GPF:MODE>")
- (set_attr "mode2" "<GPI:MODE>")]
+ [(set_attr "type" "f_cvtf2i")]
)
;; fma - no throw
(match_operand:GPF 3 "register_operand" "w")))]
"TARGET_FLOAT"
"fmadd\\t%<s>0, %<s>1, %<s>2, %<s>3"
- [(set_attr "type" "fmac<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fmac<s>")]
)
(define_insn "fnma<mode>4"
(match_operand:GPF 3 "register_operand" "w")))]
"TARGET_FLOAT"
"fmsub\\t%<s>0, %<s>1, %<s>2, %<s>3"
- [(set_attr "type" "fmac<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fmac<s>")]
)
(define_insn "fms<mode>4"
(neg:GPF (match_operand:GPF 3 "register_operand" "w"))))]
"TARGET_FLOAT"
"fnmsub\\t%<s>0, %<s>1, %<s>2, %<s>3"
- [(set_attr "type" "fmac<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fmac<s>")]
)
(define_insn "fnms<mode>4"
(neg:GPF (match_operand:GPF 3 "register_operand" "w"))))]
"TARGET_FLOAT"
"fnmadd\\t%<s>0, %<s>1, %<s>2, %<s>3"
- [(set_attr "type" "fmac<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fmac<s>")]
)
;; If signed zeros are ignored, -(a * b + c) = -a * b - c.
(match_operand:GPF 3 "register_operand" "w"))))]
"!HONOR_SIGNED_ZEROS (<MODE>mode) && TARGET_FLOAT"
"fnmadd\\t%<s>0, %<s>1, %<s>2, %<s>3"
- [(set_attr "type" "fmac<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fmac<s>")]
)
;; -------------------------------------------------------------------
(float_extend:DF (match_operand:SF 1 "register_operand" "w")))]
"TARGET_FLOAT"
"fcvt\\t%d0, %s1"
- [(set_attr "type" "f_cvt")
- (set_attr "mode" "DF")
- (set_attr "mode2" "SF")]
+ [(set_attr "type" "f_cvt")]
)
(define_insn "truncdfsf2"
(float_truncate:SF (match_operand:DF 1 "register_operand" "w")))]
"TARGET_FLOAT"
"fcvt\\t%s0, %d1"
- [(set_attr "type" "f_cvt")
- (set_attr "mode" "SF")
- (set_attr "mode2" "DF")]
+ [(set_attr "type" "f_cvt")]
)
(define_insn "fix_trunc<GPF:mode><GPI:mode>2"
(fix:GPI (match_operand:GPF 1 "register_operand" "w")))]
"TARGET_FLOAT"
"fcvtzs\\t%<GPI:w>0, %<GPF:s>1"
- [(set_attr "type" "f_cvtf2i")
- (set_attr "mode" "<GPF:MODE>")
- (set_attr "mode2" "<GPI:MODE>")]
+ [(set_attr "type" "f_cvtf2i")]
)
(define_insn "fixuns_trunc<GPF:mode><GPI:mode>2"
(unsigned_fix:GPI (match_operand:GPF 1 "register_operand" "w")))]
"TARGET_FLOAT"
"fcvtzu\\t%<GPI:w>0, %<GPF:s>1"
- [(set_attr "type" "f_cvtf2i")
- (set_attr "mode" "<GPF:MODE>")
- (set_attr "mode2" "<GPI:MODE>")]
+ [(set_attr "type" "f_cvtf2i")]
)
(define_insn "float<GPI:mode><GPF:mode>2"
(float:GPF (match_operand:GPI 1 "register_operand" "r")))]
"TARGET_FLOAT"
"scvtf\\t%<GPF:s>0, %<GPI:w>1"
- [(set_attr "type" "f_cvti2f")
- (set_attr "mode" "<GPF:MODE>")
- (set_attr "mode2" "<GPI:MODE>")]
+ [(set_attr "type" "f_cvti2f")]
)
(define_insn "floatuns<GPI:mode><GPF:mode>2"
(unsigned_float:GPF (match_operand:GPI 1 "register_operand" "r")))]
"TARGET_FLOAT"
"ucvtf\\t%<GPF:s>0, %<GPI:w>1"
- [(set_attr "type" "f_cvt")
- (set_attr "mode" "<GPF:MODE>")
- (set_attr "mode2" "<GPI:MODE>")]
+ [(set_attr "type" "f_cvt")]
)
;; -------------------------------------------------------------------
(match_operand:GPF 2 "register_operand" "w")))]
"TARGET_FLOAT"
"fadd\\t%<s>0, %<s>1, %<s>2"
- [(set_attr "type" "fadd<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fadd<s>")]
)
(define_insn "sub<mode>3"
(match_operand:GPF 2 "register_operand" "w")))]
"TARGET_FLOAT"
"fsub\\t%<s>0, %<s>1, %<s>2"
- [(set_attr "type" "fadd<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fadd<s>")]
)
(define_insn "mul<mode>3"
(match_operand:GPF 2 "register_operand" "w")))]
"TARGET_FLOAT"
"fmul\\t%<s>0, %<s>1, %<s>2"
- [(set_attr "type" "fmul<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fmul<s>")]
)
(define_insn "*fnmul<mode>3"
(match_operand:GPF 2 "register_operand" "w")))]
"TARGET_FLOAT"
"fnmul\\t%<s>0, %<s>1, %<s>2"
- [(set_attr "type" "fmul<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fmul<s>")]
)
(define_insn "div<mode>3"
(match_operand:GPF 2 "register_operand" "w")))]
"TARGET_FLOAT"
"fdiv\\t%<s>0, %<s>1, %<s>2"
- [(set_attr "type" "fdiv<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fdiv<s>")]
)
(define_insn "neg<mode>2"
(neg:GPF (match_operand:GPF 1 "register_operand" "w")))]
"TARGET_FLOAT"
"fneg\\t%<s>0, %<s>1"
- [(set_attr "type" "ffarith<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "ffarith<s>")]
)
(define_insn "sqrt<mode>2"
(sqrt:GPF (match_operand:GPF 1 "register_operand" "w")))]
"TARGET_FLOAT"
"fsqrt\\t%<s>0, %<s>1"
- [(set_attr "type" "fsqrt<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "fsqrt<s>")]
)
(define_insn "abs<mode>2"
(abs:GPF (match_operand:GPF 1 "register_operand" "w")))]
"TARGET_FLOAT"
"fabs\\t%<s>0, %<s>1"
- [(set_attr "type" "ffarith<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "ffarith<s>")]
)
;; Given that smax/smin do not specify the result when either input is NaN,
(match_operand:GPF 2 "register_operand" "w")))]
"TARGET_FLOAT"
"fmaxnm\\t%<s>0, %<s>1, %<s>2"
- [(set_attr "type" "f_minmax<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "f_minmax<s>")]
)
(define_insn "smin<mode>3"
(match_operand:GPF 2 "register_operand" "w")))]
"TARGET_FLOAT"
"fminnm\\t%<s>0, %<s>1, %<s>2"
- [(set_attr "type" "f_minmax<s>")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "f_minmax<s>")]
)
;; -------------------------------------------------------------------
"reload_completed || reload_in_progress"
"fmov\\t%x0, %d1"
[(set_attr "type" "f_mrc")
- (set_attr "mode" "DI")
(set_attr "length" "4")
])
"reload_completed || reload_in_progress"
"fmov\\t%x0, %1.d[1]"
[(set_attr "type" "f_mrc")
- (set_attr "mode" "DI")
(set_attr "length" "4")
])
"reload_completed || reload_in_progress"
"fmov\\t%0.d[1], %x1"
[(set_attr "type" "f_mcr")
- (set_attr "mode" "DI")
(set_attr "length" "4")
])
"reload_completed || reload_in_progress"
"fmov\\t%d0, %x1"
[(set_attr "type" "f_mcr")
- (set_attr "mode" "DI")
(set_attr "length" "4")
])
"reload_completed || reload_in_progress"
"fmov\\t%d0, %d1"
[(set_attr "type" "f_mcr")
- (set_attr "mode" "DI")
(set_attr "length" "4")
])
(match_operand 2 "aarch64_valid_symref" "S")))]
""
"add\\t%<w>0, %<w>1, :lo12:%a2"
- [(set_attr "type" "alu_reg")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "alu_reg")]
)
(define_insn "ldr_got_small_<mode>"
UNSPEC_GOTSMALLPIC))]
""
"ldr\\t%<w>0, [%1, #:got_lo12:%a2]"
- [(set_attr "type" "load1")
- (set_attr "mode" "<MODE>")]
+ [(set_attr "type" "load1")]
)
(define_insn "ldr_got_small_sidi"
UNSPEC_GOTSMALLPIC)))]
"TARGET_ILP32"
"ldr\\t%w0, [%1, #:got_lo12:%a2]"
- [(set_attr "type" "load1")
- (set_attr "mode" "DI")]
+ [(set_attr "type" "load1")]
)
(define_insn "ldr_got_tiny"
UNSPEC_GOTTINYPIC))]
""
"ldr\\t%0, %L1"
- [(set_attr "type" "load1")
- (set_attr "mode" "DI")]
+ [(set_attr "type" "load1")]
)
(define_insn "aarch64_load_tp_hard"
(unspec:DI [(const_int 0)] UNSPEC_TLS))]
""
"mrs\\t%0, tpidr_el0"
- [(set_attr "type" "mrs")
- (set_attr "mode" "DI")]
+ [(set_attr "type" "mrs")]
)
;; The TLS ABI specifically requires that the compiler does not schedule
""
"adrp\\t%0, %A1\;ldr\\t%0, [%0, #%L1]"
[(set_attr "type" "load1")
- (set_attr "mode" "DI")
(set_attr "length" "8")]
)
""
"add\\t%0, %1, #%G2\;add\\t%0, %0, #%L2"
[(set_attr "type" "alu_reg")
- (set_attr "mode" "DI")
(set_attr "length" "8")]
)