[v2] Introduce the hacky call (old ud2/signal machinery is removed)
The hacky call uses custom calling conversion and an assembly thunk.
It is considerably faster that a normal call for the caller
if it is not executed (it is intended for slow paths from hot functions).
The trick is that the call preserves all registers and the compiler
does not treat it as a call.

The speedup is 18-22%.

With normal call (before):
<     write1 tot 689 size 2786 rsp 11 call  1 load 62 store 14 sh 100 mov 206 lea  15 ud2  1 cmp  96
<     write2 tot 690 size 2786 rsp 11 call  1 load 62 store 14 sh 100 mov 205 lea  15 ud2  1 cmp  96
<     write4 tot 690 size 2786 rsp 11 call  1 load 62 store 14 sh 100 mov 205 lea  15 ud2  1 cmp  96
<     write8 tot 690 size 2786 rsp 11 call  1 load 62 store 14 sh 100 mov 205 lea  15 ud2  1 cmp  96
<      read1 tot 674 size 2709 rsp 11 call  1 load 55 store 14 sh 100 mov 185 lea  15 ud2  1 cmp  98
<      read2 tot 678 size 2725 rsp 11 call  1 load 55 store 14 sh 100 mov 185 lea  15 ud2  1 cmp  98
<      read4 tot 678 size 2725 rsp 11 call  1 load 55 store 14 sh 100 mov 185 lea  15 ud2  1 cmp  98
<      read8 tot 678 size 2725 rsp 11 call  1 load 55 store 14 sh 100 mov 185 lea  15 ud2  1 cmp  98
< func_entry tot  29 size  124 rsp  4 call  1 load  3 store  2 sh   2 mov  10 lea   0 ud2  0 cmp   1
<  func_exit tot  23 size   92 rsp  0 call  1 load  1 store  0 sh   2 mov   5 lea   0 ud2  0 cmp   1
[       OK ] DISABLED_BENCH.Mop1Write (2356 ms)
[       OK ] DISABLED_BENCH.Mop2Write (2258 ms)
[       OK ] DISABLED_BENCH.Mop4Write (2258 ms)
[       OK ] DISABLED_BENCH.Mop8Write (2258 ms)
[       OK ] DISABLED_BENCH.Mop1Read (2252 ms)
[       OK ] DISABLED_BENCH.Mop2Read (2264 ms)
[       OK ] DISABLED_BENCH.Mop4Read (2254 ms)
[       OK ] DISABLED_BENCH.Mop8Read (2255 ms)

With hacky call (after):
>     write1 tot 682 size 2746 rsp  1 call  2 load 57 store  9 sh 100 mov 194 lea  15 ud2  0 cmp  95
>     write2 tot 682 size 2746 rsp  1 call  2 load 57 store  9 sh 100 mov 193 lea  15 ud2  0 cmp  95
>     write4 tot 682 size 2746 rsp  1 call  2 load 57 store  9 sh 100 mov 193 lea  15 ud2  0 cmp  95
>     write8 tot 682 size 2746 rsp  1 call  2 load 57 store  9 sh 100 mov 193 lea  15 ud2  0 cmp  95
>      read1 tot 668 size 2679 rsp  1 call  2 load 50 store  9 sh 100 mov 173 lea  15 ud2  0 cmp  97
>      read2 tot 668 size 2679 rsp  1 call  2 load 50 store  9 sh 100 mov 173 lea  15 ud2  0 cmp  97
>      read4 tot 668 size 2679 rsp  1 call  2 load 50 store  9 sh 100 mov 173 lea  15 ud2  0 cmp  97
>      read8 tot 668 size 2679 rsp  1 call  2 load 50 store  9 sh 100 mov 173 lea  15 ud2  0 cmp  97
> func_entry tot  19 size   74 rsp  0 call  1 load  1 store  0 sh   2 mov   4 lea   0 ud2  0 cmp   1
>  func_exit tot  19 size   71 rsp  0 call  1 load  1 store  0 sh   2 mov   4 lea   0 ud2  0 cmp   1
[       OK ] DISABLED_BENCH.Mop1Write (1893 ms)
[       OK ] DISABLED_BENCH.Mop2Write (1859 ms)
[       OK ] DISABLED_BENCH.Mop4Write (1835 ms)
[       OK ] DISABLED_BENCH.Mop8Write (1865 ms)
[       OK ] DISABLED_BENCH.Mop1Read (1765 ms)
[       OK ] DISABLED_BENCH.Mop2Read (1794 ms)
[       OK ] DISABLED_BENCH.Mop4Read (1770 ms)
[       OK ] DISABLED_BENCH.Mop8Read (1807 ms)



git-svn-id: http://data-race-test.googlecode.com/svn/trunk@4050 93a3164d-3a44-0410-8ae5-4baa038b0729
[v2] remove ud2 from the analyze script


git-svn-id: http://data-race-test.googlecode.com/svn/trunk@4051 93a3164d-3a44-0410-8ae5-4baa038b0729
[v2] while we are testing on single-threaded benchmarks, emulate some synchronization activity



git-svn-id: http://data-race-test.googlecode.com/svn/trunk@4052 93a3164d-3a44-0410-8ae5-4baa038b0729