[ create a new paste ] login | about

Link: http://codepad.org/s0KaWtZ2    [ raw code | output | fork ]

C, pasted on Feb 26:
#include <stdio.h>

typedef char chars[1000000];
chars t, a, ta;

long long rdtsc();
__asm ("rdtsc:pusha;cpuid;popa;rdtsc;ret;");

void fun1() {
    memset(a, 3, 1000000);
}

void fun2() {
    int i;
    for (i=0; i<sizeof(a)/4; i++) ((int*)a)[i]=0x03030303;
}

void fun3() {
    __asm volatile(
        "cld;rep stosb":
        :
        "c"(sizeof(a)),
        "a"(3),
        "D"(a)
    );
}

void fun4() {
    __asm volatile(
        "cld;rep stosl":
        :
        "c"(sizeof(a)/4),
        "a"(0x03030303),
        "D"(a)
    );
}

int main() {
    long long t;
    int i;
#if 1
    for (i=0; i<110; i++) {
        t = rdtsc();
        fun1();
        printf ("%8lld", rdtsc()-t);

        t = rdtsc();
        fun2();
        printf ("%8lld", rdtsc()-t);

        t = rdtsc();
        fun3();
        printf ("%8lld", rdtsc()-t);

        t = rdtsc();
        fun4();
        printf ("%8lld\n", rdtsc()-t);
    }
#else
    for (i=0; i<sizeof(a)-1; i++)
        b[i] = 1;
    b[i] = 0;
    fun4();
    return strcmp(a, b);
#endif
    return 0;
}


Output:
 2544312  500640  107736  107712
  107536  500240  107576  107536
  107520  500236  107476  107520
  107576  500272  107600  107444
  107404  523444  108048  107736
  107868  500272  107584  107588
  107572  509288  108004  107764
  107900  500580  107844  157556
  108772  505496  107564  107548
  107412  500236  107616  107536
  107584  500228  107588  107428
  107656  500232  107696  107652
  107940  500236  107520  107412
  107940  523996  107584  107604
  107628  500232  107464  107356
  107372  501612  107428  107316
  107488  563536  113080  107712
  112532  500244  107488  107240
  107500  500216  107428  107384
  107676  500240  107624  107396
  107488  500244  107464  107424
  107376  504284  128772  107980
  107976  500248  107528  107376
  107336  501860  113956  107432
  107424  500244  107452  107512
  134880  505664  107404  107336
  107592  500224  107448  107532
  107664  500236  114480  107928
  112496  506092  113840  116816
  111752  508908  111844  107608
  107680  500916  107624  108012
  118616  530700  114704  120200
  113004  508868  107828  107592
  107668  529800  112792  107472
  107576  500244  107980  107732
  107676  501316  108320  108212
  107780  500236  107588  107420
  107632  500380  107428  107392
  107488  501100  115952  130200
  108584  501976  107732  107684
  108124  500848  110992  107484
  107436  500356  107492  107432
  107432  542436  107516  107616
  107444  500232  107504  107412
  107372  500236  107764  107460
  107516  500232  107536  107448
  107944  500232  107508  107648
  107456  513580  107672  107436
  107696  500232  107412  107424
  107380  502460  107476  107428
  109940  500252  133696  107796
  112420  501744  107716  107664
  112780  500252  107672  107476
  107432  500224  107532  107432
  107464  500244  107404  107388
  107592  500236  107460  107324
  120508  505756  107392  107448
  107480  500244  114408  107500
  110756  500240  107400  107440
  107392  526704  112304  107496
  107560  500236  107556  107576
  107636  500232  107544  107416
  107344  500236  107580  107340
  107584  500232  107496  107452
  107616  500236  107468  107408
  107444  500480  107484  107484
  107284  500236  113392  107396
  107436  500252  107520  107564
  130632  504896  107452  107424
  107528  500244  107472  107536
  107860  500240  107512  107380
  107720  500236  107512  107384
  107412  500236  107464  107416
  107412  523332  107880  107480
  107700  500240  107556  107432
  107448  504304  114944  116116
  113388  551388  115508  119636
  114056  508856  113740  107612
  116616  501484  107972  108316
  108604  501016  107916  107492
  107416  500712  107672  126864
  128768  501656  118404  107884
  107820  500240  107520  114512
  107480  507012  107432  114500
  107712  500244  107604  107344
  107348  540304  107360  107404
  107516  500224  107572  107380
  107380  500228  107416  107564
  107432  500232  107516  107284
  107444  501700  107448  107416
  107468  515216  107832  107376
  107544  500236  107352  107380
  107516  501628  107508  107376
  107440  500232  134912  107768
  107924  504608  107440  107356
  107404  500228  107376  107380
  107568  500236  107444  107408
  107400  500232  107404  107356
  107440  500236  107608  107812
  107592  500232  107568  107416
  107428  500228  107444  107472
  107572  502524  107452  107384
  107448  523784  112628  107488
  107512  500244  107464  107380
  107524  500236  107464  107404
  107380  500240  107452  107312
  107392  500244  107544  107448
  107396  525224  128760  108196
  108280  500240  107508  107380
  107528  509228  113396  107312


Create a new paste based on this one


Comments: