@@ -80,18 +80,6 @@ final static function bool IsGt_AsUInt32(int A, int B)
80
80
81
81
final static function bool IsLt_AsUInt32 (int A , int B )
82
82
{
83
- // This is actually "less-than-or-equal"?
84
- // local int Msb;
85
-
86
- // Msb = A ^ B;
87
- // Msb = Msb | (Msb >>> 1);
88
- // Msb = Msb | (Msb >>> 2);
89
- // Msb = Msb | (Msb >>> 4);
90
- // Msb = Msb | (Msb >>> 8);
91
- // Msb = Msb | (Msb >>> 16);
92
- // Msb = Msb - (Msb >>> 1);
93
- // return !bool((B & Msb) ^ Msb);
94
-
95
83
local int Ltb ;
96
84
local int Gtb ;
97
85
@@ -111,3 +99,31 @@ final static function bool IsLt_AsUInt32(int A, int B)
111
99
// A <= B --> zero. // TODO: does this work?
112
100
return bool (Ltb & ~Gtb );
113
101
}
102
+
103
+ final static function bool IsGte_AsUInt32 (int A , int B )
104
+ {
105
+ local int Msb ;
106
+
107
+ Msb = A ^ B ;
108
+ Msb = Msb | (Msb >>> 1 );
109
+ Msb = Msb | (Msb >>> 2 );
110
+ Msb = Msb | (Msb >>> 4 );
111
+ Msb = Msb | (Msb >>> 8 );
112
+ Msb = Msb | (Msb >>> 16 );
113
+ Msb = Msb - (Msb >>> 1 );
114
+ return !bool ((A & Msb ) ^ Msb );
115
+ }
116
+
117
+ final static function bool IsLte_AsUInt32 (int A , int B )
118
+ {
119
+ local int Msb ;
120
+
121
+ Msb = A ^ B ;
122
+ Msb = Msb | (Msb >>> 1 );
123
+ Msb = Msb | (Msb >>> 2 );
124
+ Msb = Msb | (Msb >>> 4 );
125
+ Msb = Msb | (Msb >>> 8 );
126
+ Msb = Msb | (Msb >>> 16 );
127
+ Msb = Msb - (Msb >>> 1 );
128
+ return !bool ((B & Msb ) ^ Msb );
129
+ }
0 commit comments