|
845 | 845 | (Const32 <typ.UInt32> [int64(1<<15+(umagic(16,c).m+1)/2)])
|
846 | 846 | (Rsh32Ux64 <typ.UInt32> (ZeroExt16to32 x) (Const64 <typ.UInt64> [1])))
|
847 | 847 | (Const64 <typ.UInt64> [16+umagic(16,c).s-2])))
|
848 |
| -(Div16u x (Const16 [c])) && umagicOK(16, c) && config.RegSize == 4 -> |
| 848 | +(Div16u x (Const16 [c])) && umagicOK(16, c) && config.RegSize == 4 && config.useAvg -> |
849 | 849 | (Trunc32to16
|
850 | 850 | (Rsh32Ux64 <typ.UInt32>
|
851 | 851 | (Avg32u
|
|
856 | 856 | (Const64 <typ.UInt64> [16+umagic(16,c).s-1])))
|
857 | 857 |
|
858 | 858 | // For 32-bit divides on 32-bit machines
|
859 |
| -(Div32u x (Const32 [c])) && umagicOK(32, c) && config.RegSize == 4 && umagic(32,c).m&1 == 0 -> |
| 859 | +(Div32u x (Const32 [c])) && umagicOK(32, c) && config.RegSize == 4 && umagic(32,c).m&1 == 0 && config.useHmul -> |
860 | 860 | (Rsh32Ux64 <typ.UInt32>
|
861 | 861 | (Hmul32u <typ.UInt32>
|
862 | 862 | (Const32 <typ.UInt32> [int64(int32(1<<31+umagic(32,c).m/2))])
|
863 | 863 | x)
|
864 | 864 | (Const64 <typ.UInt64> [umagic(32,c).s-1]))
|
865 |
| -(Div32u x (Const32 [c])) && umagicOK(32, c) && config.RegSize == 4 && c&1 == 0 -> |
| 865 | +(Div32u x (Const32 [c])) && umagicOK(32, c) && config.RegSize == 4 && c&1 == 0 && config.useHmul -> |
866 | 866 | (Rsh32Ux64 <typ.UInt32>
|
867 | 867 | (Hmul32u <typ.UInt32>
|
868 | 868 | (Const32 <typ.UInt32> [int64(int32(1<<31+(umagic(32,c).m+1)/2))])
|
869 | 869 | (Rsh32Ux64 <typ.UInt32> x (Const64 <typ.UInt64> [1])))
|
870 | 870 | (Const64 <typ.UInt64> [umagic(32,c).s-2]))
|
871 |
| -(Div32u x (Const32 [c])) && umagicOK(32, c) && config.RegSize == 4 -> |
| 871 | +(Div32u x (Const32 [c])) && umagicOK(32, c) && config.RegSize == 4 && config.useAvg && config.useHmul -> |
872 | 872 | (Rsh32Ux64 <typ.UInt32>
|
873 | 873 | (Avg32u
|
874 | 874 | x
|
|
893 | 893 | (Const64 <typ.UInt64> [int64(1<<31+(umagic(32,c).m+1)/2)])
|
894 | 894 | (Rsh64Ux64 <typ.UInt64> (ZeroExt32to64 x) (Const64 <typ.UInt64> [1])))
|
895 | 895 | (Const64 <typ.UInt64> [32+umagic(32,c).s-2])))
|
896 |
| -(Div32u x (Const32 [c])) && umagicOK(32, c) && config.RegSize == 8 -> |
| 896 | +(Div32u x (Const32 [c])) && umagicOK(32, c) && config.RegSize == 8 && config.useAvg -> |
897 | 897 | (Trunc64to32
|
898 | 898 | (Rsh64Ux64 <typ.UInt64>
|
899 | 899 | (Avg64u
|
|
905 | 905 |
|
906 | 906 | // For 64-bit divides on 64-bit machines
|
907 | 907 | // (64-bit divides on 32-bit machines are lowered to a runtime call by the walk pass.)
|
908 |
| -(Div64u x (Const64 [c])) && umagicOK(64, c) && config.RegSize == 8 && umagic(64,c).m&1 == 0 -> |
| 908 | +(Div64u x (Const64 [c])) && umagicOK(64, c) && config.RegSize == 8 && umagic(64,c).m&1 == 0 && config.useHmul -> |
909 | 909 | (Rsh64Ux64 <typ.UInt64>
|
910 | 910 | (Hmul64u <typ.UInt64>
|
911 | 911 | (Const64 <typ.UInt64> [int64(1<<63+umagic(64,c).m/2)])
|
912 | 912 | x)
|
913 | 913 | (Const64 <typ.UInt64> [umagic(64,c).s-1]))
|
914 |
| -(Div64u x (Const64 [c])) && umagicOK(64, c) && config.RegSize == 8 && c&1 == 0 -> |
| 914 | +(Div64u x (Const64 [c])) && umagicOK(64, c) && config.RegSize == 8 && c&1 == 0 && config.useHmul -> |
915 | 915 | (Rsh64Ux64 <typ.UInt64>
|
916 | 916 | (Hmul64u <typ.UInt64>
|
917 | 917 | (Const64 <typ.UInt64> [int64(1<<63+(umagic(64,c).m+1)/2)])
|
918 | 918 | (Rsh64Ux64 <typ.UInt64> x (Const64 <typ.UInt64> [1])))
|
919 | 919 | (Const64 <typ.UInt64> [umagic(64,c).s-2]))
|
920 |
| -(Div64u x (Const64 [c])) && umagicOK(64, c) && config.RegSize == 8 -> |
| 920 | +(Div64u x (Const64 [c])) && umagicOK(64, c) && config.RegSize == 8 && config.useAvg && config.useHmul -> |
921 | 921 | (Rsh64Ux64 <typ.UInt64>
|
922 | 922 | (Avg64u
|
923 | 923 | x
|
|
992 | 992 | (Rsh64x64 <t>
|
993 | 993 | (SignExt32to64 x)
|
994 | 994 | (Const64 <typ.UInt64> [63])))
|
995 |
| -(Div32 <t> x (Const32 [c])) && smagicOK(32,c) && config.RegSize == 4 && smagic(32,c).m&1 == 0 -> |
| 995 | +(Div32 <t> x (Const32 [c])) && smagicOK(32,c) && config.RegSize == 4 && smagic(32,c).m&1 == 0 && config.useHmul -> |
996 | 996 | (Sub32 <t>
|
997 | 997 | (Rsh32x64 <t>
|
998 | 998 | (Hmul32 <t>
|
|
1002 | 1002 | (Rsh32x64 <t>
|
1003 | 1003 | x
|
1004 | 1004 | (Const64 <typ.UInt64> [31])))
|
1005 |
| -(Div32 <t> x (Const32 [c])) && smagicOK(32,c) && config.RegSize == 4 && smagic(32,c).m&1 != 0 -> |
| 1005 | +(Div32 <t> x (Const32 [c])) && smagicOK(32,c) && config.RegSize == 4 && smagic(32,c).m&1 != 0 && config.useHmul -> |
1006 | 1006 | (Sub32 <t>
|
1007 | 1007 | (Rsh32x64 <t>
|
1008 | 1008 | (Add32 <t>
|
|
1014 | 1014 | (Rsh32x64 <t>
|
1015 | 1015 | x
|
1016 | 1016 | (Const64 <typ.UInt64> [31])))
|
1017 |
| -(Div64 <t> x (Const64 [c])) && smagicOK(64,c) && smagic(64,c).m&1 == 0 -> |
| 1017 | +(Div64 <t> x (Const64 [c])) && smagicOK(64,c) && smagic(64,c).m&1 == 0 && config.useHmul -> |
1018 | 1018 | (Sub64 <t>
|
1019 | 1019 | (Rsh64x64 <t>
|
1020 | 1020 | (Hmul64 <t>
|
|
1024 | 1024 | (Rsh64x64 <t>
|
1025 | 1025 | x
|
1026 | 1026 | (Const64 <typ.UInt64> [63])))
|
1027 |
| -(Div64 <t> x (Const64 [c])) && smagicOK(64,c) && smagic(64,c).m&1 != 0 -> |
| 1027 | +(Div64 <t> x (Const64 [c])) && smagicOK(64,c) && smagic(64,c).m&1 != 0 && config.useHmul -> |
1028 | 1028 | (Sub64 <t>
|
1029 | 1029 | (Rsh64x64 <t>
|
1030 | 1030 | (Add64 <t>
|
|
0 commit comments