@@ -135,6 +135,106 @@ public static int CheckAdd()
135135 fail = true ;
136136 }
137137
138+ if ( AddGtZero ( - 3 , 4 ) != 1 )
139+ {
140+ fail = true ;
141+ }
142+
143+ if ( AddGtZero ( 3 , - 3 ) != 0 )
144+ {
145+ fail = true ;
146+ }
147+
148+ if ( AddGtZero ( - 5 , - 10 ) != 0 )
149+ {
150+ fail = true ;
151+ }
152+
153+ if ( AddGtZero ( int . MaxValue , 1 ) != 0 )
154+ {
155+ fail = true ;
156+ }
157+
158+ if ( AddGtZero ( int . MinValue , - 1 ) != 1 )
159+ {
160+ fail = true ;
161+ }
162+
163+ if ( AddGeZero ( 1 , 1 ) != 1 )
164+ {
165+ fail = true ;
166+ }
167+
168+ if ( AddGeZero ( 0 , 0 ) != 1 )
169+ {
170+ fail = true ;
171+ }
172+
173+ if ( AddGeZero ( - 1 , - 1 ) != 0 )
174+ {
175+ fail = true ;
176+ }
177+
178+ if ( AddGeZero ( int . MaxValue , 1 ) != 0 )
179+ {
180+ fail = true ;
181+ }
182+
183+ if ( AddGeZero ( int . MinValue , - 1 ) != 1 )
184+ {
185+ fail = true ;
186+ }
187+
188+ if ( AddLtZero ( 1 , 1 ) != 0 )
189+ {
190+ fail = true ;
191+ }
192+
193+ if ( AddLtZero ( 0 , 0 ) != 0 )
194+ {
195+ fail = true ;
196+ }
197+
198+ if ( AddLtZero ( - 1 , - 1 ) != 1 )
199+ {
200+ fail = true ;
201+ }
202+
203+ if ( AddLtZero ( int . MaxValue , 1 ) != 1 )
204+ {
205+ fail = true ;
206+ }
207+
208+ if ( AddLtZero ( int . MinValue , - 1 ) != 0 )
209+ {
210+ fail = true ;
211+ }
212+
213+ if ( AddLeZero ( 1 , 1 ) != 0 )
214+ {
215+ fail = true ;
216+ }
217+
218+ if ( AddLeZero ( 0 , 0 ) != 1 )
219+ {
220+ fail = true ;
221+ }
222+
223+ if ( AddLeZero ( - 1 , - 1 ) != 1 )
224+ {
225+ fail = true ;
226+ }
227+
228+ if ( AddLeZero ( int . MaxValue , 1 ) != 1 )
229+ {
230+ fail = true ;
231+ }
232+
233+ if ( AddLeZero ( int . MinValue , - 1 ) != 0 )
234+ {
235+ fail = true ;
236+ }
237+
138238 if ( fail )
139239 {
140240 return 101 ;
@@ -336,5 +436,48 @@ static bool AddsBinOpSingleLine(int a, int b, int c, int d)
336436 //ARM64-FULL-LINE: adds {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
337437 return ( a + b == 0 ) | ( c + d == 0 ) ;
338438 }
439+
440+ [ MethodImpl ( MethodImplOptions . NoInlining ) ]
441+ static int AddGtZero ( int a , int b ) {
442+ //ARM64-FULL-LINE: add {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
443+ //ARM64-FULL-LINE: cmp {{w[0-9]+}}, #0
444+ //ARM64-FULL-LINE: cset {{x[0-9]+}}, gt
445+ if ( a + b > 0 ) {
446+ return 1 ;
447+ }
448+ return 0 ;
449+ }
450+
451+ [ MethodImpl ( MethodImplOptions . NoInlining ) ]
452+ static int AddGeZero ( int a , int b ) {
453+ //ARM64-FULL-LINE: add {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
454+ //ARM64-FULL-LINE: cmp {{w[0-9]+}}, #0
455+ //ARM64-FULL-LINE: cset {{x[0-9]+}}, ge
456+ if ( a + b >= 0 ) {
457+ return 1 ;
458+ }
459+ return 0 ;
460+ }
461+
462+ [ MethodImpl ( MethodImplOptions . NoInlining ) ]
463+ static int AddLtZero ( int a , int b ) {
464+ //ARM64-FULL-LINE: add {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
465+ //ARM64-FULL-LINE: lsr {{w[0-9]+}}, {{w[0-9]+}}, #31
466+ if ( a + b < 0 ) {
467+ return 1 ;
468+ }
469+ return 0 ;
470+ }
471+
472+ [ MethodImpl ( MethodImplOptions . NoInlining ) ]
473+ static int AddLeZero ( int a , int b ) {
474+ //ARM64-FULL-LINE: add {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
475+ //ARM64-FULL-LINE: cmp {{w[0-9]+}}, #0
476+ //ARM64-FULL-LINE: cset {{x[0-9]+}}, le
477+ if ( a + b <= 0 ) {
478+ return 1 ;
479+ }
480+ return 0 ;
481+ }
339482 }
340483}
0 commit comments