code_junkie

How do I programmatically return the max of two integers without

Nov 11th, 2011
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. a -= b;
  2. a &= (~a) >> 31;
  3. a += b;
  4.  
  5. a -= b;
  6. a &= a >> 31;
  7. a += b;
  8.  
  9. r = x - ((x - y) & -(x < y)); // max(x, y)
  10.  
  11. int data[2] = {a,b};
  12. int c = a - b;
  13. return data[(int)((c & 0x80000000) >> 31)];
  14.  
  15. int max(int a, int b)
  16. {
  17. int x = (a - b) >> 31;
  18. int y = ~x;
  19. return (y & a) | (x & b);
  20. }
  21.  
  22. int getMax(int a, int b)
  23. {
  24. for(int i=0; (i<a) || (i<b); i++) { }
  25. return i;
  26. }
  27.  
  28. let greater x y = signum (1+signum (x-y))
  29.  
  30. let max a b = (greater a b)*a + (greater b a)*b
  31.  
  32. // GCC inline assembly
  33. int max(int a, int b)
  34. {
  35. __asm__("movl %0, %%eaxnt" // %eax = a
  36. "cmpl %%eax, %1nt" // compare a to b
  37. "cmovg %1, %%eax" // %eax = b if b>a
  38. :: "r"(a), "r"(b));
  39. }
  40.  
  41. int max(int a, int b)
  42. {
  43. __asm__("movl %0, %%eaxnt"
  44. "subl %1, %%eaxnt"
  45. "cmovge %0, %%eaxnt"
  46. "cmovl %1, %%eax"
  47. :: "r"(a), "r"(b)
  48. :"%eax");
  49. }
  50.  
  51. #define H0(x) (((signed)(x)) >> (sizeof((signed)(x))*8-1))
  52. #define H1(a,b) H0((a)-(b))
  53.  
  54. #define MIN1(a,b) ((a)+(H1(b,a) & ((b)-(a))))
  55. #define MIN2(a,b) ((a)-(H1(b,a) & ((a)-(b))))
  56. #define MIN3(a,b) ((b)-(H1(a,b) & ((b)-(a))))
  57. #define MIN4(a,b) ((b)+(H1(a,b) & ((a)-(b))))
  58. //#define MIN5(a,b) ((a)<(b)?(a):(b))
  59. //#define MIN6(a,b) ((a)>(b)?(b):(a))
  60. //#define MIN7(a,b) ((b)>(a)?(a):(b))
  61. //#define MIN8(a,b) ((b)<(a)?(b):(a))
  62.  
  63. #define MAX1(a,b) ((a)+(H1(a,b) & ((b)-(a))))
  64. #define MAX2(a,b) ((a)-(H1(a,b) & ((a)-(b))))
  65. #define MAX3(a,b) ((b)-(H1(b,a) & ((b)-(a))))
  66. #define MAX4(a,b) ((b)+(H1(b,a) & ((a)-(b))))
  67. //#define MAX5(a,b) ((a)<(b)?(b):(a))
  68. //#define MAX6(a,b) ((a)>(b)?(a):(b))
  69. //#define MAX7(a,b) ((b)>(a)?(b):(a))
  70. //#define MAX8(a,b) ((b)<(a)?(a):(b))
  71.  
  72. #define ABS1(a) (((a)^H0(a))-H0(a))
  73. //#define ABS2(a) ((a)>0?(a):-(a))
  74. //#define ABS3(a) ((a)>=0?(a):-(a))
  75. //#define ABS4(a) ((a)<0?-(a):(a))
  76. //#define ABS5(a) ((a)<=0?-(a):(a))
Add Comment
Please, Sign In to add comment