|| [et-is-effective-target mips_msa]))
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget riscv*-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v])
}}]
}
&& [et-is-effective-target mips_msa])
|| [istarget amdgcn-*-*]
|| ([istarget s390*-*-*]
- && [check_effective_target_s390_vxe2]) }}]
+ && [check_effective_target_s390_vxe2])
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports signed double->int conversion
|| ([istarget mips*-*-*]
&& [et-is-effective-target mips_msa])
|| ([istarget s390*-*-*]
- && [check_effective_target_s390_vx]) }}]
+ && [check_effective_target_s390_vx])
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports signed int->double conversion
|| ([istarget mips*-*-*]
&& [et-is-effective-target mips_msa])
|| ([istarget s390*-*-*]
- && [check_effective_target_s390_vx]) }}]
+ && [check_effective_target_s390_vx])
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
#Return 1 if we're supporting __int128 for target, 0 otherwise.
&& [et-is-effective-target mips_msa])
|| [istarget amdgcn-*-*]
|| ([istarget s390*-*-*]
- && [check_effective_target_s390_vxe2]) }}]
+ && [check_effective_target_s390_vxe2])
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
&& [et-is-effective-target mips_msa])
|| [istarget amdgcn-*-*]
|| ([istarget s390*-*-*]
- && [check_effective_target_s390_vxe2]) }}]
+ && [check_effective_target_s390_vxe2])
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports unsigned float->int conversion
&& [et-is-effective-target mips_msa])
|| [istarget amdgcn-*-*]
|| ([istarget s390*-*-*]
- && [check_effective_target_s390_vxe2]) }}]
+ && [check_effective_target_s390_vxe2])
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if peeling for alignment might be profitable on the target
|| [et-is-effective-target mips_loongson_mmi]))
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget amdgcn-*-*] }}]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports hardware vector shift by register operation.
expr {(([istarget i?86-*-*] || [istarget x86_64-*-*])
&& [check_avx2_available])
|| [istarget aarch64*-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v])
}}]
}
&& [et-is-effective-target mips_loongson_mmi])
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget amdgcn-*-*] } {
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) } {
set answer 1
} else {
set answer 0
return [check_cached_effective_target_indexed vect_bool_cmp {
expr { [istarget i?86-*-*] || [istarget x86_64-*-*]
|| [istarget aarch64*-*-*]
- || [is-effective-target arm_neon] }}]
+ || [is-effective-target arm_neon]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports addition of char vectors for at least
|| [et-is-effective-target mips_msa]))
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v])
}}]
}
&& [et-is-effective-target mips_msa])
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget amdgcn-*-*] }}]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports hardware vectors of long, 0 otherwise.
&& [et-is-effective-target mips_msa])
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget amdgcn-*-*] } {
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) } {
set answer 1
} else {
set answer 0
|| [is-effective-target arm_neon]
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vxe])
- || [istarget amdgcn-*-*] }}]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports hardware vectors of float without
&& [et-is-effective-target mips_msa])
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget amdgcn-*-*]} }]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v])} }]
}
# Return 1 if the target supports conditional addition, subtraction,
# via the cond_ optabs. Return 0 otherwise.
proc check_effective_target_vect_double_cond_arith { } {
- return [check_effective_target_aarch64_sve]
+ return [expr { [check_effective_target_aarch64_sve]
+ || [check_effective_target_riscv_v] }]
}
# Return 1 if the target supports hardware vectors of long long, 0 otherwise.
|| ([istarget powerpc*-*-*]
&& ![istarget powerpc-*-linux*paired*]
&& [check_effective_target_has_arch_pwr8])
- || [istarget aarch64*-*-*] }}]
+ || [istarget aarch64*-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v])}}]
}
|| [et-is-effective-target mips_msa]))
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget amdgcn-*-*] }}]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if, for some VF:
&& [et-is-effective-target mips_msa])
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget amdgcn-*-*] }}]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports SLP permutation of 3 vectors when each
&& [et-is-effective-target mips_msa])
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget amdgcn-*-*] }}]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports SLP permutation of 3 vectors when each
# and unsigned average operations on vectors of bytes.
proc check_effective_target_vect_avg_qi {} {
- return [expr { [istarget aarch64*-*-*]
- && ![check_effective_target_aarch64_sve1_only] }]
+ return [expr { ([istarget aarch64*-*-*]
+ && ![check_effective_target_aarch64_sve1_only])
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }]
}
# Return 1 if the target plus current options supports both signed
proc check_effective_target_vect_masked_load { } {
return [expr { [check_avx_available]
|| [check_effective_target_aarch64_sve]
- || [istarget amdgcn*-*-*] } ]
+ || [istarget amdgcn*-*-*]
+ || [check_effective_target_riscv_v] } ]
}
# Return 1 if the target supports vector masked stores.
proc check_effective_target_vect_scatter_store { } {
return [expr { [check_effective_target_aarch64_sve]
- || [istarget amdgcn*-*-*] }]
+ || [istarget amdgcn*-*-*]
+ || [check_effective_target_riscv_v] }]
}
# Return 1 if the target supports vector conditional operations, 0 otherwise.
&& [check_effective_target_arm_neon_ok])
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget amdgcn-*-*] }}]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports vector conditional operations where
&& [et-is-effective-target mips_msa])
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget amdgcn-*-*] }}]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports vector char multiplication, 0 otherwise.
&& [et-is-effective-target mips_msa])
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget amdgcn-*-*] }}]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports vector short multiplication, 0 otherwise.
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
|| [istarget amdgcn-*-*]
- || [istarget riscv*-*-*] }}]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports vector int multiplication, 0 otherwise.
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
|| [istarget amdgcn-*-*]
- || [istarget riscv*-*-*] }}]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports 64 bit hardware vector
|| ([istarget sparc*-*-*] && [check_effective_target_ilp32])
|| [istarget aarch64*-*-*]
|| ([istarget mips*-*-*]
- && [et-is-effective-target mips_msa]) } {
+ && [et-is-effective-target mips_msa])
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) } {
set answer 1
} else {
set answer 0
return [check_cached_effective_target_indexed vect_int_mod {
expr { ([istarget powerpc*-*-*]
&& [check_effective_target_has_arch_pwr10])
- || [istarget amdgcn-*-*] }}]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports vector even/odd elements extraction, 0 otherwise.
lappend result 4096 2048 1024 512 256 128 64 32 16 8 4 2
} elseif { [istarget riscv*-*-*] } {
if { [check_effective_target_riscv_v] } {
- lappend result 0 32
+ lappend result 0 32 64 128
}
lappend result 128
} else {
expr { [istarget i?86-*-*] || [istarget x86_64-*-*]
|| [istarget powerpc*-*-*]
|| [istarget aarch64*-*-*]
- || [istarget amdgcn-*-*] }}]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports hardware square root instructions.
|| ([istarget powerpc*-*-*] && [check_vsx_hw_available])
|| ([istarget s390*-*-*]
&& [check_effective_target_s390_vx])
- || [istarget amdgcn-*-*] }}]
+ || [istarget amdgcn-*-*]
+ || ([istarget riscv*-*-*]
+ && [check_effective_target_riscv_v]) }}]
}
# Return 1 if the target supports vector lrint calls.
proc check_effective_target_vect_logical_reduc { } {
return [expr { [check_effective_target_aarch64_sve]
- || [istarget amdgcn-*-*] }]
+ || [istarget amdgcn-*-*]
+ || [check_effective_target_riscv_v] }]
}
# Return 1 if the target supports the fold_extract_last optab.
proc check_effective_target_vect_fold_extract_last { } {
return [expr { [check_effective_target_aarch64_sve]
- || [istarget amdgcn*-*-*] }]
+ || [istarget amdgcn*-*-*]
+ || [check_effective_target_riscv_v] }]
}
# Return 1 if the target supports section-anchors
proc check_effective_target_vect_sizes_16B_8B { } {
if { [check_avx_available]
|| [is-effective-target arm_neon]
- || [istarget aarch64*-*-*] } {
+ || [istarget aarch64*-*-*]
+ || [check_effective_target_riscv_v] } {
return 1;
} else {
return 0;
# Return 1 if the target supports max reduction for vectors.
proc check_effective_target_vect_max_reduc { } {
- if { [istarget aarch64*-*-*] || [is-effective-target arm_neon] } {
+ if { [istarget aarch64*-*-*] || [is-effective-target arm_neon]
+ || [check_effective_target_riscv_v] } {
return 1
}
return 0