|
3844 | 3844 | (add_logical_mem_zext32_with_flags_paired ty y (sink_uload32 x))
|
3845 | 3845 | (trap_if_impl (mask_as_cond 3) tc)))
|
3846 | 3846 |
|
| 3847 | +;;;; Rules for `uadd_overflow` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| 3848 | + |
| 3849 | +(rule 0 (lower (has_type (fits_in_64 ty) (uadd_overflow x y))) |
| 3850 | + (let ((sum XReg (add_logical_mem_with_flags_paired ty x y)) |
| 3851 | + (one XReg (imm $I8 1)) |
| 3852 | + (overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg)))) |
| 3853 | + (output_pair |
| 3854 | + (value_reg sum) |
| 3855 | + (value_reg overflow_flag)))) |
| 3856 | + |
| 3857 | +(rule 1 (lower (has_type (fits_in_64 ty) (uadd_overflow x (sinkable_uload32 y)))) |
| 3858 | + (let ((sum XReg (add_logical_mem_zext32_with_flags_paired ty x (sink_uload32 y))) |
| 3859 | + (one XReg (imm $I8 1)) |
| 3860 | + (overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg)))) |
| 3861 | + (output_pair |
| 3862 | + (value_reg sum) |
| 3863 | + (value_reg overflow)))) |
| 3864 | + |
| 3865 | +(rule 2 (lower (has_type (fits_in_64 ty) (uadd_overflow x (sinkable_load_32_64 y)))) |
| 3866 | + (let ((sum XReg (add_logical_mem_with_flags_paired ty x (sink_load y))) |
| 3867 | + (one XReg (imm $I8 1)) |
| 3868 | + (overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg)))) |
| 3869 | + (output_pair |
| 3870 | + (value_reg sum) |
| 3871 | + (value_reg overflow)))) |
| 3872 | + |
| 3873 | +(rule 3 (lower (has_type (fits_in_64 ty) (uadd_overflow x (u32_from_value y)))) |
| 3874 | + (let ((sum XReg (add_logical_zimm32_with_flags_paired ty x y)) |
| 3875 | + (one XReg (imm $I8 1)) |
| 3876 | + (overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg)))) |
| 3877 | + (output_pair |
| 3878 | + (value_reg sum) |
| 3879 | + (value_reg overflow)))) |
| 3880 | + |
| 3881 | +(rule 4 (lower (has_type (fits_in_64 ty) (uadd_overflow x (zext32_value y)))) |
| 3882 | + (let ((sum XReg (add_logical_reg_zext32_with_flags_paired ty x y)) |
| 3883 | + (one XReg (imm $I8 1)) |
| 3884 | + (overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg)))) |
| 3885 | + (output_pair |
| 3886 | + (value_reg sum) |
| 3887 | + (value_reg overflow)))) |
| 3888 | + |
| 3889 | +(rule 5 (lower (has_type (fits_in_64 ty) (uadd_overflow (sinkable_uload32 x) y))) |
| 3890 | + (let ((sum XReg (add_logical_mem_zext32_with_flags_paired ty y (sink_uload32 x))) |
| 3891 | + (one XReg (imm $I8 1)) |
| 3892 | + (overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg)))) |
| 3893 | + (output_pair |
| 3894 | + (value_reg sum) |
| 3895 | + (value_reg overflow)))) |
| 3896 | + |
| 3897 | +(rule 6 (lower (has_type (fits_in_64 ty) (uadd_overflow (sinkable_load_32_64 x) y))) |
| 3898 | + (let ((sum XReg (add_logical_mem_with_flags_paired ty y (sink_load x))) |
| 3899 | + (one XReg (imm $I8 1)) |
| 3900 | + (overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg)))) |
| 3901 | + (output_pair |
| 3902 | + (value_reg sum) |
| 3903 | + (value_reg overflow)))) |
| 3904 | + |
| 3905 | +(rule 7 (lower (has_type (fits_in_64 ty) (uadd_overflow (u32_from_value x) y))) |
| 3906 | + (let ((sum XReg (add_logical_zimm32_with_flags_paired ty y x)) |
| 3907 | + (one XReg (imm $I8 1)) |
| 3908 | + (overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg)))) |
| 3909 | + (output_pair |
| 3910 | + (value_reg sum) |
| 3911 | + (value_reg overflow)))) |
| 3912 | + |
| 3913 | +(rule 8 (lower (has_type (fits_in_64 ty) (uadd_overflow (zext32_value x) y))) |
| 3914 | + (let ((sum XReg (add_logical_reg_zext32_with_flags_paired ty y x)) |
| 3915 | + (one XReg (imm $I8 1)) |
| 3916 | + (overflow XReg (gen_select_xreg (mask_as_cond 3) one (zero_reg)))) |
| 3917 | + (output_pair |
| 3918 | + (value_reg sum) |
| 3919 | + (value_reg overflow)))) |
| 3920 | + |
3847 | 3921 | ;;;; Rules for `return` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
3848 | 3922 |
|
3849 | 3923 | (rule (lower (return args))
|
|
0 commit comments