Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Aug 7th, 2012  |  syntax: None  |  size: 1.72 KB  |  hits: 6  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Which operator is faster (> or >=), (< or <=)? [closed]
  2. if(i==7) j=5; else j=9;
  3.        
  4. cmp i,#7
  5. moveq j,#5
  6. movne j,#7
  7.        
  8. while(--len)
  9. {
  10.   //do something
  11. }
  12.        
  13. a < b (uses 'setl'):
  14.  
  15. movl    $10, -8(%rbp)
  16. movl    $15, -12(%rbp)
  17. movl    -8(%rbp), %eax
  18. cmpl    -12(%rbp), %eax
  19. setl    %cl
  20. andb    $1, %cl
  21. movzbl  %cl, %eax
  22. popq    %rbp
  23. ret
  24.  
  25. a <= b (uses 'setle'):
  26.  
  27. movl    $10, -8(%rbp)
  28. movl    $15, -12(%rbp)
  29. movl    -8(%rbp), %eax
  30. cmpl    -12(%rbp), %eax
  31. setle   %cl
  32. andb    $1, %cl
  33. movzbl  %cl, %eax
  34. popq    %rbp
  35. ret
  36.  
  37. a > b (uses 'setg'):
  38.  
  39. movl    $10, -8(%rbp)
  40. movl    $15, -12(%rbp)
  41. movl    -8(%rbp), %eax
  42. cmpl    -12(%rbp), %eax
  43. setg    %cl
  44. andb    $1, %cl
  45. movzbl  %cl, %eax
  46. popq    %rbp
  47. ret
  48.  
  49. a >= b (uses 'setge'):
  50.  
  51. movl    $10, -8(%rbp)
  52. movl    $15, -12(%rbp)
  53. movl    -8(%rbp), %eax
  54. cmpl    -12(%rbp), %eax
  55. setge   %cl
  56. andb    $1, %cl
  57. movzbl  %cl, %eax
  58. popq    %rbp
  59. ret
  60.        
  61. #include <time.h>
  62. #include <stdio.h>
  63.  
  64. #define ITERS 100000000
  65.  
  66. int v = 0;
  67.  
  68. void testL()
  69. {
  70.     clock_t start = clock();
  71.  
  72.     v = 0;
  73.  
  74.     for (int i = 0; i < ITERS; i++) {
  75.         v = i < v;
  76.     }
  77.  
  78.     printf("%s: %lun", __FUNCTION__, clock() - start);
  79. }
  80.  
  81. void testLE()
  82. {
  83.     clock_t start = clock();
  84.  
  85.     v = 0;
  86.  
  87.     for (int i = 0; i < ITERS; i++)
  88.     {
  89.         v = i <= v;
  90.     }
  91.  
  92.     printf("%s: %lun", __FUNCTION__, clock() - start);
  93. }
  94.  
  95. void testG()
  96. {
  97.     clock_t start = clock();
  98.  
  99.     v = 0;
  100.  
  101.     for (int i = 0; i < ITERS; i++) {
  102.         v = i > v;
  103.     }
  104.  
  105.     printf("%s: %lun", __FUNCTION__, clock() - start);
  106. }
  107.  
  108. void testGE()
  109. {
  110.     clock_t start = clock();
  111.  
  112.     v = 0;
  113.  
  114.     for (int i = 0; i < ITERS; i++) {
  115.         v = i >= v;
  116.     }
  117.  
  118.     printf("%s: %lun", __FUNCTION__, clock() - start);
  119. }
  120.  
  121. int main()
  122. {
  123.     testL();
  124.     testLE();
  125.     testG();
  126.     testGE();
  127. }
  128.        
  129. setcc