Changeset 104dc0b in mainline
- Timestamp:
- 2005-09-18T21:39:56Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d9430f7
- Parents:
- 650d976
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia32/include/asm.h
r650d976 r104dc0b 139 139 pri_t v; 140 140 __asm__ volatile ( 141 "pushf\n "142 "popl %0\n "141 "pushf\n\t" 142 "popl %0\n\t" 143 143 "sti\n" 144 144 : "=r" (v) … … 155 155 pri_t v; 156 156 __asm__ volatile ( 157 "pushf\n "158 "popl %0\n "157 "pushf\n\t" 158 "popl %0\n\t" 159 159 "cli\n" 160 160 : "=r" (v) … … 169 169 static inline void cpu_priority_restore(pri_t pri) { 170 170 __asm__ volatile ( 171 "pushl %0\n "171 "pushl %0\n\t" 172 172 "popf\n" 173 173 : : "r" (pri) … … 182 182 pri_t v; 183 183 __asm__ volatile ( 184 "pushf\n "184 "pushf\n\t" 185 185 "popl %0\n" 186 186 : "=r" (v) … … 213 213 } 214 214 215 /** Copy memory 216 * 217 * Copy a given number of bytes (3rd argument) 218 * from the memory location defined by 2nd argument 219 * to the memory location defined by 1st argument. 220 * The memory areas cannot overlap. 221 * 222 * @param destination 223 * @param source 224 * @param number of bytes 225 * @return destination 226 */ 227 static inline void * memcpy(void * dst, const void * src, size_t cnt) 228 { 229 __u32 d0, d1, d2; 230 231 __asm__ __volatile__( 232 "rep movsl\n\t" 233 "movl %4, %%ecx\n\t" 234 "andl $3, %%ecx\n\t" 235 "jz 1f\n\t" 236 "rep movsb\n\t" 237 "1:\n" 238 : "=&c" (d0), "=&D" (d1), "=&S" (d2) 239 : "0" (cnt / 4), "g" (cnt), "1" ((__u32) dst), "2" ((__u32) src) 240 : "memory"); 241 242 return dst; 243 } 244 215 245 216 246 #endif -
arch/ia32/src/asm.S
r650d976 r104dc0b 38 38 .global enable_l_apic_in_msr 39 39 .global interrupt_handlers 40 .global memcpy41 40 .global memsetb 42 41 .global memsetw … … 153 152 # handler 192 256 154 153 h_end: 155 156 157 ## Copy memory158 #159 # Copy a given number of bytes (3rd argument)160 # from the memory location defined by 2nd argument161 # to the memory location defined by 1st argument.162 # The memory areas cannot overlap.163 #164 SRC=16165 DST=12166 CNT=20167 memcpy:168 push %esi169 push %edi170 171 movl CNT(%esp),%ecx172 movl DST(%esp),%edi173 movl SRC(%esp),%esi174 175 rep movsb %ds:(%esi),%es:(%edi)176 177 pop %edi178 pop %esi179 ret180 154 181 155 -
include/memstr.h
r650d976 r104dc0b 32 32 #include <typedefs.h> 33 33 #include <arch/types.h> 34 35 #define memcpy(dst, src, cnt) __builtin_memcpy((dst), (src), (cnt)); 34 #include <arch/asm.h> 36 35 37 36 extern void memsetw(__address dst, size_t cnt, __u16 x);
Note:
See TracChangeset
for help on using the changeset viewer.