Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdint.h>
- #include <stdlib.h>
- #include <string.h>
- void
- memset1(void *d, uint32_t p, size_t n)
- {
- size_t i;
- uint32_t *ptr = (uint32_t *)d;
- for (i=0; i<n; i++) {
- ptr[i] = p;
- }
- }
- void
- memset2(void *d, uint32_t p, size_t n)
- {
- memset(d, p, n*sizeof(uint32_t));
- }
- void
- memset3(void *d, uint32_t p, size_t n)
- {
- asm volatile (
- "cld\n\t"
- "rep stosl"
- : "+D" (d), "+c" (n)
- : "a" (p)
- : "memory");
- }
- void
- memset4(void *start, uint32_t colour, size_t count)
- {
- asm volatile(
- "cld\n\t"
- "rep\n\t"
- "stosl"
- : /* no output registers */
- : "c" (count), "a" (colour), "D" (start));
- }
- int
- main()
- {
- uint32_t *data;
- size_t i, n = 1024*1024;
- uint32_t fill = 0xdeadbeaf;
- data = malloc(n*sizeof(uint32_t));
- for (i=0; i<1000; i++) {
- /*memset1(data, fill, n);*/
- /*memset2(data, fill, n);*/
- /*memset3(data, fill, n);*/
- memset4(data, fill, n);
- }
- for (i=0; i<n; i++) {
- if (data[i] != fill) {
- printf("error! %x at %u\n", data[i], i);
- break;
- }
- }
- free(data);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment