Advertisement
Guest User

azanella

a guest
May 26th, 2014
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.03 KB | None | 0 0
  1. === test.c ===
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <stdint.h>
  6. #include <string.h>
  7.  
  8. uint32_t test_rldimi_1 ();
  9. uint32_t test_rldimi_4 ();
  10. uint32_t test_rldimi_8 ();
  11. uint32_t test_rldimi_16 ();
  12. uint32_t test_rlwimi_1 ();
  13. uint32_t test_rlwimi_4 ();
  14. uint32_t test_rlwimi_8 ();
  15. uint32_t test_rlwimi_16 ();
  16.  
  17. typedef unsigned long long int hp_timing_t;
  18.  
  19. #define HP_TIMING_ZERO(Var) (Var) = (0)
  20.  
  21. #define HP_TIMING_NOW(Var) \
  22. do { \
  23. unsigned int hi, lo, tmp; \
  24. __asm__ __volatile__ ("1: mfspr %0,269;" \
  25. " mfspr %1,268;" \
  26. " mfspr %2,269;" \
  27. " cmpw %0,%2;" \
  28. " bne 1b;" \
  29. : "=&r" (hi), "=&r" (lo), "=&r" (tmp) \
  30. : : "cr0"); \
  31. Var = ((hp_timing_t) hi << 32) | lo; \
  32. } while (0)
  33.  
  34. static hp_timing_t hp_timing_overhead = 0ull;
  35.  
  36. #define HP_TIMING_DIFF_INIT() \
  37. do { \
  38. if (hp_timing_overhead == 0) \
  39. { \
  40. int __cnt = 5; \
  41. hp_timing_overhead = ~0ull; \
  42. do \
  43. { \
  44. hp_timing_t __t1, __t2; \
  45. HP_TIMING_NOW (__t1); \
  46. HP_TIMING_NOW (__t2); \
  47. if (__t2 - __t1 < hp_timing_overhead) \
  48. hp_timing_overhead = __t2 - __t1; \
  49. } \
  50. while (--__cnt > 0); \
  51. } \
  52. } while (0)
  53.  
  54. #define HP_TIMING_DIFF(Diff, Start, End) (Diff) = ((End) - (Start))
  55.  
  56. #define MIN(a,b) (((a)<(b))?(a):(b))
  57. #define MAX(a,b) (((a)<(b))?(b):(a))
  58.  
  59. #define NCALLS 1024
  60.  
  61. int main ()
  62. {
  63. hp_timing_t start, end, diff;
  64. hp_timing_t min, max;
  65. int i=0;
  66.  
  67. HP_TIMING_DIFF_INIT ();
  68.  
  69. min = ~0ull;
  70. max = 0ull;
  71.  
  72. for (i=0; i<NCALLS; ++i)
  73. {
  74. HP_TIMING_NOW (start);
  75. test_rldimi_1 ();
  76. HP_TIMING_NOW (end);
  77. HP_TIMING_DIFF (diff, start, end);
  78. min = MIN (min, diff);
  79. max = MAX (max, diff);
  80. }
  81. printf ("rldimi1: min: %llu | max: %llu\n", min, max);
  82. for (i=0; i<NCALLS; ++i)
  83. {
  84. HP_TIMING_NOW (start);
  85. test_rldimi_4 ();
  86. HP_TIMING_NOW (end);
  87. HP_TIMING_DIFF (diff, start, end);
  88. min = MIN (min, diff);
  89. max = MAX (max, diff);
  90. }
  91. printf ("rldimi4: min: %llu | max: %llu\n", min, max);
  92. for (i=0; i<NCALLS; ++i)
  93. {
  94. HP_TIMING_NOW (start);
  95. test_rldimi_8 ();
  96. HP_TIMING_NOW (end);
  97. HP_TIMING_DIFF (diff, start, end);
  98. min = MIN (min, diff);
  99. max = MAX (max, diff);
  100. }
  101. printf ("rldimi8: min: %llu | max: %llu\n", min, max);
  102. for (i=0; i<NCALLS; ++i)
  103. {
  104. HP_TIMING_NOW (start);
  105. test_rldimi_16 ();
  106. HP_TIMING_NOW (end);
  107. HP_TIMING_DIFF (diff, start, end);
  108. min = MIN (min, diff);
  109. max = MAX (max, diff);
  110. }
  111. printf ("rldimi16: min: %llu | max: %llu\n", min, max);
  112.  
  113. for (i=0; i<NCALLS; ++i)
  114. {
  115. HP_TIMING_NOW (start);
  116. test_rlwimi_1 ();
  117. HP_TIMING_NOW (end);
  118. HP_TIMING_DIFF (diff, start, end);
  119. min = MIN (min, diff);
  120. max = MAX (max, diff);
  121. }
  122. printf ("rlwimi1: min: %llu | max: %llu\n", min, max);
  123. for (i=0; i<NCALLS; ++i)
  124. {
  125. HP_TIMING_NOW (start);
  126. test_rlwimi_4 ();
  127. HP_TIMING_NOW (end);
  128. HP_TIMING_DIFF (diff, start, end);
  129. min = MIN (min, diff);
  130. max = MAX (max, diff);
  131. }
  132. printf ("rlwimi4: min: %llu | max: %llu\n", min, max);
  133. for (i=0; i<NCALLS; ++i)
  134. {
  135. HP_TIMING_NOW (start);
  136. test_rlwimi_8 ();
  137. HP_TIMING_NOW (end);
  138. HP_TIMING_DIFF (diff, start, end);
  139. min = MIN (min, diff);
  140. max = MAX (max, diff);
  141. }
  142. printf ("rlwimi8: min: %llu | max: %llu\n", min, max);
  143. for (i=0; i<NCALLS; ++i)
  144. {
  145. HP_TIMING_NOW (start);
  146. test_rlwimi_16 ();
  147. HP_TIMING_NOW (end);
  148. HP_TIMING_DIFF (diff, start, end);
  149. min = MIN (min, diff);
  150. max = MAX (max, diff);
  151. }
  152. printf ("rlwimi16: min: %llu | max: %llu\n", min, max);
  153.  
  154. return 0;
  155. }
  156.  
  157. === test_impl.S ===
  158.  
  159. #define CALL_MCOUNT
  160. #define ALIGNARG(X) X
  161. #define C_SYMBOL_NAME(name) name
  162. #define C_LABEL(name) name##:
  163. #define ASM_SIZE_DIRECTIVE(name) .size name,.-name
  164.  
  165. #define ENTRY(name) \
  166. .globl C_SYMBOL_NAME(name); \
  167. .type C_SYMBOL_NAME(name),@function; \
  168. .align ALIGNARG(2); \
  169. C_LABEL(name) \
  170. .cfi_startproc; \
  171. CALL_MCOUNT
  172.  
  173. #define END(name) \
  174. .cfi_endproc; \
  175. ASM_SIZE_DIRECTIVE(name)
  176.  
  177.  
  178. ENTRY (test_rldimi_1)
  179. rldimi 3, 3, 8, 16
  180. blr
  181. END (test_rldimi_1)
  182.  
  183. ENTRY (test_rldimi_4)
  184. rldimi 3, 3, 8, 16
  185. rldimi 3, 3, 8, 16
  186. rldimi 3, 3, 8, 16
  187. rldimi 3, 3, 8, 16
  188. blr
  189. END (test_rldimi_4)
  190.  
  191. ENTRY (test_rldimi_8)
  192. rldimi 3, 3, 8, 16
  193. rldimi 3, 3, 8, 16
  194. rldimi 3, 3, 8, 16
  195. rldimi 3, 3, 8, 16
  196. rldimi 3, 3, 8, 16
  197. rldimi 3, 3, 8, 16
  198. rldimi 3, 3, 8, 16
  199. rldimi 3, 3, 8, 16
  200. blr
  201. END (test_rldimi_8)
  202.  
  203. ENTRY (test_rldimi_16)
  204. rldimi 3, 3, 8, 16
  205. rldimi 3, 3, 8, 16
  206. rldimi 3, 3, 8, 16
  207. rldimi 3, 3, 8, 16
  208. rldimi 3, 3, 8, 16
  209. rldimi 3, 3, 8, 16
  210. rldimi 3, 3, 8, 16
  211. rldimi 3, 3, 8, 16
  212. rldimi 3, 3, 8, 16
  213. rldimi 3, 3, 8, 16
  214. rldimi 3, 3, 8, 16
  215. rldimi 3, 3, 8, 16
  216. rldimi 3, 3, 8, 16
  217. rldimi 3, 3, 8, 16
  218. rldimi 3, 3, 8, 16
  219. rldimi 3, 3, 8, 16
  220. blr
  221. END (test_rldimi_16)
  222.  
  223.  
  224. ENTRY (test_rlwimi_1)
  225. rlwimi 3, 3, 16, 32
  226. blr
  227. END (test_rlwimi_1)
  228.  
  229. ENTRY (test_rlwimi_4)
  230. rlwimi 3, 3, 16, 32
  231. rlwimi 3, 3, 16, 32
  232. rlwimi 3, 3, 16, 32
  233. rlwimi 3, 3, 16, 32
  234. blr
  235. END (test_rlwimi_4)
  236.  
  237. ENTRY (test_rlwimi_8)
  238. rlwimi 3, 3, 16, 32
  239. rlwimi 3, 3, 16, 32
  240. rlwimi 3, 3, 16, 32
  241. rlwimi 3, 3, 16, 32
  242. rlwimi 3, 3, 16, 32
  243. rlwimi 3, 3, 16, 32
  244. rlwimi 3, 3, 16, 32
  245. rlwimi 3, 3, 16, 32
  246. blr
  247. END (test_rlwimi_8)
  248.  
  249. ENTRY (test_rlwimi_16)
  250. rlwimi 3, 3, 16, 32
  251. rlwimi 3, 3, 16, 32
  252. rlwimi 3, 3, 16, 32
  253. rlwimi 3, 3, 16, 32
  254. rlwimi 3, 3, 16, 32
  255. rlwimi 3, 3, 16, 32
  256. rlwimi 3, 3, 16, 32
  257. rlwimi 3, 3, 16, 32
  258. rlwimi 3, 3, 16, 32
  259. rlwimi 3, 3, 16, 32
  260. rlwimi 3, 3, 16, 32
  261. rlwimi 3, 3, 16, 32
  262. rlwimi 3, 3, 16, 32
  263. rlwimi 3, 3, 16, 32
  264. rlwimi 3, 3, 16, 32
  265. rlwimi 3, 3, 16, 32
  266. blr
  267. END (test_rlwimi_16)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement