Changeset 6a05fd in git for factory/imm.h
- Timestamp:
- Oct 29, 2012, 6:31:42 PM (11 years ago)
- Branches:
- (u'spielwiese', '5b153614cbc72bfa198d75b1e9e33dab2645d9fe')
- Children:
- f7286a23b786af032ab46ebb6351640245468492
- Parents:
- e98ad4a781c85d53c676dffec15b2b238053266718ccf2907a4a103e379cecf364131e83e3aebab5
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/imm.h
re98ad4 r6a05fd 36 36 37 37 #if SIZEOF_LONG == 4 38 const long MINIMMEDIATE = -268435454; // -2^28 -238 const long MINIMMEDIATE = -268435454; // -2^28+2 39 39 const long MAXIMMEDIATE = 268435454; // 2^28-2 40 40 #else 41 const long MINIMMEDIATE = -(1L<<60)+2L; // -2^60 -241 const long MINIMMEDIATE = -(1L<<60)+2L; // -2^60+2 42 42 const long MAXIMMEDIATE = (1L<<60)-2L; // 2^60-2 43 43 #endif … … 300 300 long a = imm2int( lhs ); 301 301 long b = imm2int( rhs ); 302 INT64 result = (INT64)a * (INT64)b; 302 int sa= 1; 303 unsigned INT64 aa, bb; 304 if (a < 0) 305 { 306 sa= -1; 307 aa= (unsigned INT64) (-a); 308 } 309 else 310 aa= (unsigned INT64) a; 311 if (b < 0) 312 { 313 sa= -sa; 314 bb= (unsigned INT64) (-b); 315 } 316 else 317 bb= (unsigned INT64) b; 318 unsigned INT64 result = aa*bb; 303 319 #if SIZEOF_LONG == 4 304 if ( (result>(INT64)MAXIMMEDIATE)||(result<(INT64)MINIMMEDIATE))320 if (result>(unsigned INT64)MAXIMMEDIATE) 305 321 { 306 322 InternalCF * res = CFFactory::basic( IntegerDomain, a, true ); … … 308 324 } 309 325 #else 310 if ( ( a!=0L ) && ((result/a!=b) 311 ||(result>MAXIMMEDIATE)||(result<MINIMMEDIATE) ) ) 326 if ( ( a!=0L ) && ((result/aa!=bb) || (result>(unsigned INT64) MAXIMMEDIATE) )) 312 327 { 313 328 InternalCF * res = CFFactory::basic( IntegerDomain, a, true ); … … 316 331 #endif 317 332 else 318 return int2imm(result );333 return int2imm( sa*result ); 319 334 } 320 335
Note: See TracChangeset
for help on using the changeset viewer.