|
1580 | 1580 |
|
1581 | 1581 | ;; Helpers for querying enabled ISA extensions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1582 | 1582 |
|
1583 | | -(decl mie3_enabled () Type) |
1584 | | -(extern extractor mie3_enabled mie3_enabled) |
1585 | | -(decl mie3_disabled () Type) |
1586 | | -(extern extractor mie3_disabled mie3_disabled) |
1587 | | -(decl mie4_enabled () Type) |
1588 | | -(extern extractor mie4_enabled mie4_enabled) |
1589 | | -(decl mie4_disabled () Type) |
1590 | | -(extern extractor mie4_disabled mie4_disabled) |
1591 | | - |
1592 | | -(decl vxrs_ext2_enabled () Type) |
1593 | | -(extern extractor vxrs_ext2_enabled vxrs_ext2_enabled) |
1594 | | -(decl vxrs_ext2_disabled () Type) |
1595 | | -(extern extractor vxrs_ext2_disabled vxrs_ext2_disabled) |
1596 | | -(decl vxrs_ext3_enabled () Type) |
1597 | | -(extern extractor vxrs_ext3_enabled vxrs_ext3_enabled) |
1598 | | -(decl vxrs_ext3_disabled () Type) |
1599 | | -(extern extractor vxrs_ext3_disabled vxrs_ext3_disabled) |
| 1583 | +(decl pure has_mie3 () bool) |
| 1584 | +(extern constructor has_mie3 has_mie3) |
| 1585 | +(decl pure has_mie4 () bool) |
| 1586 | +(extern constructor has_mie4 has_mie4) |
| 1587 | + |
| 1588 | +(decl pure has_vxrs_ext2 () bool) |
| 1589 | +(extern constructor has_vxrs_ext2 has_vxrs_ext2) |
| 1590 | +(decl pure has_vxrs_ext3 () bool) |
| 1591 | +(extern constructor has_vxrs_ext3 has_vxrs_ext3) |
1600 | 1592 |
|
1601 | 1593 | ;; Helpers for SIMD lane number operations ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
1602 | 1594 |
|
|
1945 | 1937 | (memarg_reg_plus_reg_plus_off x y z flags)) |
1946 | 1938 |
|
1947 | 1939 | (rule 1 (lower_address flags |
1948 | | - (symbol_value _ (symbol_value_data name (RelocDistance.Near) sym_offset)) |
1949 | | - (i64_from_offset offset)) |
| 1940 | + (symbol_value _ (symbol_value_data name (RelocDistance.Near) sym_offset)) |
| 1941 | + (i64_from_offset offset)) |
1950 | 1942 | (if-let final_offset (memarg_symbol_offset_sum offset sym_offset)) |
1951 | 1943 | (memarg_symbol name final_offset flags)) |
1952 | 1944 |
|
1953 | | -(rule 2 (lower_address flags (has_type (mie4_enabled) |
| 1945 | +(rule 2 (lower_address flags |
1954 | 1946 | (iadd $I64 (ishl $I64 (uextend $I64 (iadd $I32 x (simm20_from_value z))) |
1955 | | - (u8_from_value shift)) y)) (i64_from_offset offset)) |
| 1947 | + (u8_from_value shift)) y) |
| 1948 | + (i64_from_offset offset)) |
| 1949 | + (if-let true (has_mie4)) |
1956 | 1950 | (memarg_reg_plus_off (load_logical_indexed_addr x y z shift) offset 0 flags)) |
1957 | 1951 |
|
1958 | | -(rule 3 (lower_address flags (has_type (mie4_enabled) |
| 1952 | +(rule 3 (lower_address flags |
1959 | 1953 | (iadd $I64 y (ishl $I64 (uextend $I64 (iadd $I32 x (simm20_from_value z))) |
1960 | | - (u8_from_value shift)))) (i64_from_offset offset)) |
| 1954 | + (u8_from_value shift))) |
| 1955 | + (i64_from_offset offset)) |
| 1956 | + (if-let true (has_mie4)) |
1961 | 1957 | (memarg_reg_plus_off (load_logical_indexed_addr y x z shift) offset 0 flags)) |
1962 | 1958 |
|
1963 | | -(rule 4 (lower_address flags (has_type (mie4_enabled) |
1964 | | - (iadd $I64 (ishl $I64 (sextend $I64 (iadd $I32 x (simm20_from_value z))) (u8_from_value shift)) y)) (i64_from_offset offset)) |
| 1959 | +(rule 4 (lower_address flags |
| 1960 | + (iadd $I64 (ishl $I64 (sextend $I64 (iadd $I32 x (simm20_from_value z))) |
| 1961 | + (u8_from_value shift)) y) |
| 1962 | + (i64_from_offset offset)) |
| 1963 | + (if-let true (has_mie4)) |
1965 | 1964 | (memarg_reg_plus_off (load_indexed_addr x y z shift) offset 0 flags)) |
1966 | 1965 |
|
1967 | | -(rule 5 (lower_address flags (has_type (mie4_enabled) |
1968 | | - (iadd $I64 y (ishl $I64 (sextend $I64 (iadd $I32 x (simm20_from_value z))) (u8_from_value shift)))) (i64_from_offset offset)) |
| 1966 | +(rule 5 (lower_address flags |
| 1967 | + (iadd $I64 y (ishl $I64 (sextend $I64 (iadd $I32 x (simm20_from_value z))) |
| 1968 | + (u8_from_value shift))) |
| 1969 | + (i64_from_offset offset)) |
| 1970 | + (if-let true (has_mie4)) |
1969 | 1971 | (memarg_reg_plus_off (load_indexed_addr y x z shift) offset 0 flags)) |
1970 | 1972 |
|
1971 | 1973 | ;; Lower an address plus a small bias into a `MemArg`. |
|
4970 | 4972 | ;; Helpers for generating `fcvt_to_[us]int` instructions ;;;;;;;;;;;;;;;;;;;;;;; |
4971 | 4973 |
|
4972 | 4974 | (decl fcvt_flt_ty (Type Type) Type) |
4973 | | -(rule 1 (fcvt_flt_ty (fits_in_32 ty) (and (vxrs_ext2_enabled) $F32)) $F32) |
| 4975 | +(rule 1 (fcvt_flt_ty (fits_in_32 ty) $F32) |
| 4976 | + (if-let true (has_vxrs_ext2)) |
| 4977 | + $F32) |
4974 | 4978 | (rule (fcvt_flt_ty (fits_in_64 ty) $F32) $F64) |
4975 | 4979 | (rule (fcvt_flt_ty (fits_in_64 ty) $F64) $F64) |
4976 | 4980 | (rule (fcvt_flt_ty (fits_in_64 ty) $F128) $F128) |
4977 | 4981 |
|
4978 | 4982 | (decl fcvt_int_ty (Type Type) Type) |
4979 | | -(rule 1 (fcvt_int_ty (fits_in_32 ty) (and (vxrs_ext2_enabled) $F32)) $I32) |
| 4983 | +(rule 1 (fcvt_int_ty (fits_in_32 ty) $F32) |
| 4984 | + (if-let true (has_vxrs_ext2)) |
| 4985 | + $I32) |
4980 | 4986 | (rule (fcvt_int_ty (fits_in_64 ty) $F32) $I64) |
4981 | 4987 | (rule (fcvt_int_ty (fits_in_64 ty) $F64) $I64) |
4982 | 4988 | (rule 1 (fcvt_int_ty (fits_in_32 ty) $F128) $I32) |
|
0 commit comments