Subversion Repositories HelenOS

Rev

Rev 363 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 363 Rev 390
Line 30... Line 30...
30
#define __ia32_MEMSTR_H__
30
#define __ia32_MEMSTR_H__
31
 
31
 
32
extern void memsetw(__address dst, size_t cnt, __u16 x);
32
extern void memsetw(__address dst, size_t cnt, __u16 x);
33
extern void memsetb(__address dst, size_t cnt, __u8 x);
33
extern void memsetb(__address dst, size_t cnt, __u8 x);
34
 
34
 
35
extern int memcmp(__address src, __address dst, int cnt);
-
 
36
 
-
 
37
/** Copy memory
35
/** Copy memory
38
 *
36
 *
39
 * Copy a given number of bytes (3rd argument)
37
 * Copy a given number of bytes (3rd argument)
40
 * from the memory location defined by 2nd argument
38
 * from the memory location defined by 2nd argument
41
 * to the memory location defined by 1st argument.
39
 * to the memory location defined by 1st argument.
Line 69... Line 67...
69
 
67
 
70
        return dst;
68
        return dst;
71
}
69
}
72
 
70
 
73
 
71
 
-
 
72
/** Compare memory
-
 
73
 *
-
 
74
 * Compare a given number of bytes (3rd argument)
-
 
75
 * at memory locations defined by 1st and 2nd argument
-
 
76
 * for equality. If memory is equal, returns 0.
-
 
77
 *
-
 
78
 * @param pointer 1
-
 
79
 * @param pointer 2
-
 
80
 * @param number of bytes
-
 
81
 * @return 0 on match or non-zero if different
-
 
82
 */
-
 
83
static inline int memcmp(const void * mem1, const void * mem2, size_t cnt)
-
 
84
{
-
 
85
    __u32 d0, d1, d2;
-
 
86
    int ret;
-
 
87
   
-
 
88
    __asm__ (
-
 
89
        "repe cmpsb\n\t"
-
 
90
        "je 1f\n\t"
-
 
91
        "movl %3, %0\n\t"
-
 
92
        "addl $1, %0\n\t"
-
 
93
        "1:\n"
-
 
94
        : "=a" (ret), "=%S" (d0), "=&D" (d1), "=&c" (d2)
-
 
95
        : "0" (0), "1" (mem1), "2" (mem2), "3" (cnt)
-
 
96
    );
-
 
97
   
-
 
98
    return ret;
-
 
99
}
74
 
100
 
75
#endif
101
#endif