summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorAndree Buschmann <AndreeBuschmann@t-online.de>2010-05-24 17:13:48 +0000
committerAndree Buschmann <AndreeBuschmann@t-online.de>2010-05-24 17:13:48 +0000
commitd76a9316fbb1cc79e5672562282a419320e0441c (patch)
treea255ecea75edb2e9beae41e936f092f8bad12a4e /apps
parent1f5b9434daeda72ffa6d37357d3ed55c44c5c66e (diff)
downloadrockbox-d76a9316fbb1cc79e5672562282a419320e0441c.tar.gz
rockbox-d76a9316fbb1cc79e5672562282a419320e0441c.zip
Correct new memcpy/memset functionality in test_mem plugin. Use appropriate clobber list for arm asm.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26255 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps')
-rw-r--r--apps/plugins/test_mem.c34
1 files changed, 19 insertions, 15 deletions
diff --git a/apps/plugins/test_mem.c b/apps/plugins/test_mem.c
index 053d6a29ee..b184897966 100644
--- a/apps/plugins/test_mem.c
+++ b/apps/plugins/test_mem.c
@@ -43,15 +43,16 @@ void memset_test(volatile int *buf, int buf_size, int loop_cnt,
43 int last_tick = *rb->current_tick; 43 int last_tick = *rb->current_tick;
44 44
45 for(i=0; i < loop_cnt; i++) 45 for(i=0; i < loop_cnt; i++)
46 memset((void *)buf, 0xff, buf_size); 46 {
47 memset((void *)buf, 0xff, buf_size*sizeof(int));
48 }
47 49
48 delta = *rb->current_tick - last_tick; 50 delta = *rb->current_tick - last_tick;
49 delta = delta>0 ? delta : delta+1; 51 delta = delta>0 ? delta : delta+1;
50 dMB = dMB_PER_SEC(loop_cnt, delta); 52 dMB = dMB_PER_SEC(loop_cnt, delta);
51 rb->screens[0]->putsf(0, line, "%s st: %3d.%d MB/s (%2d ticks for %d MB)", 53 rb->screens[0]->putsf(0, line, "%s st: %3d.%d MB/s (%3d ticks for %d MB)",
52 ramtype, dMB/10, dMB%10, delta, 54 ramtype, dMB/10, dMB%10, delta,
53 (loop_cnt*BUF_SIZE*4)>>20); 55 (loop_cnt*BUF_SIZE*4)>>20);
54
55} 56}
56 57
57void memcpy_test(volatile int *buf, int buf_size, int loop_cnt, 58void memcpy_test(volatile int *buf, int buf_size, int loop_cnt,
@@ -60,16 +61,19 @@ void memcpy_test(volatile int *buf, int buf_size, int loop_cnt,
60 int delta, dMB, i; 61 int delta, dMB, i;
61 int last_tick = *rb->current_tick; 62 int last_tick = *rb->current_tick;
62 63
63 for(i=0; i < loop_cnt; i++) 64 /* double loop count to compensate for half size memcpy */
64 memcpy((void *)buf+(buf_size/2), (void *)buf, buf_size/2); 65 for(i=0; i < loop_cnt*2; i++)
66 {
67 memcpy((void *)buf+(buf_size*sizeof(int)/2),
68 (void *)buf, buf_size*sizeof(int)/2);
69 }
65 70
66 delta = *rb->current_tick - last_tick; 71 delta = *rb->current_tick - last_tick;
67 delta = delta>0 ? delta : delta+1; 72 delta = delta>0 ? delta : delta+1;
68 dMB = dMB_PER_SEC(loop_cnt, delta); 73 dMB = dMB_PER_SEC(loop_cnt, delta);
69 rb->screens[0]->putsf(0, line, "%s cp: %3d.%d MB/s (%2d ticks for %d MB)", 74 rb->screens[0]->putsf(0, line, "%s cp: %3d.%d MB/s (%3d ticks for %d MB)",
70 ramtype, dMB/10, dMB%10, delta, 75 ramtype, dMB/10, dMB%10, delta,
71 (loop_cnt*BUF_SIZE*4)>>21); 76 (loop_cnt*BUF_SIZE*4)>>21);
72
73} 77}
74 78
75void write_test(volatile int *buf, int buf_size, int loop_cnt, 79void write_test(volatile int *buf, int buf_size, int loop_cnt,
@@ -97,7 +101,7 @@ void write_test(volatile int *buf, int buf_size, int loop_cnt,
97 "bgt .outer_loop_read \n" 101 "bgt .outer_loop_read \n"
98 : 102 :
99 : [loops] "r" (loop_cnt), [size] "r" (buf_size), [buf_p] "r" (buf) 103 : [loops] "r" (loop_cnt), [size] "r" (buf_size), [buf_p] "r" (buf)
100 : "r0", "r1", "r2", "r3", "r4", "r5", "r6" 104 : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "memory", "cc"
101 ); 105 );
102#else 106#else
103 int i, j; 107 int i, j;
@@ -115,7 +119,7 @@ void write_test(volatile int *buf, int buf_size, int loop_cnt,
115 delta = *rb->current_tick - last_tick; 119 delta = *rb->current_tick - last_tick;
116 delta = delta>0 ? delta : delta+1; 120 delta = delta>0 ? delta : delta+1;
117 dMB = dMB_PER_SEC(loop_cnt, delta); 121 dMB = dMB_PER_SEC(loop_cnt, delta);
118 rb->screens[0]->putsf(0, line, "%s wr: %3d.%d MB/s (%2d ticks for %d MB)", 122 rb->screens[0]->putsf(0, line, "%s wr: %3d.%d MB/s (%3d ticks for %d MB)",
119 ramtype, dMB/10, dMB%10, delta, 123 ramtype, dMB/10, dMB%10, delta,
120 (loop_cnt*BUF_SIZE*4)>>20); 124 (loop_cnt*BUF_SIZE*4)>>20);
121} 125}
@@ -141,7 +145,7 @@ void read_test(volatile int *buf, int buf_size, int loop_cnt,
141 "bgt .outer_loop_write \n" 145 "bgt .outer_loop_write \n"
142 : 146 :
143 : [loops] "r" (loop_cnt), [size] "r" (buf_size), [buf_p] "r" (buf) 147 : [loops] "r" (loop_cnt), [size] "r" (buf_size), [buf_p] "r" (buf)
144 : "r0", "r1", "r2", "r3", "r4", "r5", "r6" 148 : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "memory", "cc"
145 ); 149 );
146#else 150#else
147 int i, j, x; 151 int i, j, x;
@@ -159,7 +163,7 @@ void read_test(volatile int *buf, int buf_size, int loop_cnt,
159 delta = *rb->current_tick - last_tick; 163 delta = *rb->current_tick - last_tick;
160 delta = delta>0 ? delta : delta+1; 164 delta = delta>0 ? delta : delta+1;
161 dMB = dMB_PER_SEC(loop_cnt, delta); 165 dMB = dMB_PER_SEC(loop_cnt, delta);
162 rb->screens[0]->putsf(0, line, "%s rd: %3d.%d MB/s (%2d ticks for %d MB)", 166 rb->screens[0]->putsf(0, line, "%s rd: %3d.%d MB/s (%3d ticks for %d MB)",
163 ramtype, dMB/10, dMB%10, delta, 167 ramtype, dMB/10, dMB%10, delta,
164 (loop_cnt*BUF_SIZE*4)>>20); 168 (loop_cnt*BUF_SIZE*4)>>20);
165} 169}
@@ -189,13 +193,13 @@ enum plugin_status plugin_start(const void* parameter)
189#endif 193#endif
190 rb->screens[0]->putsf(0, line++, "loop#: %d", ++count); 194 rb->screens[0]->putsf(0, line++, "loop#: %d", ++count);
191 195
192 read_test (buf_dram, BUF_SIZE, LOOP_REPEAT_DRAM, line++, "DRAM"); 196 read_test (buf_dram, BUF_SIZE, LOOP_REPEAT_DRAM, line++, "DRAM");
193 write_test(buf_dram, BUF_SIZE, LOOP_REPEAT_DRAM, line++, "DRAM"); 197 write_test (buf_dram, BUF_SIZE, LOOP_REPEAT_DRAM, line++, "DRAM");
194 memset_test(buf_dram, BUF_SIZE, LOOP_REPEAT_DRAM, line++, "DRAM"); 198 memset_test(buf_dram, BUF_SIZE, LOOP_REPEAT_DRAM, line++, "DRAM");
195 memcpy_test(buf_dram, BUF_SIZE, LOOP_REPEAT_DRAM, line++, "DRAM"); 199 memcpy_test(buf_dram, BUF_SIZE, LOOP_REPEAT_DRAM, line++, "DRAM");
196#if defined(PLUGIN_USE_IRAM) 200#if defined(PLUGIN_USE_IRAM)
197 read_test (buf_iram, BUF_SIZE, LOOP_REPEAT_IRAM, line++, "IRAM"); 201 read_test (buf_iram, BUF_SIZE, LOOP_REPEAT_IRAM, line++, "IRAM");
198 write_test(buf_iram, BUF_SIZE, LOOP_REPEAT_IRAM, line++, "IRAM"); 202 write_test (buf_iram, BUF_SIZE, LOOP_REPEAT_IRAM, line++, "IRAM");
199 memset_test(buf_iram, BUF_SIZE, LOOP_REPEAT_DRAM, line++, "IRAM"); 203 memset_test(buf_iram, BUF_SIZE, LOOP_REPEAT_DRAM, line++, "IRAM");
200 memcpy_test(buf_iram, BUF_SIZE, LOOP_REPEAT_DRAM, line++, "IRAM"); 204 memcpy_test(buf_iram, BUF_SIZE, LOOP_REPEAT_DRAM, line++, "IRAM");
201#endif 205#endif